auth:creds:tests: Add test for password callback
authorAndreas Schneider <asn@samba.org>
Wed, 6 Dec 2023 12:16:26 +0000 (13:16 +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 ab4b25964a43a1ef550f10580ad395e178fe647e)

auth/credentials/tests/test_creds.c
selftest/knownfail.d/creds [new file with mode: 0644]

index a2f9642bfe0cf0440069237a511b1ebbe4125458..414dd46a6b07146d807d91e27376ae1ffa6123c3 100644 (file)
@@ -285,6 +285,37 @@ static void torture_creds_gensec_feature(void **state)
        assert_int_equal(creds->gensec_features, GENSEC_FEATURE_SIGN);
 }
 
+static const char *torture_get_password(struct cli_credentials *creds)
+{
+       return talloc_strdup(creds, "SECRET");
+}
+
+static void torture_creds_password_callback(void **state)
+{
+       TALLOC_CTX *mem_ctx = *state;
+       struct cli_credentials *creds = NULL;
+       const char *password = NULL;
+       enum credentials_obtained pwd_obtained = CRED_UNINITIALISED;
+       bool ok;
+
+       creds = cli_credentials_init(mem_ctx);
+       assert_non_null(creds);
+
+       ok = cli_credentials_set_domain(creds, "WURST", CRED_SPECIFIED);
+       assert_true(ok);
+       ok = cli_credentials_set_username(creds, "brot", CRED_SPECIFIED);
+       assert_true(ok);
+
+       ok = cli_credentials_set_password_callback(creds, torture_get_password);
+       assert_true(ok);
+       assert_int_equal(creds->password_obtained, CRED_CALLBACK);
+
+       password = cli_credentials_get_password_and_obtained(creds,
+                                                            &pwd_obtained);
+       assert_int_equal(pwd_obtained, CRED_CALLBACK_RESULT);
+       assert_string_equal(password, "SECRET");
+}
+
 int main(int argc, char *argv[])
 {
        int rc;
@@ -296,6 +327,7 @@ int main(int argc, char *argv[])
                cmocka_unit_test(torture_creds_parse_string),
                cmocka_unit_test(torture_creds_krb5_state),
                cmocka_unit_test(torture_creds_gensec_feature),
+               cmocka_unit_test(torture_creds_password_callback)
        };
 
        if (argc == 2) {
diff --git a/selftest/knownfail.d/creds b/selftest/knownfail.d/creds
new file mode 100644 (file)
index 0000000..09491f2
--- /dev/null
@@ -0,0 +1 @@
+^samba.unittests.credentials.torture_creds_password_callback.none