*/
#include "busybox.h"
-
-#include <unistd.h>
-#include <string.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <sys/syslog.h>
-
-#include <pwd.h>
-
#include <sys/syslog.h>
-#include <time.h>
-#include <sys/socket.h>
-#include <errno.h>
#include <sys/uio.h>
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);
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));
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);
}
}
/* 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);
switch (fork()) {
case -1:
- bb_perror_msg_and_die("Could not fork");
+ bb_perror_msg_and_die("fork");
case 0:
pw = getpwnam(nobodystr);
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);
setsid();
- openlog(bb_applet_name, 0, LOG_DAEMON);
return 1;
}
int fakeidentd_main(int argc, char **argv)
{
+ /* This applet is an inetd-style daemon */
+ openlog(bb_applet_name, 0, LOG_DAEMON);
+ logmode = LOGMODE_SYSLOG;
+
memset(conns, 0, sizeof(conns));
memset(&G, 0, sizeof(G));
FD_ZERO(&G.readfds);
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();