Blame SOURCES/telnet-log-address.patch

f3e6c7
diff --git a/telnetd/telnetd.8 b/telnetd/telnetd.8
f3e6c7
index 02b48c7..c72ab76 100644
f3e6c7
--- a/telnetd/telnetd.8
f3e6c7
+++ b/telnetd/telnetd.8
f3e6c7
@@ -42,7 +42,7 @@
f3e6c7
 protocol server
f3e6c7
 .Sh SYNOPSIS
f3e6c7
 .Nm /usr/sbin/in.telnetd
f3e6c7
-.Op Fl hnNs
f3e6c7
+.Op Fl ihnNs
f3e6c7
 .Op Fl a Ar authmode
f3e6c7
 .Op Fl D Ar debugmode
f3e6c7
 .Op Fl L Ar loginprg
f3e6c7
@@ -158,6 +158,10 @@ option may be used to enable encryption debugging code.
f3e6c7
 .It Fl h
f3e6c7
 Disables the printing of host-specific information before
f3e6c7
 login has been completed.
f3e6c7
+.It Fl i
f3e6c7
+Disable reverse DNS lookups and use the numeric IP address in logs
f3e6c7
+and REMOTEHOST environment variable. (-i switch corresponds to 
f3e6c7
+utilities like last)
f3e6c7
 .It Fl L Ar loginprg
f3e6c7
 This option may be used to specify a different login program.
f3e6c7
 By default, 
f3e6c7
diff --git a/telnetd/telnetd.c b/telnetd/telnetd.c
f3e6c7
index a4988a9..2ac8bc1 100644
f3e6c7
--- a/telnetd/telnetd.c
f3e6c7
+++ b/telnetd/telnetd.c
f3e6c7
@@ -84,6 +84,7 @@ int	hostinfo = 1;			/* do we print login banner? */
f3e6c7
 int debug = 0;
f3e6c7
 int debugsix = 0;
f3e6c7
 int keepalive = 1;
f3e6c7
+int numeric_hosts = 0;
f3e6c7
 char *loginprg = _PATH_LOGIN;
f3e6c7
 char *progname;
f3e6c7
 int lookupself = 1;
f3e6c7
@@ -113,7 +114,7 @@ main(int argc, char *argv[], char *env[])
f3e6c7
 
f3e6c7
 	progname = *argv;
f3e6c7
 
f3e6c7
-	while ((ch = getopt(argc, argv, "d:a:e:lhnr:I:D:B:sS:a:X:L:N")) != EOF) {
f3e6c7
+	while ((ch = getopt(argc, argv, "d:a:e:ilhnr:I:D:B:sS:a:X:L:N")) != EOF) {
f3e6c7
 		switch(ch) {
f3e6c7
 
f3e6c7
 #ifdef	AUTHENTICATE
f3e6c7
@@ -196,6 +197,14 @@ main(int argc, char *argv[], char *env[])
f3e6c7
 			break;
f3e6c7
 #endif	/* AUTHENTICATE */
f3e6c7
 
f3e6c7
+                /*
f3e6c7
+                 * Use ip address instead of hostname when
f3e6c7
+                 * calling login process.
f3e6c7
+                 */
f3e6c7
+                case 'i':
f3e6c7
+                        numeric_hosts = 1;
f3e6c7
+                        break;
f3e6c7
+
f3e6c7
 		case 'h':
f3e6c7
 			hostinfo = 0;
f3e6c7
 			break;
f3e6c7
@@ -663,10 +672,12 @@ doit(struct sockaddr *who, socklen_t wholen)
f3e6c7
 	int error = -1;
f3e6c7
 	char namebuf[255];
f3e6c7
 
f3e6c7
-	error = getnameinfo(who, wholen, namebuf, sizeof(namebuf), NULL, 0, 0);
f3e6c7
+        /* if we don't want hostname '-i', skip this call to getnameinfo */
f3e6c7
+        if (numeric_hosts == 0)
f3e6c7
+                error = getnameinfo(who, wholen, namebuf, sizeof(namebuf), NULL, 0, 0);
f3e6c7
 	
f3e6c7
 	/* if we can't get a hostname now, settle for an address */	
f3e6c7
-	if(error == EAI_AGAIN)
f3e6c7
+	if(error == EAI_AGAIN || numeric_hosts != 0)
f3e6c7
 		error = getnameinfo(who, wholen, namebuf, sizeof(namebuf),
f3e6c7
 				NULL, 0, NI_NUMERICHOST);
f3e6c7