common code for checking if rm==localhost
[unix-history] / usr / src / usr.sbin / lpr / common_source / displayq.c
index b7d3ad0..e08c274 100644 (file)
@@ -1,18 +1,30 @@
 /*
  * Copyright (c) 1983 Regents of the University of California.
 /*
  * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)displayq.c 5.1 (Berkeley) 6/6/85";
-#endif not lint
+static char sccsid[] = "@(#)displayq.c 5.11 (Berkeley) %G%";
+#endif /* not lint */
 
 /*
  * Routines to display the state of the queue.
  */
 
 #include "lp.h"
 
 /*
  * Routines to display the state of the queue.
  */
 
 #include "lp.h"
+#include "pathnames.h"
 
 #define JOBCOL 40              /* column for job # in -l format */
 #define OWNCOL 7               /* start of Owner column in normal */
 
 #define JOBCOL 40              /* column for job # in -l format */
 #define OWNCOL 7               /* start of Owner column in normal */
@@ -33,7 +45,6 @@ int   rank;           /* order to be printed (-1=none, 0=active) */
 long   totsize;        /* total print job size in bytes */
 int    first;          /* first file in ``files'' column? */
 int    col;            /* column on screen */
 long   totsize;        /* total print job size in bytes */
 int    first;          /* first file in ``files'' column? */
 int    col;            /* column on screen */
-int    sendtorem;      /* are we sending to a remote? */
 char   file[132];      /* print file name */
 
 char   *head0 = "Rank   Owner      Job  Files";
 char   file[132];      /* print file name */
 
 char   *head0 = "Rank   Owner      Job  Files";
