00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00034 require_once "class.ilObjectGUI.php";
00035
00036 class ilObjAuthSettingsGUI extends ilObjectGUI
00037 {
00042 function ilObjAuthSettingsGUI($a_data,$a_id,$a_call_by_reference,$a_prepare_output = true)
00043 {
00044 $this->type = "auth";
00045 $this->ilObjectGUI($a_data,$a_id,$a_call_by_reference,$a_prepare_output);
00046 }
00047
00053 function viewObject()
00054 {
00055 global $rbacsystem;
00056
00057 if (!$rbacsystem->checkAccess("visible,read",$this->object->getRefId()))
00058 {
00059 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
00060 }
00061
00062 $this->getTemplateFile("general");
00063
00064 $this->tpl->setVariable("FORMACTION", "adm_object.php?ref_id=".$this->ref_id."&cmd=gateway");
00065 $this->tpl->setVariable("COLSPAN", 3);
00066 $this->tpl->setVariable("TXT_AUTH_TITLE", $this->lng->txt("auth_select"));
00067 $this->tpl->setVariable("TXT_OPTIONS", $this->lng->txt("options"));
00068 $this->tpl->setVariable("TXT_LOCAL", $this->lng->txt("auth_local"));
00069 $this->tpl->setVariable("TXT_LOCAL_DESC", $this->lng->txt("auth_local_desc"));
00070 $this->tpl->setVariable("TXT_LDAP", $this->lng->txt("auth_ldap"));
00071 $this->tpl->setVariable("TXT_LDAP_DESC", $this->lng->txt("auth_ldap_desc"));
00072
00073 $this->tpl->setVariable("TXT_RADIUS", $this->lng->txt("auth_radius"));
00074 $this->tpl->setVariable("TXT_RADIUS_DESC", $this->lng->txt("auth_radius_desc"));
00075 $this->tpl->setVariable("TXT_SCRIPT", $this->lng->txt("auth_script"));
00076 $this->tpl->setVariable("TXT_SCRIPT_DESC", $this->lng->txt("auth_script_desc"));
00077
00078 $this->tpl->setVariable("TXT_CONFIGURE", $this->lng->txt("auth_configure"));
00079 $this->tpl->setVariable("TXT_AUTH_REMARK", $this->lng->txt("auth_remark_non_local_auth"));
00080 $this->tpl->setVariable("TXT_CANCEL", $this->lng->txt("cancel"));
00081 $this->tpl->setVariable("TXT_SUBMIT", $this->lng->txt("save"));
00082 $this->tpl->setVariable("CMD_SUBMIT", "setAuthMode");
00083
00084
00085 $checked = "checked=\"checked\"";
00086 $disabled = "disabled=\"disabled\"";
00087 $style_disabled = "_disabled";
00088
00089
00090 switch (AUTH_CURRENT)
00091 {
00092 case AUTH_LOCAL:
00093 $this->tpl->setVariable("CHK_LOCAL", $checked);
00094 $this->tpl->setVariable("SUB_LDAP", $style_disabled);
00095 $this->tpl->setVariable("BTN_LDAP", $disabled);
00096 $this->tpl->setVariable("SUB_RADIUS", $style_disabled);
00097 $this->tpl->setVariable("BTN_RADIUS", $disabled);
00098 $this->tpl->setVariable("SUB_SCRIPT", $style_disabled);
00099 $this->tpl->setVariable("BTN_SCRIPT", $disabled);
00100 break;
00101
00102 case AUTH_LDAP:
00103 $this->tpl->setVariable("CHK_LDAP", $checked);
00104 $this->tpl->setVariable("SUB_RADIUS", $style_disabled);
00105 $this->tpl->setVariable("BTN_RADIUS", $disabled);
00106 $this->tpl->setVariable("SUB_SCRIPT", $style_disabled);
00107 $this->tpl->setVariable("BTN_SCRIPT", $disabled);
00108 break;
00109
00110 case AUTH_RADIUS:
00111 $this->tpl->setVariable("CHK_RADIUS", $checked);
00112 $this->tpl->setVariable("SUB_LDAP", $style_disabled);
00113 $this->tpl->setVariable("BTN_LDAP", $disabled);
00114 $this->tpl->setVariable("SUB_SCRIPT", $style_disabled);
00115 $this->tpl->setVariable("BTN_SCRIPT", $disabled);
00116 break;
00117
00118 case AUTH_SCRIPT:
00119 $this->tpl->setVariable("CHK_SCRIPT", $checked);
00120 $this->tpl->setVariable("SUB_LDAP", $style_disabled);
00121 $this->tpl->setVariable("BTN_LDAP", $disabled);
00122 $this->tpl->setVariable("SUB_RADIUS", $style_disabled);
00123 $this->tpl->setVariable("BTN_RADIUS", $disabled);
00124 break;
00125 }
00126 }
00127
00132 function saveObject()
00133 {
00134 global $rbacadmin;
00135
00136
00137 $newObj = parent::saveObject();
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 sendInfo($this->lng->txt("object_added"),true);
00149
00150 ilUtil::redirect($this->getReturnLocation("save",$this->ctrl->getLinkTarget($this,"")));
00151 }
00152
00158 function getTabs(&$tabs_gui)
00159 {
00160
00161
00162 }
00163
00164 function setAuthModeObject()
00165 {
00166 global $rbacsystem;
00167
00168 if (!$rbacsystem->checkAccess("write",$this->object->getRefId()))
00169 {
00170 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
00171 }
00172
00173 if (empty($_POST["auth_mode"]))
00174 {
00175 $this->ilias->raiseError($this->lng->txt("auth_err_no_mode_selected"),$this->ilias->error_obj->MESSAGE);
00176 }
00177
00178 if ($_POST["auth_mode"] == AUTH_CURRENT)
00179 {
00180 sendInfo($this->lng->txt("auth_mode").": ".$this->getAuthModeTitle()." ".$this->lng->txt("auth_mode_not_changed"),true);
00181 ilUtil::redirect($this->getReturnLocation("view",$this->ctrl->getLinkTarget($this,"")));
00182 }
00183
00184 switch ($_POST["auth_mode"])
00185 {
00186 case AUTH_LDAP:
00187 if ($this->object->checkAuthLDAP() !== true)
00188 {
00189 sendInfo($this->lng->txt("auth_ldap_not_configured"),true);
00190 ilUtil::redirect($this->getReturnLocation("view",$this->ctrl->getLinkTarget($this,"editLDAP")));
00191 }
00192 break;
00193
00194 case AUTH_RADIUS:
00195 if ($this->object->checkAuthRADIUS() !== true)
00196 {
00197 sendInfo($this->lng->txt("auth_radius_not_configured"),true);
00198 ilUtil::redirect($this->getReturnLocation("view",$this->ctrl->getLinkTarget($this,"editRADIUS")));
00199 }
00200 break;
00201
00202 case AUTH_SCRIPT:
00203 if ($this->object->checkAuthScript() !== true)
00204 {
00205 sendInfo($this->lng->txt("auth_script_not_configured"),true);
00206 ilUtil::redirect($this->getReturnLocation("view",$this->ctrl->getLinkTarget($this,"editScript")));
00207 }
00208 break;
00209 }
00210
00211 $this->ilias->setSetting("auth_mode",$_POST["auth_mode"]);
00212
00213 sendInfo($this->lng->txt("auth_mode_changed_to")." ".$this->getAuthModeTitle(),true);
00214 ilUtil::redirect($this->getReturnLocation("view",$this->ctrl->getLinkTarget($this,"")));
00215 }
00216
00222 function editLDAPObject()
00223 {
00224 global $rbacsystem;
00225
00226 if (!$rbacsystem->checkAccess("write",$this->object->getRefId()))
00227 {
00228 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
00229 }
00230
00231 if ($_SESSION["error_post_vars"])
00232 {
00233 if ($_SESSION["error_post_vars"]["ldap"]["tls"] == "1")
00234 {
00235 $this->tpl->setVariable("LDAP_TLS_CHK", "checked=\"checked\"");
00236 }
00237
00238 if ($_SESSION["error_post_vars"]["ldap"]["version"] == "3")
00239 {
00240 $this->tpl->setVariable("LDAP_VERSION3_CHK", "checked=\"checked\"");
00241 }
00242 else
00243 {
00244 $this->tpl->setVariable("LDAP_VERSION2_CHK", "checked=\"checked\"");
00245 }
00246
00247 $this->tpl->setVariable("LDAP_SERVER", $_SESSION["error_post_vars"]["ldap"]["server"]);
00248 $this->tpl->setVariable("LDAP_BASEDN", $_SESSION["error_post_vars"]["ldap"]["basedn"]);
00249 $this->tpl->setVariable("LDAP_SEARCH_BASE", $_SESSION["error_post_vars"]["ldap"]["search_base"]);
00250 $this->tpl->setVariable("LDAP_PORT", $_SESSION["error_post_vars"]["ldap"]["port"]);
00251 $this->tpl->setVariable("LDAP_LOGIN_KEY", $_SESSION["error_post_vars"]["ldap"]["login_key"]);
00252 $this->tpl->setVariable("LDAP_OBJECTCLASS", $_SESSION["error_post_vars"]["ldap"]["objectclass"]);
00253 }
00254 else
00255 {
00256
00257 $settings = $this->ilias->getAllSettings();
00258
00259 if ($settings["ldap_tls"] == "1")
00260 {
00261 $this->tpl->setVariable("LDAP_TLS_CHK", "checked=\"checked\"");
00262 }
00263
00264 $this->tpl->setVariable("LDAP_SERVER", $settings["ldap_server"]);
00265 $this->tpl->setVariable("LDAP_BASEDN", $settings["ldap_basedn"]);
00266 $this->tpl->setVariable("LDAP_SEARCH_BASE", $settings["ldap_search_base"]);
00267
00268 if (empty($settings["ldap_port"]))
00269 {
00270 $this->tpl->setVariable("LDAP_PORT", "389");
00271 }
00272 else
00273 {
00274 $this->tpl->setVariable("LDAP_PORT", $settings["ldap_port"]);
00275 }
00276
00277 if (empty($settings["ldap_login_key"]))
00278 {
00279 $this->tpl->setVariable("LDAP_LOGIN_KEY", "uid");
00280 }
00281 else
00282 {
00283 $this->tpl->setVariable("LDAP_LOGIN_KEY", $settings["ldap_login_key"]);
00284 }
00285
00286 if (empty($settings["ldap_objectclass"]))
00287 {
00288 $this->tpl->setVariable("LDAP_OBJECTCLASS", "posixAccount");
00289 }
00290 else
00291 {
00292 $this->tpl->setVariable("LDAP_OBJECTCLASS", $settings["ldap_objectclass"]);
00293 }
00294
00295 if (empty($settings["ldap_version"]) or $settings["ldap_version"] == "2")
00296 {
00297 $this->tpl->setVariable("LDAP_VERSION2_CHK", "checked=\"checked\"");
00298 }
00299 else
00300 {
00301 $this->tpl->setVariable("LDAP_VERSION3_CHK", "checked=\"checked\"");
00302 }
00303 }
00304
00305 $this->getTemplateFile("ldap");
00306
00307 $this->tpl->setVariable("FORMACTION", "adm_object.php?ref_id=".$this->ref_id."&cmd=gateway");
00308 $this->tpl->setVariable("COLSPAN", 3);
00309 $this->tpl->setVariable("TXT_LDAP_TITLE", $this->lng->txt("ldap_configure"));
00310 $this->tpl->setVariable("TXT_OPTIONS", $this->lng->txt("options"));
00311 $this->tpl->setVariable("TXT_LDAP_TLS", $this->lng->txt("ldap_tls"));
00312 $this->tpl->setVariable("TXT_LDAP_SERVER", $this->lng->txt("ldap_server"));
00313 $this->tpl->setVariable("TXT_LDAP_BASEDN", $this->lng->txt("ldap_basedn"));
00314 $this->tpl->setVariable("TXT_LDAP_SEARCH_BASE", $this->lng->txt("ldap_search_base"));
00315 $this->tpl->setVariable("TXT_LDAP_PORT", $this->lng->txt("ldap_port"));
00316 $this->tpl->setVariable("TXT_LDAP_TLS", $this->lng->txt("ldap_tls"));
00317
00318 $this->tpl->setVariable("TXT_LDAP_VERSION", $this->lng->txt("ldap_version"));
00319 $this->tpl->setVariable("TXT_LDAP_VERSION2", $this->lng->txt("ldap_v2"));
00320 $this->tpl->setVariable("TXT_LDAP_VERSION3", $this->lng->txt("ldap_v3"));
00321
00322 $this->tpl->setVariable("TXT_LDAP_LOGIN_KEY", $this->lng->txt("ldap_login_key"));
00323 $this->tpl->setVariable("TXT_LDAP_OBJECTCLASS", $this->lng->txt("ldap_objectclass"));
00324
00325 $this->tpl->setVariable("TXT_LDAP_PASSWD", $this->lng->txt("ldap_passwd"));
00326
00327 $this->tpl->setVariable("TXT_REQUIRED_FLD", $this->lng->txt("required_field"));
00328 $this->tpl->setVariable("TXT_CANCEL", $this->lng->txt("cancel"));
00329 $this->tpl->setVariable("TXT_SUBMIT", $this->lng->txt("save"));
00330 $this->tpl->setVariable("CMD_SUBMIT", "saveLDAP");
00331 }
00332
00338 function saveLDAPObject()
00339 {
00340 global $ilUser;
00341
00342
00343 if (!$_POST["ldap"]["server"] or !$_POST["ldap"]["basedn"] or !$_POST["ldap"]["port"] or !$_POST["ldap"]["login_key"] or !$_POST["ldap"]["objectclass"])
00344 {
00345 $this->ilias->raiseError($this->lng->txt("fill_out_all_required_fields"),$this->ilias->error_obj->MESSAGE);
00346 }
00347
00348
00349 if (!$_POST["ldap"]["passwd"])
00350 {
00351 $this->ilias->raiseError($this->lng->txt("err_enter_current_passwd"),$this->ilias->error_obj->MESSAGE);
00352 }
00353
00354
00355 if ((preg_match("/^[0-9]{0,5}$/",$_POST["ldap"]["port"])) == false)
00356 {
00357 $this->ilias->raiseError($this->lng->txt("err_invalid_port"),$this->ilias->error_obj->MESSAGE);
00358 }
00359
00360
00361 if ($_POST["ldap"]["tls"] != "1")
00362 {
00363 $_POST["ldap"]["tls"] = "0";
00364 }
00365
00366
00367
00368
00369 $ldap_host = $_POST["ldap"]["server"];
00370 $ldap_port = $_POST["ldap"]["port"];
00371 $ldap_pass = $_POST["ldap"]["passwd"];
00372
00373 $ldap_userattr = $_POST["ldap"]["login_key"];
00374 $ldap_useroc = $_POST["ldap"]["objectclass"];
00375
00376 $ldap_dn = $ldap_userattr."=".$this->ilias->account->getLogin().",";
00377
00378
00379 if ($_POST["ldap"]["search_base"])
00380 {
00381 $ldap_searchbase .= $_POST["ldap"]["search_base"].",";
00382 }
00383
00384 $ldap_searchbase .= $_POST["ldap"]["basedn"];
00385
00386 $ldap_dn .= $ldap_searchbase;
00387
00388
00389 $ldap_conn = ldap_connect($ldap_host,$ldap_port);
00390
00391 @ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, $_POST["ldap"]["version"]);
00392
00393
00394 if (($ldap_bind = ldap_bind($ldap_conn)) == false)
00395 {
00396 $this->ilias->raiseError($this->lng->txt("err_ldap_connect_failed"),$this->ilias->error_obj->MESSAGE);
00397 }
00398
00399
00400 $filter = sprintf('(&(objectClass=%s)(%s=%s))', $ldap_useroc, $ldap_userattr, $ilUser->getLogin());
00401
00402
00403 $func_params = array($ldap_conn, $ldap_searchbase, $filter, array($ldap_userattr));
00404
00405
00406 if (($result_id = @call_user_func_array('ldap_search', $func_params)) == false)
00407 {
00408 $this->ilias->raiseError($this->lng->txt("err_ldap_search_failed"),$this->ilias->error_obj->MESSAGE);
00409 }
00410
00411 if (ldap_count_entries($ldap_conn, $result_id) != 1)
00412 {
00413 $this->ilias->raiseError($this->lng->txt("err_ldap_user_not_found"),$this->ilias->error_obj->MESSAGE);
00414 }
00415
00416
00417 $entry_id = ldap_first_entry($ldap_conn, $result_id);
00418 $user_dn = ldap_get_dn($ldap_conn, $entry_id);
00419
00420 ldap_free_result($result_id);
00421
00422
00423 if (@ldap_bind($ldap_conn, $user_dn, $ldap_pass) == false)
00424 {
00425 $this->ilias->raiseError($this->lng->txt("err_ldap_auth_failed"),$this->ilias->error_obj->MESSAGE);
00426 }
00427
00428
00429 @ldap_unbind($ldap_conn);
00430
00431
00432 $this->ilias->setSetting("ldap_tls", $_POST["ldap"]["tls"]);
00433 $this->ilias->setSetting("ldap_server", $_POST["ldap"]["server"]);
00434 $this->ilias->setSetting("ldap_basedn", $_POST["ldap"]["basedn"]);
00435 $this->ilias->setSetting("ldap_search_base", $_POST["ldap"]["search_base"]);
00436 $this->ilias->setSetting("ldap_port", $_POST["ldap"]["port"]);
00437 $this->ilias->setSetting("ldap_version", $_POST["ldap"]["version"]);
00438 $this->ilias->setSetting("ldap_login_key", $_POST["ldap"]["login_key"]);
00439 $this->ilias->setSetting("ldap_objectclass", $_POST["ldap"]["objectclass"]);
00440 $this->ilias->setSetting("auth_mode", AUTH_LDAP);
00441
00442 sendInfo($this->lng->txt("auth_mode_changed_to")." ".$this->getAuthModeTitle(),true);
00443 ilUtil::redirect($this->getReturnLocation("view",$this->ctrl->getLinkTarget($this,"")));
00444 }
00445
00451 function editScriptObject()
00452 {
00453 global $rbacsystem;
00454
00455 if (!$rbacsystem->checkAccess("write",$this->object->getRefId()))
00456 {
00457 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
00458 }
00459
00460 if ($_SESSION["error_post_vars"])
00461 {
00462 $this->tpl->setVariable("AUTH_SCRIPT_NAME", $_SESSION["error_post_vars"]["auth_script"]["name"]);
00463 }
00464 else
00465 {
00466
00467 $settings = $this->ilias->getAllSettings();
00468
00469 $this->tpl->setVariable("AUTH_SCRIPT_NAME", $settings["auth_script_name"]);
00470 }
00471
00472 $this->getTemplateFile("script");
00473
00474 $this->tpl->setVariable("FORMACTION", "adm_object.php?ref_id=".$this->ref_id."&cmd=gateway");
00475 $this->tpl->setVariable("COLSPAN", 3);
00476 $this->tpl->setVariable("TXT_AUTH_SCRIPT_TITLE", $this->lng->txt("auth_script_configure"));
00477 $this->tpl->setVariable("TXT_OPTIONS", $this->lng->txt("options"));
00478 $this->tpl->setVariable("TXT_AUTH_SCRIPT_NAME", $this->lng->txt("auth_script_name"));
00479
00480 $this->tpl->setVariable("TXT_REQUIRED_FLD", $this->lng->txt("required_field"));
00481 $this->tpl->setVariable("TXT_CANCEL", $this->lng->txt("cancel"));
00482 $this->tpl->setVariable("TXT_SUBMIT", $this->lng->txt("save"));
00483 $this->tpl->setVariable("CMD_SUBMIT", "saveScript");
00484 }
00485
00491 function saveScriptObject()
00492 {
00493
00494 if (!$_POST["auth_script"]["name"])
00495 {
00496 $this->ilias->raiseError($this->lng->txt("fill_out_all_required_fields"),$this->ilias->error_obj->MESSAGE);
00497 }
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509 $this->ilias->setSetting("auth_script_name", $_POST["auth_script"]["name"]);
00510 $this->ilias->setSetting("auth_mode", AUTH_SCRIPT);
00511
00512 sendInfo($this->lng->txt("auth_mode_changed_to")." ".$this->getAuthModeTitle(),true);
00513 ilUtil::redirect($this->getReturnLocation("view",$this->ctrl->getLinkTarget($this,"")));
00514 }
00515
00522 function getAuthModeTitle()
00523 {
00524 switch ($this->ilias->getSetting("auth_mode"))
00525 {
00526 case AUTH_LOCAL:
00527 return $this->lng->txt("auth_local");
00528 break;
00529
00530 case AUTH_LDAP:
00531 return $this->lng->txt("auth_ldap");
00532 break;
00533
00534 case AUTH_RADIUS:
00535 return $this->lng->txt("auth_radius");
00536 break;
00537
00538 case AUTH_SCRIPT:
00539 return $this->lng->txt("auth_script");
00540 break;
00541
00542 default:
00543 return $this->lng->txt("unknown");
00544 break;
00545 }
00546 }
00547 }
00548 ?>