diff options
Diffstat (limited to 'networking/isrv_identd.c')
-rw-r--r-- | networking/isrv_identd.c | 19 |
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); } |