b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * This file and its contents are supplied under the terms of the
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Common Development and Distribution License ("CDDL"), version 1.0.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * You may only use this file in accordance with the terms of version
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * 1.0 of the CDDL.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * A full copy of the text of the CDDL should have accompanied this
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * source. A copy of the CDDL is also available via the Internet at
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic void dclist_usage(void);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic int cmd_dclist(char *);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic void dcname_usage(void);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic int cmd_dcname(char *);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic void dsgetdc_usage(void);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic int cmd_dsgetdc(char *);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic void dsgetdcname_usage(void);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic int cmd_dsgetdcname(char *);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic void kick_usage(void);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic int cmd_kick(char *);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic void help(void);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross cmd_fn_t *fn; /* pointer to subcommand handler function */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross cmd_usage_t *usage; /* pointer to subcommand help function */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross int optreq; /* does this have a required optval */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross {"dsgetdcname", cmd_dsgetdcname, dsgetdcname_usage, 0},
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Rossstatic struct commands *
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(gettext("usage: nltest dclist... \n"));
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross/* ARGSUSED */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(gettext("usage: nltest dcname... \n"));
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross/* ARGSUSED */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(gettext("usage: nltest dsgetdc... \n"));
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross/* ARGSUSED */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * dsgetdcname
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(gettext("usage: nltest dsgetdcname domainname \n"));
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(" Domain name supplied: %s \n", domname);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross err = DsGetDcName(NULL, domname, NULL, NULL, 0, &dcinfo);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf("Domain controller not found.\n");
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf("See: /var/run/idmap/discovery.log\n");
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf("Data Returned from DsGetDcName() call: \n");
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(" DC Name: %s \n", dcinfo->DomainControllerName);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(" DC Addr: %s \n", dcinfo->DomainControllerAddress);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(" Domain Name: %s \n", dcinfo->DomainName);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(" DNS Forest Name: %s \n", dcinfo->DnsForestName);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(" Flags: 0x%x \n", dcinfo->Flags);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(" DC Site Name: %s \n", dcinfo->DcSiteName);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(" Client Site Name: %s \n", dcinfo->ClientSiteName);
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(gettext("usage: nltest /KICK \n"));
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * help functions
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * TODO: We may want to revise this help text. It's basically
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * a copy-paste from:
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * http://technet.microsoft.com/en-us/library/cc731935.aspx
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(gettext("usage: %s /subcommand\n"),
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross (void) printf(gettext("where subcommands are:\n"
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross#if 0 /* not yet */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross " dclist Lists all domain controllers in the domain.\n"
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross " dcname Lists the PDC or PDC emulator.\n"
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross " dsgetdc Queries DNS server for list of DCs and"
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross " their IP addresses and contacts each DC to check"
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross " for connectivity.\n"
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross " dsgetdcname returns the name of a domain controller in a"
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross " specified domain\n"
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross " help display help on specified subcommand\n"
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross " kick trigger domain controller re-discovery\n"
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Parse options.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross /* Is this an option? */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * May have /optname:value
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross *p++ = '\0';
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * May have --optname=value
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross *p++ = '\0';
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross /* Not an option. Stop parsing. */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Handle each optname (and maybe its optval)
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Might put this logic in a table of options.
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * (including a flag for "optval required",
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * so that check could be factored out)
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross /* cmd->name requires an optval */
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross "%s: option %s requires a value\n",
b3700b074e637f8c6991b70754c88a2cfffb246bGordon Ross * Handle remaining non-option arguments