Hi, Realizing that this may be a somewhat niche need, we have a use case where we'd like self-service-password to be able to operate on multiple directories on the same server. I have implemented this by defining a new "Directory" field on the various pages, in the form of a select list of directories defined in the config file.
If you think this would be useful functionality, please feel free to include this in the self-service-password tool (with whatever cleanups/modifications you may feel are necessary). If not, then I'll just throw this out there in case any other users have a similar use case to mine. (Note: I have only done the localization for the English language here, but porting that to the rest of the supported languages should be fairly trivial.) Thanks. -- Greg Veldman IT Infrastructure Services, Purdue University [email protected] | (765)-496-2456
--- conf/config.inc.php.orig 2017-02-16 09:42:49.480259994 -0600 +++ conf/config.inc.php 2017-02-16 09:33:36.441379373 -0600 @@ -23,11 +23,15 @@ # Configuration #============================================================================== # LDAP +$ldap_directories = array ( + "One" => "dc=one,dc=example,dc=com", + "Two" => "dc=two,dc=example,dc=com", +); $ldap_url = "ldap://localhost"; $ldap_starttls = false; -$ldap_binddn = "cn=manager,dc=example,dc=com"; +$ldap_binddn = "cn=manager,{directory}"; $ldap_bindpw = "secret"; -$ldap_base = "dc=example,dc=com"; +$ldap_base = "{directory}"; $ldap_login_attribute = "uid"; $ldap_fullname_attribute = "cn"; $ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))"; --- lang/en.inc.php.orig 2017-02-16 09:20:32.227250273 -0600 +++ lang/en.inc.php 2017-02-16 08:57:48.583814434 -0600 @@ -35,6 +35,7 @@ $messages['passworderror'] = "Password was refused by the LDAP directory"; $messages['title'] = "Self service password"; $messages['login'] = "Login"; +$messages['directory'] = "Directory"; $messages['oldpassword'] = "Old password"; $messages['newpassword'] = "New password"; $messages['confirmpassword'] = "Confirm"; --- pages/change.php.orig 2017-02-15 14:58:26.410812333 -0600 +++ pages/change.php 2017-02-16 09:13:54.624585647 -0600 @@ -27,6 +27,7 @@ # Initiate vars $result = ""; $login = ""; +$directory = ""; $confirmpassword = ""; $newpassword = ""; $oldpassword = ""; @@ -43,11 +44,14 @@ else { $result = "oldpasswordrequired"; } if (isset($_REQUEST["login"]) and $_REQUEST["login"]) { $login = $_REQUEST["login"]; } else { $result = "loginrequired"; } +if (isset($_REQUEST["directory"]) and $_REQUEST["directory"]) { $directory = $_REQUEST["directory"]; } + else { $result = "loginrequired"; } if (! isset($_REQUEST["login"]) and ! isset($_POST["confirmpassword"]) and ! isset($_POST["newpassword"]) and ! isset($_POST["oldpassword"])) { $result = "emptychangeform"; } # Strip slashes added by PHP $login = stripslashes_if_gpc_magic_quotes($login); +$directory = stripslashes_if_gpc_magic_quotes($directory); $oldpassword = stripslashes_if_gpc_magic_quotes($oldpassword); $newpassword = stripslashes_if_gpc_magic_quotes($newpassword); $confirmpassword = stripslashes_if_gpc_magic_quotes($confirmpassword); @@ -57,6 +61,11 @@ $result = check_username_validity($login,$login_forbidden_chars); } +# Check the entered directory for characters that our installation doesn't support +if ( $result === "" ) { + $result = check_username_validity($directory,$login_forbidden_chars); +} + # Match new and confirm password if ( $newpassword != $confirmpassword ) { $result="nomatch"; } @@ -93,6 +102,7 @@ # Bind if ( isset($ldap_binddn) && isset($ldap_bindpw) ) { + $ldap_binddn = str_replace("{directory}", $directory, $ldap_binddn); $bind = ldap_bind($ldap, $ldap_binddn, $ldap_bindpw); } else { $bind = ldap_bind($ldap); @@ -106,6 +116,7 @@ # Search for user $ldap_filter = str_replace("{login}", $login, $ldap_filter); + $ldap_base = str_replace("{directory}", $directory, $ldap_base); $search = ldap_search($ldap, $ldap_base, $ldap_filter); $errno = ldap_errno($ldap); @@ -245,6 +256,23 @@ </div> </div> </div> + <div class="form-group"> + <label for="directory" class="col-sm-4 control-label"><?php echo $messages["directory"]; ?></label> + <div class="col-sm-8"> + <div class="input-group"> + <span class="input-group-addon"><i class="fa fa-user"></i></span> + <select name="directory" id="directory"> + <?php + foreach ($ldap_directories as $name => $base) { + echo "<option value=\"$base\">$name</option>\n"; + unset($base); + unset($name); + } + ?> + </select> + </div> + </div> + </div> <div class="form-group"> <label for="oldpassword" class="col-sm-4 control-label"><?php echo $messages["oldpassword"]; ?></label> <div class="col-sm-8"> --- pages/sendsms.php.orig 2017-02-15 14:58:55.608575486 -0600 +++ pages/sendsms.php 2017-02-16 09:14:46.670982783 -0600 @@ -27,6 +27,7 @@ # Initiate vars $result = ""; $login = ""; +$directory = ""; $sms = ""; $ldap = ""; $userdn = ""; @@ -58,10 +59,11 @@ session_name("smstoken"); session_start(); $login = $_SESSION['login']; + $directory = $_SESSION['directory']; $sessiontoken = $_SESSION['smstoken']; $attempts = $_SESSION['attempts']; - if ( !$login or !$sessiontoken) { + if ( !$login or !$directory or !$sessiontoken) { $result = "tokennotvalid"; error_log("Unable to open session $smstokenid"); } elseif ($sessiontoken != $smstoken) { @@ -96,21 +98,29 @@ $decrypted_sms_login = explode(':', decrypt($_REQUEST["encrypted_sms_login"], $keyphrase)); $sms = $decrypted_sms_login[0]; $login = $decrypted_sms_login[1]; + $directory = $decrypted_sms_login[2]; $result = "sendsms"; -} elseif (isset($_REQUEST["login"]) and $_REQUEST["login"]) { +} elseif (isset($_REQUEST["login"]) and $_REQUEST["login"] and isset($_REQUEST["directory"]) and $_REQUEST["directory"]) { $login = $_REQUEST["login"]; + $directory = $_REQUEST["directory"]; } else { $result = "emptysendsmsform"; } # Strip slashes added by PHP $login = stripslashes_if_gpc_magic_quotes($login); +$directory = stripslashes_if_gpc_magic_quotes($directory); # Check the entered username for characters that our installation doesn't support if ( $result === "" ) { $result = check_username_validity($login,$login_forbidden_chars); } +# Check the entered directory for characters that our installation doesn't support +if ( $result === "" ) { + $result = check_username_validity($directory,$login_forbidden_chars); +} + #============================================================================== # Check reCAPTCHA #============================================================================== @@ -144,6 +154,7 @@ # Bind if ( isset($ldap_binddn) && isset($ldap_bindpw) ) { + $ldap_binddn = str_replace("{directory}", $directory, $ldap_binddn); $bind = ldap_bind($ldap, $ldap_binddn, $ldap_bindpw); } else { $bind = ldap_bind($ldap); @@ -157,6 +168,7 @@ # Search for user $ldap_filter = str_replace("{login}", $login, $ldap_filter); + $ldap_base = str_replace("{directory}", $directory, $ldap_base); $search = ldap_search($ldap, $ldap_base, $ldap_filter); $errno = ldap_errno($ldap); @@ -187,7 +199,7 @@ error_log("No SMS number found for user $login"); } else { $displayname = ldap_get_values($ldap, $entry, $ldap_fullname_attribute); - $encrypted_sms_login = encrypt("$sms:$login", $keyphrase); + $encrypted_sms_login = encrypt("$sms:$login:$directory", $keyphrase); $result = "smsuserfound"; } @@ -209,6 +221,7 @@ session_name("smstoken"); session_start(); $_SESSION['login'] = $login; + $_SESSION['directory'] = $directory; $_SESSION['smstoken'] = $smstoken; $_SESSION['time'] = time(); $_SESSION['attempts'] = 0; @@ -248,6 +261,7 @@ session_name("token"); session_start(); $_SESSION['login'] = $login; + $_SESSION['directory'] = $directory; $_SESSION['time'] = time(); $token = encrypt(session_id(), $keyphrase); @@ -321,6 +335,12 @@ </div> </div> <div class="form-group"> + <label class="col-sm-4 control-label"><?php echo $messages["directory"]; ?></label> + <div class="col-sm-8"> + <p class="form-control-static"><?php echo $directory; ?></p> + </div> + </div> + <div class="form-group"> <label class="col-sm-4 control-label"><?php echo $messages["sms"]; ?></label> <div class="col-sm-8"> <p class="form-control-static"><?php if ($sms_partially_hide_number) echo (substr_replace($sms, '****', 4 , 4)); else echo $sms;?></p> @@ -383,6 +403,23 @@ </div> </div> </div> + <div class="form-group"> + <label for="directory" class="col-sm-4 control-label"><?php echo $messages["directory"]; ?></label> + <div class="col-sm-8"> + <div class="input-group"> + <span class="input-group-addon"><i class="fa fa-user"></i></span> + <select name="directory" id="directory"> + <?php + foreach ($ldap_directories as $name => $base) { + echo "<option value=\"$base\">$name</option>\n"; + unset($base); + unset($name); + } + ?> + </select> + </div> + </div> + </div> <?php if ($use_recaptcha) { ?> <div class="form-group"> <div class="col-sm-offset-4 col-sm-8"> --- pages/sendtoken.php.orig 2017-02-15 14:59:04.097797379 -0600 +++ pages/sendtoken.php 2017-02-16 09:14:59.768334314 -0600 @@ -27,6 +27,7 @@ # Initiate vars $result = ""; $login = ""; +$directory = ""; $mail = ""; $ldap = ""; $userdn = ""; @@ -36,11 +37,14 @@ else { $result = "mailrequired"; } if (isset($_REQUEST["login"]) and $_REQUEST["login"]) { $login = $_REQUEST["login"]; } else { $result = "loginrequired"; } -if (! isset($_POST["mail"]) and ! isset($_REQUEST["login"])) +if (isset($_REQUEST["directory"]) and $_REQUEST["directory"]) { $directory = $_REQUEST["directory"]; } + else { $result = "loginrequired"; } +if (! isset($_POST["mail"]) and ! isset($_REQUEST["login"]) and ! isset($_REQUEST["directory"])) { $result = "emptysendtokenform"; } # Strip slashes added by PHP $login = stripslashes_if_gpc_magic_quotes($login); +$directory = stripslashes_if_gpc_magic_quotes($directory); $mail = stripslashes_if_gpc_magic_quotes($mail); # Check the entered username for characters that our installation doesn't support @@ -48,6 +52,11 @@ $result = check_username_validity($login,$login_forbidden_chars); } +# Check the entered directory for characters that our installation doesn't support +if ( $result === "" ) { + $result = check_username_validity($directory,$login_forbidden_chars); +} + #============================================================================== # Check reCAPTCHA #============================================================================== @@ -81,6 +90,7 @@ # Bind if ( isset($ldap_binddn) && isset($ldap_bindpw) ) { + $ldap_binddn = str_replace("{directory}", $directory, $ldap_binddn); $bind = ldap_bind($ldap, $ldap_binddn, $ldap_bindpw); } else { $bind = ldap_bind($ldap); @@ -94,6 +104,7 @@ # Search for user $ldap_filter = str_replace("{login}", $login, $ldap_filter); + $ldap_base = str_replace("{directory}", $directory, $ldap_base); $search = ldap_search($ldap, $ldap_base, $ldap_filter); $errno = ldap_errno($ldap); @@ -146,6 +157,7 @@ session_name("token"); session_start(); $_SESSION['login'] = $login; + $_SESSION['directory'] = $directory; $_SESSION['time'] = time(); if ( $crypt_tokens ) { @@ -230,6 +242,23 @@ </div> </div> </div> + <div class="form-group"> + <label for="directory" class="col-sm-4 control-label"><?php echo $messages["directory"]; ?></label> + <div class="col-sm-8"> + <div class="input-group"> + <span class="input-group-addon"><i class="fa fa-user"></i></span> + <select name="directory" id="directory"> + <?php + foreach ($ldap_directories as $name => $base) { + echo "<option value=\"$base\">$name</option>\n"; + unset($base); + unset($name); + } + ?> + </select> + </div> + </div> + </div> <div class="form-group"> <label for="mail" class="col-sm-4 control-label"><?php echo $messages["mail"]; ?></label> <div class="col-sm-8"> --- pages/resetbytoken.php.orig 2017-02-15 15:11:58.180042026 -0600 +++ pages/resetbytoken.php 2017-02-16 08:54:03.258835840 -0600 @@ -27,6 +27,7 @@ # Initiate vars $result = ""; $login = ""; +$directory = ""; $token = ""; $tokenid = ""; $newpassword = ""; @@ -66,8 +67,9 @@ session_name("token"); session_start(); $login = $_SESSION['login']; + $directory = $_SESSION['directory']; - if ( !$login ) { + if ( !$login or !$directory ) { $result = "tokennotvalid"; error_log("Unable to open session $tokenid"); } else { @@ -131,6 +133,7 @@ # Bind if ( isset($ldap_binddn) && isset($ldap_bindpw) ) { + $ldap_binddn = str_replace("{directory}", $directory, $ldap_binddn); $bind = ldap_bind($ldap, $ldap_binddn, $ldap_bindpw); } else { $bind = ldap_bind($ldap); @@ -144,6 +147,7 @@ # Search for user $ldap_filter = str_replace("{login}", $login, $ldap_filter); + $ldap_base = str_replace("{directory}", $directory, $ldap_base); $search = ldap_search($ldap, $ldap_base, $ldap_filter); $errno = ldap_errno($ldap); @@ -252,6 +256,15 @@ </div> </div> </div> + <div class="form-group"> + <label for="directory" class="col-sm-4 control-label"><?php echo $messages["directory"]; ?></label> + <div class="col-sm-8"> + <div class="input-group"> + <span class="input-group-addon"><i class="fa fa-user"></i></span> + <input type="text" name="directory" id="directory" value="<?php echo htmlentities($directory) ?>" class="form-control" placeholder="<?php echo $messages["directory"]; ?>" /> + </div> + </div> + </div> <div class="form-group"> <label for="newpassword" class="col-sm-4 control-label"><?php echo $messages["newpassword"]; ?></label> <div class="col-sm-8"> --- pages/setquestions.php.orig 2017-02-16 10:37:13.344392825 -0600 +++ pages/setquestions.php 2017-02-16 10:41:39.593652890 -0600 @@ -27,6 +27,7 @@ # Initiate vars $result = ""; $login = ""; +$directory = ""; $password = ""; $question = ""; $answer = ""; @@ -41,11 +42,14 @@ else { $result = "passwordrequired"; } if (isset($_REQUEST["login"]) and $_REQUEST["login"]) { $login = $_REQUEST["login"]; } else { $result = "loginrequired"; } +if (isset($_REQUEST["directory"]) and $_REQUEST["directory"]) { $directory = $_REQUEST["directory"]; } + else { $result = "loginrequired"; } if (! isset($_POST["answer"]) and ! isset($_POST["question"]) and ! isset($_POST["password"]) and ! isset($_REQUEST["login"])) { $result = "emptysetquestionsform"; } # Strip slashes added by PHP $login = stripslashes_if_gpc_magic_quotes($login); +$directory = stripslashes_if_gpc_magic_quotes($directory); $password = stripslashes_if_gpc_magic_quotes($password); $question = stripslashes_if_gpc_magic_quotes($question); $answer = stripslashes_if_gpc_magic_quotes($answer); @@ -55,6 +59,11 @@ $result = check_username_validity($login,$login_forbidden_chars); } +# Check the entered directory for characters that our installation doesn't support +if ( $result === "" ) { + $result = check_username_validity($directory,$login_forbidden_chars); +} + #============================================================================== # Check reCAPTCHA #============================================================================== @@ -88,6 +97,7 @@ # Bind if ( isset($ldap_binddn) && isset($ldap_bindpw) ) { + $ldap_binddn = str_replace("{directory}", $directory, $ldap_binddn); $bind = ldap_bind($ldap, $ldap_binddn, $ldap_bindpw); } else { $bind = ldap_bind($ldap); @@ -101,6 +111,7 @@ # Search for user $ldap_filter = str_replace("{login}", $login, $ldap_filter); + $ldap_base = str_replace("{directory}", $directory, $ldap_base); $search = ldap_search($ldap, $ldap_base, $ldap_filter); $errno = ldap_errno($ldap); @@ -207,6 +218,23 @@ </div> </div> </div> + <div class="form-group"> + <label for="directory" class="col-sm-4 control-label"><?php echo $messages["directory"]; ?></label> + <div class="col-sm-8"> + <div class="input-group"> + <span class="input-group-addon"><i class="fa fa-user"></i></span> + <select name="directory" id="directory"> + <?php + foreach ($ldap_directories as $name => $base) { + echo "<option value=\"$base\">$name</option>\n"; + unset($base); + unset($name); + } + ?> + </select> + </div> + </div> + </div> <div class="form-group"> <label for="password" class="col-sm-4 control-label"><?php echo $messages["password"]; ?></label> <div class="col-sm-8"> --- pages/resetbyquestions.php.orig 2017-02-16 10:37:20.501588128 -0600 +++ pages/resetbyquestions.php 2017-02-16 10:46:17.523220466 -0600 @@ -27,6 +27,7 @@ # Initiate vars $result = ""; $login = ""; +$directory = ""; $question = ""; $answer = ""; $newpassword = ""; @@ -46,11 +47,14 @@ else { $result = "questionrequired"; } if (isset($_REQUEST["login"]) and $_REQUEST["login"]) { $login = $_REQUEST["login"]; } else { $result = "loginrequired"; } +if (isset($_REQUEST["directory"]) and $_REQUEST["directory"]) { $directory = $_REQUEST["directory"]; } + else { $result = "loginrequired"; } if (! isset($_POST["confirmpassword"]) and ! isset($_POST["newpassword"]) and ! isset($_POST["answer"]) and ! isset($_POST["question"]) and ! isset($_REQUEST["login"])) { $result = "emptyresetbyquestionsform"; } # Strip slashes added by PHP $login = stripslashes_if_gpc_magic_quotes($login); +$directory = stripslashes_if_gpc_magic_quotes($directory); $question = stripslashes_if_gpc_magic_quotes($question); $answer = stripslashes_if_gpc_magic_quotes($answer); $newpassword = stripslashes_if_gpc_magic_quotes($newpassword); @@ -61,6 +65,11 @@ $result = check_username_validity($login,$login_forbidden_chars); } +# Check the entered directory for characters that our installation doesn't support +if ( $result === "" ) { + $result = check_username_validity($directory,$login_forbidden_chars); +} + #============================================================================== # Check reCAPTCHA #============================================================================== @@ -94,6 +103,7 @@ # Bind if ( isset($ldap_binddn) && isset($ldap_bindpw) ) { + $ldap_binddn = str_replace("{directory}", $directory, $ldap_binddn); $bind = ldap_bind($ldap, $ldap_binddn, $ldap_bindpw); } else { $bind = ldap_bind($ldap); @@ -107,6 +117,7 @@ # Search for user $ldap_filter = str_replace("{login}", $login, $ldap_filter); + $ldap_base = str_replace("{directory}", $directory, $ldap_base); $search = ldap_search($ldap, $ldap_base, $ldap_filter); $errno = ldap_errno($ldap); @@ -219,6 +230,23 @@ </div> </div> </div> + <div class="form-group"> + <label for="directory" class="col-sm-4 control-label"><?php echo $messages["directory"]; ?></label> + <div class="col-sm-8"> + <div class="input-group"> + <span class="input-group-addon"><i class="fa fa-user"></i></span> + <select name="directory" id="directory"> + <?php + foreach ($ldap_directories as $name => $base) { + echo "<option value=\"$base\">$name</option>\n"; + unset($base); + unset($name); + } + ?> + </select> + </div> + </div> + </div> <div class="form-group"> <label for="question" class="col-sm-4 control-label"><?php echo $messages["question"]; ?></label> <div class="col-sm-8">
_______________________________________________ ltb-dev mailing list [email protected] https://lists.ltb-project.org/cgi-bin/mailman/listinfo/ltb-dev
