aboutsummaryrefslogtreecommitdiff
path: root/networking/isrv_identd.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/isrv_identd.c')
-rw-r--r--networking/isrv_identd.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/networking/isrv_identd.c b/networking/isrv_identd.c
index c6b0f6528..252c8aba9 100644
--- a/networking/isrv_identd.c
+++ b/networking/isrv_identd.c
@@ -25,8 +25,7 @@ enum { TIMEOUT = 20 };
typedef struct identd_buf_t {
int pos;
- int fd_flag;
- char buf[64 - 2*sizeof(int)];
+ char buf[64 - sizeof(int)];
} identd_buf_t;
#define bogouser bb_common_bufsiz1
@@ -42,7 +41,7 @@ static int new_peer(isrv_state_t *state, int fd)
if (isrv_register_fd(state, peer, fd) < 0)
return peer; /* failure, unregister peer */
- buf->fd_flag = fcntl(fd, F_GETFL) | O_NONBLOCK;
+ ndelay_on(fd);
isrv_want_rd(state, fd);
return 0;
}
@@ -55,8 +54,6 @@ static int do_rd(int fd, void **paramp)
cur = buf->buf + buf->pos;
- if (buf->fd_flag & O_NONBLOCK)
- fcntl(fd, F_SETFL, buf->fd_flag);
sz = safe_read(fd, cur, sizeof(buf->buf) - 1 - buf->pos);
if (sz < 0) {
@@ -70,7 +67,7 @@ static int do_rd(int fd, void **paramp)
p = strpbrk(cur, "\r\n");
if (p)
*p = '\0';
- if (!p && sz && buf->pos < (int)sizeof(buf->buf))
+ if (!p && sz)
return 0; /* "session is ok" */
/* Terminate session. If we are in server mode, then
@@ -78,8 +75,11 @@ static int do_rd(int fd, void **paramp)
if (fd == 0)
fd++; /* inetd mode? then write to fd 1 */
fdprintf(fd, "%s : USERID : UNIX : %s\r\n", buf->buf, bogouser);
- if (buf->fd_flag & O_NONBLOCK)
- fcntl(fd, F_SETFL, buf->fd_flag & ~O_NONBLOCK);
+ /*
+ * Why bother if we are going to close fd now anyway?
+ * if (server)
+ * ndelay_off(fd);
+ */
term:
free(buf);
return 1; /* "terminate" */
@@ -94,10 +94,9 @@ static void inetd_mode(void)
{
identd_buf_t *buf = xzalloc(sizeof(*buf));
/* buf->pos = 0; - xzalloc did it */
- /* We do NOT want nonblocking I/O here! */
- /* buf->fd_flag = 0; - xzalloc did it */
do
alarm(TIMEOUT);
+ /* Note: we do NOT want nonblocking I/O here! */
while (do_rd(0, (void*)&buf) == 0);
}