X-Git-Url: http://git.asbjorn.biz/?p=debian%2Fdhcpd-pools.git;a=blobdiff_plain;f=src%2Fgetdata.c;h=133485583e462d4f6f1e8f614d0b5eaed6a10524;hp=44860863dc842b8a5ca5d24c030be409b988417e;hb=b492802dfa7bf928bbafe74194ca4f154c70f743;hpb=17429ef85bfb4bdf51f4a659443fe4c31c972928 diff --git a/src/getdata.c b/src/getdata.c index 4486086..1334855 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -60,9 +60,10 @@ extern char *malloc(); int parse_leases(void) { FILE *dhcpd_leases; - char *line, *ipstring, *macstring, *macstring2; + char *line, *ipstring, *macstring = NULL; struct in_addr inp; struct stat lease_file_stats; + struct macaddr_t *macaddr_p = NULL; unsigned long leasesmallocsize; unsigned long touchesmallocsize; unsigned long backupsmallocsize; @@ -78,13 +79,15 @@ int parse_leases(void) #ifdef POSIX_FADV_WILLNEED posix_fadvise((long) dhcpd_leases, 0, 0, POSIX_FADV_WILLNEED); if (errno) { - err(EXIT_FAILURE, "parse_leases: fadvise %s", config.dhcpdlease_file); + err(EXIT_FAILURE, "parse_leases: fadvise %s", + config.dhcpdlease_file); } #endif /* POSIX_FADV_WILLNEED */ #ifdef POSIX_FADV_SEQUENTIAL posix_fadvise((long) dhcpd_leases, 0, 0, POSIX_FADV_SEQUENTIAL); if (errno) { - err(EXIT_FAILURE, "parse_leases: fadvise %s", config.dhcpdlease_file); + err(EXIT_FAILURE, "parse_leases: fadvise %s", + config.dhcpdlease_file); } #endif /* POSIX_FADV_SEQUENTIAL */ @@ -105,8 +108,12 @@ int parse_leases(void) line = safe_malloc(sizeof(long int) * MAXLEN); ipstring = safe_malloc(sizeof(long int) * MAXLEN); - macstring = safe_malloc(sizeof(long int) * MAXLEN); - macstring2 = safe_malloc(sizeof(long int) * MAXLEN); + if (config.output_format[0] == 'X') { + macstring = safe_malloc(sizeof(char) * 18); + macaddr = safe_malloc(sizeof(struct macaddr_t)); + macaddr_p = macaddr; + macaddr_p->next = NULL; + } while (!feof(dhcpd_leases)) { fgets(line, MAXLEN, dhcpd_leases); @@ -138,19 +145,25 @@ int parse_leases(void) assert(!(backupsmallocsize < num_backups)); } - /* FIXME: move to output.c and use the FILE - * *outfile */ - if ((config.output_format[0] == 'X') + if ((macaddr != NULL) && (sw_active_lease == 1) && (strstr(line, "hardware ethernet"))) { nth_field(3, macstring, line); - macstring[strlen(macstring) - 1] = '\0'; - - printf - ("\n\t%s\n\t%s\n\n", - ipstring, macstring); + macstring[17] = '\0'; + macaddr_p->ethernet = safe_strdup(macstring); + macaddr_p->ip = safe_strdup(ipstring); + macaddr_p->next = + safe_malloc(sizeof(struct macaddr_t)); + macaddr_p = macaddr_p->next; + macaddr_p->next = NULL; } } + free(line); + free(ipstring); + if (macaddr != NULL) { + free(macstring); + } + fclose(dhcpd_leases); return 0; } @@ -373,9 +386,14 @@ char *parse_config(int is_include, char *config_file, range_p->backups = 0; range_p->shared_net = shared_p; num_ranges++; - if (RANGES < num_ranges) { - errx(EXIT_FAILURE, - "parse_config: Range space full! Increase RANGES and recompile."); + if (RANGES < num_ranges + 1) { + RANGES *= 2; + ranges = + safe_realloc(ranges, + sizeof(struct + range_t) * + RANGES); + range_p = ranges + num_ranges; } newclause = true; break; @@ -414,7 +432,15 @@ char *parse_config(int is_include, char *config_file, * away by reallocationg * more space. */ errx(EXIT_FAILURE, - "parse_config: End of shared-network space, increase SHARED_NETWORKS_NAMES and recompile"); + "parse_config: increase default.h SHARED_NETWORKS_NAMES and recompile"); + } + if (SHARED_NETWORKS < + num_shared_networks + 2) { + /* FIXME: make this + * away by reallocationg + * more space. */ + errx(EXIT_FAILURE, + "parse_config: increase default.h SHARED_NETWORKS and recompile"); } argument = 0; braces_shared = braces; @@ -440,5 +466,6 @@ char *parse_config(int is_include, char *config_file, } } free(word); + fclose(dhcpd_config); return next_free_shared_name; }