Package: pure-ftpd-ldap 
Severity: wishlist 
Tags: patch 

Here is a patch I made for choosing how Dereferencing of LDAP aliases is made 
in pure-ftpd/ldap module. This option was crucial for me and maybe for others, 
so here is my contribution. 

Files patched are : 
- log_ldap.c / log_ldap.h => added an option LDAPDereference = 
[never|always|search|find] (default = never) 
- pureftpd-ldap.conf => added the option (commented) and its description 
- README.ldap => added a more complete description of the option 

Patch was against pure-ftpd 1.0.20. 

Is it possible to forward this patch to upstream ? 

Thanks, AF. 

-- System Information: 
Debian Release: testing/unstable 
APT prefers unstable 
APT policy: (500, 'unstable'), (500, 'stable') 
Architecture: i386 (i686) 
Shell: /bin/sh linked to /bin/bash 
Kernel: Linux 2.6.11-1-686 
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
------------------------------------------

Faites un voeu et puis Voila ! www.voila.fr 

diff -urN pure-ftpd-1.0.20.old/README.LDAP pure-ftpd-1.0.20.new/README.LDAP
--- pure-ftpd-1.0.20.old/README.LDAP    2004-02-29 22:49:37.000000000 +0100
+++ pure-ftpd-1.0.20.new/README.LDAP    2005-08-05 16:57:22.000000000 +0200
@@ -94,6 +94,11 @@
 - LDAPVersion is the protocol version to use. Version 3 is recommended and
 needed with OpenLDAP servers. It is the default.
 
+- LDAPDereference if the method for dereferencing LDAP aliases. Should be
+one of : never, always, search, or find to specify that aliases are never
+dereferenced, always dereferenced, dereferenced when searching, or
+dereferenced only when locating the base object for the search.
+
 In fact, the only mandatory keyword is LDAPBaseDN. Other keywords are
 optional and defaults are ok for local testing.
 
diff -urN pure-ftpd-1.0.20.old/pureftpd-ldap.conf 
pure-ftpd-1.0.20.new/pureftpd-ldap.conf
--- pure-ftpd-1.0.20.old/pureftpd-ldap.conf     2002-10-02 15:47:28.000000000 
+0200
+++ pure-ftpd-1.0.20.new/pureftpd-ldap.conf     2005-08-05 16:55:02.000000000 
+0200
@@ -62,3 +62,10 @@
 
 # LDAPVersion 3
 
+# Optional : alias derefencing method. Default : never
+# Specify how aliases dereferencing is done.  Should be one of :
+# never, always, search, or find to specify that aliases are never
+# dereferenced, always dereferenced, dereferenced when searching,
+# or dereferenced only when locating the base object for the search.
+
+# LDAPDereference always
diff -urN pure-ftpd-1.0.20.old/src/log_ldap.c 
pure-ftpd-1.0.20.new/src/log_ldap.c
--- pure-ftpd-1.0.20.old/src/log_ldap.c 2004-05-15 23:18:33.000000000 +0200
+++ pure-ftpd-1.0.20.new/src/log_ldap.c 2005-08-05 16:51:04.000000000 +0200
@@ -68,6 +68,21 @@
     } else {
         ldap_version = LDAP_DEFAULT_VERSION;
     }
+    if (ldap_deref_s != NULL) {
+        if (       strcasecmp(ldap_deref_s, "always")==0 ) {
+            ldap_deref=LDAP_DEREF_ALWAYS;
+        } else if( strcasecmp(ldap_deref_s, "search")==0 ) {
+            ldap_deref=LDAP_DEREF_SEARCHING;
+        } else if( strcasecmp(ldap_deref_s, "find"  )==0 ) {
+            ldap_deref=LDAP_DEREF_FINDING;
+        } else {
+            ldap_deref=LDAP_DEREF_NEVER;
+        }
+        free(ldap_deref_s);
+        ldap_deref_s = NULL;
+    } else {
+        ldap_deref = LDAP_DEREF_NEVER;
+    }
     if (default_uid_s != NULL) {
         default_uid = (uid_t) strtoul(default_uid_s, NULL, 10);        
         free(default_uid_s);
@@ -113,6 +128,9 @@
 # ifdef LDAP_OPT_PROTOCOL_VERSION    
     int version = ldap_version;
 # endif
+# ifdef LDAP_OPT_DEREF
+    int deref = ldap_deref;
+# endif
     
     if (ldap_host == NULL || port < 0) {
         return NULL;
@@ -126,6 +144,14 @@
     return NULL;
     }
 # endif
+
+# ifdef LDAP_OPT_DEREF
+    if (ldap_set_option(ld, LDAP_OPT_DEREF, &deref) !=
+    LDAP_SUCCESS) {
+    return NULL;
+    }
+# endif
+
     if (ldap_bind_s(ld, root, pwd, LDAP_AUTH_SIMPLE) != LDAP_SUCCESS) {
         return NULL;
     }
diff -urN pure-ftpd-1.0.20.old/src/log_ldap_p.h 
pure-ftpd-1.0.20.new/src/log_ldap_p.h
--- pure-ftpd-1.0.20.old/src/log_ldap_p.h       2004-02-29 22:49:28.000000000 
+0100
+++ pure-ftpd-1.0.20.new/src/log_ldap_p.h       2005-08-05 17:00:58.000000000 
+0200
@@ -18,6 +18,8 @@
 static char *ldap_homedirectory;
 static char *ldap_version_s;
 static int ldap_version;
+static char *ldap_deref_s;
+static int ldap_deref;
 static char *default_uid_s;
 static uid_t default_uid;
 static char *default_gid_s;
@@ -32,6 +34,7 @@
     { "LDAPFilter", &ldap_filter},
     { "LDAPHomeDir", &ldap_homedirectory },
     { "LDAPVersion", &ldap_version_s },
+    { "LDAPDereference", &ldap_deref_s },
     { "LDAPDefaultUID", &default_uid_s },
     { "LDAPDefaultGID", &default_gid_s },
     { NULL, NULL }

Reply via email to