summaryrefslogtreecommitdiffstats
path: root/src/tests/cmocka/test_ldap_auth.c
blob: a2c3559f5e933ab38185aded87985885f04a163d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
    Authors:
        Pavel Reichl <preichl@redhat.com>

    Copyright (C) 2015 Red Hat

    SSSD tests - ldap auth

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include <stdarg.h>
#include <stdlib.h>
#include <stddef.h>
#include <setjmp.h>
#include <unistd.h>
#include <sys/types.h>
#include <cmocka.h>

#include "tests/common_check.h"
#include "providers/ldap/ldap_auth.h"
#include "tests/cmocka/test_expire_common.h"

struct check_pwexpire_policy_wrap_indata {
    enum pwexpire type;
    void *time_fmt;
};

static void check_pwexpire_policy_wrap(void *in, void *_out)
{
    errno_t ret;
    struct check_pwexpire_policy_wrap_indata *data =
        (struct check_pwexpire_policy_wrap_indata*) in;

    ret = check_pwexpire_policy(data->type, data->time_fmt, NULL, 0);
    *(errno_t*)_out = ret;
}

static void test_pwexpire_krb(void **state)
{
    struct expire_test_ctx *tc;
    enum pwexpire type = PWEXPIRE_KERBEROS;
    errno_t ret;

    tc = talloc_get_type(*state, struct expire_test_ctx);
    assert_non_null(tc);

    ret = check_pwexpire_policy(type,
                                (void*) tc->invalid_longer_format, NULL, 0);
    assert_int_equal(ret, ERR_TIMESPEC_NOT_SUPPORTED);

    ret = check_pwexpire_policy(type, (void*) tc->invalid_format,
                                NULL, 0);
    assert_int_equal(ret, ERR_TIMESPEC_NOT_SUPPORTED);

    ret = check_pwexpire_policy(type, (void*) tc->past_time,
                                NULL, 0);
    assert_int_equal(ret, ERR_PASSWORD_EXPIRED);

    ret = check_pwexpire_policy(type, (void*) tc->future_time,
                                NULL, 0);
    assert_int_equal(ret, EOK);

    /* changing time zone has no effect as time of expiration is in UTC */
    struct check_pwexpire_policy_wrap_indata data;
    data.type = type;
    data.time_fmt = (void*)tc->future_time;
    expire_test_tz("GST-2",
                   check_pwexpire_policy_wrap,
                   (void*)&data,
                   (void*)&ret);
    assert_int_equal(ret, EOK);

    data.time_fmt = (void*)tc->past_time;
    expire_test_tz("GST-2",
                   check_pwexpire_policy_wrap,
                   (void*)&data,
                   (void*)&ret);
    assert_int_equal(ret, ERR_PASSWORD_EXPIRED);
}

int main(void)
{
    const struct CMUnitTest tests[] = {
        cmocka_unit_test_setup_teardown(test_pwexpire_krb,
                                        expire_test_setup,
                                        expire_test_teardown),
    };

    return cmocka_run_group_tests(tests, NULL, NULL);
}