lpadmin.c revision 45916cd2fec6e79bca5dee0421bd39e3c2910d1e
/*
* 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);
}