r1949: provide functions to access the username, userdomain and userpassword
authorStefan Metzmacher <metze@samba.org>
Fri, 20 Aug 2004 09:48:25 +0000 (09:48 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:58:13 +0000 (12:58 -0500)
now you're prompted when cmdline_get_userpassword() is called
and the password is not yet known

metze
(This used to be commit d14a01533c5d465ff3709c48576b798b3be807e0)

source4/lib/cmdline/popt_common.c
source4/utils/net/net.c

index ef75d7be1f975a1cce017d27ecc3e3da7f799535..20b9aac2016722605bba9a755f94d1ef61e3fd30 100644 (file)
@@ -33,7 +33,7 @@
  *             -i,--scope
  */
 
-struct cmdline_auth_info cmdline_auth_info;
+static struct cmdline_auth_info cmdline_auth_info;
 
 static void popt_common_callback(poptContext con, 
                           enum poptCallbackReason reason,
@@ -396,3 +396,38 @@ struct poptOption popt_common_credentials[] = {
        { "machine-pass", 'P', POPT_ARG_NONE, NULL, 'P', "Use stored machine account password" },
        POPT_TABLEEND
 };
+
+const char *cmdline_get_username(void)
+{
+       return cmdline_auth_info.username;
+}
+
+const char *cmdline_get_userdomain(void)
+{
+       if (cmdline_auth_info.domain[0]) {
+               return cmdline_auth_info.domain;
+       }
+
+       /* I think this should be lp_netbios_name() 
+        * instead of lp_workgroup(), because if you're logged in 
+        * as domain user the getenv("USER") contains the domain
+        * and this code path isn't used
+        * --metze
+        */
+       return lp_netbios_name();
+}
+
+const char *cmdline_get_userpassword(void)
+{
+       pstring prompt;
+
+       if (cmdline_auth_info.got_pass) {
+               return cmdline_auth_info.password;
+       }
+
+       pstr_sprintf(prompt, "Password for [%s\\%s]:", 
+                       cmdline_get_userdomain(),
+                       cmdline_get_username());
+
+       return getpass(prompt);
+}
index 89f4e77735bc485413c4a379b1fc4197ba9c2e51..da644668696f6908b96e0c9285adabf4f8bfc67e 100644 (file)
@@ -156,7 +156,6 @@ static int binary_net(int argc, const char **argv)
        const char **argv_new;
        TALLOC_CTX *mem_ctx;
        struct net_context *ctx;
-       const char *domain;
        poptContext pc;
        struct poptOption long_options[] = {
                POPT_AUTOHELP
@@ -204,12 +203,6 @@ static int binary_net(int argc, const char **argv)
                return 1;
        }
 
-       if (cmdline_auth_info.domain[0]) {
-               domain = cmdline_auth_info.domain;
-       } else {
-               domain = lp_workgroup();
-       }
-
        mem_ctx = talloc_init("net_context");
        ctx = talloc_p(mem_ctx, struct net_context);
        if (!ctx) {
@@ -219,9 +212,9 @@ static int binary_net(int argc, const char **argv)
 
        ZERO_STRUCTP(ctx);
        ctx->mem_ctx = mem_ctx;
-       ctx->user.account_name = talloc_strdup(ctx->mem_ctx, cmdline_auth_info.username);
-       ctx->user.domain_name = talloc_strdup(ctx->mem_ctx, domain);
-       ctx->user.password = talloc_strdup(ctx->mem_ctx, cmdline_auth_info.password);
+       ctx->user.account_name = talloc_strdup(ctx->mem_ctx, cmdline_get_username());
+       ctx->user.domain_name = talloc_strdup(ctx->mem_ctx, cmdline_get_userdomain());
+       ctx->user.password = talloc_strdup(ctx->mem_ctx, cmdline_get_userpassword());
 
        rc = net_run_function(ctx, argc_new-1, argv_new+1, net_functable, net_usage);