From: Ted Lemon Date: Thu, 9 Sep 1999 23:33:18 +0000 (+0000) Subject: Support host declarations that delete previous host declarations. X-Git-Tag: V3-BETA-1-PATCH-2~5^2~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fafd89d21def69409f270a1c8b4fb98bb7ebb733;p=thirdparty%2Fdhcp.git Support host declarations that delete previous host declarations. --- diff --git a/server/db.c b/server/db.c index 396e0cdd6..29a015d12 100644 --- a/server/db.c +++ b/server/db.c @@ -22,7 +22,7 @@ #ifndef lint static char copyright[] = -"$Id: db.c,v 1.26 1999/09/08 01:49:56 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; +"$Id: db.c,v 1.27 1999/09/09 23:33:18 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -194,60 +194,72 @@ int write_host (host) ++errors; } - errno = 0; - fprintf (db_file, "\n\tdynamic;"); - if (errno) - ++errors; - if (host -> interface.hlen) { + if (host -> flags & HOST_DECL_DYNAMIC) { errno = 0; - fprintf (db_file, "\n\thardware %s %s;", - hardware_types [host -> interface.htype], - print_hw_addr (host -> interface.htype, - host -> interface.hlen, - host -> interface.haddr)); - if (errno) { + fprintf (db_file, "\n\tdynamic;"); + if (errno) ++errors; - } } - if (host -> client_identifier.len) { - int i; + + if (host -> flags & HOST_DECL_DELETED) { errno = 0; - fprintf (db_file, "\n\toption dhcp-client-identifier %2.2x", - host -> client_identifier.data [0]); - if (errno) { + fprintf (db_file, "\n\tdeleted;"); + if (errno) ++errors; + } else { + if (host -> interface.hlen) { + errno = 0; + fprintf (db_file, "\n\thardware %s %s;", + hardware_types [host -> interface.htype], + print_hw_addr (host -> interface.htype, + host -> interface.hlen, + host -> interface.haddr)); + if (errno) { + ++errors; + } } - for (i = 1; i < host -> client_identifier.len; i++) { + if (host -> client_identifier.len) { + int i; errno = 0; - fprintf (db_file, ":%2.2x", - host -> client_identifier.data [i]); + fprintf (db_file, + "\n\toption dhcp-client-identifier %2.2x", + host -> client_identifier.data [0]); if (errno) { ++errors; } + for (i = 1; i < host -> client_identifier.len; i++) { + errno = 0; + fprintf (db_file, ":%2.2x", + host -> client_identifier.data [i]); + if (errno) { + ++errors; + } + } + putc (';', db_file); } - putc (';', db_file); - } - - if (host -> fixed_addr && - evaluate_option_cache (&ip_addrs, (struct packet *)0, - (struct lease *)0, - (struct option_state *)0, - (struct option_state *)0, - host -> fixed_addr)) { - fprintf (db_file, "\n\tfixed-address "); - if (errno) { - ++errors; - } - for (i = 0; i < ip_addrs.len - 3; i += 4) { - fprintf (db_file, "\n\t%d.%d.%d.%d%s", - ip_addrs.data [i], ip_addrs.data [i + 1], - ip_addrs.data [i + 2], ip_addrs.data [i + 3], - i + 7 < ip_addrs.len ? "," : ""); - + if (host -> fixed_addr && + evaluate_option_cache (&ip_addrs, (struct packet *)0, + (struct lease *)0, + (struct option_state *)0, + (struct option_state *)0, + host -> fixed_addr)) { + + fprintf (db_file, "\n\tfixed-address "); if (errno) { ++errors; } + for (i = 0; i < ip_addrs.len - 3; i += 4) { + fprintf (db_file, "\n\t%d.%d.%d.%d%s", + ip_addrs.data [i], + ip_addrs.data [i + 1], + ip_addrs.data [i + 2], + ip_addrs.data [i + 3], + i + 7 < ip_addrs.len ? "," : ""); + if (errno) { + ++errors; + } + } } }