Version modifiée David
Le Tue, 29 Jan 2013 15:43:12 +0100 David DURIEUX <d.duri...@siprossii.com> a écrit: >Bonjour, > >Voici le patch afin de remplir la fiche utilisateur à partir des infos >d'un serveur d'authentification central (SSO) de type Shibboleth ou >LemonLDAP::NG . > >Afin de tester, tu peux mettre ces infos au tout début du fichier >login.php : > >$_SERVER['REMOTE_USER'] = 'totoA'; >$_SERVER['name'] = "cromagnon"; >$_SERVER['email'] = "t...@to.com"; > > >Attention! ceci ne fonctionnera pas s'il y a un ou plusiuers serveur >LDAP d'activé. > > >J'ai également ajouté le fait que ça passe dans le moteur de règle des >habilitations pour ce cas là, et j'ai ajouté le critère LOGIN dans ces >même règles. > > > >Cordialement, >-- >David DURIEUX >Tel : +33 (0)4.82.53.30.53 >Mail : d.duri...@siprossii.com >Site Web : http://www.siprossii.com/ > >SIPROSSII >Les Lafôrets >69430 Beaujeu >FRANCE
Index: inc/auth.class.php =================================================================== --- inc/auth.class.php (revision 20101) +++ inc/auth.class.php (working copy) @@ -327,6 +327,11 @@ } if (self::isValidLogin($login)) { $this->user->fields['name'] = $login; + // Get data from SSO if defined + $ret = $this->user->getFromSSO(); + if (!$ret) { + return false; + } return true; } break; @@ -514,12 +519,18 @@ } } } - //If user is set as present in GLPI but no LDAP DN found : it means that the user - //is not present in an ldap directory anymore - if (!$user_dn - && $this->user_present) { - $user_deleted_ldap = true; - $this->user_deleted_ldap = true; + if (count($ldapservers) == 0 + && $authtype == self::EXTERNAL) { + // Case of using external auth and no LDAP servers, so get data from external auth + $this->user->getFromSSO(); + } else { + //If user is set as present in GLPI but no LDAP DN found : it means that the user + //is not present in an ldap directory anymore + if (!$user_dn + && $this->user_present) { + $user_deleted_ldap = true; + $this->user_deleted_ldap = true; + } } // Reset to secure it $this->user->fields['name'] = $login_name; @@ -1127,10 +1138,95 @@ Dropdown::showYesNo('existing_auth_server_field_clean_domain', $CFG_GLPI['existing_auth_server_field_clean_domain']); echo "</td></tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . __('Surname') . "</td>"; + echo "<td><input type='text' name='realname_ssofield' value='". + $CFG_GLPI['realname_ssofield']."'></td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . __('First name') . "</td>"; + echo "<td><input type='text' name='firstname_ssofield' value='". + $CFG_GLPI['firstname_ssofield']."'></td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . __('Comments') . "</td>"; + echo "<td><input type='text' name='comment_ssofield' value='". + $CFG_GLPI['comment_ssofield']."'>"; + echo "</td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . __('Administrative number') . "</td>"; + echo "<td><input type='text' name='registration_number_ssofield' value='". + $CFG_GLPI['registration_number_ssofield']."'>"; + echo "</td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . __('Email') . "</td>"; + echo "<td><input type='text' name='email1_ssofield' value='".$CFG_GLPI['email1_ssofield']."'>"; + echo "</td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . sprintf(__('%1$s %2$s'),_n('Email','Emails',1), '2') . "</td>"; + echo "<td><input type='text' name='email2_ssofield' value='".$CFG_GLPI['email2_ssofield']."'>"; + echo "</td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . sprintf(__('%1$s %2$s'),_n('Email','Emails',1), '3') . "</td>"; + echo "<td><input type='text' name='email3_ssofield' value='".$CFG_GLPI['email3_ssofield']."'>"; + echo "</td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . sprintf(__('%1$s %2$s'),_n('Email','Emails',1), '4') . "</td>"; + echo "<td><input type='text' name='email4_ssofield' value='".$CFG_GLPI['email4_ssofield']."'>"; + echo "</td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . __('Phone') . "</td>"; + echo "<td><input type='text' name='phone_ssofield'value='".$CFG_GLPI['phone_ssofield']."'>"; + echo "</td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . __('Phone 2') . "</td>"; + echo "<td><input type='text' name='phone2_ssofield'value='".$CFG_GLPI['phone2_ssofield']."'>"; + echo "</td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . __('Mobile phone') . "</td>"; + echo "<td><input type='text' name='mobile_ssofield'value='".$CFG_GLPI['mobile_ssofield']."'>"; + echo "</td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . _x('person','Title') . "</td>"; + echo "<td><input type='text' name='title_ssofield' value='".$CFG_GLPI['title_ssofield']."'>"; + echo "</td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . __('Category') . "</td>"; + echo "<td><input type='text' name='category_ssofield' value='". + $CFG_GLPI['category_ssofield']."'></td>"; + echo "</tr>\n"; + + echo "<tr class='tab_bg_2'>"; + echo "<td class='center'>" . __('Language') . "</td>"; + echo "<td><input type='text' name='language_ssofield' value='". + $CFG_GLPI['language_ssofield']."'></td></tr>"; echo "<tr class='tab_bg_1'><td class='center' colspan='2'>"; echo "<input type='submit' name='update' class='submit' value=\"".__s('Save')."\" >"; - echo "</td></tr>"; + echo "</td></tr>\n"; echo "</table></div>\n"; Html::closeForm(); Index: inc/ruleright.class.php =================================================================== --- inc/ruleright.class.php (revision 20101) +++ inc/ruleright.class.php (working copy) @@ -277,6 +277,13 @@ $criterias['MAIL_EMAIL']['linkfield'] = ''; $criterias['MAIL_EMAIL']['virtual'] = true; $criterias['MAIL_EMAIL']['id'] = 'mail_email'; + + $criterias['LOGIN']['table'] = ''; + $criterias['LOGIN']['field'] = ''; + $criterias['LOGIN']['name'] = __('Login'); + $criterias['LOGIN']['linkfield'] = ''; + $criterias['LOGIN']['virtual'] = true; + $criterias['LOGIN']['id'] = 'login'; $criterias['GROUPS']['table'] = 'glpi_groups'; $criterias['GROUPS']['field'] = 'completename'; Index: inc/rulerightcollection.class.php =================================================================== --- inc/rulerightcollection.class.php (revision 20101) +++ inc/rulerightcollection.class.php (working copy) @@ -255,6 +255,10 @@ return $rule_parameters; } return $rule_input; + } else if ($params["type"] == "SSO") { + $rule_parameters["MAIL_EMAIL"] = $params["email"]; + $rule_parameters["LOGIN"] = $params["login"]; + return $rule_parameters; } //IMAP/POP login method $rule_parameters["MAIL_SERVER"] = $params["mail_server"]; Index: inc/user.class.php =================================================================== --- inc/user.class.php (revision 20101) +++ inc/user.class.php (working copy) @@ -950,7 +950,8 @@ if (isset($this->fields["id"]) && ($this->fields["id"] > 0)) { $authtype = Auth::getMethodsByID($this->fields["authtype"], $this->fields["auths_id"]); - if (count($authtype)) { + if (count($authtype) + || $this->fields["authtype"] == Auth::EXTERNAL) { // Clean emails $this->input["_emails"] = array_unique ($this->input["_emails"]); @@ -1444,7 +1445,101 @@ } // getFromIMAP() + /** + * Function that try to load from the SSO server the user information... + **/ + function getFromSSO() { + global $DB, $CFG_GLPI; + + $a_field = array(); + foreach ($CFG_GLPI as $key=>$value) { + if (!is_array($value) + && strstr($key, "_ssofield") + && !empty($value)) { + $key = str_replace('_ssofield', '', $key); + $a_field[$key] = $value; + } + } + + if (count($a_field) == 0) { + return true; + } + $this->fields['_ruleright_process'] = true; + foreach ($a_field as $field=>$value) { + if (!isset($_SERVER[$value]) + || empty($_SERVER[$value])) { + switch ($field) { + case "title" : + $this->fields['usertitles_id'] = 0; + break; + case "category" : + $this->fields['usercategories_id'] = 0; + break; + + default : + $this->fields[$field] = ""; + } + + } else { + switch ($field) { + case "email1" : + case "email2" : + case "email3" : + case "email4" : + // Manage multivaluable fields + if (!preg_match('/count/',$_SERVER[$value])) { + $this->fields["_emails"][] = addslashes($_SERVER[$value]); + } + // Only get them once if duplicated + $this->fields["_emails"] = array_unique($this->fields["_emails"]); + break; + + case "language" : + $language = Config::getLanguage($_SERVER[$value]); + if ($language != '') { + $this->fields[$field] = $language; + } + break; + + case "title" : + $this->fields['usertitles_id'] = Dropdown::importExternal('UserTitle', + addslashes($_SERVER[$value])); + break; + + case "category" : + $this->fields['usercategories_id'] = Dropdown::importExternal('UserCategory', + addslashes($_SERVER[$value])); + break; + + default : + $this->fields[$field] = $_SERVER[$value]; + break; + + } + } + } + ///Only process rules if working on the master database + if (!$DB->isSlave()) { + //Instanciate the affectation's rule + $rule = new RuleRightCollection(); + + $this->fields = $rule->processAllRules(array(), Toolbox::stripslashes_deep($this->fields), + array('type' => 'SSO', + 'email' => $this->fields["_emails"], + 'login' => $this->fields["name"])); + + //If rule action is ignore import + if (isset($this->fields["_stop_import"])) { + return false; + } + } + return true; + } + + + + /** * Blank passwords field of a user in the DB * needed for external auth users **/ Index: install/mysql/glpi-0.84-empty.sql =================================================================== --- install/mysql/glpi-0.84-empty.sql (revision 20101) +++ install/mysql/glpi-0.84-empty.sql (working copy) @@ -665,10 +665,25 @@ `duedatewarning_unit` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '%', `duedatecritical_unit` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '%', `ssovariables_id` int(11) NOT NULL DEFAULT '0', + `realname_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `firstname_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email1_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email2_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email3_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `email4_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `phone_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `phone2_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `mobile_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `comment_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `title_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `category_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `language_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `entity_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `registration_number_ssofield` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -INSERT INTO `glpi_configs` VALUES ('1','0','250','15','50','30',' 0.84','5','0','admsys@localhost',NULL,NULL,NULL,'SIGNATURE','0','0','fr_FR','#fff2f2','#ffe0e0','#ffcece','#ffbfbf','#ffadad','#ff5555','2005-12-31','','443','',NULL,'0','08:00:00','20:00:00','1','0','http://localhost/glpi/','0','','','100','*','0','0','0','50','1','1','0','0',';','0','50','0',NULL,'25',NULL,NULL,'8080',NULL,'1','0','5','2',NULL,NULL,'0','2','2','2','2','1','0','1','1','1','1','0','0','0','0','0','0','0','1','1','1','1',NULL,NULL,NULL,NULL,'2097152','0','0','1','0','svg','1','1','1','{\"1\":{\"1\":1,\"2\":1,\"3\":2,\"4\":2,\"5\":2},\"2\":{\"1\":1,\"2\":2,\"3\":2,\"4\":3,\"5\":3},\"3\":{\"1\":2,\"2\":2,\"3\":3,\"4\":4,\"5\":4},\"4\":{\"1\":2,\"2\":3,\"3\":4,\"4\":4,\"5\":5},\"5\":{\"1\":2,\"2\":3,\"3\":4,\"4\":5,\"5\":5}}','62','62','0','0','0',NULL,NULL,'0','1','0','1','2','1','1','5','0','8','1','1','1','1','0','0','#06ff00','#ffb800','#ff0000','20','5','%','%','0'); +INSERT INTO `glpi_configs` VALUES ('1','0','250','15','50','30',' 0.84','5','0','admsys@localhost',NULL,NULL,NULL,'SIGNATURE','0','0','fr_FR','#fff2f2','#ffe0e0','#ffcece','#ffbfbf','#ffadad','#ff5555','2005-12-31','','443','',NULL,'0','08:00:00','20:00:00','1','0','http://localhost/glpi/','0','','','100','*','0','0','0','50','1','1','0','0',';','0','50','0',NULL,'25',NULL,NULL,'8080',NULL,'1','0','5','2',NULL,NULL,'0','2','2','2','2','1','0','1','1','1','1','0','0','0','0','0','0','0','1','1','1','1',NULL,NULL,NULL,NULL,'2097152','0','0','1','0','svg','1','1','1','{\"1\":{\"1\":1,\"2\":1,\"3\":2,\"4\":2,\"5\":2},\"2\":{\"1\":1,\"2\":2,\"3\":2,\"4\":3,\"5\":3},\"3\":{\"1\":2,\"2\":2,\"3\":3,\"4\":4,\"5\":4},\"4\":{\"1\":2,\"2\":3,\"3\":4,\"4\":4,\"5\":5},\"5\":{\"1\":2,\"2\":3,\"3\":4,\"4\":5,\"5\":5}}','62','62','0','0','0',NULL,NULL,'0','1','0','1','2','1','1','5','0','8','1','1','1','1','0','0','#06ff00','#ffb800','#ff0000','20','5','%','%','0', NULL, NULL, NULL, NULL, NU LL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); ### Dump table glpi_consumableitems Index: install/update_0831_084.php =================================================================== --- install/update_0831_084.php (revision 20101) +++ install/update_0831_084.php (working copy) @@ -955,7 +955,22 @@ $migration->addField("glpi_configs", 'duedatecritical_less',"integer", array('value' => 5)); $migration->addField("glpi_configs", 'duedatewarning_unit', "string", array('value' => '%')); $migration->addField("glpi_configs", 'duedatecritical_unit', "string", array('value' => '%')); - + $migration->addField("glpi_configs", "realname_ssofield", "string"); + $migration->addField("glpi_configs", "firstname_ssofield", "string"); + $migration->addField("glpi_configs", "email1_ssofield", "string"); + $migration->addField("glpi_configs", "email2_ssofield", "string"); + $migration->addField("glpi_configs", "email3_ssofield", "string"); + $migration->addField("glpi_configs", "email4_ssofield", "string"); + $migration->addField("glpi_configs", "phone_ssofield", "string"); + $migration->addField("glpi_configs", "phone2_ssofield", "string"); + $migration->addField("glpi_configs", "mobile_ssofield", "string"); + $migration->addField("glpi_configs", "comment_ssofield", "string"); + $migration->addField("glpi_configs", "title_ssofield", "string"); + $migration->addField("glpi_configs", "category_ssofield", "string"); + $migration->addField("glpi_configs", "language_ssofield", "string"); + $migration->addField("glpi_configs", "entity_ssofield", "string"); + $migration->addField("glpi_configs", "registration_number_ssofield", "string"); + $migration->addField("glpi_users", "notification_to_myself", "tinyint(1) DEFAULT NULL"); $migration->addField("glpi_users", 'duedateok_color', "string"); $migration->addField("glpi_users", 'duedatewarning_color', "string");
_______________________________________________ Glpi-dev mailing list Glpi-dev@gna.org https://mail.gna.org/listinfo/glpi-dev