Fixes by WaxDragon:
- Implement get* integer reading.
- Properly implement ipv4addrs (validates a set of IPv4 addresses)
- Limit returned DNS servers to 1 until we fix iphlpapi.
Modified: trunk/reactos/subsys/system/dhcp/dhclient.c
Modified: trunk/reactos/subsys/system/dhcp/util.c
_____
Modified: trunk/reactos/subsys/system/dhcp/dhclient.c
--- trunk/reactos/subsys/system/dhcp/dhclient.c 2005-04-26 05:13:49 UTC
(rev 14811)
+++ trunk/reactos/subsys/system/dhcp/dhclient.c 2005-04-26 07:11:02 UTC
(rev 14812)
@@ -448,6 +448,8 @@
int i, addrs =
new_lease->options[DHO_DOMAIN_NAME_SERVERS].len /
sizeof(ULONG);
+ /* XXX I'm setting addrs to 1 until we are ready up the
chain */
+ addrs = 1;
nsbuf = malloc( addrs * sizeof(IP_ADDRESS_STRING) );
nsbuf[0] = 0;
@@ -1896,7 +1898,7 @@
case DHO_FONT_SERVERS:
case DHO_DHCP_SERVER_IDENTIFIER:
if (!ipv4addrs(opbuf)) {
- warning("Invalid IP address in option: %s",
opbuf);
+ warning("Invalid IP address in option(%d): %s",
option, opbuf);
return (0);
}
return (1) ;
@@ -1991,19 +1993,20 @@
int
ipv4addrs(char * buf)
{
- struct in_addr jnk;
- int count = 0;
+ char *tmp;
+ struct in_addr jnk;
+ int i = 0;
+
+ note("Input: %s\n", buf);
- while (inet_aton(buf, &jnk) == 1){
- count++;
- while (periodchar(*buf) || digitchar(*buf))
- buf++;
- if (*buf == '\0')
- return (count);
- while (*buf == ' ')
- buf++;
- }
- return (0);
+ do {
+ tmp = strtok(buf, " ");
+ note("got %s\n", tmp);
+ if( tmp && inet_aton(tmp, &jnk) ) i++;
+ buf = NULL;
+ } while( tmp );
+
+ return (i);
}
_____
Modified: trunk/reactos/subsys/system/dhcp/util.c
--- trunk/reactos/subsys/system/dhcp/util.c 2005-04-26 05:13:49 UTC
(rev 14811)
+++ trunk/reactos/subsys/system/dhcp/util.c 2005-04-26 07:11:02 UTC
(rev 14812)
@@ -70,19 +70,19 @@
}
int16_t getShort( unsigned char *data ) {
- return 0;
+ return (int16_t) ntohs(*(int16_t*) data);
}
u_int16_t getUShort( unsigned char *data ) {
- return 0;
+ return (u_int16_t) ntohs(*(u_int16_t*) data);
}
int32_t getLong( unsigned char *data ) {
- return 0;
+ return (int32_t) ntohl(*(u_int32_t*) data);
}
u_int32_t getULong( unsigned char *data ) {
- return 0;
+ return ntohl(*(u_int32_t*)data);
}
int addr_eq( struct iaddr a, struct iaddr b ) {
@@ -93,6 +93,7 @@
void dfree( void *v, char *name ) { free( v ); }
int read_client_conf(void) {
+ error("util.c read_client_conf not implemented!");
return 0;
}