42 lines
1.3 KiB
Plaintext
42 lines
1.3 KiB
Plaintext
|
$OpenBSD: patch-config_c,v 1.1.1.1 2008/02/08 19:30:52 sthen Exp $
|
||
|
--- config.c.orig Tue May 24 16:49:29 2005
|
||
|
+++ config.c Fri Jan 25 14:05:44 2008
|
||
|
@@ -328,29 +328,18 @@ struct vifconfig *parsePhyintToken() {
|
||
|
*/
|
||
|
struct SubnetList *parseSubnetAddress(char *addrstr) {
|
||
|
struct SubnetList *tmpSubnet;
|
||
|
- char *tmpStr;
|
||
|
uint32 addr = 0x00000000;
|
||
|
uint32 mask = 0xFFFFFFFF;
|
||
|
+ int bitcnt;
|
||
|
|
||
|
- // First get the network part of the address...
|
||
|
- tmpStr = strtok(addrstr, "/");
|
||
|
- addr = inet_addr(tmpStr);
|
||
|
-
|
||
|
- tmpStr = strtok(NULL, "/");
|
||
|
- if(tmpStr != NULL) {
|
||
|
- int bitcnt = atoi(tmpStr);
|
||
|
- if(bitcnt <= 0 || bitcnt > 32) {
|
||
|
- log(LOG_WARNING, 0, "The bits part of the address is invalid : %d.",tmpStr);
|
||
|
- return NULL;
|
||
|
- }
|
||
|
-
|
||
|
- mask <<= (32 - bitcnt);
|
||
|
- }
|
||
|
-
|
||
|
- if(addr == -1 || addr == 0) {
|
||
|
- log(LOG_WARNING, 0, "Unable to parse address token '%s'.", addrstr);
|
||
|
+ bitcnt = inet_net_pton(AF_INET, addrstr, &addr, sizeof(addr));
|
||
|
+ if(bitcnt<0) {
|
||
|
+ log(LOG_WARNING, 0, "Unable to parse address token '%s'.",addrstr);
|
||
|
return NULL;
|
||
|
- }
|
||
|
+ } else if(bitcnt>0)
|
||
|
+ mask <<= (32 - bitcnt);
|
||
|
+ else
|
||
|
+ mask = 0;
|
||
|
|
||
|
tmpSubnet = (struct SubnetList*) malloc(sizeof(struct SubnetList));
|
||
|
tmpSubnet->subnet_addr = addr;
|