httpd: reduce ifdef forest. comment out redundant PATH setting
[oweals/busybox.git] / networking / fakeidentd.c
index d3aa3ce5dc7d78d2443451c7c4c71dc54e36d56c..18e86c50bbdd5c1f4835c258beb137f8617564c2 100644 (file)
@@ -9,28 +9,10 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <sys/syslog.h>
-
-#include <pwd.h>
-#include <netdb.h>
-
+#include "busybox.h"
 #include <sys/syslog.h>
-#include <sys/types.h>
-#include <time.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <errno.h>
-#include <arpa/inet.h>
 #include <sys/uio.h>
 
-#include "busybox.h"
 
 #define IDENT_PORT  113
 #define MAXCONNS    20
@@ -82,7 +64,7 @@ static void replyError(int s, char *buf);
 static const char *nobodystr = "nobody"; /* this needs to be declared like this */
 static char *bind_ip_address = "0.0.0.0";
 
-static inline void movefd(int from, int to)
+static void movefd(int from, int to)
 {
        if (from != to) {
                dup2(from, to);
@@ -103,7 +85,7 @@ static void inetbind(void)
        else
                port = se->s_port;
 
-       s = bb_xsocket(AF_INET, SOCK_STREAM, 0);
+       s = xsocket(AF_INET, SOCK_STREAM, 0);
 
        setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
 
@@ -112,11 +94,8 @@ static void inetbind(void)
        addr.sin_family = AF_INET;
        addr.sin_port = htons(port);
 
-       if (bind(s, (struct sockaddr *)&addr, len) < 0) /* bb_xbind? */
-               bb_perror_msg_and_die("Cannot bind() port %i", IDENT_PORT);
-
-       if (listen(s, 5) < 0) /* bb_xlisten? */
-               bb_perror_msg_and_die("Cannot listen() on port %i", IDENT_PORT);
+       xbind(s, (struct sockaddr *)&addr, len);
+       xlisten(s, 5);
 
        movefd(s, 0);
 }
@@ -129,7 +108,7 @@ static void handlexitsigs(int signum)
 }
 
 /* May succeed. If not, won't care. */
-static inline void writepid(uid_t nobody, uid_t nogrp)
+static void writepid(uid_t nobody, uid_t nogrp)
 {
        char buf[24];
        int fd = open(PIDFILE, O_WRONLY|O_CREAT|O_TRUNC, 0664);
@@ -156,20 +135,20 @@ static int godaemon(void)
 
        switch (fork()) {
        case -1:
-               bb_perror_msg_and_die("Could not fork");
+               bb_perror_msg_and_die("fork");
 
        case 0:
                pw = getpwnam(nobodystr);
                if (pw == NULL)
-                       bb_error_msg_and_die("Cannot find uid/gid of user '%s'", nobodystr);
+                       bb_error_msg_and_die("cannot find uid/gid of user '%s'", nobodystr);
                nobody = pw->pw_uid;
                nogrp = pw->pw_gid;
                writepid(nobody, nogrp);
 
                close(0);
                inetbind();
-               if (setgid(nogrp))   bb_error_msg_and_die("Could not setgid()");
-               if (setuid(nobody))  bb_error_msg_and_die("Could not setuid()");
+               xsetgid(nogrp);
+               xsetuid(nobody);
                close(1);
                close(2);
 
@@ -178,7 +157,6 @@ static int godaemon(void)
 
                setsid();
 
-               openlog(bb_applet_name, 0, LOG_DAEMON);
                return 1;
        }
 
@@ -240,13 +218,17 @@ static int checkInput(char *buf, int len, int l)
 
 int fakeidentd_main(int argc, char **argv)
 {
+       /* This applet is an inetd-style daemon */
+       openlog(applet_name, 0, LOG_DAEMON);
+       logmode = LOGMODE_SYSLOG;
+
        memset(conns, 0, sizeof(conns));
        memset(&G, 0, sizeof(G));
        FD_ZERO(&G.readfds);
        FD_SET(0, &G.readfds);
 
        /* handle -b <ip> parameter */
-       bb_getopt_ulflags(argc, argv, "b:", &bind_ip_address);
+       getopt32(argc, argv, "b:", &bind_ip_address);
        /* handle optional REPLY STRING */
        if (optind < argc)
                G.identuser = argv[optind];
@@ -307,7 +289,7 @@ deleteconn:
 
                if (s < 0) {
                        if (errno != EINTR) /* EINTR */
-                               syslog(LOG_ERR, "accept: %s", strerror(errno));
+                               bb_perror_msg("accept");
                } else {
                        if (G.conncnt == MAXCONNS)
                                i = closeOldest();