diff options
-rw-r--r-- | usr.sbin/identd/identd.8 | 10 | ||||
-rw-r--r-- | usr.sbin/identd/identd.c | 21 |
2 files changed, 21 insertions, 10 deletions
diff --git a/usr.sbin/identd/identd.8 b/usr.sbin/identd/identd.8 index 84d0559ba6c..f02828ef28b 100644 --- a/usr.sbin/identd/identd.8 +++ b/usr.sbin/identd/identd.8 @@ -1,4 +1,4 @@ -.\" $OpenBSD: identd.8,v 1.10 2013/04/29 04:17:58 dlg Exp $ +.\" $OpenBSD: identd.8,v 1.11 2013/07/17 15:38:47 okan Exp $ .\" .\" Copyright (c) 2013 David Gwynne <dlg@openbsd.org> .\" @@ -14,7 +14,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: April 29 2013 $ +.Dd $Mdocdate: July 17 2013 $ .Dt IDENTD 8 .Os .Sh NAME @@ -22,7 +22,7 @@ .Nd Identification Protocol daemon .Sh SYNOPSIS .Nm -.Op Fl 46dehNn +.Op Fl 46deHhNn .Op Fl l Ar address .Op Fl t Ar timeout .Sh DESCRIPTION @@ -57,6 +57,10 @@ instead of the or .Dq INVALID-PORT errors. +.It Fl H +Hide information about existing and non-existent users. +This flag implies +.Fl h . .It Fl h Hide the actual information about the user by providing an opaque token instead. diff --git a/usr.sbin/identd/identd.c b/usr.sbin/identd/identd.c index 64bae013d5b..3f3e452d4d8 100644 --- a/usr.sbin/identd/identd.c +++ b/usr.sbin/identd/identd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: identd.c,v 1.19 2013/04/29 06:32:11 jmc Exp $ */ +/* $OpenBSD: identd.c,v 1.20 2013/07/17 15:38:48 okan Exp $ */ /* * Copyright (c) 2013 David Gwynne <dlg@openbsd.org> @@ -180,7 +180,7 @@ __dead void usage(void) { extern char *__progname; - fprintf(stderr, "usage: %s [-46dehNn] [-l address] [-t timeout]\n", + fprintf(stderr, "usage: %s [-46deHhNn] [-l address] [-t timeout]\n", __progname); exit(1); } @@ -190,6 +190,7 @@ int debug = 0; int noident = 0; int on = 1; int unknown_err = 0; +int hideall = 0; int (*parent_uprintf)(struct ident_resolver *, struct passwd *) = parent_username; @@ -220,7 +221,7 @@ main(int argc, char *argv[]) pid_t parent; int sibling; - while ((c = getopt(argc, argv, "46dehl:Nnp:t:")) != -1) { + while ((c = getopt(argc, argv, "46deHhl:Nnp:t:")) != -1) { switch (c) { case '4': family = AF_INET; @@ -234,6 +235,9 @@ main(int argc, char *argv[]) case 'e': unknown_err = 1; break; + case 'H': + hideall = 1; + /* FALLTHROUGH */ case 'h': parent_uprintf = parent_token; break; @@ -375,12 +379,12 @@ parent_rd(int fd, short events, void *arg) lerr(1, "resolver alloc"); pw = getpwuid(uid); - if (pw == NULL) { + if (pw == NULL && !hideall) { r->error = E_NOUSER; goto done; } - if (noident) { + if (noident && !hideall) { parent_noident(r, pw); if (r->error != E_NONE) goto done; @@ -420,8 +424,11 @@ parent_token(struct ident_resolver *r, struct passwd *pw) token = gentoken(); rv = asprintf(&r->buf, "%s", token); if (rv != -1) { - lnotice("token %s == uid %u (%s)", token, - (u_int)pw->pw_uid, pw->pw_name); + if (pw) + lnotice("token %s == uid %u (%s)", token, + (u_int)pw->pw_uid, pw->pw_name); + else + lnotice("token %s == NO USER", token); } return (rv); |