Re: identd(8) can exit on bad input

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: identd(8) can exit on bad input

Jérémie Courrèges-Anglas-2

(cc'ing tech@)

Jason Mader <[hidden email]> writes:

[...]

> Feb 23 18:06:11 dns2 identd[11069]: main: accept. errno = 53

[...]

If that is a real problem for you, run identd under inetd.

Here's a patch that attempts to fix your problem (and more):

- in bg mode, don't exit if accept() errors out with ECONNABORTED or
  EINTR, and sleep 1 second if no fd is available ; if another error
  happens, print a human-readable string, not only errno
- sync comment and manpage with reality (identd doesn't fallback to user
  nobody)

I noticed that /etc/rc.d/identd starts identd with the "-elo" flags,
while inetd uses only "-el". Shouldn't that be synced too?

Thoughts?

Index: identd.8
===================================================================
RCS file: /cvs/src/libexec/identd/identd.8,v
retrieving revision 1.28
diff -u -p -r1.28 identd.8
--- identd.8 6 Jun 2010 07:05:40 -0000 1.28
+++ identd.8 28 Feb 2013 11:49:17 -0000
@@ -175,11 +175,7 @@ TCP/IP port if running as a stand-alone
 .Nm
 runs as user
 .Qq _identd
-by default and falls back to
-.Qq nobody
-if the
-.Qq _identd
-user does not exist.
+by default.
 .It Fl v
 Log every request to syslog if
 .Fl l
Index: identd.c
===================================================================
RCS file: /cvs/src/libexec/identd/identd.c,v
retrieving revision 1.50
diff -u -p -r1.50 identd.c
--- identd.c 4 Dec 2012 02:24:47 -0000 1.50
+++ identd.c 28 Feb 2013 11:46:12 -0000
@@ -162,7 +162,7 @@ main(int argc, char *argv[])
 
  openlog(__progname, LOG_PID, LOG_DAEMON);
 
- /* runs as _identd if possible, fallback to "nobody" */
+ /* runs as _identd by default */
  if (getuid() == 0) {
  if ((pwd = getpwnam(DEFAULT_UID)) == NULL)
  error("no such user %s", DEFAULT_UID);
@@ -426,8 +426,14 @@ main(int argc, char *argv[])
  * Accept the new client
  */
  fd = accept(pfds[i].fd, NULL, NULL);
- if (fd == -1)
- error("main: accept. errno = %d", errno);
+ if (fd == -1) {
+ if (errno == EMFILE || errno == ENFILE)
+ sleep(1);
+ else if (errno != EINTR
+    && errno != ECONNABORTED)
+ error("main: accept: %s",
+      strerror(errno));
+ }
 
  /*
  * Fork a child, parent continues

Reply | Threaded
Open this post in threaded view
|

Re: identd(8) can exit on bad input

Jérémie Courrèges-Anglas-2

Sorry for the noise, this one is completely wrong.
I'll submit another patch when I have more time to think properly.