diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2004-01-18 08:58:06 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2004-01-18 08:58:06 +0000 |
commit | 53766c40639172d4844b9b5a16e692ef379accb2 (patch) | |
tree | aa11755ca85d954ddd5712334e6b16c05aabda7a /networking/inetd.c | |
parent | 65b6d8bdb6375c010d70f7aad399dae7c3ec15f6 (diff) | |
download | busybox-w32-53766c40639172d4844b9b5a16e692ef379accb2.tar.gz busybox-w32-53766c40639172d4844b9b5a16e692ef379accb2.tar.bz2 busybox-w32-53766c40639172d4844b9b5a16e692ef379accb2.zip |
Fix up a couple of bugs i introduced in yesterdays cleanup.
Diffstat (limited to 'networking/inetd.c')
-rw-r--r-- | networking/inetd.c | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/networking/inetd.c b/networking/inetd.c index 24415fe7d..1f2b339f0 100644 --- a/networking/inetd.c +++ b/networking/inetd.c | |||
@@ -290,8 +290,9 @@ static char *skip(char **cpp) | |||
290 | char *cp = *cpp; | 290 | char *cp = *cpp; |
291 | char *start; | 291 | char *start; |
292 | 292 | ||
293 | if (*cpp == NULL) | 293 | if ((cpp == NULL) || (*cpp == NULL) || (**cpp == 0)) { |
294 | return ((char *)0); | 294 | return (NULL); |
295 | } | ||
295 | 296 | ||
296 | again: | 297 | again: |
297 | while (*cp == ' ' || *cp == '\t') | 298 | while (*cp == ' ' || *cp == '\t') |
@@ -332,17 +333,23 @@ static struct servtab *getconfigent(void) | |||
332 | static struct servtab serv; | 333 | static struct servtab serv; |
333 | struct servtab *sep = &serv; | 334 | struct servtab *sep = &serv; |
334 | int argc; | 335 | int argc; |
335 | char *cp, *arg; | 336 | char *cp = NULL; |
336 | 337 | char *arg; | |
337 | more: | 338 | more: |
338 | while ((cp = bb_get_chomped_line_from_file(fconfig)) && *cp == '#'); | 339 | do { |
339 | if (cp == NULL) | 340 | if (feof(fconfig)) { |
340 | return ((struct servtab *)0); | 341 | return ((struct servtab *)0); |
342 | } | ||
343 | free(cp); | ||
344 | cp = bb_get_chomped_line_from_file(fconfig); | ||
345 | } while ((cp == NULL) || (*cp == '#')); | ||
346 | |||
341 | memset((char *)sep, 0, sizeof *sep); | 347 | memset((char *)sep, 0, sizeof *sep); |
342 | sep->se_service = newstr(skip(&cp)); | 348 | sep->se_service = newstr(skip(&cp)); |
343 | arg = skip(&cp); | 349 | arg = skip(&cp); |
344 | if (arg == NULL) | 350 | if (arg == NULL) { |
345 | goto more; | 351 | goto more; |
352 | } | ||
346 | 353 | ||
347 | if (strcmp(arg, "stream") == 0) | 354 | if (strcmp(arg, "stream") == 0) |
348 | sep->se_socktype = SOCK_STREAM; | 355 | sep->se_socktype = SOCK_STREAM; |
@@ -369,8 +376,9 @@ more: | |||
369 | } | 376 | } |
370 | } | 377 | } |
371 | arg = skip(&cp); | 378 | arg = skip(&cp); |
372 | if (arg == NULL) | 379 | if (arg == NULL) { |
373 | goto more; | 380 | goto more; |
381 | } | ||
374 | { | 382 | { |
375 | char *s = strchr(arg, '.'); | 383 | char *s = strchr(arg, '.'); |
376 | if (s) { | 384 | if (s) { |
@@ -390,10 +398,12 @@ more: | |||
390 | #ifdef INETD_FEATURE_ENABLED | 398 | #ifdef INETD_FEATURE_ENABLED |
391 | const struct biltin *bi; | 399 | const struct biltin *bi; |
392 | 400 | ||
393 | for (bi = biltins; bi->bi_service; bi++) | 401 | for (bi = biltins; bi->bi_service; bi++) { |
394 | if (bi->bi_socktype == sep->se_socktype && | 402 | if ((bi->bi_socktype == sep->se_socktype) && |
395 | strcmp(bi->bi_service, sep->se_service) == 0) | 403 | (strcmp(bi->bi_service, sep->se_service) == 0)) { |
396 | break; | 404 | break; |
405 | } | ||
406 | } | ||
397 | if (bi->bi_service == 0) { | 407 | if (bi->bi_service == 0) { |
398 | syslog(LOG_ERR, "internal service %s unknown", | 408 | syslog(LOG_ERR, "internal service %s unknown", |
399 | sep->se_service); | 409 | sep->se_service); |
@@ -406,18 +416,22 @@ more: | |||
406 | sep->se_service); | 416 | sep->se_service); |
407 | goto more; | 417 | goto more; |
408 | #endif | 418 | #endif |
409 | } else | 419 | } |
410 | #ifdef INETD_FEATURE_ENABLED | 420 | #ifdef INETD_FEATURE_ENABLED |
411 | sep->se_bi = NULL | 421 | else { |
422 | sep->se_bi = NULL; | ||
423 | } | ||
412 | #endif | 424 | #endif |
413 | ; | ||
414 | argc = 0; | 425 | argc = 0; |
415 | for (arg = skip(&cp); cp; arg = skip(&cp)) { | 426 | for (arg = skip(&cp); cp && arg; arg = skip(&cp)) { |
416 | if (argc < MAXARGV) | 427 | if (argc < MAXARGV) { |
417 | sep->se_argv[argc++] = newstr(arg); | 428 | sep->se_argv[argc++] = newstr(arg); |
429 | } | ||
418 | } | 430 | } |
419 | while (argc <= MAXARGV) | 431 | while (argc <= MAXARGV) { |
420 | sep->se_argv[argc++] = NULL; | 432 | sep->se_argv[argc++] = NULL; |
433 | } | ||
434 | |||
421 | return (sep); | 435 | return (sep); |
422 | } | 436 | } |
423 | 437 | ||