[10599] in Athena Bugs

home help back first fref pref prev next nref lref last post

athena/ucb/lpr/printjob.c

daemon@ATHENA.MIT.EDU (brlewis@Athena.MIT.EDU)
Fri Jun 25 13:06:07 1993

From: brlewis@Athena.MIT.EDU
Date: Fri, 25 Jun 93 13:06:00 -0400
To: rel-eng@Athena.MIT.EDU, bugs@Athena.MIT.EDU

Most of this patch is necessary because logname is a function declared
in sys/unistd.h.  The interesting POSIX stuff is toward the end.

*** /tmp/,RCSt1a18673	Fri Jun 25 13:03:01 1993
--- athena/ucb/lpr/printjob.c	Fri Jun 11 17:08:23 1993
***************
*** 23,28 ****
--- 23,37 ----
   *	it does not need to be removed because file locks are dynamic.
   */
  
+ #ifdef POSIX
+ #ifdef hpux
+ #undef _BSD			/* use POSIX wait() */
+ #define POSIX_STRICT
+ #else /* hpux */
+ #define POSIX_LOOSE
+ #endif /* hpux */
+ #endif /* POSIX */
+ 
  #include "lp.h"
  #ifdef _AUX_SOURCE
  #include <sys/termio.h>
***************
*** 91,99 ****
  
  char	fromhost[32];		/* user's host machine */
  #ifdef KERBEROS
! char    logname[ANAME_SZ + INST_SZ + REALM_SZ + 3];
  #else
! char	logname[32];		/* user's login name */
  #endif KERBEROS
  char	jobname[100];		/* job or file name */
  
--- 100,108 ----
  
  char	fromhost[32];		/* user's host machine */
  #ifdef KERBEROS
! char    loginname[ANAME_SZ + INST_SZ + REALM_SZ + 3];
  #else
! char	loginname[32];		/* user's login name */
  #endif KERBEROS
  char	jobname[100];		/* job or file name */
  
***************
*** 401,409 ****
  			continue;
  
  		case 'P':
