Date: Tue, 18 Jun 2002 04:34:40 -0700 (PDT) From: Mike Makonnen <makonnen@pacbell.net> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/39463: [PATCH] Add several options to fingerd Message-ID: <200206181134.g5IBYeD0008313@kokeb.ambesa.net>
next in thread | raw e-mail | index | archive | help
>Number: 39463
>Category: bin
>Synopsis: [PATCH] Add several options to fingerd
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Tue Jun 18 04:30:06 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: Mike Makonnen
>Release: FreeBSD 5.0-CURRENT i386
>Organization:
>Environment:
FreeBSD kokeb.ambesa.net 5.0-CURRENT FreeBSD 5.0-CURRENT #0: Mon Jun 17 04:15:41 PDT 2002 mikem@kokeb.ambesa.net:/FreeBSD/builds/current/obj/FreeBSD/builds/current/src.orig/sys/GENERIC i386
>Description:
The following patch adds several options to fingerd that are obtained
from NetBSD.
o -g : Restricts output of the gecos field
o -h : Displays name of remote host in short mode
o -m : Prevent matching of user names (i.e. from gecos)
o -P : Restricts output of .plan .forward .pubkey .project files
o -S : Prints information in short mode, one line per user
All the options behave the same as in NetBSD, except for the -P option.
It's actually supposed to be -p (small case) but that's already used.
Note that the -g option depends on finger(1) having a -g option, which
it currently doesn't. I have submitted a separate pr for that in
bin/39462.
>How-To-Repeat:
>Fix:
--- fingerd.patch begins here ---
Index: libexec/fingerd/fingerd.8
===================================================================
RCS file: /home/ncvs/src/libexec/fingerd/fingerd.8,v
retrieving revision 1.8
diff -u -r1.8 fingerd.8
--- libexec/fingerd/fingerd.8 10 Aug 2001 13:45:21 -0000 1.8
+++ libexec/fingerd/fingerd.8 18 Jun 2002 11:19:13 -0000
@@ -32,7 +32,7 @@
.\" @(#)fingerd.8 8.1 (Berkeley) 6/4/93
.\" $FreeBSD: src/libexec/fingerd/fingerd.8,v 1.8 2001/08/10 13:45:21 ru Exp $
.\"
-.Dd June 4, 1993
+.Dd June 18, 2002
.Dt FINGERD 8
.Os
.Sh NAME
@@ -42,6 +42,11 @@
.Nm
.Op Fl s
.Op Fl l
+.Op Fl h
+.Op Fl m
+.Op Fl P
+.Op Fl S
+.Op Fl g
.Op Fl p Ar filename
.Sh DESCRIPTION
.Nm Fingerd
@@ -97,15 +102,27 @@
as server program arguments in
.Pa /etc/inetd.conf :
.Bl -tag -width indent
-.It Fl s
-Enable secure mode.
-Queries without a user name are rejected and
-forwarding of queries to other remote hosts is denied.
+.It Fl g
+Do not show any gecos information besides the users' real names. When
+used in conjunction with the
+.Fl h
+option, it also has the side-effect of restricting output of the
+host name from which the user is connected.
+.It Fl h
+Display the name of the remote host in short mode,
+instead of the office location and office phone.
.It Fl l
Enable logging.
The name of the host originating the query is reported via
.Xr syslog 3
at LOG_NOTICE priority.
+.It Fl m
+Prevent matching of
+.Ar user
+names.
+.Ar User
+is usually a login name; however, matching will also be done on the
+users' real names, unless this option is supplied.
.It Fl p
Use an alternate program as the local information provider.
The default local program
@@ -117,6 +134,25 @@
this option allows a system manager
to have more control over what information is
provided to remote sites.
+.It Fl s
+Enable secure mode.
+Queries without a user name are rejected and
+forwarding of queries to other remote hosts is denied.
+.It Fl P
+Prevents
+.Xr finger 1
+from displaying the contents of the
+.Dq Pa .plan ,
+.Dq Pa .project ,
+.Dq Pa .pubkey
+and
+.Dq Pa .forward
+files.
+.It Fl S
+Prints user information in short mode, one line per user.
+This overrides the
+.Dq Pa Whois switch
+that may be passed in from the remote client.
.El
.Sh SEE ALSO
.Xr finger 1 ,
Index: libexec/fingerd/fingerd.c
===================================================================
RCS file: /home/ncvs/src/libexec/fingerd/fingerd.c,v
retrieving revision 1.21
diff -u -r1.21 fingerd.c
--- libexec/fingerd/fingerd.c 30 May 2002 21:35:39 -0000 1.21
+++ libexec/fingerd/fingerd.c 18 Jun 2002 10:08:48 -0000
@@ -68,29 +68,47 @@
main(int argc, char *argv[])
{
FILE *fp;
- int ch;
+ int ch, ac;
char *lp;
struct sockaddr_storage ss;
- int p[2], logging, secure, sval;
+ int p[2], logging, secure, short_list, sval;
#define ENTRIES 50
char **ap, *av[ENTRIES + 1], **comp, line[1024], *prog;
char rhost[MAXHOSTNAMELEN];
+ ac = 2;
+ short_list = 0;
prog = _PATH_FINGER;
logging = secure = 0;
openlog("fingerd", LOG_PID | LOG_CONS, LOG_DAEMON);
opterr = 0;
- while ((ch = getopt(argc, argv, "slp:")) != -1)
+ while ((ch = getopt(argc, argv, "slghmPSp:")) != -1)
switch (ch) {
+ case 'g':
+ av[ac++] = "-g";
+ break;
+ case 'h':
+ av[ac++] = "-h";
+ break;
case 'l':
logging = 1;
break;
+ case 'm':
+ av[ac++] = "-m";
+ break;
case 'p':
prog = optarg;
break;
case 's':
secure = 1;
break;
+ case 'P':
+ av[ac++] = "-p";
+ break;
+ case 'S':
+ short_list = 1;
+ av[ac++] = "-s";
+ break;
case '?':
default:
logerr("illegal option -- %c", optopt);
@@ -137,11 +155,11 @@
}
comp = &av[1];
- av[2] = "--";
- for (lp = line, ap = &av[3];;) {
+ av[ac++] = "--";
+ for (lp = line, ap = &av[ac];;) {
*ap = strtok(lp, " \t\r\n");
if (!*ap) {
- if (secure && ap == &av[3]) {
+ if (secure && (strcmp("--", av[ac - 1]) == 0)) {
puts("must provide username\r\n");
exit(1);
}
@@ -154,12 +172,17 @@
/* RFC742: "/[Ww]" == "-l" */
if ((*ap)[0] == '/' && ((*ap)[1] == 'W' || (*ap)[1] == 'w')) {
- av[1] = "-l";
- comp = &av[0];
+ if (!short_list) {
+ av[1] = "-l";
+ comp = &av[0];
+ }
}
- else if (++ap == av + ENTRIES) {
- *ap = NULL;
- break;
+ else {
+ ac++;
+ if (++ap == av + ENTRIES) {
+ *ap = NULL;
+ break;
+ }
}
lp = NULL;
}
--- fingerd.patch ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200206181134.g5IBYeD0008313>
