[net.sources] News mods for long names

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