r17979: Make ntlm_auth more intelligent about figuring out it's
authorJeremy Allison <jra@samba.org>
Fri, 1 Sep 2006 04:15:04 +0000 (04:15 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:39:45 +0000 (11:39 -0500)
domain and user args. if only given a parameter of the
form --username DOMAIN\user. When called by firefox
or other user apps they may not know what the domain
is (and they don't care). They just want to pass the
contents of $USERNAME without having to parse it
or guess a domain.
Jeremy.
(This used to be commit 5f51417916ed8bfc0dd08f44e669cb044fc83d01)

source3/utils/ntlm_auth.c

index c792b8e4707e07e46b88f9270265e2f63cafb97a..1d89c1df33b93d6dacead010d24053fc057f4994 100644 (file)
@@ -2274,6 +2274,37 @@ enum {
                }
        }
 
+       if (!opt_username || !*opt_username) {
+               x_fprintf(x_stderr, "username must be specified!\n\n");
+               poptPrintHelp(pc, stderr, 0);
+               exit(1);
+       } else {
+               char *domain = SMB_STRDUP(opt_username);
+               char *p = strchr_m(domain, *lp_winbind_separator());
+               if (p) {
+                       opt_username = p+1;
+                       *p = '\0';
+                       if (opt_domain && !strequal(opt_domain, domain)) {
+                               x_fprintf(x_stderr, "Domain specified in username (%s) "
+                                       "doesn't match specified domain (%s)!\n\n",
+                                       domain, opt_domain);
+                               poptPrintHelp(pc, stderr, 0);
+                               exit(1);
+                       }
+                       opt_domain = domain;
+               } else {
+                       SAFE_FREE(domain);
+               }
+       }
+
+       if (opt_domain == NULL || !*opt_domain) {
+               opt_domain = get_winbind_domain();
+       }
+
+       if (opt_workstation == NULL) {
+               opt_workstation = "";
+       }
+
        if (helper_protocol) {
                int i;
                for (i=0; i<NUM_HELPER_MODES; i++) {
@@ -2291,20 +2322,6 @@ enum {
                exit(1);
        }
 
-       if (!opt_username) {
-               x_fprintf(x_stderr, "username must be specified!\n\n");
-               poptPrintHelp(pc, stderr, 0);
-               exit(1);
-       }
-
-       if (opt_domain == NULL) {
-               opt_domain = get_winbind_domain();
-       }
-
-       if (opt_workstation == NULL) {
-               opt_workstation = "";
-       }
-
        if (opt_challenge.length) {
                if (!check_auth_crap()) {
                        exit(1);