summaryrefslogtreecommitdiff
path: root/usr/src/cmd/lp/cmd/lpadmin/options.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/lp/cmd/lpadmin/options.c')
-rw-r--r--usr/src/cmd/lp/cmd/lpadmin/options.c775
1 files changed, 0 insertions, 775 deletions
diff --git a/usr/src/cmd/lp/cmd/lpadmin/options.c b/usr/src/cmd/lp/cmd/lpadmin/options.c
deleted file mode 100644
index 04928e5795..0000000000
--- a/usr/src/cmd/lp/cmd/lpadmin/options.c
+++ /dev/null
@@ -1,775 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (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 2005 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
-/* All Rights Reserved */
-
-#include "ctype.h"
-#include "stdio.h"
-#include "string.h"
-#include "stdlib.h"
-#include <libintl.h>
-
-#include "lp.h"
-#include "printers.h"
-
-#define WHO_AM_I I_AM_LPADMIN
-#include "oam.h"
-
-#include "lpadmin.h"
-
-#ifdef LP_USE_PAPI_ATTR
-#if defined(CAN_DO_MODULES)
-#define OPT_LIST "A:ac:d:D:e:f:F:H:hi:I:lm:Mn:o:p:Q:r:S:s:T:u:U:v:W:x:t:P:"
-#else
-#define OPT_LIST "A:ac:d:D:e:f:F:hi:I:lm:Mn:o:p:Q:r:S:s:T:u:U:v:W:x:t:P:"
-#endif
-
-#else
-#if defined(CAN_DO_MODULES)
-#define OPT_LIST "A:ac:d:D:e:f:F:H:hi:I:lm:Mo:p:Q:r:S:s:T:u:U:v:W:x:t:P:"
-#else
-#define OPT_LIST "A:ac:d:D:e:f:F:hi:I:lm:Mo:p:Q:r:S:s:T:u:U:v:W:x:t:P:"
-#endif
-#endif
-
-#define MALLOC(pointer) \
- if (!(pointer = strdup(optarg))) { \
- LP_ERRMSG (ERROR, E_LP_MALLOC); \
- done (1); \
- } else
-
-#define REALLOC(pointer) \
- if (!(pointer = realloc(pointer, (unsigned) (strlen(pointer) + 1 + strlen(optarg) + 1)))) { \
- LP_ERRMSG (ERROR, E_LP_MALLOC); \
- done (1); \
- } else if (strcat(pointer, " ")) \
- (void)strcat (pointer, optarg); \
- else
-
-extern char *optarg;
-
-extern int optind,
- opterr,
- optopt;
-
-extern double strtod();
-
-extern long strtol();
-
-int a = 0, /* alignment needed for mount */
- banner = -1, /* allow/don't-allow nobanner */
-#if defined(DIRECT_ACCESS)
- C = 0, /* direct a.o.t. normal access */
-#endif
- filebreak = 0,
- h = 0, /* hardwired terminal */
- j = 0, /* do -F just for current job */
- l = 0, /* login terminal */
- M = 0, /* do mount */
- t = 0, /* tray number*/
- o = 0, /* some -o options given */
- Q = -1, /* queue threshold for alert */
- W = -1; /* alert interval */
-
-char *A = 0, /* alert type */
- *c = 0, /* class name */
- *cpi = 0, /* string value of -o cpi= */
- *d = 0, /* default destination */
- *D = 0, /* description */
- *e = 0, /* copy existing interface */
- *f = 0, /* forms list - allow/deny */
- *P = 0, /* paper list */
- *F = 0, /* fault recovery */
- **H = 0, /* list of modules to push */
- *i = 0, /* interface pathname */
- **I = 0, /* content-type-list */
- *length = 0, /* string value of -o length= */
- *lpi = 0, /* string value of -o lpi= */
- *m = 0, /* model name */
- modifications[128], /* list of mods to make */
-#ifdef LP_USE_PAPI_ATTR
- *n_opt = NULL, /* PPD file name */
-#endif
- *p = 0, /* printer name */
- *r = 0, /* class to remove printer from */
- *s = 0, /* system printer is on */
- *stty_opt= 0, /* string value of -o stty= */
- **o_options = 0,/* undefined lpadmin -o options */
- **S = 0, /* -set/print-wheel list */
- **T = 0, /* terminfo names */
- *u = 0, /* user allow/deny list */
- *U = 0, /* dialer_info */
- *v = 0, /* device pathname */
- *width = 0, /* string value of -o width= */
- *x = 0; /* destination to be deleted */
-
-SCALED cpi_sdn = { 0, 0 },
- length_sdn = { 0, 0 },
- lpi_sdn = { 0, 0 },
- width_sdn = { 0, 0 };
-
-static char *modp = modifications;
-
-static void oparse();
-
-static char * empty_list[] = { 0 };
-
-/**
- ** options() - PARSE COMMAND LINE ARGUMENTS INTO OPTIONS
- **/
-
-void options (argc, argv)
- int argc;
- char *argv[];
-{
- int optsw,
- ac,
- Aflag = 0;
-
- char *cp,
- *rest,
- **av;
- char stroptsw[] = "-X";
-
-#if defined(__STDC__)
- typedef char * const * stupid; /* dumb-ass ANSI C */
-#else
- typedef char ** stupid;
-#endif
-
-
- /*
- * Add a fake value to the end of the "argv" list, to
- * catch the case that a valued-option comes last.
- */
- av = malloc((argc + 2) * sizeof(char *));
- for (ac = 0; ac < argc; ac++)
- av[ac] = argv[ac];
- av[ac++] = "--";
-
- opterr = 0;
- while ((optsw = getopt(ac, (stupid)av, OPT_LIST)) != EOF) {
-
- switch (optsw) {
-
- /*
- * These options MAY take a value. Check the value;
- * if it begins with a '-', assume it's really the next
- * option.
- */
- case 'd':
- case 'p': /* MR bl87-27863 */
- case 'I':
-#if defined(CAN_DO_MODULES)
- case 'H':
-#endif
- if (*optarg == '-') {
- /*
- * This will work if we were given
- *
- * -x -foo
- *
- * but would fail if we were given
- *
- * -x-foo
- */
- optind--;
- switch (optsw) {
- case 'd':
-#if defined(CAN_DO_MODULES)
- case 'H':
-#endif
- optarg = NAME_NONE;
- break;
- case 'p':
- optarg = NAME_ALL;
- break;
- case 'I':
- optarg = 0;
- break;
- }
- }
- break;
-
- /*
- * These options MUST have a value. Check the value;
- * if it begins with a dash or is null, complain.
- */
- case 'Q':
- case 'W':
- case 't':
- /*
- * These options take numeric values, which might
- * be negative. Negative values are handled later,
- * but here we just screen them.
- */
- (void)strtol(optarg, &rest, 10);
- if (!rest || !*rest)
- break;
- /*FALLTHROUGH*/
- case 'A':
- case 'c':
- case 'e':
- case 'f':
- case 'P':
- case 'F':
- case 'i':
- case 'm':
-#ifdef LP_USE_PAPI_ATTR
- case 'n':
-#endif
- case 'o':
-/* case 'p': */ /* MR bl87-27863 */
- case 'r':
- case 'S':
- case 's':
- case 'T':
- case 'u':
- case 'U':
- case 'v':
- case 'x':
- /*
- * These options also must have non-null args.
- */
- if (!*optarg) {
- stroptsw[1] = optsw;
- LP_ERRMSG1 (ERROR, E_LP_NULLARG, stroptsw);
- done (1);
- }
- if (*optarg == '-') {
- stroptsw[1] = optsw;
- LP_ERRMSG1 (ERROR, E_LP_OPTARG, stroptsw);
- done (1);
- }
- if (optsw == 'A')
- Aflag++;
- break;
- case 'D':
- /*
- * These options can have a null arg.
- */
- if (*optarg == '-') {
- stroptsw[1] = optsw;
- LP_ERRMSG1 (ERROR, E_LP_OPTARG, stroptsw);
- done (1);
- }
- break;
- }
-
- switch (optsw) {
-
- case 'a': /* alignment pattern needed for mount */
- a = 1;
- break;
-
- case 'A': /* alert type */
- if (A)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'A');
- MALLOC(A);
- Aflag++;
- if (!STREQU(A, NAME_QUIET) && !STREQU(A, NAME_LIST))
- *modp++ = 'A';
- break;
-
- case 'c': /* class to insert printer p */
- if (c)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'c');
- MALLOC(c);
- break;
-
-#if defined(DIRECT_ACCESS)
- case 'C':
- C = 1;
- break;
-#endif
-
- case 'd': /* system default destination */
- if (d)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'd');
- MALLOC(d);
- break;
-
- case 'D': /* description */
- if (D)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'D');
- MALLOC(D);
- *modp++ = 'D';
- break;
-
- case 'e': /* existing printer interface */
- if (e)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'e');
- MALLOC(e);
- *modp++ = 'e';
- break;
-
- case 'f': /* set up forms allow/deny */
- if (f)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'f');
- MALLOC(f);
- break;
-
- case 'P': /* set up forms allow/deny */
- if (P)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'P');
- MALLOC(P);
- break;
-
- case 'F': /* fault recovery */
- if (F)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'F');
- MALLOC(F);
- *modp++ = 'F';
- break;
-
-#if defined(CAN_DO_MODULES)
- case 'H':
- if (H)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'H');
- if (!optarg || !*optarg || STREQU(NAME_NONE, optarg))
- H = empty_list;
- if (!(H = getlist(optarg, LP_WS, LP_SEP))) {
- LP_ERRMSG (ERROR, E_LP_MALLOC);
- done(1);
- }
- *modp++ = 'H';
- break;
-#endif
-
- case 'h': /* hardwired terminal */
- h = 1;
- *modp++ = 'h';
- break;
-
- case 'i': /* interface pathname */
- if (i)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'i');
- MALLOC(i);
- *modp++ = 'i';
- break;
-
- case 'I': /* content-type-list */
- if (I)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'I');
- if (!optarg || !*optarg || STREQU(NAME_NONE, optarg))
- I = empty_list;
- else if (!(I = getlist(optarg, LP_WS, LP_SEP))) {
- LP_ERRMSG (ERROR, E_LP_MALLOC);
- done (1);
- }
- *modp++ = 'I';
- break;
-
-#if defined(J_OPTION)
- case 'j': /* fault recovery just for current job */
- j = 1;
-(void) printf (gettext("Sorry, the -j option is currently broken\n"));
- break;
-#endif
-
- case 'l': /* login terminal */
- l = 1;
- *modp++ = 'l';
- break;
-
- case 'm': /* model interface */
- if (m)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'm');
- MALLOC(m);
- *modp++ = 'm';
- break;
-
-#ifdef LP_USE_PAPI_ATTR
- case 'n': /* PPD file */
- if (n_opt)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'n');
- MALLOC(n_opt);
- *modp++ = 'n';
- break;
-#endif
-
- case 'M': /* a mount request */
- M = 1;
- break;
-
- case 'o': /* several different options */
- oparse (optarg);
- o = 1;
- break;
-
- case 'p': /* printer name */
- if (p)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'p');
- MALLOC(p);
- break;
-
- case 'Q':
- if (Q != -1)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'Q');
- if (STREQU(NAME_ANY, optarg))
- Q = 1;
- else {
- Q = strtol(optarg, &rest, 10);
- if (Q < 0) {
- LP_ERRMSG1 (ERROR, E_LP_NEGARG, 'Q');
- done (1);
- }
- if (rest && *rest) {
- LP_ERRMSG1 (ERROR, E_LP_GARBNMB, 'Q');
- done (1);
- }
- if (Q == 0) {
- LP_ERRMSG1 (ERROR, E_ADM_ZEROARG, 'Q');
- done (1);
- }
- }
- *modp++ = 'Q';
- break;
-
- case 'r': /* class to remove p from */
- if (r)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'r');
- MALLOC(r);
- break;
-
- case 'S': /* char_set/print-wheels */
- if (S)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'S');
- if (!(S = getlist(optarg, LP_WS, LP_SEP))) {
- LP_ERRMSG (ERROR, E_LP_MALLOC);
- done (1);
- }
- *modp++ = 'S';
- break;
-
- case 's':
- if (s)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 's');
-
- if ((cp = strchr(optarg, '!')))
- *cp = '\0';
-
- if ((STREQU(optarg, NAME_NONE)) ||
- (STREQU(optarg, "localhost")))
-
- s = Local_System;
- else if (STREQU(optarg, Local_System)) {
- if (cp) {
- LP_ERRMSG (ERROR, E_ADM_NAMEONLOCAL);
- done(1);
- } else
- s = Local_System;
- } else {
- if (cp)
- *cp = '!';
-
- MALLOC(s);
- }
-
- /* 's' already used for stty 'R' for remote? */
- *modp++ = 'R';
- break;
-
- case 't': /* tray number*/
- if (t != 0) LP_ERRMSG1 (WARNING, E_LP_2MANY, 't');
- t = strtol(optarg, &rest, 10);
- if (t <= 0) {
- LP_ERRMSG1 (ERROR, E_LP_NEGARG, 't');
- done (1);
- }
- if (rest && *rest) {
- LP_ERRMSG1 (ERROR, E_LP_GARBNMB, 't');
- done (1);
- }
- break;
-
- case 'T': /* terminfo names for p */
- if (T)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'T');
- if (!(T = getlist(optarg, LP_WS, LP_SEP))) {
- LP_ERRMSG (ERROR, E_LP_MALLOC);
- done (1);
- }
- *modp++ = 'T';
- break;
-
- case 'u': /* user allow/deny list */
- if (u)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'u');
- MALLOC(u);
- break;
-
- case 'U': /* dialer_info */
- if (U)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'U');
- MALLOC(U);
- *modp++ = 'U';
- break;
-
- case 'v': /* device pathname */
- if (v)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'v');
- MALLOC(v);
- *modp++ = 'v';
- break;
-
- case 'W': /* alert interval */
- if (W != -1)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'W');
- if (STREQU(NAME_ONCE, optarg))
- W = 0;
- else {
- W = strtol(optarg, &rest, 10);
- if (W < 0) {
- LP_ERRMSG1 (ERROR, E_LP_NEGARG, 'W');
- done (1);
- }
- if (rest && *rest) {
- LP_ERRMSG1 (ERROR, E_LP_GARBNMB, 'W');
- done (1);
- }
- }
- *modp++ = 'W';
- break;
-
- case 'x': /* destination to be deleted */
- if (x)
- LP_ERRMSG1 (WARNING, E_LP_2MANY, 'x');
- MALLOC(x);
- break;
-
- default:
- if (optopt == '?') {
- usage ();
- done (0);
-
- } else {
- stroptsw[1] = optsw;
-
- if (strchr(OPT_LIST, optopt))
- LP_ERRMSG1 (ERROR, E_LP_OPTARG,
- stroptsw);
- else
- LP_ERRMSG1 (ERROR, E_LP_OPTION,
- stroptsw);
- done (1);
- }
- }
- }
-
- if (optind < argc)
- LP_ERRMSG1 (WARNING, E_LP_EXTRA, argv[optind]);
-
- if ((v) && (!Aflag)) {
- if (!(A = strdup("write"))) {
- LP_ERRMSG (ERROR, E_LP_MALLOC);
- done (1);
- }
- *modp++ = 'A';
- }
-
- return;
-}
-
-/**
- ** oparse() - PARSE -o OPTION
- **/
-
-static void oparse (optarg)
- char *optarg;
-{
- register char **list = dashos(optarg);
-
-
- if (!list)
- return;
-
- for ( ; (optarg = *list); list++)
-
- if (STREQU(optarg, "banner")) {
- if (banner != -1)
- LP_ERRMSG1 (
- WARNING,
- E_ADM_2MANY,
- "banner/nobanner"
- );
- banner = BAN_ALWAYS;
- *modp++ = 'b';
-
- } else if (STREQU(optarg, "nobanner")) {
- if (banner != -1)
- LP_ERRMSG1 (
- WARNING,
- E_ADM_2MANY,
- "banner/nobanner"
- );
- banner = BAN_OPTIONAL;
- *modp++ = 'b';
-
- /* handle banner=(always|optional|never) */
- } else if (STRNEQU(optarg, "banner=", 7)) {
- char *ptr;
-
- ptr = (optarg += 7);
- if (banner != -1)
- LP_ERRMSG1 ( WARNING, E_ADM_2MANY,
- "banner/nobanner/banner=(always|optional|never)"
- );
-
- /* like "banner", always print a banner */
- if (strcasecmp(ptr, "always") == 0)
- banner = BAN_ALWAYS;
- /* like "nobanner", print a banner unless requested */
- if (strcasecmp(ptr, "optional") == 0)
- banner = BAN_OPTIONAL;
- /* never print a banner */
- if (strcasecmp(ptr, "never") == 0)
- banner = BAN_NEVER;
- *modp++ = 'b';
-
- } else if (STRNEQU(optarg, "length=", 7)) {
- if (length)
- LP_ERRMSG1 (
- WARNING,
- E_ADM_2MANY,
- "length="
- );
- length = (optarg += 7);
-
- if (!*optarg) {
- length_sdn.val = 0;
- length_sdn.sc = 0;
-
- } else {
- length_sdn = _getsdn(optarg, &optarg, 0);
- if (errno == EINVAL) {
- LP_ERRMSG (ERROR, E_LP_BADSCALE);
- done (1);
- }
- }
- *modp++ = 'L';
-
- } else if (STRNEQU(optarg, "width=", 6)) {
- if (width)
- LP_ERRMSG1 (
- WARNING,
- E_ADM_2MANY,
- "width="
- );
- width = (optarg += 6);
-
- if (!*optarg) {
- width_sdn.val = 0;
- width_sdn.sc = 0;
-
- } else {
- width_sdn = _getsdn(optarg, &optarg, 0);
- if (errno == EINVAL) {
- LP_ERRMSG (ERROR, E_LP_BADSCALE);
- done (1);
- }
- }
- *modp++ = 'w';
-
- } else if (STRNEQU(optarg, "cpi=", 4)) {
- if (cpi)
- LP_ERRMSG1 (WARNING, E_ADM_2MANY, "cpi=");
-
- cpi = (optarg += 4);
-
- if (!*optarg) {
- cpi_sdn.val = 0;
- cpi_sdn.sc = 0;
-
- } else {
- cpi_sdn = _getsdn(optarg, &optarg, 1);
- if (errno == EINVAL) {
- LP_ERRMSG (ERROR, E_LP_BADSCALE);
- done (1);
- }
- }
- *modp++ = 'c';
-
- } else if (STRNEQU(optarg, "lpi=", 4)) {
- if (lpi)
- LP_ERRMSG1 (WARNING, E_ADM_2MANY, "lpi=");
- lpi = (optarg += 4);
-
- if (!*optarg) {
- lpi_sdn.val = 0;
- lpi_sdn.sc = 0;
-
- } else {
- lpi_sdn = _getsdn(optarg, &optarg, 0);
- if (errno == EINVAL) {
- LP_ERRMSG (ERROR, E_LP_BADSCALE);
- done (1);
- }
- }
- *modp++ = 'M';
-
- } else if (STRNEQU(optarg, "stty=", 5)) {
-
- optarg += 5;
- if (!*optarg)
- stty_opt = 0;
-
- else {
- if (strchr(LP_QUOTES, *optarg)) {
- register int len
- = strlen(optarg);
-
- if (optarg[len - 1] == *optarg)
- optarg[len - 1] = 0;
- optarg++;
- }
- if (stty_opt)
- REALLOC (stty_opt);
- else
- MALLOC (stty_opt);
- }
- *modp++ = 's';
-
- } else if (STREQU(optarg, "filebreak")) {
- filebreak = 1;
-
- } else if (STREQU(optarg, "nofilebreak")) {
- filebreak = 0;
-
- /* added support for using -o to pass any key=value pair */
- } else if (*optarg) {
-
- if ((addlist(&o_options, optarg)) != 0) {
- fprintf(stderr, gettext("System Error %d\n"), errno);
- }
-
- *modp++ = 'o';
- optarg++;
- }
-
- return;
-}