f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * CDDL HEADER START
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * The contents of this file are subject to the terms of the
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * Common Development and Distribution License (the "License").
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * You may not use this file except in compliance with the License.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * See the License for the specific language governing permissions
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * and limitations under the License.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * When distributing Covered Code, include this CDDL HEADER in each
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * If applicable, add the following below this CDDL HEADER, with the
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * fields enclosed by brackets "[]" replaced with your own identifying
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * information: Portions Copyright [yyyy] [name of copyright owner]
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * CDDL HEADER END
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * Use is subject to license terms.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica#pragma ident "%Z%%M% %I% %E% SMI"
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * add_allocatable -
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * a command-line interface to add device to device_allocate and
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * device_maps.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricaint scan_label(char *, char *);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica#if !defined(TEXT_DOMAIN)
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * this command can be run only in the global zone.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * this command works in Trusted Extensions only.
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica } else if (strcmp(progname, "remove_allocatable") == 0) {
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica if ((getpwuid_r(uid, &pwd, pwbuf, sizeof (pwbuf))) == NULL) {
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica if (chkauthattr(DEVICE_CONFIG_AUTH, pwd.pw_name) != 1) {
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica rc = 2; /* exit code for 'Unknown system error' in man page */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01ricaprocess_args(int argc, char **argv, da_args *dargs, char *progname)
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica int aflag, cflag, dflag, fflag, lflag, nflag, oflag, tflag;
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica extern char *optarg;
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica aflag = cflag = dflag = fflag = lflag = nflag = oflag = tflag = 0;
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica devinfo->devname = devinfo->devtype = devinfo->devauths =
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica devinfo->devexec = devinfo->devopts = devinfo->devlist = NULL;
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica while ((c = getopt(argc, argv, "a:c:dfl:n:o:st:")) != EOF) {
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica switch (c) {
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica " name not found\n"));
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica " not found\n"));
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "not found\n"));
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* check for field delimiters in the option */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "key=val string: "),
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "not found\n"));
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* -d requires -t, but does not like -n */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* require at least -n or -t or -l to be specified */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* -d requires -t, but does not like -n */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* require at least -n or -t to be specified */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* there's a bunch not accepted by remove_allocatable */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* check for option specified more than once */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica if (aflag > 1 || cflag > 1 || lflag > 1 || fflag > 1 ||
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (0);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* no label specified */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (0);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * if non-default labels are specified, check if they are correct
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* get rid of double quotes if they exist */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica *p = '\0';
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica if (str_to_label(str, &slabel, MAC_LABEL, L_NO_CORRECTION,
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (0);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (0);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica if ((tok = strtok_r(optsarg, KV_TOKEN_DELIMIT, &lasts)) == NULL)
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica while ((tok = strtok_r(NULL, KV_TOKEN_DELIMIT, &lasts)) != NULL) {
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (1);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (0);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica * check if we're updating an existing entry without -f
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* fill in defaults as required */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* add default minlabel and maxlabel */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica if (strstr(devinfo->devopts, DAOPT_MINLABEL) == NULL) {
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* add default minlabel */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "%s%s%s%s%s",
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica if (strstr(devinfo->devopts, DAOPT_MAXLABEL) == NULL) {
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica /* add default maxlabel */
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "%s%s%s%s%s",
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica return (0);
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) fprintf(stderr, "%s%s%s", gettext("Usage: "), progname,
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "\n\t[-a authorization] [-c cleaning program] "
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica "[-o key=value]\n"));
f875b4ebb1dd9fdbeb043557cab38ab3bf7f6e01rica (void) fprintf(stderr, "%s%s%s", gettext("Usage: "), progname,