Email to ".$info[0]['mail'][0];
$_SESSION['AUTHORIZE_USER']=$ADM_ACCOUNT;
$_SESSION['ADM_PASSWD']=$ADM_PASSWD;
$_SESSION['OTHER_INFO']=$info[0]['mail'][0]; //email
$_SESSION['ADM_ACCOUNT']=$ADM_ACCOUNT;
// $_SESSION['ADM_ID']=$info[0]['uidnumber'][0];
$_SESSION['ADM_NAME']=$info[0]['cn'][0];
//reszte bierzemy z lokalnej bazy danych
SEF('ZAP_SQL');
if(empty($_SESSION['CONFIG']['BILLING_USERS_ADD_TABLE_JOIN'])) $sql="select u.ID from ADMIN_USERS as u where u.ADM_ACCOUNT='".$_SESSION['AUTHORIZE_USER']."' limit 1";
else $sql="select u.ID,bua.* from ADMIN_USERS as u ".$_SESSION['CONFIG']['BILLING_USERS_ADD_TABLE_JOIN']." where u.ADM_ACCOUNT='".$_SESSION['AUTHORIZE_USER']."' limit 1";
DEBUG_S(3,'wyszukanie danych firmy',$sql,__FILE__,__FUNCTION__,__LINE__);
ZAP_SQL($sql);
while($h=mysql_fetch_object($result)) {
$STARY_ID=$h->ID;
$_SESSION['P_NIP']=$h->P_NIP;
$_SESSION['ID_BILLING_USERS']=$h->ID_BILLING_USERS; //todo powinien byc wzgelednie array do kilku firm
// DEBUG_S(-3,'wynik firmy',$h);
// $_SESSION['ID']=$h->ID;
//echo " Poprzedni ID :".$STARY_ID." ";
}
DEBUG_S(3,'Szukam z lokalnej bazy',"select * from ADMIN_USERS where ADM_ACCOUNT='".$ADM_ACCOUNT."' limit 1",__FILE__,__FUNCTION__,__LINE__);
ZAP_SQL("select * from ADMIN_USERS where ADM_ACCOUNT='".$ADM_ACCOUNT."' limit 1");
if(mysql_num_rows($result)==0) { //updatujemy ID konta jezeli jest
// // ZAP_SQL("delete from ADMIN_USERS where ID='".$_SESSION['ADM_ID']."' "); //zly ID kasujemy
// // ZAP_SQL("update ADMIN_USERS set ID='".$_SESSION['ADM_ID']."' where ADM_ACCOUNT='".$ADM_ACCOUNT."'"); //przenosimy
// // ZAP_SQL("select * from ADMIN_USERS where ID='".$_SESSION['ADM_ID']."' limit 1");
// // ZAP_SQL("update CRM_AUTH_PROFILE set REMOTE_ID='".$_SESSION['ADM_ID']."' where REMOTE_ID='".$STARY_ID."' and REMOTE_TABLE='ADMIN_USERS'"); //przenosimy
// // ZAP_SQL("update CRM_TESTY set ID_TESTER='".$_SESSION['ADM_ID']."' where ID_TESTER='".$STARY_ID."'"); //przenosimy
}
while($h=mysql_fetch_object($result)) {
$_SESSION['ADM_ID']=$h->ID;
//echo "
Znalazlem rekord dla ".$_SESSION['ADM_ID']." (".$h->ADM_ADMIN_LEVEL."): ";
$_SESSION['ADM_AREA']=$h->ADM_AREA;
$_SESSION['ADM_TECH_WORKER']=$h->ADM_TECH_WORKER;
if(empty($h->ADM_COMPANY)) $h->ADM_COMPANY='%';
$_SESSION['ADM_COMPANY']=$h->ADM_COMPANY;
//echo "
Ustawiam adm company na ".$_SESSION['ADM_COMPANY']." ";
if(!empty($h->ID_BILLING_USERS)) $_SESSION['ID_BILLING_USERS']=$h->ID_BILLING_USERS;
$_SESSION['ADM_ADMIN_LEVEL']=$h->ADM_ADMIN_LEVEL;
if(!isset($_SESSION['ADM_ADMIN_LEVEL'])) {
if(($info[0]['uidnumber'][0]==1000)||($info[0]['uidnumber'][0]==0))
// ! sprawdzam czy jest juz jakis user - jezeli nie ma to daje jednego i daje mu uprawnienia roota!
ZAP_SQL('select count(*) from ADMIN_USERS');
while($h=mysql_fetch_array($result)) {
$ile_jest_userow=$h[0];
}
if($ile_jest_userow==0) {
// $_SESSION['ADM_ADMIN_LEVEL']=0; //1000 ma admin
// DEBUG_S(3,'Jednorazowo inicjalizuje uprawnienia do tabeli uzytkownikow dla administratora w celu aktualizaji uprawnien!!!','',__FILE__,__FUNCTION__,__LINE__);
// USERS_COLUMN_INIT2('ADMIN_USERS','','RXWX',''); //inicjalizacja jednorazowa w celu ustawienia poziomow uprawnien i funkcji
}
}
$_SESSION['ADM_PHONE']="$h->ADM_PHONE";
$_SESSION['ADM_ADMIN_EXPIRE']="$h->ADM_ADMIN_EXPIRE";
$_SESSION['ADM_ADMIN_DESC']="$h->ADM_ADMIN_DESC";
$_SESSION['ADM_ID']=$h->ID;
}
if(strlen($_SESSION['ADM_ADMIN_LEVEL'])==0) {
echo "
Pusty admin level";
$_SESSION['ADM_ADMIN_LEVEL']=6;
}
//aktualizujemy ADMIN_USERS tak aby bylo w miare swieze - glowna baza admin users jest baza LDAP!
ZAP_SQL("insert ignore into ADMIN_USERS (`ID`,`A_STATUS`,`ADM_ACCOUNT`,`ADM_ADMIN_LEVEL`,`ADM_NAME`) values ('".$info[0]['uidnumber'][0]."','NORMAL','".addslashes($ADM_ACCOUNT)."','5','".$info[0]['cn'][0]."')");
ZAP_SQL("update ADMIN_USERS set ADM_PASSWD=md5('".addslashes($ADM_PASSWD)."'),ADM_OTHER_INFO='".$info[0]['mail'][0]."' , ADM_ACCOUNT='".addslashes($ADM_ACCOUNT)."' , ADM_NAME='".$info[0]['cn'][0]."' where ADM_ACCOUNT='".ADM_ACCOUNT."'");
// SQL_WIEV();
//echo "Inicjalizuje USERS_COLUMN_INIT() dla admin level ".$_SESSION['ADM_ADMIN_LEVEL'];
// SEF('USERS_COLUMN_INIT');
// USERS_COLUMN_INIT();
//wyszukuje pelne nazwy uzytkownikow
$dn = "cn=users,".$dc; // also tried DC=example,DC=co,DC=uk
$filter="objectClass=posixAccount";
$justthese = array("uid","cn","apple-generateduid");
$sr=ldap_search($ldapconn, $dn, $filter, $justthese);
$info = ldap_get_entries($ldapconn, $sr);
for($i=0;$i<$info['count'];$i++) {
$_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES'][$info[$i]['uid'][0]]=array('apple-generateduid'=>$info[$i]['apple-generateduid'][0],'cn'=>$info[$i]['cn'][0]);
if(ereg("\[[0-9]*\]",$info[$i]['cn'][0])) {
$_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES'][$info[$i]['uid'][0]]['ID_ZASOB']=preg_replace('/(.*\[+)([0-9]*+)(\].*+)/i', '\2', $info[$i]['cn'][0]);
}
}
DEBUG_S(3,'Usernames',array($info,$_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES']),__FILE__,__FUNCTION__,__LINE__);
//Szukamy jakie sa dostepne grupy w systemie :
$dn = "cn=groups,".$dc; // also tried DC=example,DC=co,DC=uk
$filter="objectClass=posixGroup";
$justthese = array("cn","memberUid","apple-group-nestedgroup","apple-generateduid");
//$dn = "cn=users,".$dc; // also tried DC=example,DC=co,DC=uk
//$filter="(uid=".$ADM_ACCOUNT.")";
//$justthese = array("uid", "givenName", "mail","*");
$sr=ldap_search($ldapconn, $dn, $filter, $justthese);
$info = ldap_get_entries($ldapconn, $sr);
//dodanie pustej grupy:
$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][''][]='';
for($i=0;$i<$info['count'];$i++) {
if($info[$i]['memberuid']['count']==0) {
$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][$info[$i]['cn'][0]]=array();
$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$info[$i]['apple-generateduid'][0]]=$info[$i]['cn'][0];
}
for($member=0;$member<$info[$i]['memberuid']['count'];$member++) {
$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][$info[$i]['cn'][0]][]=$info[$i]['memberuid'][$member];
$_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS'][$info[$i]['memberuid'][$member]][]=$info[$i]['cn'][0];
$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$info[$i]['apple-generateduid'][0]]=$info[$i]['cn'][0];
ZAP_SQL("insert ignore into ADMIN_USERS (`ID`,`A_STATUS`,`ADM_ACCOUNT`,`ADM_TECH_WORKER`,`ADM_ADMIN_LEVEL`,`ADM_NAME`) values ('','NORMAL','".addslashes($info[$i]['memberuid'][$member])."','YES' ,'5','".$_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES'][$info[$i]['memberuid'][$member]]['cn']."')");
}
if(isset($info[$i]['apple-group-nestedgroup']['count'])) //errory z braku zmiennej
for($member=0;$member<$info[$i]['apple-group-nestedgroup']['count'];$member++) {
$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED'][$info[$i]['apple-generateduid'][0]][]=$info[$i]['apple-group-nestedgroup'][$member];
}
}
if(!empty($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED'])) { //jezeli nie jest puste, znaczy, ze sa NESTED_GROUPS bedziemy dodawac dla kazdej nested groups userow do grupy
foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED'] as $GUID=>$NESTED_A) {
foreach($NESTED_A as $NESTED) {
//echo "
".$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$GUID];
//echo " -- ".$NGUID." looking from ".$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$NESTED]." (".$NESTED.") ";
foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$NESTED]] as $USERNAME) {
//echo " -- = ".$USERNAME;
if(!in_array($USERNAME,$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$GUID]])) $_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$GUID]][]=$USERNAME;
if(!in_array($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$GUID],$_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS'][$USERNAME])) $_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS'][$USERNAME][]=$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$GUID];
}
}
}
}
foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'] as $GROUP_NUMBER_HYPEN_NAME=>$USERS_ARR ) {
$GROUP=array();
//foreach($GROUPS as $GROUP_NUMBER_HYPEN_NAME) {
$GROUP_NUMBER_HYPEN_NAME2=str_replace('-', '_',$GROUP_NUMBER_HYPEN_NAME );
list($ID_ZASOB,$REST)=explode('_', $GROUP_NUMBER_HYPEN_NAME2);
if(isset($REST)&& preg_match("/[0-9]/", $ID_ZASOB)) {
$GROUP[]=$ID_ZASOB; //jezeli jest jakas grupa typu 1234_opis_costam - inne ignroujemy
// echo " ze stringa:(".$GROUP_NUMBER_HYPEN_NAME.") *** dodalem ".$ID_ZASOB." ** ";
$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$ID_ZASOB]=$GROUP_NUMBER_HYPEN_NAME;
$sql="insert ignore into LDAP_GROUPS (ID,NAME) values ('".$ID_ZASOB."','".$GROUP_NUMBER_HYPEN_NAME."') ";
// echo "
sql:".$sql;
DB::query($sql);
}
//}
}
foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS'] as $USERNAME=>$GROUPS ) {
$GROUP=array();
foreach($GROUPS as $GROUP_NUMBER_HYPEN_NAME) {
$GROUP_NUMBER_HYPEN_NAME2=str_replace('-', '_',$GROUP_NUMBER_HYPEN_NAME );
list($ID_ZASOB,$REST)=explode('_', $GROUP_NUMBER_HYPEN_NAME2);
if(!empty($REST)&& preg_match("/[0-9]/", $ID_ZASOB)) {
$GROUP[]=$ID_ZASOB; //jezeli jest jakas grupa typu 1234_opis_costam - inne ignroujemy
// echo " ze stringa:(".$GROUP_NUMBER_HYPEN_NAME.") *** dodalem ".$ID_ZASOB." ** ";
// $_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$ID_ZASOB]=$GROUP_NUMBER_HYPEN_NAME;
}
}
//echo "
Grupa to (".$REST.")"; print_r($GROUP);
if(!empty($GROUP)) { //jezeli jest jakas grupa typu 1234_opis_costam - inne ignroujemy
$sql="select CRM_AUTH_PROFILE.ID_ZASOB from CRM_AUTH_PROFILE
left join ADMIN_USERS on ( ADMIN_USERS.ID=CRM_AUTH_PROFILE.REMOTE_ID and CRM_AUTH_PROFILE.REMOTE_TABLE='ADMIN_USERS')
where ADMIN_USERS.ADM_ACCOUNT='".$USERNAME."' and CRM_AUTH_PROFILE.ID_ZASOB not in ('".implode("','",$GROUP)."') ";
//echo "***".$sql."***";
$res=DB::query($sql);
if(DB::num_rows($res)>0) {
$ERROR[]="ERROR UPRAWNIEN - uzytkownik ".$USERNAME." posiada wiecej uprawnien niz w serwerze LDAP! Oto nadmiarowe powiazania do zasobow:";
while($h=DB::fetch($res)) {
$ERROR[]=$h->ID_ZASOB.",";
}
// $ERROR[]="";
}
$res=DB::query("select CRM_AUTH_PROFILE.ID_ZASOB from CRM_AUTH_PROFILE
left join ADMIN_USERS on ( ADMIN_USERS.ID=CRM_AUTH_PROFILE.REMOTE_ID and CRM_AUTH_PROFILE.REMOTE_TABLE='ADMIN_USERS')
where ADMIN_USERS.ADM_ACCOUNT='".$USERNAME."' and CRM_AUTH_PROFILE.ID_ZASOB in ('".implode("','",$GROUP)."') ");
if((DB::num_rows($res)ERROR UPRAWNIEN - uzytkownik ".$USERNAME." posiada mniej uprawnien (".count($GROUP).") niz w serwerze LDAP (".DB::num_rows($res).") !";
foreach($GROUP as $IND=>$GR) {
while($h=DB::fetch($res)) {
if($GR==$h->ID_ZASOB) unset($GROUP[$IND]);
}
}
foreach($GROUP as $IND=>$GR) {
//echo " (nie robie tego z uwagi na SYNC) DODAJE UPRAWNIENIE DO ZASOBU ".$GR." ,";
$sql="insert ignore into CRM_AUTH_PROFILE (ID_ZASOB,REMOTE_TABLE,REMOTE_ID,A_STATUS,A_RECORD_CREATE_DATE,A_RECORD_CREATE_AUTHOR)
select '".$GR."','ADMIN_USERS',ID,'WAITING',now(),'superedit-AUTH_LDAP_CLIENT.php' from ADMIN_USERS where ADM_ACCOUNT='".$USERNAME."' limit 1 ;
";
// $res=DB::query($sql);
}
echo "";
}
}
}
if($_SESSION['ADM_ADMIN_LEVEL']=='0') DEBUG_S(-3,'ERROR UPRAWNIEN',array($ERROR),__FILE__,__FUNCTION__,__LINE__);
$AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME=$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'];
$res=DB::query("select ID,`TYPE`,`DESC` from CRM_LISTA_ZASOBOW where A_STATUS!='DELETED' and `TYPE` in ('STANOWISKO','DZIAL','PODMIOT') and PARENT_ID!='-1' ");
while($h=DB::fetch($res)) {
if(!isset($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$h->ID])) {
echo " Brak grupy [".$h->ID."] ".$h->TYPE." ".$h->DESC." , ";
if(in_array($ADM_ACCOUNT,$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS']['admin'])) {
$BAD_SIGNS = array(" ", "/", "\\", "!","(",")");
if($h->ID>1000) $PrimaryGroupID=$h->ID;
else $PrimaryGroupID="99".$h->ID;
$command1="dscl -u ".$ADM_ACCOUNT." -P ".$ADM_PASSWD." /LDAPv3/127.0.0.1 -create /Groups/".$h->ID."_".str_replace($_SESSION['CONFIG']['BAD_FILE_SIGNS_LETTERS'],$_SESSION['CONFIG']['OK_FILE_SIGNS_LETTERS'],str_replace($BAD_SIGNS,"_",substr($h->DESC,0,40)))." PrimaryGroupID ".$PrimaryGroupID."";
$command2="dscl -u ".$ADM_ACCOUNT." -P ".$ADM_PASSWD." /LDAPv3/127.0.0.1 -create /Groups/".$h->ID."_".str_replace($_SESSION['CONFIG']['BAD_FILE_SIGNS_LETTERS'],$_SESSION['CONFIG']['OK_FILE_SIGNS_LETTERS'],str_replace($BAD_SIGNS,"_",substr($h->DESC,0,40)))." RealName \"[".$h->ID."] ".$h->TYPE." ".substr($h->DESC,0,50)."\" ";
$return_dscl1=system($command1);
$return_dscl2=system($command2);
echo "\n
".$command1." return : ".$return_dscl1."";
echo "\n
".$command2." return : ".$return_dscl2."";
flush();
$AKTUALIZOWALEM=true;
}
$BRAKI_W_LDAP=true;
} else unset($AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME[$h->ID]);
}
foreach($AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME as $BRAK_W_SE) {
echo "
Brak grupy w SE ".$BRAK_W_SE."";
}
if(isset($BRAKI_W_LDAP)&&(!isset($AKTUALIZOWALEM))) {
//echo "
Zaloguj sie na jedno z kont aby zsynchronizowac grupy LDAP : (".implode(',',$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS']['admin']).")";
}
if(in_array($ADM_ACCOUNT,$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS']['admin'])) {
//szukamy jakie zasoby sa do sharowania SHARED_IMAP_MAILBOX
$sql="select cz.ID, cz.PARENT_ID from CRM_LISTA_ZASOBOW as cz where cz.`TYPE`='SHARED_IMAP_MAILBOX'
union select cz.ID, cz.PARENT_ID_ACCESS as PARENT_ID from CRM_LISTA_ZASOBOW as cz where cz.`TYPE`='SHARED_IMAP_MAILBOX' and cz.PARENT_ID_ACCESS like '%_'
";
$res=DB::query($sql);
SEF('APPLE_IMAP_SHARED_FOLDER_CONTROL');
while($h=DB::fetch($res)) {//dla kazdego znalezionego konta IMAP do sharowania
if(strstr($h->PARENT_ID,',')) {
$exploded=explode(',',$h->PARENT_ID);
foreach($exploded as $piece) {
$share_arr[]=array($h->ID,$piece);
}
} else $share_arr[]=array($h->ID,$h->PARENT_ID);
}
//print_r($share_arr);
foreach($share_arr as $arr) {
//echo "
Stanowisko do share to ".$arr[0]." to ".$arr[1];
//wykrywam nazwe uzytkownika source - moze byc kilku
foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES'] as $username=>$user_arr) {
if($arr[0]==$user_arr['ID_ZASOB']) {
// echo "
Znalazlem src usera do udostepnienia:".$arr[0]." ".$username." jego UID to ".$user_arr['apple-generateduid'];
//teraz szukam komu udostepnic - powinno byc parent ID - szukam grupy PARENT_ID
//echo "
306(".$h->PARENT_ID."):".$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$h->PARENT_ID]."AAA";
$grupa_remote_to_share_to=$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$arr[1]];
// echo " Grupa to share to ".$grupa_remote_to_share_to;
//array_search($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$h->PARENT_ID],$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME']);
foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][$grupa_remote_to_share_to] as $destuser) {
APPLE_IMAP_SHARED_FOLDER_CONTROL($user_arr['apple-generateduid'],$_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES'][$destuser]['apple-generateduid']);
}
}
}
}
}
DEBUG_S(3,'LDAP Groups',array($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'],$_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS'],$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED'],$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'],$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME']),__FILE__,__FUNCTION__,__LINE__);
}
}
}
//die('dupa');
session_start();
//echo session_id();
//using ldap bind anonymously
// connect to ldap server
//generate cn-name for LDAP_SERVER auth
?>