mirror of
https://github.com/reactos/reactos.git
synced 2024-08-04 18:40:59 +00:00
* Fix retrieval of automatic DNS settings 2/2
svn path=/trunk/; revision=36797
This commit is contained in:
parent
71d93bc857
commit
b12ad06d48
|
@ -103,8 +103,7 @@ HKEY FindAdapterKey( PDHCP_ADAPTER Adapter ) {
|
||||||
"SYSTEM\\CurrentControlSet\\Control\\Class\\"
|
"SYSTEM\\CurrentControlSet\\Control\\Class\\"
|
||||||
"{4D36E972-E325-11CE-BFC1-08002BE10318}";
|
"{4D36E972-E325-11CE-BFC1-08002BE10318}";
|
||||||
PCHAR TargetKeyNameStart =
|
PCHAR TargetKeyNameStart =
|
||||||
"SYSTEM\\CurrentControlSet\\Services\\";
|
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
|
||||||
PCHAR TargetKeyNameEnd = "\\Parameters\\Tcpip";
|
|
||||||
PCHAR TargetKeyName = NULL;
|
PCHAR TargetKeyName = NULL;
|
||||||
PCHAR *EnumKeysLinkage = GetSubkeyNames( EnumKeyName, "\\Linkage" );
|
PCHAR *EnumKeysLinkage = GetSubkeyNames( EnumKeyName, "\\Linkage" );
|
||||||
PCHAR *EnumKeysTop = GetSubkeyNames( EnumKeyName, "" );
|
PCHAR *EnumKeysTop = GetSubkeyNames( EnumKeyName, "" );
|
||||||
|
@ -126,12 +125,11 @@ HKEY FindAdapterKey( PDHCP_ADAPTER Adapter ) {
|
||||||
!strcmp( RootDevice, Adapter->DhclientInfo.name ) ) {
|
!strcmp( RootDevice, Adapter->DhclientInfo.name ) ) {
|
||||||
TargetKeyName =
|
TargetKeyName =
|
||||||
(CHAR*) malloc( strlen( TargetKeyNameStart ) +
|
(CHAR*) malloc( strlen( TargetKeyNameStart ) +
|
||||||
strlen( RootDevice ) +
|
strlen( RootDevice ) + 1);
|
||||||
strlen( TargetKeyNameEnd ) + 1 );
|
|
||||||
if( !TargetKeyName ) goto cleanup;
|
if( !TargetKeyName ) goto cleanup;
|
||||||
sprintf( TargetKeyName, "%s%s%s",
|
sprintf( TargetKeyName, "%s%s",
|
||||||
TargetKeyNameStart, RootDevice, TargetKeyNameEnd );
|
TargetKeyNameStart, RootDevice );
|
||||||
Error = RegOpenKey( HKEY_LOCAL_MACHINE, TargetKeyName, &OutKey );
|
Error = RegCreateKeyExA( HKEY_LOCAL_MACHINE, TargetKeyName, 0, NULL, 0, KEY_READ, NULL, &OutKey, NULL );
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
free( RootDevice ); RootDevice = 0;
|
free( RootDevice ); RootDevice = 0;
|
||||||
|
|
|
@ -450,8 +450,9 @@ dhcpack(struct packet *packet)
|
||||||
bind_lease(ip);
|
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 ) {
|
if( new_lease->options[DHO_DOMAIN_NAME_SERVERS].len ) {
|
||||||
|
CHAR Buffer[200] = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
|
||||||
HKEY RegKey;
|
HKEY RegKey;
|
||||||
struct iaddr nameserver;
|
struct iaddr nameserver;
|
||||||
char *nsbuf;
|
char *nsbuf;
|
||||||
|
@ -462,10 +463,11 @@ void set_name_servers( struct client_lease *new_lease ) {
|
||||||
addrs = 1;
|
addrs = 1;
|
||||||
nsbuf = malloc( addrs * sizeof(IP_ADDRESS_STRING) );
|
nsbuf = malloc( addrs * sizeof(IP_ADDRESS_STRING) );
|
||||||
nsbuf[0] = 0;
|
nsbuf[0] = 0;
|
||||||
|
strcat(Buffer, Adapter->DhclientInfo.name);
|
||||||
|
|
||||||
if( nsbuf && !RegOpenKeyEx
|
if( nsbuf && !RegOpenKeyEx
|
||||||
( HKEY_LOCAL_MACHINE,
|
( HKEY_LOCAL_MACHINE,
|
||||||
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters",
|
Buffer,
|
||||||
0, KEY_WRITE, &RegKey ) ) {
|
0, KEY_WRITE, &RegKey ) ) {
|
||||||
for( i = 0; i < addrs; i++ ) {
|
for( i = 0; i < addrs; i++ ) {
|
||||||
nameserver.len = sizeof(ULONG);
|
nameserver.len = sizeof(ULONG);
|
||||||
|
@ -567,7 +569,7 @@ bind_lease(struct interface_info *ip)
|
||||||
if( Adapter ) setup_adapter( Adapter, new_lease );
|
if( Adapter ) setup_adapter( Adapter, new_lease );
|
||||||
else warning("Could not find adapter for info %p\n", ip);
|
else warning("Could not find adapter for info %p\n", ip);
|
||||||
|
|
||||||
set_name_servers( new_lease );
|
set_name_servers( Adapter, new_lease );
|
||||||
|
|
||||||
reinitialize_interfaces();
|
reinitialize_interfaces();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue