diff --git a/reactos/services/dhcp/alloc.c b/reactos/services/dhcp/alloc.c index 5894a96e6f3..97027fa4445 100644 --- a/reactos/services/dhcp/alloc.c +++ b/reactos/services/dhcp/alloc.c @@ -76,4 +76,18 @@ new_hash_bucket(void) return (rval); } -void free_hash_bucket(struct hash_bucket *hb) { free(hb); } +void +dfree(void *ptr, char *name) +{ + if (!ptr) { + warning("dfree %s: free on null pointer.", name); + return; + } + free(ptr); +} + +void +free_hash_bucket(struct hash_bucket *ptr, char *name) +{ + dfree(ptr, name); +} diff --git a/reactos/services/dhcp/dhclient.c b/reactos/services/dhcp/dhclient.c index 0734bf09173..88b05827fd6 100644 --- a/reactos/services/dhcp/dhclient.c +++ b/reactos/services/dhcp/dhclient.c @@ -234,7 +234,7 @@ state_reboot(void *ipp) /* make_request doesn't initialize xid because it normally comes from the DHCPDISCOVER, but we haven't sent a DHCPDISCOVER, so pick an xid now. */ - ip->client->xid = arc4random(); + ip->client->xid = rand(); /* Make a DHCPREQUEST packet, and set appropriate per-interface flags. */ @@ -940,7 +940,7 @@ send_discover(void *ipp) ip->client->interval = ip->client->config->initial_interval; else { - ip->client->interval += (arc4random() >> 2) % + ip->client->interval += (rand() >> 2) % (2 * ip->client->interval); } @@ -949,7 +949,7 @@ send_discover(void *ipp) ip->client->config->backoff_cutoff) ip->client->interval = ((ip->client->config->backoff_cutoff / 2) - + ((arc4random() >> 2) % + + ((rand() >> 2) % ip->client->config->backoff_cutoff)); } else if (!ip->client->interval) ip->client->interval = @@ -1142,7 +1142,7 @@ send_request(void *ipp) if (!ip->client->interval) ip->client->interval = ip->client->config->initial_interval; else - ip->client->interval += ((arc4random() >> 2) % + ip->client->interval += ((rand() >> 2) % (2 * ip->client->interval)); /* Don't backoff past cutoff. */ @@ -1150,7 +1150,7 @@ send_request(void *ipp) ip->client->config->backoff_cutoff) ip->client->interval = ((ip->client->config->backoff_cutoff / 2) + - ((arc4random() >> 2) % ip->client->interval)); + ((rand() >> 2) % ip->client->interval)); /* If the backoff would take us to the expiry time, just set the timeout to the expiry time. */ @@ -1280,7 +1280,7 @@ make_discover(struct interface_info *ip, struct client_lease *lease) ip->client->packet.htype = ip->hw_address.htype; ip->client->packet.hlen = ip->hw_address.hlen; ip->client->packet.hops = 0; - ip->client->packet.xid = arc4random(); + ip->client->packet.xid = rand(); ip->client->packet.secs = 0; /* filled in by send_discover. */ ip->client->packet.flags = 0; @@ -1986,7 +1986,7 @@ int ipv4addrs(char * buf) { char *tmp; - struct in_addr jnk; + unsigned long jnk; int i = 0; note("Input: %s\n", buf); @@ -1994,7 +1994,8 @@ ipv4addrs(char * buf) do { tmp = strtok(buf, " "); note("got %s\n", tmp); - if( tmp && inet_aton(tmp, &jnk) ) i++; + jnk = inet_addr( tmp ); + if( tmp ) i++; buf = NULL; } while( tmp ); diff --git a/reactos/services/dhcp/include/dhcpd.h b/reactos/services/dhcp/include/dhcpd.h index 1434021afe1..b99207f3927 100644 --- a/reactos/services/dhcp/include/dhcpd.h +++ b/reactos/services/dhcp/include/dhcpd.h @@ -322,6 +322,9 @@ pair cons(caddr_t, pair); struct string_list *new_string_list(size_t size); struct hash_table *new_hash_table(int); struct hash_bucket *new_hash_bucket(void); +void dfree(void *, char *); +void free_hash_bucket(struct hash_bucket *, char *); + /* bpf.c */ int if_register_bpf(struct interface_info *); diff --git a/reactos/services/dhcp/options.c b/reactos/services/dhcp/options.c index a037712982f..135d608334c 100644 --- a/reactos/services/dhcp/options.c +++ b/reactos/services/dhcp/options.c @@ -41,6 +41,7 @@ */ #include +#include #define DHCP_OPTION_DATA #include "rosdhcp.h" @@ -592,7 +593,8 @@ pretty_print_option(unsigned int code, unsigned char *data, int len, break; case 'I': foo.s_addr = htonl(getULong(dp)); - opcount = strlcpy(op, inet_ntoa(foo), opleft); + strncpy(op, inet_ntoa(foo), opleft - 1); + op[opleft - 1] = ANSI_NULL; if (opcount >= opleft) goto toobig; opleft -= opcount; @@ -650,8 +652,8 @@ pretty_print_option(unsigned int code, unsigned char *data, int len, opleft -= opcount; break; case 'f': - opcount = strlcpy(op, - *dp++ ? "true" : "false", opleft); + opcount = (size_t) strncpy(op, *dp++ ? "true" : "false", opleft - 1); + op[opleft - 1] = ANSI_NULL; if (opcount >= opleft) goto toobig; opleft -= opcount; diff --git a/reactos/services/dhcp/util.c b/reactos/services/dhcp/util.c index 339c87aeadc..cd0cf6873b7 100644 --- a/reactos/services/dhcp/util.c +++ b/reactos/services/dhcp/util.c @@ -93,7 +93,6 @@ int addr_eq( struct iaddr a, struct iaddr b ) { } void *dmalloc( int size, char *name ) { return malloc( size ); } -void dfree( void *v, char *name ) { free( v ); } int read_client_conf(void) { error("util.c read_client_conf not implemented!");