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

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

?? dotqmail2valias.c

?? 相當優秀的 UNIX 進程管理工具
?? C
字號:
/* * $Id: dotqmail2valias.c,v 1.1.2.1 2004/03/10 15:18:51 tomcollins Exp $ * Copyright (C) 2003-2004 Tom Collins * Initial version of this program sponsored by ACIS Pty Ltd. * * Based on "vconvert.c,v 1.2 2003/10/20 18:59:57" in vpopmail 5.4. * Copyright (C) 1999-2002 Inter7 Internet Technologies, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include <dirent.h>#include "config.h"#include "vpopmail.h"#include "vauth.h"#define MAX_BUFF 256/* Default behavior is to do nothing if there are already valias table  * entries for a dotqmail file to be processed.  Define one of the  * following settings to do something instead of nothing. *//* To delete the existing valias table entries and replace them * with contents of current .qmail files, define * DELETE_OLD_VALIAS_ENTRIES. *//* #define DELETE_OLD_VALIAS_ENTRIES *//* To delete .qmail files that have matching valias table * entries (instead of attempting to convert them), * define DELETE_OLD_DOTQMAIL_FILES. *//* #define DELETE_OLD_DOTQMAIL_FILES */int Debug = 0;int AllDomains = 0;int do_all_domains();int conv_domain( char *); void usage();void get_options(int argc, char **argv);/* replace all occurrences of c1 in s with c2 */void strreplace (char *s, char c1, char c2){	char *p;		for (p = s; *p != '\0'; p++) if (*p == c1) *p = c2;}int main(int argc, char *argv[]){#ifndef VALIAS	fprintf (stderr, "You must enable valiases (./configure --enable-valias) to use this program.\n");	return -1;#endif	get_options(argc,argv);	if ( optind == argc ) {		if (AllDomains)			do_all_domains();		else {			usage();			return -1;		}	} else {		for(;optind<argc;++optind){			lowerit(argv[optind]);			printf("converting %s\n", argv[optind]);			if ( conv_domain( argv[optind] ) != 0 ) {				fprintf(stderr, "conversion of %s failed\n", argv[optind]);				/* should exit -1 here? */			}		}	}	return(vexit(0));}int do_all_domains(){ FILE *fs; char assign_file[MAX_BUFF]; static char tmpbuf[MAX_BUFF]; int i;    snprintf(assign_file, sizeof(assign_file), "%s/users/assign",  QMAILDIR);     if ( (fs=fopen(assign_file, "r"))==NULL ) {       snprintf(tmpbuf, sizeof(tmpbuf), "could not open qmail assign file at %s\n", assign_file);       perror(tmpbuf);       vexit(-1);    }    while ( fgets(tmpbuf, sizeof(tmpbuf),fs) != NULL ) {        if (*tmpbuf != '+') continue;  /* ignore non-domain entries */        for(i=1;tmpbuf[i]!=':';++i);        tmpbuf[i-1] = 0;        /* ignore non-domain entries */        if (strchr (tmpbuf, '.') == NULL) continue;	if ( tmpbuf[1] != '\n' ) {            printf("converting %s\n", &tmpbuf[1] );            if ( conv_domain( &tmpbuf[1] ) != 0 ) {                printf("conversion of %s failed\n", &tmpbuf[1]);                /* should vexit -1 here? */            }        }    }    fclose(fs);    return(0);}int conv_domain( char *domain ){	char domcopy[MAX_BUFF];	char domainpath[MAX_BUFF];	char username[MAX_BUFF];	char alias_line[MAX_ALIAS_LINE];	char *p;		DIR *domaindir;	struct dirent *direntry;	char dotqmail_fn[MAX_BUFF];	FILE *dotqmail_fs;		int notlist;	int linecount;		snprintf (domcopy, sizeof(domcopy), "%s", domain);	if (vget_assign (domcopy, domainpath, sizeof(domainpath), NULL, NULL) == NULL) {		fprintf (stderr, "Error, domain %s not found in users/cdb.\n", domain);		return -1;	}	if (strcmp (domain, domcopy) != 0) {		fprintf (stderr, "Skipping %s (alias of %s).\n", domain, domcopy);		return -1;	}		if ((domaindir = opendir (domainpath)) == NULL) {		fprintf (stderr, "Error, couldn't open %s.\n", domainpath);		return -1;	}		while ((direntry = readdir(domaindir)) != NULL) {		/* don't process .qmail-default */		if (strcmp (".qmail-default", direntry->d_name) == 0) continue;		/* process all other files starting with ".qmail-" */		if (strncmp (".qmail-", direntry->d_name, 7) == 0) {			snprintf (username, sizeof(username), "%s", &direntry->d_name[7]);			snprintf (dotqmail_fn, sizeof(dotqmail_fn), "%s/%s", domainpath, direntry->d_name);			/* convert to email address (change ':' to '.') */			strreplace (username, ':', '.');			printf ("  checking %s@%s...", username, domain);						/* Does a VALIAS already exist for the file?  If so, throw an error. */			if (valias_select (username, domain) != NULL) {				#ifdef DELETE_OLD_VALIAS_ENTRIES					valias_delete (username, domain);				#else					#ifdef DELETE_OLD_DOTQMAIL_FILES						printf ("valias already exists, deleting %s.\n", direntry->d_name);						unlink (dotqmail_fn);						continue;					#else						printf ("valias already exists, skipping.\n");						continue;					#endif				#endif			}						/* Open the .qmail-alias file */			if ((dotqmail_fs = fopen (dotqmail_fn, "r")) == NULL ) {				printf ("Error opening %s, skipping.\n", dotqmail_fn);				continue;			}						/* if first line matches "|[^ ]+/ezmlm-", then it's a list and shouldn't get converted */			/* ! note that .qmail-list-owner has ezmlm-warn on second line ! */			notlist = 1;			linecount = 0;			while (notlist && (fgets (alias_line, sizeof(alias_line), dotqmail_fs) != NULL)) {				linecount++;				/* Determine if this is an ezmlm list (which shouldn't be converted to valias) */				/* if line is program delivery, and contains string "/ezmlm-" before the first " ",				   then it is a list. */				if (alias_line[0] == '|') {					char *p1, *p2;					p1 = strstr (alias_line, "/ezmlm-");					p2 = strchr (alias_line, ' ');					if ( (p1 != NULL) && (p2 == NULL || p1 < p2) ) {						printf ("mailing list, skipping.\n");						notlist = 0;					}				}								/* strip trailing newline (if present) */				p = strchr (alias_line, '\n');				if (p) *p = '\0';				valias_insert (username, domain, alias_line);			}			fclose (dotqmail_fs);			if (notlist) {				printf (" converted %u entries.\n", linecount);				unlink (dotqmail_fn);			} else {				/* it's a list, so remove the valias entries we created */				valias_delete (username, domain);			}		}	}		closedir (domaindir);	return 0;}void usage(){	fprintf(stdout, "usage: dotqmail2valias [options] [domainlist]\n");	fprintf(stdout, "  Converts .qmail-alias files for listed domains to valias format.\n");	fprintf(stdout, "  Options:\n");	fprintf(stdout, "    -a = convert all domains\n");	fprintf(stdout, "    -v = version\n");	fprintf(stdout, "    -d = debug info\n");}void get_options(int argc, char **argv){ int c; int errflag; extern char *optarg; extern int optind;	errflag = 0;	Debug = 0;	while( !errflag && (c=getopt(argc,argv,":avd")) != -1 ) {		switch(c) {			case 'a':				AllDomains = 1;				break;			case 'd':				Debug = 1;				break;			case 'v':				printf("version: %s\n", VERSION);				break;			default:				errflag = 1;				break;		}	}	if (errflag > 0) {		usage();		vexit(-1);	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩久久免费av| 亚洲一区二区3| 一本久久精品一区二区| 日韩成人午夜电影| 成人免费在线观看入口| 欧美精品九九99久久| 成人高清视频在线| 奇米777欧美一区二区| 《视频一区视频二区| 精品成人一区二区| 欧美三级资源在线| 99久久久久免费精品国产| 美女网站视频久久| 五月天中文字幕一区二区| 亚洲人成亚洲人成在线观看图片| xf在线a精品一区二区视频网站| 欧美欧美欧美欧美首页| 91麻豆视频网站| av资源网一区| 懂色中文一区二区在线播放| 蜜桃视频在线一区| 日韩中文字幕亚洲一区二区va在线| 综合久久一区二区三区| 中文字幕精品综合| 久久久www成人免费毛片麻豆 | 亚洲另类在线视频| 国产日韩av一区二区| 精品国产制服丝袜高跟| 日韩欧美中文字幕制服| 欧美一区二区三区人| 欧美日韩精品一区二区三区| 在线视频国内一区二区| 91首页免费视频| 99re在线精品| 色哟哟在线观看一区二区三区| 成人黄色小视频在线观看| 成人av网站在线| 91精品国产综合久久久久久漫画| 一本到三区不卡视频| 99精品在线观看视频| 成人一区二区三区| 国产一区二区三区高清播放| 国产福利一区二区三区视频| 国产毛片精品国产一区二区三区| 精品亚洲国内自在自线福利| 久久91精品国产91久久小草 | 国产在线视频精品一区| 久久99国产精品久久| 精品一区二区三区影院在线午夜| 狠狠色伊人亚洲综合成人| 国产一区二区三区综合| 国产mv日韩mv欧美| 99综合影院在线| 在线观看日韩国产| 欧美日韩一区久久| 欧美一区二区精品| 2020国产成人综合网| 国产人久久人人人人爽| 成人免费在线视频| 午夜欧美视频在线观看| 久久99热狠狠色一区二区| 国产盗摄一区二区三区| zzijzzij亚洲日本少妇熟睡| 一本色道久久加勒比精品 | 日本一区二区综合亚洲| 国产欧美一区二区在线| 日韩一区在线看| 日韩精品乱码av一区二区| 国产精品一区二区久久精品爱涩| 99久久精品国产网站| 欧美熟乱第一页| 精品国产123| 综合av第一页| 麻豆成人免费电影| 成人午夜免费视频| 欧美酷刑日本凌虐凌虐| 国产亚洲一区二区三区| 亚洲欧美区自拍先锋| 蜜臀久久99精品久久久久久9| 国产精品亚洲第一区在线暖暖韩国| 色先锋aa成人| 久久久国产精华| 亚洲成国产人片在线观看| 国内成人自拍视频| 欧美亚洲国产一区二区三区 | 亚洲午夜久久久久久久久电影网 | 国产精品资源网站| 在线亚洲一区观看| 2020日本不卡一区二区视频| 一区二区视频免费在线观看| 国内精品不卡在线| 欧美日韩久久不卡| 国产精品久久久久久久久久久免费看| 亚洲h精品动漫在线观看| 国产一区二区三区av电影| 欧美亚洲国产bt| 国产欧美日韩一区二区三区在线观看| 精品国产乱码久久久久久蜜臀| 国产激情一区二区三区桃花岛亚洲| 91捆绑美女网站| 亚洲精品一区二区在线观看| 亚洲精品国久久99热| 精彩视频一区二区| 欧美视频一区在线| 日本一区二区三区高清不卡| 青青草97国产精品免费观看无弹窗版 | 91久久久免费一区二区| 久久久亚洲精品石原莉奈 | 久久国产免费看| 在线视频你懂得一区二区三区| 国产欧美一区二区在线观看| 强制捆绑调教一区二区| 色狠狠一区二区三区香蕉| 欧美韩国一区二区| 久久成人av少妇免费| 欧美日韩在线播放一区| 亚洲蜜臀av乱码久久精品| 国产成a人无v码亚洲福利| 精品少妇一区二区三区在线播放| 亚洲超碰精品一区二区| 99久久99久久久精品齐齐| 久久综合成人精品亚洲另类欧美 | 97久久精品人人澡人人爽| 国产午夜精品美女毛片视频| 久久国产综合精品| 在线成人免费观看| 五月天亚洲精品| 91久久精品一区二区三区| 国产精品久久久久婷婷| av电影天堂一区二区在线| 中文字幕av一区 二区| 国产成人免费视| 久久久久久久性| 国产精品1区二区.| 欧美激情中文不卡| 成人黄色av电影| 国产精品麻豆99久久久久久| 成人午夜视频网站| 中文字幕色av一区二区三区| 99九九99九九九视频精品| 亚洲免费观看高清完整版在线观看| 99精品欧美一区二区蜜桃免费| 国产精品女同一区二区三区| 粉嫩一区二区三区性色av| 国产精品视频麻豆| 91网站在线播放| 亚洲国产aⅴ天堂久久| 欧美视频一区二区三区四区| 午夜激情久久久| 日韩免费成人网| 国产老妇另类xxxxx| 中文字幕av在线一区二区三区| 99国产精品久久久久| 亚洲在线视频网站| 日韩欧美中文字幕一区| 麻豆成人91精品二区三区| 精品国内二区三区| 成人午夜电影久久影院| 一区二区三区在线免费视频 | 国产精品国产三级国产aⅴ原创| av高清不卡在线| 亚洲第一会所有码转帖| 日韩欧美的一区二区| 懂色中文一区二区在线播放| 有坂深雪av一区二区精品| 欧美精品一级二级三级| 国产一区二区三区免费| 亚洲欧洲精品成人久久奇米网| 欧美日韩大陆在线| 国产精品18久久久久久久久| 亚洲激情图片qvod| 欧美一区二区精品在线| 成人精品高清在线| 婷婷国产v国产偷v亚洲高清| 久久久亚洲午夜电影| 91福利国产精品| 久久爱另类一区二区小说| 中文字幕永久在线不卡| 欧美美女一区二区| 国产不卡一区视频| 亚洲动漫第一页| 国产欧美日韩视频一区二区| 欧美日韩精品一二三区| 国产精品99久久不卡二区| 亚洲成a人片在线观看中文| 久久久久久久精| 8x8x8国产精品| 99久久精品免费看| 九九久久精品视频| 亚洲一区av在线| 国产精品三级视频| 日韩欧美不卡一区| 欧美在线看片a免费观看| 国产九色精品成人porny| 亚洲va在线va天堂| 中文字幕一区不卡| 久久久欧美精品sm网站| 91精品欧美一区二区三区综合在 | 欧美一区二区三区白人| 成人一区二区三区视频在线观看|