s3: Change sockaddr util function names for consistency
[samba.git] / source3 / utils / net.c
index 99e1e0c8890746a514fbf2aff10db519c1ff48d3..f1a5be1876b381a420d0efdc9b20a0b6b9002cf0 100644 (file)
@@ -43,6 +43,8 @@
 #include "includes.h"
 #include "utils/net.h"
 
+extern bool AllowDebugChange;
+
 #ifdef WITH_FAKE_KASERVER
 #include "utils/net_afs.h"
 #endif
@@ -83,52 +85,6 @@ uint32 get_sec_channel_type(const char *param)
        }
 }
 
-/*
-  run a function from a function table. If not found then
-  call the specified usage function
-*/
-int net_run_function(struct net_context *c, int argc, const char **argv,
-                    struct functable *table,
-                    int (*usage_fn)(struct net_context *c,
-                                    int argc, const char **argv))
-{
-       int i;
-
-       if (argc < 1) {
-               d_printf("\nUsage: \n");
-               return usage_fn(c, argc, argv);
-       }
-       for (i=0; table[i].funcname; i++) {
-               if (StrCaseCmp(argv[0], table[i].funcname) == 0)
-                       return table[i].fn(c, argc-1, argv+1);
-       }
-       d_fprintf(stderr, "No command: %s\n", argv[0]);
-       return usage_fn(c, argc, argv);
-}
-
-/*
- * run a function from a function table.
- */
-int net_run_function2(struct net_context *c, int argc, const char **argv,
-                     const char *whoami, struct functable2 *table)
-{
-       int i;
-
-       if (argc != 0) {
-               for (i=0; table[i].funcname; i++) {
-                       if (StrCaseCmp(argv[0], table[i].funcname) == 0)
-                               return table[i].fn(c, argc-1, argv+1);
-               }
-       }
-
-       for (i=0; table[i].funcname != NULL; i++) {
-               d_printf("%s %-15s %s\n", whoami, table[i].funcname,
-                        table[i].helptext);
-       }
-
-       return -1;
-}
-
 static int net_changetrustpw(struct net_context *c, int argc, const char **argv)
 {
        if (net_ads_check_our_domain(c) == 0)
@@ -358,50 +314,292 @@ static int net_maxrid(struct net_context *c, int argc, const char **argv)
 
 /* main function table */
 static struct functable net_func[] = {
-       {"RPC", net_rpc},
-       {"RAP", net_rap},
-       {"ADS", net_ads},
+       {
+               "rpc",
+               net_rpc,
+               NET_TRANSPORT_RPC,
+               "Run functions using RPC transport",
+               "  Use 'net help rpc' to get more extensive information about "
+               "'net rpc' commands."
+       },
+       {
+               "rap",
+               net_rap,
+               NET_TRANSPORT_RAP,
+               "Run functions using RAP transport",
+               "  Use 'net help rap' to get more extensive information about "
+               "'net rap' commands."
+       },
+       {
+               "ads",
+               net_ads,
+               NET_TRANSPORT_ADS,
+               "Run functions using ADS transport",
+               "  Use 'net help ads' to get more extensive information about "
+               "'net ads' commands."
+       },
 
        /* eventually these should auto-choose the transport ... */
-       {"FILE", net_file},
-       {"SHARE", net_share},
-       {"SESSION", net_rap_session},
-       {"SERVER", net_rap_server},
-       {"DOMAIN", net_rap_domain},
-       {"PRINTQ", net_rap_printq},
-       {"USER", net_user},
-       {"GROUP", net_group},
-       {"GROUPMAP", net_groupmap},
-       {"SAM", net_sam},
-       {"VALIDATE", net_rap_validate},
-       {"GROUPMEMBER", net_rap_groupmember},
-       {"ADMIN", net_rap_admin},
-       {"SERVICE", net_rap_service},
-       {"PASSWORD", net_rap_password},
-       {"CHANGETRUSTPW", net_changetrustpw},
-       {"CHANGESECRETPW", net_changesecretpw},
-       {"TIME", net_time},
-       {"LOOKUP", net_lookup},
-       {"JOIN", net_join},
-       {"DOM", net_dom},
-       {"CACHE", net_cache},
-       {"GETLOCALSID", net_getlocalsid},
-       {"SETLOCALSID", net_setlocalsid},
-       {"SETDOMAINSID", net_setdomainsid},
-       {"GETDOMAINSID", net_getdomainsid},
-       {"MAXRID", net_maxrid},
-       {"IDMAP", net_idmap},
-       {"STATUS", net_status},
-       {"USERSHARE", net_usershare},
-       {"USERSIDLIST", net_usersidlist},
-       {"CONF", net_conf},
-       {"REGISTRY", net_registry},
+       {
+               "file",
+               net_file,
+               NET_TRANSPORT_RPC | NET_TRANSPORT_RAP,
+               "Functions on remote opened files",
+               "  Use 'net help file' to get more information about 'net "
+               "file' commands."
+       },
+       {
+               "share",
+               net_share,
+               NET_TRANSPORT_RPC | NET_TRANSPORT_RAP,
+               "Functions on shares",
+               "  Use 'net help share' to get more information about 'net "
+               "share' commands."
+       },
+       {
+               "session",
+               net_rap_session,
+               NET_TRANSPORT_RAP,
+               "Manage sessions",
+               "  Use 'net help session' to get more information about 'net "
+               "session' commands."
+       },
+       {
+               "server",
+               net_rap_server,
+               NET_TRANSPORT_RAP,
+               "List servers in workgroup",
+               "  Use 'net help server' to get more information about 'net "
+               "server' commands."
+       },
+       {
+               "domain",
+               net_rap_domain,
+               NET_TRANSPORT_RAP,
+               "List domains/workgroups on network",
+               "  Use 'net help domain' to get more information about 'net "
+               "domain' commands."
+       },
+       {
+               "printq",
+               net_rap_printq,
+               NET_TRANSPORT_RAP,
+               "Modify printer queue",
+               "  Use 'net help printq' to get more information about 'net "
+               "printq' commands."
+       },
+       {
+               "user",
+               net_user,
+               NET_TRANSPORT_ADS | NET_TRANSPORT_RPC | NET_TRANSPORT_RAP,
+               "Manage users",
+               "  Use 'net help user' to get more information about 'net "
+               "user' commands."
+       },
+       {
+               "group",
+               net_group,
+               NET_TRANSPORT_ADS | NET_TRANSPORT_RPC | NET_TRANSPORT_RAP,
+               "Manage groups",
+               "  Use 'net help group' to get more information about 'net "
+               "group' commands."
+       },
+       {
+               "groupmap",
+               net_groupmap,
+               NET_TRANSPORT_LOCAL,
+               "Manage group mappings",
+               "  Use 'net help groupmap' to get more information about 'net "
+               "groupmap' commands."
+       },
+       {
+               "sam",
+               net_sam,
+               NET_TRANSPORT_LOCAL,
+               "Functions on the SAM database",
+               "  Use 'net help sam' to get more information about 'net sam' "
+               "commands."
+       },
+       {
+               "validate",
+               net_rap_validate,
+               NET_TRANSPORT_RAP,
+               "Validate username and password",
+               "  Use 'net help validate' to get more information about 'net "
+               "validate' commands."
+       },
+       {
+               "groupmember",
+               net_rap_groupmember,
+               NET_TRANSPORT_RAP,
+               "Modify group memberships",
+               "  Use 'net help groupmember' to get more information about "
+               "'net groupmember' commands."
+       },
+       {       "admin",
+               net_rap_admin,
+               NET_TRANSPORT_RAP,
+               "Execute remote command on a remote OS/2 server",
+               "  Use 'net help admin' to get more information about 'net "
+               "admin' commands."
+       },
+       {       "service",
+               net_rap_service,
+               NET_TRANSPORT_RAP,
+               "List/modify running services",
+               "  Use 'net help service' to get more information about 'net "
+               "service' commands."
+       },
+       {
+               "password",
+               net_rap_password,
+               NET_TRANSPORT_RAP,
+               "Change user password on target server",
+               "  Use 'net help password' to get more information about 'net "
+               "password' commands."
+       },
+       {       "changetrustpw",
+               net_changetrustpw,
+               NET_TRANSPORT_ADS | NET_TRANSPORT_RPC,
+               "Change the trust password",
+               "  Use 'net help changetrustpw' to get more information about "
+               "'net changetrustpw'."
+       },
+       {       "changesecretpw",
+               net_changesecretpw,
+               NET_TRANSPORT_LOCAL,
+               "Change the secret password",
+               "  net [options] changesecretpw\n"
+               "    Change the ADS domain member machine account password in "
+               "secrets.tdb.\n"
+               "    Do NOT use this function unless you know what it does.\n"
+               "    Requires the -f flag to work."
+       },
+       {       "time",
+               net_time,
+               NET_TRANSPORT_LOCAL,
+               "Show/set time",
+               "  Use 'net help time' to get more information about 'net "
+               "time' commands."
+       },
+       {       "lookup",
+               net_lookup,
+               NET_TRANSPORT_LOCAL,
+               "Look up host names/IP addresses",
+               "  Use 'net help lookup' to get more information about 'net "
+               "lookup' commands."
+       },
+       {       "join",
+               net_join,
+               NET_TRANSPORT_ADS | NET_TRANSPORT_RPC,
+               "Join a domain/AD",
+               "  Use 'net help join' to get more information about 'net "
+               "join'."
+       },
+       {       "dom",
+               net_dom,
+               NET_TRANSPORT_LOCAL,
+               "Join/unjoin (remote) machines to/from a domain/AD",
+               "  Use 'net help dom' to get more information about 'net dom' "
+               "commands."
+       },
+       {       "cache",
+               net_cache,
+               NET_TRANSPORT_LOCAL,
+               "Operate on the cache tdb file",
+               "  Use 'net help cache' to get more information about 'net "
+               "cache' commands."
+       },
+       {       "getlocalsid",
+               net_getlocalsid,
+               NET_TRANSPORT_LOCAL,
+               "Get the SID for the local domain",
+               "  net getlocalsid"
+       },
+       {       "setlocalsid",
+               net_setlocalsid,
+               NET_TRANSPORT_LOCAL,
+               "Set the SID for the local domain",
+               "  net setlocalsid S-1-5-21-x-y-z"
+       },
+       {       "setdomainsid",
+               net_setdomainsid,
+               NET_TRANSPORT_LOCAL,
+               "Set domain SID on member servers",
+               "  net setdomainsid S-1-5-21-x-y-z"
+       },
+       {       "getdomainsid",
+               net_getdomainsid,
+               NET_TRANSPORT_LOCAL,
+               "Get domain SID on member servers",
+               "  net getdomainsid"
+       },
+       {       "maxrid",
+               net_maxrid,
+               NET_TRANSPORT_LOCAL,
+               "Display the maximul RID currently used",
+               "  net maxrid"
+       },
+       {       "idmap",
+               net_idmap,
+               NET_TRANSPORT_LOCAL,
+               "IDmap functions",
+               "  Use 'net help idmap to get more information about 'net "
+               "idmap' commands."
+       },
+       {       "status",
+               net_status,
+               NET_TRANSPORT_LOCAL,
+               "Display server status",
+               "  Use 'net help status' to get more information about 'net "
+               "status' commands."
+       },
+       {       "usershare",
+               net_usershare,
+               NET_TRANSPORT_LOCAL,
+               "Manage user-modifiable shares",
+               "  Use 'net help usershare to get more information about 'net "
+               "usershare' commands."
+       },
+       {       "usersidlist",
+               net_usersidlist,
+               NET_TRANSPORT_RPC,
+               "Display list of all users with SID",
+               "  Use 'net help usersidlist' to get more information about "
+               "'net usersidlist'."
+       },
+       {       "conf",
+               net_conf,
+               NET_TRANSPORT_LOCAL,
+               "Manage Samba registry based configuration",
+               "  Use 'net help conf' to get more information about 'net "
+               "conf' commands."
+       },
+       {       "registry",
+               net_registry,
+               NET_TRANSPORT_LOCAL,
+               "Manage the Samba registry",
+               "  Use 'net help registry' to get more information about 'net "
+               "registry' commands."
+       },
 #ifdef WITH_FAKE_KASERVER
-       {"AFS", net_afs},
+       {       "afs",
+               net_afs,
+               NET_TRANSPORT_LOCAL,
+               "Manage AFS tokens",
+               "  Use 'net help afs' to get more information about 'net afs' "
+               "commands."
+       },
 #endif
 
-       {"HELP", net_help},
-       {NULL, NULL}
+       {       "help",
+               net_help,
+               NET_TRANSPORT_LOCAL,
+               "Print usage information",
+               "  Use 'net help help' to list usage information for 'net' "
+               "commands."
+       },
+       {NULL, NULL, 0, NULL, NULL}
 };
 
 
@@ -438,6 +636,7 @@ static struct functable net_func[] = {
                {"stdin",       'i', POPT_ARG_NONE,   &c->opt_stdin},
                {"timeout",     't', POPT_ARG_INT,    &c->opt_timeout},
                {"machine-pass",'P', POPT_ARG_NONE,   &c->opt_machine_pass},
+               {"kerberos",    'k', POPT_ARG_NONE,   &c->opt_kerberos},
                {"myworkgroup", 'W', POPT_ARG_STRING, &c->opt_workgroup},
                {"verbose",     'v', POPT_ARG_NONE,   &c->opt_verbose},
                {"test",        'T', POPT_ARG_NONE,   &c->opt_testmode},
@@ -453,19 +652,24 @@ static struct functable net_func[] = {
                {"exclude",     'X', POPT_ARG_STRING, &c->opt_exclude},
                {"destination", 0, POPT_ARG_STRING,   &c->opt_destination},
                {"tallocreport", 0, POPT_ARG_NONE,    &c->do_talloc_report},
+               /* Options for 'net rpc vampire (keytab)' */
+               {"force-full-repl", 0, POPT_ARG_NONE, &c->opt_force_full_repl},
+               {"single-obj-repl", 0, POPT_ARG_NONE, &c->opt_single_obj_repl},
+               {"clean-old-entries", 0, POPT_ARG_NONE, &c->opt_clean_old_entries},
 
                POPT_COMMON_SAMBA
                { 0, 0, 0, 0}
        };
 
 
-       zero_addr(&c->opt_dest_ip);
+       zero_sockaddr(&c->opt_dest_ip);
 
        load_case_tables();
 
        /* set default debug level to 0 regardless of what smb.conf sets */
        DEBUGLEVEL_CLASS[DBGC_ALL] = 0;
        dbf = x_stderr;
+       c->private_data = net_func;
 
        pc = poptGetContext(NULL, argc, (const char **) argv, long_options,
                            POPT_CONTEXT_KEEP_FIRST);
@@ -473,8 +677,7 @@ static struct functable net_func[] = {
        while((opt = poptGetNextOpt(pc)) != -1) {
                switch (opt) {
                case 'h':
-                       net_help(c, argc, argv);
-                       exit(0);
+                       c->display_usage = true;
                        break;
                case 'e':
                        c->smb_encrypt = true;
@@ -508,7 +711,7 @@ static struct functable net_func[] = {
         * Don't load debug level from smb.conf. It should be
         * set by cmdline arg or remain default (0)
         */
-       c->AllowDebugChange = false;
+       AllowDebugChange = false;
        lp_load(get_dyn_CONFIGFILE(), true, false, false, true);
 
        argv_new = (const char **)poptGetArgs(pc);
@@ -561,12 +764,14 @@ static struct functable net_func[] = {
                c->opt_password = getenv("PASSWD");
        }
 
-       rc = net_run_function(c, argc_new-1, argv_new+1, net_func, net_help);
+       rc = net_run_function(c, argc_new-1, argv_new+1, "net", net_func);
 
        DEBUG(2,("return code = %d\n", rc));
 
        libnetapi_free(c->netapi_ctx);
 
+       poptFreeContext(pc);
+
        TALLOC_FREE(frame);
        return rc;
 }