diff options
Diffstat (limited to 'innbbsd/echobbslib.c')
-rw-r--r-- | innbbsd/echobbslib.c | 1104 |
1 files changed, 577 insertions, 527 deletions
diff --git a/innbbsd/echobbslib.c b/innbbsd/echobbslib.c index 2511b50a..8eb7a99b 100644 --- a/innbbsd/echobbslib.c +++ b/innbbsd/echobbslib.c @@ -1,713 +1,763 @@ #if defined( LINUX ) -# include "innbbsconf.h" -# include "bbslib.h" -# include <stdarg.h> +#include "innbbsconf.h" +#include "bbslib.h" +#include <stdarg.h> #else -# include <stdarg.h> -# include "innbbsconf.h" -# include "bbslib.h" +#include <stdarg.h> +#include "innbbsconf.h" +#include "bbslib.h" #endif -char INNBBSCONF[MAXPATHLEN]; -char INNDHOME[MAXPATHLEN]; -char HISTORY[MAXPATHLEN]; -char LOGFILE[MAXPATHLEN]; -char MYBBSID[MAXPATHLEN]; -char ECHOMAIL[MAXPATHLEN]; -char BBSFEEDS[MAXPATHLEN]; -char LOCALDAEMON[MAXPATHLEN]; - -int His_Maint_Min= HIS_MAINT_MIN; -int His_Maint_Hour= HIS_MAINT_HOUR; -int Expiredays = EXPIREDAYS; - -nodelist_t *NODELIST=NULL, **NODELIST_BYNODE=NULL; -newsfeeds_t *NEWSFEEDS=NULL, **NEWSFEEDS_BYBOARD=NULL; -static char *NODELIST_BUF, *NEWSFEEDS_BUF; -int NFCOUNT, NLCOUNT; -int LOCALNODELIST=0, NONENEWSFEEDS=0; +char INNBBSCONF[MAXPATHLEN]; +char INNDHOME[MAXPATHLEN]; +char HISTORY[MAXPATHLEN]; +char LOGFILE[MAXPATHLEN]; +char MYBBSID[MAXPATHLEN]; +char ECHOMAIL[MAXPATHLEN]; +char BBSFEEDS[MAXPATHLEN]; +char LOCALDAEMON[MAXPATHLEN]; + +int His_Maint_Min = HIS_MAINT_MIN; +int His_Maint_Hour = HIS_MAINT_HOUR; +int Expiredays = EXPIREDAYS; + +nodelist_t *NODELIST = NULL, **NODELIST_BYNODE = NULL; +newsfeeds_t *NEWSFEEDS = NULL, **NEWSFEEDS_BYBOARD = NULL; +static char *NODELIST_BUF, *NEWSFEEDS_BUF; +int NFCOUNT, NLCOUNT; +int LOCALNODELIST = 0, NONENEWSFEEDS = 0; #ifndef _PATH_BBSHOME -# define _PATH_BBSHOME "/u/staff/bbsroot/csie_util/bntpd/home" +#define _PATH_BBSHOME "/u/staff/bbsroot/csie_util/bntpd/home" #endif -static FILE *bbslogfp; +static FILE *bbslogfp; -static int -verboseFlag=0; +static int + verboseFlag = 0; -static char* -verboseFilename=NULL; -static char verbosename[MAXPATHLEN]; +static char * + verboseFilename = NULL; +static char verbosename[MAXPATHLEN]; verboseon(filename) -char *filename; + char *filename; { - verboseFlag = 1; - if ( filename != NULL ) { - if (strchr(filename,'/') == NULL) { - sprintf(verbosename,"%s/innd/%s",BBSHOME,filename); - filename = verbosename; - } - } - verboseFilename = filename; + verboseFlag = 1; + if (filename != NULL) { + if (strchr(filename, '/') == NULL) { + sprintf(verbosename, "%s/innd/%s", BBSHOME, filename); + filename = verbosename; + } + } + verboseFilename = filename; } verboseoff() { - verboseFlag = 0; + verboseFlag = 0; } setverboseon() { - verboseFlag = 1; + verboseFlag = 1; } isverboselog() { - return verboseFlag; + return verboseFlag; } setverboseoff() { - verboseoff(); - if (bbslogfp != NULL) { - fclose(bbslogfp); - bbslogfp = NULL; - } + verboseoff(); + if (bbslogfp != NULL) { + fclose(bbslogfp); + bbslogfp = NULL; + } } -verboselog(char *fmt, ...) +verboselog(char *fmt,...) { - va_list ap; - char datebuf[40]; - time_t now; + va_list ap; + char datebuf[40]; + time_t now; - if (verboseFlag == 0) return; + if (verboseFlag == 0) + return; - va_start(ap, fmt); + va_start(ap, fmt); - time(&now); - strftime(datebuf, sizeof(datebuf), "%b %d %X ", localtime(&now)); + time(&now); + strftime(datebuf, sizeof(datebuf), "%b %d %X ", localtime(&now)); - if (bbslogfp == NULL) { - if (verboseFilename != NULL) - bbslogfp = fopen(verboseFilename, "a"); - else - bbslogfp = fdopen(1, "a"); - } - if (bbslogfp == NULL) { - va_end(ap); - return; - } - fprintf(bbslogfp,"%s[%d] ",datebuf, getpid()); - vfprintf(bbslogfp, fmt, ap); - fflush(bbslogfp); + if (bbslogfp == NULL) { + if (verboseFilename != NULL) + bbslogfp = fopen(verboseFilename, "a"); + else + bbslogfp = fdopen(1, "a"); + } + if (bbslogfp == NULL) { va_end(ap); + return; + } + fprintf(bbslogfp, "%s[%d] ", datebuf, getpid()); + vfprintf(bbslogfp, fmt, ap); + fflush(bbslogfp); + va_end(ap); } #ifdef PalmBBS -xbbslog(char *fmt, ...) +xbbslog(char *fmt,...) #else -bbslog(char *fmt, ...) +bbslog(char *fmt,...) #endif { - va_list ap; - char datebuf[40]; - time_t now; + va_list ap; + char datebuf[40]; + time_t now; - va_start(ap, fmt); + va_start(ap, fmt); - time(&now); - strftime(datebuf, sizeof(datebuf), "%b %d %X ", localtime(&now)); + time(&now); + strftime(datebuf, sizeof(datebuf), "%b %d %X ", localtime(&now)); - if (bbslogfp == NULL) { - bbslogfp = fopen(LOGFILE, "a"); - } - if (bbslogfp == NULL) { - va_end(ap); - return; - } - fprintf(bbslogfp,"%s[%d] ",datebuf,getpid()); - vfprintf(bbslogfp, fmt, ap); - fflush(bbslogfp); + if (bbslogfp == NULL) { + bbslogfp = fopen(LOGFILE, "a"); + } + if (bbslogfp == NULL) { va_end(ap); + return; + } + fprintf(bbslogfp, "%s[%d] ", datebuf, getpid()); + vfprintf(bbslogfp, fmt, ap); + fflush(bbslogfp); + va_end(ap); } initial_bbs(outgoing) -char *outgoing; + char *outgoing; { - FILE* FN; - struct stat st; - int fd, i; - char *bbsnameptr=NULL; - -/* reopen bbslog */ - if (bbslogfp != NULL) { - fclose(bbslogfp); - bbslogfp = NULL; - } - + FILE *FN; + struct stat st; + int fd, i; + char *bbsnameptr = NULL; + + /* reopen bbslog */ + if (bbslogfp != NULL) { + fclose(bbslogfp); + bbslogfp = NULL; + } #ifdef WITH_ECHOMAIL - init_echomailfp(); - init_bbsfeedsfp(); + init_echomailfp(); + init_bbsfeedsfp(); #endif - LOCALNODELIST=0, NONENEWSFEEDS =0; - sprintf(INNDHOME,"%s/innd",BBSHOME); - sprintf(HISTORY, "%s/history",INNDHOME); - sprintf(LOGFILE, "%s/bbslog",INNDHOME); - sprintf(ECHOMAIL,"%s/echomail.log",BBSHOME); - sprintf(LOCALDAEMON,"%s/.innbbsd",INNDHOME); - sprintf(INNBBSCONF,"%s/innbbs.conf",INNDHOME); - sprintf(BBSFEEDS,"%s/bbsfeeds.log",INNDHOME); - - if (isfile(INNBBSCONF)) { - FILE *conf; - char buffer[MAXPATHLEN]; - conf = fopen(INNBBSCONF,"r"); - if (conf != NULL) { - while (fgets( buffer, sizeof buffer, conf) != NULL) { - char *ptr, *front=NULL, *value=NULL, *value2=NULL, *value3=NULL; - if ( buffer[0] == '#' || buffer[0] == '\n') continue; - for ( front = buffer; *front && isspace(*front); front++); - for ( ptr = front; *ptr && !isspace(*ptr) ; ptr++) ; - if (*ptr == '\0') continue; - *ptr++ = '\0'; - for ( ; *ptr && isspace(*ptr) ; ptr++) ; - if (*ptr == '\0') continue; - value = ptr++; - for ( ; *ptr && !isspace(*ptr) ; ptr++) ; - if (*ptr) { - *ptr++ = '\0'; - for ( ; *ptr && isspace(*ptr) ; ptr++) ; - value2 = ptr++; - for ( ; *ptr && !isspace(*ptr) ; ptr++) ; - if (*ptr) { - *ptr++ = '\0'; - for ( ; *ptr && isspace(*ptr) ; ptr++) ; - value3 = ptr++; - for ( ; *ptr && !isspace(*ptr) ; ptr++) ; - if (*ptr) { - *ptr++ = '\0'; - } - } - } - if ( strcasecmp(front,"expiredays") == 0) { - Expiredays = atoi(value); - if (Expiredays < 0) { - Expiredays = EXPIREDAYS; - } - } else if ( strcasecmp(front,"expiretime") == 0) { - ptr = strchr(value,':'); - if (ptr == NULL) { - fprintf(stderr, "Syntax error in innbbs.conf\n"); - } else { - *ptr++ = '\0'; - His_Maint_Hour = atoi(value); - His_Maint_Min = atoi(ptr); - if (His_Maint_Hour < 0) - His_Maint_Hour = HIS_MAINT_HOUR; - if (His_Maint_Min < 0) - His_Maint_Min = HIS_MAINT_MIN; + LOCALNODELIST = 0, NONENEWSFEEDS = 0; + sprintf(INNDHOME, "%s/innd", BBSHOME); + sprintf(HISTORY, "%s/history", INNDHOME); + sprintf(LOGFILE, "%s/bbslog", INNDHOME); + sprintf(ECHOMAIL, "%s/echomail.log", BBSHOME); + sprintf(LOCALDAEMON, "%s/.innbbsd", INNDHOME); + sprintf(INNBBSCONF, "%s/innbbs.conf", INNDHOME); + sprintf(BBSFEEDS, "%s/bbsfeeds.log", INNDHOME); + + if (isfile(INNBBSCONF)) { + FILE *conf; + char buffer[MAXPATHLEN]; + conf = fopen(INNBBSCONF, "r"); + if (conf != NULL) { + while (fgets(buffer, sizeof buffer, conf) != NULL) { + char *ptr, *front = NULL, *value = NULL, *value2 = NULL, + *value3 = NULL; + if (buffer[0] == '#' || buffer[0] == '\n') + continue; + for (front = buffer; *front && isspace(*front); front++); + for (ptr = front; *ptr && !isspace(*ptr); ptr++); + if (*ptr == '\0') + continue; + *ptr++ = '\0'; + for (; *ptr && isspace(*ptr); ptr++); + if (*ptr == '\0') + continue; + value = ptr++; + for (; *ptr && !isspace(*ptr); ptr++); + if (*ptr) { + *ptr++ = '\0'; + for (; *ptr && isspace(*ptr); ptr++); + value2 = ptr++; + for (; *ptr && !isspace(*ptr); ptr++); + if (*ptr) { + *ptr++ = '\0'; + for (; *ptr && isspace(*ptr); ptr++); + value3 = ptr++; + for (; *ptr && !isspace(*ptr); ptr++); + if (*ptr) { + *ptr++ = '\0'; + } + } } - } else if ( strcasecmp(front,"newsfeeds") == 0) { - if (strcmp(value,"none")==0) - NONENEWSFEEDS = 1; - } else if ( strcasecmp(front,"nodelist") == 0) { - if (strcmp(value,"local")==0) - LOCALNODELIST = 1; - } /*else if ( strcasecmp(front,"newsfeeds") == 0) { - printf("newsfeeds %s\n", value); - } else if ( strcasecmp(front,"nodelist") == 0) { - printf("nodelist %s\n", value); - } else if ( strcasecmp(front,"bbsname") == 0) { - printf("bbsname %s\n", value); - } */ - } - fclose(conf); - } - } - + if (strcasecmp(front, "expiredays") == 0) { + Expiredays = atoi(value); + if (Expiredays < 0) { + Expiredays = EXPIREDAYS; + } + } else if (strcasecmp(front, "expiretime") == 0) { + ptr = strchr(value, ':'); + if (ptr == NULL) { + fprintf(stderr, "Syntax error in innbbs.conf\n"); + } else { + *ptr++ = '\0'; + His_Maint_Hour = atoi(value); + His_Maint_Min = atoi(ptr); + if (His_Maint_Hour < 0) + His_Maint_Hour = HIS_MAINT_HOUR; + if (His_Maint_Min < 0) + His_Maint_Min = HIS_MAINT_MIN; + } + } else if (strcasecmp(front, "newsfeeds") == 0) { + if (strcmp(value, "none") == 0) + NONENEWSFEEDS = 1; + } else if (strcasecmp(front, "nodelist") == 0) { + if (strcmp(value, "local") == 0) + LOCALNODELIST = 1; + } /* else if ( strcasecmp(front,"newsfeeds") == + * 0) { printf("newsfeeds %s\n", value); } + * else if ( strcasecmp(front,"nodelist") == + * 0) { printf("nodelist %s\n", value); } + * else if ( strcasecmp(front,"bbsname") == + * 0) { printf("bbsname %s\n", value); } */ + } + fclose(conf); + } + } #ifdef WITH_ECHOMAIL - bbsnameptr = (char*) fileglue("%s/bbsname.bbs",INNDHOME); - if ((FN = fopen( bbsnameptr ,"r" ))==NULL) { - fprintf(stderr,"can't open file %s\n", bbsnameptr); - return 0; - } - while ( fscanf(FN,"%s", MYBBSID) != EOF); - fclose(FN); - if( ! isdir(fileglue("%s/out.going",BBSHOME)) ) { - mkdir( (char*)fileglue("%s/out.going",BBSHOME), 0750 ); - } - if (NONENEWSFEEDS == 0) - readnffile(INNDHOME); - if (LOCALNODELIST == 0) { - if (readnlfile(INNDHOME, outgoing) != 0) return 0; - } - + bbsnameptr = (char *)fileglue("%s/bbsname.bbs", INNDHOME); + if ((FN = fopen(bbsnameptr, "r")) == NULL) { + fprintf(stderr, "can't open file %s\n", bbsnameptr); + return 0; + } + while (fscanf(FN, "%s", MYBBSID) != EOF); + fclose(FN); + if (!isdir(fileglue("%s/out.going", BBSHOME))) { + mkdir((char *)fileglue("%s/out.going", BBSHOME), 0750); + } + if (NONENEWSFEEDS == 0) + readnffile(INNDHOME); + if (LOCALNODELIST == 0) { + if (readnlfile(INNDHOME, outgoing) != 0) + return 0; + } #endif - return 1; + return 1; } -static int -nf_byboardcmp(a,b) -newsfeeds_t **a, **b; +static int +nf_byboardcmp(a, b) + newsfeeds_t **a, **b; { -/* - if (!a || !*a || !(*a)->board) return -1; - if (!b || !*b || !(*b)->board) return 1; -*/ - return strcasecmp((*a)->board, (*b)->board); + /* + * if (!a || !*a || !(*a)->board) return -1; if (!b || !*b || + * !(*b)->board) return 1; + */ + return strcasecmp((*a)->board, (*b)->board); } -static int -nfcmp(a,b) -newsfeeds_t *a, *b; +static int +nfcmp(a, b) + newsfeeds_t *a, *b; { -/* - if (!a || !a->newsgroups) return -1; - if (!b || !b->newsgroups) return 1; -*/ - return strcasecmp(a->newsgroups, b->newsgroups); + /* + * if (!a || !a->newsgroups) return -1; if (!b || !b->newsgroups) return + * 1; + */ + return strcasecmp(a->newsgroups, b->newsgroups); } -static int -nlcmp(a,b) -nodelist_t *a, *b; +static int +nlcmp(a, b) + nodelist_t *a, *b; { -/* - if (!a || !a->host) return -1; - if (!b || !b->host) return 1; -*/ - return strcasecmp(a->host, b->host); + /* + * if (!a || !a->host) return -1; if (!b || !b->host) return 1; + */ + return strcasecmp(a->host, b->host); } -static int -nl_bynodecmp(a,b) -nodelist_t **a, **b; +static int +nl_bynodecmp(a, b) + nodelist_t **a, **b; { -/* - if (!a || !*a || !(*a)->node) return -1; - if (!b || !*b || !(*b)->node) return 1; -*/ - return strcasecmp((*a)->node, (*b)->node); + /* + * if (!a || !*a || !(*a)->node) return -1; if (!b || !*b || !(*b)->node) + * return 1; + */ + return strcasecmp((*a)->node, (*b)->node); } /* read in newsfeeds.bbs and nodelist.bbs */ readnlfile(inndhome, outgoing) -char *inndhome; -char *outgoing; + char *inndhome; + char *outgoing; { - FILE *fp; - char buff[1024]; - struct stat st; - int i, count, j; - char *ptr, *nodelistptr; - static lastcount=0; - - sprintf(buff,"%s/nodelist.bbs", inndhome); - fp = fopen(buff,"r"); + FILE *fp; + char buff[1024]; + struct stat st; + int i, count, j; + char *ptr, *nodelistptr; + static lastcount = 0; + + sprintf(buff, "%s/nodelist.bbs", inndhome); + fp = fopen(buff, "r"); if (fp == NULL) { - fprintf(stderr,"open fail %s",buff); - return -1; + fprintf(stderr, "open fail %s", buff); + return -1; } - if (fstat(fileno(fp),&st) != 0) { - fprintf(stderr,"stat fail %s", buff); - return -1; + if (fstat(fileno(fp), &st) != 0) { + fprintf(stderr, "stat fail %s", buff); + return -1; } if (NODELIST_BUF == NULL) { - NODELIST_BUF = (char*) mymalloc( st.st_size +1); + NODELIST_BUF = (char *)mymalloc(st.st_size + 1); } else { - NODELIST_BUF = (char*) myrealloc( NODELIST_BUF, st.st_size +1); + NODELIST_BUF = (char *)myrealloc(NODELIST_BUF, st.st_size + 1); } - i = 0, count =0; + i = 0, count = 0; while (fgets(buff, sizeof buff, fp) != NULL) { - if (buff[0] == '#') continue; - if (buff[0] == '\n') continue; - strcpy(NODELIST_BUF+i, buff); - i += strlen(buff); - count ++; + if (buff[0] == '#') + continue; + if (buff[0] == '\n') + continue; + strcpy(NODELIST_BUF + i, buff); + i += strlen(buff); + count++; } fclose(fp); if (NODELIST == NULL) { - NODELIST = (nodelist_t*) mymalloc(sizeof(nodelist_t) * (count+1)); - NODELIST_BYNODE = (nodelist_t**) mymalloc(sizeof(nodelist_t*) * (count+1)); + NODELIST = (nodelist_t *) mymalloc(sizeof(nodelist_t) * (count + 1)); + NODELIST_BYNODE = (nodelist_t **) mymalloc(sizeof(nodelist_t *) * (count + 1)); } else { - NODELIST = (nodelist_t*) myrealloc(NODELIST, sizeof(nodelist_t) * (count+1)); - NODELIST_BYNODE = (nodelist_t**) myrealloc(NODELIST_BYNODE, sizeof(nodelist_t*) * (count+1)); + NODELIST = (nodelist_t *) myrealloc(NODELIST, sizeof(nodelist_t) * (count + 1)); + NODELIST_BYNODE = (nodelist_t **) myrealloc(NODELIST_BYNODE, sizeof(nodelist_t *) * (count + 1)); } - for (i=lastcount; i< count; i++) { - NODELIST[i].feedfp = NULL; + for (i = lastcount; i < count; i++) { + NODELIST[i].feedfp = NULL; } lastcount = count; NLCOUNT = 0; - for (ptr = NODELIST_BUF; (nodelistptr = (char*)strchr(ptr,'\n')) != NULL; ptr = nodelistptr +1, NLCOUNT++) { - char *nptr , *bptr, *pptr, *tptr; + for (ptr = NODELIST_BUF; (nodelistptr = (char *)strchr(ptr, '\n')) != NULL; ptr = nodelistptr + 1, NLCOUNT++) { + char *nptr, *bptr, *pptr, *tptr; *nodelistptr = '\0'; NODELIST[NLCOUNT].host = ""; NODELIST[NLCOUNT].exclusion = ""; NODELIST[NLCOUNT].node = ""; NODELIST[NLCOUNT].protocol = "IHAVE(119)"; NODELIST[NLCOUNT].comments = ""; - NODELIST_BYNODE[NLCOUNT] = NODELIST+NLCOUNT; - for (nptr= ptr ;*nptr && isspace(*nptr); ) nptr++; + NODELIST_BYNODE[NLCOUNT] = NODELIST + NLCOUNT; + for (nptr = ptr; *nptr && isspace(*nptr);) + nptr++; if (*nptr == '\0') { - bbslog("nodelist.bbs %d entry read error\n", NLCOUNT); - return -1; - } - /*NODELIST[NLCOUNT].id = nptr;*/ - NODELIST[NLCOUNT].node = nptr; - for (nptr++; *nptr && !isspace(*nptr); ) nptr++; + bbslog("nodelist.bbs %d entry read error\n", NLCOUNT); + return -1; + } + /* NODELIST[NLCOUNT].id = nptr; */ + NODELIST[NLCOUNT].node = nptr; + for (nptr++; *nptr && !isspace(*nptr);) + nptr++; if (*nptr == '\0') { - bbslog("nodelist.bbs node %d entry read error\n", NLCOUNT); - return -1; - } - *nptr = '\0'; - if ((tptr = strchr(NODELIST[NLCOUNT].node,'/'))) { - *tptr = '\0'; - NODELIST[NLCOUNT].exclusion = tptr + 1; + bbslog("nodelist.bbs node %d entry read error\n", NLCOUNT); + return -1; + } + *nptr = '\0'; + if ((tptr = strchr(NODELIST[NLCOUNT].node, '/'))) { + *tptr = '\0'; + NODELIST[NLCOUNT].exclusion = tptr + 1; } else { - NODELIST[NLCOUNT].exclusion = ""; + NODELIST[NLCOUNT].exclusion = ""; } - for (nptr++ ;*nptr && isspace(*nptr); ) nptr++; - if (*nptr == '\0') continue; - if (*nptr=='+' || *nptr=='-') { - NODELIST[NLCOUNT].feedtype = *nptr; - if (NODELIST[NLCOUNT].feedfp != NULL) { - fclose(NODELIST[NLCOUNT].feedfp); - } - if ( NODELIST[NLCOUNT].feedtype == '+') - if (outgoing != NULL) { - NODELIST[NLCOUNT].feedfp = fopen((char*)fileglue("%s/out.going/%s.%s",BBSHOME, NODELIST[NLCOUNT].node, outgoing),"a"); - } - nptr++; + for (nptr++; *nptr && isspace(*nptr);) + nptr++; + if (*nptr == '\0') + continue; + if (*nptr == '+' || *nptr == '-') { + NODELIST[NLCOUNT].feedtype = *nptr; + if (NODELIST[NLCOUNT].feedfp != NULL) { + fclose(NODELIST[NLCOUNT].feedfp); + } + if (NODELIST[NLCOUNT].feedtype == '+') + if (outgoing != NULL) { + NODELIST[NLCOUNT].feedfp = fopen((char *)fileglue("%s/out.going/%s.%s", BBSHOME, NODELIST[NLCOUNT].node, outgoing), "a"); + } + nptr++; } else { - NODELIST[NLCOUNT].feedtype = ' '; + NODELIST[NLCOUNT].feedtype = ' '; } - NODELIST[NLCOUNT].host = nptr; - for (nptr++; *nptr && !isspace(*nptr); ) nptr++; + NODELIST[NLCOUNT].host = nptr; + for (nptr++; *nptr && !isspace(*nptr);) + nptr++; if (*nptr == '\0') { - continue; - } - *nptr = '\0'; - for (nptr++;*nptr && isspace(*nptr); ) nptr++; - if (*nptr == '\0') continue; - NODELIST[NLCOUNT].protocol = nptr; - for (nptr++; *nptr && !isspace(*nptr); ) nptr++; - if (*nptr == '\0') continue; - *nptr = '\0'; - for (nptr++;*nptr && strchr(" \t\r\n",*nptr); ) nptr++; - if (*nptr == '\0') continue; - NODELIST[NLCOUNT].comments = nptr; + continue; + } + *nptr = '\0'; + for (nptr++; *nptr && isspace(*nptr);) + nptr++; + if (*nptr == '\0') + continue; + NODELIST[NLCOUNT].protocol = nptr; + for (nptr++; *nptr && !isspace(*nptr);) + nptr++; + if (*nptr == '\0') + continue; + *nptr = '\0'; + for (nptr++; *nptr && strchr(" \t\r\n", *nptr);) + nptr++; + if (*nptr == '\0') + continue; + NODELIST[NLCOUNT].comments = nptr; } qsort(NODELIST, NLCOUNT, sizeof(nodelist_t), nlcmp); - qsort(NODELIST_BYNODE, NLCOUNT, sizeof(nodelist_t*), nl_bynodecmp); + qsort(NODELIST_BYNODE, NLCOUNT, sizeof(nodelist_t *), nl_bynodecmp); return 0; } readnffile(inndhome) -char *inndhome; + char *inndhome; { - FILE *fp; - char buff[1024]; - struct stat st; - int i, count; - char *ptr, *newsfeedsptr; - - sprintf(buff,"%s/newsfeeds.bbs", inndhome); - fp = fopen(buff,"r"); + FILE *fp; + char buff[1024]; + struct stat st; + int i, count; + char *ptr, *newsfeedsptr; + + sprintf(buff, "%s/newsfeeds.bbs", inndhome); + fp = fopen(buff, "r"); if (fp == NULL) { - fprintf(stderr,"open fail %s",buff); - return -1; + fprintf(stderr, "open fail %s", buff); + return -1; } - if (fstat(fileno(fp),&st) != 0) { - fprintf(stderr,"stat fail %s", buff); - return -1; + if (fstat(fileno(fp), &st) != 0) { + fprintf(stderr, "stat fail %s", buff); + return -1; } if (NEWSFEEDS_BUF == NULL) { - NEWSFEEDS_BUF = (char*) mymalloc( st.st_size +1); + NEWSFEEDS_BUF = (char *)mymalloc(st.st_size + 1); } else { - NEWSFEEDS_BUF = (char*) myrealloc( NEWSFEEDS_BUF, st.st_size +1); + NEWSFEEDS_BUF = (char *)myrealloc(NEWSFEEDS_BUF, st.st_size + 1); } - i = 0, count =0; + i = 0, count = 0; while (fgets(buff, sizeof buff, fp) != NULL) { - if (buff[0] == '#') continue; - if (buff[0] == '\n') continue; - strcpy(NEWSFEEDS_BUF+i, buff); - i += strlen(buff); - count ++; + if (buff[0] == '#') + continue; + if (buff[0] == '\n') + continue; + strcpy(NEWSFEEDS_BUF + i, buff); + i += strlen(buff); + count++; } fclose(fp); if (NEWSFEEDS == NULL) { - NEWSFEEDS = (newsfeeds_t*) mymalloc(sizeof(newsfeeds_t) * (count+1)); - NEWSFEEDS_BYBOARD = (newsfeeds_t**) mymalloc(sizeof(newsfeeds_t*) * (count+1)); + NEWSFEEDS = (newsfeeds_t *) mymalloc(sizeof(newsfeeds_t) * (count + 1)); + NEWSFEEDS_BYBOARD = (newsfeeds_t **) mymalloc(sizeof(newsfeeds_t *) * (count + 1)); } else { - NEWSFEEDS = (newsfeeds_t*) myrealloc(NEWSFEEDS, sizeof(newsfeeds_t) * (count+1)); - NEWSFEEDS_BYBOARD = (newsfeeds_t**) myrealloc(NEWSFEEDS_BYBOARD, sizeof(newsfeeds_t*) * (count+1)); + NEWSFEEDS = (newsfeeds_t *) myrealloc(NEWSFEEDS, sizeof(newsfeeds_t) * (count + 1)); + NEWSFEEDS_BYBOARD = (newsfeeds_t **) myrealloc(NEWSFEEDS_BYBOARD, sizeof(newsfeeds_t *) * (count + 1)); } - NFCOUNT = 0; - for (ptr = NEWSFEEDS_BUF; (newsfeedsptr = (char*)strchr(ptr,'\n')) != NULL; ptr = newsfeedsptr +1, NFCOUNT++) { - char *nptr , *bptr, *pptr; + NFCOUNT = 0; + for (ptr = NEWSFEEDS_BUF; (newsfeedsptr = (char *)strchr(ptr, '\n')) != NULL; ptr = newsfeedsptr + 1, NFCOUNT++) { + char *nptr, *bptr, *pptr; *newsfeedsptr = '\0'; NEWSFEEDS[NFCOUNT].newsgroups = ""; NEWSFEEDS[NFCOUNT].board = ""; NEWSFEEDS[NFCOUNT].path = NULL; - NEWSFEEDS_BYBOARD[NFCOUNT] = NEWSFEEDS+NFCOUNT; - for (nptr= ptr ;*nptr && isspace(*nptr); ) nptr++; - if (*nptr == '\0') continue; - NEWSFEEDS[NFCOUNT].newsgroups = nptr; - for (nptr++; *nptr && !isspace(*nptr); ) nptr++; - if (*nptr == '\0') continue; - *nptr = '\0'; - for (nptr++ ;*nptr && isspace(*nptr); ) nptr++; - if (*nptr == '\0') continue; - NEWSFEEDS[NFCOUNT].board = nptr; - for (nptr++; *nptr && !isspace(*nptr); ) nptr++; - if (*nptr == '\0') continue; - *nptr = '\0'; - for (nptr++;*nptr && isspace(*nptr); ) nptr++; - if (*nptr == '\0') continue; - NEWSFEEDS[NFCOUNT].path = nptr; - for (nptr++; *nptr && !strchr("\r\n",*nptr); ) nptr++; - /*if (*nptr == '\0') continue;*/ - *nptr = '\0'; + NEWSFEEDS_BYBOARD[NFCOUNT] = NEWSFEEDS + NFCOUNT; + for (nptr = ptr; *nptr && isspace(*nptr);) + nptr++; + if (*nptr == '\0') + continue; + NEWSFEEDS[NFCOUNT].newsgroups = nptr; + for (nptr++; *nptr && !isspace(*nptr);) + nptr++; + if (*nptr == '\0') + continue; + *nptr = '\0'; + for (nptr++; *nptr && isspace(*nptr);) + nptr++; + if (*nptr == '\0') + continue; + NEWSFEEDS[NFCOUNT].board = nptr; + for (nptr++; *nptr && !isspace(*nptr);) + nptr++; + if (*nptr == '\0') + continue; + *nptr = '\0'; + for (nptr++; *nptr && isspace(*nptr);) + nptr++; + if (*nptr == '\0') + continue; + NEWSFEEDS[NFCOUNT].path = nptr; + for (nptr++; *nptr && !strchr("\r\n", *nptr);) + nptr++; + /* if (*nptr == '\0') continue; */ + *nptr = '\0'; } qsort(NEWSFEEDS, NFCOUNT, sizeof(newsfeeds_t), nfcmp); - qsort(NEWSFEEDS_BYBOARD, NFCOUNT, sizeof(newsfeeds_t*), nf_byboardcmp); + qsort(NEWSFEEDS_BYBOARD, NFCOUNT, sizeof(newsfeeds_t *), nf_byboardcmp); } -newsfeeds_t *search_board(board) -char *board; +newsfeeds_t * +search_board(board) + char *board; { - newsfeeds_t nft, *nftptr, **find; - if (NONENEWSFEEDS) return NULL; - nft.board = board; - nftptr = &nft; - find = (newsfeeds_t**)bsearch((char*)&nftptr, NEWSFEEDS_BYBOARD, NFCOUNT, sizeof(newsfeeds_t*), nf_byboardcmp); - if (find != NULL) return *find; - return NULL; + newsfeeds_t nft, *nftptr, **find; + if (NONENEWSFEEDS) + return NULL; + nft.board = board; + nftptr = &nft; + find = (newsfeeds_t **) bsearch((char *)&nftptr, NEWSFEEDS_BYBOARD, NFCOUNT, sizeof(newsfeeds_t *), nf_byboardcmp); + if (find != NULL) + return *find; + return NULL; } -nodelist_t *search_nodelist_bynode(node) -char *node; +nodelist_t * +search_nodelist_bynode(node) + char *node; { - nodelist_t nlt, *nltptr, **find; - if (LOCALNODELIST) return NULL; - nlt.node = node; - nltptr = ≮ - find = (nodelist_t**)bsearch((char*)&nltptr, NODELIST_BYNODE, NLCOUNT, sizeof(nodelist_t*), nl_bynodecmp); - if (find != NULL) return *find; - return NULL; + nodelist_t nlt, *nltptr, **find; + if (LOCALNODELIST) + return NULL; + nlt.node = node; + nltptr = ≮ + find = (nodelist_t **) bsearch((char *)&nltptr, NODELIST_BYNODE, NLCOUNT, sizeof(nodelist_t *), nl_bynodecmp); + if (find != NULL) + return *find; + return NULL; } -nodelist_t *search_nodelist(site, identuser) -char *site; -char *identuser; +nodelist_t * +search_nodelist(site, identuser) + char *site; + char *identuser; { - nodelist_t nlt, *find; - char buffer[1024]; - if (LOCALNODELIST) return NULL; - nlt.host = site; - find = (nodelist_t*)bsearch((char*)&nlt, NODELIST, NLCOUNT, sizeof(nodelist_t), nlcmp); - if (find == NULL && identuser != NULL) { - sprintf(buffer,"%s@%s", identuser, site); - nlt.host = buffer; - find = (nodelist_t*)bsearch((char*)&nlt, NODELIST, NLCOUNT, sizeof(nodelist_t), nlcmp); - } - return find; + nodelist_t nlt, *find; + char buffer[1024]; + if (LOCALNODELIST) + return NULL; + nlt.host = site; + find = (nodelist_t *) bsearch((char *)&nlt, NODELIST, NLCOUNT, sizeof(nodelist_t), nlcmp); + if (find == NULL && identuser != NULL) { + sprintf(buffer, "%s@%s", identuser, site); + nlt.host = buffer; + find = (nodelist_t *) bsearch((char *)&nlt, NODELIST, NLCOUNT, sizeof(nodelist_t), nlcmp); + } + return find; } -newsfeeds_t *search_group(newsgroup) -char *newsgroup; +newsfeeds_t * +search_group(newsgroup) + char *newsgroup; { - newsfeeds_t nft, *find; - if (NONENEWSFEEDS) return NULL; - nft.newsgroups = newsgroup; - find = (newsfeeds_t*)bsearch((char*)&nft, NEWSFEEDS, NFCOUNT, sizeof(newsfeeds_t), nfcmp); - return find; + newsfeeds_t nft, *find; + if (NONENEWSFEEDS) + return NULL; + nft.newsgroups = newsgroup; + find = (newsfeeds_t *) bsearch((char *)&nft, NEWSFEEDS, NFCOUNT, sizeof(newsfeeds_t), nfcmp); + return find; } -char *ascii_date(now) -time_t now; +char * +ascii_date(now) + time_t now; { - static char datebuf[40]; - /*time_t now; - time(&now);*/ - strftime(datebuf, sizeof(datebuf), "%d %b %Y %X GMT", gmtime(&now)); - return datebuf; + static char datebuf[40]; + /* + * time_t now; time(&now); + */ + strftime(datebuf, sizeof(datebuf), "%d %b %Y %X GMT", gmtime(&now)); + return datebuf; } -char * +char * restrdup(ptr, string) -char *ptr; -char *string; + char *ptr; + char *string; { - int len ; - if (string == NULL) { - if (ptr != NULL) *ptr = '\0'; - return ptr; - } - len = strlen(string) + 1; - if (ptr != NULL) { - ptr = (char*)myrealloc(ptr, len); - } else - ptr = (char*)mymalloc(len); - strcpy(ptr, string); - return ptr; + int len; + if (string == NULL) { + if (ptr != NULL) + *ptr = '\0'; + return ptr; + } + len = strlen(string) + 1; + if (ptr != NULL) { + ptr = (char *)myrealloc(ptr, len); + } else + ptr = (char *)mymalloc(len); + strcpy(ptr, string); + return ptr; } -void * +void * mymalloc(size) -int size; + int size; { - char *ptr = (char*)malloc(size); + char *ptr = (char *)malloc(size); if (ptr == NULL) { - fprintf(stderr, "cant allocate memory\n"); - syslog(LOG_ERR, "cant allocate memory %m"); - exit(1); + fprintf(stderr, "cant allocate memory\n"); + syslog(LOG_ERR, "cant allocate memory %m"); + exit(1); } return ptr; } -void * +void * myrealloc(optr, size) -void *optr; -int size; + void *optr; + int size; { - char *ptr = (char*)realloc(optr, size); + char *ptr = (char *)realloc(optr, size); if (ptr == NULL) { - fprintf(stderr, "cant allocate memory\n"); - syslog(LOG_ERR, "cant allocate memory %m"); - exit(1); + fprintf(stderr, "cant allocate memory\n"); + syslog(LOG_ERR, "cant allocate memory %m"); + exit(1); } return ptr; } testandmkdir(dir) -char *dir; + char *dir; { - if (!isdir(dir)) { - char path[MAXPATHLEN+12]; - sprintf(path,"mkdir -p %s",dir); - system(path); - } + if (!isdir(dir)) { + char path[MAXPATHLEN + 12]; + sprintf(path, "mkdir -p %s", dir); + system(path); + } } - -static char splitbuf[2048]; -static char joinbuf[1024]; -#define MAXTOK 50 -static char* Splitptr[MAXTOK]; -char **split(line,pat) -char *line,*pat; + +static char splitbuf[2048]; +static char joinbuf[1024]; +#define MAXTOK 50 +static char *Splitptr[MAXTOK]; +char ** +split(line, pat) + char *line, *pat; { - char *p; - int i; - - for (i=0;i<MAXTOK;++i) Splitptr[i] = NULL; - strncpy(splitbuf,line,sizeof splitbuf - 1 ); - /*printf("%d %d\n",strlen(line),strlen(splitbuf));*/ - splitbuf[sizeof splitbuf - 1] = '\0'; - for (i=0,p=splitbuf;*p && i< MAXTOK -1 ;){ - for (Splitptr[i++]=p;*p && !strchr(pat,*p);p++); - if (*p=='\0') break; - for (*p++='\0'; *p && strchr(pat,*p);p++); - } - return Splitptr; + char *p; + int i; + + for (i = 0; i < MAXTOK; ++i) + Splitptr[i] = NULL; + strncpy(splitbuf, line, sizeof splitbuf - 1); + /* printf("%d %d\n",strlen(line),strlen(splitbuf)); */ + splitbuf[sizeof splitbuf - 1] = '\0'; + for (i = 0, p = splitbuf; *p && i < MAXTOK - 1;) { + for (Splitptr[i++] = p; *p && !strchr(pat, *p); p++); + if (*p == '\0') + break; + for (*p++ = '\0'; *p && strchr(pat, *p); p++); + } + return Splitptr; } -char **BNGsplit(line) -char *line; +char ** +BNGsplit(line) + char *line; { - char **ptr = split(line,","); - newsfeeds_t *nf1, *nf2; - char *n11, *n12, *n21, *n22; - int i,j; - for (i=0; ptr[i] != NULL; i++) { - nf1 = (newsfeeds_t*)search_group(ptr[i]); - for (j=i+1; ptr[j] != NULL; j++) { - if (strcmp(ptr[i],ptr[j])==0) { - *ptr[j] = '\0'; - continue; - } - nf2 = (newsfeeds_t*)search_group(ptr[j]); - if (nf1 && nf2) { - if (strcmp(nf1->board,nf2->board)==0) { - *ptr[j] = '\0'; - continue; - } - for (n11 = nf1->board, n12 = (char*)strchr(n11,','); - n11 && *n11 ; n12 = (char*) strchr(n11,',')) { - if (n12) *n12 = '\0'; - for (n21 = nf2->board, n22 = (char*)strchr(n21,','); - n21 && *n21 ; n22 = (char*) strchr(n21,',')) { - if (n22) *n22 = '\0'; - if (strcmp(n11,n21)==0) { - *n21 = '\t'; - } - if (n22) { - *n22 = ','; - n21 = n22 + 1; - } else - break; - } - if (n12) { - *n12 = ','; - n11 = n12 +1; - } else - break; - } - } - } - } - return ptr; + char **ptr = split(line, ","); + newsfeeds_t *nf1, *nf2; + char *n11, *n12, *n21, *n22; + int i, j; + for (i = 0; ptr[i] != NULL; i++) { + nf1 = (newsfeeds_t *) search_group(ptr[i]); + for (j = i + 1; ptr[j] != NULL; j++) { + if (strcmp(ptr[i], ptr[j]) == 0) { + *ptr[j] = '\0'; + continue; + } + nf2 = (newsfeeds_t *) search_group(ptr[j]); + if (nf1 && nf2) { + if (strcmp(nf1->board, nf2->board) == 0) { + *ptr[j] = '\0'; + continue; + } + for (n11 = nf1->board, n12 = (char *)strchr(n11, ','); + n11 && *n11; n12 = (char *)strchr(n11, ',')) { + if (n12) + *n12 = '\0'; + for (n21 = nf2->board, n22 = (char *)strchr(n21, ','); + n21 && *n21; n22 = (char *)strchr(n21, ',')) { + if (n22) + *n22 = '\0'; + if (strcmp(n11, n21) == 0) { + *n21 = '\t'; + } + if (n22) { + *n22 = ','; + n21 = n22 + 1; + } else + break; + } + if (n12) { + *n12 = ','; + n11 = n12 + 1; + } else + break; + } + } + } + } + return ptr; } -char **ssplit(line,pat) -char *line,*pat; +char ** +ssplit(line, pat) + char *line, *pat; { - char *p; - int i; - for (i=0;i<MAXTOK;++i) Splitptr[i] = NULL; - strncpy(splitbuf,line,1024); - for (i=0,p=splitbuf;*p && i< MAXTOK;){ - for (Splitptr[i++]=p;*p && !strchr(pat,*p);p++); - if (*p=='\0') break; - *p=0;p++; -/* for (*p='\0'; strchr(pat,*p);p++);*/ - } - return Splitptr; + char *p; + int i; + for (i = 0; i < MAXTOK; ++i) + Splitptr[i] = NULL; + strncpy(splitbuf, line, 1024); + for (i = 0, p = splitbuf; *p && i < MAXTOK;) { + for (Splitptr[i++] = p; *p && !strchr(pat, *p); p++); + if (*p == '\0') + break; + *p = 0; + p++; + /* for (*p='\0'; strchr(pat,*p);p++); */ + } + return Splitptr; } -char *join(lineptr,pat,num) -char **lineptr,*pat; -int num; +char * +join(lineptr, pat, num) + char **lineptr, *pat; + int num; { - int i; + int i; + joinbuf[0] = '\0'; + if (lineptr[0] != NULL) + strncpy(joinbuf, lineptr[0], 1024); + else { joinbuf[0] = '\0'; - if (lineptr[0] != NULL) - strncpy(joinbuf,lineptr[0],1024); - else { - joinbuf[0]='\0'; - return joinbuf; - } - for (i=1;i<num;i++) { - strcat(joinbuf,pat); - if (lineptr[i] != NULL) - strcat(joinbuf,lineptr[i]); - else - break; - } return joinbuf; + } + for (i = 1; i < num; i++) { + strcat(joinbuf, pat); + if (lineptr[i] != NULL) + strcat(joinbuf, lineptr[i]); + else + break; + } + return joinbuf; } #ifdef BBSLIB main() { - initial_bbs("feed"); - printf("%s\n",ascii_date()); + initial_bbs("feed"); + printf("%s\n", ascii_date()); } #endif - |