mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-29 13:28:14 +00:00
Support referring to hosts by name and recording them in the lease database.
This commit is contained in:
parent
16be393750
commit
dc24669481
@ -22,27 +22,34 @@
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
"$Id: memory.c,v 1.53 1999/07/31 17:57:27 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
|
||||
"$Id: memory.c,v 1.54 1999/09/08 01:44:57 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "dhcpd.h"
|
||||
|
||||
static struct subnet *subnets;
|
||||
static struct shared_network *shared_networks;
|
||||
static struct hash_table *host_hw_addr_hash;
|
||||
static struct hash_table *host_uid_hash;
|
||||
static struct hash_table *lease_uid_hash;
|
||||
static struct hash_table *lease_ip_addr_hash;
|
||||
static struct hash_table *lease_hw_addr_hash;
|
||||
struct hash_table *host_hw_addr_hash;
|
||||
struct hash_table *host_uid_hash;
|
||||
struct hash_table *lease_uid_hash;
|
||||
struct hash_table *lease_ip_addr_hash;
|
||||
struct hash_table *lease_hw_addr_hash;
|
||||
struct hash_table *host_name_hash;
|
||||
static struct lease *dangling_leases;
|
||||
static struct host_decl *dynamic_hosts;
|
||||
|
||||
void enter_host (hd)
|
||||
void enter_host (hd, dynamicp)
|
||||
struct host_decl *hd;
|
||||
int dynamicp;
|
||||
{
|
||||
struct host_decl *hp = (struct host_decl *)0;
|
||||
struct host_decl *np = (struct host_decl *)0;
|
||||
struct executable_statement *esp;
|
||||
|
||||
if (dynamicp) {
|
||||
hd -> n_dynamic = dynamic_hosts;
|
||||
dynamic_hosts = hd -> n_dynamic;
|
||||
}
|
||||
hd -> n_ipaddr = (struct host_decl *)0;
|
||||
|
||||
if (hd -> interface.hlen) {
|
||||
@ -128,6 +135,28 @@ void enter_host (hd)
|
||||
(unsigned char *)hd);
|
||||
}
|
||||
}
|
||||
|
||||
if (!host_name_hash) {
|
||||
host_name_hash = new_hash ();
|
||||
if (!host_name_hash)
|
||||
log_fatal ("Can't allocate host/hw hash");
|
||||
} else {
|
||||
hp = (struct host_decl *)
|
||||
hash_lookup (host_name_hash,
|
||||
hd -> name,
|
||||
strlen (hd -> name));
|
||||
|
||||
/* If there isn't already a host decl matching this
|
||||
address, add it to the hash table. */
|
||||
if (!hp)
|
||||
add_hash (host_name_hash,
|
||||
hd -> name, strlen (hd -> name),
|
||||
(unsigned char *)hd);
|
||||
else
|
||||
/* XXX actually, we have to delete the old one
|
||||
XXX carefully and replace it. Not done yet. */
|
||||
log_fatal ("duplicate hostname: %s!", hd -> name);
|
||||
}
|
||||
}
|
||||
|
||||
struct host_decl *find_hosts_by_haddr (htype, haddr, hlen)
|
||||
@ -880,7 +909,13 @@ void write_leases ()
|
||||
struct lease *l;
|
||||
struct shared_network *s;
|
||||
struct pool *p;
|
||||
struct host_decl *hp;
|
||||
|
||||
/* Write all the dynamically-created host declarations. */
|
||||
for (hp = dynamic_hosts; hp; hp = hp -> n_dynamic)
|
||||
write_host (hp);
|
||||
|
||||
/* Write all the leases. */
|
||||
for (s = shared_networks; s; s = s -> next) {
|
||||
for (p = s -> pools; p; p = p -> next) {
|
||||
for (l = p -> leases; l; l = l -> next) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user