e000aa4
From 721de88621100f6ed33f1602415bc249f3ed3219 Mon Sep 17 00:00:00 2001
8167548
From: Martin Sehnoutka <msehnout@redhat.com>
e000aa4
Date: Thu, 17 Nov 2016 10:22:32 +0100
Ondřej Lysoněk 7c0626d
Subject: [PATCH 19/59] Introduce reverse_lookup_enable option.
8167548
e000aa4
vsftpd can transform IP address into hostname before
e000aa4
PAM authentication. You can disable it to prevent
e000aa4
performance issues.
8167548
---
8167548
 parseconf.c   |  1 +
8167548
 sysdeputil.c  | 14 +++++++++-----
8167548
 tunables.c    |  2 ++
8167548
 tunables.h    |  1 +
8167548
 vsftpd.conf.5 |  9 +++++++++
8167548
 5 files changed, 22 insertions(+), 5 deletions(-)
8167548
8167548
diff --git a/parseconf.c b/parseconf.c
8167548
index 30df598..3e0dba4 100644
8167548
--- a/parseconf.c
8167548
+++ b/parseconf.c
Jiri Skala c1683a2
@@ -91,6 +91,7 @@ parseconf_bool_array[] =
Jiri Skala c1683a2
   { "mdtm_write", &tunable_mdtm_write },
Jiri Skala c1683a2
   { "lock_upload_files", &tunable_lock_upload_files },
Jiri Skala c1683a2
   { "pasv_addr_resolve", &tunable_pasv_addr_resolve },
Jiri Skala c1683a2
+  { "reverse_lookup_enable", &tunable_reverse_lookup_enable },
Jiri Skala c1683a2
   { "userlist_log", &tunable_userlist_log },
Jiri Skala c1683a2
   { "debug_ssl", &tunable_debug_ssl },
Jiri Skala c1683a2
   { "require_cert", &tunable_require_cert },
8167548
diff --git a/sysdeputil.c b/sysdeputil.c
8167548
index 3bbabaa..2063c87 100644
8167548
--- a/sysdeputil.c
8167548
+++ b/sysdeputil.c
8167548
@@ -354,12 +354,16 @@ vsf_sysdep_check_auth(struct mystr* p_user_str,
Jiri Skala c1683a2
     return 0;
Jiri Skala c1683a2
   }
Jiri Skala c1683a2
 #ifdef PAM_RHOST
Jiri Skala c1683a2
-  sin.sin_addr.s_addr = inet_addr(str_getbuf(p_remote_host));
Jiri Skala c1683a2
-  host = gethostbyaddr((char*)&sin.sin_addr.s_addr,sizeof(struct in_addr),AF_INET);
Jiri Skala c1683a2
-  if (host != (struct hostent*)0)
Jiri Skala c1683a2
-    retval = pam_set_item(s_pamh, PAM_RHOST, host->h_name);
Jiri Skala c1683a2
-  else
Jiri Skala c1683a2
+  if (tunable_reverse_lookup_enable) {
Jiri Skala c1683a2
+    sin.sin_addr.s_addr = inet_addr(str_getbuf(p_remote_host));
Jiri Skala c1683a2
+    host = gethostbyaddr((char*)&sin.sin_addr.s_addr,sizeof(struct in_addr),AF_INET);
Jiri Skala c1683a2
+    if (host != (struct hostent*)0)
Jiri Skala c1683a2
+      retval = pam_set_item(s_pamh, PAM_RHOST, host->h_name);
Jiri Skala c1683a2
+    else
Jiri Skala c1683a2
+      retval = pam_set_item(s_pamh, PAM_RHOST, str_getbuf(p_remote_host));
Jiri Skala c1683a2
+  } else {
Jiri Skala c1683a2
     retval = pam_set_item(s_pamh, PAM_RHOST, str_getbuf(p_remote_host));
Jiri Skala c1683a2
+  }
Jiri Skala c1683a2
   if (retval != PAM_SUCCESS)
