projects
/
oweals
/
busybox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
I *always* forgotting svn add
[oweals/busybox.git]
/
networking
/
fakeidentd.c
diff --git
a/networking/fakeidentd.c
b/networking/fakeidentd.c
index b097d9980b196b1feaf5f282a4aee27641f8882d..8967a7a386a4a0be34693275631a96fa5302008f 100644
(file)
--- a/
networking/fakeidentd.c
+++ b/
networking/fakeidentd.c
@@
-10,19
+10,7
@@
*/
#include "busybox.h"
*/
#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 <sys/syslog.h>
-#include <time.h>
-#include <sys/socket.h>
-#include <errno.h>
#include <sys/uio.h>
#include <sys/uio.h>
@@
-76,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 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);
{
if (from != to) {
dup2(from, to);
@@
-89,28
+77,24
@@
static void inetbind(void)
int s, port;
struct sockaddr_in addr;
int len = sizeof(addr);
int s, port;
struct sockaddr_in addr;
int len = sizeof(addr);
- int one = 1;
struct servent *se;
struct servent *se;
- if ((se = getservbyname("identd", "tcp")) == NULL)
-
port = IDENT_PORT;
- else
+ se = getservbyname("identd", "tcp");
+ port = IDENT_PORT;
+ if (se)
port = se->s_port;
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)
);
+ setsockopt
_reuseaddr(s
);
memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = inet_addr(bind_ip_address);
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = inet_addr(bind_ip_address);
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);
}
movefd(s, 0);
}
@@
-123,15
+107,15
@@
static void handlexitsigs(int signum)
}
/* May succeed. If not, won't care. */
}
/* 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
];
+ char buf[
sizeof(int)*3 + 2
];
int fd = open(PIDFILE, O_WRONLY|O_CREAT|O_TRUNC, 0664);
if (fd < 0)
return;
int fd = open(PIDFILE, O_WRONLY|O_CREAT|O_TRUNC, 0664);
if (fd < 0)
return;
- s
nprintf(buf, 23
, "%d\n", getpid());
+ s
printf(buf
, "%d\n", getpid());
write(fd, buf, strlen(buf));
fchown(fd, nobody, nogrp);
close(fd);
write(fd, buf, strlen(buf));
fchown(fd, nobody, nogrp);
close(fd);
@@
-150,20
+134,20
@@
static int godaemon(void)
switch (fork()) {
case -1:
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)
case 0:
pw = getpwnam(nobodystr);
if (pw == NULL)
- bb_error_msg_and_die("
C
annot find uid/gid of user '%s'", nobodystr);
+ bb_error_msg_and_die("
c
annot find uid/gid of user '%s'", nobodystr);
nobody = pw->pw_uid;
nogrp = pw->pw_gid;
writepid(nobody, nogrp);
close(0);
inetbind();
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);
close(1);
close(2);
@@
-172,7
+156,6
@@
static int godaemon(void)
setsid();
setsid();
- openlog(bb_applet_name, 0, LOG_DAEMON);
return 1;
}
return 1;
}
@@
-234,13
+217,17
@@
static int checkInput(char *buf, int len, int l)
int fakeidentd_main(int argc, char **argv)
{
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 */
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];
/* handle optional REPLY STRING */
if (optind < argc)
G.identuser = argv[optind];
@@
-301,7
+288,7
@@
deleteconn:
if (s < 0) {
if (errno != EINTR) /* EINTR */
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();
} else {
if (G.conncnt == MAXCONNS)
i = closeOldest();
@@
-315,7
+302,7
@@
deleteconn:
conns[i].lasttime = time(NULL);
}
}
conns[i].lasttime = time(NULL);
}
}
- } /* end of while(1) */
+ } /* end of while
(1) */
return 0;
}
return 0;
}