4 #include <nagios/lib/dkhash.h>
6 static dkhash_table
*auth_hosts
, *auth_services
;
7 static int blocksize
= 1 << 20;
9 int auth_host_ok(const char *host
)
11 return !!dkhash_get(auth_hosts
, host
, NULL
);
14 int auth_service_ok(const char *host
, const char *svc
)
16 return !!(dkhash_get(auth_services
, host
, svc
) || auth_host_ok(host
));
19 int auth_read_input(FILE *input
)
21 auth_hosts
= dkhash_create(8192);
22 auth_services
= dkhash_create(131072);
25 char *objectstr
, *alloced
;
26 int tot_read
= 0, len
= 0;
27 alloced
= objectstr
= malloc(blocksize
);
28 while ((len
= fread(objectstr
, 1, blocksize
- tot_read
- 1, input
)) > 0) {
30 alloced
[tot_read
] = 0;
31 if (tot_read
+ 1 >= blocksize
) {
33 alloced
= objectstr
= realloc(alloced
, blocksize
);
35 objectstr
= alloced
+ tot_read
;
37 alloced
[tot_read
] = 0;
42 hostend
= strpbrk(objectstr
, "\n;");
47 dkhash_insert(auth_hosts
, strdup(objectstr
), NULL
, (void*)1);
50 objectstr
= hostend
+ 1;
60 hostend
= strpbrk(objectstr
, "\n;");
63 if (*hostend
== '\n') {
64 // invalid. let's ignore the odd hostname
67 svcend
= strpbrk(hostend
+1, "\n;");
73 dkhash_insert(auth_services
, strdup(objectstr
), strdup(hostend
+ 1), (void*)1);
76 objectstr
= svcend
+ 1;