summaryrefslogtreecommitdiff
path: root/data/lighttpd/lighttpd-1.4.53/src/t/test_mod_access.c
blob: 820cee4c797589925b9ab9e53b4a3a89e8a415a3 (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
#include "first.h"

#undef NDEBUG
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>

#include "mod_access.c"

static void test_mod_access_check(void) {
    array *allow    = array_init();
    array *deny     = array_init();
    buffer *urlpath = buffer_init();
    int lc = 0;

    /* empty allow and deny lists */
    buffer_copy_string_len(urlpath, CONST_STR_LEN("/"));
    assert(1 == mod_access_check(allow, deny, urlpath, lc));

    array_insert_value(deny, CONST_STR_LEN("~"));
    array_insert_value(deny, CONST_STR_LEN(".inc"));

    /* deny */
    buffer_copy_string_len(urlpath, CONST_STR_LEN("/index.html~"));
    assert(0 == mod_access_check(allow, deny, urlpath, lc));
    lc = 1;
    buffer_copy_string_len(urlpath, CONST_STR_LEN("/index.INC"));
    assert(0 == mod_access_check(allow, deny, urlpath, lc));
    lc = 0;

    array_insert_value(allow, CONST_STR_LEN(".txt"));
    array_insert_value(deny, CONST_STR_LEN(".txt"));/* allow takes precedence */

    /* explicitly allowed */
    buffer_copy_string_len(urlpath, CONST_STR_LEN("/ssi-include.txt"));
    assert(1 == mod_access_check(allow, deny, urlpath, lc));
    lc = 1;
    buffer_copy_string_len(urlpath, CONST_STR_LEN("/ssi-include.TXT"));
    assert(1 == mod_access_check(allow, deny, urlpath, lc));
    lc = 0;

    /* allow not empty and urlpath not explicitly allowed */
    buffer_copy_string_len(urlpath, CONST_STR_LEN("/cgi.pl"));
    assert(0 == mod_access_check(allow, deny, urlpath, lc));

    array_free(allow);
    array_free(deny);
    buffer_free(urlpath);
}

int main (void) {
    test_mod_access_check();

    return 0;
}