db_updater: Put parentheses back
[merlin.git] / auth.c
blob7daf67bbcce66b2463e77686c8069c28b464f941
1 #include "logutils.h"
2 #include "cfgfile.h"
3 #include "auth.h"
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);
23 if (!input)
24 return 0;
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) {
29 tot_read += len;
30 alloced[tot_read] = 0;
31 if (tot_read + 1 >= blocksize) {
32 blocksize *= 2;
33 alloced = objectstr = realloc(alloced, blocksize);
35 objectstr = alloced + tot_read;
37 alloced[tot_read] = 0;
38 objectstr = alloced;
39 char *hostend;
40 while (1) {
41 char delim;
42 hostend = strpbrk(objectstr, "\n;");
43 if (hostend) {
44 delim = *hostend;
45 *hostend = 0;
47 dkhash_insert(auth_hosts, strdup(objectstr), NULL, (void*)1);
48 if (!hostend)
49 break;
50 objectstr = hostend + 1;
51 if (delim == '\n')
52 break;
54 if (!hostend) {
55 goto error_out;
57 char *svcend;
58 while (1) {
59 char delim;
60 hostend = strpbrk(objectstr, "\n;");
61 if (!hostend)
62 break;
63 if (*hostend == '\n') {
64 // invalid. let's ignore the odd hostname
65 goto error_out;
67 svcend = strpbrk(hostend+1, "\n;");
68 *hostend = 0;
69 if (svcend) {
70 delim = *svcend;
71 *svcend = 0;
73 dkhash_insert(auth_services, strdup(objectstr), strdup(hostend + 1), (void*)1);
74 if (!svcend)
75 break;
76 objectstr = svcend + 1;
77 if (delim == '\n')
78 break;
80 free (alloced);
81 return 0;
82 error_out:
83 free(alloced);
84 return 1;