X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fgetdata.c;h=fe513aeabef8058ba700eb62ddaef44e22436e54;hb=171ff1d7045de1059556f674470aa87a853563f0;hp=b1e79b959deb9d57025e51c699ce7e8cacdeac18;hpb=849c8f5e73d671c7f9e3f74f0652a0876d7a2787;p=debian%2Fdhcpd-pools.git diff --git a/src/getdata.c b/src/getdata.c index b1e79b9..fe513ae 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -1,19 +1,18 @@ -/* -** Copyright (C) 2006- Sami Kerola -** -** This program is free software; you can redistribute it and/or modify +/* http://dhcpd-pools.sourceforge.net/ +** Copyright 2006- Sami Kerola +** +** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by -** the Free Software Foundation; either version 2 of the License, or +** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. -** +** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. -** +** ** You should have received a copy of the GNU General Public License -** along with this program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +** along with this program. If not, see . */ #ifdef HAVE_CONFIG_H @@ -61,9 +60,10 @@ extern char *malloc(); int parse_leases(void) { FILE *dhcpd_leases; - char *line, *ipstring, *macstring, *macstring2; + char *line, *ipstring, *macstring; struct in_addr inp; struct stat lease_file_stats; + struct macaddr_t *macaddr_p; unsigned long leasesmallocsize; unsigned long touchesmallocsize; unsigned long backupsmallocsize; @@ -76,16 +76,18 @@ int parse_leases(void) err(EXIT_FAILURE, "parse_leases: %s", config.dhcpdlease_file); } -#ifdef POSIX_FADV_NOREUSE - posix_fadvise((long) dhcpd_leases, 0, 0, POSIX_FADV_NOREUSE); +#ifdef POSIX_FADV_WILLNEED + posix_fadvise((long) dhcpd_leases, 0, 0, POSIX_FADV_WILLNEED); if (errno) { - err(EXIT_FAILURE, "parse_leases: fadvise noreuse"); + err(EXIT_FAILURE, "parse_leases: fadvise %s", + config.dhcpdlease_file); } -#endif /* POSIX_FADV_NOREUSE */ +#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 sequential"); + err(EXIT_FAILURE, "parse_leases: fadvise %s", + config.dhcpdlease_file); } #endif /* POSIX_FADV_SEQUENTIAL */ @@ -106,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); @@ -139,19 +145,24 @@ 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); + } return 0; } @@ -228,16 +239,16 @@ char *parse_config(int is_include, char *config_file, if (dhcpd_config == NULL) { err(EXIT_FAILURE, "parse_config: %s", config_file); } -#ifdef POSIX_FADV_NOREUSE - posix_fadvise((long) dhcpd_config, 0, 0, POSIX_FADV_NOREUSE); +#ifdef POSIX_FADV_WILLNEED + posix_fadvise((long) dhcpd_config, 0, 0, POSIX_FADV_WILLNEED); if (errno) { - err(EXIT_FAILURE, "parse_config: fadvise noreuse"); + err(EXIT_FAILURE, "parse_config: fadvise %s", config_file); } -#endif /* POSIX_FADV_NOREUSE */ +#endif /* POSIX_FADV_WILLNEED */ #ifdef POSIX_FADV_SEQUENTIAL posix_fadvise((long) dhcpd_config, 0, 0, POSIX_FADV_SEQUENTIAL); if (errno) { - err(EXIT_FAILURE, "parse_config: fadvise sequential"); + err(EXIT_FAILURE, "parse_config: fadvise %s", config_file); } #endif /* POSIX_FADV_SEQUENTIAL */