auth:creds: Add cli_credentials_get_domain_and_obtained()
authorAndreas Schneider <asn@samba.org>
Wed, 6 Dec 2023 12:26:43 +0000 (13:26 +0100)
committerJule Anger <janger@samba.org>
Tue, 12 Dec 2023 09:02:18 +0000 (09:02 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15532

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
(cherry picked from commit a7622bc7db093558c6f6e3da4d2a899a764dec09)

auth/credentials/credentials.c
auth/credentials/credentials.h
auth/credentials/tests/test_creds.c

index 8cabdd8d1c3fe5beab1eb273195c41619db5a9e8..7a00279b8b46848b522ce60142d9918dd6c5d27e 100644 (file)
@@ -738,6 +738,28 @@ _PUBLIC_ const char *cli_credentials_get_domain(struct cli_credentials *cred)
        return cred->domain;
 }
 
+/**
+ * @brief Obtain the domain for this credential context.
+ *
+ * @param[in] cred  The credential context.
+ *
+ * @param[out] obtained A pointer to store the obtained information.
+ *
+ * @return The domain name or NULL if an error occurred.
+ */
+_PUBLIC_ const char *cli_credentials_get_domain_and_obtained(
+       struct cli_credentials *cred,
+       enum credentials_obtained *obtained)
+{
+       const char *domain = cli_credentials_get_domain(cred);
+
+       if (obtained != NULL) {
+               *obtained = cred->domain_obtained;
+       }
+
+       return domain;
+}
+
 
 _PUBLIC_ bool cli_credentials_set_domain(struct cli_credentials *cred,
                                const char *val,
index c3a048ecc8de932f3060d4679482c03707bc349f..c5ffe536e071b918460e100f601689623dbd88cf 100644 (file)
@@ -127,6 +127,9 @@ int cli_credentials_get_keytab(struct cli_credentials *cred,
                               struct loadparm_context *lp_ctx,
                               struct keytab_container **_ktc);
 const char *cli_credentials_get_domain(struct cli_credentials *cred);
+const char *cli_credentials_get_domain_and_obtained(
+       struct cli_credentials *cred,
+       enum credentials_obtained *obtained);
 struct netlogon_creds_CredentialState *cli_credentials_get_netlogon_creds(struct cli_credentials *cred);
 void cli_credentials_set_machine_account_pending(struct cli_credentials *cred,
                                                 struct loadparm_context *lp_ctx);
index 414dd46a6b07146d807d91e27376ae1ffa6123c3..2cb2e6d0e3428d07d865943d03deb4d2cdaeab11 100644 (file)
@@ -48,6 +48,7 @@ static void torture_creds_init(void **state)
        const char *username = NULL;
        const char *domain = NULL;
        const char *password = NULL;
+       enum credentials_obtained dom_obtained = CRED_UNINITIALISED;
        enum credentials_obtained usr_obtained = CRED_UNINITIALISED;
        enum credentials_obtained pwd_obtained = CRED_UNINITIALISED;
        bool ok;
@@ -65,6 +66,11 @@ static void torture_creds_init(void **state)
        domain = cli_credentials_get_domain(creds);
        assert_string_equal(domain, "WURST");
 
+       domain = cli_credentials_get_domain_and_obtained(creds,
+                                                        &dom_obtained);
+       assert_int_equal(dom_obtained, CRED_SPECIFIED);
+       assert_string_equal(domain, "WURST");
+
        username = cli_credentials_get_username(creds);
        assert_null(username);
        ok = cli_credentials_set_username(creds, "brot", CRED_SPECIFIED);