/* Copyright (c) 1996, Ruslan R. Laishev (@RRL) */ #include "nntp.h" #include "nntp_log.h" #include "nntp_lib.h" static char *wild = "*"; static char *empty = ""; int nntp_conf_get (void) { FILE *conf; char buff0[ 128 ]; char buff1[ 64 ]; char buff2[ 64 ]; char *NNTP_CONF = "NNTP.CONF"; 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}, {"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}, {"SuckInterval",1,&nntp_conf.SuckInterval}, {"FeedInterval",1,&nntp_conf.FeedInterval}, {"Expire", 1,&nntp_conf.Expire}, {NULL, 0,NULL} }; int i,l0,l1; long *ptr0; long **ptr1; /* *Get */ if ( NULL == (conf = fopen(NNTP_CONF,"r")) ) return -1; while( fgets(&buff0[0],sizeof(buff0),conf) ) { if ( 2 != sscanf(&buff0[0]," %s %[^#\n\r] ",&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); fclose (conf); return 0; }