|
|
b58328 |
From 52d90782c1a7ebe5bd984b7560d71a06fe3fb76b Mon Sep 17 00:00:00 2001
|
|
|
b58328 |
From: Alexander Bokovoy <abokovoy@redhat.com>
|
|
|
b58328 |
Date: Mon, 19 Aug 2019 10:15:50 +0300
|
|
|
b58328 |
Subject: [PATCH] ipa-extdom-extop: test timed out getgrgid_r
|
|
|
b58328 |
|
|
|
b58328 |
Simulate getgrgid_r() timeout when packing list of groups user is a
|
|
|
b58328 |
member of in pack_ber_user().
|
|
|
b58328 |
|
|
|
b58328 |
Related: https://pagure.io/freeipa/issue/8044
|
|
|
b58328 |
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
|
|
|
b58328 |
---
|
|
|
b58328 |
.../ipa_extdom_cmocka_tests.c | 29 +++++++++++++++++++
|
|
|
b58328 |
1 file changed, 29 insertions(+)
|
|
|
b58328 |
|
|
|
b58328 |
diff --git a/daemons/ipa-slapi-plugins/ipa-extdom-extop/ipa_extdom_cmocka_tests.c b/daemons/ipa-slapi-plugins/ipa-extdom-extop/ipa_extdom_cmocka_tests.c
|
|
|
b58328 |
index 29699cfa390f5469d7c009388b90e68616cbf984..1fa4c6af823d290412496b5823b90873375f2769 100644
|
|
|
b58328 |
--- a/daemons/ipa-slapi-plugins/ipa-extdom-extop/ipa_extdom_cmocka_tests.c
|
|
|
b58328 |
+++ b/daemons/ipa-slapi-plugins/ipa-extdom-extop/ipa_extdom_cmocka_tests.c
|
|
|
b58328 |
@@ -493,6 +493,34 @@ void test_set_err_msg(void **state)
|
|
|
b58328 |
#define TEST_SID "S-1-2-3-4"
|
|
|
b58328 |
#define TEST_DOMAIN_NAME "DOMAIN"
|
|
|
b58328 |
|
|
|
b58328 |
+/* Always time out for test */
|
|
|
b58328 |
+static
|
|
|
b58328 |
+enum nss_status getgrgid_r_timeout(gid_t gid, struct group *result,
|
|
|
b58328 |
+ char *buffer, size_t buflen, int *errnop) {
|
|
|
b58328 |
+ return NSS_STATUS_UNAVAIL;
|
|
|
b58328 |
+}
|
|
|
b58328 |
+
|
|
|
b58328 |
+void test_pack_ber_user_timeout(void **state)
|
|
|
b58328 |
+{
|
|
|
b58328 |
+ int ret;
|
|
|
b58328 |
+ struct berval *resp_val = NULL;
|
|
|
b58328 |
+ struct test_data *test_data;
|
|
|
b58328 |
+ enum nss_status (*oldgetgrgid_r)(gid_t gid, struct group *result,
|
|
|
b58328 |
+ char *buffer, size_t buflen, int *errnop);
|
|
|
b58328 |
+
|
|
|
b58328 |
+ test_data = (struct test_data *) *state;
|
|
|
b58328 |
+
|
|
|
b58328 |
+ oldgetgrgid_r = test_data->ctx->nss_ctx->getgrgid_r;
|
|
|
b58328 |
+ test_data->ctx->nss_ctx->getgrgid_r = getgrgid_r_timeout;
|
|
|
b58328 |
+
|
|
|
b58328 |
+ ret = pack_ber_user(test_data->ctx, RESP_USER_GROUPLIST,
|
|
|
b58328 |
+ TEST_DOMAIN_NAME, "member001", 12345, 54321,
|
|
|
b58328 |
+ "gecos", "homedir", "shell", NULL, &resp_val);
|
|
|
b58328 |
+ test_data->ctx->nss_ctx->getgrgid_r = oldgetgrgid_r;
|
|
|
b58328 |
+ assert_int_equal(ret, LDAP_TIMELIMIT_EXCEEDED);
|
|
|
b58328 |
+ ber_bvfree(resp_val);
|
|
|
b58328 |
+}
|
|
|
b58328 |
+
|
|
|
b58328 |
char res_sid[] = {0x30, 0x0e, 0x0a, 0x01, 0x01, 0x04, 0x09, 0x53, 0x2d, 0x31, \
|
|
|
b58328 |
0x2d, 0x32, 0x2d, 0x33, 0x2d, 0x34};
|
|
|
b58328 |
char res_nam[] = {0x30, 0x13, 0x0a, 0x01, 0x02, 0x30, 0x0e, 0x04, 0x06, 0x44, \
|
|
|
b58328 |
@@ -614,6 +642,7 @@ void test_decode(void **state)
|
|
|
b58328 |
int main(int argc, const char *argv[])
|
|
|
b58328 |
{
|
|
|
b58328 |
const struct CMUnitTest tests[] = {
|
|
|
b58328 |
+ cmocka_unit_test(test_pack_ber_user_timeout),
|
|
|
b58328 |
cmocka_unit_test(test_getpwnam_r_wrapper),
|
|
|
b58328 |
cmocka_unit_test(test_getpwuid_r_wrapper),
|
|
|
b58328 |
cmocka_unit_test(test_getgrnam_r_wrapper),
|
|
|
b58328 |
--
|
|
|
b58328 |
2.23.0
|
|
|
b58328 |
|