PageRenderTime 34ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/importusers_alucasa.php

https://bitbucket.org/phenobarbital/php-ldap
PHP | 217 lines | 153 code | 12 blank | 52 comment | 25 complexity | 760105660f4b1c1b13b3ae06dbd92162 MD5 | raw file
  1. #!/usr/bin/php
  2. <?php
  3. include "conf/base.inc.php";
  4. include BASE_DIR . "conf/include_ldap.inc.php";
  5. #carga del objeto ldap
  6. #base de busqueda en alucasa:
  7. $basead = 'DC=PRODUCCION,DC=com';
  8. $ad = ldap::load('active');
  9. $ad->open();
  10. #base de inserciĆ³n y busqueda en mppef:
  11. $basealucasa = 'cn=Usuarios,dc=alucasa,dc=com,dc=ve';
  12. $alucasa = ldap::load('ldap');
  13. #cargar los schemas (para razones de creacion y validacion de entradas)
  14. #objeto unico dentro de todo el arbol LDAP
  15. ldap_schema::setAdapter($alucasa);
  16. #construyo el arbol:
  17. ldap_schema::build();
  18. #creo mi archivo de log de usuarios malos:
  19. $file = new file();
  20. $file->filename('usuariosalucasa-bad.ldif');
  21. $file->open();
  22. if ($alucasa->open()) {
  23. #busco los usuarios:
  24. #filtro de busqueda:
  25. $filter = "(&(objectClass=user)(samaccounttype=". ADS_NORMAL_ACCOUNT .")(samaccountname=*))";
  26. //$filter = "(&(objectClass=user)(samaccountname=*))";
  27. #primero, verificamos las unidades del MF:
  28. $entries = $ad->query($filter, $basead, 'sub');
  29. //var_dump($entries->attributes());
  30. $i = 0;
  31. $n = 0;
  32. $m = 0;
  33. foreach($entries as $entry) {
  34. $cn = $entry->cn;
  35. $sn = $entry->sn;
  36. $objsid = $entry->bin_to_str_sid('objectSid');
  37. $displayName = $entry->displayName;
  38. $user = strtolower($entry->get_attribute('sAMAccountName'));
  39. #Crear un usuario
  40. $uid = $alucasa->create($basealucasa);
  41. #Agrego los objectclasses efectivos de una entrada:
  42. $uid->addObjectclass('organizationalPerson');
  43. $uid->addObjectClass('inetOrgPerson');
  44. $uid->addObjectClass('sambaSamAccount');
  45. $uid->addObjectClass('qmailUser');
  46. $uid->addObjectClass('posixAccount');
  47. $uid->addObjectClass('shadowAccount');
  48. #atributo base de la entrada
  49. $uid->baseAttribute('cn');
  50. $uid->cn = $cn;
  51. $uid->uid = $user;
  52. $uid->gecos = $user;
  53. if (!$sn) {
  54. $uid->sn = $cn;
  55. } else {
  56. $uid->sn = $sn;
  57. }
  58. #atributos que cambian:
  59. if ($displayName) {
  60. $uid->displayName = $displayName;
  61. }
  62. # password
  63. $uid->userPassword = '{SSHA}xs/6rD8xXFNCGBAUzpx45z/+LsQ2erIF';
  64. #atributos que no cambian:
  65. $ou = $entry->physicalDeliveryOfficeName;
  66. if ($ou) {
  67. $uid->physicalDeliveryOfficeName = $ou;
  68. }
  69. $department = str_replace(',', '', $entry->department);
  70. if ($department) {
  71. $uid->ou = $department;
  72. }
  73. $company = str_replace(',', '', $entry->company);
  74. if ($company) {
  75. $uid->o = $company;
  76. }
  77. $givenName = $entry->givenName;
  78. if ($givenName) {
  79. $uid->givenName = $givenName;
  80. }
  81. $cn = $entry->get_attribute('cn');
  82. $tlf = $entry->get_attribute('telephoneNumber');
  83. if ($tlf) {
  84. $uid->telephoneNumber = $tlf;
  85. }
  86. $title = $entry->get_attribute('title');
  87. if($title) {
  88. $uid->title = $title;
  89. }
  90. $initials = $entry->get_attribute('initials');
  91. if ($initials) {
  92. $uid->initials = $initials;
  93. }
  94. $postal = $entry->get_attribute('postalCode');
  95. if ($postal) {
  96. $uid->postalCode = $postal;
  97. }
  98. #cuenta de correo alucasa:
  99. $uid->mail = "{$user}@alucasa.com.ve";
  100. #informacion:
  101. $uid->sambaSID = $objsid;
  102. $comment = $entry->get_attribute('comment');
  103. if ($comment) {
  104. $uid->description = $comment;
  105. }
  106. $lastLogon = $entry->get_attribute('lastLogon');
  107. if ($lastLogon) {
  108. $uid->sambaLogonTime = $lastLogon;
  109. }
  110. $id = $entry->get_attribute('primaryGroupID');
  111. if ($id) {
  112. $uid->sambaPrimaryGroupSID = $id;
  113. }
  114. $pwd = $entry->get_attribute('pwdLastSet');
  115. if ($pwd) {
  116. $uid->sambaPwdLastSet = $pwd;
  117. }
  118. $description = $entry->get_attribute('description');
  119. if ($description) {
  120. $uid->description = $description;
  121. }
  122. $script = $entry->get_attribute('scriptPath');
  123. if($script) {
  124. $uid->sambaLogonScript = $script;
  125. }
  126. #UID y GID:
  127. #domain sid
  128. //$sid = 'S-1-5-21-1658329406-718221906-1845911597-';
  129. //$uid->uidNumber = str_replace($sid, '', $objsid);
  130. $uid->uidNumber = str_replace('S-1-5-21-89404532-1372478125-1516182889-', '', $objsid);
  131. #pertenece by default a domain users
  132. $uid->gidNumber = '513';
  133. $uid->homeDirectory = "/home/{$user}";
  134. $uid->loginShell = '/bin/bash';
  135. /*
  136. $rdn = ldap_explode_dn($entry->dn(), 1);
  137. unset($rdn['count']);
  138. unset($rdn['0']);
  139. // elimino lo
  140. var_dump($rdn);
  141. $uid->setRDN('');
  142. /*
  143. * #por ultimo, extraer la unidad funcional a la que pertenece:
  144. unset($a['count']);
  145. $b = ldap_explode_dn($basead, 1);
  146. unset($b['count']);
  147. $ou = array_diff($a, $b);
  148. #RDN de la entrada:
  149. #atributo que indica a que unidad pertenece:
  150. $uid->ou = $ou[2];
  151. */
  152. #atributos especificos de miraflores:
  153. $uid->sambaDomainName = 'ALUCASA.COM.VE';
  154. $uid->accountStatus = 'active';
  155. $uid->deliveryMode = 'virtual:';
  156. $uid->mailQuotaSize = 524288;
  157. # atributos del samba
  158. $uid->sambaAcctFlags = '[U ]';
  159. if($entry->get_attribute('lastLogon')) {
  160. $uid->sambaLogonTime = $entry->get_attribute('lastLogon');
  161. }
  162. $uid->sambaPwdMustChange = $entry->get_attribute('accountExpires');
  163. $uid->sambaLogoffTime = '2147483647';
  164. $uid->sambaKickoffTime = '2147483647';
  165. $uid->sambaPwdLastSet = $entry->get_attribute('pwdLastSet');
  166. $uid->sambaPwdCanChange = '2147483647';
  167. # 123456
  168. $uid->sambaNTPassword = '32ED87BDB5FDC5E9CBA88547376818D4';
  169. $filter = "(uid={$user})";
  170. $a = $alucasa->query($filter, $basealucasa, 'sub');
  171. if ($a->dn()=="") {
  172. if (!$uid->insert()) {
  173. print_r($uid->row());
  174. $file->write("\n Error insertando a: " . $user . "\n");
  175. $file->write($entry->toLDIF());
  176. #agregamos un salto de linea al final de cada ldif:
  177. $file->write("\n");
  178. $i++;
  179. } else {
  180. $n++;
  181. }
  182. } else {
  183. if(!$uid->save()) {
  184. $file->write("\n Error actualizando a: " . $user . "\n");
  185. $file->write($entry->toLDIF());
  186. #agregamos un salto de linea al final de cada ldif:
  187. $file->write("\n");
  188. $i++;
  189. } else {
  190. $m++;
  191. }
  192. }
  193. }
  194. echo 'Se importaron : ' . $n . " usuarios.\n";
  195. echo 'Se actualizaron : ' . $m . " usuarios.\n";
  196. echo "Hubo {$i} errores de insercion; revisar log\n";
  197. $ad->close();
  198. $alucasa->close();
  199. }
  200. #cerramos el archivo
  201. $file->close();
  202. ?>