davec (02/20/83)
Attached are the mods for news2.9 to allow greater than 8 character system names. The first file, gethostnm.c, simulates the gethostname system call of 4.2BSD by looking for '#define sysname ...' lines in /usr/include/whoami.h. The second file is a diff -c of the old and new sources. In addition, the changes to news are ifdef'd by TEK_SYSTEM. Dave Clemans Tektronix ******** gethostnm.c ******** /* * simulate the 4.2a bsd system call by reading /usr/include/whoami.h * and looking for the #define sysname */ #include <stdio.h> #ifdef DEBUG #define HDRFILE "whoami.h" #else #ifndef WHOAMI #define HDRFILE "/usr/include/whoami.h" #else #define HDRFILE WHOAMI #endif #endif gethostname(name, len) char *name; int len; { char buf[BUFSIZ]; char hname[32]; FILE *fd; fd = fopen(HDRFILE, "r"); if (fd == NULL) return(-1); for (;;) { /* each line in the file */ if (fgets(buf, sizeof buf, fd) == NULL) { strncpy(name, "hostunknown", len); goto out; } if (sscanf(buf, "#define sysname \"%[^\"]\"", hname) == 1) { strncpy(name, hname, len); goto out; } } out: fclose(fd); return(0); } ******** news.diff ******** diff -r -c old/src/berknews.c new/src/berknews.c *** old/src/berknews.c Mon Jun 21 14:02:58 1982 --- new/src/berknews.c Wed Dec 8 09:32:19 1982 *************** *** 11,16 #include <ctype.h> #ifndef USG #include <whoami.h> struct utsname { char Sysname[9]; char nodename[9]; --- 11,17 ----- #include <ctype.h> #ifndef USG #include <whoami.h> + #ifndef TEK_SYSTEM struct utsname { char Sysname[9]; char nodename[9]; *************** *** 17,22 char release[9]; char version[9]; }; #else #include <sys/utsname.h> #endif --- 18,24 ----- char release[9]; char version[9]; }; + #endif #else #include <sys/utsname.h> #endif *************** *** 67,72 char *punct; char sysn[20]; int sysnl; struct utsname ubuf; if (argc < 4) { --- 69,75 ----- char *punct; char sysn[20]; int sysnl; + #ifndef TEK_SYSTEM struct utsname ubuf; #endif *************** *** 68,73 char sysn[20]; int sysnl; struct utsname ubuf; if (argc < 4) { fprintf(stderr, "Too few arguments.\n"); --- 71,77 ----- int sysnl; #ifndef TEK_SYSTEM struct utsname ubuf; + #endif if (argc < 4) { fprintf(stderr, "Too few arguments.\n"); *************** *** 81,86 sprintf(buffer, "%s - -m%s %s", argv[1], argv[2], argv[3]); #endif out = popen(buffer, "w"); uname(&ubuf); strcpy(sysn, ubuf.nodename); strcat(sysn, "!"); --- 85,91 ----- sprintf(buffer, "%s - -m%s %s", argv[1], argv[2], argv[3]); #endif out = popen(buffer, "w"); + #ifndef TEK_SYSTEM uname(&ubuf); strcpy(sysn, ubuf.nodename); #else *************** *** 83,88 out = popen(buffer, "w"); uname(&ubuf); strcpy(sysn, ubuf.nodename); strcat(sysn, "!"); sysnl = strlen(sysn); --- 88,96 ----- #ifndef TEK_SYSTEM uname(&ubuf); strcpy(sysn, ubuf.nodename); + #else + gethostname(sysn, sizeof sysn); + #endif strcat(sysn, "!"); sysnl = strlen(sysn); diff -r -c old/src/defs.h new/src/defs.h *** old/src/defs.h Fri Jul 16 11:34:52 1982 --- new/src/defs.h Wed Dec 8 10:05:49 1982 *************** *** 47,52 #define PATHLEN 512 /* length of longest source string */ #define DATELEN 35 /* length of longest allowed date string */ #define NAMELEN 15 /* length of longest possible file name */ #define SNLN 8 /* max significant characters in sysname */ #define PROTO 'A' /* old protocol name */ #define NETCHRS "!:.@^" /* Punct. chars used for various networks */ --- 47,53 ----- #define PATHLEN 512 /* length of longest source string */ #define DATELEN 35 /* length of longest allowed date string */ #define NAMELEN 15 /* length of longest possible file name */ + #ifndef TEK_SYSTEM #define SNLN 8 /* max significant characters in sysname */ #else #define SNLN 32 /* max significant characters in sysname */ *************** *** 48,53 #define DATELEN 35 /* length of longest allowed date string */ #define NAMELEN 15 /* length of longest possible file name */ #define SNLN 8 /* max significant characters in sysname */ #define PROTO 'A' /* old protocol name */ #define NETCHRS "!:.@^" /* Punct. chars used for various networks */ #define NGLN 14 /* max significant characters in newsgroup name */ --- 49,57 ----- #define NAMELEN 15 /* length of longest possible file name */ #ifndef TEK_SYSTEM #define SNLN 8 /* max significant characters in sysname */ + #else + #define SNLN 32 /* max significant characters in sysname */ + #endif #define PROTO 'A' /* old protocol name */ #define NETCHRS "!:.@^" /* Punct. chars used for various networks */ #define NGLN 14 /* max significant characters in newsgroup name */ diff -r -c old/src/inews.c new/src/inews.c *** old/src/inews.c Sat Jun 26 20:27:31 1982 --- new/src/inews.c Wed Dec 8 09:35:04 1982 *************** *** 62,67 struct passwd *pw; /* struct for pw lookup */ struct group *gp; /* struct for group lookup */ struct srec srec; /* struct for sys file lookup */ struct utsname ubuf; register int i; --- 62,68 ----- struct passwd *pw; /* struct for pw lookup */ struct group *gp; /* struct for group lookup */ struct srec srec; /* struct for sys file lookup */ + #ifndef TEK_SYSTEM struct utsname ubuf; #endif register int i; *************** *** 63,68 struct group *gp; /* struct for group lookup */ struct srec srec; /* struct for sys file lookup */ struct utsname ubuf; register int i; /* uuxqt doesn't close all it's files */ --- 64,70 ----- struct srec srec; /* struct for sys file lookup */ #ifndef TEK_SYSTEM struct utsname ubuf; + #endif register int i; /* uuxqt doesn't close all it's files */ *************** *** 82,87 state = OPTION; header.title[0] = header.nbuf[0] = filename[0] = '\0'; uname(&ubuf); strcpy(SYSNAME, ubuf.nodename); SYSNAME[SNLN] = '\0'; --- 84,90 ----- state = OPTION; header.title[0] = header.nbuf[0] = filename[0] = '\0'; + #ifndef TEK_SYSTEM uname(&ubuf); strcpy(SYSNAME, ubuf.nodename); #else *************** *** 84,89 header.title[0] = header.nbuf[0] = filename[0] = '\0'; uname(&ubuf); strcpy(SYSNAME, ubuf.nodename); SYSNAME[SNLN] = '\0'; setbuf(stdout, SYSBUF); --- 87,95 ----- #ifndef TEK_SYSTEM uname(&ubuf); strcpy(SYSNAME, ubuf.nodename); + #else + gethostname(SYSNAME, sizeof SYSNAME); + #endif SYSNAME[SNLN] = '\0'; setbuf(stdout, SYSBUF); diff -r -c old/src/params.h new/src/params.h *** old/src/params.h Mon Jun 21 14:03:14 1982 --- new/src/params.h Wed Dec 8 10:11:46 1982 *************** *** 13,18 #include <ctype.h> #ifndef USG struct utsname { char sysname[9]; char nodename[9]; --- 13,19 ----- #include <ctype.h> #ifndef USG + #ifndef TEK_SYSTEM struct utsname { char sysname[9]; char nodename[9]; *************** *** 19,24 char release[9]; char version[9]; }; #include <sys/timeb.h> #else #include <sys/utsname.h> --- 20,26 ----- char release[9]; char version[9]; }; + #endif #include <sys/timeb.h> #else #include <sys/utsname.h> *************** *** 48,53 extern char bfr[LBUFLEN],username[BUFLEN],userhome[BUFLEN]; extern char *SPOOL,*LIB,*CAND; extern char *SUBFILE,*NGFILE,*ACTIVE; extern char SYSNAME[],*NEWSU,*NEWSG; extern char *LOCKFILE,*SEQFILE; #ifndef SHELL --- 50,56 ----- extern char bfr[LBUFLEN],username[BUFLEN],userhome[BUFLEN]; extern char *SPOOL,*LIB,*CAND; extern char *SUBFILE,*NGFILE,*ACTIVE; + #ifndef TEK_SYSTEM extern char SYSNAME[],*NEWSU,*NEWSG; #else extern char *NEWSU,*NEWSG; *************** *** 49,54 extern char *SPOOL,*LIB,*CAND; extern char *SUBFILE,*NGFILE,*ACTIVE; extern char SYSNAME[],*NEWSU,*NEWSG; extern char *LOCKFILE,*SEQFILE; #ifndef SHELL extern char *SHELL; --- 52,61 ----- extern char *SUBFILE,*NGFILE,*ACTIVE; #ifndef TEK_SYSTEM extern char SYSNAME[],*NEWSU,*NEWSG; + #else + extern char *NEWSU,*NEWSG; + char SYSNAME[BUFLEN]; + #endif extern char *LOCKFILE,*SEQFILE; #ifndef SHELL extern char *SHELL; diff -r -c old/src/readnews.c new/src/readnews.c *** old/src/readnews.c Mon Jun 21 14:03:15 1982 --- new/src/readnews.c Wed Dec 8 09:39:13 1982 *************** *** 34,39 struct passwd *pw; struct group *gp; int i, optflag = FALSE, space = FALSE; struct utsname ubuf; char *myrc; --- 34,40 ----- struct passwd *pw; struct group *gp; int i, optflag = FALSE, space = FALSE; + #ifndef TEK_SYSTEM struct utsname ubuf; #endif char *myrc; *************** *** 35,40 struct group *gp; int i, optflag = FALSE, space = FALSE; struct utsname ubuf; char *myrc; --- 36,42 ----- int i, optflag = FALSE, space = FALSE; #ifndef TEK_SYSTEM struct utsname ubuf; + #endif char *myrc; *************** *** 43,48 mode = UNKNOWN; header.title[0] = header.nbuf[0] = '\0'; titlebuf[0] = coptbuf[0] = datebuf[0] = '\0'; uname(&ubuf); strcpy(SYSNAME, ubuf.nodename); SYSNAME[SNLN] = '\0'; --- 45,51 ----- mode = UNKNOWN; header.title[0] = header.nbuf[0] = '\0'; titlebuf[0] = coptbuf[0] = datebuf[0] = '\0'; + #ifndef TEK_SYSTEM uname(&ubuf); strcpy(SYSNAME, ubuf.nodename); #else *************** *** 45,50 titlebuf[0] = coptbuf[0] = datebuf[0] = '\0'; uname(&ubuf); strcpy(SYSNAME, ubuf.nodename); SYSNAME[SNLN] = '\0'; setbuf(stdout, SYSBUF); --- 48,56 ----- #ifndef TEK_SYSTEM uname(&ubuf); strcpy(SYSNAME, ubuf.nodename); + #else + gethostname(SYSNAME, sizeof SYSNAME); + #endif SYSNAME[SNLN] = '\0'; setbuf(stdout, SYSBUF); diff -r -c old/src/readr.c new/src/readr.c *** old/src/readr.c Mon Jun 21 14:03:16 1982 --- new/src/readr.c Wed Dec 8 09:42:31 1982 *************** *** 1007,1012 int notauthor; { FILE *inews; struct utsname me; char *p, *q; char distgroup[64]; --- 1007,1013 ----- int notauthor; { FILE *inews; + #ifndef TEK_SYSTEM struct utsname me; #else char SYSNAME[32]; *************** *** 1008,1013 { FILE *inews; struct utsname me; char *p, *q; char distgroup[64]; int pid; --- 1009,1017 ----- FILE *inews; #ifndef TEK_SYSTEM struct utsname me; + #else + char SYSNAME[32]; + #endif char *p, *q; char distgroup[64]; int pid; *************** *** 1016,1021 pid = fork(); if (pid > 0) return 0; uname(&me); strcpy(distgroup, hp->nbuf); p = index(distgroup, '.'); --- 1020,1026 ----- pid = fork(); if (pid > 0) return 0; + #ifndef TEK_SYSTEM uname(&me); #else gethostname(SYSNAME, sizeof SYSNAME); *************** *** 1017,1022 if (pid > 0) return 0; uname(&me); strcpy(distgroup, hp->nbuf); p = index(distgroup, '.'); q = index(p+1, '.'); --- 1022,1030 ----- return 0; #ifndef TEK_SYSTEM uname(&me); + #else + gethostname(SYSNAME, sizeof SYSNAME); + #endif strcpy(distgroup, hp->nbuf); p = index(distgroup, '.'); q = index(p+1, '.'); *************** *** 1021,1026 p = index(distgroup, '.'); q = index(p+1, '.'); if (notauthor) sprintf(distgroup, "to.%s.ctl", me.nodename); else if (p == 0) sprintf(distgroup, "%s.msg.ctl", distgroup); --- 1029,1035 ----- p = index(distgroup, '.'); q = index(p+1, '.'); if (notauthor) + #ifndef TEK_SYSTEM sprintf(distgroup, "to.%s.ctl", me.nodename); #else sprintf(distgroup, "to.%s.ctl", SYSNAME); *************** *** 1022,1027 q = index(p+1, '.'); if (notauthor) sprintf(distgroup, "to.%s.ctl", me.nodename); else if (p == 0) sprintf(distgroup, "%s.msg.ctl", distgroup); else if (q == 0) --- 1031,1039 ----- if (notauthor) #ifndef TEK_SYSTEM sprintf(distgroup, "to.%s.ctl", me.nodename); + #else + sprintf(distgroup, "to.%s.ctl", SYSNAME); + #endif else if (p == 0) sprintf(distgroup, "%s.msg.ctl", distgroup); else if (q == 0) diff -r -c old/src/sendnews.c new/src/sendnews.c *** old/src/sendnews.c Mon Jun 21 14:03:18 1982 --- new/src/sendnews.c Wed Dec 15 17:35:25 1982 *************** *** 7,12 #include <stdio.h> #include <ctype.h> #ifndef USG struct utsname { char Sysname[9]; char nodename[9]; --- 7,13 ----- #include <stdio.h> #include <ctype.h> #ifndef USG + #ifndef TEK_SYSTEM struct utsname { char Sysname[9]; char nodename[9]; *************** *** 13,18 char release[9]; char version[9]; }; #else #include <sys/utsname.h> #endif --- 14,20 ----- char release[9]; char version[9]; }; + #endif #else #include <sys/utsname.h> #endif *************** *** 34,39 char sysn[20]; int sysnl; char *bnkludge; struct utsname ubuf; while (**(++argv) == '-') { --- 36,42 ----- char sysn[20]; int sysnl; char *bnkludge; + #ifndef TEK_SYSTEM struct utsname ubuf; #endif *************** *** 35,40 int sysnl; char *bnkludge; struct utsname ubuf; while (**(++argv) == '-') { if (*++*argv == 'o') --- 38,44 ----- char *bnkludge; #ifndef TEK_SYSTEM struct utsname ubuf; + #endif while (**(++argv) == '-') { if (*++*argv == 'o') *************** *** 58,63 sprintf(buffer, "mail %s", *argv); #endif out = popen(buffer, "w"); uname(&ubuf); strcpy(sysn, ubuf.nodename); strcat(sysn, "!"); --- 62,68 ----- sprintf(buffer, "mail %s", *argv); #endif out = popen(buffer, "w"); + #ifndef TEK_SYSTEM uname(&ubuf); strcpy(sysn, ubuf.nodename); #else *************** *** 60,65 out = popen(buffer, "w"); uname(&ubuf); strcpy(sysn, ubuf.nodename); strcat(sysn, "!"); sysnl = strlen(sysn); bnkludge = ""; --- 65,73 ----- #ifndef TEK_SYSTEM uname(&ubuf); strcpy(sysn, ubuf.nodename); + #else + gethostname(sysn, sizeof sysn); + #endif strcat(sysn, "!"); sysnl = strlen(sysn); bnkludge = ""; *************** *** 75,80 #define HOSTNAME "OuterSpace" #endif /* Standard mail prelude to make the formatters happy */ fprintf(out, "To: %s\n", *argv); fprintf(out, "Subject: network news article\n"); --- 83,90 ----- #define HOSTNAME "OuterSpace" #endif + #ifdef notdef + /* Not needed at tek */ /* Standard mail prelude to make the formatters happy */ fprintf(out, "To: %s\n", *argv); fprintf(out, "Subject: network news article\n"); *************** *** 79,84 fprintf(out, "To: %s\n", *argv); fprintf(out, "Subject: network news article\n"); fprintf(out, "\n"); while (fgets(buffer, sizeof buffer, stdin)) { if (fromline()) { --- 89,95 ----- fprintf(out, "To: %s\n", *argv); fprintf(out, "Subject: network news article\n"); fprintf(out, "\n"); + #endif while (fgets(buffer, sizeof buffer, stdin)) { if (fromline()) { *************** *** 115,120 punct = &buffer[5]; else punct = buffer; fiddle(punct); } } --- 126,133 ----- punct = &buffer[5]; else punct = buffer; + #ifdef notdef + /* no need for this at tek */ fiddle(punct); #endif } *************** *** 116,121 else punct = buffer; fiddle(punct); } } } --- 129,135 ----- #ifdef notdef /* no need for this at tek */ fiddle(punct); + #endif } } } *************** *** 210,215 strcpy(berkname, "G"); else if (eq(uucpname, "ucbcad")) strcpy(berkname, "CAD"); else strcpy(berkname, "UNKNOWN"); sprintf(buf, "%s:%s", berkname, rest); --- 224,231 ----- strcpy(berkname, "G"); else if (eq(uucpname, "ucbcad")) strcpy(berkname, "CAD"); + else if (eq(uucpname, "tektronix")) + strcpy(berkname, "Tektronix"); else strcpy(berkname, "UNKNOWN"); sprintf(buf, "%s @ %s", rest, berkname); *************** *** 212,218 strcpy(berkname, "CAD"); else strcpy(berkname, "UNKNOWN"); ! sprintf(buf, "%s:%s", berkname, rest); #ifdef debug printf("berkname='%s', buf='%s'\n", berkname, buf); #endif --- 228,234 ----- strcpy(berkname, "Tektronix"); else strcpy(berkname, "UNKNOWN"); ! sprintf(buf, "%s @ %s", rest, berkname); #ifdef debug printf("berkname='%s', buf='%s'\n", berkname, buf); #endif diff -r -c old/src/uname.c new/src/uname.c *** old/src/uname.c Mon Jun 21 14:03:18 1982 --- new/src/uname.c Wed Dec 8 09:48:34 1982 *************** *** 11,16 #include "params.h" #define HDRFILE "/usr/include/whoami.h" uname(uptr) struct utsname *uptr; --- 11,17 ----- #include "params.h" #define HDRFILE "/usr/include/whoami.h" + #ifndef TEK_SYSTEM uname(uptr) struct utsname *uptr; *************** *** 34,36 } } } --- 35,38 ----- } } } + #endif