auth: Return username in get_principal if it contains an '@'
authorAndreas Schneider <asn@samba.org>
Thu, 6 Oct 2016 06:47:40 +0000 (08:47 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 18 Feb 2019 12:39:20 +0000 (13:39 +0100)
Signed-off-by: Andreas Schneider <asn@samba.org>
auth/credentials/credentials.c

index 3571468ea2743fad2f1793080c6a4f8c4c06f298..34eb5b6f95ab93ab60bc39008fec5d8c805a3938 100644 (file)
@@ -196,6 +196,9 @@ _PUBLIC_ const char *cli_credentials_get_bind_dn(struct cli_credentials *cred)
  */
 _PUBLIC_ char *cli_credentials_get_principal_and_obtained(struct cli_credentials *cred, TALLOC_CTX *mem_ctx, enum credentials_obtained *obtained)
 {
+       const char *username = cli_credentials_get_username(cred);
+       const char *p;
+
        if (cred->machine_account_pending) {
                cli_credentials_set_machine_account(cred,
                                        cred->machine_account_pending_lp_ctx);
@@ -212,6 +215,12 @@ _PUBLIC_ char *cli_credentials_get_principal_and_obtained(struct cli_credentials
                }
        }
 
+       p = strchr_m(username, '@');
+       if (p != NULL) {
+               *obtained = cred->username_obtained;
+               return talloc_strdup(mem_ctx, username);
+       }
+
        if (cred->principal_obtained < cred->username_obtained
            || cred->principal_obtained < MAX(cred->domain_obtained, cred->realm_obtained)) {
                const char *effective_username = NULL;