/* Copyright (c) 1996, Ruslan R. Laishev (@RRL) */ #include "nntp.h" static char *wild = "*"; static char *empty = ""; struct param_t { char *name; int type; char *ptr; } param_tbl [] = { {"LocalHost", 0,&nntp_conf.LocalHost}, {"LocalPath", 0,&nntp_conf.LocalPath}, {"LocalTZ", 0,&nntp_conf.LocalTZ}, {"LocalPort", 1,&nntp_conf.LocalPort}, {"LocalMgr", 0,&nntp_conf.LocalMgr}, {"LocalSMTP", 0,&nntp_conf.LocalSMTP}, {"MsgDBsize", 1,&nntp_conf.MsgDBsize}, {"MsgPurgeDay", 1,&nntp_conf.MsgPurgeDay}, {"MsgOld", 1,&nntp_conf.MsgOld}, {"MsgPurgeNum", 1,&nntp_conf.MsgPurgeNum}, {"ClientTimeOut",1,&nntp_conf.ClientTimeOut}, {"SuckTimeOut", 1,&nntp_conf.SuckTimeOut}, {"FeedTimeOut", 1,&nntp_conf.FeedTimeOut}, {"GrpME", 0,&nntp_conf.GrpME}, {"GrpDay", 1,&nntp_conf.GrpDay}, {"Suck", 0,&nntp_conf.Suck}, {"Feed", 0,&nntp_conf.Feed}, {"Client", 0,&nntp_conf.Client}, {"LogLevel", 1,&nntp_conf.LogLevel}, {"LogType", 1,&nntp_conf.LogType}, {"SuckInterval",1,&nntp_conf.SuckInterval}, {"FeedInterval",1,&nntp_conf.FeedInterval}, {"Expire", 1,&nntp_conf.Expire}, {"Moderator", 0,&nntp_conf.Moderator}, {NULL, 0,NULL} }; int nntp_conf_get (void) { FILE *conf; char buff0[ 256 ]; char buff1[ 256 ]; char buff2[ 256 ]; char *NNTP_CONF = "NNTP.CONF"; int i,l0,l1; long *ptr0; long **ptr1; memset(&nntp_conf,0,sizeof(nntp_conf)); /* *Get */ if ( NULL == (conf = fopen(NNTP_CONF,"r")) ) return -1; while( fgets(&buff0[0],sizeof(buff0),conf) ) { if ( 2 != sscanf(&buff0[0]," %s %[^#\r\n] ",&buff1[0],&buff2[0]) ) continue; if ( buff1[0] == '#' ) continue; for ( i = 0; param_tbl[i].name != NULL; i++ ) { if ( stricmp (&buff1[0],param_tbl[i].name) ) continue; if ( param_tbl[i].type ) { *((int *)param_tbl[i].ptr) = atoi(buff2); break; } strstrip(buff2,"\t","#\n\r"); l0 = strlen(buff2); ptr0 = param_tbl[i].ptr; ptr1 = *ptr0; if ( ptr1 ) { l1 = strlen(ptr1); ptr1 = calloc(1,l1+l0+2); strcpy ((char *) ptr1,*(ptr0)); free (*(ptr0)); *(ptr0) = ptr1; strcat ((char *) ptr1,"|"); } else ptr1 = calloc (1,l0+1); *(ptr0) = ptr1; strcat ((char *) ptr1,buff2); break; } } /* *Check and validate */ if ( NULL == nntp_conf.LocalHost ) return -1; if ( NULL == nntp_conf.LocalTZ ) return -1; nntp_conf.LocalPort = max (nntp_conf.LocalPort ,119); nntp_conf.ClientTimeOut = max (nntp_conf.ClientTimeOut,600); nntp_conf.SuckTimeOut = max (nntp_conf.FeedTimeOut,600); nntp_conf.FeedTimeOut = max (nntp_conf.FeedTimeOut,600); if ( 0 > nntp_conf.LogLevel || 5 < nntp_conf.LogLevel ) nntp_conf.LogLevel = 5; nntp_conf.GrpME = (nntp_conf.GrpME == NULL)?wild:nntp_conf.GrpME; strlwr(nntp_conf.GrpME); nntp_conf.SuckInterval = 60*max (nntp_conf.SuckInterval,5); nntp_conf.FeedInterval = 60*max (nntp_conf.FeedInterval,5); nntp_conf.Expire = min (nntp_conf.Expire,24); nntp_conf.Suck = (nntp_conf.Suck == NULL)?empty:nntp_conf.Suck; strlwr(nntp_conf.Suck); nntp_conf.Feed = (nntp_conf.Feed == NULL)?empty:nntp_conf.Feed; strlwr(nntp_conf.Feed); nntp_conf.Client= (nntp_conf.Client == NULL)?empty:nntp_conf.Client; strlwr(nntp_conf.Client); nntp_conf.Moderator= (nntp_conf.Moderator == NULL)?empty:nntp_conf.Moderator; strlwr(nntp_conf.Moderator); if ( l1 = (strlen(nntp_conf.Moderator)) ) { nntp_conf.GrpMod = calloc(1,l1); for (i = 0;l0 = strelem(buff0,nntp_conf.Moderator,l1,"|",i);i++) { strelem(buff1,buff0,l0,":",0); strcat (nntp_conf.GrpMod,buff1); strcat (nntp_conf.GrpMod,","); } *(nntp_conf.GrpMod+strlen(nntp_conf.GrpMod)-1) = 0; } else nntp_conf.GrpMod = empty; fclose (conf); return 0; } int nntp_conf_out (void) { NNTP_LOG(LOGI,"LocalHost............%s",nntp_conf.LocalHost); NNTP_LOG(LOGI,"LocalPath............%s",nntp_conf.LocalPath); NNTP_LOG(LOGI,"LocalTZ..............%s",nntp_conf.LocalTZ); NNTP_LOG(LOGI,"LocalPort............%d",nntp_conf.LocalPort); NNTP_LOG(LOGI,"LocalMgr.............%s",nntp_conf.LocalMgr); NNTP_LOG(LOGI,"LocalSMTP............%s",nntp_conf.LocalSMTP); NNTP_LOG(LOGI,"MsgDBsize (Mbytes)...%d",nntp_conf.MsgDBsize); NNTP_LOG(LOGI,"MsgPurgeDay (day)....%d",nntp_conf.MsgPurgeDay); NNTP_LOG(LOGI,"MsgOld (days)........%d",nntp_conf.MsgOld); NNTP_LOG(LOGI,"MsgPurgeNum..........%d",nntp_conf.MsgPurgeNum); NNTP_LOG(LOGI,"ClienTimeOut (sec)...%d",nntp_conf.ClientTimeOut); NNTP_LOG(LOGI,"SuckTimeOut (sec)....%d",nntp_conf.SuckTimeOut); NNTP_LOG(LOGI,"FeedTimeOut (sec)....%d",nntp_conf.FeedTimeOut); NNTP_LOG(LOGI,"GrpME................%s",nntp_conf.GrpME); NNTP_LOG(LOGI,"GrpDay (day).........%d",nntp_conf.GrpDay); NNTP_LOG(LOGI,"Suck.................%s",nntp_conf.Suck); NNTP_LOG(LOGI,"Feed.................%s",nntp_conf.Feed); NNTP_LOG(LOGI,"Client...............%s",nntp_conf.Client); NNTP_LOG(LOGI,"LogLevel.............%d",nntp_conf.LogLevel); NNTP_LOG(LOGI,"Suck Interval (min)..%d",nntp_conf.SuckInterval); NNTP_LOG(LOGI,"Feed Interval (min)..%d",nntp_conf.FeedInterval); NNTP_LOG(LOGI,"Expire (HH:MM).......%d",nntp_conf.Expire); NNTP_LOG(LOGI,"Moderator............%s",nntp_conf.Moderator); NNTP_LOG(LOGI,"GrpMod...............%s",nntp_conf.GrpMod); }