last_patch95 from vodz:
[oweals/busybox.git] / networking / inetd.c
index 0b80752498393974dee5bd22f3a9836e79ad3cde..af262c39c8177535fdb8fe562feef5189a50d765 100644 (file)
 #include <signal.h>
 #include <netdb.h>
 #include <syslog.h>
-#include <pwd.h>
-#include <grp.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <getopt.h>
 #include <unistd.h>
 #include <stdarg.h>
+#include <time.h>
 
 #define _PATH_INETDCONF "/etc/inetd.conf"
 #define _PATH_INETDPID  "/var/run/inetd.pid"
@@ -520,7 +519,7 @@ enter(struct servtab *cp)
 
        sep = (struct servtab *)malloc(sizeof (*sep));
        if (sep == NULL) {
-               syslog_err_and_discard_dg(SOCK_STREAM, memory_exhausted);
+               syslog_err_and_discard_dg(SOCK_STREAM, bb_msg_memory_exhausted);
        }
        *sep = *cp;
        sep->se_fd = -1;
@@ -807,7 +806,9 @@ inetd_main(int argc, char *argv[])
        struct passwd *pwd;
        struct group *grp = NULL;
        struct sigaction sa;
-       int ch, pid;
+       int pid;
+       unsigned long opt;
+       char *sq;
        gid_t gid;
 
 #ifdef INETD_UNSUPPORT_BILTIN
@@ -829,14 +830,21 @@ inetd_main(int argc, char *argv[])
        LastArg = environ[-1] + strlen(environ[-1]);
 #endif
 
-       while ((ch = getopt(argc, argv, "q:")) != EOF)
-               switch(ch) {
-               case 'q':
+#if defined(__uClinux__)
+       opt = bb_getopt_ulflags(argc, argv, "q:f", &sq);
+       if (!(opt & 4)) {
+           daemon(0, 0);
+           /* reexec for vfork() do continue parent */
+           vfork_daemon_rexec(argc, argv, "-f");
+       }
+#else
+       opt = bb_getopt_ulflags(ac, av, "q:", &sq);
+       daemon(0, 0);
+#endif /* uClinux */
+
+       if(opt & 1) {
                        global_queuelen = atoi(optarg);
                        if (global_queuelen < 8) global_queuelen=8;
-                       break;
-               default:
-                       show_usage(); // "[-q len] [conf]"
                }
        argc -= optind;
        argv += optind;
@@ -844,8 +852,7 @@ inetd_main(int argc, char *argv[])
        if (argc > 0)
                CONFIG = argv[0];
 
-       daemon(0, 0);
-       openlog(applet_name, LOG_PID | LOG_NOWAIT, LOG_DAEMON);
+       openlog(bb_applet_name, LOG_PID | LOG_NOWAIT, LOG_DAEMON);
        {
                FILE *fp;