| /* |
| * CDDL HEADER START |
| * |
| * The contents of this file are subject to the terms of the |
| * Common Development and Distribution License (the "License"). |
| * You may not use this file except in compliance with the License. |
| * |
| * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
| * or http://www.opensolaris.org/os/licensing. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * |
| * When distributing Covered Code, include this CDDL HEADER in each |
| * file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
| * If applicable, add the following below this CDDL HEADER, with the |
| * fields enclosed by brackets "[]" replaced with your own identifying |
| * information: Portions Copyright [yyyy] [name of copyright owner] |
| * |
| * CDDL HEADER END |
| */ |
| /* |
| * Copyright 2006 Sun Microsystems, Inc. All rights reserved. |
| * Use is subject to license terms. |
| */ |
| |
| /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ |
| /* All Rights Reserved */ |
| |
| |
| /* |
| * Copyright 2004 Sun Microsystems, Inc. All rights reserved. |
| * Use is subject to license terms. |
| */ |
| |
| #pragma ident "%Z%%M% %I% %E% SMI" |
| |
| #include "stdio.h" |
| #include "ctype.h" |
| #include "errno.h" |
| #include "sys/types.h" |
| #include "sys/utsname.h" |
| #include "string.h" |
| |
| #include "lp.h" |
| #include "msgs.h" |
| #include "access.h" |
| #include "class.h" |
| #include "printers.h" |
| |
| #define WHO_AM_I I_AM_LPADMIN |
| #include "oam.h" |
| |
| #include "lpadmin.h" |
| |
| #include <locale.h> |
| |
| extern void chkopts(), |
| chkopts2(), |
| chkopts3(), |
| exit(); |
| |
| int system_labeled = 0; |
| |
| int scheduler_active = 0; |
| |
| char *label = 0; |
| |
| PRINTER *printer_pointer = 0; |
| |
| static CLASS *class_pointer = 0; |
| |
| PWHEEL *pwheel_pointer = 0; |
| char *Local_System = 0; |
| |
| /** |
| ** main() |
| **/ |
| |
| int |
| main(int argc, char *argv[]) |
| { |
| struct utsname un; |
| |
| (void) setlocale (LC_ALL, ""); |
| |
| #if !defined(TEXT_DOMAIN) |
| #define TEXT_DOMAIN "SYS_TEST" |
| #endif |
| (void) textdomain(TEXT_DOMAIN); |
| |
| if (!is_user_admin()) { |
| LP_ERRMSG (ERROR, E_LP_NOTADM); |
| done (1); |
| /*NOTREACHED*/ |
| } |
| |
| system_labeled = is_system_labeled(); |
| |
| uname(&un); |
| Local_System = strdup(un.nodename); |
| |
| options (argc, argv); /* process command line options */ |
| |
| chkopts (); /* check for legality of options */ |
| |
| startup (); /* open path to Spooler */ |
| |
| if (d) |
| newdflt (d); /* -d */ |
| |
| else if (x) { |
| |
| /* allow "any" or "all" to do all destinations */ |
| if (STREQU(NAME_ALL, x) || STREQU(NAME_ANY, x)) { |
| |
| /* |
| * Just deleting all the printers should get |
| * rid of all the classes, too, but removing |
| * the classes first should make things go a bit |
| * faster. |
| */ |
| |
| while ((class_pointer = getclass(NAME_ALL))) |
| rmdest (1, class_pointer->name); |
| |
| if (errno != ENOENT) { |
| LP_ERRMSG1 ( |
| ERROR, |
| E_ADM_GETCLASSES, |
| PERROR |
| ); |
| done (1); |
| /*NOTREACHED*/ |
| } |
| |
| while ((printer_pointer = getprinter(NAME_ALL))) |
| rmdest (0, printer_pointer->name); |
| |
| if (errno != ENOENT) { |
| LP_ERRMSG1 ( |
| ERROR, |
| E_ADM_GETPRINTERS, |
| PERROR |
| ); |
| done (1); |
| /*NOTREACHED*/ |
| } |
| |
| } else |
| rmdest (isclass(x), x); |
| |
| } else if (!p && S) { |
| if (STREQU(*S, NAME_ALL) || STREQU(*S, NAME_ANY)) { |
| while ((pwheel_pointer = getpwheel(NAME_ALL))) { |
| *S = pwheel_pointer->name; |
| chkopts3 (0); |
| label = *S; |
| do_pwheel (); |
| } |
| } else { |
| label = 0; |
| do_pwheel (); |
| } |
| |
| #if defined(J_OPTION) |
| } else if (j) { |
| do_fault (); /* -j */ |
| #endif |
| |
| } else { |
| /* allow "any" or "all" to do all printers */ |
| if (STREQU(NAME_ALL, p) || STREQU(NAME_ANY, p)) { |
| int called=0; |
| while ((printer_pointer = getprinter(NAME_ALL)) != NULL) { |
| /* |
| * "chkopts2()" will clobber "s". |
| */ |
| char * save_s = s; |
| |
| called++; |
| p = printer_pointer->name; |
| chkopts2 (0); |
| |
| if (s) |
| if ( |
| A || a || e || F || H |
| || h || i || l || m || M |
| || o || U || v |
| || Q != -1 || W != -1 |
| ) |
| LP_ERRMSG1 ( |
| WARNING, |
| E_ADM_SIGNORE, |
| p |
| ); |
| label = p; |
| do_printer (); |
| |
| s = save_s; |
| } |
| if (called == 0 ) |
| LP_ERRMSG (ERROR, E_ADM_PLONELY); |
| |
| if (errno != ENOENT) { |
| LP_ERRMSG2 ( |
| ERROR, |
| E_LP_GETPRINTER, |
| NAME_ALL, |
| PERROR |
| ); |
| done (1); |
| /*NOTREACHED*/ |
| } |
| } else { |
| label = 0; |
| do_printer (); /* -p etc. */ |
| } |
| } |
| done (0); |
| /*NOTREACHED*/ |
| return (0); |
| } |
| |
| /** |
| ** putp() - FAKE ROUTINES TO AVOID REAL ONES |
| **/ |
| |
| int putp () |
| { |
| return (0); |
| } |