home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.sbin / lpr / lprm / lprm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-19  |  3.8 KB  |  130 lines

  1. /*
  2.  * Copyright (c) 1983 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  */
  33.  
  34. #ifndef lint
  35. char copyright[] =
  36. "@(#) Copyright (c) 1983 Regents of the University of California.\n\
  37.  All rights reserved.\n";
  38. #endif /* not lint */
  39.  
  40. #ifndef lint
  41. static char sccsid[] = "@(#)lprm.c    5.6 (Berkeley) 3/2/91";
  42. #endif /* not lint */
  43.  
  44. /*
  45.  * lprm - remove the current user's spool entry
  46.  *
  47.  * lprm [-] [[job #] [user] ...]
  48.  *
  49.  * Using information in the lock file, lprm will kill the
  50.  * currently active daemon (if necessary), remove the associated files,
  51.  * and startup a new daemon.  Priviledged users may remove anyone's spool
  52.  * entries, otherwise one can only remove their own.
  53.  */
  54.  
  55. #include "lp.h"
  56.  
  57. /*
  58.  * Stuff for handling job specifications
  59.  */
  60. char    *user[MAXUSERS];    /* users to process */
  61. int    users;            /* # of users in user array */
  62. int    requ[MAXREQUESTS];    /* job number of spool entries */
  63. int    requests;        /* # of spool requests */
  64. char    *person;        /* name of person doing lprm */
  65.  
  66. static char    luser[16];    /* buffer for person */
  67.  
  68. main(argc, argv)
  69.     int argc;
  70.     char *argv[];
  71. {
  72.     register char *arg;
  73.     struct passwd *p;
  74.     struct direct **files;
  75.     int nitems, assasinated = 0;
  76.  
  77.     name = argv[0];
  78.     gethostname(host, sizeof(host));
  79.     openlog("lpd", 0, LOG_LPR);
  80.     if ((p = getpwuid(getuid())) == NULL)
  81.         fatal("Who are you?");
  82.     if (strlen(p->pw_name) >= sizeof(luser))
  83.         fatal("Your name is too long");
  84.     strcpy(luser, p->pw_name);
  85.     person = luser;
  86.     while (--argc) {
  87.         if ((arg = *++argv)[0] == '-')
  88.             switch (arg[1]) {
  89.             case 'P':
  90.                 if (arg[2])
  91.                     printer = &arg[2];
  92.                 else if (argc > 1) {
  93.                     argc--;
  94.                     printer = *++argv;
  95.                 }
  96.                 break;
  97.             case '\0':
  98.                 if (!users) {
  99.                     users = -1;
  100.                     break;
  101.                 }
  102.             default:
  103.                 usage();
  104.             }
  105.         else {
  106.             if (users < 0)
  107.                 usage();
  108.             if (isdigit(arg[0])) {
  109.                 if (requests >= MAXREQUESTS)
  110.                     fatal("Too many requests");
  111.                 requ[requests++] = atoi(arg);
  112.             } else {
  113.                 if (users >= MAXUSERS)
  114.                     fatal("Too many users");
  115.                 user[users++] = arg;
  116.             }
  117.         }
  118.     }
  119.     if (printer == NULL && (printer = getenv("PRINTER")) == NULL)
  120.         printer = DEFLP;
  121.  
  122.     rmjob();
  123. }
  124.  
  125. usage()
  126. {
  127.     fprintf(stderr, "usage: lprm [-] [-Pprinter] [[job #] [user] ...]\n");
  128.     exit(2);
  129. }
  130.