--- conf.h.orig Mon Nov 4 04:55:08 2002 +++ conf.h Mon Nov 4 04:55:43 2002 @@ -8,10 +8,12 @@ */ -#undef ALONE /* True if we're running without inetd */ +#define ALONE /* True if we're running without inetd */ #ifdef ALONE -#undef FASTFORK /* True if we don't want to read active file on start*/ +#define FASTFORK /* True if we don't want to read active file on start*/ +#define NEWS_GID 8 +#define NEWS_UID 8 #endif #define LOAD 5 /* Loadav above which server refuses connections */ @@ -40,23 +42,23 @@ #undef TLI /* Define this if you want to use TLI instead of */ /* sockets */ -#define NDBM /* Use new-style (4.3) ndbm(3x) libraries */ +#undef NDBM /* Use new-style (4.3) ndbm(3x) libraries */ #undef DBM /* True if we want to use the old dbm(3x) libraries */ /* IF YOU DEFINE THIS, change CFLAGS in makefile to */ /* be -ldbm */ -#undef DBZ /* True if we want to use dbz libraries */ +#define DBZ /* True if we want to use dbz libraries */ /* IF YOU DEFINE THIS, change CFLAGS in makefile to */ /* be /usr/lib/dbz.o and install dbz.h */ #undef USGHIST /* Use USG style history file (no DBM) */ /* IF YOU DO NOT DEFINE NDBM or DBM, this is DEFAULT!*/ -#undef CNEWS /* define this if you are running C News */ -#undef CNEWS_CLEARTEXT /* define this if you have a modern C News that handles +#define CNEWS /* define this if you are running C News */ +#define CNEWS_CLEARTEXT /* define this if you have a modern C News that handles input files ending in ".t" as cleartext */ -#undef BATCHED_INPUT /* define if you want to support C News style +#define BATCHED_INPUT /* define if you want to support C News style batched input (not supported by B-NEWS) */ #undef MSGID /* define this if you want to run msgidd to keep track of recent msgids via daemon */ @@ -70,9 +72,9 @@ /* typedefs for u_long */ #define VOIDSIG /* Newfangled signal() returns void, old returns int */ -#undef MMAP /* if your OS supports mmap() */ +#define MMAP /* if your OS supports mmap() */ -#undef DIRENT /* If you have define this */ +#define DIRENT /* If you have define this */ /* * If you DON'T have vfork, make this "#define vfork fork" @@ -89,7 +91,8 @@ /*#define MINFILES MINFREE/4*/ /* NNTP will not allow an XFER if there is less */ /* than this many inodes on the SPOOLDIR filesystem */ -#undef SETPROCTITLE /* if you want status visable via ps */ +#define SETPROCTITLE /* if you want status visable via ps */ +#define HAVE_PROCTITLE /* if the OS has setproctitle() */ #undef IHAVE_DEBUG /* Copious debugging output from ihave */ @@ -110,7 +113,7 @@ * if you are running BNEWS. At least, not yet. :-) */ -/* #define UMASK 022 */ +#define UMASK 022 /* * If you have the syslog library routine, define SYSLOG to @@ -177,13 +180,13 @@ #define XOVER /* xover -- Return .overview data */ #define OVER_XREFS /* overview files have xref data in them */ #define OVER_XREF_PREFIX /* the xref field (if present) includes xref: */ -#define OVER_FMT_FILE "/usr/lib/news/overview.fmt" +#define OVER_FMT_FILE "/usr/local/news/lib/overview.fmt" /* Leave this undefined to indicate that overview files go in the spool * directory. However, if you want a separate hierarchy of overview * files, define it here. */ -/*#define OVERVIEW_DIR "/usr/spool/overviews" /* base directory */ +#define OVERVIEW_DIR "/var/news/over.view" /* base directory */ #define XROVER /* xrover -- Return reference overview data */ @@ -191,10 +194,10 @@ * spool directory. However, if you want a separate hierarchy of rover * files, define it here. */ -/*#define ROVER_DIR "/usr/spool/overviews" /* base directory */ +/*define ROVER_DIR "/var/news/r.over" /* base directory */ #undef XINDEX /* Optional support for tin's index files */ -#define XINDEX_DIR "/usr/spool/news/.index" +#define XINDEX_DIR "/var/news/.index" /* XTHREAD defines: if XTHREAD is defined, THREAD_DIR controls where the * thread files will be read from. @@ -244,27 +247,27 @@ /* * This file is where access information is stored */ -#define ACCESS_FILE "/usr/lib/news/nntp_access" +#define ACCESS_FILE "/usr/local/news/lib/nntp_access" /* * The file where the newgroup creation times are kept. If you don't * have C News or INN, you can run acttimes (see the support directory) * to maintain an active.times file. */ -#define ACTIVE_TIMES_FILE "/usr/lib/news/active.times" +#define ACTIVE_TIMES_FILE "/usr/local/news/lib/active.times" /* * Some commonly used programs and files. */ -#define ACTIVE_FILE "/usr/lib/news/active" -#define DISTRIBUTIONS_FILE "/usr/lib/news/distributions" -#define SUBSCRIPTIONS_FILE "/usr/lib/news/subscriptions" -#define NEWSGROUPS_FILE "/usr/lib/news/newsgroups" -#define HISTORY_FILE "/usr/lib/news/history" -#define SPOOLDIR "/usr/spool/news" -#define INEWS "/usr/lib/news/inews" -#define RNEWS "/usr/bin/rnews" /* Link to inews? */ +#define ACTIVE_FILE "/usr/local/news/lib/active" +#define DISTRIBUTIONS_FILE "/usr/local/news/lib/distributions" +#define SUBSCRIPTIONS_FILE "/usr/local/news/lib/subscriptions" +#define NEWSGROUPS_FILE "/usr/local/news/lib/newsgroups" +#define HISTORY_FILE "/usr/local/news/lib/history" +#define SPOOLDIR "/var/news" +#define INEWS "/usr/local/news/lib/inews" +#define RNEWS "/usr/local/bin/rnews" /* Link to inews? */ /* * Support for C News style batching @@ -277,15 +280,15 @@ #else #define TOOBIG 300000L /* batch > TOOBIG bytes, kick rnews */ #define TOOMANY 1024 /* batch > TOOMANY articles, kick rnews */ -#define NEWSRUN "/usr/lib/newsbin/input/newsrun" +#define NEWSRUN "/usr/local/news/cnewsbin/input/newsrun" #endif #define TOOOLD (5*60) /* batch > TOOOLD seconds old, kick rnews */ #define COPYSIZE 8192 /* bytes to copy at one time */ #define MAXDIGITS 25 /* lg(maxlongint) + epsilon */ #define MAXSTR 1024 -#define INDIR "/usr/spool/news/in.coming" +#define INDIR "/var/news/in.coming" /* You may wish to delete the pathname from the front of BATCH_FILE */ -#define BATCH_FILE "/usr/spool/news/in.coming/nntp.XXXXXX" +#define BATCH_FILE "/var/news/in.coming/nntp.XXXXXX" /************************************************************************/ /* We don't recommend that you make changes in anything after this line */ --- server/access.c.orig 1994-12-03 21:54:38 UTC +++ server/access.c @@ -11,6 +11,10 @@ static char sccsid[] = "@(#)$Id: access.c,v 1.28 1994/ #endif #include +#ifdef __FreeBSD__ +# include +#endif + #define SNETMATCH 1 #define NETMATCH 2 @@ -40,6 +44,12 @@ static char sccsid[] = "@(#)$Id: access.c,v 1.28 1994/ * Side effects: None. */ +typedef union { + struct sockaddr sa; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; +} nntp_sockaddr_union_t; + #ifdef EXCELAN extern struct sockaddr_in current_peer; #endif @@ -54,15 +64,12 @@ extern int Needauth; #endif /* AUTH */ void -host_access(canread, canpost, canxfer, gdlist) - int *canread, *canpost, *canxfer; - char *gdlist; +host_access(int *hcanread, int *hcanpost, int *hcanxfer, char *gdlist) { int sockt; - int length; - struct sockaddr sa; + socklen_t length; + nntp_sockaddr_union_t su; #ifdef TLI - struct sockaddr_in *sin = (struct sockaddr_in *) &sa; struct hostent *hp; int argcnt = 0; #endif @@ -82,20 +89,21 @@ host_access(canread, canpost, canxfer, gdlist) gdlist[0] = '\0'; #ifdef NO_ACCESS_CHECK /* for special debugging */ - *canread = *canpost = *canxfer = 1; + *hcanread = *hcanpost = *hcanxfer = 1; return; #endif - *canread = *canpost = *canxfer = 0; + *hcanread = *hcanpost = *hcanxfer = 0; sockt = fileno(stdin); - length = sizeof (sa); + length = sizeof (su); + int sa_len = (su.sa.sa_family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6); #ifdef TLI - if (t_getpeername(sockt, &sa, &length) < 0) { + if (t_getpeername(sockt, &su.sa, &length) < 0) { if (isatty(sockt)) { (void) strcpy(hostname, "stdin"); - *canread = 1; + *hcanread = 1; } else { #ifdef SYSLOG syslog(LOG_ERR, "host_access: getpeername: %m"); @@ -110,11 +118,11 @@ host_access(canread, canpost, canxfer, gdlist) #ifdef EXCELAN if (raddr(current_peer.sin_addr) == NULL) { #else - if (getpeername(sockt, &sa, &length) < 0) { + if (getpeername(sockt, &su.sa, &length) < 0) { #endif if (isatty(sockt)) { (void) strcpy(hostname, "stdin"); - *canread = 1; + *hcanread = 1; } else { #ifdef SYSLOG syslog(LOG_ERR, "host_access: getpeername: %m"); @@ -124,24 +132,35 @@ host_access(canread, canpost, canxfer, gdlist) return; } #ifdef EXCELAN - else bcopy(¤t_peer,&sa,length); + else bcopy(¤t_peer,&su.sa,length); #endif #endif /* !TLI */ - switch (sa.sa_family) { + switch (su.sa.sa_family) { case AF_INET: - inet_netnames(sockt, &sa, net_name, snet_name, host_name); + inet_netnames(sockt, &su.sin, net_name, snet_name, host_name); break; + case AF_INET6: + + getnameinfo( (struct sockaddr *) &su.sa, su.sa.sa_len, + host_name, sizeof(host_name), NULL, 0, 0 ); + net_name[0] = snet_name[0] = '\0'; +#ifdef SYSLOG + syslog(LOG_DEBUG, "IPv6 connect from %s (%ld->%d/%d)", + host_name, (long)sizeof(su.sa), length, su.sa.sa_len ); +#endif + break; + #ifdef DECNET case AF_DECnet: - dnet_netnames(sockt, &sa, net_name, snet_name, host_name); + dnet_netnames(sockt, &su.sa, net_name, snet_name, host_name); break; #endif default: #ifdef SYSLOG - syslog(LOG_ERR, "unknown address family %ld", sa.sa_family); + syslog(LOG_ERR, "unknown address family %ld", (long)(su.sa.sa_family)); #endif return; }; @@ -227,33 +246,33 @@ host_access(canread, canpost, canxfer, gdlist) #else if (!strcasecmp(hostornet, host_name)) { #endif - *canread = (readperm[0] == 'r' || readperm[0] == 'R'); - *canxfer = (readperm[0] == 'X' || readperm[0] == 'x'); + *hcanread = (readperm[0] == 'r' || readperm[0] == 'R'); + *hcanxfer = (readperm[0] == 'X' || readperm[0] == 'x'); if (readperm[0] == 'B' || readperm[0] == 'b') - *canxfer = *canread = 1; - *canpost = (postperm[0] == 'p' || postperm[0] == 'P'); + *hcanxfer = *hcanread = 1; + *hcanpost = (postperm[0] == 'p' || postperm[0] == 'P'); (void) strcpy(gdlist, groups); break; } if (*snet_name && !strcasecmp(hostornet, snet_name)) { match = SNETMATCH; - *canread = (readperm[0] == 'r' || readperm[0] == 'R'); - *canxfer = (readperm[0] == 'X' || readperm[0] == 'x'); + *hcanread = (readperm[0] == 'r' || readperm[0] == 'R'); + *hcanxfer = (readperm[0] == 'X' || readperm[0] == 'x'); if (readperm[0] == 'B' || readperm[0] == 'b') - *canxfer = *canread = 1; - *canpost = (postperm[0] == 'p' || postperm[0] == 'P'); + *hcanxfer = *hcanread = 1; + *hcanpost = (postperm[0] == 'p' || postperm[0] == 'P'); (void) strcpy(gdlist, groups); } if (match != SNETMATCH && (!strcasecmp(hostornet, net_name) || !strcasecmp(hostornet, "default"))) { match = NETMATCH; - *canread = (readperm[0] == 'r' || readperm[0] == 'R'); - *canxfer = (readperm[0] == 'X' || readperm[0] == 'x'); + *hcanread = (readperm[0] == 'r' || readperm[0] == 'R'); + *hcanxfer = (readperm[0] == 'X' || readperm[0] == 'x'); if (readperm[0] == 'B' || readperm[0] == 'b') - *canxfer = *canread = 1; - *canpost = (postperm[0] == 'p' || postperm[0] == 'P'); + *hcanxfer = *hcanread = 1; + *hcanpost = (postperm[0] == 'p' || postperm[0] == 'P'); (void) strcpy(gdlist, groups); } } --- server/access_inet.c.orig 1994-11-01 05:40:07 UTC +++ server/access_inet.c @@ -29,12 +29,12 @@ static char sccsid[] = "@(#)access_inet.c 1.4 (Berkele */ void -inet_netnames(sock, sin, net_name, subnet_name, host_name) - int sock; - struct sockaddr_in *sin; - char *net_name; - char *subnet_name; - char *host_name; +inet_netnames( + int sock, + struct sockaddr_in *sin, + char *net_name, + char *subnet_name, + char *host_name) { #ifdef EXCELAN void excelan_netnames(); @@ -94,12 +94,12 @@ inet_netnames(sock, sin, net_name, subnet_name, host_n #ifdef EXCELAN void -excelan_netnames(sock, sin, net_name, subnet_name, host_name) - int sock; - struct sockaddr_in *sin; - char *net_name; - char *subnet_name; - char *host_name; +excelan_netnames( + int sock, + struct sockaddr_in *sin, + char *net_name, + char *subnet_name, + char *host_name) { char *hp, *raddr(); int octet[4]; --- server/active.c.orig 1994-11-01 05:40:09 UTC +++ server/active.c @@ -8,8 +8,6 @@ static char sccsid[] = "@(#)active.c 1.12 (Berkeley) 1 * Routines to deal with the active file */ -int act_cmp(); - /* * read_groups -- read the active file into memory, sort it, * and return the number of newsgroups read in. @@ -29,12 +27,11 @@ int act_cmp(); */ int -read_groups() +read_groups(void) { register int i; register int act_fd; register char *cp, *end; - char *malloc(); struct stat statbuf; /* @@ -66,8 +63,8 @@ read_groups() actbuf = malloc(statbuf.st_size); if (actbuf == NULL) { #ifdef SYSLOG - syslog(LOG_ERR, "read_groups: malloc %d bytes: %m", - statbuf.st_size); + syslog(LOG_ERR, "read_groups: malloc %lu bytes: %m", + (unsigned long)statbuf.st_size); #endif (void) close(act_fd); return (0); @@ -75,8 +72,8 @@ read_groups() if (read(act_fd, actbuf, (iolen_t)statbuf.st_size) != statbuf.st_size) { #ifdef SYSLOG - syslog(LOG_ERR, "read_groups: read %d bytes: %m", - statbuf.st_size); + syslog(LOG_ERR, "read_groups: read %lu bytes: %m", + (unsigned long)statbuf.st_size); #endif (void) close(act_fd); return (0); @@ -91,8 +88,8 @@ read_groups() group_array = (char **) malloc(i * (sizeof (char *))); if (group_array == NULL) { #ifdef SYSLOG - syslog(LOG_ERR, "read_groups: malloc %d bytes: %m", - i * sizeof (char **)); + syslog(LOG_ERR, "read_groups: malloc %lu bytes: %m", + (unsigned long)i * sizeof (char **)); #endif (void) close(act_fd); return (0); @@ -115,9 +112,10 @@ read_groups() } int -act_cmp(ptr1, ptr2) - char **ptr1, **ptr2; +act_cmp(const void *vptr1, const void *vptr2) { + char **ptr1 = (char **)vptr1; + char **ptr2 = (char **)vptr2; return(strcmp(*ptr1, *ptr2)); } @@ -140,9 +138,7 @@ act_cmp(ptr1, ptr2) */ int -find_group(group, low_msg, high_msg) - char *group; - int *low_msg, *high_msg; +find_group(const char *group, int *low_msg, int *high_msg) { char kludgebuf[MAXBUFLEN]; int cond; --- server/ahbs.c.orig 1994-11-01 05:40:11 UTC +++ server/ahbs.c @@ -4,7 +4,7 @@ static char sccsid[] = "@(#)ahbs.c 1.8 (Berkeley) 1/11 #include "common.h" -static char *verbiage[] = { +static const char *verbiage[] = { "head and body follow", "head follows", "body follows", @@ -19,9 +19,7 @@ static char *verbiage[] = { */ void -ahbs(argc, argv) - int argc; - char *argv[]; +ahbs(int argc, char **argv) { char artbuf[MAXPATHLEN], art_id[MAXBUFLEN]; register char c; --- server/batch.c.orig 1994-12-09 02:52:44 UTC +++ server/batch.c @@ -20,26 +20,25 @@ or any damage it may cause to any data of any kind any */ #include "common.h" #include +#ifndef __FreeBSD__ #ifdef sparc #ifndef SVR4 #include #endif #endif +#endif #ifdef BATCHED_INPUT #define YES 1 #define NO 0 -/* imports */ -extern time_t time(); -extern char *malloc(), *mktemp(), *index(), *rindex(); /* forwards */ -static char *strsave(); +static char *strsave(register char *); #ifdef XFER_TIMEOUT -static SIGRET xfer_timeout(); +static SIGRET xfer_timeout(void); #endif -static int cpstdin(); -static int appbatch(); -static int enqueue(); +static int cpstdin(int, int, char *, char *); +static int appbatch(void); +static int enqueue(int, int, char *); /* private data */ static char tempfile[256]; @@ -61,7 +60,7 @@ static struct batch_file { time_t start; /* time of creation */ off_t size; /* current size */ int arts; /* number of articles */ -} btch = { NULL, NULL, NO, 0, 0 }; +} btch = { NULL, NULL, NO, 0, 0, 0 }; /* * stash stdin (up to ".") on the end of the batch input file. @@ -76,10 +75,11 @@ static struct batch_file { * Can time out if XFER_TIMEOUT is defined. */ int -batch_input_article(cont_code, err_code, errbuf, msg_id) -int cont_code, err_code; -char *errbuf; -char *msg_id; +batch_input_article( +int cont_code, +int err_code, +char *errbuf, +char *msg_id) { int status = 1; /* okay status */ @@ -126,7 +126,7 @@ char *msg_id; } int /* boolean */ -oktorunbatch() +oktorunbatch(void) { struct stat stbuf; @@ -143,9 +143,11 @@ oktorunbatch() */ /* ARGSUSED errbuf */ static int /* boolean: got article ok? */ -cpstdin(cont_code, err_code, errbuf, msg_id) -int cont_code, err_code; -char *errbuf, *msg_id; +cpstdin( +int cont_code, +int err_code, +char *errbuf, +char *msg_id) { register FILE *tfp = NULL; register char *cp, *realline; @@ -246,10 +248,10 @@ char *errbuf, *msg_id; return 1; } +#ifdef XFER_TIMEOUT static SIGRET -xfer_timeout() +xfer_timeout(void) { -#ifdef XFER_TIMEOUT if (old_xfer_lines < xfer_lines) { old_xfer_lines = xfer_lines; (void) signal(SIGALRM, xfer_timeout); @@ -271,8 +273,8 @@ xfer_timeout() #endif (void) unlink(tempfile); exit(1); -#endif /* XFER_TIMEOUT */ } +#endif /* XFER_TIMEOUT */ /* * Append "#! rnews count" and art (or tempfile) to batch file, locking @@ -280,7 +282,7 @@ xfer_timeout() * to newsrun. */ static int /* same as batch_input_article */ -appbatch() +appbatch(void) { register FILE *tfp = NULL; register int bytes = 0; @@ -344,9 +346,10 @@ appbatch() * Enqueue any partial batch. Called before exit. */ void -enqpartbatch(cont_code, err_code, errbuf) -int cont_code, err_code; -char *errbuf; +enqpartbatch( +int cont_code, +int err_code, +char *errbuf) { struct stat stbuf; @@ -368,9 +371,10 @@ char *errbuf; * locks btch.name as appropriate. */ static int /* same as batch_input_article */ -enqueue(cont_code, err_code, errbuf) -int cont_code, err_code; -char *errbuf; +enqueue( +int cont_code, +int err_code, +char *errbuf) { time_t now; int pid, wpid, fd, exitstat; @@ -379,7 +383,8 @@ char *errbuf; #else union wait status; #endif - char permname[MAXDIGITS], *number = permname, *newsrun; + char permname[MAXDIGITS], *number = permname; + const char *newsrun; struct stat stbuf; #ifdef POSTER char *envp[4], user[sizeof(POSTER) + 5], logname[sizeof(POSTER) + 8]; @@ -518,8 +523,7 @@ char *errbuf; } static char * -strsave(s) -register char *s; +strsave(register char *s) { register char *news = malloc((unsigned)(strlen(s) + 1)); --- server/common.h.orig 1994-11-17 18:15:18 UTC +++ server/common.h @@ -35,7 +35,7 @@ extern struct passwd *getpwent(), *getpwuid(), *getpwn #define iolen_t unsigned # include #else /* not USG */ -# include +# include # include #define iolen_t int #endif /* not USG */ @@ -148,21 +148,33 @@ typedef struct { int fds_bits[1]; } fd_set; #define putline(s) fputs((s), stdout); putchar('\r'); putchar('\n'); +#ifdef __FreeBSD__ +#include +#include +#else extern int errno; extern char *gets(), *fgets(); extern char *mktemp(); +#endif +#if 0 extern FILE *open_valid_art(); extern FILE *openartbyid(); extern char *gethistent(); extern int restreql(); extern int s1strneql(); /* for ngmatch */ +#endif +extern int s1strneql(register char *s1, register char *s2); #ifdef DEBUG void debugup(), debugdown(); #endif #ifdef SETPROCTITLE +#ifdef HAVE_PROCTITLE +#include +#else void setproctitle(); #endif +#endif extern char spooldir[]; extern char activefile[]; @@ -199,7 +211,7 @@ extern int art_ptr; extern FILE *art_fp; extern int num_arts; extern int uid_poster, gid_poster; -extern char *home_poster; +extern const char *home_poster; extern int canread, canpost, canxfer; extern char **ngpermlist; extern int ngpermcount; @@ -219,3 +231,134 @@ extern int ih_failed; extern int nn_told; extern int nn_took; #endif + +/* access.c */ +void host_access(int *hcanread, int *hcanpost, int *hcanxfer, char *gdlist); + +/* access_inet.c */ +#include +void inet_netnames(int sock, struct sockaddr_in *sin, char *net_name, char *subnet_name, char *host_name); + +/* active.c */ +int read_groups(void); +int act_cmp(const void *vptr1, const void *vptr2); +int find_group(const char *group, int *low_msg, int *high_msg); + +/* ahbs.c */ +void ahbs(int argc, char *argv[]); + +/* batch.c */ +int batch_input_article(int cont_code, int err_code, char *errbuf, char *msg_id); +int oktorunbatch(void); +void enqpartbatch(int cont_code, int err_code, char *errbuf); + +/* date.c */ +void dodate(int ac, char *av[]); + +/* group.c */ +void group(int argc, char *argv[]); +#ifdef LISTGROUP +void xlistgroup(int argc, char *argv[]); +#endif + +/* help.c */ +void help(int argc, char *argv[]); + +/* ihave.c */ +void ihave(int argc, char *argv[]); + +/* nextlast.c */ +void nextlast(int argc, char *argv[]); + +/* list.c */ +void list(int argc, const char *argv[]); +void xgtitle(int argc, char *argv[]); + +/* misc.c */ +FILE *open_valid_art(char *artname, char *id); +char *gethistent(char *msg_id, int lookup); +FILE *openartbyid(char *msg_id); +int check_ngperm(register FILE *fp); +void spew(FILE *fp, int how); +void get_id(register FILE *gart_fp, char *id); +void close_crnt(void); +int findart(char *artname); +int get_distlist(char ***array, char *list); +char lower(register int c); +char *histfile(char *hline); +int findhfdigit(char *fn); +int space(int min_free); +int dfree(const char *spool, int free_space); +int getla(void); + +/* netaux.c */ +void read_again(void); +void disassoc(void); +int get_socket(void); +void make_stdio(int sockt); +void reaper(int); + +/* newgroups.c */ +void newgroups(int argc, char *argv[]); + +/* newnews.c */ +void newnews(register int argc, char *argv[]); +int seekuntil(FILE *fp, char *akey, char *line, int linesize); +int compare(register char *s, register char *t); +int getword(FILE *fp, register char *w, char *line, int linesize); +int distmatch(char *distlist[], int distcount, char *grouplist[], int groupcount); +int get_histlist(char ***array, register char *list); +int get_nglist(char ***array, char *list); + +/* ngmatch.c */ +int ngmatch(int (*func)(register char *, register char *), int dflt, char **ngspec, int ngspeccount, char **matchlist, int matchcount); +int restreql(register char *w, register char *s); + +/* nntpxmit.c */ + +/* parsit.c */ +int parsit(char *line, char ***array); + +/* post.c */ +void post(int argc, char *argv[]); + +/* remote.c */ + +/* scandir.c */ +int scan_dir(int low_msg, int high_msg); +int intcmp(const void *vptr1, const void *vptr2); + +/* serve.c */ +void serve(void); +void doxmode(int argc, char *argv[]); + +/* slave.c */ +void slave(int argc, char *argv[]); + +/* spawn.c */ +int spawn(char *path, const char *name, const char *flag, int cont_code, int err_code, char *errbuf, const char *msg_id); + +/* subnet.c */ +int getifconf(void); +u_long inet_snetof(u_long in); +int bsr(register long mask); + +/* wildmat.c */ +int wildmat(char *text, const char *p); + +/* xauth.c */ +#ifdef AUTH +void doxauthcap(int argc, char *argv[]); +void doxauthsys(int argc, char *argv[]); +void doxauthinfo(int argc, char *argv[]); +#endif + +/* xhdr.c */ +void xhdr(int argc, char *argv[]); + +/* xover.c */ +int valid_message_id(register char *start, register char *end); +void doxover(int argc, char *argv[]); +void doxrover(int argc, char *argv[]); +void close_xfiles(void); + --- server/date.c.orig 1994-11-01 06:08:41 UTC +++ server/date.c @@ -8,15 +8,15 @@ static char sccsid[] = "@(#)$Id: date.c,v 1.2 1994/11/ */ #include "common.h" +#include "date.h" #ifdef USG #include #else #include #endif -dodate(ac, av) - int ac; - char *av[]; +void +dodate(int ac, char **av) { struct tm *gmt; #ifdef USG @@ -41,6 +41,9 @@ dodate(ac, av) * local time, or any other kind of time, for that matter. If you * pass it a date you think is GMT, you wind up with that number of * seconds... + * + * Now regards any year < 70 as being after Y2K. Will still break due + * to time_t overflow. D. Glover, 29/11/99 * * Parameters: "date_ascii" is in the form "yymmddhhmmss". * @@ -58,8 +61,7 @@ static int dmsize[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; long -dtol(date_ascii) - char *date_ascii; +dtol(char *date_ascii) { char date[32], *date_str; char *lhs, *rhs; @@ -120,7 +122,17 @@ dtol(date_ascii) if (hour < 0 || hour > 23) return (-1); seconds = 0; - year += 1900; + +/* We need to handle years correctly per RFC977. This fix is consistent with + * the approach in inn-2.0. Years before 1970 wouldn't work anyway, but this + * will also run out of steam after 2038... + * We seem to have Y2K as a leap year already, by accident rather than + * design. DG 29/11/99 + */ + if (year <70) + year += 2000; + else + year += 1900; for (i = 1970; i < year; i++) seconds += dysize(i); /* Leap year */ @@ -132,7 +144,6 @@ dtol(date_ascii) seconds = 24 * seconds + hour; seconds = 60 * seconds + mins; seconds = 60 * seconds + secs; - return (seconds); } @@ -140,26 +151,27 @@ dtol(date_ascii) /* * ltod -- convert long integer to date string. * + * Now returns 4-digit years. D. Glover 29/11/99 + * * Parameters: "date" is in the number of seconds * since the epoch. * * Returns: Pointer to static data in the form - * yymmddhhmmss\0. + * yyyymmddhhmmss\0. * * Side effects: None. */ char * -ltod(date) - long date; +ltod(long date) { static char timebuf[32]; struct tm *tp; tp = gmtime(&date); - (void) sprintf(timebuf, "%02d%02d%02d%02d%02d%02d", - tp->tm_year, + (void) sprintf(timebuf, "%04d%02d%02d%02d%02d%02d", + tp->tm_year +1900, /* DG 29/11/99 - return 4-digit year */ tp->tm_mon + 1, /* 0 to 11??? How silly. */ tp->tm_mday, tp->tm_hour, @@ -182,8 +194,7 @@ ltod(date) */ long -local_to_gmt(date) - long date; +local_to_gmt(long date) { #ifdef USG #if !defined(dgux) && !defined(M_XENIX) @@ -217,8 +228,7 @@ local_to_gmt(date) */ long -gmt_to_local(date) - long date; +gmt_to_local(long date) { #ifdef USG #if !defined(dgux) && !defined(M_XENIX) --- server/date.h.orig 1994-11-01 05:40:20 UTC +++ server/date.h @@ -4,7 +4,7 @@ * @(#)time.h 1.1 (Berkeley) 12/18/87 */ -extern long dtol(); -extern char *ltod(); -extern long local_to_gmt(); -extern long gmt_to_local(); +extern long dtol(char *); +extern char *ltod(long); +extern long local_to_gmt(long); +extern long gmt_to_local(long); --- server/globals.c.orig 1994-12-03 21:54:50 UTC +++ server/globals.c @@ -49,7 +49,7 @@ int art_array[MAX_ARTICLES]; #endif FILE *art_fp; int uid_poster, gid_poster; -char *home_poster; +const char *home_poster; int canpost, canread, canxfer; char **ngpermlist; int ngpermcount; --- server/group.c.orig 1994-12-03 21:54:51 UTC +++ server/group.c @@ -4,15 +4,6 @@ static char sccsid[] = "@(#)group.c 1.12 (Berkeley) 5/ #include "common.h" -#ifdef XTHREAD -extern char *thread_name(); -#endif -#if defined(XOVER) || defined(XROVER) -extern void close_xfiles(); -#endif - -extern char *malloc(); - /* * GROUP newsgroup * @@ -24,9 +15,7 @@ extern char *malloc(); */ void -group(argc, argv) - int argc; - char *argv[]; +group(int argc, char **argv) { char temp_dir[256]; int high_msg, low_msg; @@ -142,9 +131,7 @@ group(argc, argv) */ void -xlistgroup(argc, argv) - int argc; - char *argv[]; +xlistgroup(int argc, char **argv) { register int i; --- server/help.c.orig 1994-12-03 21:54:52 UTC +++ server/help.c @@ -12,9 +12,7 @@ static char sccsid[] = "@(#)$Id: help.c,v 1.12 1994/12 */ void -help(argc, argv) -int argc; -char *argv[]; +help(int argc, char **argv) { printf("%d This server accepts the following commands:\r\n", INF_HELP); printf("ARTICLE BODY GROUP\r\n"); --- server/ihave.c.orig 1994-11-01 06:08:48 UTC +++ server/ihave.c @@ -20,9 +20,7 @@ int ih_failed; */ void -ihave(argc, argv) - int argc; - char *argv[]; +ihave(int argc, char **argv) { char errbuf[2 * NNTP_STRLEN]; int retcode; @@ -104,7 +102,7 @@ ihave(argc, argv) #endif i = ERR_XFERFAIL; - if (cp = index(errbuf,':')) { + if ((cp = index(errbuf,':'))) { for (++cp; isspace(*cp); ++cp) ; if (strncasecmp(cp, "inbound", 7) == 0) --- server/list.c.orig 1994-11-01 05:40:30 UTC +++ server/list.c @@ -13,18 +13,16 @@ static char sccsid[] = "@(#)list.c 1.11 (Berkeley) 5/1 */ void -list(argc, argv) - int argc; - char *argv[]; +list(int argc, const char **argv) { char line[NNTP_STRLEN]; char *grparray[2]; char *filename; - char *items; - char *format; + const char *items; + const char *format; register char *cp; register FILE *list_fp; - char *wildarg = NULL; + const char *wildarg = NULL; int argc_ok = (argc == 2 || argc == 3); if (argc == 1 || (argc_ok && !strcasecmp(argv[1],"active"))){ @@ -127,11 +125,9 @@ list(argc, argv) } void -xgtitle(argc, argv) - int argc; - char *argv[]; +xgtitle(int argc, char **argv) { - char *v[3]; + const char *v[3]; if (argc != 2) { printf("%d Usage: XGTITLE pattern\r\n", ERR_CMDSYN); --- server/main.c.orig 1994-11-17 18:15:19 UTC +++ server/main.c @@ -35,21 +35,21 @@ struct sockaddr_in current_peer = { AF_INET, IPPORT_NN #endif #ifdef SETPROCTITLE +#ifndef HAVE_PROCTITLE char **Argv = NULL; /* pointer to argument vector */ char *LastArgv = NULL; /* end of argv */ +#endif #endif /* SETPROCTITLE */ int -main(argc,argv,envp) -int argc; -char **argv, **envp; +main(int argc, char **argv, char **envp) { #ifdef ALONE /* If no inetd */ - int sockt, client, length; - struct sockaddr_in from; - extern int reaper(); + int sockt, client; + socklen_t length; + struct sockaddr from; #ifdef LOAD register int load; #endif /* LOAD */ @@ -81,6 +81,22 @@ char **argv, **envp; #ifndef EXCELAN sockt = get_socket(); /* should be fd 4 or 5 */ + if ( getuid() == 0 ) { /* Running as root */ + + if (setgid((gid_t) NEWS_GID) == -1) { +#ifdef SYSLOG + syslog(LOG_ERR, "setgid: %m"); +#endif + exit(1); + } + + if (setuid((uid_t) NEWS_UID) == -1) { +#ifdef SYSLOG + syslog(LOG_ERR, "setuid: %m"); +#endif + exit(1); + } + } #ifdef USG (void) signal(SIGCLD, SIG_IGN); #else /* !USG */ @@ -101,6 +117,7 @@ char **argv, **envp; #endif /* EXCELAN */ #ifdef SETPROCTITLE +#ifndef HAVE_PROCTITLE /* * Save start and extent of argv for setproctitle. */ @@ -113,6 +130,7 @@ char **argv, **envp; envp++; LastArgv = envp[-1] + strlen(envp[-1]); #endif /*SDD*/ +#endif #endif /* SETPROCTITLE */ #if defined(LOAD) && defined(SETPROCTITLE) /* If LOAD and SETPROCTITLE, display load before first accept() */ @@ -243,6 +261,7 @@ char **argv, **envp; } #endif /* LOAD */ #ifdef SETPROCTITLE +#ifndef HAVE_PROCTITLE /* * Save start and extent of argv for setproctitle. */ @@ -255,6 +274,7 @@ char **argv, **envp; envp++; LastArgv = envp[-1] + strlen(envp[-1]); #endif /*SDD*/ +#endif #endif /* SETPROCTITLE */ #ifdef USG @@ -271,6 +291,7 @@ char **argv, **envp; * stolen from sendmail */ #ifdef SETPROCTITLE +#ifndef HAVE_PROCTITLE #if defined(sun) || defined(hpux) /*VARARGS*/ void @@ -306,8 +327,7 @@ setproctitle(va_alist) #else /*VARARGS1*/ void -setproctitle(fmt, a, b, c) -char *fmt; +setproctitle(char *fmt, int a, int b, int c) { register char *p; register int i; @@ -330,4 +350,5 @@ char *fmt; *p++ = ' '; } #endif /* hpux */ +#endif #endif /* SETPROCTITLE */ --- server/misc.c.orig 1996-01-09 07:28:04 UTC +++ server/misc.c @@ -4,10 +4,6 @@ static char sccsid[] = "@(#)$Id: misc.c,v 1.49 1996/01 #include "common.h" -/* forward declarations */ -void close_crnt(); -void get_id(); - /* * open_valid_art -- determine if a given article name is valid; * if it is, return a file pointer to the open article, @@ -25,9 +21,9 @@ void get_id(); */ FILE * -open_valid_art(artname, id) - char *artname; - char *id; +open_valid_art( + char *artname, + char *id) { static int crnt_art_num; static char crnt_art_id[MAXBUFLEN]; @@ -100,9 +96,9 @@ open_valid_art(artname, id) #endif char * -gethistent(msg_id, lookup) - char *msg_id; - int lookup; +gethistent( + char *msg_id, + int lookup) { char line[MAXBUFLEN]; char *tmp; @@ -111,12 +107,10 @@ gethistent(msg_id, lookup) long ltmp; static char path[MAXPATHLEN]; #ifdef USGHIST - char *histfile(); register int len; #else #ifdef DBM static int dbopen = 0; - datum fetch(); #else static DBM *db = NULL; /* History file, dbm version */ #endif /* !DBM */ @@ -220,7 +214,7 @@ gethistent(msg_id, lookup) if (fseek(hfp, ltmp, 0) < 0) { #ifdef SYSLOG syslog(LOG_ERR, "message: %s: fseek to %ld on %d: %m", - historyfile, ltmp, hfp); + historyfile, ltmp, fileno(hfp)); #endif return (NULL); } @@ -284,8 +278,7 @@ gethistent(msg_id, lookup) */ FILE * -openartbyid(msg_id) - char *msg_id; +openartbyid(char *msg_id) { char *path; @@ -310,8 +303,7 @@ openartbyid(msg_id) */ int -check_ngperm(fp) - register FILE *fp; +check_ngperm(register FILE *fp) { char buf[MAXBUFLEN]; register char *cp; @@ -373,9 +365,9 @@ check_ngperm(fp) */ void -spew(fp, how) - FILE *fp; - int how; +spew( + FILE *fp, + int how) { char line[NNTP_STRLEN]; register char *cp; @@ -450,14 +442,14 @@ spew(fp, how) */ void -get_id(art_fp, id) - register FILE *art_fp; - char *id; +get_id( + register FILE *gart_fp, + char *id) { char line[MAXBUFLEN]; register char *cp; - while (fgets(line, sizeof(line), art_fp) != NULL) { + while (fgets(line, sizeof(line), gart_fp) != NULL) { if (*line == '\n') break; if (*line == 'M' || *line == 'm') { /* "Message-ID" */ @@ -468,9 +460,9 @@ get_id(art_fp, id) if ((cp = index(id, '\n')) != NULL) *cp = '\0'; #ifndef USG - (void) rewind(art_fp); + (void) rewind(gart_fp); #else - rewind(art_fp); + rewind(gart_fp); #endif return; } @@ -478,9 +470,9 @@ get_id(art_fp, id) } } #ifndef USG - (void) rewind(art_fp); + (void) rewind(gart_fp); #else - rewind(art_fp); + rewind(gart_fp); #endif (void) strcpy(id, "<0>"); } @@ -498,7 +490,7 @@ get_id(art_fp, id) */ void -close_crnt() +close_crnt(void) { if (art_fp != NULL) (void) fclose(art_fp); @@ -521,8 +513,7 @@ close_crnt() */ int -findart(artname) - char *artname; +findart(char *artname) { register int i, artnum; @@ -552,9 +543,9 @@ findart(artname) */ int -get_distlist(array, list) - char ***array; - char *list; +get_distlist( + char ***array, + char *list) { char *cp; int distcount; @@ -592,8 +583,7 @@ get_distlist(array, list) */ char -lower(c) - register char c; +lower(register int c) { if (isascii(c) && isupper(c)) c = c - 'A' + 'a'; @@ -608,8 +598,7 @@ lower(c) ** Generate the appropriate history subfile name */ char * -histfile(hline) -char *hline; +histfile(char *hline) { char chr; /* least significant digit of article number */ static char subfile[BUFSIZ]; @@ -619,8 +608,8 @@ char *hline; return subfile; } -findhfdigit(fn) -char *fn; +int +findhfdigit(char *fn) { register char *p; register int chr; @@ -638,8 +627,7 @@ char *fn; #if defined(USG) && !defined(SVR4) int -dup2(x,y) -int x,y; +dup2(int x, int y) { close(y); return(fcntl(x, F_DUPFD,y )); @@ -662,10 +650,9 @@ int x,y; #define DFREE_ERR 3 int -space(min_free) -int min_free; +space(int min_free) { - int result, dfree(); + int result; result = dfree(SPOOLDIR,min_free); if (result == DFREE_OK) return(1); @@ -787,9 +774,7 @@ typedef struct ustat statfs_type; * written by Stan Barber */ int -statfilesys(dir, fs) -char *dir; -statfs_type *fs; +statfilesys(char *dir, statfs_type *fs) { struct stat file; if (stat(dir,&file)) return(-1); @@ -808,9 +793,7 @@ statfs_type *fs; #include typedef struct fsparam statfs_type; int -statfilesys(dir, fs) -char *dir; -statfs_type *fs; +statfilesys(char *dir, statfs_type *fs) { int fd; fd = open(dir, O_RDONLY); @@ -828,9 +811,7 @@ statfs_type *fs; #endif /* CMU_MACH */ int -dfree(spool,free_space) -char *spool; -int free_space; +dfree(const char *spool, int free_space) { statfs_type fsys; int err; @@ -841,7 +822,7 @@ int free_space; if (filfree(fsys) < MINFILES ) return( DFREE_INODES ); # endif - if (blkavail(fsys) < 0L) { + if (blkavail(fsys) <= 0L) { /* the bavail field doesn't apply to this file system */ if(blkfree(fsys) < free_space) return( DFREE_BLOCKS ); @@ -867,11 +848,8 @@ int free_space; * the named file resides. returns -1 on error. */ -off_t lseek(); - -dfree(name, free_space) -char *name; -int free_space; +int +dfree(const char *name, int free_space) { struct stat namest, fsst; struct fstab *fsp; @@ -965,9 +943,30 @@ int free_space; ** none. */ + +#if defined(BSD_44) +#include + +int +getla( void ) +{ + double avenrun[3]; + int rc; + + rc = getloadavg( avenrun, 1 ); + if ( rc == -1 ) + return 1; +# ifdef FSCALE + return ((int) (avenrun[0] + FSCALE/2) >> FSHIFT); +# else + return ((int) (avenrun[0] + 0.5)); +# endif +} + +#else #if defined(USG) && !defined(SVR4) int -getla() +getla( void ) { return(0); } @@ -1010,7 +1009,7 @@ struct nlist Nl[] = #endif int -getla() +getla( void ) { static int kmem = -1; # ifdef FSCALE @@ -1018,7 +1017,6 @@ getla() # else double avenrun[3]; # endif - extern off_t lseek(); if (kmem < 0) { kmem = open("/dev/kmem", 0, 0); @@ -1058,4 +1056,5 @@ getla() # endif } #endif +#endif /* BSD_44 */ #endif /* LOAD */ --- server/msgid.h.orig 1994-11-01 05:40:39 UTC +++ server/msgid.h @@ -9,7 +9,7 @@ /* * Message types from client to server */ -char *msgs[] = { +const char *msgs[] = { "add-", "can-", "hst-", --- server/msgidd.c.orig 1994-12-09 02:53:01 UTC +++ server/msgidd.c @@ -31,15 +31,12 @@ #if 0 #define dprintf fprintf #else -#define dprintf (void) +#define dprintf(a,...) (void)a #endif -char *malloc(); -extern int errno; - -int log = 0, flags = 0; +int dolog = 0, flags = 0; time_t hold_time = MAX_AGE * 60; -char *hosts[100], *lfn, *ptime(); +char *hosts[100], *lfn; FILE *logfp = NULL; struct { @@ -56,16 +53,15 @@ struct el { char id[1]; } *ids[HASHSIZE]; -char *months[12] = { +const char *months[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; -static int transaction(); +static int transaction(register int); static unsigned -mkhash(s) -register unsigned char *s; +mkhash(register unsigned char *s) { register unsigned hash = 0; register unsigned char c; @@ -77,8 +73,7 @@ register unsigned char *s; #ifndef BSD_44 static char * -strdup(x) -char *x; +strdup(char *x) { register char *y = malloc(strlen(x) + 1); @@ -89,7 +84,7 @@ char *x; #endif static void -savepid () +savepid(void) { FILE *pidfp ; @@ -100,9 +95,8 @@ savepid () (void) fclose (pidfp) ; } -char * -ptime(now) - time_t now; +static char * +ptime(time_t now) { static char buf[50]; struct tm *tmp; @@ -115,8 +109,7 @@ ptime(now) } static void -usage(me) - char *me; +usage(char *me) { (void) fprintf(stderr, "Usage: %s [options]\n", me); (void) fprintf(stderr, "Options: -s [%s]\n", @@ -127,57 +120,56 @@ usage(me) } static void -openlogfile() +openlogfile(void) { if (logfp) (void) fclose(logfp); - if (log && (logfp = fopen(lfn, "a+")) == NULL) { + if (dolog && (logfp = fopen(lfn, "a+")) == NULL) { syslog(LOG_ERR, "Unable to open %s: %m", lfn); - log = 0; + dolog = 0; logfp = NULL; } } static SIGRET -bye() +bye(void) { - if (log) + if (dolog) (void) fclose(logfp); dprintf(stderr,"Bye !!\n"); exit(0); } static SIGRET -resetlog() { +resetlog(void) { flags |= FLAGS_RESETLOG; signal(SIGHUP, resetlog); } static SIGRET -pstats() +pstats(void) { char msgbuf[1024]; - if (log) + if (dolog) flags |= FLAGS_FLUSHLOG; sprintf(msgbuf, "stats: %d connected, %d connects, %d drops, %d dups, %d new, %d cancel, %d freed\n", stats.connected, stats.connects, stats.drops, stats.dup, stats.new, stats.cancel, stats.freed); dprintf(stderr, "%s\n", msgbuf); - syslog(LOG_INFO, msgbuf); + syslog(LOG_INFO, "%s", msgbuf); stats.connects = stats.drops = stats.new = stats.cancel = stats.dup = stats.freed = 0; signal(SIGALRM, pstats); alarm(ALARM_TIME); } -SIGRET onpipe(); +static SIGRET onpipe(void); -main(argc, argv) - int argc; - char *argv[]; +int +main(int argc, char **argv) { - register char *sn = SOCKNAME; + register const char *sn = SOCKNAME; register int s; int highest_fd; struct sockaddr_un n, in; @@ -196,7 +188,7 @@ main(argc, argv) sn = strdup(optarg); break; case 'l': - log++; + dolog++; lfn = strdup(optarg); break; default: @@ -207,10 +199,10 @@ main(argc, argv) if (optind != argc) usage(argv[0]); - if (log) { + if (dolog) { openlogfile(); - if (!log) { - (void) fprintf(stderr, "%s: Unable to open log file (%s)\n", + if (!dolog) { + (void) fprintf(stderr, "%s: Unable to open dolog file (%s)\n", argv[0], lfn); exit(1); } @@ -269,7 +261,7 @@ main(argc, argv) for (fd = 0; fd <= highest_fd; fd++) { if (FD_ISSET(fd, &readfds)) { if (fd == s) { - int fromlen = sizeof(in); + socklen_t fromlen = sizeof(in); if ((fd = accept(s, (struct sockaddr *) &in, &fromlen)) == -1) { @@ -288,7 +280,7 @@ main(argc, argv) stats.connected--; stats.drops++; if (hosts[fd]) { - if (log) { + if (dolog) { (void) fprintf(logfp, "%s Disconnect %s\n", ptime(time((time_t *)0)), hosts[fd]); } @@ -309,8 +301,7 @@ main(argc, argv) int sigpiped; static int -reply(fd, ans) - register int fd, ans; +reply(register int fd, register int ans) { int status; @@ -319,7 +310,7 @@ reply(fd, ans) && errno == EINTR && !sigpiped) ; if (status < 0) { - if (log) { + if (dolog) { register time_t now = time((long *)0); fprintf(logfp, "%s write failed (fd %d)\n", ptime(now), fd); @@ -331,13 +322,13 @@ reply(fd, ans) } static void -cancel(fd, bufp, now) - register int fd; - register char *bufp; - time_t now; +cancel( + register int fd, + register char *bufp, + time_t now) { register struct el *i, *p; - register int found = 0, hash = mkhash(bufp) % HASHSIZE; + register int found = 0, hash = mkhash((unsigned char *)bufp) % HASHSIZE; for (i = ids[hash], p = NULL; i; p = i, i = i->next) if (STREQ(i->id, bufp)) { @@ -345,7 +336,7 @@ cancel(fd, bufp, now) ids[hash] = i->next; else p->next = i->next; - if (log) + if (dolog) (void) fprintf(logfp, "%s Cancel %s %s\n", ptime(now), hosts[fd] ? hosts[fd] : "", i->id); free(i); @@ -357,21 +348,21 @@ cancel(fd, bufp, now) if (!found) { dprintf(stderr, "Bad-cancel(%d/%s): `%s'\n", fd, hosts[fd], bufp); syslog(LOG_ERR, "Cancel, %s not found", bufp); - if (log) + if (dolog) (void) fprintf(logfp, "%s Error cancel %s %s\n", ptime(now), hosts[fd] ? hosts[fd] : "", i->id); } } static void -add(fd, bufp, n, now) - register int fd; - register char *bufp; - register int n; - time_t now; +add( + register int fd, + register char *bufp, + register int n, + time_t now) { register struct el *i; - register int hash = mkhash(bufp) % HASHSIZE; + register int hash = mkhash((unsigned char *)bufp) % HASHSIZE; /* this malloc includes the id[1] array, which means * that there's already room for strcpy's null @@ -381,7 +372,7 @@ add(fd, bufp, n, now) return; i->age = now; (void) strcpy(i->id, bufp); - if (log) { + if (dolog) { i->refcnt = 1; (void) fprintf(logfp, "%s Add %s %s\n", ptime(now), hosts[fd] ? hosts[fd] : "", bufp); @@ -393,14 +384,14 @@ add(fd, bufp, n, now) } static int -search(fd, bufp, now) - register int fd; - char *bufp; /* no leading '<' */ - time_t now; +search( + register int fd, + char *bufp, /* no leading '<' */ + time_t now) { register struct el *i, *p; register char bufc = *bufp; - register int hash = mkhash(bufp) % HASHSIZE; + register int hash = mkhash((unsigned char *)bufp) % HASHSIZE; int found = 0, searched = 0; /* @@ -429,11 +420,11 @@ search(fd, bufp, now) searched++; if (STREQ(i->id, bufp)) { - if (log) { + if (dolog) { i->refcnt++; (void) fprintf(logfp, "%s Lose %s %d %ld %s\n", ptime(now), hosts[fd] ? hosts[fd] : "", i->refcnt, - (now - i->age), i->id); + (long)(now - i->age), i->id); } found++; stats.dup++; @@ -450,8 +441,7 @@ search(fd, bufp, now) * 0 == success */ static int -transaction(fd) - register fd; +transaction(register int fd) { char buf[1023]; register int n; @@ -487,8 +477,8 @@ transaction(fd) /* rip out useless characters at end, remembering real length. */ while (n > 0) { - register x = n - 1; - register ch = bufp[x]; + register int x = n - 1; + register int ch = bufp[x]; if (ch == '\n' || ch == '\r' || ch == '>') n = x; @@ -511,7 +501,7 @@ transaction(fd) return reply(fd, 0); } } else if (STRN_EQ(cmdp, msgs[MOLD], 4)) { - if (log) + if (dolog) (void) fprintf(logfp, "%s Old %s %s\n", ptime(now), hosts[fd] ? hosts[fd] : "", bufp); dprintf(stderr, "Old(%d/%s): `%s'\n", fd, hosts[fd], bufp); @@ -520,13 +510,13 @@ transaction(fd) if (hosts[fd]) free(hosts[fd]); hosts[fd] = strdup(bufp); - if (log) + if (dolog) (void) fprintf(logfp, "%s Connect %s\n", ptime(now), hosts[fd]); dprintf(stderr, "Connect(%d/%s)\n", fd, hosts[fd]); return reply(fd, 0); } else { syslog(LOG_ERR, "Unknown command %s", cmdp); - if (log) + if (dolog) (void) fprintf(logfp, "%s Error %s unknown-cmd %s\n", ptime(now), hosts[fd], cmdp); dprintf(stderr, "Error(%d/%s) unknown-cmd %s\n", fd, hosts[fd], cmdp); @@ -538,11 +528,11 @@ transaction(fd) #endif } -static SIGRET onpipe() +static SIGRET onpipe(void) { register time_t now = time((long *)0); - if (log) + if (dolog) fprintf(logfp, "%s Got SIGPIPE\n", ptime(now)); sigpiped++; signal(SIGPIPE, onpipe); --- server/netaux.c.orig 1994-11-01 06:08:56 UTC +++ server/netaux.c @@ -20,6 +20,9 @@ static char sccsid[] = "@(#)$Id: netaux.c,v 1.16 1994/ #else #include #endif +#ifdef BSD_44 +#include +#endif /* * read_again -- (maybe) read in the active file again, @@ -32,7 +35,7 @@ static char sccsid[] = "@(#)$Id: netaux.c,v 1.16 1994/ * Side effects: May change "num_groups" and "group_array". */ -void read_again() +void read_again(void) { static long last_mtime; /* Last time active file was changed */ struct stat statbuf; @@ -67,7 +70,7 @@ void read_again() * fd 0-2 opened as O_RDONLY to /. */ -disassoc() +void disassoc(void) { register int i; @@ -87,7 +90,7 @@ disassoc() (void) open("/", 0); (void) dup2(0, 1); (void) dup2(0, 2); - setpgrp(); + setpgrp(0, 0); umask(000); #else /* not USG */ i = open("/dev/tty", O_RDWR); @@ -122,7 +125,8 @@ disassoc() * Errors: Syslogd, cause abortion. */ -get_socket() +int +get_socket(void) { int s; struct sockaddr_in sin; @@ -192,8 +196,8 @@ get_socket() * Side effects: None. */ -make_stdio(sockt) - int sockt; +void +make_stdio(int sockt) { if (sockt != 0) { (void) dup2(sockt, 0); @@ -259,10 +263,15 @@ set_timer() * Side effects: None. */ -reaper() +void +reaper(int unused) { #ifndef USG +#ifdef BSD_44 + int status; +#else union wait status; +#endif while (wait3(&status, WNOHANG, (struct rusage *)0) > 0) ; @@ -271,10 +280,4 @@ reaper() #else /* !ALONE */ -/* Kludge for greenhill's C compiler */ - -static -netaux_greenkludge() -{ -} #endif /* not ALONE */ --- server/newgroups.c.orig 1994-11-01 05:40:45 UTC +++ server/newgroups.c @@ -13,9 +13,7 @@ static char sccsid[] = "@(#)newgroups.c 1.13 (Berkeley */ void -newgroups(argc, argv) - int argc; - char *argv[]; +newgroups(int argc, char **argv) { char line[NNTP_STRLEN]; register char *cp; --- server/newnews.c.orig 1994-11-01 06:08:58 UTC +++ server/newnews.c @@ -17,12 +17,14 @@ int nn_took = 0; * Return the message-id's of any news articles past * a certain date and time, within the specified distributions. * + * Made RFC977/Y2K compliant via changes in dtol() - see time.c - and + * slightly simplified the comparison between incoming date and history + * file. Fixed(?) the local time offset. D. Glover 29/11/99 + * */ void -newnews(argc, argv) - register int argc; - char *argv[]; +newnews(register int argc, char **argv) { register char *cp, *ngp; char *key; @@ -34,8 +36,6 @@ newnews(argc, argv) int all; FILE *fp; long date; - long dtol(); - char *ltod(); #ifdef USGHIST FILE *tmplst; int i; @@ -92,25 +92,30 @@ newnews(argc, argv) argc -= 4; argv += 4; - key = datebuf; /* Unless they specify GMT */ - date = dtol(datebuf); +/* Originally the "key" for searching was obtained here and the localtime + * offset wasn't applied when doing the actual comparison... DG 29/11/99 + */ + date = dtol(datebuf); /* local time here */ if (date < 0) { printf("%d Invalid date specification.\r\n",ERR_CMDSYN); (void) fflush(stdout); return; } - if (argc > 0) { - if (!strcasecmp(*argv, "GMT")) { /* Which we handle here */ - date = gmt_to_local(date); +/* REMOVED apparently unwanted call to gmt_to_local() + * and tidied up handling of GMT/distributions DG 29/11/99 + */ + if (argc > 0 && !strcasecmp(*argv, "GMT")) { ++argv; --argc; - } } + else { /* now we convert from local to GMT since this is what history */ /* file in News 2.11 expects */ - date = local_to_gmt(date); - strcpy(datebuf,ltod(date)); + date = local_to_gmt(date); + } + strcpy(datebuf, ltod(date)); + key = datebuf; distcount = 0; if (argc > 0) { distcount = get_distlist(&distlist, *argv); @@ -241,7 +246,7 @@ newnews(argc, argv) * a line with date later than "akey". Get that line, and return. * * Parameters: "fp" is the active file. - * "akey" is the date, in form YYMMDDHHMMSS + * "akey" is the date, in form YYYYMMDDHHMMSS * "line" is storage for the first line we find. * * Returns: -1 on error, 0 otherwise. @@ -250,11 +255,11 @@ newnews(argc, argv) */ int -seekuntil(fp, akey, line, linesize) - FILE *fp; - char *akey; - char *line; - int linesize; +seekuntil( + FILE *fp, + char *akey, + char *line, + int linesize) { char datetime[32]; register int c; @@ -309,10 +314,9 @@ seekuntil(fp, akey, line, linesize) } int -compare(s, t) - register char *s, *t; +compare(register char *s, register char *t) { - for (; *s == *t; s++, t++) +for (; *s == *t; s++, t++) if (*s == 0) return(0); return (*s == 0 ? -1: @@ -325,14 +329,14 @@ compare(s, t) * Combined B and C news version of getword. */ int -getword(fp, w, line, linesize) - FILE *fp; - register char *w; - char *line; - int linesize; +getword( + FILE *fp, + register char *w, + char *line, + int linesize) { register char *cp; - extern char *index(); + long qz = 0; if (fgets(line, linesize, fp) == NULL) return (0); w[0] = '\0'; /* in case of bad format */ @@ -355,12 +359,15 @@ getword(fp, w, line, linesize) * The following gross hack is present because the old history file date * format is braindamaged. They like "mm/dd/yy hh:mm", which is useless * for relative comparisons of dates using something like atoi() or - * strcmp. So, this changes their format into yymmddhhmm. Sigh. + * strcmp. So, this changes their format into yyyymmddhhmm. Sigh. + * + * Modified to use 4 digit years, just in case anyone is still using B news + * but not tested here. DG 29/11/99 * * 01234567890123 ("x" for cp[x]) * mm/dd/yy hh:mm (their lousy representation) - * yymmddhhmm (our good one) - * 0123456789 ("x" for w[x]) + * yymmddhhmmss (our good one) + * 012345678901 ("x" for w[x]) */ w[0] = cp[6]; /* Years */ w[1] = cp[7]; @@ -372,15 +379,25 @@ getword(fp, w, line, linesize) w[7] = cp[10]; w[8] = cp[12]; /* Minutes */ w[9] = cp[13]; - w[10] = '\0'; + w[10] = '0'; /* Seconds are faked */ + w[11] = '0'; + w[12] = '\0'; + +/* We now have YYMMDDHHMMSS - use dtol() to get something sensible for the + * century and then use ltod() below to make it compatible with the way + * the search is done. Really it would be much better to compare everything + * as time_t, but this means changing seekuntil() and all the underlying stuff. + * Maybe for a subsequent release if anyone is bothered? DG 29/11/99 + */ + qz = dtol(w); } - else /* convert new format to yymmddhhmmss */ + + else /* convert new format to yyyymmddhhmmss */ { - long qz; qz =atol(w); - strcpy(w,ltod(qz)); - } - } + } + } + strcpy(w,ltod(qz)); return (1); } @@ -403,11 +420,11 @@ getword(fp, w, line, linesize) */ int -distmatch(distlist, distcount, grouplist, groupcount) - char *distlist[]; - int distcount; - char *grouplist[]; - int groupcount; +distmatch( + char *distlist[], + int distcount, + char *grouplist[], + int groupcount) { register char c; register char *cp; @@ -492,9 +509,9 @@ distmatch(distlist, distcount, grouplist, groupcount) */ int -get_histlist(array, list) - char ***array; - register char *list; +get_histlist( + char ***array, + register char *list) { register int histcount = 0; static int nalloc = 0; @@ -549,9 +566,9 @@ get_histlist(array, list) */ int -get_nglist(array, list) - char ***array; - char *list; +get_nglist( + char ***array, + char *list) { register char *cp; register int ngcount; --- server/nextlast.c.orig 1994-11-01 06:09:00 UTC +++ server/nextlast.c @@ -14,9 +14,7 @@ static char sccsid[] = "@(#)$Id: nextlast.c,v 1.8 1994 */ void -nextlast(argc, argv) - int argc; - char *argv[]; +nextlast(int argc, char **argv) { char artbuf[MAXPATHLEN], art_id[MAXBUFLEN]; int oldptr; --- server/ngmatch.c.orig 1994-11-01 05:40:51 UTC +++ server/ngmatch.c @@ -24,13 +24,13 @@ static char sccsid[] = "@(#)ngmatch.c 1.3 (Berkeley) 2 */ int -ngmatch(func, dflt, ngspec, ngspeccount, matchlist, matchcount) - int (*func)(); - int dflt; - char **ngspec; - int ngspeccount; - char **matchlist; - int matchcount; +ngmatch( + int (*func)(register char *, register char *), + int dflt, + char **ngspec, + int ngspeccount, + char **matchlist, + int matchcount) { register int i, j; register int match; @@ -42,7 +42,7 @@ ngmatch(func, dflt, ngspec, ngspeccount, matchlist, ma match = dflt; for (i = 0; i < matchcount; ++i) { - if (cp = index(matchlist[i], '/')) + if ((cp = index(matchlist[i], '/'))) *cp = '\0'; for (j = 0; j < ngspeccount; ++j) { if (ngspec[j][0] == '!') { /* Handle negation */ @@ -74,9 +74,7 @@ ngmatch(func, dflt, ngspec, ngspeccount, matchlist, ma */ int -restreql(w, s) - register char *w; - register char *s; +restreql(register char *w, register char *s) { while (*s && *w) { @@ -109,9 +107,7 @@ restreql(w, s) */ int -s1strneql(s1, s2) - register char *s1; - register char *s2; +s1strneql(register char *s1, register char *s2) { register int slen; --- server/overview.h.orig 1994-11-01 05:57:51 UTC +++ server/overview.h @@ -10,7 +10,7 @@ /* Undefine this if a new field makes the first letters no longer unique. */ #define OVER_UNIQUE_1ST_LTRS -char *over_field[] = { +const char *over_field[] = { "ARTICLE #" /* 0 */ ,"subject" /* 1 */ ,"from" /* 2 */ --- server/parsit.c.orig 1994-11-01 05:40:58 UTC +++ server/parsit.c @@ -32,13 +32,12 @@ static char sccsid[] = "@(#)parsit.c 1.4 (Berkeley) 8/ */ #include +#include +#include +#include "common.h" -extern char *malloc(), *strcpy(); - int -parsit(line, array) -char *line; -char ***array; +parsit(char *line, char ***array) { char **argv; char *word; --- server/post.c.orig 1994-11-01 06:09:03 UTC +++ server/post.c @@ -11,9 +11,7 @@ static char sccsid[] = "@(#)$Id: post.c,v 1.19 1994/11 */ void -post(argc, argv) - int argc; - char *argv[]; +post(int argc, char **argv) { char errbuf[2 * NNTP_STRLEN]; int retcode; --- server/scandir.c.orig 1994-11-05 06:04:53 UTC +++ server/scandir.c @@ -20,12 +20,8 @@ static char sccsid[] = "@(#)$Id: scandir.c,v 1.9 1994/ * Side effects: Changes "art_array". */ -extern int intcmp(); -extern char *malloc(), *realloc(); - int -scan_dir(low_msg, high_msg) -int low_msg, high_msg; +scan_dir(int low_msg, int high_msg) { #ifdef DIRENT register struct dirent *dirent; @@ -92,8 +88,9 @@ int low_msg, high_msg; */ int -intcmp(x, y) -register int *x, *y; +intcmp(const void *vptr1, const void *vptr2) { + register int *x = (int *)vptr1; + register int *y = (int *)vptr2; return (*x - *y); } --- server/serve.c.orig 1994-12-03 21:55:12 UTC +++ server/serve.c @@ -24,17 +24,6 @@ static char sccsid[] = "@(#)$Id: serve.c,v 1.41 1994/1 #include "timer.h" #endif -extern void ahbs(), dodate(), group(), help(), ihave(); -extern void list(), newgroups(), newnews(), nextlast(), post(); -extern void slave(), xlistgroup(), xhdr(), doxover(), xthread(), xindex(); -extern void xgtitle(), doxrover(), doxmode(); - -extern int errno; - -#ifdef AUTH -extern void doxauthcap(), doxauthinfo(), doxauthsys(); -#endif - #ifdef GENAUTH #define A 1 #else @@ -42,9 +31,9 @@ extern void doxauthcap(), doxauthinfo(), doxauthsys(); #endif static struct cmdent { - char *cmd_name; + const char *cmd_name; int authreq; /* 0=none,1=userpass */ - void (*cmd_fctn)(); + void (*cmd_fctn)(int, void **); } cmdtbl[] = { #ifdef AUTH "authcap", 0, doxauthcap, @@ -90,14 +79,14 @@ static struct cmdent { #define NUMCMDS (sizeof(cmdtbl) / sizeof(struct cmdent)) #ifdef TIMEOUT -static void timeout(); +static void timeout(void); #endif #ifdef LOGINCHECK -static void logincheck(); +static void logincheck(void); static int firstlogincheck; #endif #ifdef BATCHED_INPUT -static void batchcheck(); +static void batchcheck(void); #endif #ifdef TIMERS @@ -115,9 +104,9 @@ static struct timer timers[] = { #define NTIMERS (sizeof(timers) / sizeof(struct timer)) #endif -static char *stats_init(); +static char *stats_init(void); #ifdef LOG -static void stats_finish(); +static void stats_finish(void); #endif #ifdef AUTH @@ -139,13 +128,14 @@ extern char User[]; */ void -serve() +serve(void) { char line[NNTP_STRLEN]; char host[MAXHOSTNAMELEN]; char gdbuf[MAXBUFLEN]; char **argp; - char *timeptr, *cp; + const char *timeptr; + char *cp; int argnum, i; #ifdef POSTER struct passwd *pp; @@ -370,7 +360,7 @@ printf("%d Authentication required for command\r\n", E * XXX stats are not reported when this occurs */ static void -timeout() +timeout(void) { printf("%d Timeout after %d seconds, closing connection.\r\n", @@ -399,7 +389,7 @@ timeout() * XXX stats are not reported when this occurs */ static void -logincheck() +logincheck(void) { char host[MAXHOSTNAMELEN]; @@ -433,7 +423,7 @@ logincheck() * of a session to see if a batch needs to be launched. */ static void -batchcheck() +batchcheck(void) { char errbuf[2 * NNTP_STRLEN]; @@ -453,10 +443,8 @@ static struct timeval start, finish; #endif static char * -stats_init() +stats_init(void) { - extern char *ctime(); - #ifdef USG (void) time(&start); Tstart = (double) start; @@ -470,7 +458,7 @@ stats_init() #ifdef LOG static void -stats_finish() +stats_finish(void) { char buf[NNTP_STRLEN]; # ifdef USG @@ -522,9 +510,7 @@ stats_finish() #endif /* LOG */ void -doxmode(argc, argv) - int argc; - char *argv[]; +doxmode(int argc, char **argv) { if (argc == 2 && !strcasecmp(argv[1], "reader")) printf("%d OK.\r\n", canpost ? OK_CANPOST : OK_NOPOST); --- server/slave.c.orig 1994-11-01 05:41:04 UTC +++ server/slave.c @@ -11,9 +11,7 @@ static char sccsid[] = "@(#)slave.c 1.3 (Berkeley) 6/2 */ void -slave(argc, argv) - int argc; - char *argv[]; +slave(int argc, char **argv) { printf("%d Kinky, kinky. I don't support such perversions.\r\n", OK_SLAVE); /* Thanks Serge! */ --- server/spawn.c.orig 1994-12-09 02:53:14 UTC +++ server/spawn.c @@ -5,12 +5,19 @@ static char sccsid[] = "@(#)$Id: spawn.c,v 1.32 1994/1 #include "common.h" #include +#ifndef __FreeBSD__ #ifdef sparc #ifndef SVR4 #include #endif #endif +#endif + #ifdef XFER_TIMEOUT +SIGRET xfer_timeout(void); +#endif + +#ifdef XFER_TIMEOUT static int xfer_lines; static int old_xfer_lines; #endif @@ -42,14 +49,14 @@ static char badfile[256]; */ int -spawn(path, name, flag, cont_code, err_code, errbuf, msg_id) - char *path; - char *name; - char *flag; - int cont_code; - int err_code; - char *errbuf; - char *msg_id; +spawn( + char *path, + const char *name, + const char *flag, + int cont_code, + int err_code, + char *errbuf, + const char *msg_id) { char line[NNTP_STRLEN]; /* XXX */ int in_header; @@ -64,9 +71,6 @@ spawn(path, name, flag, cont_code, err_code, errbuf, m #else char *envp[1]; #endif -#ifdef XFER_TIMEOUT - SIGRET xfer_timeout(); -#endif #if defined(USG) || defined(BSD_44) int status; #else @@ -289,7 +293,7 @@ spawn(path, name, flag, cont_code, err_code, errbuf, m while (fgets(line, sizeof (line), fp) != NULL) { if (line[0] != '\n') { if (errbuf) { - if (cp = index(line, '\n')) + if ((cp = index(line, '\n'))) *cp = '\0'; (void) strcat(errbuf, line); } @@ -347,7 +351,7 @@ spawn(path, name, flag, cont_code, err_code, errbuf, m #ifdef XFER_TIMEOUT SIGRET -xfer_timeout() +xfer_timeout(void) { if (old_xfer_lines < xfer_lines) { old_xfer_lines = xfer_lines; --- server/strcasecmp.c.orig 1994-11-01 05:41:08 UTC +++ server/strcasecmp.c @@ -10,6 +10,7 @@ * is provided ``as is'' without express or implied warranty. */ +#ifndef __FreeBSD__ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87"; #endif /* LIBC_SCCS and not lint */ @@ -87,3 +88,4 @@ strncasecmp(s1, s2, n) return(0); return(n < 0 ? 0 : cm[*us1] - cm[*--us2]); } +#endif --- server/subnet.c.orig 1994-12-04 00:19:46 UTC +++ server/subnet.c @@ -2,7 +2,7 @@ static char sccsid[] = "@(#)$Id: subnet.c,v 1.16 1994/12/04 00:18:40 sob Exp sob $"; #endif -#include "../conf.h" +#include "common.h" #ifdef TESTSUBNET #ifndef DEBUG #define DEBUG @@ -10,11 +10,15 @@ static char sccsid[] = "@(#)$Id: subnet.c,v 1.16 1994/ #include #endif +#include +#include + #ifdef SUBNET #include #include #include +#include #ifndef NETMASK #include #endif @@ -104,7 +108,7 @@ static int if_count; */ int -getifconf() +getifconf(void) { #ifndef NETMASK register int i, j; @@ -112,7 +116,6 @@ getifconf() struct ifconf ifc; char buf[1024]; register struct ifreq *ifr; - int inet_netof(); u_long addr; #ifdef STREAMS_TLI struct strioctl ioc; @@ -295,13 +298,11 @@ getifconf() */ u_long -inet_snetof(in) - u_long in; +inet_snetof(u_long in) { register int j; register u_long i = ntohl(in); register u_long net; - int inet_netof(), inet_lnaof(); struct in_addr in_a; in_a.s_addr = in; @@ -335,8 +336,7 @@ inet_snetof(in) */ int -bsr(mask) - register long mask; +bsr(register long mask) { register int count = 0; --- server/timer.c.orig 1994-12-03 21:55:22 UTC +++ server/timer.c @@ -42,9 +42,9 @@ static long lastsecs; * Should be called before first call to timer_sleep() */ void -timer_init(timers, ntimer) - register struct timer *timers; - register int ntimer; +timer_init( + register struct timer *timers, + register int ntimer) { register int i; register struct timer *tp; @@ -68,9 +68,9 @@ timer_init(timers, ntimer) * expired timers. Returns true if input is available to be read. */ int -timer_sleep(timers, ntimer) - register struct timer *timers; - register int ntimer; +timer_sleep( + register struct timer *timers, + register int ntimer) { #ifdef SVR4 SIGRET nullfunc(); @@ -196,7 +196,7 @@ timer_sleep(timers, ntimer) #ifdef SVR4 SIGRET -nullfunc() +nullfunc(void) { signal(SIGALRM, nullfunc); #ifndef VOIDSIG --- server/timer.h.orig 1994-11-01 05:57:52 UTC +++ server/timer.h @@ -1,11 +1,11 @@ /* @(#) $Id: timer.h,v 1.4 1994/11/01 05:57:31 sob Exp sob $ */ struct timer { - void (*subr)(); /* routine to invoke at timeout */ + void (*subr)(void); /* routine to invoke at timeout */ int resetoninput; /* if true, reset timer on input */ long seconds; /* seconds until a timeout */ long left; /* seconds left until next timeout */ }; -void timer_init(); -int timer_sleep(); +void timer_init(register struct timer *, register int); +int timer_sleep(register struct timer *, register int); --- server/version.c.orig 1996-01-09 07:28:04 UTC +++ server/version.c @@ -2,4 +2,4 @@ * Provide the version number of this release. */ -char nntp_version[] = "1.5.12.2 (9 Jan 1996)"; +char nntp_version[] = "1.5.12.2-DG1 (29 November 1999)"; --- server/wildmat.c.orig 1994-11-01 05:41:20 UTC +++ server/wildmat.c @@ -36,6 +36,8 @@ ** on. */ +#include "common.h" + #define TRUE 1 #define FALSE 0 #define ABORT -1 @@ -53,9 +55,9 @@ ** Match text and p, return TRUE, FALSE, or ABORT. */ static int -DoMatch(text, p) - register char *text; - register char *p; +DoMatch( + register char *text, + register char *p) { register int last; register int matched; @@ -114,9 +116,9 @@ DoMatch(text, p) ** User-level routine. Returns TRUE or FALSE. */ int -wildmat(text, p) - char *text; - char *p; +wildmat( + char *text, + const char *p) { #ifdef OPTIMIZE_JUST_STAR if (p[0] == '*' && p[1] == '\0') @@ -131,7 +133,6 @@ wildmat(text, p) #include /* Yes, we use gets not fgets. Sue me. */ -extern char *gets(); main() --- server/xauth.c.orig 1994-12-09 02:53:20 UTC +++ server/xauth.c @@ -20,9 +20,6 @@ static char sccsid[] = "@(#)$Id: xauth.c,v 1.2 1994/12 #include "common.h" #include -extern timeout(); -extern char *crypt(); - #ifdef AUTH extern int Needauth; @@ -30,8 +27,8 @@ extern char User[]; extern char Host[]; /* forward declarations */ -void getpass(); -void getuser(); +void my_getpass(char *p); +void getuser(char *p); #ifdef GENAUTH @@ -48,8 +45,7 @@ static char *genauth_ret; the authenticator. */ static int -genauth(av) -char *av[]; +genauth(char **av) { char path[COPYSIZE], *fields[6], *p; int pid, i, pan[2], exit_status; @@ -59,7 +55,6 @@ char *av[]; union wait status; #endif struct stat stb; - char *malloc(); av += 2; @@ -186,9 +181,7 @@ char *av[]; #endif static int -argcount(cnt, shouldbe) -int cnt; -int shouldbe; +argcount(int cnt, int shouldbe) { if (cnt != shouldbe) { printf("%d Syntax error\r\n", ERR_CMDSYN); @@ -199,9 +192,7 @@ int shouldbe; } void -doxauthcap(argc,argv) -int argc; -char *argv[]; +doxauthcap(int argc, char **argv) { printf("%d authcap not implemented\r\n", ERR_COMMAND); fflush(stdout); @@ -209,9 +200,7 @@ char *argv[]; } void -doxauthsys(argc,argv) -int argc; -char *argv[]; +doxauthsys(int argc, char **argv) { printf("%d authsys not implemented\r\n", ERR_COMMAND); fflush(stdout); @@ -219,9 +208,7 @@ char *argv[]; } void -doxauthinfo(argc,argv) -int argc; -char *argv[]; +doxauthinfo(int argc, char **argv) { if (!Needauth) { printf("%d Authorization already completed\r\n", ERR_AUTHREJ); @@ -249,7 +236,7 @@ char *argv[]; fflush(stdout); return; } - getpass(argv[2]); + my_getpass(argv[2]); return; } #ifdef GENAUTH @@ -289,8 +276,7 @@ char *argv[]; /* get userid and prompt for password */ void -getuser(p) -char *p; +getuser(char *p) { strncpy(User,p,8); User[8] = 0; @@ -301,14 +287,12 @@ char *p; /* password */ void -getpass(p) -char *p; +my_getpass(char *p) { static char pass[10]; char *namep; struct passwd *pwd; struct group *grp; - extern struct group *getgrnam(); strncpy(pass,p,8); pass[8] = 0; --- server/xhdr.c.orig 1994-11-01 06:09:21 UTC +++ server/xhdr.c @@ -11,8 +11,9 @@ static char sccsid[] = "@(#)$Id: xhdr.c,v 1.13 1994/11 #endif /* forward declarations */ -void print_header(); +void print_header(register FILE *fp, register char *header); + /* * XHDR header [|articlerange] * @@ -34,9 +35,7 @@ void print_header(); */ void -xhdr(argc, argv) - int argc; - char *argv[]; +xhdr(int argc, char **argv) { char buf[MAXPATHLEN]; register int artptr; @@ -71,7 +70,7 @@ xhdr(argc, argv) (void) fflush(stdout); return; } - printf("%d %d %s header of article %s.\r\n%s ", + printf("%d %ld %s header of article %s.\r\n%s ", OK_HEAD, group_artnum, argv[1], argv[2], argv[2]); print_header(fp, argv[1]); (void) fclose(fp); @@ -110,11 +109,12 @@ xhdr(argc, argv) *cp++ = '\0'; low = atoi(argv[2]); high = atoi(cp); - if (high < low) + if (high < low) { if (num_arts > 0) high = art_array[num_arts-1]; else high = low; + } } artptr = 0; } @@ -157,9 +157,9 @@ xhdr(argc, argv) void -print_header(fp, header) - register FILE *fp; - register char *header; +print_header( + register FILE *fp, + register char *header) { char line[NNTP_STRLEN]; register char *cp, *cp2; @@ -208,7 +208,8 @@ print_header(fp, header) /* Kludge to get around Greenhills C compiler */ -xhdr_greenkluydge() +void +xhdr_greenkluydge(void) { } --- server/xover.c.orig 1994-11-01 06:09:24 UTC +++ server/xover.c @@ -8,10 +8,10 @@ static char sccsid[] = "$Id: xover.c,v 1.2 1994/11/01 #endif #if defined(XOVER) || defined(XROVER) void -numlist(argc, argv, obj) - int argc; - char *argv[]; - struct xobj *obj; +numlist( + int argc, + char *argv[], + struct xobj *obj) { register int low, high; int artnum, artptr; @@ -53,11 +53,12 @@ numlist(argc, argv, obj) *cp++ = '\0'; low = atoi(argv[1]); high = atoi(cp); - if (high < low) + if (high < low) { if (num_arts > 0) high = art_array[num_arts-1]; else high = low; + } } artptr = 0; } @@ -96,21 +97,18 @@ numlist(argc, argv, obj) #endif #ifdef XOVER -FILE *over_open(); -void over_fake(); +FILE *over_open(void); +void over_fake(int artnum); struct xobj over = {0,-1,0,over_open,over_fake,"overview","XOVER"}; void -doxover(argc, argv) - int argc; - char *argv[]; +doxover(int argc, char **argv) { numlist(argc, argv, &over); } int -over_is_cheap(low, high) -int low, high; +over_is_cheap(int low, int high) { if (over.fp) return 1; @@ -120,7 +118,7 @@ int low, high; } FILE * -over_open() +over_open(void) { FILE *fp; #ifdef OVERVIEW_DIR @@ -141,8 +139,7 @@ over_open() #define TOLOWER(c) (isupper(c) ? tolower(c) : (c)) int -over_header(s) -char *s; +over_header(const char *s) { int i; char ch; @@ -162,9 +159,7 @@ char *s; } char * -over_grab_header(hdr, output) -int hdr; -int output; +over_grab_header(int hdr, int output) { int c; int i = hdr; @@ -175,7 +170,6 @@ int output; i = OVER_GROUP_FIELD; #endif while (i--) { - register int c; while ((c = getc(over.fp)) != '\t') if (c == EOF || c == '\n') goto no_contents; @@ -213,7 +207,6 @@ no_contents: } while (c != EOF && c != '\n' && c != '\t'); printf("\r\n"); } else { - char *malloc(), *realloc(); register int size = 1024; buf = malloc(size); if (buf) { @@ -240,15 +233,13 @@ no_contents: } void -over_fake(artnum) -int artnum; +over_fake(int artnum) { char line[NNTP_STRLEN]; register FILE *fp; register char *cp, *cp2; register int hdr; char *array[OVER_FIELD_COUNT]; - char *malloc(), *realloc(); (void) sprintf(line, "%d", artnum); fp = fopen(line, "r"); @@ -310,7 +301,7 @@ int artnum; } else if (hdr == 6) { /* Fudge the byte header */ struct stat s; fstat(fileno(fp), &s); - printf("%u", s.st_size); + printf("%ld", (long)s.st_size); } } printf("\r\n"); @@ -320,20 +311,18 @@ int artnum; #endif #ifdef XROVER -FILE *rover_open(); -void rover_fake(); +FILE *rover_open(void); +void rover_fake(int); struct xobj rover = {0,-1,0,rover_open,rover_fake,"reference","XROVER"}; void -doxrover(argc, argv) - int argc; - char *argv[]; +doxrover(int argc, char **argv) { numlist(argc, argv, &rover); } FILE * -rover_open() +rover_open(void) { FILE *fp; #ifdef ROVER_DIR @@ -352,14 +341,12 @@ rover_open() } void -rover_fake(artnum) - int artnum; +rover_fake(int artnum) { char line[NNTP_STRLEN]; register FILE *fp; register char *cp, *cp2; char *references = NULL; - char *malloc(), *realloc(); #ifdef XOVER if (over_is_cheap(artnum, artnum)) { @@ -435,7 +422,7 @@ output_refs: if (!gethistent(cp, 0) || group_artnum == 0) printf(" %s", cp); else { - printf(" %d", group_artnum); + printf(" %ld", group_artnum); break; } *cp = '\0'; @@ -449,8 +436,7 @@ output_refs: /* Check if the string we've found looks like a valid message-id reference. */ int -valid_message_id(start, end) -register char *start, *end; +valid_message_id(register char *start, register char *end) { char *mid; @@ -478,9 +464,9 @@ register char *start, *end; #if defined(XOVER) || defined(XROVER) int -xfind(obj, artnum) - struct xobj *obj; - int artnum; +xfind( + struct xobj *obj, + int artnum) { FILE *fp = obj->fp; int file_num = obj->num; @@ -519,8 +505,7 @@ xfind(obj, artnum) } void -xclose(obj) -struct xobj *obj; +xclose(struct xobj *obj) { if (obj->fp) { fclose(obj->fp); @@ -531,7 +516,7 @@ struct xobj *obj; } void -close_xfiles() +close_xfiles(void) { #ifdef XOVER xclose(&over); --- server/xover.h.orig 1994-11-01 05:57:53 UTC +++ server/xover.h @@ -8,16 +8,20 @@ struct xobj { FILE *fp; int num; int open_tried; - FILE *(*open)(); - void (*fake)(); - char *name; - char *cmd; + FILE *(*open)(void); + void (*fake)(int); + const char *name; + const char *cmd; }; extern struct xobj over; extern struct xobj rover; -int over_is_cheap(); -int over_header(); -char *over_grab_header(); -int xfind(); +int over_is_cheap(int low, int high); +int over_header(const char *s); +char *over_grab_header(int hdr, int output); +int xfind(struct xobj *obj, int artnum); +#if defined(XOVER) || defined(XROVER) +void numlist(int argc, char *argv[], struct xobj *obj); +#endif +void xclose(struct xobj *obj); --- support/acttimes.c.orig 1996-01-09 07:28:02 UTC +++ support/acttimes.c @@ -18,6 +18,11 @@ #define NNTP_SUPPORT /* comment out if not using NNTP */ #include +#include +#include +#include +#include +#include #include #include #include @@ -64,23 +69,14 @@ /* ---------- End of configuration defines ---------- */ -#ifdef TERMIO -#include -#else -#include -#endif - #define TIMER_FIRST 1 #define TIMER_DEFAULT (10 * 60) #define strnEQ(x,y,n) (!strncmp((x),(y),(n))) -extern errno; +SIGRET alarm_handler(int), quit_handler(int); +void active_times(void), free_lines(void), wrap_it_up(int); -char *index(), *rindex(), *malloc(); -SIGRET alarm_handler(), quit_handler(); -void active_times(), free_lines(), wrap_it_up(); - typedef struct _active_line { struct _active_line *link; char *name; @@ -98,9 +94,8 @@ struct stat filestat; char buf[MAXPATHLEN]; char lockfile[MAXPATHLEN]; -main(argc, argv) -int argc; -char *argv[]; +int +main(int argc, char **argv) { int fd; long pid; @@ -250,7 +245,7 @@ char *argv[]; close(fd); } #else - (void) setpgrp(); + (void) setpgrp(0, 0); while ((pid = fork()) < 0) { sleep(2); } @@ -289,29 +284,27 @@ char *argv[]; /* ARGUSED */ SIGRET -alarm_handler(dummy) -int dummy; +alarm_handler(int dummy) { signal(SIGALRM, alarm_handler); } /* ARGUSED */ SIGRET -quit_handler(dummy) -int dummy; +quit_handler(int dummy) { wrap_it_up(0); } void -wrap_it_up(ret) +wrap_it_up(int ret) { unlink(lockfile); exit(ret); } void -active_times() +active_times(void) { FILE *fp_active, *fp_date_r, *fp_date_w; register char *cp; @@ -430,7 +423,7 @@ active_times() } void -free_lines() +free_lines(void) { for (pline = line_root; pline; pline = last_line) { if (pline->name) { --- xfer/nntpxfer.c.orig 1996-01-09 07:28:03 UTC +++ xfer/nntpxfer.c @@ -1,5 +1,5 @@ #ifndef lint -static char * scsid = "@(#)$Id: nntpxfer.c,v 1.18 1996/01/09 12:40:28 sob Exp sob $"; +static const char * scsid = "@(#)$Id: nntpxfer.c,v 1.18 1996/01/09 12:40:28 sob Exp sob $"; #endif /*************************************************************************** This work in its current form is Copyright 1996 Stan Barber @@ -101,22 +101,27 @@ static DBM *db = NULL; #ifdef linux #define __SERR _IO_ERR_SEEN #endif -char *malloc(); -char *strcpy(); -char *strcat(); -char *rindex(); -u_long inet_addr(); -extern int errno; +#include +#include +#include +#include +#include "../xmit/get_tcp_conn.h" +#include "../xmit/nntpxmit.h" + char *artlist[MAX_ARTICLES]; int server; /* stream socket to the nntp server */ FILE * rd_fp, * wr_fp; int newart, dupart, misart; char * Pname; -main(argc, argv) -int argc; -char *argv[]; +int sockread(char *buf); +void sockwrite(const char *buf); +int wewant(char *articleid); +int artfetch(char *articleid); + +int +main(int argc, char **argv) { FILE *dtfile; /* where last xfer date/time stored */ char buf[BUFSIZ]; @@ -185,7 +190,10 @@ char *argv[]; } clock = time((long *)0); now = gmtime(&clock); - newdate = (now->tm_year * 10000) + + +/* DG 9/8/98 - use tm_year %100 to avoid overflow in Y2K - see man 3 ctime */ + + newdate = (now->tm_year %100 * 10000) + ((now->tm_mon + 1) * 100) + now->tm_mday; newtime = (now->tm_hour * 10000) + (now->tm_min * 100) + now->tm_sec; @@ -367,7 +375,7 @@ char *argv[]; /* do we want to update the timestamp file? */ if (!omitupdate) { - (void) sprintf(buf, "%s %06d %06d %s\n", + (void) sprintf(buf, "%s %06ld %06ld %s\n", newsgroups, newdate, newtime, distributions); #ifdef DEBUG (void) printf("updating %s:\n\t%s\n", dtname, buf); @@ -384,8 +392,8 @@ char *argv[]; exit(0); } -artfetch(articleid) -char *articleid; +int +artfetch(char *articleid) { #ifdef DEBUG int lines = 0; @@ -452,15 +460,13 @@ char *articleid; static jmp_buf SFGstack; /* ARGUSED */ static SIGRET -to_sfgets(dummy) -int dummy; +to_sfgets(int dummy) { longjmp(SFGstack, 1); } int -sockread(buf) -char *buf; +sockread(char *buf) { int esave, rz; char * ret; @@ -510,8 +516,8 @@ char *buf; return(0); } -sockwrite(buf) -char *buf; +void +sockwrite(const char *buf) { register int sz; char buf2[BUFSIZ]; @@ -534,8 +540,7 @@ char *buf; } int -wewant(articleid) -char *articleid; +wewant(char *articleid) { #if defined(DBM) || defined(NDBM) datum k, d; @@ -547,12 +552,14 @@ char *articleid; int len; #endif char id[BUFSIZ]; +#ifndef CNEWS char *p; +#endif /* remove any case sensitivity */ (void) strcpy(id, articleid); - p = id; #ifndef CNEWS + p = id; while (*p) { if (isupper(*p)) @@ -614,8 +621,7 @@ char *articleid; ** Generate the appropriate history subfile name */ char * -histfile(hline) -char *hline; +histfile(char *hline) { char chr; /* least significant digit of article number */ static char subfile[BUFSIZ]; @@ -625,12 +631,11 @@ char *hline; return subfile; } -findhfdigit(fn) -char *fn; +int +findhfdigit(char *fn) { register char *p; register int chr; - extern char * index(); p = index(fn, '@'); if (p != NULL && p > fn) @@ -642,12 +647,13 @@ char *fn; return chr; } #endif -char * -errmsg(code) -int code; +const char * +errmsg(int code) { +#ifndef __FreeBSD__ extern int sys_nerr; extern char *sys_errlist[]; +#endif static char ebuf[6+5+1]; if (code > sys_nerr || code < 0) { --- xmit/get_tcp_conn.c.orig 1994-11-17 18:15:22 UTC +++ xmit/get_tcp_conn.c @@ -1,5 +1,5 @@ #ifndef lint -static char * rcsid = "$Id: get_tcp_conn.c,v 1.8 1994/11/17 16:43:05 sob Exp sob $"; +static const char * rcsid = "$Id: get_tcp_conn.c,v 1.8 1994/11/17 16:43:05 sob Exp sob $"; #endif #define USE_KEEPALIVES /* XXX should be in ../conf.h */ @@ -24,30 +24,32 @@ static char * rcsid = "$Id: get_tcp_conn.c,v 1.8 1994/ #include #include #include +#include +#include +#include +#include #include "get_tcp_conn.h" +#include "nntpxmit.h" #ifndef NONETDB #include #endif /* NONETDB */ +#include -extern int errno; extern char *Pname; -extern char *errmsg(); #ifndef BSD_44 #ifndef htons extern u_short htons(); #endif /* htons */ #endif #ifndef NONETDB -extern char *inet_ntoa(); -extern u_long inet_addr(); +#include #else /* * inet_addr for EXCELAN (which does not have it!) * */ u_long -inet_addr(cp) -register char *cp; +inet_addr(register char *cp) { u_long val, base, n; register char c; @@ -130,8 +132,7 @@ again: } char * -inet_ntoa(in) -struct in_addr in; +inet_ntoa(struct in_addr in) { static char address[20]; @@ -144,6 +145,7 @@ struct in_addr in; } #endif /* NONETDB */ +#ifdef PRE_IPv6 /* ** Take the name of an internet host in ASCII (this may either be its ** official host name or internet number (with or without enclosing @@ -152,19 +154,18 @@ struct in_addr in; ** returns NULL for failure to find the host name in the local database, ** or for a bad internet address spec. */ -u_long ** -name_to_address(host) -char *host; +static struct in_addr ** +name_to_address(char *host) { - static u_long *host_addresses[2]; - static u_long haddr; + static struct in_addr *host_addresses[2]; + static struct in_addr haddr; if (host == (char *)NULL) { - return((u_long **)NULL); + return((struct in_addr **)NULL); } host_addresses[0] = &haddr; - host_addresses[1] = (u_long *)NULL; + host_addresses[1] = (struct in_addr *)NULL; /* ** Is this an ASCII internet address? (either of [10.0.0.78] or @@ -186,7 +187,7 @@ char *host; host++; /* skip */ } *cp = '\0'; - haddr = inet_addr(namebuf); + inet_aton(namebuf, &haddr); return(&host_addresses[0]); } else { #ifdef NONETDB @@ -194,28 +195,30 @@ char *host; /* lint is gonna bitch about this (comparing an unsigned?!) */ if ((haddr = rhost(&host)) == FAIL) - return((u_long **)NULL); /* no such host */ + return((struct in_addr **)NULL); /* no such host */ return(&host_addresses[0]); #else - struct hostent *hstp = gethostbyname(host); + struct hostent *hstp = gethostbyname2(host, AF_INET); if (hstp == NULL) { - return((u_long **)NULL); /* no such host */ + return((struct in_addr **)NULL); /* no such host */ } - if (hstp->h_length != sizeof(u_long)) + if (hstp->h_length != sizeof(struct in_addr)) abort(); /* this is fundamental */ #ifndef h_addr /* alignment problems (isn't dbm wonderful?) */ bcopy((caddr_t)hstp->h_addr, (caddr_t)&haddr, sizeof(haddr)); return(&host_addresses[0]); #else - return((u_long **)hstp->h_addr_list); + return((struct in_addr **)hstp->h_addr_list); #endif /* h_addr */ #endif /* NONETDB */ } } +#endif /* PRE_IPv6 */ +#ifdef PRE_IPv6 /* ** Get a service port number from a service name (or ASCII number) ** @@ -237,9 +240,8 @@ static struct Services { }; #endif /* NONETDB */ -u_short -gservice(serv, proto) -char *serv, *proto; +static u_short +gservice(const char *serv, const char *proto) { if (serv == (char *)NULL || proto == (char *)NULL) return((u_short)0); @@ -264,17 +266,18 @@ char *serv, *proto; #endif /* NONETDB */ } } +#endif /* PRE_IPv6 */ /* ** given a host name (either name or internet address) and service name ** (or port number) (both in ASCII), give us a TCP connection to the ** requested service at the requested host (or give us FAIL). */ -get_tcp_conn(host, serv) -char *host, *serv; +int +get_tcp_conn(char *host, const char *serv) { register int sock; - u_long **addrlist; + struct in_addr **addrlist; struct sockaddr_in sadr; #ifdef OLDSOCKET struct sockproto sp; @@ -283,7 +286,51 @@ char *host, *serv; sp.sp_protocol = (u_short)IPPROTO_TCP; #endif /* OLDSOCKET */ - if ((addrlist = name_to_address(host)) == (u_long **)NULL) { +#ifndef PRE_IPv6 + /* see "man getaddrinfo()" */ + struct addrinfo hints, *addrs, *ai_p; + int r; + + memset( &hints, 0, sizeof(hints) ); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + if ( (r = getaddrinfo( host, "nntp", &hints, &addrs )) != 0 ) + { + fprintf( stderr, "getaddrinfo(%s/nntp): %s", host, + gai_strerror(r)); + return(NOHOST); + } + sock=-1; + for( ai_p = addrs; ai_p != NULL; ai_p = ai_p->ai_next ) + { + sock = socket( ai_p->ai_family, ai_p->ai_socktype, + ai_p->ai_protocol); + if ( sock < 0 ) {continue;} + if ( connect( sock, ai_p->ai_addr, ai_p->ai_addrlen ) < 0 ) + { + fprintf( stderr, "connect() failed: %s", strerror(errno)); + close(sock); + sock=-1; + continue; + } + if ( ai_p->ai_family == AF_INET6 ) + { + char addrbuf[100]; + inet_ntop( ai_p->ai_family, ai_p->ai_addr, + addrbuf, sizeof(addrbuf) ); + syslog(LOG_INFO, "IPv6 connect to %s (%s) - yeah!", + host, addrbuf ); + } + break; + } + freeaddrinfo(addrs); + if ( sock < 0 ) { return(FAIL); } + + /* TODO: keepalives! */ + return(sock); + +#else /*PRE_IPv6*/ + if ((addrlist = name_to_address(host)) == (struct in_addr **)NULL) { return(NOHOST); } @@ -291,7 +338,7 @@ char *host, *serv; if ((sadr.sin_port = gservice(serv, "tcp")) == 0) return(NOSERVICE); - for(; *addrlist != (u_long *)NULL; addrlist++) { + for(; *addrlist != (struct in_addr *)NULL; addrlist++) { bcopy((caddr_t)*addrlist, (caddr_t)&sadr.sin_addr, sizeof(sadr.sin_addr)); @@ -327,4 +374,5 @@ char *host, *serv; } } return(FAIL); +#endif /* PRE_IPv6 */ } --- xmit/get_tcp_conn.h.orig 1994-11-17 18:15:23 UTC +++ xmit/get_tcp_conn.h @@ -28,3 +28,6 @@ #ifdef NONETDB #define IPPORT_NNTP 119 /* NNTP is on TCP port 119 */ #endif + +int get_tcp_conn(char *host, const char *serv); + --- xmit/llist.c.orig 1994-11-12 04:41:26 UTC +++ xmit/llist.c @@ -7,8 +7,8 @@ #include #include "llist.h" -extern free(); -extern caddr_t malloc(); +#include +#include /* ** a little wasteful for some cases, but it works, and I don't mind @@ -20,8 +20,7 @@ extern caddr_t malloc(); ** recursively free a linked list */ void -l_free(lp) -register ll_t *lp; +l_free(register ll_t *lp) { if (lp->l_next == (ll_t *)NULL) return; @@ -34,10 +33,10 @@ register ll_t *lp; ** at the end of the item for the next list element header. */ ll_t * -l_alloc(lp, s, len) -register ll_t *lp; -caddr_t s; -register int len; +l_alloc( +register ll_t *lp, +caddr_t s, +register int len) { if (s == (caddr_t)NULL || lp == (ll_t *)NULL || len <= 0) return((ll_t *)NULL); --- xmit/llist.h.orig 1990-07-05 01:00:51 UTC +++ xmit/llist.h @@ -11,8 +11,8 @@ struct llist { typedef struct llist ll_t; -extern void l_free(); -extern ll_t *l_alloc(); +extern void l_free(register ll_t *lp); +extern ll_t *l_alloc(register ll_t *lp, caddr_t s, register int len); #ifndef NULL #define NULL 0 --- xmit/nntpxmit.c.orig 1994-12-03 22:37:58 UTC +++ xmit/nntpxmit.c @@ -1,5 +1,5 @@ #ifndef lint -static char * rcsid = "@(#)$Id: nntpxmit.c,v 1.12 1994/12/03 22:37:36 sob Exp sob $"; +static const char * rcsid = "@(#)$Id: nntpxmit.c,v 1.12 1994/12/03 22:37:36 sob Exp sob $"; #endif /* nntpxmit - transmit netnews articles across the internet with nntp ** @@ -66,6 +66,9 @@ static char * rcsid = "@(#)$Id: nntpxmit.c,v 1.12 1994 #include "../conf.h" #include #include +#include +#include +#include #include #include #include @@ -73,9 +76,10 @@ static char * rcsid = "@(#)$Id: nntpxmit.c,v 1.12 1994 #include #else #include -extern time_t time(); #endif +#ifndef __FreeBSD__ #include +#endif #include #include #ifdef USG @@ -98,15 +102,19 @@ extern time_t time(); #define MAXFNAME BUFSIZ /* maximum filename size - big enough? */ #define FCLOSE(fp) if (fp) (void) fclose(fp); (fp) = (FILE *)NULL -char *getline(); -char *getmsgid(); -char *errmsg(); -void requeue(); -SIGRET catchsig(); -void restsig(); -void logstats(); -void log(); -int interrupted(); +char *xmit_getline(FILE *fp, char *line, int len); +char *getmsgid(char *file, FILE **fpp); +void requeue(char *msgid, char *article); +SIGRET catchsig(ifunp handler); +void restsig(void); +void logstats(void); +void cleanup(void); +void rewrite(void); +void interrupted(int sig); +int sendnews(char *host, int transport, char *file, int isQfile); +int lockfd(int fd, char *file, int non_blocking); +int sendarticle(char *host, char *file, char *msgid); +int ihave(char *id); /* ** Globals that certain things need. @@ -132,10 +140,10 @@ char Debug = FALSE; char Report_Stats = TRUE; char ReQueue_Fails = TRUE; -char *USAGE = "USAGE: nntpxmit [-d][-s][-r][-T][-F][-D] hostname|hostname:file [...]"; -char *Fmt = "%s localhost %s[%d]: %s\n"; -char *E_fopen = "fopen(%s, \"%s\"): %s"; -char *E_unlk = "unlink(%s): %s"; +const char *USAGE = "USAGE: nntpxmit [-d][-s][-r][-T][-F][-D] hostname|hostname:file [...]"; +const char *Fmt = "%s localhost %s[%d]: %s\n"; +const char *E_fopen = "fopen(%s, \"%s\"): %s"; +const char *E_unlk = "unlink(%s): %s"; ll_t FailedArticles; /* list of failed articles */ @@ -148,6 +156,7 @@ struct { double Tbegin, Tend; /* transfer timestamps */ +#ifndef __FreeBSD__ extern int errno; extern int strncmp(); extern char *rindex(); @@ -155,10 +164,10 @@ extern char *index(); extern char *mktemp(); extern char *strcpy(); extern char *strcat(); +#endif -main(ac, av) -int ac; -char *av[]; +int +main(int ac, char **av) { register int i; int transport = T_IP_TCP; /* default is IP/TCP */ @@ -259,7 +268,7 @@ char *av[]; ** */ void -logstats() +logstats(void) { static double ouser = 0.0, osys = 0.0; double user, sys; @@ -298,10 +307,10 @@ logstats() "%s stats %lu offered %lu accepted %lu rejected %lu failed", Host, Stats.offered, Stats.accepted, Stats.rejected, Stats.failed); - log(L_INFO, buf); + nntpdlog(L_INFO, buf); sprintf(buf, "%s xmit user %.3f system %.3f elapsed %.3f", Host, (user - ouser), (sys - osys), (Tend - Tbegin)); - log(L_INFO, buf); + nntpdlog(L_INFO, buf); /* reset reference point */ Tbegin = Tend; ouser = user; @@ -321,14 +330,17 @@ logstats() ** FALSE - a one-shot file transfer - return TRUE or FALSE depending ** upon whether we successfully transferred the one article. */ -sendnews(host, transport, file, isQfile) -char *host, *file; -int transport, isQfile; +int +sendnews( +char *host, +int transport, +char *file, +int isQfile) { #ifdef FTRUNCATE - char *mode = "r+"; /* so we can use ftruncate() */ + const char *mode = "r+"; /* so we can use ftruncate() */ #else - char *mode = "r"; + const char *mode = "r"; #endif /* FTRUNCATE */ char *msgid; @@ -336,7 +348,7 @@ int transport, isQfile; char buf[BUFSIZ]; sprintf(buf, E_fopen, file, mode, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); return(FALSE); } @@ -371,7 +383,7 @@ int transport, isQfile; */ catchsig(interrupted); - while ((msgid = getline(Qfp, Article, sizeof(Article))) != NULL) { + while ((msgid = xmit_getline(Qfp, Article, sizeof(Article))) != NULL) { if (!sendarticle(host, Article, msgid)) { requeue(Article, msgid); Article[0] = '\0'; @@ -410,16 +422,17 @@ int transport, isQfile; ** Watch all network I/O for errors, return FALSE if ** the connection fails and we have to cleanup. */ -sendarticle(host, file, msgid) -char *host; -char *file; -char *msgid; +int +sendarticle( +char *host, +char *file, +char *msgid) { register int code; FILE *fp = NULL; int error; char buf[BUFSIZ]; - char *e_xfer = "%s xfer: %s"; + const char *e_xfer = "%s xfer: %s"; errno = 0; if (msgid == NULL || *msgid == '\0') { @@ -437,7 +450,7 @@ char *msgid; if (fp == NULL && errno != ENOENT) { /* Worse than "No such file or directory"? */ sprintf(buf, E_fopen, file, "r", errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); goodbye(DONT_WAIT); exit(EX_OSERR); } @@ -445,13 +458,13 @@ char *msgid; /* Hmph. The file didn't exist. */ error = sendcmd("."); } else { - error = !sendfile(fp); + error = !my_sendfile(fp); /* Leave this open in case we need to requeue it. */ } if (error) { sprintf(buf, "%s xfer: sendfile: %s", host, errmsg(errno)); - log(L_NOTICE, buf); + nntpdlog(L_NOTICE, buf); Stats.failed++; if (fp) { (void) fclose(fp); fp = NULL; } return(FALSE); @@ -466,12 +479,12 @@ char *msgid; if (code < 0) { if (errno > 0) { sprintf(buf, e_xfer, host, errmsg(errno)); - log(L_NOTICE, buf); + nntpdlog(L_NOTICE, buf); } else { char errbuf[BUFSIZ]; sprintf(errbuf, e_xfer, host, buf); - log(L_NOTICE, errbuf); + nntpdlog(L_NOTICE, errbuf); } if (fp) { (void) fclose(fp); fp = NULL; } return(FALSE); @@ -495,14 +508,14 @@ char *msgid; if (code < 0) { if (errno > 0) { sprintf(buf, e_xfer, host, errmsg(errno)); - log(L_NOTICE, buf); + nntpdlog(L_NOTICE, buf); } else { sprintf(buf, e_xfer, host, "ihave"); - log(L_NOTICE, buf); + nntpdlog(L_NOTICE, buf); } } else { sprintf(buf, "%s improper response to IHAVE: %d while offering %s", host, code, Article); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); if (fp) { (void) fclose(fp); fp = NULL; } } return(FALSE); @@ -511,12 +524,13 @@ char *msgid; return(TRUE); } -char * -errmsg(code) -int code; +const char * +errmsg(int code) { +#ifndef __FreeBSD__ extern int sys_nerr; extern char *sys_errlist[]; +#endif static char ebuf[6+5+1]; if (code > sys_nerr || code < 0) { @@ -529,9 +543,8 @@ int code; /* ** strip leading and trailing spaces */ -char * -sp_strip(s) -register char *s; +static char * +sp_strip(register char *s) { register char *cp; @@ -556,9 +569,8 @@ register char *s; /* ** convert `s' to lower case */ -char * -lcase(s) -register char *s; +static char * +lcase(register char *s) { register char *cp; @@ -575,9 +587,9 @@ register char *s; ** Get the message-id header field data with a minimum of fuss. */ char * -getmsgid(file, fpp) -char *file; -FILE **fpp; +getmsgid( +char *file, +FILE **fpp) { static char buf[BUFSIZ]; static char msgid[] = "message-id"; @@ -617,8 +629,7 @@ FILE **fpp; /* ** Special characters, see RFC822, appendix D. */ -isspecial(c) -char c; +isspecial(char c) { char *specials = "()<>@,;:\\\".[]"; @@ -647,8 +658,8 @@ char c; ** statement. - Erik E. Fair ** May 30, 1986 */ -msgid_ok(id) -register char *id; +static int +msgid_ok(register char *id) { register Langle = FALSE; register Rangle = FALSE; @@ -728,11 +739,11 @@ register char *id; ** Simpleton's check for message ID syntax. ** A concession to the realities of the ARPA Internet. */ -msgid_ok(s) -register char *s; +static int +msgid_ok(register char *s) { register char c; - register in_msgid = FALSE; + register int in_msgid = FALSE; if (s == (char *)NULL) return(FALSE); @@ -756,8 +767,8 @@ register char *s; ** Read the header of a netnews article, snatch the message-id therefrom, ** and ask the remote if they have that one already. */ -ihave(id) -char *id; +int +ihave(char *id) { register int code; char buf[BUFSIZ]; @@ -769,13 +780,13 @@ char *id; ** communications with the remote either. */ sprintf(buf, "%s: message-id missing!", Article); - log(L_DEBUG, buf); + nntpdlog(L_DEBUG, buf); return(ERR_GOTIT); } if (!msgid_ok(id)) { sprintf(buf, "%s: message-id syntax error: %s", Article, id); - log(L_DEBUG, buf); + nntpdlog(L_DEBUG, buf); return(ERR_GOTIT); } @@ -808,10 +819,10 @@ again: ** Returns NULL at end of file. */ char * -getline(fp, line, len) -FILE *fp; -char *line; -int len; +xmit_getline( +FILE *fp, +char *line, +int len) { register char *cp; @@ -836,7 +847,8 @@ int len; /* ** OK, clean up any mess and requeue failed articles */ -cleanup() +void +cleanup(void) { dprintf(stderr, "%s: cleanup()\n", Pname); if (Qfp == (FILE *)NULL || Qfile == (char *)NULL) @@ -856,7 +868,7 @@ cleanup() char buf[BUFSIZ]; sprintf(buf, E_unlk, Qfile, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); } } FCLOSE(Qfp); @@ -869,9 +881,9 @@ cleanup() ** Calling this with a NULL pointer resets the internal pointer. */ void -requeue(article, msgid) -char *msgid; -char *article; +requeue( +char *article, +char *msgid) { char buf[BUFSIZ]; static ll_t *lp = &FailedArticles; @@ -908,12 +920,13 @@ reset: ** account is supposed to own netnews), the resultant file will be the ** wrong ownership, permissions, etc. */ -rewrite() +void +rewrite(void) { register ll_t *lp; register FILE *tmpfp; register int nart = 0; - char *mode = "w+"; + const char *mode = "w+"; static char template[] = "/tmp/nntpxmitXXXXXX"; char buf[BUFSIZ]; static char *tempfile = (char *)NULL; @@ -925,7 +938,7 @@ rewrite() if ((tmpfp = fopen(tempfile, mode)) == (FILE *)NULL) { sprintf(buf, E_fopen, tempfile, mode, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); FCLOSE(Qfp); return; } @@ -962,12 +975,12 @@ rewrite() */ if (ferror(tmpfp)) { sprintf(buf, "rewrite(): copy to %s failed", tempfile); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); (void) fclose(tmpfp); FCLOSE(Qfp); if (unlink(tempfile) < 0) { sprintf(buf, E_unlk, tempfile, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); } requeue((char *)NULL,(char *)NULL); /* reset */ return; @@ -978,12 +991,12 @@ rewrite() rewind(Qfp); if (ftruncate(fileno(Qfp), (off_t)0) < 0) { sprintf(buf, "ftruncate(%s, 0): %s", Qfile, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); FCLOSE(Qfp); (void) fclose(tmpfp); if (unlink(tempfile) < 0) { sprintf(buf, E_unlk, tempfile, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); } requeue((char *)NULL,(char *)NULL); /* reset */ return; @@ -992,11 +1005,11 @@ rewrite() FCLOSE(Qfp); /* we just nuked our lock here (lockfd) */ if ((Qfp = fopen(Qfile, mode)) == (FILE *)NULL) { sprintf(buf, E_fopen, Qfile, mode, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); (void) fclose(tmpfp); if (unlink(tempfile) < 0) { sprintf(buf, E_unlk, tempfile, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); } requeue((char *)NULL,(char *)NULL); /* reset */ return; @@ -1012,13 +1025,13 @@ rewrite() (void) fflush(Qfp); if (ferror(Qfp)) { sprintf(buf, "rewrite(): copy to %s failed", Qfile); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); } (void) fclose(tmpfp); FCLOSE(Qfp); if (unlink(tempfile) < 0) { sprintf(buf, E_unlk, tempfile, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); } requeue((char *)NULL,(char *)NULL); /* reset */ dprintf(stderr, "%s: rewrite(%s): done\n", Pname, Qfile); @@ -1031,8 +1044,8 @@ rewrite() ** There's probably too much stuff to do in this signal ** handler, but we're going to exit anyway... */ -interrupted(sig) -int sig; +void +interrupted(int sig) { char buf[BUFSIZ]; @@ -1040,7 +1053,7 @@ int sig; catchsig(SIG_IGN); /* for System V - hope we're quick enough */ #endif /* RELSIG */ sprintf(buf, "%s signal %d", Host, sig); - log(L_NOTICE, buf); + nntpdlog(L_NOTICE, buf); requeue(Article,(char *)NULL); cleanup(); if (Report_Stats) @@ -1053,36 +1066,35 @@ struct { int signo; ifunp state; } SigList[] = { - {SIGHUP}, - {SIGINT}, - {SIGQUIT}, - {SIGTERM}, - {NULL} + {SIGHUP, 0}, + {SIGINT, 0}, + {SIGQUIT, 0}, + {SIGTERM, 0}, + {0, 0} }; SIGRET -catchsig(handler) -ifunp handler; +catchsig(ifunp handler) { register int i; if (handler != SIG_IGN) { - for(i = 0; SigList[i].signo != NULL; i++) { + for(i = 0; SigList[i].signo != 0; i++) { SigList[i].state = signal(SigList[i].signo, handler); } } else { - for(i = 0; SigList[i].signo != NULL; i++) { + for(i = 0; SigList[i].signo != 0; i++) { (void) signal(SigList[i].signo, handler); } } } void -restsig() +restsig(void) { register int i; - for(i = 0; SigList[i].signo != NULL; i++) { + for(i = 0; SigList[i].signo != 0; i++) { if (SigList[i].state != (ifunp)(-1)) (void) signal(SigList[i].signo, SigList[i].state); } @@ -1092,9 +1104,9 @@ restsig() ** log stuff */ void -log(importance, error) -int importance; -char *error; +nntpdlog( +int importance, +const char *error) { int skip = FALSE; FILE *report = (importance == L_INFO ? stdout : stderr); @@ -1121,9 +1133,11 @@ char *error; ** NOTE: if the appropriate system calls are unavailable, ** this subroutine is a no-op. */ -lockfd(fd, file, non_blocking) -int fd, non_blocking; -char *file; /* just for error reporting */ +int +lockfd( +int fd, +char *file, /* just for error reporting */ +int non_blocking) { char buf[BUFSIZ]; #ifdef USG @@ -1131,7 +1145,7 @@ char *file; /* just for error reporting */ if (lockf(fd, (non_blocking ? F_TLOCK : F_LOCK), 0) < 0) { if (errno != EACCES) { sprintf(buf, "lockf(%s): %s\n", file, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); } return(FALSE); } @@ -1141,7 +1155,7 @@ char *file; /* just for error reporting */ if (flock(fd, LOCK_EX|(non_blocking ? LOCK_NB : 0)) < 0) { if (errno != EWOULDBLOCK) { sprintf(buf, "flock(%s): %s\n", file, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); } return(FALSE); } --- xmit/nntpxmit.h.orig 1994-11-03 03:51:34 UTC +++ xmit/nntpxmit.h @@ -7,11 +7,12 @@ */ #ifdef MMAP +#include #include #include #endif -typedef SIGRET (*ifunp)(); /* pointer to function that returns */ +typedef SIGRET (*ifunp)(int); /* pointer to function that returns */ /* whatever signal() returns */ #define dprintf if (Debug) fprintf @@ -55,3 +56,19 @@ typedef SIGRET (*ifunp)(); /* pointer to function that #define FTRUNCATE #define RELSIG #endif + +/* remote.c */ +int sendcmd(const char *cmd); +int readreply(register char *buf, int size); +int converse(char *buf, int size); +int hello(char *host, int transport); +void goodbye(int wait_for_reply); +char *sfgets(char *buf, int size, FILE *fp); +char *rfgets(char *buf, int size, FILE *fp); +int my_sendfile(FILE *fp); + +/* nntpxmit.c */ +const char *errmsg(int code); +void nntpdlog(int importance, const char *error); +void xmitauth(char *host); + --- xmit/remote.c.orig 1996-01-09 07:28:03 UTC +++ xmit/remote.c @@ -1,5 +1,5 @@ #ifndef lint -static char * rcsid = "@(#)$Id: remote.c,v 1.11 1996/01/09 12:37:02 sob Exp $"; +static const char * rcsid = "@(#)$Id: remote.c,v 1.11 1996/01/09 12:37:02 sob Exp $"; #endif /* ** remote communication routines for NNTP/SMTP style communication. @@ -68,22 +68,22 @@ static char * rcsid = "@(#)$Id: remote.c,v 1.11 1996/0 static jmp_buf SFGstack; FILE *rmt_rd; FILE *rmt_wr; -char *sfgets(); -char *rfgets(); +char *sfgets(char *buf, int size, FILE *fp); +char *rfgets(char *buf, int size, FILE *fp); -extern int errno; +#include +#include +#include + extern char Debug; -extern char *errmsg(); -extern char *strcpy(); -extern void log(); /* ** send cmd to remote, terminated with a CRLF. */ -sendcmd(cmd) -char *cmd; +int +sendcmd(const char *cmd) { - if (cmd == (char *)NULL) + if (cmd == (const char *)NULL) return(TRUE); /* error */ dprintf(stderr, ">>> %s\n", cmd); /* DEBUG */ (void) fprintf(rmt_wr, "%s\r\n", cmd); @@ -96,9 +96,10 @@ char *cmd; ** as an integer, and the message in a buffer supplied by the caller. ** Returns FAIL if something went wrong. */ -readreply(buf, size) -register char *buf; -int size; +int +readreply( +register char *buf, +int size) { register char *cp; register int len; @@ -148,9 +149,10 @@ int size; ** send a command to the remote, and wait for a response ** returns the response code, and the message in the buffer */ -converse(buf, size) -char *buf; -int size; +int +converse( +char *buf, +int size) { register int resp; @@ -175,13 +177,15 @@ int size; ** effort: may they be forced to use the network that they will create, ** as opposed to something that works (like the Internet). */ -hello(host, transport) -char *host; -int transport; -{ char *service; - char *rmode = "r"; - char *wmode = "w"; - char *e_fdopen = "fdopen(%d, \"%s\"): %s"; +int +hello( +char *host, +int transport) +{ + const char *service; + const char *rmode = "r"; + const char *wmode = "w"; + const char *e_fdopen = "fdopen(%d, \"%s\"): %s"; int socket0, socket1; /* to me (bad pun) */ char buf[BUFSIZ]; @@ -207,7 +211,7 @@ int transport; } break; #else - log(L_WARNING, "no DECNET support compiled in"); + nntpdlog(L_WARNING, "no DECNET support compiled in"); return(FAIL); #endif case T_FD: @@ -220,29 +224,29 @@ int transport; switch(socket0) { case NOHOST: sprintf(buf, "%s host unknown", host); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); return(FAIL); case NOSERVICE: sprintf(buf, "%s service unknown: %s", host, service); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); return(FAIL); case FAIL: sprintf(buf, "%s hello: %s", host, errmsg(errno)); - log(L_NOTICE, buf); + nntpdlog(L_NOTICE, buf); return(FAIL); } } if ((socket1 = dup(socket0)) < 0) { sprintf(buf, "dup(%d): %s", socket0, errmsg(errno)); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); (void) close(socket0); return(FAIL); } if ((rmt_rd = fdopen(socket0, rmode)) == (FILE *)NULL) { sprintf(buf, e_fdopen, socket0, rmode); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); (void) close(socket0); (void) close(socket1); return(FAIL); @@ -250,7 +254,7 @@ int transport; if ((rmt_wr = fdopen(socket1, wmode)) == (FILE *)NULL) { sprintf(buf, e_fdopen, socket1, wmode); - log(L_WARNING, buf); + nntpdlog(L_WARNING, buf); (void) fclose(rmt_rd); rmt_rd = (FILE *)NULL; (void) close(socket1); @@ -270,12 +274,12 @@ int transport; char err[BUFSIZ]; sprintf(err, "%s greeted us with %s", host, buf); - log(L_NOTICE, err); + nntpdlog(L_NOTICE, err); } goodbye(DONT_WAIT); return(FAIL); } - return(NULL); + return(0); } /* @@ -283,8 +287,8 @@ int transport; ** ** We trap SIGPIPE because the socket might already be gone. */ -goodbye(wait_for_reply) -int wait_for_reply; +void +goodbye(int wait_for_reply) { register ifunp pstate = signal(SIGPIPE, SIG_IGN); @@ -308,8 +312,7 @@ int wait_for_reply; /* ARGUSED */ static SIGRET -to_sfgets(dummy) -int dummy; +to_sfgets(int dummy) { longjmp(SFGstack, 1); } @@ -322,10 +325,10 @@ int dummy; ** error macros. */ char * -sfgets(buf, size, fp) -char *buf; -int size; -FILE *fp; +sfgets( +char *buf, +int size, +FILE *fp) { register char *ret; int esave; @@ -366,10 +369,10 @@ FILE *fp; ** the remote. Otherwise it returns its first argument, like fgets(3). */ char * -rfgets(buf, size, fp) -char *buf; -int size; -FILE *fp; +rfgets( +char *buf, +int size, +FILE *fp) { register char *cp = buf; register int len; @@ -403,8 +406,8 @@ FILE *fp; ** with appropriate RFC822 filtering (e.g. CRLF line termination, ** and dot escaping). Return FALSE if something went wrong. */ -sendfile(fp) -FILE *fp; +int +my_sendfile(FILE *fp) { register int c; register FILE *remote = rmt_wr; @@ -440,7 +443,7 @@ FILE *fp; mbufr = mmap (0, sbuf.st_size, PROT_READ, MAP_PRIVATE, fileno(fp), 0); if(mbufr == (char *) -1){ sprintf(buf, "sendfile: mmap failed: %s", errmsg(errno)); - log(L_NOTICE, buf); + nntpdlog(L_NOTICE, buf); return(FALSE); } --- xmit/shlock.c.orig 1994-11-01 05:54:32 UTC +++ xmit/shlock.c @@ -1,5 +1,5 @@ #ifndef lint -static char * rcsid = "@(#)$Id: shlock.c,v 1.5 1994/11/01 05:53:24 sob Exp sob $"; +static const char * rcsid = "@(#)$Id: shlock.c,v 1.5 1994/11/01 05:53:24 sob Exp sob $"; #endif /* ** Program to produce reliable locks for shell scripts. @@ -28,7 +28,6 @@ static char * rcsid = "@(#)$Id: shlock.c,v 1.5 1994/11 ** Erik E. Fair , November 12, 1989 */ -#include #include #include /* Needed on hpux */ #include @@ -36,6 +35,11 @@ static char * rcsid = "@(#)$Id: shlock.c,v 1.5 1994/11 #ifdef NNTPSRC #include "../conf.h" #endif +#include +#include +#include +#include +#include #define LOCK_SET 0 #define LOCK_FAIL 1 @@ -52,23 +56,19 @@ static char * rcsid = "@(#)$Id: shlock.c,v 1.5 1994/11 int Debug = FALSE; char *Pname; -char *USAGE = "%s: USAGE: shlock -f file -p pid [-d][-u]\n"; -char *E_unlk = "%s: unlink(%s): %s\n"; -char *E_open = "%s: open(%s): %s\n"; +const char *USAGE = "%s: USAGE: shlock -f file -p pid [-d][-u]\n"; +const char *E_unlk = "%s: unlink(%s): %s\n"; +const char *E_open = "%s: open(%s): %s\n"; -char *errmsg(); -char *xtmpfile(); +char *xtmpfile(char *file, int pid, int uucpstyle); +int mklock(char *file, int pid, int uucpstyle); +int cklock(char *file, int uucpstyle); + #define dprintf if (Debug) printf -extern int errno; -extern char *rindex(); -extern char *strcpy(); -extern char *strcat(); - -main(ac, av) -int ac; -char *av[]; +int +main(int ac, char *av[]) { register int x; char *file; @@ -114,19 +114,14 @@ char *av[]; exit(mklock(file, pid, uucpstyle) ? LOCK_SET : LOCK_FAIL); } -char * -errmsg(n) -register int n; +static const char * +errmsg(register int n) { - extern int sys_nerr; - extern char *sys_errlist[]; - return((n >= 0 && n < sys_nerr) ? sys_errlist[n] : "unknown error"); } -mklock(file, pid, uucpstyle) -char *file; -int pid; +int +mklock(char *file, int pid, int uucpstyle) { register char *tmp; register int retcode = FALSE; @@ -176,8 +171,8 @@ linkloop: ** Does the PID exist? ** Send null signal to find out. */ -p_exists(pid) -int pid; +static int +p_exists(int pid) { dprintf("%s: process %d is ", Pname, pid); if (pid <= 0) { @@ -217,9 +212,8 @@ int pid; ** */ -cklock(file, uucpstyle) -char *file; -int uucpstyle; +int +cklock(char *file, int uucpstyle) { register int fd = open(file, O_RDONLY); register int len; @@ -252,9 +246,7 @@ int uucpstyle; ** which might not be in the same filesystem. */ char * -xtmpfile(file, pid, uucpstyle) -char *file; -int pid, uucpstyle; +xtmpfile(char *file, int pid, int uucpstyle) { register int fd; register int len; --- xmit/xmitauth.c.orig 1994-12-03 21:54:06 UTC +++ xmit/xmitauth.c @@ -1,7 +1,9 @@ #ifndef lint -static char *rcsid = "$Id: xmitauth.c,v 1.7 1994/12/03 21:53:41 sob Exp sob $"; +static const char *rcsid = "$Id: xmitauth.c,v 1.7 1994/12/03 21:53:41 sob Exp sob $"; #endif #include +#include +#include #include #include "../conf.h" #include "../server/nntp.h" @@ -10,12 +12,11 @@ static char *rcsid = "$Id: xmitauth.c,v 1.7 1994/12/03 #ifdef AUTH extern char Debug; -extern int converse(); FILE *sys; -xmitauth(host) -char *host; +void +xmitauth(char *host) { char remote[64], user[16], pass[16]; char buf[1024]; @@ -37,7 +38,7 @@ char *host; /* malformed entry? */ if (i != 3) { - log(L_NOTICE,"malformed entry in nntp.sys"); + nntpdlog(L_NOTICE,"malformed entry in nntp.sys"); continue; } @@ -48,14 +49,14 @@ char *host; if (feof(sys)) { sprintf(buf,"host %s authinfo not in nntp.sys", host); - log(L_NOTICE, buf); + nntpdlog(L_NOTICE, buf); exit(1); } sprintf(buf,"authinfo user %s", user); if (converse(buf, sizeof(buf)) != NEED_AUTHDATA) { - log(L_NOTICE, buf); + nntpdlog(L_NOTICE, buf); exit(1); } @@ -66,7 +67,7 @@ char *host; sprintf(buf,"authinfo pass %s", pass); if (converse(buf, sizeof(buf)) != OK_AUTH) { - log(L_NOTICE, buf); + nntpdlog(L_NOTICE, buf); exit(1); }