No longer needed
[oweals/busybox.git] / networking / inetd.c
index 896a9978f123f7a7f6f68b6950b8742c4142caec..169cc87166d6334cbb60684397306f26490b085a 100644 (file)
@@ -56,7 +56,7 @@
  *      server program                  full path name
  *      server program arguments        maximum of MAXARGS (20)
  *
- * RPC services unsuported
+ * RPC services unsupported
  *
  * Comment lines are indicated by a `#' in column 1.
  */
 
 #include "busybox.h"
 
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <sys/file.h>
-#include <sys/wait.h>
-#include <sys/time.h>
-#include <sys/resource.h>
 
 #ifndef __linux__
 #ifndef RLIMIT_NOFILE
 #endif
 #endif
 
-#include <sys/param.h>
-#include <sys/stat.h>
+#include <sys/file.h>
 #include <sys/ioctl.h>
+#include <sys/param.h>
+#include <sys/resource.h>
 #include <sys/socket.h>
-#include <sys/file.h>
-#include <sys/wait.h>
+#include <sys/stat.h>
 #include <sys/time.h>
-#include <sys/resource.h>
+#include <sys/un.h>
+#include <sys/wait.h>
 
 #include <netinet/in.h>
 #include <netinet/ip.h>
@@ -287,6 +279,16 @@ syslog_err_and_discard_dg(int se_socktype, const char *msg, ...)
        _exit(1);
 }
 
+static char * inetd_strdup(const char *s)
+{
+       char *ms = strdup(s);
+
+       if(ms == NULL)
+               syslog_err_and_discard_dg(SOCK_STREAM, "strdup: %m");
+       return ms;
+}
+
+
 static servtab_t *getconfigent(void)
 {
        static servtab_t serv;
@@ -306,13 +308,15 @@ more:
        if ((cp == NULL) || (*cp == '#')) {
                goto more;
        }
+       /* make bind 0.0.0.0 and other zero default */
+       memset((char *)sep, 0, sizeof *sep);
 
        cp_ptr = strtok_r(cp, " \t", &cp_ptr_ptr);
        if (cp_ptr == NULL) {
                /* Error */
                goto more;
        }
-       sep->se_service = bb_xstrdup(cp_ptr);
+       sep->se_service = inetd_strdup(cp_ptr);
 
        cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr);
        if (cp_ptr == NULL) {
@@ -341,13 +345,13 @@ more:
                sep->se_family = AF_UNIX;
        } else {
                if (strncmp(cp_ptr, "rpc/", 4) == 0) {
-                       syslog(LOG_ERR, "%s: rpc services not suported",
+                       syslog(LOG_ERR, "%s: rpc services not supported",
                            sep->se_service);
                        goto more;
                }
                sep->se_family = AF_INET;
        }
-       sep->se_proto = bb_xstrdup(cp_ptr);
+       sep->se_proto = inetd_strdup(cp_ptr);
 
        cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr);
        if (cp_ptr == NULL) {
@@ -369,14 +373,16 @@ more:
                /* error */
                goto more;
        }
+
+       sep->se_user = inetd_strdup(cp_ptr);
        {
-               char *cp_ptr2 = strchr(cp_ptr, '.');
+               char *cp_ptr2 = strchr(sep->se_user, '.');
+
                if (cp_ptr2) {
                        *cp_ptr2++ = '\0';
-                       sep->se_group = bb_xstrdup(cp_ptr2);
                }
+               sep->se_group = cp_ptr2;
        }
-       sep->se_user = bb_xstrdup(cp_ptr);
 
        cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr);
        if (cp_ptr == NULL) {
@@ -409,19 +415,16 @@ more:
                sep->se_bi = NULL;
        }
 #endif
-       sep->se_server = bb_xstrdup(cp_ptr);
+       sep->se_server = inetd_strdup(cp_ptr);
 
        argc = 0;
        while ((cp_ptr = strtok_r(NULL, " \t", &cp_ptr_ptr)) != NULL) {
                if (argc < MAXARGV) {
-                       sep->se_argv[argc++] = cp_ptr;
+                       sep->se_argv[argc++] = inetd_strdup(cp_ptr);
                }
        }
-       while (argc <= MAXARGV) {
-               sep->se_argv[argc++] = NULL;
-       }
+       free(cp);
 
-       //free(cp);     // BUG: cp is the argv[] container; we must not free it here!
        return (sep);
 }
 
@@ -768,7 +771,7 @@ extern int inetd_main(int argc, char *argv[])
 #endif /* uClinux */
 
        if(opt & 1) {
-                       global_queuelen = atoi(optarg);
+                       global_queuelen = atoi(sq);
                        if (global_queuelen < 8) global_queuelen=8;
                }
        argc -= optind;