summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarl DeBisschop <kdebisschop@users.sourceforge.net>2003-01-03 03:24:17 (GMT)
committerKarl DeBisschop <kdebisschop@users.sourceforge.net>2003-01-03 03:24:17 (GMT)
commit86bf45146e30e16bde8b27b02ad95fac26838170 (patch)
tree9e4e4fa6451672f33303954f3b4072d6e526751c
parent6f1fc7e3a0196dabe442ef3e4b00c285c954ccd5 (diff)
downloadmonitoring-plugins-86bf45146e30e16bde8b27b02ad95fac26838170.tar.gz
protect against some null strings, make formats more uniform
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@234 f882894a-f735-0410-b71e-b25c423dba1c
-rw-r--r--plugins/utils.c84
1 files changed, 52 insertions, 32 deletions
diff --git a/plugins/utils.c b/plugins/utils.c
index da9cced..22020d7 100644
--- a/plugins/utils.c
+++ b/plugins/utils.c
@@ -165,6 +165,9 @@ is_dotted_quad (char *address)
165 int o1, o2, o3, o4; 165 int o1, o2, o3, o4;
166 char c[1]; 166 char c[1];
167 167
168 if (!address)
169 return FALSE;
170
168 if (sscanf (address, "%d.%d.%d.%d%c", &o1, &o2, &o3, &o4, c) != 4) 171 if (sscanf (address, "%d.%d.%d.%d%c", &o1, &o2, &o3, &o4, c) != 4)
169 return FALSE; 172 return FALSE;
170 else if (o1 > 255 || o2 > 255 || o3 > 255 || o4 > 255) 173 else if (o1 > 255 || o2 > 255 || o3 > 255 || o4 > 255)
@@ -185,18 +188,18 @@ is_dotted_quad (char *address)
185int 188int
186is_hostname (char *s1) 189is_hostname (char *s1)
187{ 190{
188 if (strlen (s1) > 63) 191 if (!s1 || strlen (s1) > 63) {
192 return FALSE;
193 }
194 if (strcspn (s1, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789-.") != 0) {
189 return FALSE; 195 return FALSE;
190 if (strcspn 196 }
191 (s1, 197 if (strspn (s1, "0123456789-.") == 1) {
192 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789-.") !=
193 0) return FALSE;
194 if (strspn (s1, "0123456789-.") == 1)
195 return FALSE; 198 return FALSE;
199 }
196 while ((s1 = index (s1, '.'))) { 200 while ((s1 = index (s1, '.'))) {
197 s1++; 201 s1++;
198 if (strspn (s1, "0123456789-.") == 1) { 202 if (strspn (s1, "0123456789-.") == 1) {
199 printf ("%s\n", s1);
200 return FALSE; 203 return FALSE;
201 } 204 }
202 } 205 }
@@ -208,33 +211,40 @@ is_numeric (char *number)
208{ 211{
209 char tmp[1]; 212 char tmp[1];
210 float x; 213 float x;
211 if (sscanf (number, "%f%c", &x, tmp) == 1) 214
212 return (TRUE); 215 if (!number)
213 return (FALSE); 216 return FALSE;
217 else if (sscanf (number, "%f%c", &x, tmp) == 1)
218 return TRUE;
219 else
220 return FALSE;
214} 221}
215 222
216int 223int
217is_positive (char *number) 224is_positive (char *number)
218{ 225{
219 if (is_numeric (number) && atof (number) > 0.0) 226 if (is_numeric (number) && atof (number) > 0.0)
220 return (TRUE); 227 return TRUE;
221 return (FALSE); 228 else
229 return FALSE;
222} 230}
223 231
224int 232int
225is_negative (char *number) 233is_negative (char *number)
226{ 234{
227 if (is_numeric (number) && atof (number) < 0.0) 235 if (is_numeric (number) && atof (number) < 0.0)
228 return (TRUE); 236 return TRUE;
229 return (FALSE); 237 else
238 return FALSE;
230} 239}
231 240
232int 241int
233is_nonnegative (char *number) 242is_nonnegative (char *number)
234{ 243{
235 if (is_numeric (number) && atof (number) >= 0.0) 244 if (is_numeric (number) && atof (number) >= 0.0)
236 return (TRUE); 245 return TRUE;
237 return (FALSE); 246 else
247 return FALSE;
238} 248}
239 249
240int 250int
@@ -242,8 +252,9 @@ is_percentage (char *number)
242{ 252{
243 int x; 253 int x;
244 if (is_numeric (number) && (x = atof (number)) >= 0 && x <= 100) 254 if (is_numeric (number) && (x = atof (number)) >= 0 && x <= 100)
245 return (TRUE); 255 return TRUE;
246 return (FALSE); 256 else
257 return FALSE;
247} 258}
248 259
249int 260int
@@ -251,37 +262,42 @@ is_integer (char *number)
251{ 262{
252 long int n; 263 long int n;
253 264
254 if (strspn (number, "-0123456789 ") != strlen (number)) 265 if (!number || (strspn (number, "-0123456789 ") != strlen (number)))
255 return (FALSE); 266 return FALSE;
256 267
257 n = strtol (number, NULL, 10); 268 n = strtol (number, NULL, 10);
269
258 if (errno != ERANGE && n >= INT_MIN && n <= INT_MAX) 270 if (errno != ERANGE && n >= INT_MIN && n <= INT_MAX)
259 return (TRUE); 271 return TRUE;
260 return (FALSE); 272 else
273 return FALSE;
261} 274}
262 275
263int 276int
264is_intpos (char *number) 277is_intpos (char *number)
265{ 278{
266 if (is_integer (number) && atoi (number) > 0) 279 if (is_integer (number) && atoi (number) > 0)
267 return (TRUE); 280 return TRUE;
268 return (FALSE); 281 else
282 return FALSE;
269} 283}
270 284
271int 285int
272is_intneg (char *number) 286is_intneg (char *number)
273{ 287{
274 if (is_integer (number) && atoi (number) < 0) 288 if (is_integer (number) && atoi (number) < 0)
275 return (TRUE); 289 return TRUE;
276 return (FALSE); 290 else
291 return FALSE;
277} 292}
278 293
279int 294int
280is_intnonneg (char *number) 295is_intnonneg (char *number)
281{ 296{
282 if (is_integer (number) && atoi (number) >= 0) 297 if (is_integer (number) && atoi (number) >= 0)
283 return (TRUE); 298 return TRUE;
284 return (FALSE); 299 else
300 return FALSE;
285} 301}
286 302
287int 303int
@@ -289,16 +305,20 @@ is_intpercent (char *number)
289{ 305{
290 int i; 306 int i;
291 if (is_integer (number) && (i = atoi (number)) >= 0 && i <= 100) 307 if (is_integer (number) && (i = atoi (number)) >= 0 && i <= 100)
292 return (TRUE); 308 return TRUE;
293 return (FALSE); 309 else
310 return FALSE;
294} 311}
295 312
296int 313int
297is_option (char *str) 314is_option (char *str)
298{ 315{
299 if (strspn (str, "-") == 1 || strspn (str, "-") == 2) 316 if (!str)
317 return FALSE;
318 else if (strspn (str, "-") == 1 || strspn (str, "-") == 2)
300 return TRUE; 319 return TRUE;
301 return FALSE; 320 else
321 return FALSE;
302} 322}
303 323
304 324