ISC DHCP
4.4.3-P1
A reference DHCPv4 and DHCPv6 implementation
Loading...
Searching...
No Matches
inet_addr.c
Go to the documentation of this file.
1
/* $NetBSD: inet_addr.c,v 1.6 1996/02/02 15:22:23 mrg Exp $ */
2
3
/*
4
* Copyright (c) 1983, 1990, 1993
5
* The Regents of the University of California. All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
* 3. Neither the name of the University nor the names of its contributors
16
* may be used to endorse or promote products derived from this software
17
* without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
* SUCH DAMAGE.
30
*/
31
32
#include "
dhcpd.h
"
33
34
#include "
omapip/omapip_p.h
"
35
36
#ifdef NEED_INET_ATON
37
/*
38
* Check whether "cp" is a valid ascii representation
39
* of an Internet address and convert to a binary address.
40
* Returns 1 if the address is valid, 0 if not.
41
* This replaces inet_addr, the return value from which
42
* cannot distinguish between failure and a local broadcast address.
43
*/
44
int
45
inet_aton
(
cp
, addr)
46
const
char
*
cp
;
47
struct
in_addr
*addr;
48
{
49
register
u_long
val;
50
register
int
base,
n
;
51
register
char
c
;
52
u_int
parts
[4];
53
register
u_int
*
pp
=
parts
;
54
55
for
(;;) {
56
/*
57
* Collect number up to ``.''.
58
* Values are specified as for C:
59
* 0x=hex, 0=octal, other=decimal.
60
*/
61
val = 0; base = 10;
62
if
(*
cp
==
'0'
) {
63
if
(*++
cp
==
'x'
|| *
cp
==
'X'
)
64
base = 16,
cp
++;
65
else
66
base = 8;
67
}
68
while
((
c
= *
cp
) !=
'\0'
) {
69
if
(
isascii
(
c
) &&
isdigit
((
int
)
c
)) {
70
val = (val * base) + (
c
-
'0'
);
71
cp
++;
72
continue
;
73
}
74
if
(base == 16 &&
isascii
(
c
) &&
isxdigit
((
int
)
c
)) {
75
val = (val << 4) +
76
(
c
+ 10 - (
islower
((
int
)
c
) ?
'a'
:
'A'
));
77
cp
++;
78
continue
;
79
}
80
break
;
81
}
82
if
(*
cp
==
'.'
) {
83
/*
84
* Internet format:
85
* a.b.c.d
86
* a.b.c (with c treated as 16-bits)
87
* a.b (with b treated as 24 bits)
88
*/
89
if
(
pp
>=
parts
+ 3 || val > 0xff)
90
return
(0);
91
*
pp
++ = val,
cp
++;
92
}
else
93
break
;
94
}
95
/*
96
* Check for trailing characters.
97
*/
98
if
(*
cp
&& (!
isascii
(*
cp
) || !
isspace
((
int
)*
cp
)))
99
return
(0);
100
/*
101
* Concoct the address according to
102
* the number of parts specified.
103
*/
104
n
=
pp
-
parts
+ 1;
105
switch
(
n
) {
106
107
case
0:
108
return
(0);
/* initial nondigit */
109
110
case
1:
/* a -- 32 bits */
111
break
;
112
113
case
2:
/* a.b -- 8.24 bits */
114
if
(val > 0xffffff)
115
return
(0);
116
val |=
parts
[0] << 24;
117
break
;
118
119
case
3:
/* a.b.c -- 8.8.16 bits */
120
if
(val > 0xffff)
121
return
(0);
122
val |= (
parts
[0] << 24) | (
parts
[1] << 16);
123
break
;
124
125
case
4:
/* a.b.c.d -- 8.8.8.8 bits */
126
if
(val > 0xff)
127
return
(0);
128
val |= (
parts
[0] << 24) | (
parts
[1] << 16) | (
parts
[2] << 8);
129
break
;
130
}
131
if
(addr)
132
addr->s_addr =
htonl
(val);
133
return
(1);
134
}
135
#endif
dhcpd.h
cur_time
#define cur_time
Definition
dhcpd.h:2126
omapip_p.h
omapip
inet_addr.c
Generated on Wed Jul 19 2023 00:00:00 for ISC DHCP by
1.9.8