auth: Do not set an empty realm
authorAndreas Schneider <asn@samba.org>
Mon, 19 Sep 2016 13:59:34 +0000 (15:59 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 18 Feb 2019 12:39:20 +0000 (13:39 +0100)
Just remove the @ sign and use it as a username.

Signed-off-by: Andreas Schneider <asn@samba.org>
auth/credentials/credentials.c

index d5ab80636169396ae7d29555b99a8b8a0d016991..39c25adbdb6836e3e247ed62757f0caadbb9e899 100644 (file)
@@ -808,17 +808,28 @@ _PUBLIC_ void cli_credentials_parse_string(struct cli_credentials *credentials,
        }
 
        if ((p = strchr_m(uname,'@'))) {
-               /*
-                * We also need to set username and domain
-                * in order to undo the effect of
-                * cli_credentials_guess().
-                */
-               cli_credentials_set_username(credentials, uname, obtained);
-               cli_credentials_set_domain(credentials, "", obtained);
+               const char *realm = p + 1;
 
-               cli_credentials_set_principal(credentials, uname, obtained);
-               *p = 0;
-               cli_credentials_set_realm(credentials, p+1, obtained);
+               if (realm[0] == '\0') {
+                       *p = 0;
+
+                       /*
+                        * We also need to set username and domain
+                        * in order to undo the effect of
+                        * cli_credentials_guess().
+                        */
+                       cli_credentials_set_username(credentials,
+                                                    uname,
+                                                    obtained);
+                       cli_credentials_set_domain(credentials, "", obtained);
+               } else {
+                       cli_credentials_set_principal(credentials,
+                                                     uname,
+                                                     obtained);
+                       *p = 0;
+
+                       cli_credentials_set_realm(credentials, realm, obtained);
+               }
                return;
        } else if ((p = strchr_m(uname,'\\'))
                   || (p = strchr_m(uname, '/'))