superedit-AUTH_LDAP_CLIENT.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. <?php
  2. //version 2013-08-26
  3. //@2013-05-15 wersja nie nadpisujaca ID uzytkownika - dodaje z LDAPA nowe konto
  4. //@2013-07-22 wersja umozliwia korzystanie z nested-groups na serverze apple
  5. //@2013-08-02 wersja umozliwia ustawianie sharowanych kont dla typu zasobu IMAP_SHARED_MAILBOX ,
  6. //na podstawie struktury zasobow oraz (1 parent). Nr zasobu odczytany z opisu CN [zasob] Opis.
  7. //@2013-08-06 potrafi zle dzialac, jak ktos wpisze login z duzej $ADM_ACCOUNT=strtolower($ADM_ACCOUNT);
  8. //2013-09-13 - inicjalizacja przeniesiona poza funkcje - cos innego musi ja wyzwalac
  9. //funkcja wymaga aby serwer apple mial uprawnienia visudo dla funkcji :
  10. //visudo : (/etc/sudoers)
  11. //_www ALL = NOPASSWD: /usr/bin/dscl
  12. //_www ALL = NOPASSWD: /usr/bin/pwpolicy
  13. function AUTH_LDAP_CLIENT($ADM_ACCOUNT, $ADM_PASSWD) {
  14. global $conn,$LDAP_SERVER_AUTH,$LDAP_SERVER_AUTH_DN,$result ;
  15. $LDAP_OK=false;
  16. $ADM_ACCOUNT=strtolower($ADM_ACCOUNT); //@2013-08-06 potrafi zle dzialac, jak ktos wpisze login z duzej
  17. if(!$LDAP_SERVER_AUTH) {
  18. DEBUG_S(-3,'Cannot auth to LDAP server - server not set in config ');
  19. die();
  20. }
  21. //1. proba polaczenia sie po LDAP, jezeli nie dziala, to odpuszczamy
  22. $dc_arr=explode('.',$LDAP_SERVER_AUTH); settype($dc, "string");
  23. foreach($dc_arr as $dc_dc) {
  24. if($dc) $dc.=",dc=".$dc_dc; else $dc="dc=".$dc_dc;
  25. }
  26. if(isset($LDAP_SERVER_AUTH_DN)) $dc=$LDAP_SERVER_AUTH_DN;
  27. $ldapconn = ldap_connect($LDAP_SERVER_AUTH)
  28. or die("Could not connect to LDAP server.");
  29. if ($ldapconn) {
  30. // Set some ldap options for talking to
  31. ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
  32. ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
  33. if(strstr($ADM_ACCOUNT,'@')) {
  34. $dn = "cn=users,".$dc; // also tried DC=example,DC=co,DC=uk
  35. $filter="(mail=".$ADM_ACCOUNT.")";
  36. $RETURN['filter']=$filter;
  37. $justthese = array("uid", "cn");
  38. $sr=ldap_search($ldapconn, $dn, $filter, $justthese);
  39. $info = ldap_get_entries($ldapconn, $sr);
  40. $RETURN['REAL_ADM_ACCOUNT']=$info[0]['uid'][0];
  41. $ADM_ACCOUNT=$info[0]['uid'][0];
  42. }
  43. $ldaprdn = "uid=".$ADM_ACCOUNT.",cn=users,".$dc; // ldap rdn or dn
  44. // binding anonymously
  45. $ldapbind = @ldap_bind($ldapconn,$ldaprdn,$ADM_PASSWD);
  46. if ($ldapbind) {
  47. $LDAP_OK=true;
  48. } else {
  49. DEBUG_S(-3,"LDAP authorization failed !!! /BLAD AUTORYZACJI LDAP ! ","Server LDAP: ".$LDAP_SERVER_AUTH."; dn: ".$ldaprdn,__FILE__,__FUNCTION__,__LINE__);
  50. // die();
  51. }
  52. //uid=arkadiuszbinder,
  53. $dn = "cn=users,".$dc; // also tried DC=example,DC=co,DC=uk
  54. $filter="(uid=".$ADM_ACCOUNT.")";
  55. $justthese = array("uid", "givenName", "mail","*");
  56. $sr=ldap_search($ldapconn, $dn, $filter, $justthese);
  57. $info = ldap_get_entries($ldapconn, $sr);
  58. DEBUG_S(3,'LDAP AUTH: ',$info,__FILE__,__FUNCTION__,__LINE__);
  59. if($LDAP_OK) { //jezeli jest rekord zwrocony,to nadpisujemy zmienne sesji i nadpisujemy rekord w bazie ADMIN_USERS tymi danymi
  60. // echo "<br> Email to ".$info[0]['mail'][0];
  61. $_SESSION['AUTHORIZE_USER']=$ADM_ACCOUNT;
  62. $_SESSION['ADM_PASSWD']=$ADM_PASSWD;
  63. $_SESSION['OTHER_INFO']=$info[0]['mail'][0]; //email
  64. $_SESSION['ADM_ACCOUNT']=$ADM_ACCOUNT;
  65. // $_SESSION['ADM_ID']=$info[0]['uidnumber'][0];
  66. $_SESSION['ADM_NAME']=$info[0]['cn'][0];
  67. //reszte bierzemy z lokalnej bazy danych
  68. SEF('ZAP_SQL');
  69. 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";
  70. 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";
  71. DEBUG_S(3,'wyszukanie danych firmy',$sql,__FILE__,__FUNCTION__,__LINE__);
  72. ZAP_SQL($sql);
  73. while($h=mysql_fetch_object($result)) {
  74. $STARY_ID=$h->ID;
  75. $_SESSION['P_NIP']=$h->P_NIP;
  76. $_SESSION['ID_BILLING_USERS']=$h->ID_BILLING_USERS; //todo powinien byc wzgelednie array do kilku firm
  77. // DEBUG_S(-3,'wynik firmy',$h);
  78. // $_SESSION['ID']=$h->ID;
  79. //echo " Poprzedni ID :".$STARY_ID." ";
  80. }
  81. DEBUG_S(3,'Szukam z lokalnej bazy',"select * from ADMIN_USERS where ADM_ACCOUNT='".$ADM_ACCOUNT."' limit 1",__FILE__,__FUNCTION__,__LINE__);
  82. ZAP_SQL("select * from ADMIN_USERS where ADM_ACCOUNT='".$ADM_ACCOUNT."' limit 1");
  83. if(mysql_num_rows($result)==0) { //updatujemy ID konta jezeli jest
  84. // // ZAP_SQL("delete from ADMIN_USERS where ID='".$_SESSION['ADM_ID']."' "); //zly ID kasujemy
  85. // // ZAP_SQL("update ADMIN_USERS set ID='".$_SESSION['ADM_ID']."' where ADM_ACCOUNT='".$ADM_ACCOUNT."'"); //przenosimy
  86. // // ZAP_SQL("select * from ADMIN_USERS where ID='".$_SESSION['ADM_ID']."' limit 1");
  87. // // ZAP_SQL("update CRM_AUTH_PROFILE set REMOTE_ID='".$_SESSION['ADM_ID']."' where REMOTE_ID='".$STARY_ID."' and REMOTE_TABLE='ADMIN_USERS'"); //przenosimy
  88. // // ZAP_SQL("update CRM_TESTY set ID_TESTER='".$_SESSION['ADM_ID']."' where ID_TESTER='".$STARY_ID."'"); //przenosimy
  89. }
  90. while($h=mysql_fetch_object($result)) {
  91. $_SESSION['ADM_ID']=$h->ID;
  92. //echo " <br> Znalazlem rekord dla ".$_SESSION['ADM_ID']." (".$h->ADM_ADMIN_LEVEL."): ";
  93. $_SESSION['ADM_AREA']=$h->ADM_AREA;
  94. $_SESSION['ADM_TECH_WORKER']=$h->ADM_TECH_WORKER;
  95. if(empty($h->ADM_COMPANY)) $h->ADM_COMPANY='%';
  96. $_SESSION['ADM_COMPANY']=$h->ADM_COMPANY;
  97. //echo "<br> Ustawiam adm company na ".$_SESSION['ADM_COMPANY']." ";
  98. if(!empty($h->ID_BILLING_USERS)) $_SESSION['ID_BILLING_USERS']=$h->ID_BILLING_USERS;
  99. $_SESSION['ADM_ADMIN_LEVEL']=$h->ADM_ADMIN_LEVEL;
  100. if(!isset($_SESSION['ADM_ADMIN_LEVEL'])) {
  101. if(($info[0]['uidnumber'][0]==1000)||($info[0]['uidnumber'][0]==0))
  102. // ! sprawdzam czy jest juz jakis user - jezeli nie ma to daje jednego i daje mu uprawnienia roota!
  103. ZAP_SQL('select count(*) from ADMIN_USERS');
  104. while($h=mysql_fetch_array($result)) {
  105. $ile_jest_userow=$h[0];
  106. }
  107. if($ile_jest_userow==0) {
  108. // $_SESSION['ADM_ADMIN_LEVEL']=0; //1000 ma admin
  109. // DEBUG_S(3,'Jednorazowo inicjalizuje uprawnienia do tabeli uzytkownikow dla administratora w celu aktualizaji uprawnien!!!','',__FILE__,__FUNCTION__,__LINE__);
  110. // USERS_COLUMN_INIT2('ADMIN_USERS','','RXWX',''); //inicjalizacja jednorazowa w celu ustawienia poziomow uprawnien i funkcji
  111. }
  112. }
  113. $_SESSION['ADM_PHONE']="$h->ADM_PHONE";
  114. $_SESSION['ADM_ADMIN_EXPIRE']="$h->ADM_ADMIN_EXPIRE";
  115. $_SESSION['ADM_ADMIN_DESC']="$h->ADM_ADMIN_DESC";
  116. $_SESSION['ADM_ID']=$h->ID;
  117. }
  118. if(strlen($_SESSION['ADM_ADMIN_LEVEL'])==0) {
  119. echo "<br> Pusty admin level";
  120. $_SESSION['ADM_ADMIN_LEVEL']=6;
  121. }
  122. //aktualizujemy ADMIN_USERS tak aby bylo w miare swieze - glowna baza admin users jest baza LDAP!
  123. 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]."')");
  124. 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."'");
  125. // SQL_WIEV();
  126. //echo "Inicjalizuje USERS_COLUMN_INIT() dla admin level ".$_SESSION['ADM_ADMIN_LEVEL'];
  127. // SEF('USERS_COLUMN_INIT');
  128. // USERS_COLUMN_INIT();
  129. //wyszukuje pelne nazwy uzytkownikow
  130. $dn = "cn=users,".$dc; // also tried DC=example,DC=co,DC=uk
  131. $filter="objectClass=posixAccount";
  132. $justthese = array("uid","cn","apple-generateduid");
  133. $sr=ldap_search($ldapconn, $dn, $filter, $justthese);
  134. $info = ldap_get_entries($ldapconn, $sr);
  135. for($i=0;$i<$info['count'];$i++) {
  136. $_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES'][$info[$i]['uid'][0]]=array('apple-generateduid'=>$info[$i]['apple-generateduid'][0],'cn'=>$info[$i]['cn'][0]);
  137. if(ereg("\[[0-9]*\]",$info[$i]['cn'][0])) {
  138. $_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES'][$info[$i]['uid'][0]]['ID_ZASOB']=preg_replace('/(.*\[+)([0-9]*+)(\].*+)/i', '\2', $info[$i]['cn'][0]);
  139. }
  140. }
  141. DEBUG_S(3,'Usernames',array($info,$_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES']),__FILE__,__FUNCTION__,__LINE__);
  142. //Szukamy jakie sa dostepne grupy w systemie :
  143. $dn = "cn=groups,".$dc; // also tried DC=example,DC=co,DC=uk
  144. $filter="objectClass=posixGroup";
  145. $justthese = array("cn","memberUid","apple-group-nestedgroup","apple-generateduid");
  146. //$dn = "cn=users,".$dc; // also tried DC=example,DC=co,DC=uk
  147. //$filter="(uid=".$ADM_ACCOUNT.")";
  148. //$justthese = array("uid", "givenName", "mail","*");
  149. $sr=ldap_search($ldapconn, $dn, $filter, $justthese);
  150. $info = ldap_get_entries($ldapconn, $sr);
  151. //dodanie pustej grupy:
  152. $_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][''][]='';
  153. for($i=0;$i<$info['count'];$i++) {
  154. if($info[$i]['memberuid']['count']==0) {
  155. $_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][$info[$i]['cn'][0]]=array();
  156. $_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$info[$i]['apple-generateduid'][0]]=$info[$i]['cn'][0];
  157. }
  158. for($member=0;$member<$info[$i]['memberuid']['count'];$member++) {
  159. $_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][$info[$i]['cn'][0]][]=$info[$i]['memberuid'][$member];
  160. $_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS'][$info[$i]['memberuid'][$member]][]=$info[$i]['cn'][0];
  161. $_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$info[$i]['apple-generateduid'][0]]=$info[$i]['cn'][0];
  162. 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']."')");
  163. }
  164. if(isset($info[$i]['apple-group-nestedgroup']['count'])) //errory z braku zmiennej
  165. for($member=0;$member<$info[$i]['apple-group-nestedgroup']['count'];$member++) {
  166. $_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED'][$info[$i]['apple-generateduid'][0]][]=$info[$i]['apple-group-nestedgroup'][$member];
  167. }
  168. }
  169. 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
  170. foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED'] as $GUID=>$NESTED_A) {
  171. foreach($NESTED_A as $NESTED) {
  172. //echo "<br>".$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$GUID];
  173. //echo " -- ".$NGUID." looking from ".$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$NESTED]." (".$NESTED.") ";
  174. foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME'][$NESTED]] as $USERNAME) {
  175. //echo " -- = ".$USERNAME;
  176. 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;
  177. 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];
  178. }
  179. }
  180. }
  181. }
  182. foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'] as $GROUP_NUMBER_HYPEN_NAME=>$USERS_ARR ) {
  183. $GROUP=array();
  184. //foreach($GROUPS as $GROUP_NUMBER_HYPEN_NAME) {
  185. $GROUP_NUMBER_HYPEN_NAME2=str_replace('-', '_',$GROUP_NUMBER_HYPEN_NAME );
  186. list($ID_ZASOB,$REST)=explode('_', $GROUP_NUMBER_HYPEN_NAME2);
  187. if(isset($REST)&& preg_match("/[0-9]/", $ID_ZASOB)) {
  188. $GROUP[]=$ID_ZASOB; //jezeli jest jakas grupa typu 1234_opis_costam - inne ignroujemy
  189. // echo " ze stringa:(".$GROUP_NUMBER_HYPEN_NAME.") *** dodalem ".$ID_ZASOB." ** ";
  190. $_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$ID_ZASOB]=$GROUP_NUMBER_HYPEN_NAME;
  191. $sql="insert ignore into LDAP_GROUPS (ID,NAME) values ('".$ID_ZASOB."','".$GROUP_NUMBER_HYPEN_NAME."') ";
  192. // echo "<br>sql:".$sql;
  193. DB::query($sql);
  194. }
  195. //}
  196. }
  197. foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS'] as $USERNAME=>$GROUPS ) {
  198. $GROUP=array();
  199. foreach($GROUPS as $GROUP_NUMBER_HYPEN_NAME) {
  200. $GROUP_NUMBER_HYPEN_NAME2=str_replace('-', '_',$GROUP_NUMBER_HYPEN_NAME );
  201. list($ID_ZASOB,$REST)=explode('_', $GROUP_NUMBER_HYPEN_NAME2);
  202. if(!empty($REST)&& preg_match("/[0-9]/", $ID_ZASOB)) {
  203. $GROUP[]=$ID_ZASOB; //jezeli jest jakas grupa typu 1234_opis_costam - inne ignroujemy
  204. // echo " ze stringa:(".$GROUP_NUMBER_HYPEN_NAME.") *** dodalem ".$ID_ZASOB." ** ";
  205. // $_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$ID_ZASOB]=$GROUP_NUMBER_HYPEN_NAME;
  206. }
  207. }
  208. //echo "<br>Grupa to (".$REST.")"; print_r($GROUP);
  209. if(!empty($GROUP)) { //jezeli jest jakas grupa typu 1234_opis_costam - inne ignroujemy
  210. $sql="select CRM_AUTH_PROFILE.ID_ZASOB from CRM_AUTH_PROFILE
  211. left join ADMIN_USERS on ( ADMIN_USERS.ID=CRM_AUTH_PROFILE.REMOTE_ID and CRM_AUTH_PROFILE.REMOTE_TABLE='ADMIN_USERS')
  212. where ADMIN_USERS.ADM_ACCOUNT='".$USERNAME."' and CRM_AUTH_PROFILE.ID_ZASOB not in ('".implode("','",$GROUP)."') ";
  213. //echo "***".$sql."***";
  214. $res=DB::query($sql);
  215. if(DB::num_rows($res)>0) {
  216. $ERROR[]="ERROR UPRAWNIEN - uzytkownik ".$USERNAME." posiada wiecej uprawnien niz w serwerze LDAP! Oto nadmiarowe powiazania do zasobow:";
  217. while($h=DB::fetch($res)) {
  218. $ERROR[]=$h->ID_ZASOB.",";
  219. }
  220. // $ERROR[]="</font>";
  221. }
  222. $res=DB::query("select CRM_AUTH_PROFILE.ID_ZASOB from CRM_AUTH_PROFILE
  223. left join ADMIN_USERS on ( ADMIN_USERS.ID=CRM_AUTH_PROFILE.REMOTE_ID and CRM_AUTH_PROFILE.REMOTE_TABLE='ADMIN_USERS')
  224. where ADMIN_USERS.ADM_ACCOUNT='".$USERNAME."' and CRM_AUTH_PROFILE.ID_ZASOB in ('".implode("','",$GROUP)."') ");
  225. if((DB::num_rows($res)<count($GROUP) ) &&!empty($USERNAME)) {
  226. //echo "<br><font color=red>ERROR UPRAWNIEN - uzytkownik ".$USERNAME." posiada mniej uprawnien (".count($GROUP).") niz w serwerze LDAP (".DB::num_rows($res).") !";
  227. foreach($GROUP as $IND=>$GR) {
  228. while($h=DB::fetch($res)) {
  229. if($GR==$h->ID_ZASOB) unset($GROUP[$IND]);
  230. }
  231. }
  232. foreach($GROUP as $IND=>$GR) {
  233. //echo "<B> (nie robie tego z uwagi na SYNC) DODAJE UPRAWNIENIE DO ZASOBU ".$GR." </B>,";
  234. $sql="insert ignore into CRM_AUTH_PROFILE (ID_ZASOB,REMOTE_TABLE,REMOTE_ID,A_STATUS,A_RECORD_CREATE_DATE,A_RECORD_CREATE_AUTHOR)
  235. select '".$GR."','ADMIN_USERS',ID,'WAITING',now(),'superedit-AUTH_LDAP_CLIENT.php' from ADMIN_USERS where ADM_ACCOUNT='".$USERNAME."' limit 1 ;
  236. ";
  237. // $res=DB::query($sql);
  238. }
  239. echo "</font>";
  240. }
  241. }
  242. }
  243. if($_SESSION['ADM_ADMIN_LEVEL']=='0') DEBUG_S(-3,'ERROR UPRAWNIEN',array($ERROR),__FILE__,__FUNCTION__,__LINE__);
  244. $AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME=$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'];
  245. $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' ");
  246. while($h=DB::fetch($res)) {
  247. if(!isset($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$h->ID])) {
  248. echo "<font size=-3> Brak grupy [".$h->ID."] ".$h->TYPE." ".$h->DESC." , </font>";
  249. if(in_array($ADM_ACCOUNT,$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS']['admin'])) {
  250. $BAD_SIGNS = array(" ", "/", "\\", "!","(",")");
  251. if($h->ID>1000) $PrimaryGroupID=$h->ID;
  252. else $PrimaryGroupID="99".$h->ID;
  253. $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."";
  254. $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)."\" ";
  255. $return_dscl1=system($command1);
  256. $return_dscl2=system($command2);
  257. echo "\n<br><font size=-2>".$command1." return : ".$return_dscl1."</font>";
  258. echo "\n<br><font size=-2>".$command2." return : ".$return_dscl2."</font>";
  259. flush();
  260. $AKTUALIZOWALEM=true;
  261. }
  262. $BRAKI_W_LDAP=true;
  263. } else unset($AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME[$h->ID]);
  264. }
  265. foreach($AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME as $BRAK_W_SE) {
  266. echo "<br><font size=-3> Brak grupy w SE ".$BRAK_W_SE."</font>";
  267. }
  268. if(isset($BRAKI_W_LDAP)&&(!isset($AKTUALIZOWALEM))) {
  269. //echo "<font color=red size=-2><br>Zaloguj sie na jedno z kont aby zsynchronizowac grupy LDAP : (".implode(',',$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS']['admin']).")</font>";
  270. }
  271. if(in_array($ADM_ACCOUNT,$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS']['admin'])) {
  272. //szukamy jakie zasoby sa do sharowania SHARED_IMAP_MAILBOX
  273. $sql="select cz.ID, cz.PARENT_ID from CRM_LISTA_ZASOBOW as cz where cz.`TYPE`='SHARED_IMAP_MAILBOX'
  274. 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 '%_'
  275. ";
  276. $res=DB::query($sql);
  277. SEF('APPLE_IMAP_SHARED_FOLDER_CONTROL');
  278. while($h=DB::fetch($res)) {//dla kazdego znalezionego konta IMAP do sharowania
  279. if(strstr($h->PARENT_ID,',')) {
  280. $exploded=explode(',',$h->PARENT_ID);
  281. foreach($exploded as $piece) {
  282. $share_arr[]=array($h->ID,$piece);
  283. }
  284. } else $share_arr[]=array($h->ID,$h->PARENT_ID);
  285. }
  286. //print_r($share_arr);
  287. foreach($share_arr as $arr) {
  288. //echo "<br>Stanowisko do share to ".$arr[0]." to ".$arr[1];
  289. //wykrywam nazwe uzytkownika source - moze byc kilku
  290. foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES'] as $username=>$user_arr) {
  291. if($arr[0]==$user_arr['ID_ZASOB']) {
  292. // echo "<br>Znalazlem src usera do udostepnienia:".$arr[0]." ".$username." jego UID to ".$user_arr['apple-generateduid'];
  293. //teraz szukam komu udostepnic - powinno byc parent ID - szukam grupy PARENT_ID
  294. //echo "<br>306(".$h->PARENT_ID."):".$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$h->PARENT_ID]."AAA";
  295. $grupa_remote_to_share_to=$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$arr[1]];
  296. // echo " Grupa to share to ".$grupa_remote_to_share_to;
  297. //array_search($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_ID_NAME'][$h->PARENT_ID],$_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS_NESTED_NAME']);
  298. foreach($_SESSION['AUTH_LDAP_CLIENT__LDAP_GROUPS'][$grupa_remote_to_share_to] as $destuser) {
  299. APPLE_IMAP_SHARED_FOLDER_CONTROL($user_arr['apple-generateduid'],$_SESSION['AUTH_LDAP_CLIENT__LDAP_USERS_NAMES'][$destuser]['apple-generateduid']);
  300. }
  301. }
  302. }
  303. }
  304. }
  305. 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__);
  306. }
  307. }
  308. }
  309. //die('dupa');
  310. session_start();
  311. //echo session_id();
  312. //using ldap bind anonymously
  313. // connect to ldap server
  314. //generate cn-name for LDAP_SERVER auth
  315. ?>