[10599] in Athena Bugs
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