auth/credentials: let cli_credentials_parse_string() always reset username and domain
authorStefan Metzmacher <metze@samba.org>
Fri, 9 Dec 2016 11:20:19 +0000 (12:20 +0100)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 20 Dec 2016 00:11:24 +0000 (01:11 +0100)
If cli_credentials_parse_string() is used we should no longer use
any guessed values and need to make sure username and domain
are reset if principal and realm are set.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
auth/credentials/credentials.c
python/samba/tests/credentials.py

index a0f91e92b732d1ff79c86ceb2f90d63987f0d0bc..cca772d9f41c1acccd6b64b680731acf4d8984a7 100644 (file)
@@ -781,6 +781,14 @@ _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);
+
                cli_credentials_set_principal(credentials, uname, obtained);
                *p = 0;
                cli_credentials_set_realm(credentials, p+1, obtained);
index 8bfab7ad8238c9df6381c79ace2b40cd786bc426..82a8ad90ff7b39906ed0f1f5e5aa644aa8f8af57 100644 (file)
@@ -229,8 +229,8 @@ class CredentialsTests(samba.tests.TestCaseInTempDir):
         os.environ["USER"] = "env_user"
         creds.guess(lp)
         creds.parse_string("user@samba.org")
-        self.assertEqual(creds.get_username(), "env_user")
-        self.assertEqual(creds.get_domain(), lp.get("workgroup").upper())
+        self.assertEqual(creds.get_username(), "user@samba.org")
+        self.assertEqual(creds.get_domain(), "")
         self.assertEqual(creds.get_realm(), "SAMBA.ORG")
         self.assertEqual(creds.get_principal(), "user@samba.org")
         self.assertEqual(creds.is_anonymous(), False)
@@ -270,8 +270,8 @@ class CredentialsTests(samba.tests.TestCaseInTempDir):
         os.environ["USER"] = "env_user"
         creds.guess(lp)
         creds.parse_string("user@samba.org%pass")
-        self.assertEqual(creds.get_username(), "env_user")
-        self.assertEqual(creds.get_domain(), lp.get("workgroup").upper())
+        self.assertEqual(creds.get_username(), "user@samba.org")
+        self.assertEqual(creds.get_domain(), "")
         self.assertEqual(creds.get_password(), "pass")
         self.assertEqual(creds.get_realm(), "SAMBA.ORG")
         self.assertEqual(creds.get_principal(), "user@samba.org")