netaddr 1.5.3 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of netaddr might be problematic. Click here for more details.

@@ -1,201 +0,0 @@
1
- module NetAddr
2
- private
3
-
4
- # validate options hash
5
- #
6
- def validate_args(to_validate,known_args)
7
- to_validate.each do |x|
8
- raise ArgumentError, "Unrecognized argument #{x}. Valid arguments are " +
9
- "#{known_args.join(',')}" if (!known_args.include?(x))
10
- end
11
- end
12
- module_function :validate_args
13
-
14
- def validate_ip_int(ip,version)
15
- version = 4 if (!version && ip < 2**32)
16
- if (version == 4)
17
- raise ValidationError, "#{ip} is invalid for IPv4 (Integer is out of bounds)." if ( (ip < 0) || (ip > 2**32-1) )
18
- else
19
- raise ValidationError, "#{ip} is invalid for both IPv4 and IPv6 (Integer is out of bounds)." if ( (ip < 0) || (ip > 2**128-1) )
20
- version = 6
21
- end
22
- return(version)
23
- end
24
- module_function :validate_ip_int
25
-
26
- def validate_ip_str(ip,version)
27
- # check validity of charaters
28
- if (ip =~ /[^0-9a-fA-F\.:]/)
29
- raise ValidationError, "#{ip} is invalid (contains invalid characters)."
30
- end
31
-
32
- if (version == 4)
33
- octets = ip.split('.')
34
- raise ValidationError, "#{ip} is invalid (IPv4 requires (4) octets)." if (octets.length != 4)
35
-
36
- # are octets in range 0..255?
37
- octets.each do |octet|
38
- raise ValidationError, "#{ip} is invalid (IPv4 dotted-decimal format " +
39
- "should not contain non-numeric characters)." if (octet =~ /[\D]/ || octet == '')
40
- octet = octet.to_i()
41
- if ( (octet < 0) || (octet >= 256) )
42
- raise ValidationError, "#{ip} is invalid (IPv4 octets should be between 0 and 255)."
43
- end
44
- end
45
-
46
- else
47
- # make sure we only have at most (2) colons in a row, and then only
48
- # (1) instance of that
49
- if ( (ip =~ /:{3,}/) || (ip.split("::").length > 2) )
50
- raise ValidationError, "#{ip} is invalid (IPv6 field separators (:) are bad)."
51
- end
52
-
53
- # set flags
54
- shorthand = false
55
- if (ip =~ /\./)
56
- dotted_dec = true
57
- else
58
- dotted_dec = false
59
- end
60
-
61
- # split up by ':'
62
- fields = []
63
- if (ip =~ /::/)
64
- shorthand = true
65
- ip.split('::').each do |x|
66
- fields.concat( x.split(':') )
67
- end
68
- else
69
- fields.concat( ip.split(':') )
70
- end
71
-
72
- # make sure we have the correct number of fields
73
- if (shorthand)
74
- if ( (dotted_dec && fields.length > 6) || (!dotted_dec && fields.length > 7) )
75
- raise ValidationError, "#{ip} is invalid (IPv6 shorthand notation has " +
76
- "incorrect number of fields)."
77
- end
78
- else
79
- if ( (dotted_dec && fields.length != 7 ) || (!dotted_dec && fields.length != 8) )
80
- raise ValidationError, "#{ip} is invalid (IPv6 address has " +
81
- "incorrect number of fields)."
82
- end
83
- end
84
-
85
- # if dotted_dec then validate the last field
86
- if (dotted_dec)
87
- dotted = fields.pop()
88
- octets = dotted.split('.')
89
- raise ValidationError, "#{ip} is invalid (Legacy IPv4 portion of IPv6 " +
90
- "address should contain (4) octets)." if (octets.length != 4)
91
- octets.each do |x|
92
- raise ValidationError, "#{ip} is invalid (egacy IPv4 portion of IPv6 " +
93
- "address should not contain non-numeric characters)." if (x =~ /[^0-9]/ )
94
- x = x.to_i
95
- if ( (x < 0) || (x >= 256) )
96
- raise ValidationError, "#{ip} is invalid (Octets of a legacy IPv4 portion of IPv6 " +
97
- "address should be between 0 and 255)."
98
- end
99
- end
100
- end
101
-
102
- # validate hex fields
103
- fields.each do |x|
104
- if (x =~ /[^0-9a-fA-F]/)
105
- raise ValidationError, "#{ip} is invalid (IPv6 address contains invalid hex characters)."
106
- else
107
- x = x.to_i(16)
108
- if ( (x < 0) || (x >= 2**16) )
109
- raise ValidationError, "#{ip} is invalid (Fields of an IPv6 address " +
110
- "should be between 0x0 and 0xFFFF)."
111
- end
112
- end
113
- end
114
-
115
- end
116
- return(true)
117
- end
118
- module_function :validate_ip_str
119
-
120
- def validate_netmask_int(netmask,version,is_int=false)
121
- address_len = 32
122
- address_len = 128 if (version == 6)
123
-
124
- if (!is_int)
125
- if (netmask > address_len || netmask < 0 )
126
- raise ValidationError, "Netmask, #{netmask}, is out of bounds for IPv#{version}."
127
- end
128
- else
129
- if (netmask >= 2**address_len || netmask < 0 )
130
- raise ValidationError, "netmask (#{netmask}) is out of bounds for IPv#{version}."
131
- end
132
- end
133
- return(true)
134
- end
135
- module_function :validate_netmask_int
136
-
137
- def validate_netmask_str(netmask,version)
138
- address_len = 32
139
- address_len = 128 if (version == 6)
140
-
141
- if(netmask =~ /\./) # extended netmask
142
- all_f = 2**32-1
143
- netmask_int = 0
144
-
145
- # validate & pack extended mask
146
- begin
147
- netmask_int = NetAddr.ip_to_i(netmask, :Version => 4)
148
- rescue Exception => error
149
- raise ValidationError, "#{netmask} is improperly formed: #{error}"
150
- end
151
-
152
- # cycle through the bits of hostmask and compare
153
- # with netmask_int. when we hit the firt '1' within
154
- # netmask_int (our netmask boundary), xor hostmask and
155
- # netmask_int. the result should be all 1's. this whole
156
- # process is in place to make sure that we dont have
157
- # and crazy masks such as 255.254.255.0
158
- hostmask = 1
159
- 32.times do
160
- check = netmask_int & hostmask
161
- if ( check != 0)
162
- hostmask = hostmask >> 1
163
- unless ( (netmask_int ^ hostmask) == all_f)
164
- raise ValidationError, "#{netmask} contains '1' bits within the host portion of the netmask."
165
- end
166
- break
167
- else
168
- hostmask = hostmask << 1
169
- hostmask = hostmask | 1
170
- end
171
- end
172
-
173
- else # cidr format
174
- # remove '/' if present
175
- if (netmask =~ /^\// )
176
- netmask[0] = " "
177
- netmask.lstrip!
178
- end
179
-
180
- # check if we have any non numeric characters
181
- if (netmask =~ /\D/)
182
- raise ValidationError, "#{netmask} contains invalid characters."
183
- end
184
-
185
- netmask = netmask.to_i
186
- if (netmask > address_len || netmask < 0 )
187
- raise ValidationError, "Netmask, #{netmask}, is out of bounds for IPv#{version}."
188
- end
189
-
190
- end
191
- return(true)
192
- end
193
- module_function :validate_netmask_str
194
-
195
-
196
-
197
- end # module NetAddr
198
-
199
- __END__
200
-
201
-
data/license DELETED
@@ -1,13 +0,0 @@
1
- Copyright Dustin L. Spinhirne
2
-
3
- Licensed under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License.
5
- You may obtain a copy of the License at
6
-
7
- http://www.apache.org/licenses/LICENSE-2.0
8
-
9
- Unless required by applicable law or agreed to in writing, software
10
- distributed under the License is distributed on an "AS IS" BASIS,
11
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- See the License for the specific language governing permissions and
13
- limitations under the License.