dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * CDDL HEADER START
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * The contents of this file are subject to the terms of the
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Common Development and Distribution License (the "License").
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * You may not use this file except in compliance with the License.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * or http://www.opensolaris.org/os/licensing.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * See the License for the specific language governing permissions
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * and limitations under the License.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * When distributing Covered Code, include this CDDL HEADER in each
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * If applicable, add the following below this CDDL HEADER, with the
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * fields enclosed by brackets "[]" replaced with your own identifying
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * information: Portions Copyright [yyyy] [name of copyright owner]
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * CDDL HEADER END
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Use is subject to license terms.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <stdio.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <unistd.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <stdlib.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <strings.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <sys/types.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <sys/socket.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <fcntl.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <errno.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <libgen.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <libilb.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include "ilbadm.h"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Error strings for error values returned by ilbadm functions
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraconst char *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_errstr(ilbadm_status_t rc)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra switch (rc) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_OK:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("no error"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_FAIL:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("processing of command failed"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_ENOMEM:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("memory allocation failure"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_EINVAL:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("invalid value - refer to ilbadm(1M)"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_HCPRINT:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("failed to print healthcheck values"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_AF:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("address family is invalid"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_PORT:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("port value is invalid"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_SRVID:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("server ID is invalid"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_ADDR:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("address is invalid"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_ARGS:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("invalid/incompatible keywords - refer to"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " ilbadm(1M)"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_ENOSGNAME:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("servergroup name missing"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_ENORULE:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("rule name missing or specified"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " rule not found"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_ENOSERVER:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("server name missing or specified"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " server not found"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_ALG:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("LB algorithm is invalid"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_ENOPROTO:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("protocol does not exist in"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " protocol database"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_ENOSERVICE:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("servicename does not exist in nameservices"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_OPER:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("operation type is invalid"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_KEYWORD:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("keyword is invalid - please refer"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " to ilbadm(1M)"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_ASSIGNREQ:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("assignment '=' missing"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_NORECURSIVE:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("recursive import not allowed"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_COMMAND:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("subcommand is invalid - please refer"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " to ilbadm(1M)"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_ENOPROXY:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("proxy-src is missing"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_PROXY:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("proxy-src not allowed"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_ENOOPTION:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("mandatory argument(s) missing - refer"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " to ilbadm(1M)"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_TOOMANYIPADDR:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("address range contains more than 255"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " IP addresses"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_EXPORTFAIL:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("could not export servergroup because"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " of lack of space"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_INVAL_SYNTAX:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("syntax failure - refer to ilbadm(1M)"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_NOKEYWORD_VAL:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("missing value"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILBADM_LIBERR:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("library error"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra default:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (gettext("unknown error"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* PRINTFLIKE1 */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misravoid
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_err(const char *format, ...)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* similar to warn() of dladm.c */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra va_list alist;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(stderr, "ilbadm: ");
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra va_start(alist, format);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) vfprintf(stderr, format, alist);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra va_end(alist);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(stderr, "\n");
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misravoid
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta MisraUsage(char *name)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(stderr, gettext("Usage:\n"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra print_cmdlist_short(basename(name), stderr);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra exit(1);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic void
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraprint_version(char *name)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) printf("%s %s\n", basename(name), ILBADM_VERSION);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) printf(gettext(ILBADM_COPYRIGHT));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra exit(0);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misravoid
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraunknown_opt(char **argv, int optind)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("bad or misplaced option %s"), argv[optind]);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra exit(1);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misravoid
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraincomplete_cmdline(char *name)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("the command line is incomplete "
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra "(more arguments expected)"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra Usage(name);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic void
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrabad_importfile(char *name, char *filename)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("file %s cannot be opened for reading"), filename);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra Usage(name);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraint
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misramain(int argc, char *argv[])
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_status_t rc;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int c;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int fd = -1;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int flags = 0;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) setlocale(LC_ALL, "");
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#if !defined(TEXT_DOMAIN)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define TEXT_DOMAIN "SYS_TEST"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#endif
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) textdomain(TEXT_DOMAIN);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* handle global options (-?, -V) first */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra while ((c = getopt(argc, argv, ":V:?")) != -1) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra switch ((char)c) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case 'V': print_version(argv[0]);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* not reached */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case '?':
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra Usage(argv[0]);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* not reached */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra default: unknown_opt(argv, optind - 1);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* not reached */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (optind >= argc)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra incomplete_cmdline(argv[0]);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * we can import from a given file (argv[2]) or from
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * stdin (if no file given)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (strcasecmp(argv[1], "import-config") == 0 ||
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra strcasecmp(argv[1], "import-cf") == 0) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int shift = 0;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (argc > 2 && strcmp(argv[2], "-p") == 0) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra shift++;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra flags |= ILBADM_IMPORT_PRESERVE;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (argc - shift < 3)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra fd = 0;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra else
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if ((fd = open(argv[2+shift], O_RDONLY)) == -1)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra bad_importfile(argv[0], argv[2+shift]);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra argv++;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra argc--;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * re-set optind for next callers of getopt() - they all believe they're
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * the first.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra optind = 1;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra optopt = 0;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rc = ilbadm_import(fd, argc, argv, flags);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * The error messages have been printed out, using
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * ilbadm_errstr() and ilb_errstr(), before we get here.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * So just set the exit value
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rc != ILBADM_OK)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (1);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* success */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (0);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}