#include "includes.h"
#include "utils/net.h"
+extern bool AllowDebugChange;
+
#ifdef WITH_FAKE_KASERVER
#include "utils/net_afs.h"
#endif
}
}
-/*
- 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)
/* 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}
};
{"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},
{"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);
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;
* 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);
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;
}