亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? lcl_ng.c

?? package of develop dns
?? C
字號(hào):
/* * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") * Copyright (c) 1996-1999 by Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */#if !defined(LINT) && !defined(CODECENTER)static const char rcsid[] = "$Id: lcl_ng.c,v 1.1.206.1 2004/03/09 08:33:38 marka Exp $";#endif/* Imports */#include "port_before.h"#include <sys/types.h>#include <netinet/in.h>#include <arpa/nameser.h>#include <resolv.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <irs.h>#include <isc/memcluster.h>#include "port_after.h"#include "irs_p.h"#include "lcl_p.h"/* Definitions */#define NG_HOST         0       /* Host name */#define NG_USER         1       /* User name */#define NG_DOM          2       /* and Domain name */#define LINSIZ		1024    /* Length of netgroup file line *//* * XXX Warning XXX * This code is a hack-and-slash special.  It realy needs to be * rewritten with things like strdup, and realloc in mind. * More reasonable data structures would not be a bad thing. *//* * Static Variables and functions used by setnetgrent(), getnetgrent() and * endnetgrent(). * There are two linked lists: * - linelist is just used by setnetgrent() to parse the net group file via. *   parse_netgrp() * - netgrp is the list of entries for the current netgroup */struct linelist {	struct linelist *l_next;	/* Chain ptr. */	int		l_parsed;	/* Flag for cycles */	char *		l_groupname;	/* Name of netgroup */	char *		l_line;		/* Netgroup entrie(s) to be parsed */};struct ng_old_struct {	struct ng_old_struct *ng_next;	/* Chain ptr */	char *		ng_str[3];	/* Field pointers, see below */};struct pvt {	FILE			*fp;	struct linelist		*linehead;	struct ng_old_struct    *nextgrp;	struct {		struct ng_old_struct	*gr;		char			*grname;	} grouphead;};/* Forward */static void 		ng_rewind(struct irs_ng *, const char*);static void 		ng_close(struct irs_ng *);static int		ng_next(struct irs_ng *, const char **,				const char **, const char **);static int 		ng_test(struct irs_ng *, const char *,				const char *, const char *,				const char *);static void		ng_minimize(struct irs_ng *);static int 		parse_netgrp(struct irs_ng *, const char*);static struct linelist *read_for_group(struct irs_ng *, const char *);static void		freelists(struct irs_ng *);/* Public */struct irs_ng *irs_lcl_ng(struct irs_acc *this) {	struct irs_ng *ng;	struct pvt *pvt;	UNUSED(this);		if (!(ng = memget(sizeof *ng))) {		errno = ENOMEM;		return (NULL);	}	memset(ng, 0x5e, sizeof *ng);	if (!(pvt = memget(sizeof *pvt))) {		memput(ng, sizeof *ng);		errno = ENOMEM;		return (NULL);	}	memset(pvt, 0, sizeof *pvt);	ng->private = pvt;	ng->close = ng_close;	ng->next = ng_next;	ng->test = ng_test;	ng->rewind = ng_rewind;	ng->minimize = ng_minimize;	return (ng);}/* Methods */static voidng_close(struct irs_ng *this) {	struct pvt *pvt = (struct pvt *)this->private;		if (pvt->fp != NULL)		fclose(pvt->fp);	freelists(this);	memput(pvt, sizeof *pvt);	memput(this, sizeof *this);}	/* * Parse the netgroup file looking for the netgroup and build the list * of netgrp structures. Let parse_netgrp() and read_for_group() do * most of the work. */static voidng_rewind(struct irs_ng *this, const char *group) {	struct pvt *pvt = (struct pvt *)this->private;		if (pvt->fp != NULL && fseek(pvt->fp, SEEK_CUR, 0L) == -1) {		fclose(pvt->fp);		pvt->fp = NULL;	}	if (pvt->fp == NULL || pvt->grouphead.gr == NULL || 	    strcmp(group, pvt->grouphead.grname)) {		freelists(this);		if (pvt->fp != NULL)			fclose(pvt->fp);		pvt->fp = fopen(_PATH_NETGROUP, "r");		if (pvt->fp != NULL) {			if (parse_netgrp(this, group))				freelists(this);			if (!(pvt->grouphead.grname = strdup(group)))				freelists(this);			fclose(pvt->fp);			pvt->fp = NULL;		}	}	pvt->nextgrp = pvt->grouphead.gr;}/* * Get the next netgroup off the list. */static intng_next(struct irs_ng *this, const char **host, const char **user,	const char **domain){	struct pvt *pvt = (struct pvt *)this->private;		if (pvt->nextgrp) {		*host = pvt->nextgrp->ng_str[NG_HOST];		*user = pvt->nextgrp->ng_str[NG_USER];		*domain = pvt->nextgrp->ng_str[NG_DOM];		pvt->nextgrp = pvt->nextgrp->ng_next;		return (1);	}	return (0);}/* * Search for a match in a netgroup. */static intng_test(struct irs_ng *this, const char *name,	const char *host, const char *user, const char *domain){	const char *ng_host, *ng_user, *ng_domain;	ng_rewind(this, name);	while (ng_next(this, &ng_host, &ng_user, &ng_domain))		if ((host == NULL || ng_host == NULL || 		     !strcmp(host, ng_host)) &&		    (user ==  NULL || ng_user == NULL || 		     !strcmp(user, ng_user)) &&		    (domain == NULL || ng_domain == NULL ||		     !strcmp(domain, ng_domain))) {			freelists(this);			return (1);		}	freelists(this);	return (0);}static voidng_minimize(struct irs_ng *this) {	struct pvt *pvt = (struct pvt *)this->private;	if (pvt->fp != NULL) {		(void)fclose(pvt->fp);		pvt->fp = NULL;	}}/* Private *//* * endnetgrent() - cleanup */static voidfreelists(struct irs_ng *this) {	struct pvt *pvt = (struct pvt *)this->private;	struct linelist *lp, *olp;	struct ng_old_struct *gp, *ogp;	lp = pvt->linehead;	while (lp) {		olp = lp;		lp = lp->l_next;		free(olp->l_groupname);		free(olp->l_line);		free((char *)olp);	}	pvt->linehead = NULL;	if (pvt->grouphead.grname) {		free(pvt->grouphead.grname);		pvt->grouphead.grname = NULL;	}	gp = pvt->grouphead.gr;	while (gp) {		ogp = gp;		gp = gp->ng_next;		if (ogp->ng_str[NG_HOST])			free(ogp->ng_str[NG_HOST]);		if (ogp->ng_str[NG_USER])			free(ogp->ng_str[NG_USER]);		if (ogp->ng_str[NG_DOM])			free(ogp->ng_str[NG_DOM]);		free((char *)ogp);	}	pvt->grouphead.gr = NULL;}/* * Parse the netgroup file setting up the linked lists. */static intparse_netgrp(struct irs_ng *this, const char *group) {	struct pvt *pvt = (struct pvt *)this->private;	char *spos, *epos;	int len, strpos;	char *pos, *gpos;	struct ng_old_struct *grp;	struct linelist *lp = pvt->linehead;        /*         * First, see if the line has already been read in.         */	while (lp) {		if (!strcmp(group, lp->l_groupname))			break;		lp = lp->l_next;	}	if (lp == NULL &&	    (lp = read_for_group(this, group)) == NULL)		return (1);	if (lp->l_parsed) {		/*fprintf(stderr, "Cycle in netgroup %s\n", lp->l_groupname);*/		return (1);	} else		lp->l_parsed = 1;	pos = lp->l_line;	while (*pos != '\0') {		if (*pos == '(') {			if (!(grp = malloc(sizeof (struct ng_old_struct)))) {				freelists(this);				errno = ENOMEM;				return (1);			}			memset(grp, 0, sizeof (struct ng_old_struct));			grp->ng_next = pvt->grouphead.gr;			pvt->grouphead.gr = grp;			pos++;			gpos = strsep(&pos, ")");			for (strpos = 0; strpos < 3; strpos++) {				if ((spos = strsep(&gpos, ","))) {					while (*spos == ' ' || *spos == '\t')						spos++;					if ((epos = strpbrk(spos, " \t"))) {						*epos = '\0';						len = epos - spos;					} else						len = strlen(spos);					if (len > 0) {						if(!(grp->ng_str[strpos] 						   =  (char *)						   malloc(len + 1))) {							freelists(this);							return (1);						}						memcpy(grp->ng_str[strpos],						       spos,						       len + 1);					}				} else					goto errout;			}		} else {			spos = strsep(&pos, ", \t");			if (spos != NULL && parse_netgrp(this, spos)) {				freelists(this);				return (1);			}		}		if (pos == NULL)			break;		while (*pos == ' ' || *pos == ',' || *pos == '\t')			pos++;	}	return (0); errout:	/*fprintf(stderr, "Bad netgroup %s at ..%s\n", lp->l_groupname,		  spos);*/	return (1);}/* * Read the netgroup file and save lines until the line for the netgroup * is found. Return 1 if eof is encountered. */static struct linelist *read_for_group(struct irs_ng *this, const char *group) {	struct pvt *pvt = (struct pvt *)this->private;	char *pos, *spos, *linep = NULL, *olinep;	int len, olen, cont;	struct linelist *lp;	char line[LINSIZ + 1];		while (fgets(line, LINSIZ, pvt->fp) != NULL) {		pos = line;		if (*pos == '#')			continue;		while (*pos == ' ' || *pos == '\t')			pos++;		spos = pos;		while (*pos != ' ' && *pos != '\t' && *pos != '\n' &&			*pos != '\0')			pos++;		len = pos - spos;		while (*pos == ' ' || *pos == '\t')			pos++;		if (*pos != '\n' && *pos != '\0') {			if (!(lp = malloc(sizeof (*lp)))) {				freelists(this);				return (NULL);			}			lp->l_parsed = 0;			if (!(lp->l_groupname = malloc(len + 1))) {				free(lp);				freelists(this);				return (NULL);			}			memcpy(lp->l_groupname, spos,  len);			*(lp->l_groupname + len) = '\0';			len = strlen(pos);			olen = 0;			olinep = NULL;			/*			 * Loop around handling line continuations.			 */			do {				if (*(pos + len - 1) == '\n')					len--;				if (*(pos + len - 1) == '\\') {					len--;					cont = 1;				} else					cont = 0;				if (len > 0) {					if (!(linep = malloc(olen + len + 1))){						if (olen > 0)							free(olinep);						free(lp->l_groupname);						free(lp);						freelists(this);						errno = ENOMEM;						return (NULL);					}					if (olen > 0) {						memcpy(linep, olinep, olen);						free(olinep);					}					memcpy(linep + olen, pos, len);					olen += len;					*(linep + olen) = '\0';					olinep = linep;				}				if (cont) {					if (fgets(line, LINSIZ, pvt->fp)) {						pos = line;						len = strlen(pos);					} else						cont = 0;				}			} while (cont);			lp->l_line = linep;			lp->l_next = pvt->linehead;			pvt->linehead = lp;						/*			 * If this is the one we wanted, we are done.			 */			if (!strcmp(lp->l_groupname, group))				return (lp);		}	}	return (NULL);}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区国产盗摄色噜噜| 蜜桃视频第一区免费观看| 久久精品欧美一区二区三区麻豆| 欧美精品aⅴ在线视频| 欧美性视频一区二区三区| 91国产福利在线| 欧美私模裸体表演在线观看| 在线视频欧美区| 欧美视频自拍偷拍| 欧美日韩一区高清| 在线不卡一区二区| 日韩一区二区在线观看| 日韩一区二区三区视频在线观看| 69久久夜色精品国产69蝌蚪网| 欧美一区二区在线播放| 欧美一级片在线| 日韩精品一区在线| 久久只精品国产| 国产女同互慰高潮91漫画| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美国产日韩精品免费观看| 欧美激情资源网| 最新中文字幕一区二区三区| 一区二区三区中文字幕电影| 亚洲福利视频一区二区| 免费观看在线色综合| 国产一区二区三区免费看| 国产麻豆一精品一av一免费 | 国产一区 二区 三区一级| 国产精品一级片在线观看| 成人黄页毛片网站| 在线观看成人小视频| 5566中文字幕一区二区电影| 久久综合九色综合97婷婷女人| 久久久91精品国产一区二区精品| 成人免费在线视频| 三级欧美韩日大片在线看| 国产一区二区三区久久久| 91在线精品一区二区| 欧美精品一卡两卡| 国产亚洲欧美一级| 亚洲综合丝袜美腿| 精品一区二区三区日韩| 99久久久免费精品国产一区二区| 欧美日韩一区在线| 久久久精品欧美丰满| 亚洲激情自拍视频| 精品一区二区三区在线视频| 91麻豆精品一区二区三区| 欧美一区日本一区韩国一区| 国产精品狼人久久影院观看方式| 五月婷婷久久综合| 成人免费av网站| 欧美一二三四在线| 亚洲视频在线一区二区| 看片的网站亚洲| 色综合夜色一区| 久久人人爽爽爽人久久久| 一卡二卡三卡日韩欧美| 国产精品99久久久久久宅男| 欧美网站一区二区| 国产精品久久影院| 久久精品国产99久久6| 91浏览器入口在线观看| 久久综合九色综合欧美就去吻| 亚洲一区二区在线播放相泽| 国产成人午夜精品影院观看视频| 欧美日韩另类国产亚洲欧美一级| 中文字幕精品一区| 美女视频黄久久| 欧美私模裸体表演在线观看| 欧美国产日韩一二三区| 免费成人你懂的| 色狠狠桃花综合| 亚洲国产岛国毛片在线| 久久se这里有精品| 在线不卡的av| 亚洲在线视频一区| 99国产一区二区三精品乱码| 欧美精品一区二| 日本成人在线网站| 欧美色图激情小说| 亚洲欧美日韩精品久久久久| 国产91精品一区二区麻豆网站| 欧美一级爆毛片| 丝袜诱惑亚洲看片| 欧美日韩精品一区二区三区蜜桃| 亚洲区小说区图片区qvod| 国产ts人妖一区二区| 精品美女被调教视频大全网站| 婷婷中文字幕一区三区| 欧美怡红院视频| 亚洲色图视频网站| 91在线观看美女| 国产精品嫩草影院av蜜臀| 国产不卡在线视频| 久久精品一级爱片| 国产精品69毛片高清亚洲| 久久久综合九色合综国产精品| 麻豆精品视频在线观看免费| 91精品国产综合久久香蕉的特点| 亚欧色一区w666天堂| 欧美三电影在线| 亚洲成av人在线观看| 欧美日免费三级在线| 午夜精品视频在线观看| 欧美日韩久久不卡| 日韩高清不卡一区二区三区| 欧美丰满少妇xxxxx高潮对白| 五月天网站亚洲| 91精品婷婷国产综合久久| 全部av―极品视觉盛宴亚洲| 日韩一区二区在线看片| 久久99国内精品| 久久精品在线免费观看| 成人黄色电影在线 | 国产色综合久久| 国产精品1区二区.| 国产精品久久久久久久浪潮网站| av中文字幕亚洲| 一区二区三区日韩精品视频| 欧美日韩中字一区| 麻豆91免费观看| 国产日韩欧美制服另类| av在线不卡观看免费观看| 一区二区三区在线视频免费观看| 欧美三级乱人伦电影| 日本女人一区二区三区| 久久女同互慰一区二区三区| 成人av小说网| 亚洲综合色视频| 日韩一级高清毛片| 国产馆精品极品| 亚洲另类色综合网站| 欧美日韩免费一区二区三区 | 亚洲精品日韩综合观看成人91| 91日韩一区二区三区| 亚洲综合一区在线| 5566中文字幕一区二区电影| 国产一区二区三区在线观看精品| 国产精品久久久久久久久久久免费看| 91老师片黄在线观看| 亚洲电影在线免费观看| 久久亚洲精华国产精华液| av高清久久久| 午夜精品久久久久久久99水蜜桃 | 中文字幕av一区二区三区| 91国偷自产一区二区三区成为亚洲经典| 天天av天天翘天天综合网色鬼国产| 欧美电视剧在线观看完整版| av在线不卡电影| 麻豆91精品视频| 综合欧美亚洲日本| 欧美成人在线直播| 91视视频在线观看入口直接观看www | 精品伦理精品一区| 91在线视频官网| 奇米色777欧美一区二区| 中文字幕一区二区三区乱码在线| 在线成人免费视频| 成人午夜激情在线| 日本最新不卡在线| 亚洲色欲色欲www在线观看| 日韩一卡二卡三卡| 色婷婷国产精品| 国产乱码精品一区二区三区av| 亚洲一区二区精品视频| 国产欧美一区二区三区在线看蜜臀 | 欧美伊人久久大香线蕉综合69| 国产最新精品精品你懂的| 亚洲一区二区综合| 国产精品私人自拍| 日韩精品一区在线观看| 欧美性受xxxx| 99精品国产99久久久久久白柏| 久久99久久99小草精品免视看| 亚洲精品第一国产综合野| 日本一区二区在线不卡| 日韩一区二区三区观看| 欧美色图12p| 色综合一区二区| 成人午夜精品一区二区三区| 久久99国产精品免费| 舔着乳尖日韩一区| 亚洲精品视频一区二区| 国产精品青草综合久久久久99| 亚洲精品一区二区三区99| 6080国产精品一区二区| 欧美唯美清纯偷拍| 色婷婷久久综合| 9i在线看片成人免费| 国产电影一区二区三区| 看电视剧不卡顿的网站| 日韩中文字幕区一区有砖一区| 亚洲一区二区三区爽爽爽爽爽 | 久久这里只有精品6| 成人av在线影院| 激情国产一区二区 | 国产.欧美.日韩| 国产一区二区不卡在线|