Package: pure-ftpd
Version: 1.0.19-4
Severity: important
Tags: patch
Hi,
The attached patch adds support for setting of two PAM items - PAM_RUSER
and PAM_RHOST (for remote user and host, respectively). This is needed to
be able to use pam_access with pure-ftpd for non-local login setups. The
changes are simple and don't affect much code, please consider applying it.
thanks,
marek
-- System Information:
Debian Release: 3.1
APT prefers unstable
APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)
Kernel: Linux 2.6.10-ac10-tux3a7-hacks
Locale: LANG=en_US.UTF-8, LC_CTYPE=pl_PL.UTF-8 (charmap=UTF-8)
Versions of packages pure-ftpd depends on:
ii libc6 2.3.2.ds1-20 GNU C Library: Shared libraries an
ii libcap1 1:1.10-14 support for getting/setting POSIX.
ii libpam0g 0.76-22 Pluggable Authentication Modules l
ii libssl0.9.7 0.9.7e-3 SSL shared libraries
ii pure-ftpd-common 1.0.19-4 Pure-FTPd FTP server (Common Files
-- no debconf information
--- pure-ftpd-1.0.19.orig/src/log_pam.c
+++ pure-ftpd-1.0.19/src/log_pam.c
@@ -135,7 +135,11 @@
int pam_error;
struct passwd pw, *pw_;
char *dir = NULL;
-
+#ifdef PAM_RHOST
+ struct hostent *hent;
+ const char *host;
+#endif
+
(void) sa;
(void) peer;
result->auth_ok = 0;
@@ -143,6 +147,31 @@
PAM_username = user;
pam_error = pam_start("pure-ftpd", user, &PAM_conversation, &pamh);
PAM_BAIL;
+
+ /* set PAM_RUSER and PAM_RHOST for modules like pam_env or pam_access */
+#ifdef PAM_RHOST
+ logfile(LOG_INFO, "PAM_RHOST enabled. Getting the peer address");
+ switch (STORAGE_FAMILY(*peer)) {
+ case AF_INET:
+ hent = gethostbyaddr(&STORAGE_SIN_ADDR(*peer), sizeof(STORAGE_SIN_ADDR(*peer)), AF_INET);
+ break;
+
+ case AF_INET6:
+ hent = gethostbyaddr(&STORAGE_SIN_ADDR6(*peer), sizeof(STORAGE_SIN_ADDR6(*peer)), AF_INET6);
+ break;
+ }
+
+ if (!hent)
+ (void)pam_set_item(pamh, PAM_RHOST, NULL);
+ else
+ (void)pam_set_item(pamh, PAM_RHOST, hent->h_name);
+#endif
+
+
+#ifdef PAM_RUSER
+ (void)pam_set_item(pamh, PAM_RUSER, user);
+#endif
+
# ifdef PAM_TTY
(void) pam_set_item(pamh, PAM_TTY, "pure-ftpd");
# endif