- Delete old DhcpNameServer key when no nameservers could be obtained

- Close registry key when done

svn path=/trunk/; revision=36888
This commit is contained in:
Johannes Anderwald 2008-10-22 09:00:33 +00:00
parent ad02070158
commit 627d39b522

View file

@ -451,9 +451,16 @@ dhcpack(struct packet *packet)
} }
void set_name_servers( PDHCP_ADAPTER Adapter, struct client_lease *new_lease ) { void set_name_servers( PDHCP_ADAPTER Adapter, struct client_lease *new_lease ) {
CHAR Buffer[200] = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
HKEY RegKey;
strcat(Buffer, Adapter->DhclientInfo.name);
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, Buffer, 0, KEY_WRITE, &RegKey ) != ERROR_SUCCESS)
return;
if( new_lease->options[DHO_DOMAIN_NAME_SERVERS].len ) { if( new_lease->options[DHO_DOMAIN_NAME_SERVERS].len ) {
CHAR Buffer[200] = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
HKEY RegKey;
struct iaddr nameserver; struct iaddr nameserver;
char *nsbuf; char *nsbuf;
int i, addrs = int i, addrs =
@ -462,13 +469,9 @@ void set_name_servers( PDHCP_ADAPTER Adapter, struct client_lease *new_lease ) {
/* XXX I'm setting addrs to 1 until we are ready up the chain */ /* XXX I'm setting addrs to 1 until we are ready up the chain */
addrs = 1; addrs = 1;
nsbuf = malloc( addrs * sizeof(IP_ADDRESS_STRING) ); nsbuf = malloc( addrs * sizeof(IP_ADDRESS_STRING) );
nsbuf[0] = 0;
strcat(Buffer, Adapter->DhclientInfo.name);
if( nsbuf && !RegOpenKeyEx if( nsbuf) {
( HKEY_LOCAL_MACHINE, nsbuf[0] = 0;
Buffer,
0, KEY_WRITE, &RegKey ) ) {
for( i = 0; i < addrs; i++ ) { for( i = 0; i < addrs; i++ ) {
nameserver.len = sizeof(ULONG); nameserver.len = sizeof(ULONG);
memcpy( nameserver.iabuf, memcpy( nameserver.iabuf,
@ -480,12 +483,17 @@ void set_name_servers( PDHCP_ADAPTER Adapter, struct client_lease *new_lease ) {
DH_DbgPrint(MID_TRACE,("Setting DhcpNameserver: %s\n", nsbuf)); DH_DbgPrint(MID_TRACE,("Setting DhcpNameserver: %s\n", nsbuf));
RegSetValueEx( RegKey, "DhcpNameServer", 0, REG_SZ, RegSetValueExA( RegKey, "DhcpNameServer", 0, REG_SZ,
(LPBYTE)nsbuf, strlen(nsbuf) + 1); (LPBYTE)nsbuf, strlen(nsbuf) + 1 );
free( nsbuf );
} }
// free(NULL) is defined to be OK too
free( nsbuf ); } else {
RegDeleteValueW( RegKey, L"DhcpNameServer" );
} }
RegCloseKey( RegKey );
} }
void setup_adapter( PDHCP_ADAPTER Adapter, struct client_lease *new_lease ) { void setup_adapter( PDHCP_ADAPTER Adapter, struct client_lease *new_lease ) {