X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;ds=inline;f=src%2Fgetdata.c;h=2c5e627ba0fed64a7455d190782e98f4b5802b9b;hb=a31fd0d97ab18115198b33160ffc390f50d8b2f6;hp=fe513aeabef8058ba700eb62ddaef44e22436e54;hpb=171ff1d7045de1059556f674470aa87a853563f0;p=debian%2Fdhcpd-pools.git diff --git a/src/getdata.c b/src/getdata.c index fe513ae..2c5e627 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -1,28 +1,42 @@ -/* 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 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, see . -*/ +/* + * The dhcpd-pools has BSD 2-clause license which also known as "Simplified + * BSD License" or "FreeBSD License". + * + * Copyright 2006- Sami Kerola. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are + * those of the authors and should not be interpreted as representing + * official policies, either expressed or implied, of Sami Kerola. + */ #ifdef HAVE_CONFIG_H #include #endif -#ifdef HAVE_UNISTD_H -#include -#endif - #ifdef HAVE_STDLIB_H #include #else /* Not STDC_HEADERS */ @@ -37,20 +51,20 @@ extern char *malloc(); #include #endif -#include #include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include #include -#include #ifndef _XOPEN_SOURCE #define _XOPEN_SOURCE 600 #endif -#include -#include -#include -#include -#include #include "dhcpd-pools.h" #include "defaults.h" @@ -60,10 +74,10 @@ extern char *malloc(); int parse_leases(void) { FILE *dhcpd_leases; - char *line, *ipstring, *macstring; + char *line, *ipstring, *macstring = NULL; struct in_addr inp; struct stat lease_file_stats; - struct macaddr_t *macaddr_p; + struct macaddr_t *macaddr_p = NULL; unsigned long leasesmallocsize; unsigned long touchesmallocsize; unsigned long backupsmallocsize; @@ -163,6 +177,7 @@ int parse_leases(void) if (macaddr != NULL) { free(macstring); } + fclose(dhcpd_leases); return 0; } @@ -211,10 +226,8 @@ int is_interesting_config_clause(char *s) } /* FIXME: This spagetti monster function need to be rewrote at least ones. */ -char *parse_config(int is_include, char *config_file, - char *current_shared_name, - char *next_free_shared_name, - struct shared_network_t *shared_p) +void parse_config(int is_include, char *config_file, + struct shared_network_t *shared_p) { FILE *dhcpd_config; int i = 0, newclause = true, argument = false, comment = @@ -224,14 +237,11 @@ char *parse_config(int is_include, char *config_file, struct in_addr inp; struct range_t *range_p; - char *last_shared_name; - last_shared_name = SHARED_NETWORKS_NAMES + shared_net_names; - word = safe_malloc(sizeof(char) * MAXLEN); if (is_include) { /* Default place holder for ranges "All networks". */ - shared_p->name = current_shared_name; + shared_p->name = shared_networks->name; } /* Open configuration file */ @@ -318,8 +328,6 @@ char *parse_config(int is_include, char *config_file, braces--; /* End of shared-network */ if (braces_shared == braces) { - current_shared_name = - shared_net_names; /* FIXME: Using 1000 is lame, but * works. */ braces_shared = 1000; @@ -385,9 +393,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; @@ -404,29 +417,21 @@ char *parse_config(int is_include, char *config_file, break; case 1: /* printf ("shared-network named: %s\n", word); */ - strcpy(next_free_shared_name, word); + num_shared_networks++; shared_p = shared_networks + num_shared_networks; - num_shared_networks++; - shared_p++; - shared_p->name = next_free_shared_name; + shared_p->name = safe_strdup(word); shared_p->available = 0; shared_p->used = 0; shared_p->touched = 0; shared_p->backups = 0; - /* Temporary abuse of argument - * variable */ - argument = - strlen(next_free_shared_name) + 1; - if (next_free_shared_name + argument < - last_shared_name) { - next_free_shared_name += argument; - } else { - /* FIXME: make this go + if (SHARED_NETWORKS < + num_shared_networks + 2) { + /* FIXME: make this * 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 and recompile"); } argument = 0; braces_shared = braces; @@ -434,11 +439,7 @@ char *parse_config(int is_include, char *config_file, case 4: /* printf ("include file: %s\n", word); */ argument = 0; - next_free_shared_name = - parse_config(false, word, - current_shared_name, - next_free_shared_name, - shared_p); + parse_config(false, word, shared_p); newclause = true; break; case 0: @@ -452,5 +453,6 @@ char *parse_config(int is_include, char *config_file, } } free(word); - return next_free_shared_name; + fclose(dhcpd_config); + return; }