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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? art.c

?? 早期freebsd實現
?? C
?? 第 1 頁 / 共 4 頁
字號:
    }}/***  We are going to reject an article, record the reason and**  and the article.  For now, this is just a placeholder.*//* ARGSUSED0 */STATIC voidARTreject(buff, article)    char	*buff;    BUFFER	*article;{}#if	defined(DO_VERIFY_CANCELS)/***  Verify if a cancel message is valid.  If the user posting the cancel**  matches the user who posted the article, return the list of filenames**  otherwise return NULL.*/STATIC char *ARTcancelverify(Data, MessageID)    ARTDATA		*Data;    char		*MessageID;{    register char	*files;    register char	*p;    register char	*local;    char		*head;    char		buff[SMBUF];    files = HISfilesfor(MessageID);    if ((head = ARTreadheader(files)) == NULL)	return NULL;    /* Get the author header. */    if ((local = HeaderFind(head, "Sender", 6)) == NULL     && (local = HeaderFind(head, "From", 4)) == NULL) {	syslog(L_ERROR, "%s bad_article %s checking cancel",	    LogName, MessageID);	return NULL;    }    HeaderCleanFrom(local);    /* Compare canonical forms. */    p = COPY(Data->Poster);    HeaderCleanFrom(p);    if (!EQ(local, p)) {	files = NULL;	(void)sprintf(buff, "\"%.50s\" wants to cancel %s by \"%.50s\"",		p, MaxLength(MessageID, MessageID), local);	ARTlog(Data, ART_REJECT, buff);    }    DISPOSE(p);    return files;}#endif	/* defined(DO_VERIFY_CANCELS) *//***  Process a cancel message.*//* ARGSUSED2 */voidARTcancel(Data, MessageID, Trusted)    ARTDATA		*Data;    char		*MessageID;    BOOL		Trusted;{    register char	*files;    register char	*p;    register BOOL	more;    STRING		save;    char		buff[SMBUF];    if (!HIShavearticle(MessageID)) {	/* Article hasn't arrived here, so write a fake entry using	 * most of the information from the cancel message. */#if	defined(DO_VERIFY_CANCELS)	if (!Trusted)	    return;#endif	/* defined(DO_VERIFY_CANCELS) */	save = Data->MessageID;	Data->MessageID = MessageID;	(void)HISwrite(Data, (char *)NULL);	Data->MessageID = save;	(void)sprintf(buff, "Cancelling %s", MessageID);	ARTlog(Data, ART_CANC, buff);	return;    }#if	defined(DO_VERIFY_CANCELS)    files = Trusted ? HISfilesfor(MessageID)		    : ARTcancelverify(Data, MessageID);#else    files = HISfilesfor(MessageID);#endif	/* !defined(DO_VERIFY_CANCELS) */    if (files == NULL)	return;    /* Get the files where the message is stored and and zap them. */    for ( ; *files; files = p + 1) {	/* Snip off next name, turn dots to slashes. */	for (p = files; ISWHITE(*p); p++)	    continue;	for (files = p; *p && *p != ' '; p++)	    if (*p == '.')		*p = '/';	more = *p == ' ';	if (more)	    *p = '\0';	/* Remove this file, go back for the next one if there's more. */	if (unlink(files) < 0 && errno != ENOENT)	    syslog(L_ERROR, "%s cant unlink %s %m", LogName, files);	if (!more)	    break;    }}/***  Process a control message.  Cancels are handled here, but any others**  are passed out to an external program in a specific directory that**  has the same name as the first word of the control message.*/STATIC voidARTcontrol(Data, Control)    ARTDATA		*Data;    char		*Control;{    static char		CTLBIN[] = _PATH_CONTROLPROGS;    register char	*p;    char		buff[SMBUF];    char		*av[6];    struct stat		Sb;    register char	c;    /* See if it's a cancel message. */    c = *Control;    if (c == 'c' && EQn(Control, "cancel", 6)) {	for (p = &Control[6]; ISWHITE(*p); p++)	    continue;	if (*p)	    ARTcancel(Data, p, FALSE);	return;    }    /* Nip off the first word into lowercase. */    for (p = Control; *p && !ISWHITE(*p); p++)	if (CTYPE(isupper, *p))	    *p = tolower(*p);    if (*p)	*p++ = '\0';    /* Treat the control message as a place to send the article, if     * the name is "safe" -- no slashes in the pathname. */    if (p - Control + STRLEN( _PATH_BADCONTROLPROG) >= SMBUF-4     || strchr(Control, '/') != NULL)	FileGlue(buff, CTLBIN, '/', _PATH_BADCONTROLPROG);    else {	FileGlue(buff, CTLBIN, '/', Control);	if (stat(buff, &Sb) < 0 || (Sb.st_mode & EXECUTE_BITS) == 0)	    FileGlue(buff, CTLBIN, '/', _PATH_BADCONTROLPROG);    }    /* If it's an ihave or sendme, check the site named in the message. */    if ((c == 'i' && EQ(Control, "ihave"))     || (c == 's' && EQ(Control, "sendme"))) {	while (ISWHITE(*p))	    p++;	if (*p == '\0') {	    syslog(L_NOTICE, "%s malformed %s no site %s",		    LogName, Control, Data->Name);	    return;	}	if (EQ(p, ARTpathme)) {	    /* Do nothing -- must have come from a replicant. */	    syslog(L_NOTICE, "%s %s_from_me %s",		Data->Feedsite, Control, Data->Name);	    return;	}	if (!SITEfind(p)) {	    if (c == 'i')		syslog(L_ERROR, "%s bad_ihave in %s",		    Data->Feedsite, Data->Newsgroups);	    else		syslog(L_ERROR, "%s bad_sendme dont feed %s",		    Data->Feedsite, Control, Data->Name);	    return;	}    }    /* Build the command vector and execute it. */    av[0] = buff;    av[1] = COPY(Data->Poster);    av[2] = COPY(Data->Replyto);    av[3] = Data->Name;    av[4] = (char *)Data->Feedsite;    av[5] = NULL;    HeaderCleanFrom(av[1]);    HeaderCleanFrom(av[2]);    if (Spawn(STDIN, (int)fileno(Errlog), (int)fileno(Errlog), av) < 0)	/* We know the strrchr below can't fail. */	syslog(L_ERROR, "%s cant spawn %s for %s %m",	    LogName, MaxLength(av[0], strrchr(av[0], '/')), Data->Name);    DISPOSE(av[1]);    DISPOSE(av[2]);}/***  Split a Distribution header, making a copy and skipping leading and**  trailing whitespace (which the RFC allows).*/STATIC voidDISTparse(list, Data)    register char	**list;    ARTDATA		*Data;{    static BUFFER	Dist;    register char	*p;    register char	*q;    register int	i;    register int	j;    /* Get space to store the copy. */    for (i = 0, j = 0; (p = list[i]) != NULL; i++)	j += 1 + strlen(p);    if (Dist.Data == NULL) {	Dist.Size = j;	Dist.Data = NEW(char, Dist.Size + 1);    }    else if (Dist.Size <= j) {	Dist.Size = j + 16;	RENEW(Dist.Data, char, Dist.Size + 1);    }    /* Loop over each element, skip and trim whitespace. */    for (q = Dist.Data, i = 0, j = 0; (p = list[i]) != NULL; i++) {	while (ISWHITE(*p))	    p++;	if (*p) {	    if (j)		*q++ = ',';	    for (list[j++] = p; *p && !ISWHITE(*p); )		*q++ = *p++;	    *p = '\0';	}    }    list[j] = NULL;    *q = '\0';    Data->Distribution = Dist.Data;    Data->DistributionLength = q - Dist.Data;}/***  A somewhat similar routine, except that this handles negated entries**  in the list and is used to check the distribution sub-field.*/STATIC BOOLDISTwanted(list, p)    register char	**list;    register char	*p;{    register char	*q;    register char	c;    register BOOL	sawbang;    for (sawbang = FALSE, c = *p; (q = *list) != NULL; list++)	if (*q == '!') {	    sawbang = TRUE;	    if (c == *++q && EQ(p, q))		return FALSE;	}	else if (c == *q && EQ(p, q))	    return TRUE;    /* If we saw any !foo's and didn't match, then assume they are all     * negated distributions and return TRUE, else return false. */    return sawbang;}/***  See if any of the distributions in the article are wanted by the site.*/STATIC BOOLDISTwantany(site, article)    char		**site;    register char	**article;{    for ( ; *article; article++)	if (DISTwanted(site, *article))	    return TRUE;    return FALSE;}/***  Sort an array of newsgroups for optimal disk access.  This may be**  of marginal benefit.*/STATIC voidARTsortfordisk(){    static NEWSGROUP	*save;    register NEWSGROUP	**ngptr;    if (save && GroupPointers[1] != NULL) {	/* If one of the groups we want to access is the group we last	 * wrote to, move it to the front of the list. */	for (ngptr = GroupPointers; *++ngptr; )	    if (*ngptr == save) {		*ngptr = GroupPointers[0];		GroupPointers[0] = save;		return;	    }    }    save = GroupPointers[0];}/***  Send the current article to all sites that would get it if the**  group were created.*/STATIC voidARTsendthegroup(name)    register char	*name;{    register SITE	*sp;    register int	i;    NEWSGROUP		*ngp;    for (ngp = NGfind(ARTctl), sp = Sites, i = nSites; --i >= 0; sp++)	if (sp->Name != NULL && SITEwantsgroup(sp, name)) {	    SITEmark(sp, ngp);	}}/*** Assign article numbers to the article and create the Xref line.** If we end up not being able to write the article, we'll get "holes"** in the directory and active file.*/STATIC voidARTassignnumbers(){    register char	*p;    register int	i;    register NEWSGROUP	*ngp;    p = &Xref.Data[Xref.Used];    for (i = 0; (ngp = GroupPointers[i]) != NULL; i++) {	/* If already went to this group (i.e., multiple groups are aliased	 * into it), then skip it. */	if (ngp->PostCount > 0)	    continue;	/* Bump the number. */	ngp->PostCount++;	ngp->Last++;	if (!FormatLong(ngp->LastString, (long)ngp->Last, ngp->Lastwidth)) {	    syslog(L_ERROR, "%s cant update_active %s", LogName, ngp->Name);	    continue;	}	ngp->Filenum = ngp->Last;	(void)sprintf(p, " %s:%lu", ngp->Name, ngp->Filenum);	p += strlen(p);    }    Xref.Used = p - Xref.Data;    Xref.Data[Xref.Used++] = '\n';}/***  Parse the data from the xreplic command and assign the numbers.**  This involves replacing the GroupPointers entries.*/STATIC voidARTreplic(Replic, CrossPostedp)    BUFFER		*Replic;    BOOL		*CrossPostedp;{    register char	*p;    register char	*q;    register char	*name;    register char	*next;    register NEWSGROUP	*ngp;    register int	i;    p = &Xref.Data[Xref.Used];    for (i = 0, name = Replic->Data; *name; name = next) {	/* Mark end of this entry and where next one starts. */	if ((next = strchr(name, ',')) != NULL)	    *next++ = '\0';	else	    next = "";	/* Split into news.group/# */	if ((q = strchr(name, '/')) == NULL) {	    syslog(L_ERROR, "%s bad_format %s", LogName, name);	    continue;	}	*q = '\0';	if ((ngp = NGfind(name)) == NULL) {	    syslog(L_ERROR, "%s bad_newsgroup %s", LogName, name);	    continue;	}	ngp->Filenum = atol(q + 1);	/* Update active file if we got a new high-water mark. */	if (ngp->Last < ngp->Filenum) {	    ngp->Last = ngp->Filenum;	    if (!FormatLong(ngp->LastString, (long)ngp->Last,		    ngp->Lastwidth)) {		syslog(L_ERROR, "%s cant update_active %s",		    LogName, ngp->Name);		continue;	    }	}	/* Mark that this group gets the article. */	ngp->PostCount++;	GroupPointers[i++] = ngp;	/* Turn news.group/# into news.group:#, append to Xref. */	*q = ':';	*p++ = ' ';	p += strlen(strcpy(p, name));    }    *CrossPostedp = i > 1 || AlwaysCrosspost;    Xref.Used = p - Xref.Data;    Xref.Data[Xref.Used++] = '\n';}/***  Return TRUE if a list of strings has a specific one.  This is a**  generic routine, but is used for seeing if a host is in the Path line.*/STATIC BOOLListHas(list, p)    register char	**list;    register char	*p;{    register char	*q;    register char	c;    for (c = *p; (q = *list) != NULL; list++)	if (c == *q && caseEQ(p, q))	    return TRUE;    return FALSE;}/***  Propagate an article to the sites have "expressed an interest."*/STATIC voidARTpropagate(Data, hops, hopcount, list)    ARTDATA		*Data;    char		**hops;    int			hopcount;    char		**list;{    register SITE	*sp;    register int	i;    register int	j;    register int	Groupcount;    register char	*p;    register SITE	*funnel;    register BUFFER	*bp;    /* Work out which sites should really get it. */    Groupcount = Data->Groupcount;    for (sp = Sites, i = nSites; --i >= 0; sp++) {	if (sp->Seenit || !sp->Sendit)	    continue;	sp->Sendit = FALSE;	if (sp->Master != NOSITE && Sites[sp->Master].Seenit)	    continue;	if (sp->MaxSize && sp->MaxSize < Data->SizeValue)	    /* Too big for the site. */	    continue;	if ((!sp->IgnorePath && ListHas(hops, sp->Name))	 || (sp->Hops && hopcount > sp->Hops)	 || (sp->Groupcount && Groupcount > sp->Groupcount))	    /* Site already saw the article; path too long; or too much	     * cross-posting. */	    continue;	if (list	 && sp->Distributions	 && !DISTwantany(sp->Distributions, list))	    /* Not in the site's desired list of distributions. */	    continue;	if (sp->DistRequired && list == NULL)	    /* Site requires Distribution header and there isn't one. */	    continue;	if (sp->Exclusions) {	    for (j = 0; (p = sp->Exclusions[j]) != NULL; j++)		if (ListHas(hops, p))		    break;	    if (p != NULL)		/* A host in the site's exclusion list was in the Path. */		continue;	}	/* Write that the site is getting it, and flag to send it. */	if (fprintf(Log, " %s", sp->Name) == EOF || ferror(Log)) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区日韩| 亚洲三级在线观看| 综合亚洲深深色噜噜狠狠网站| 亚洲美女视频在线观看| 麻豆国产欧美日韩综合精品二区 | 93久久精品日日躁夜夜躁欧美| 精品视频资源站| 亚洲免费在线播放| 国产成a人亚洲| 欧美tk—视频vk| 日本一区中文字幕| 欧美午夜影院一区| 亚洲人亚洲人成电影网站色| 国产一区二区三区不卡在线观看 | 波多野结衣一区二区三区| 日韩午夜在线影院| 亚洲第一福利视频在线| 91丨porny丨国产入口| 久久亚洲精品小早川怜子| 欧美aaa在线| 欧美精品电影在线播放| 亚洲一本大道在线| 欧美视频日韩视频| 亚洲一区二区免费视频| 欧美在线视频全部完| 尤物在线观看一区| 日本久久电影网| 一区二区三区波多野结衣在线观看| 99久免费精品视频在线观看| 亚洲乱码中文字幕| 91无套直看片红桃| 自拍偷在线精品自拍偷无码专区| 成人av在线资源网| 亚洲少妇30p| 在线观看亚洲一区| 亚洲动漫第一页| 欧美日韩免费视频| 日本亚洲最大的色成网站www| 91精品黄色片免费大全| 免费在线看成人av| 精品少妇一区二区三区视频免付费| 久久精品免费观看| 精品久久久久久久久久久院品网| 国内偷窥港台综合视频在线播放| 久久综合久久综合九色| 丰满岳乱妇一区二区三区| 国产精品三级电影| 色婷婷av一区二区三区gif| 亚洲一区二区三区四区五区中文 | av欧美精品.com| 久久九九全国免费| av男人天堂一区| 无码av免费一区二区三区试看| 69堂国产成人免费视频| 国产在线视视频有精品| 国产亚洲欧洲一区高清在线观看| 成人av资源站| 日韩国产精品久久久久久亚洲| 欧美成人女星排名| 成人av网站在线观看免费| 亚洲成人1区2区| 国产日韩欧美精品在线| 在线视频你懂得一区| 精品综合免费视频观看| 亚洲欧洲性图库| 欧美一区二区三区公司| 国产福利一区在线观看| 亚洲福利视频导航| 久久精品人人做| 欧美日韩午夜影院| 国产99久久久久久免费看农村| 亚洲最大成人综合| 精品久久国产97色综合| 色猫猫国产区一区二在线视频| 奇米精品一区二区三区在线观看一 | 欧美激情综合五月色丁香| 欧美日韩在线播放一区| 成人三级伦理片| 免费成人深夜小野草| 综合网在线视频| 久久综合丝袜日本网| 欧美伊人久久久久久午夜久久久久| 精品一区免费av| 亚洲永久精品大片| 亚洲欧美自拍偷拍| 久久久久久亚洲综合| 51精品秘密在线观看| 日本伦理一区二区| 99国产欧美另类久久久精品| 精品一区二区三区免费播放| 亚洲国产精品久久人人爱蜜臀| 欧美激情在线免费观看| 日韩精品专区在线影院观看| 欧美专区日韩专区| 97久久超碰精品国产| 国产福利一区在线| 色综合中文字幕| www.激情成人| 丁香婷婷深情五月亚洲| 国产福利91精品一区| 久久se精品一区精品二区| 天天综合日日夜夜精品| 亚洲国产aⅴ天堂久久| 亚洲精品国产无套在线观| 国产精品国产三级国产普通话蜜臀| 2017欧美狠狠色| 久久一日本道色综合| 日韩欧美亚洲另类制服综合在线| 欧美精品日韩综合在线| 欧美日韩国产首页在线观看| 欧美日韩一区二区欧美激情| 欧美性极品少妇| 欧美日韩午夜在线| 欧美日本在线播放| 欧美日韩一级片网站| 制服丝袜中文字幕一区| 日韩亚洲国产中文字幕欧美| 日韩一区二区在线看| 欧美成人三级在线| 久久蜜臀中文字幕| 国产精品天天摸av网| 亚洲天堂免费在线观看视频| 一区二区三区日韩欧美精品| 亚洲亚洲精品在线观看| 日韩成人免费电影| 极品少妇xxxx精品少妇| 国产成人小视频| 日本黄色一区二区| 欧美午夜电影在线播放| 日韩免费观看高清完整版在线观看| 日韩欧美成人午夜| 日本一区二区三区电影| 综合欧美一区二区三区| 亚洲激情综合网| 免费视频一区二区| 国产成人精品亚洲日本在线桃色 | 欧美天堂亚洲电影院在线播放| 欧美性受极品xxxx喷水| 日韩欧美在线观看一区二区三区| 欧美大胆一级视频| 国产欧美精品一区二区色综合朱莉 | 国产色91在线| 夜夜嗨av一区二区三区| 老司机午夜精品| 97久久人人超碰| 91麻豆精品国产91久久久久 | 欧美偷拍一区二区| 亚洲精品一区二区在线观看| 国产精品久久久久久久久晋中| 一区二区三区欧美视频| 九九久久精品视频| 91久久国产最好的精华液| 欧美成人综合网站| **性色生活片久久毛片| 麻豆91精品视频| 日本韩国一区二区三区视频| 欧美tk—视频vk| 一区二区三区欧美视频| 国产又黄又大久久| 在线成人小视频| 亚洲丝袜精品丝袜在线| 国内外成人在线视频| 欧美视频在线观看一区| 国产偷国产偷亚洲高清人白洁| 午夜精品福利一区二区三区av | 91国内精品野花午夜精品| 久久先锋影音av鲁色资源| 亚洲国产中文字幕| 成人小视频在线观看| 中文字幕欧美激情一区| 久久精品99国产精品| 欧美日韩国产一级| 亚洲人成在线观看一区二区| 国产乱子伦视频一区二区三区 | 欧美日韩久久久| 最新热久久免费视频| 国产精品一区二区在线看| 欧美一级黄色片| 亚洲综合在线第一页| 不卡的av在线播放| 国产三级欧美三级日产三级99| 麻豆一区二区三| 欧美二区三区91| 亚洲电影一级片| 欧美无砖砖区免费| 一区二区三区加勒比av| 99国产精品久久久久久久久久 | 免费人成网站在线观看欧美高清| 91国产成人在线| 亚洲免费在线看| 色成人在线视频| 亚洲欧美另类综合偷拍| 99久久精品一区二区| 亚洲欧洲日韩女同| 99久久精品一区二区| 中文字幕一区二区三区不卡在线 | 国产精品二区一区二区aⅴ污介绍| 国内精品在线播放| 精品国产一区二区三区av性色| 麻豆91精品91久久久的内涵|