diff options
author | Bjørn Mork <bjorn@mork.no> | 2015-05-15 10:23:51 +0200 |
---|---|---|
committer | Bjørn Mork <bjorn@mork.no> | 2015-05-15 10:23:51 +0200 |
commit | 02013228914a1d17e8df15d4e2b7950469395a5c (patch) | |
tree | 48d2fbe2f5a5adb60cbeabc26fadaec8e0fa82ed /eperd/readresolv.c | |
parent | 9b3dbb454e8f8a463d5fe4541ee2001585527bc6 (diff) |
ripe-atlas-fw: imported version 45204520
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Diffstat (limited to 'eperd/readresolv.c')
-rw-r--r-- | eperd/readresolv.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/eperd/readresolv.c b/eperd/readresolv.c new file mode 100644 index 0000000..9d3b8c9 --- /dev/null +++ b/eperd/readresolv.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2013 RIPE NCC <atlas@ripe.net> + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. + */ + +#define LINEL (INET6_ADDRSTRLEN * 2) +#include "libbb.h" +#include "resolv.h" + +static void nameserver_ip_add (char *nsentry, char *ip_as_string) +{ + + strncpy (nsentry, ip_as_string, LINEL); + // printf("AA added nameserver %s\n", ip_as_string); + // printf("AA added nameserver to ns %s\n", nsentry); + return; +} + +static int resolv_conf_parse_line (char *nsentry, char *line) +{ + +#define NEXT_TOKEN strtok_r(NULL, delims, &strtok_state) + char *strtok_state; + static const char *const delims = " \t"; + char *const first_token = strtok_r(line, delims, &strtok_state); + + if (!first_token) return 0; + + if (!strcmp(first_token, "nameserver")) { + char *const nameserver = NEXT_TOKEN; + if (nameserver) { + if(nameserver[(strlen(nameserver) - 1)] == '\n') + nameserver[(strlen(nameserver) - 1)] = NULL; + nameserver_ip_add(nsentry, nameserver); + //printf("AA added nameserver %s\n", nsentry); + return 1; + } + } + return 0; +} + +int get_local_resolvers(char nslist[MAXNS][INET6_ADDRSTRLEN * 2]) +{ + char buf[LINEL]; + int i = 0; + + FILE *R = fopen ("/etc/resolv.conf", "r"); + if (R != NULL) { + while ( (fgets (buf, LINEL, R)) && (i < MAXNS)) { + if(resolv_conf_parse_line(nslist[i], buf) ) + i++; + } + fclose (R); + } + return i; +} |