* Fix retrieval of automatic DNS settings 2/2

svn path=/trunk/; revision=36797
This commit is contained in:
Johannes Anderwald 2008-10-17 19:04:00 +00:00
parent 71d93bc857
commit b12ad06d48
2 changed files with 10 additions and 10 deletions

View file

@ -103,8 +103,7 @@ HKEY FindAdapterKey( PDHCP_ADAPTER Adapter ) {
"SYSTEM\\CurrentControlSet\\Control\\Class\\"
"{4D36E972-E325-11CE-BFC1-08002BE10318}";
PCHAR TargetKeyNameStart =
"SYSTEM\\CurrentControlSet\\Services\\";
PCHAR TargetKeyNameEnd = "\\Parameters\\Tcpip";
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
PCHAR TargetKeyName = NULL;
PCHAR *EnumKeysLinkage = GetSubkeyNames( EnumKeyName, "\\Linkage" );
PCHAR *EnumKeysTop = GetSubkeyNames( EnumKeyName, "" );
@ -126,12 +125,11 @@ HKEY FindAdapterKey( PDHCP_ADAPTER Adapter ) {
!strcmp( RootDevice, Adapter->DhclientInfo.name ) ) {
TargetKeyName =
(CHAR*) malloc( strlen( TargetKeyNameStart ) +
strlen( RootDevice ) +
strlen( TargetKeyNameEnd ) + 1 );
strlen( RootDevice ) + 1);
if( !TargetKeyName ) goto cleanup;
sprintf( TargetKeyName, "%s%s%s",
TargetKeyNameStart, RootDevice, TargetKeyNameEnd );
Error = RegOpenKey( HKEY_LOCAL_MACHINE, TargetKeyName, &OutKey );
sprintf( TargetKeyName, "%s%s",
TargetKeyNameStart, RootDevice );
Error = RegCreateKeyExA( HKEY_LOCAL_MACHINE, TargetKeyName, 0, NULL, 0, KEY_READ, NULL, &OutKey, NULL );
break;
} else {
free( RootDevice ); RootDevice = 0;

View file

@ -450,8 +450,9 @@ dhcpack(struct packet *packet)
bind_lease(ip);
}
void set_name_servers( struct client_lease *new_lease ) {
void set_name_servers( PDHCP_ADAPTER Adapter, struct client_lease *new_lease ) {
if( new_lease->options[DHO_DOMAIN_NAME_SERVERS].len ) {
CHAR Buffer[200] = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
HKEY RegKey;
struct iaddr nameserver;
char *nsbuf;
@ -462,10 +463,11 @@ void set_name_servers( struct client_lease *new_lease ) {
addrs = 1;
nsbuf = malloc( addrs * sizeof(IP_ADDRESS_STRING) );
nsbuf[0] = 0;
strcat(Buffer, Adapter->DhclientInfo.name);
if( nsbuf && !RegOpenKeyEx
( HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters",
Buffer,
0, KEY_WRITE, &RegKey ) ) {
for( i = 0; i < addrs; i++ ) {
nameserver.len = sizeof(ULONG);
@ -567,7 +569,7 @@ bind_lease(struct interface_info *ip)
if( Adapter ) setup_adapter( Adapter, new_lease );
else warning("Could not find adapter for info %p\n", ip);
set_name_servers( new_lease );
set_name_servers( Adapter, new_lease );
reinitialize_interfaces();
}