@@ -47,9 +58,11 @@ displayq(format)
 {
        register struct queue *q;
        register int i, nitems, fd;
 {
        register struct queue *q;
        register int i, nitems, fd;
+       register char   *cp;
        struct queue **queue;
        struct stat statb;
        FILE *fp;
        struct queue **queue;
        struct stat statb;
        FILE *fp;
+       char c;
 
        lflag = format;
        totsize = 0;
 
        lflag = format;
        totsize = 0;
@@ -60,86 +73,21 @@ displayq(format)
        else if (i == 0)
                fatal("unknown printer");
        if ((LP = pgetstr("lp", &bp)) == NULL)
        else if (i == 0)
                fatal("unknown printer");
        if ((LP = pgetstr("lp", &bp)) == NULL)
-               LP = DEFDEVLP;
+               LP = _PATH_DEFDEVLP;
        if ((RP = pgetstr("rp", &bp)) == NULL)
                RP = DEFLP;
        if ((SD = pgetstr("sd", &bp)) == NULL)
        if ((RP = pgetstr("rp", &bp)) == NULL)
                RP = DEFLP;
        if ((SD = pgetstr("sd", &bp)) == NULL)
-               SD = DEFSPOOL;
+               SD = _PATH_DEFSPOOL;
        if ((LO = pgetstr("lo", &bp)) == NULL)
                LO = DEFLOCK;
        if ((ST = pgetstr("st", &bp)) == NULL)
                ST = DEFSTAT;
        RM = pgetstr("rm", &bp);
        if ((LO = pgetstr("lo", &bp)) == NULL)
                LO = DEFLOCK;
        if ((ST = pgetstr("st", &bp)) == NULL)
                ST = DEFSTAT;
        RM = pgetstr("rm", &bp);
+       if (cp = checkremote())
+               printf("Warning: %s\n", cp);
 
        /*
 
        /*
-        * Figure out whether the local machine is the same as the remote 
-        * machine entry (if it exists).  If not, then ignore the local
-        * queue information.
-        */
-        if (RM != (char *) NULL) {
-               char name[256];
-               struct hostent *hp;
-
-               /* get the standard network name of the local host */
-               gethostname(name, sizeof(name));
-               name[sizeof(name)-1] = '\0';
-               hp = gethostbyname(name);
-               if (hp == (struct hostent *) NULL) {
-                   printf("unable to get network name for local machine %s\n",
-                       name);
-                   goto localcheck_done;
-               } else strcpy(name, hp->h_name);
-
-               /* get the network standard name of RM */
-               hp = gethostbyname(RM);
-               if (hp == (struct hostent *) NULL) {
-                   printf("unable to get hostname for remote machine %s\n",
-                       RM);
-                   goto localcheck_done;
-               }
-
-               /* if printer is not on local machine, ignore LP */
-               if (strcmp(name, hp->h_name) != 0) *LP = '\0';
-       }
-localcheck_done:
-
-       /*
-        * If there is no local printer, then print the queue on
-        * the remote machine and then what's in the queue here.
-        * Note that a file in transit may not show up in either queue.
-        */
-       if (*LP == '\0') {
-               register char *cp;
-               char c;
-
-               sendtorem++;
-               (void) sprintf(line, "%c%s", format + '\3', RP);
-               cp = line;
-               for (i = 0; i < requests; i++) {
-                       cp += strlen(cp);
-                       (void) sprintf(cp, " %d", requ[i]);
-               }
-               for (i = 0; i < users; i++) {
-                       cp += strlen(cp);
-                       *cp++ = ' ';
-                       strcpy(cp, user[i]);
-               }
-               strcat(line, "\n");
-               fd = getport(RM);
-               if (fd < 0) {
-                       if (from != host)
-                               printf("%s: ", host);
-                       printf("connection to %s is down\n", RM);
-               } else {
-                       i = strlen(line);
-                       if (write(fd, line, i) != i)
-                               fatal("Lost connection");
-                       while ((i = read(fd, line, sizeof(line))) > 0)
-                               (void) fwrite(line, 1, i, stdout);
-                       (void) close(fd);
-               }
-       }
-       /*
+        * Print out local queue
         * Find all the control files in the spooling directory
         */
        if (chdir(SD) < 0)
         * Find all the control files in the spooling directory
         */
        if (chdir(SD) < 0)
@@ -147,8 +95,6 @@ localcheck_done:
        if ((nitems = getq(&queue)) < 0)
                fatal("cannot examine spooling area\n");
        if (stat(LO, &statb) >= 0) {
        if ((nitems = getq(&queue)) < 0)
                fatal("cannot examine spooling area\n");
        if (stat(LO, &statb) >= 0) {
-               if ((statb.st_mode & 0110) && sendtorem)
-                       printf("\n");
                if (statb.st_mode & 0100) {
                        if (sendtorem)
                                printf("%s: ", host);
                if (statb.st_mode & 0100) {
                        if (sendtorem)
                                printf("%s: ", host);
@@ -168,60 +114,95 @@ localcheck_done:
                        printf("Warning: %s queue is turned off\n", printer);
                }
        }
                        printf("Warning: %s queue is turned off\n", printer);
                }
        }
-       if (nitems == 0) {
-               if (!sendtorem)
-                       printf("no entries\n");
-               return(0);
-       }
-       fp = fopen(LO, "r");
-       if (fp == NULL)
-               warn();
-       else {
-               register char *cp;
 
 
-               /* get daemon pid */
-               cp = current;
-               while ((*cp = getc(fp)) != EOF && *cp != '\n')
-                       cp++;
-               *cp = '\0';
-               i = atoi(current);
-               if (i <= 0 || kill(i, 0) < 0)
+       if (nitems) {
+               fp = fopen(LO, "r");
+               if (fp == NULL)
                        warn();
                else {
                        warn();
                else {
-                       /* read current file name */
+                       register char *cp;
+
+                       /* get daemon pid */
                        cp = current;
                        while ((*cp = getc(fp)) != EOF && *cp != '\n')
                                cp++;
                        *cp = '\0';
                        cp = current;
                        while ((*cp = getc(fp)) != EOF && *cp != '\n')
                                cp++;
                        *cp = '\0';
-                       /*
-                        * Print the status file.
-                        */
-                       if (sendtorem)
-                               printf("\n%s: ", host);
-                       fd = open(ST, O_RDONLY);
-                       if (fd >= 0) {
-                               (void) flock(fd, LOCK_SH);
-                               while ((i = read(fd, line, sizeof(line))) > 0)
-                                       (void) fwrite(line, 1, i, stdout);
-                               (void) close(fd);       /* unlocks as well */
-                       } else
-                               putchar('\n');
+                       i = atoi(current);
+                       if (i <= 0 || kill(i, 0) < 0)
+                               warn();
+                       else {
+                               /* read current file name */
+                               cp = current;
+                               while ((*cp = getc(fp)) != EOF && *cp != '\n')
+                                       cp++;
+                               *cp = '\0';
+                               /*
+                                * Print the status file.
+                                */
+                               if (sendtorem)
+                                       printf("%s: ", host);
+                               fd = open(ST, O_RDONLY);
+                               if (fd >= 0) {
+                                       (void) flock(fd, LOCK_SH);
+                                       while ((i = read(fd, line, sizeof(line))) > 0)
+                                               (void) fwrite(line, 1, i, stdout);
+                                       (void) close(fd);       /* unlocks as well */
+                               } else
+                                       putchar('\n');
+                       }
+                       (void) fclose(fp);
+               }
+               /*
+                * Now, examine the control files and print out the jobs to
+                * be done for each user.
+                */
+               if (!lflag)
+                       header();
+               for (i = 0; i < nitems; i++) {
+                       q = queue[i];
+                       inform(q->q_name);
+                       free(q);
                }
                }
-               (void) fclose(fp);
+               free(queue);
        }
        }
+       if (!sendtorem) {
+               if (nitems == 0)
+                       puts("no entries");
+               return;
+       }
+
        /*
        /*
-        * Now, examine the control files and print out the jobs to
-        * be done for each user.
+        * Print foreign queue
+        * Note that a file in transit may show up in either queue.
         */
         */
-       if (!lflag)
-               header();
-       for (i = 0; i < nitems; i++) {
-               q = queue[i];
-               inform(q->q_name);
-               free(q);
+       if (nitems)
+               putchar('\n');
+       (void) sprintf(line, "%c%s", format + '\3', RP);
+       cp = line;
+       for (i = 0; i < requests; i++) {
+               cp += strlen(cp);
+               (void) sprintf(cp, " %d", requ[i]);
+       }
+       for (i = 0; i < users; i++) {
+               cp += strlen(cp);
+               *cp++ = ' ';
+               (void) strcpy(cp, user[i]);
+       }
+       strcat(line, "\n");
+       fd = getport(RM);
+       if (fd < 0) {
+               if (from != host)
+                       printf("%s: ", host);
+               printf("connection to %s is down\n", RM);
+       }
+       else {
+               i = strlen(line);
+               if (write(fd, line, i) != i)
+                       fatal("Lost connection");
+               while ((i = read(fd, line, sizeof(line))) > 0)
+                       (void) fwrite(line, 1, i, stdout);
+               (void) close(fd);
        }
        }
-       free(queue);
-       return(nitems-garbage);
 }
 
 /*
 }
 
 /*
@@ -231,7 +212,7 @@ warn()
 {
        if (sendtorem)
                printf("\n%s: ", host);
 {
        if (sendtorem)
                printf("\n%s: ", host);
-       printf("Warning: no daemon present\n");
+       puts("Warning: no daemon present");
        current[0] = '\0';
 }
 
        current[0] = '\0';
 }
 
@@ -291,7 +272,7 @@ inform(cf)
                        if (line[0] < 'a' || line[0] > 'z')
                                continue;
                        if (j == 0 || strcmp(file, line+1) != 0)
                        if (line[0] < 'a' || line[0] > 'z')
                                continue;
                        if (j == 0 || strcmp(file, line+1) != 0)
-                               strcpy(file, line+1);
+                               (void) strcpy(file, line+1);
                        j++;
                        continue;
                case 'N':
                        j++;
                        continue;
                case 'N':
@@ -303,7 +284,7 @@ inform(cf)
        fclose(cfp);
        if (!lflag) {
                blankfill(SIZCOL);
        fclose(cfp);
        if (!lflag) {
                blankfill(SIZCOL);
-               printf("%D bytes\n", totsize);
+               printf("%ld bytes\n", totsize);
                totsize = 0;
        }
 }
                totsize = 0;
        }
 }
@@ -399,7 +380,7 @@ ldump(nfile, file, copies)
        else
                printf("%-32s", nfile);
        if (*file && !stat(file, &lbuf))
        else
                printf("%-32s", nfile);
        if (*file && !stat(file, &lbuf))
-               printf(" %D bytes", lbuf.st_size);
+               printf(" %ld bytes", lbuf.st_size);
        else
                printf(" ??? bytes");
        putchar('\n');
        else
                printf(" ??? bytes");
        putchar('\n');
@@ -421,7 +402,7 @@ prank(n)
                col += 6;
                return;
        }
                col += 6;
                return;
        }
-       if ((n/10) == 1)
+       if ((n/10)%10 == 1)
                (void) sprintf(line, "%dth", n);
        else
                (void) sprintf(line, "%d%s", n, r[n%10]);
                (void) sprintf(line, "%dth", n);
        else
                (void) sprintf(line, "%d%s", n, r[n%10]);