122433Sdist /* 256254Selan * Copyright (c) 1983 The Regents of the University of California. 334203Sbostic * All rights reserved. 434203Sbostic * 556129Selan * 656254Selan * %sccs.include.redist.c% 722433Sdist */ 822433Sdist 913954Ssam #ifndef lint 10*56268Selan static char copyright[] = 1156254Selan "@(#) Copyright (c) 1983 The Regents of the University of California.\n\ 1256254Selan All rights reserved."; 1334203Sbostic #endif /* not lint */ 1413954Ssam 1522433Sdist #ifndef lint 16*56268Selan static char sccsid[] = "@(#)lprm.c 5.10 (Berkeley) 09/16/92"; 1734203Sbostic #endif /* not lint */ 1822433Sdist 1912110Sralph /* 2012110Sralph * lprm - remove the current user's spool entry 2112110Sralph * 2212110Sralph * lprm [-] [[job #] [user] ...] 2312110Sralph * 2412110Sralph * Using information in the lock file, lprm will kill the 2512110Sralph * currently active daemon (if necessary), remove the associated files, 2612110Sralph * and startup a new daemon. Priviledged users may remove anyone's spool 2712110Sralph * entries, otherwise one can only remove their own. 2812110Sralph */ 2912110Sralph 3055477Sbostic #include <sys/param.h> 3155477Sbostic 3255477Sbostic #include <syslog.h> 3355477Sbostic #include <dirent.h> 3455477Sbostic #include <pwd.h> 3555477Sbostic #include <unistd.h> 3655477Sbostic #include <stdlib.h> 3755477Sbostic #include <stdio.h> 3855477Sbostic #include <string.h> 3955477Sbostic #include <ctype.h> 4012110Sralph #include "lp.h" 4155477Sbostic #include "lp.local.h" 4212110Sralph 4312110Sralph /* 4412110Sralph * Stuff for handling job specifications 4512110Sralph */ 4656129Selan char *person; /* name of person doing lprm */ 4756129Selan int requ[MAXREQUESTS]; /* job number of spool entries */ 4856129Selan int requests; /* # of spool requests */ 4912877Sralph char *user[MAXUSERS]; /* users to process */ 5056129Selan int users; /* # of users in user array */ 5112110Sralph 5212877Sralph static char luser[16]; /* buffer for person */ 5312110Sralph 5455477Sbostic void usage __P((void)); 5555477Sbostic 5655477Sbostic int 5712110Sralph main(argc, argv) 5846916Sbostic int argc; 5912110Sralph char *argv[]; 6012110Sralph { 6112110Sralph register char *arg; 6212110Sralph struct passwd *p; 6312110Sralph 6412110Sralph name = argv[0]; 6512110Sralph gethostname(host, sizeof(host)); 6625496Seric openlog("lpd", 0, LOG_LPR); 6712110Sralph if ((p = getpwuid(getuid())) == NULL) 6812110Sralph fatal("Who are you?"); 6912110Sralph if (strlen(p->pw_name) >= sizeof(luser)) 7012110Sralph fatal("Your name is too long"); 7112110Sralph strcpy(luser, p->pw_name); 7212110Sralph person = luser; 7312110Sralph while (--argc) { 7412110Sralph if ((arg = *++argv)[0] == '-') 7512110Sralph switch (arg[1]) { 7612110Sralph case 'P': 7712730Sralph if (arg[2]) 7812730Sralph printer = &arg[2]; 7912730Sralph else if (argc > 1) { 8012730Sralph argc--; 8112730Sralph printer = *++argv; 8212730Sralph } 8312110Sralph break; 8412110Sralph case '\0': 8512110Sralph if (!users) { 8612110Sralph users = -1; 8712110Sralph break; 8812110Sralph } 8912110Sralph default: 9012110Sralph usage(); 9112110Sralph } 9212110Sralph else { 9312110Sralph if (users < 0) 9412110Sralph usage(); 9512110Sralph if (isdigit(arg[0])) { 9612110Sralph if (requests >= MAXREQUESTS) 9712110Sralph fatal("Too many requests"); 9812110Sralph requ[requests++] = atoi(arg); 9912110Sralph } else { 10012110Sralph if (users >= MAXUSERS) 10112110Sralph fatal("Too many users"); 10212110Sralph user[users++] = arg; 10312110Sralph } 10412110Sralph } 10512110Sralph } 10612110Sralph if (printer == NULL && (printer = getenv("PRINTER")) == NULL) 10712110Sralph printer = DEFLP; 10812110Sralph 10912110Sralph rmjob(); 11055477Sbostic exit(0); 11112110Sralph } 11212110Sralph 11355477Sbostic void 11412110Sralph usage() 11512110Sralph { 11646916Sbostic fprintf(stderr, "usage: lprm [-] [-Pprinter] [[job #] [user] ...]\n"); 11712110Sralph exit(2); 11812110Sralph } 119