Jiri Skala c1683a2
   {
Jiri Skala c1683a2
     (void) pam_end(s_pamh, retval);
8167548
diff --git a/tunables.c b/tunables.c
8167548
index b30fca1..c737465 100644
8167548
--- a/tunables.c
8167548
+++ b/tunables.c
Jiri Skala c1683a2
@@ -72,6 +72,7 @@ int tunable_force_anon_data_ssl;
Jiri Skala c1683a2
 int tunable_mdtm_write;
Jiri Skala c1683a2
 int tunable_lock_upload_files;
Jiri Skala c1683a2
 int tunable_pasv_addr_resolve;
Jiri Skala c1683a2
+int tunable_reverse_lookup_enable;
Jiri Skala c1683a2
 int tunable_userlist_log;
Jiri Skala c1683a2
 int tunable_debug_ssl;
Jiri Skala c1683a2
 int tunable_require_cert;
Jiri Skala c1683a2
@@ -213,6 +214,7 @@ tunables_load_defaults()
Jiri Skala c1683a2
   tunable_mdtm_write = 1;
Jiri Skala c1683a2
   tunable_lock_upload_files = 1;
Jiri Skala c1683a2
   tunable_pasv_addr_resolve = 0;
Jiri Skala c1683a2
+  tunable_reverse_lookup_enable = 1;
Jiri Skala c1683a2
   tunable_userlist_log = 0;
Jiri Skala c1683a2
   tunable_debug_ssl = 0;
Jiri Skala c1683a2
   tunable_require_cert = 0;
8167548
diff --git a/tunables.h b/tunables.h
8167548
index e44d64c..9553038 100644
8167548
--- a/tunables.h
8167548
+++ b/tunables.h
8167548
@@ -73,6 +73,7 @@ extern int tunable_force_anon_data_ssl;       /* Require anon data uses SSL */
Jiri Skala c1683a2
 extern int tunable_mdtm_write;                /* Allow MDTM to set timestamps */
Jiri Skala c1683a2
 extern int tunable_lock_upload_files;         /* Lock uploading files */
Jiri Skala c1683a2
 extern int tunable_pasv_addr_resolve;         /* DNS resolve pasv_addr */
Jiri Skala c1683a2
+extern int tunable_reverse_lookup_enable;     /* Get hostname before pam auth */
Jiri Skala c1683a2
 extern int tunable_userlist_log;              /* Log every failed login attempt */
Jiri Skala c1683a2
 extern int tunable_debug_ssl;                 /* Verbose SSL logging */
Jiri Skala c1683a2
 extern int tunable_require_cert;              /* SSL client cert required */
8167548
diff --git a/vsftpd.conf.5 b/vsftpd.conf.5
8167548
index 72bb86f..fb6324e 100644
8167548
--- a/vsftpd.conf.5
8167548
+++ b/vsftpd.conf.5
Ondřej Lysoněk 7c0626d
@@ -423,6 +423,15 @@ so you may want to disable it. For a discussion of the consequences, see
Ondřej Lysoněk 7c0626d
 http://scarybeastsecurity.blogspot.com/2009/02/vsftpd-210-released.html
Ondřej Lysoněk 7c0626d
 (Added in v2.1.0).
Jiri Skala c1683a2
 
Ondřej Lysoněk 7c0626d
+Default: YES
Ondřej Lysoněk 7c0626d
+.TP
Jiri Skala c1683a2
+.B reverse_lookup_enable
Jiri Skala c1683a2
+Set to YES if you want vsftpd to transform the ip address into the hostname,
Jiri Skala c1683a2
+before pam authentication. This is useful if you use pam_access including the
Jiri Skala c1683a2
+hostname. If you want vsftpd to run on the environment where the reverse lookup
Jiri Skala c1683a2
+for some hostname is available and the name server doesn't respond for a while,
Jiri Skala c1683a2
+you should set this to NO to avoid a performance issue.
Jiri Skala c1683a2
+
Ondřej Lysoněk 7c0626d
 Default: YES
Ondřej Lysoněk 7c0626d
 .TP
Jiri Skala c1683a2
 .B run_as_launching_user
8167548
-- 
Ondřej Lysoněk 7c0626d
2.14.4
8167548