/* 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}, {"MsgPurgeDay", 1,&nntp_conf.MsgPurgeDay}, {"MsgOld", 1,&nntp_conf.MsgOld}, {"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}, {"ExpireInterval", 1,&nntp_conf.ExpireInterval}, {"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.ExpireInterval= 60*nntp_conf.ExpireInterval; 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,"MsgPurgeDay (day).....%d",nntp_conf.MsgPurgeDay); NNTP_LOG(LOGI,"MsgOld (days).........%d",nntp_conf.MsgOld); 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,"LogType...............%d",nntp_conf.LogType); NNTP_LOG(LOGI,"Suck Interval (min)...%d",nntp_conf.SuckInterval/60); NNTP_LOG(LOGI,"Feed Interval (min)...%d",nntp_conf.FeedInterval/60); NNTP_LOG(LOGI,"Expire Interval (min).%d",nntp_conf.ExpireInterval/60); NNTP_LOG(LOGI,"Moderator.............%s",nntp_conf.Moderator); NNTP_LOG(LOGI,"GrpMod................%s",nntp_conf.GrpMod); }