diff --git a/evoadmin/htdocs/compte.php b/evoadmin/htdocs/compte.php index 7e09d1a..d36df12 100755 --- a/evoadmin/htdocs/compte.php +++ b/evoadmin/htdocs/compte.php @@ -38,6 +38,7 @@ if (isset($_SESSION['login'])) include EVOADMIN_BASE . 'debut.php'; $rdn = $_SESSION['rdn']; + $group_dn = "ou=group,".LDAP_BASE; /** * Account modification @@ -120,6 +121,44 @@ if (isset($_SESSION['login'])) $new["shadowLastChange"] = floor(strtotime("now")/(3600*24)); } + } + if (($conf['admin']['what'] == 2) || ($conf['admin']['what'] == 3)) { + + $ldapconn = Ldap::lda_connect(LDAP_ADMIN_DN,LDAP_ADMIN_PASS); + + $dn = $group_dn; + $filter = "(memberUid=$uid)"; + $attr = array("cn"); + + $sr=ldap_search($ldapconn, $dn, $filter, $attr); + $result = ldap_get_entries($ldapconn, $sr); + $arraycn = array(); + + for ($i=0; $i < $result["count"] ; $i++) + { + $arraycn[] = $result[$i]["cn"][0]; + } + + if((isset($_POST['smbgroupsecondaire']) && !empty($_POST['smbgroupsecondaire'])) || (isset($_POST['smbgroupsecondaire']) == NULL)){ + if ($_POST['smbgroupsecondaire'] == NULL ){ + $arrayGroupes = []; + if ($arrayGroupes != $arraycn) + { + $new2["cntosuppr"] = array_diff($arraycn, $arrayGroupes); + } + } + else { + $arrayGroupes = $_POST['smbgroupsecondaire']; + foreach($arrayGroupes as $nameGroupe){ + $arrayCnNew[] = $nameGroupe; + } + if ($arrayCnNew != $arraycn) + { + $new2["cntoadd"] = array_diff($arrayCnNew, $arraycn); + $new2["cntosuppr"] = array_diff($arraycn, $arrayCnNew); + } + } + } } $postisactive = (isset($_POST['isactive']) ? 'TRUE' : 'FALSE'); @@ -225,20 +264,37 @@ if (isset($_SESSION['login'])) } // if $new not null, set modification - if ( (isset($new)) && ($new != NULL) ) { - $sr=ldap_modify($ldapconn,"uid=" .$uid. ",".$rdn,$new); + if ((isset($new)) || (isset($new2))) { - // Si LDAP est content, c'est bon :) - if ( $sr ) { - print "
Modifications effectuées.
"; - print "Voir le compte modifié"; - } else { - print "Erreur, envoyez le message d'erreur - suivant à votre administrateur :
"; - var_dump($new); - Evolog::log("Modify error of $uid by $login"); + if ((isset($new))) + { + $sr=ldap_modify($ldapconn,"uid=" .$uid. ",".$rdn,$new); } + if(count($new2["cntoadd"]) > 0) + { + foreach($new2["cntoadd"] as $nameGroupe){ + $entry_groupe["memberUid"] = $uid; + $addGroupe = ldap_mod_add($ldapconn, "cn=".$nameGroupe.",".$group_dn, $entry_groupe); + } + } + if(count($new2["cntosuppr"]) > 0) + { + foreach($new2["cntosuppr"] as $nameGroupe){ + $remove_groupe["memberUid"] = $uid; + $rmGroupe = ldap_mod_del($ldapconn, "cn=".$nameGroupe.",".$group_dn, $remove_groupe); + } + } + + // Si LDAP est content, c'est bon :) + if (!$sr && !$addGroupe && !$rmGroupe) { + print "Erreur, envoyez le message d'erreur + suivant à votre administrateur :
"; + Evolog::log("Modify error of $uid by $login"); + } else { + print "Modifications effectuées.
"; + print "Voir le compte modifié"; + } } else { print "Aucune modification nécessaire.
"; } @@ -310,6 +366,13 @@ if (isset($_SESSION['login'])) // only for samba mode if (($conf['admin']['what'] == 2) || ($conf['admin']['what'] == 3)) { + $dn = $group_dn; + $filter = "(memberUid=$uid)"; + $attr = array("cn"); + + $sr=ldap_search($ldapconn, $dn, $filter, $attr); + $result = ldap_get_entries($ldapconn, $sr); + $arraycn = array(); print "Modification pour Samba
"; @@ -328,8 +391,26 @@ if (isset($_SESSION['login']))