! 			strncpy(logname, line+1, sizeof(logname)-1);
  			if (RS) {			/* restricted */
! 				if (getpwnam(logname) == (struct passwd *)0) {
  					bombed = NOACCT;
  #ifdef ZEPHYR
  					sendzephyr(line+1, bombed);
--- 410,418 ----
  			continue;
  
  		case 'P':
! 			strncpy(loginname, line+1, sizeof(loginname)-1);
  			if (RS) {			/* restricted */
! 				if (getpwnam(loginname) == (struct passwd *)0) {
  					bombed = NOACCT;
  #ifdef ZEPHYR
  					sendzephyr(line+1, bombed);
***************
*** 495,503 ****
  			case ACCESS:
  				bombed = i;
  #ifdef ZEPHYR
! 				sendzephyr(logname, bombed);
  #else
! 				sendmail(logname, bombed);
  #endif ZEPHYR
  			}
  			title[0] = '\0';
--- 504,512 ----
  			case ACCESS:
  				bombed = i;
  #ifdef ZEPHYR
! 				sendzephyr(loginname, bombed);
  #else
! 				sendmail(loginname, bombed);
  #endif ZEPHYR
  			}
  			title[0] = '\0';
***************
*** 699,705 ****
  	else
  		av[0] = prog;
  	av[n++] = "-n";
! 	av[n++] = logname;
  	av[n++] = "-h";
  	av[n++] = fromhost;
  	av[n++] = cost;
--- 708,714 ----
  	else
  		av[0] = prog;
  	av[n++] = "-n";
! 	av[n++] = loginname;
  	av[n++] = "-h";
  	av[n++] = fromhost;
  	av[n++] = cost;
***************
*** 846,854 ****
  				return(REPRINT);
  			case ACCESS:
  #ifdef ZEPHYR
! 				sendmail(logname, ACCESS);
  #else
! 				sendzephyr(logname, ACCESS);
  #endif ZEPHYR
  			case ERROR:
  				err = ERROR;
--- 855,863 ----
  				return(REPRINT);
  			case ACCESS:
  #ifdef ZEPHYR
! 				sendmail(loginname, ACCESS);
  #else
! 				sendzephyr(loginname, ACCESS);
  #endif ZEPHYR
  			case ERROR:
  				err = ERROR;
***************
*** 996,1002 ****
  		(void) write(ofd, name2, strlen(name2));
  
  		(void) write(ofd, "\n\t\t\t\tUser:    ", 14);
! 		if (logname[0]) (void) write (ofd, logname, strlen(logname));
  		else (void) write(ofd, name1, strlen(name1));
  
  		if (class[0] || fromhost[0]) {
--- 1005,1011 ----
  		(void) write(ofd, name2, strlen(name2));
  
  		(void) write(ofd, "\n\t\t\t\tUser:    ", 14);
! 		if (loginname[0]) (void) write (ofd, loginname, strlen(loginname));
  		else (void) write(ofd, name1, strlen(name1));
  
  		if (class[0] || fromhost[0]) {
***************
*** 1182,1188 ****
  	notice.z_class_inst=ZINSTANCE;
  	notice.z_opcode="";
  	notice.z_sender=ZSENDER;
! 	strcpy(zrecipient,logname);
  	notice.z_recipient=zrecipient;
  	notice.z_default_format=ZDEFAULTFORMAT;
  	notice.z_num_other_fields=0;
--- 1191,1197 ----
  	notice.z_class_inst=ZINSTANCE;
  	notice.z_opcode="";
  	notice.z_sender=ZSENDER;
! 	strcpy(zrecipient,loginname);
  	notice.z_recipient=zrecipient;
  	notice.z_default_format=ZDEFAULTFORMAT;
  	notice.z_num_other_fields=0;
***************
*** 1537,1546 ****
--- 1546,1562 ----
  		exit(1);
  	}
  #else
+ #ifdef POSIX_LOOSE
  	if (ioctl(pfd, TCGETA, (char *)&ttybuf) < 0) {
  		syslog(LOG_ERR, "%s: ioctl(TCGETA): %m", printer);
  		exit(1);
  	}
+ #else /* POSIX_LOOSE */
+ 	if (tcgetattr(pfd, &ttybuf) < 0) {
+ 		syslog(LOG_ERR, "%s: tcgetattr(): %m", printer);
+ 		exit(1);
+ 	}
+ #endif /* POSIX_LOOSE */
  #endif
  	if (BR > 0) {
  		for (bp = bauds; bp->baud; bp++)
***************
*** 1553,1562 ****
--- 1569,1583 ----
  #ifndef POSIX
  		ttybuf.sg_ispeed = ttybuf.sg_ospeed = bp->speed;
  #else
+ #ifdef POSIX_LOOSE
  		ttybuf.c_cflag &= ~CBAUD;
  		ttybuf.c_cflag |= bp->speed;
  		if (XC) ttybuf.c_lflag &= ~XC;
  		if (XS) ttybuf.c_lflag |=  XS;
+ #else /* POSIX_LOOSE */
+ 		cfsetispeed(&ttybuf, bp->speed);
+ 		cfsetospeed(&ttybuf, bp->speed);
+ #endif /* POSIX_LOOSE */
  #endif
  	}
  #ifndef POSIX
***************
*** 1570,1580 ****
--- 1591,1609 ----
  #else
  	ttybuf.c_cflag &= ~FC;
  	ttybuf.c_cflag |= FS;
+ #ifdef POSIX_LOOSE
  	if (ioctl(pfd, TCSETA, (char *)&ttybuf) < 0) {
  	        syslog(LOG_INFO, "SETA failed..");
  		syslog(LOG_ERR, "%s: ioctl(TCSETA): %m", printer);
  		exit(1);
  	}
+ #else /* POSIX_LOOSE */
+ 	if (tcsetattr(pfd, TCSANOW, &ttybuf) < 0) {
+ 		syslog(LOG_INFO, "tcsetattr() failed..");
+ 		syslog(LOG_ERR, "%s: tcsetattr(): %m", printer);
+ 		exit(1);
+ 	}
+ #endif /* POSIX_LOOSE */
  #endif /* POSIX */
  #ifndef POSIX
  	/* AUX does not appear to have old/new line disciplines that 

home help back first fref pref prev next nref lref last post