home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / N / TCPIP / NETKIT-B.05 / NETKIT-B / NetKit-B-0.05 / lpr / lprm / lprm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-17  |  3.9 KB  |  131 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[] = "from: @(#)lprm.c    5.6 (Berkeley) 3/2/91";*/
  42. static char rcsid[] = "$Id: lprm.c,v 1.2 1993/08/01 17:58:36 mycroft Exp $";
  43. #endif /* not lint */
  44.  
  45. /*
  46.  * lprm - remove the current user's spool entry
  47.  *
  48.  * lprm [-] [[job #] [user] ...]
  49.  *
  50.  * Using information in the lock file, lprm will kill the
  51.  * currently active daemon (if necessary), remove the associated files,
  52.  * and startup a new daemon.  Priviledged users may remove anyone's spool
  53.  * entries, otherwise one can only remove their own.
  54.  */
  55.  
  56. #include "lp.h"
  57.  
  58. /*
  59.  * Stuff for handling job specifications
  60.  */
  61. char    *user[MAXUSERS];    /* users to process */
  62. int    users;            /* # of users in user array */
  63. int    requ[MAXREQUESTS];    /* job number of spool entries */
  64. int    requests;        /* # of spool requests */
  65. char    *person;        /* name of person doing lprm */
  66.  
  67. static char    luser[16];    /* buffer for person */
  68.  
  69. main(argc, argv)
  70.     int argc;
  71.     char *argv[];
  72. {
  73.     register char *arg;
  74.     struct passwd *p;
  75.     struct direct **files;
  76.     int nitems, assasinated = 0;
  77.  
  78.     name = argv[0];
  79.     gethostname(host, sizeof(host));
  80.     openlog("lpd", 0, LOG_LPR);
  81.     if ((p = getpwuid(getuid())) == NULL)
  82.         fatal("Who are you?");
  83.     if (strlen(p->pw_name) >= sizeof(luser))
  84.         fatal("Your name is too long");
  85.     strcpy(luser, p->pw_name);
  86.     person = luser;
  87.     while (--argc) {
  88.         if ((arg = *++argv)[0] == '-')
  89.             switch (arg[1]) {
  90.             case 'P':
  91.                 if (arg[2])
  92.                     printer = &arg[2];
  93.                 else if (argc > 1) {
  94.                     argc--;
  95.                     printer = *++argv;
  96.                 }
  97.                 break;
  98.             case '\0':
  99.                 if (!users) {
  100.                     users = -1;
  101.                     break;
  102.                 }
  103.             default:
  104.                 usage();
  105.             }
  106.         else {
  107.             if (users < 0)
  108.                 usage();
  109.             if (isdigit(arg[0])) {
  110.                 if (requests >= MAXREQUESTS)
  111.                     fatal("Too many requests");
  112.                 requ[requests++] = atoi(arg);
  113.             } else {
  114.                 if (users >= MAXUSERS)
  115.                     fatal("Too many users");
  116.                 user[users++] = arg;
  117.             }
  118.         }
  119.     }
  120.     if (printer == NULL && (printer = getenv("PRINTER")) == NULL)
  121.         printer = DEFLP;
  122.  
  123.     rmjob();
  124. }
  125.  
  126. usage()
  127. {
  128.     fprintf(stderr, "usage: lprm [-] [-Pprinter] [[job #] [user] ...]\n");
  129.     exit(2);
  130. }
  131.