s3:net ads join: reduce indentation in _net_ads_join_dns_updates()
[ira/wip.git] / source3 / utils / net.c
index e8920e0b02fd1207deebc369e0a687da25f9b842..70ed0aa47a74a776380280c2532881aaa94b9fe8 100644 (file)
 /*****************************************************/
 
 #include "includes.h"
+#include "popt_common.h"
 #include "utils/net.h"
-
-extern bool AllowDebugChange;
+#include "secrets.h"
+#include "lib/netapi/netapi.h"
+#include "../libcli/security/security.h"
+#include "passdb.h"
+#include "messages.h"
 
 #ifdef WITH_FAKE_KASERVER
 #include "utils/net_afs.h"
@@ -231,7 +235,7 @@ static int net_getauthuser(struct net_context *c, int argc, const char **argv)
  */
 static int net_getlocalsid(struct net_context *c, int argc, const char **argv)
 {
-        DOM_SID sid;
+        struct dom_sid sid;
        const char *name;
        fstring sid_str;
 
@@ -239,7 +243,7 @@ static int net_getlocalsid(struct net_context *c, int argc, const char **argv)
                name = argv[0];
         }
        else {
-               name = global_myname();
+               name = lp_netbios_name();
        }
 
        if(!initialize_password_db(false, NULL)) {
@@ -271,17 +275,18 @@ static int net_getlocalsid(struct net_context *c, int argc, const char **argv)
 
 static int net_setlocalsid(struct net_context *c, int argc, const char **argv)
 {
-       DOM_SID sid;
+       struct dom_sid sid;
 
        if ( (argc != 1)
             || (strncmp(argv[0], "S-1-5-21-", strlen("S-1-5-21-")) != 0)
             || (!string_to_sid(&sid, argv[0]))
             || (sid.num_auths != 4)) {
-               d_printf(_("usage: net setlocalsid S-1-5-21-x-y-z\n"));
+               d_printf(_("Usage:"));
+               d_printf(" net setlocalsid S-1-5-21-x-y-z\n");
                return 1;
        }
 
-       if (!secrets_store_domain_sid(global_myname(), &sid)) {
+       if (!secrets_store_domain_sid(lp_netbios_name(), &sid)) {
                DEBUG(0,("Can't store domain SID as a pdc/bdc.\n"));
                return 1;
        }
@@ -291,13 +296,14 @@ static int net_setlocalsid(struct net_context *c, int argc, const char **argv)
 
 static int net_setdomainsid(struct net_context *c, int argc, const char **argv)
 {
-       DOM_SID sid;
+       struct dom_sid sid;
 
        if ( (argc != 1)
             || (strncmp(argv[0], "S-1-5-21-", strlen("S-1-5-21-")) != 0)
             || (!string_to_sid(&sid, argv[0]))
             || (sid.num_auths != 4)) {
-               d_printf(_("usage: net setdomainsid S-1-5-21-x-y-z\n"));
+               d_printf(_("Usage:"));
+               d_printf(" net setdomainsid S-1-5-21-x-y-z\n");
                return 1;
        }
 
@@ -311,11 +317,12 @@ static int net_setdomainsid(struct net_context *c, int argc, const char **argv)
 
 static int net_getdomainsid(struct net_context *c, int argc, const char **argv)
 {
-       DOM_SID domain_sid;
+       struct dom_sid domain_sid;
        fstring sid_str;
 
        if (argc > 0) {
-               d_printf(_("usage: net getdomainsid\n"));
+               d_printf(_("Usage:"));
+               d_printf(" net getdomainsid\n");
                return 1;
        }
 
@@ -339,14 +346,15 @@ static int net_getdomainsid(struct net_context *c, int argc, const char **argv)
        /* Generate one, if it doesn't exist */
        get_global_sam_sid();
 
-       if (!secrets_fetch_domain_sid(global_myname(), &domain_sid)) {
-               d_fprintf(stderr, _("Could not fetch local SID\n"));
-               return 1;
+       if (!IS_DC) {
+               if (!secrets_fetch_domain_sid(lp_netbios_name(), &domain_sid)) {
+                       d_fprintf(stderr, _("Could not fetch local SID\n"));
+                       return 1;
+               }
+               sid_to_fstring(sid_str, &domain_sid);
+               d_printf(_("SID for local machine %s is: %s\n"),
+                        lp_netbios_name(), sid_str);
        }
-       sid_to_fstring(sid_str, &domain_sid);
-       d_printf(_("SID for local machine %s is: %s\n"),
-                global_myname(), sid_str);
-
        if (!secrets_fetch_domain_sid(c->opt_workgroup, &domain_sid)) {
                d_fprintf(stderr, _("Could not fetch domain SID\n"));
                return 1;
@@ -399,7 +407,7 @@ static int net_maxrid(struct net_context *c, int argc, const char **argv)
        uint32 rid;
 
        if (argc != 0) {
-               d_fprintf(stderr, _("usage: net maxrid\n"));
+               d_fprintf(stderr, "%s net maxrid\n", _("Usage:"));
                return 1;
        }
 
@@ -609,6 +617,13 @@ static struct functable net_func[] = {
                N_("  Use 'net help lookup' to get more information about 'net "
                   "lookup' commands.")
        },
+       {       "g_lock",
+               net_g_lock,
+               NET_TRANSPORT_LOCAL,
+               N_("Manipulate the global lock table"),
+               N_("  Use 'net help g_lock' to get more information about "
+                  "'net g_lock' commands.")
+       },
        {       "join",
                net_join,
                NET_TRANSPORT_ADS | NET_TRANSPORT_RPC,
@@ -657,7 +672,7 @@ static struct functable net_func[] = {
        {       "maxrid",
                net_maxrid,
                NET_TRANSPORT_LOCAL,
-               N_("Display the maximul RID currently used"),
+               N_("Display the maximum RID currently used"),
                N_("  net maxrid")
        },
        {       "idmap",
@@ -709,6 +724,21 @@ static struct functable net_func[] = {
                N_("  Use 'net help eventlog' to get more information about "
                   "'net eventlog' commands.")
        },
+       {       "printing",
+               net_printing,
+               NET_TRANSPORT_LOCAL,
+               N_("Process tdb printer files"),
+               N_("  Use 'net help printing' to get more information about "
+                  "'net printing' commands.")
+       },
+
+       {       "serverid",
+               net_serverid,
+               NET_TRANSPORT_LOCAL,
+               N_("Manage the serverid tdb"),
+               N_("  Use 'net help serverid' to get more information about "
+                  "'net serverid' commands.")
+       },
 
 #ifdef WITH_FAKE_KASERVER
        {       "afs",
@@ -767,6 +797,7 @@ static struct functable net_func[] = {
                {"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},
+               {"use-ccache",    0, POPT_ARG_NONE,   &c->opt_ccache},
                {"verbose",     'v', POPT_ARG_NONE,   &c->opt_verbose},
                {"test",        'T', POPT_ARG_NONE,   &c->opt_testmode},
                /* Options for 'net groupmap set' */
@@ -785,26 +816,35 @@ static struct functable net_func[] = {
                {"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},
-
+               /* Options for 'net idmap'*/
+               {"db", 0, POPT_ARG_STRING, &c->opt_db},
+               {"lock", 0, POPT_ARG_NONE,   &c->opt_lock},
+               {"auto", 'a', POPT_ARG_NONE,   &c->opt_auto},
+               {"repair", 0, POPT_ARG_NONE,   &c->opt_repair},
+               /* Options for 'net registry check'*/
+               {"reg-version", 0, POPT_ARG_INT, &c->opt_reg_version},
+               {"output", 'o', POPT_ARG_STRING, &c->opt_output},
+               {"wipe", 0, POPT_ARG_NONE, &c->opt_wipe},
                POPT_COMMON_SAMBA
                { 0, 0, 0, 0}
        };
 
        zero_sockaddr(&c->opt_dest_ip);
 
+       setup_logging(argv[0], DEBUG_STDERR);
+
        load_case_tables();
 
        setlocale(LC_ALL, "");
 #if defined(HAVE_BINDTEXTDOMAIN)
-       bindtextdomain(MODULE_NAME, dyn_LOCALEDIR);
+       bindtextdomain(MODULE_NAME, get_dyn_LOCALEDIR());
 #endif
 #if defined(HAVE_TEXTDOMAIN)
        textdomain(MODULE_NAME);
 #endif
 
        /* set default debug level to 0 regardless of what smb.conf sets */
-       DEBUGLEVEL_CLASS[DBGC_ALL] = 0;
-       dbf = x_stderr;
+       lp_set_cmdline("log level", "0");
        c->private_data = net_func;
 
        pc = poptGetContext(NULL, argc, (const char **) argv, long_options,
@@ -843,12 +883,17 @@ static struct functable net_func[] = {
                }
        }
 
-       /*
-        * Don't load debug level from smb.conf. It should be
-        * set by cmdline arg or remain default (0)
-        */
-       AllowDebugChange = false;
-       lp_load(get_dyn_CONFIGFILE(), true, false, false, true);
+       lp_load_global(get_dyn_CONFIGFILE());
+
+#if defined(HAVE_BIND_TEXTDOMAIN_CODESET)
+       /* Bind our gettext results to 'unix charset'
+          
+          This ensures that the translations and any embedded strings are in the
+          same charset.  It won't be the one from the user's locale (we no
+          longer auto-detect that), but it will be self-consistent.
+       */
+       bind_textdomain_codeset(MODULE_NAME, lp_unix_charset());
+#endif
 
        argv_new = (const char **)poptGetArgs(pc);
 
@@ -865,7 +910,7 @@ static struct functable net_func[] = {
        }
 
        if (c->opt_requester_name) {
-               set_global_myname(c->opt_requester_name);
+               lp_set_cmdline("netbios name", c->opt_requester_name);
        }
 
        if (!c->opt_user_name && getenv("LOGNAME")) {
@@ -886,7 +931,7 @@ static struct functable net_func[] = {
        load_interfaces();
 
        /* this makes sure that when we do things like call scripts,
-          that it won't assert becouse we are not root */
+          that it won't assert because we are not root */
        sec_init();
 
        if (c->opt_machine_pass) {
@@ -900,6 +945,11 @@ static struct functable net_func[] = {
                c->opt_password = getenv("PASSWD");
        }
 
+       /* Failing to init the msg_ctx isn't a fatal error. Only
+          root-level things (joining/leaving domains etc.) will be denied. */
+
+       c->msg_ctx = messaging_init(c, event_context_init(c));
+
        rc = net_run_function(c, argc_new-1, argv_new+1, "net", net_func);
 
        DEBUG(2,("return code = %d\n", rc));