This patch from AllianceTec modifies the users_ldap authentication backend, and fixes caching problems for the HTTP login module (in the core). It has not yet been applied because the ewiki_auth() interface is going to get overhauled considerably anyhow. cd .../ewiki-R1.0Nx/ patch -p1 < .../auth_ldap.patch --- ewiki-R1.02a+dev3/ewiki.php 2004-09-29 14:14:48.000000000 -0500 +++ at_patches/ewiki.php 2005-03-01 10:42:45.883229728 -0600 @@ -3232,7 +3232,7 @@ $ok = true; $ewiki_errmsg=""; -#echo "_a($id,dat,$action,$ring,$request_auth)
\n"; +#echo "_a($id,$data,$action,$ring,$request_auth)
\n"; if (EWIKI_PROTECTED_MODE) { @@ -3337,6 +3337,13 @@ if ($username || $password) { ewiki_log("_auth_userdb: wrong password supplied for user '$username', not verified against any userdb", 3); $ewiki_errmsg = "wrong username and/or password"; + // Alliance Technologies addition + #-- If the ewiki_auth_query_http plugin is loaded, we need the following to prevent the HTTP auth from being cached by the browser + if ($ewiki_plugins["auth_query"][0] == "ewiki_auth_query_http") { + header('HTTP/1.1 401 Authentication Required'); + header('Status: 401 Authentication Required'); + header('WWW-Authenticate: Basic realm="Login incorrect"'); + } # ewiki_auth($uu, $uu, $uu, $uu, 2); } return(false); @@ -3962,4 +3969,4 @@ - \ No newline at end of file + --- ewiki-R1.02a+dev3/plugins/auth/users_ldap.php 2003-12-01 11:14:05.000000000 -0600 +++ at_patches/users_ldap.php 2005-03-01 10:42:46.022208600 -0600 @@ -4,45 +4,63 @@ Check username and password by connecting to LDAP server. */ - -#-- config -define("EWIKI_LDAP_SERVER", "ldap.example.com"); -define("EWIKI_LDAP_RDN", 'cn=$USER,ou=users,dc=example,dc=com'); -define("EWIKI_LDAP_FILTER", ""); // sn=* ??? -define("EWIKI_LDAP_RING", 2); - - #-- glue $ewiki_plugins["auth_userdb"][] = "ewiki_auth_userdb_ldap"; - - -function ewiki_auth_userdb_ldap($username, $password=NULL) { - - #-- connect - if ($conn = ldap_connect(EWIKI_LDAP_SERVER)) { - - #-- vars - $rdn = preg_replace('/[$%_]+\{USER\}|[$%]+USER[$%]?/i', $username, EWIKI_LDAP_RDN); - $search = EWIKI_LDAP_SEARCH; - - #-- bind to domain - if (ldap_bind($conn, $rdn, $password)) { - - #-- connected == authenticated - if (!$search || ldap_count_entries($conn, ldap_search($conn, $rdn, $search)) ) { - - ldap_close($conn); - - #-- return password array() as true value for userdb plugins - return(array($password, EWIKI_LDAP_RING)); - } - - } - - ldap_close($conn); - } - return(false); +function ewiki_auth_userdb_ldap($username, $password) { +// Modified for Alliance Technologies + //return(array($password, EWIKI_LDAP_RING)); // Added by Josh on 2005-02-25 to disable edirectory check for PM + + #-- connect + if ($conn = ldap_connect(EWIKI_LDAP_SERVER)) { + // -- Begin Alliance Technologies Add + // TODO: make this conditionalized + if (!ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3)) { + fatal_error("Failed to set LDAP Protocol version to 3, TLS not supported."); + } + if (!ldap_start_tls($conn)) { + fatal_error("Ldap_start_tls failed"); + } + // -- End Alliance Technologies Add + + #-- vars + $rdn = preg_replace('/[$%_]+\{USER\}|[$%]+USER[$%]?/i', $username, EWIKI_LDAP_RDN); + // -- Alliance Technologies - Changed SEARCH to FILTER + $search = EWIKI_LDAP_FILTER; + + #-- bind to domain + error_reporting(E_ERROR); + if (ldap_bind($conn, $rdn, $password)) { + #-- connected == authenticated + if ($rdn == 'cn=morej,o=alliance') { + ldap_close($conn); + return(array($password, EWIKI_LDAP_ADMIN_RING)); + } + if (!$search || ldap_count_entries($conn, ldap_search($conn, $rdn, $search)) ) { + ldap_close($conn); + #-- return password array() as true value for userdb plugins + return(array($password, EWIKI_LDAP_RING)); + } + } elseif ($rdn) { + //Failure + return(false); + header('HTTP/1.1 401 Authentication Required'); + header('Status: 401 Authentication Required'); + header('WWW-Authenticate: Basic realm="Login incorrect"'); + $redir = 'http://' . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"] ; + $redir = ereg_replace('=.+/','=',$redir); + #header("Location: $redir"); + + echo('
');
+			var_dump($_SERVER);
+			echo('
'); + die(); + } + error_reporting(E_ALL & ~E_NOTICE); + + ldap_close($conn); + } +return(false); } -?> \ No newline at end of file +?>