PageRenderTime 57ms CodeModel.GetById 4ms RepoModel.GetById 1ms app.codeStats 0ms

/importusers_mf.php

https://bitbucket.org/phenobarbital/php-ldap
PHP | 198 lines | 137 code | 12 blank | 49 comment | 20 complexity | 3ac0d1b82747d67ddb238a409362a1d1 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 de mppef (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('usersalucasabad.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. foreach($entries as $entry) {
  32. #Crear un usuario
  33. $uid = $alucasa->create($basealucasa);
  34. #Agrego los objectclasses efectivos de una entrada:
  35. $uid->addObjectclass('organizationalPerson');
  36. $uid->addObjectClass('inetOrgPerson');
  37. $uid->addObjectClass('sambaSamAccount');
  38. $uid->addObjectClass('qmailUser');
  39. $uid->addObjectClass('posixAccount');
  40. $uid->addObjectClass('shadowAccount');
  41. #atributo base de la entrada
  42. $uid->baseAttribute('cn');
  43. #atributos que cambian:
  44. $objsid = $entry->bin_to_str_sid('objectSid');
  45. $user = strtolower($entry->get_attribute('sAMAccountName'));
  46. $name = mb_convert_encoding($entry->get_attribute('displayName'), 'utf8');
  47. if ($name) {
  48. $uid->displayName = $name;
  49. $uid->gecos = $name;
  50. }
  51. # password
  52. $uid->userPassword = '{SSHA}eKPVANWpnHz4wJieFjVTooi5LunKEAVW';
  53. #atributos que no cambian:
  54. $ou = $entry->get_attribute('physicalDeliveryOfficeName');
  55. if ($ou) {
  56. $uid->physicalDeliveryOfficeName = $ou;
  57. }
  58. $department = str_replace(',', '', $entry->get_attribute('department'));
  59. if ($department) {
  60. $uid->ou = $department;
  61. }
  62. $company = str_replace(',', '', $entry->get_attribute('company'));
  63. if ($company) {
  64. $uid->o = $company;
  65. }
  66. $givenName = $entry->get_attribute('givenName');
  67. if ($givenName) {
  68. $uid->givenName = $givenName;
  69. }
  70. $uid->displayName = $name;
  71. $cn = $entry->get_attribute('cn');
  72. $uid->cn = $cn;
  73. $sn = $entry->get_attribute('sn');
  74. if (!$sn) {
  75. $uid->sn = $cn;
  76. } else {
  77. $uid->sn = $sn;
  78. }
  79. $tlf = $entry->get_attribute('telephoneNumber');
  80. if ($tlf) {
  81. $uid->telephoneNumber = $tlf;
  82. }
  83. $title = $entry->get_attribute('title');
  84. if($title) {
  85. $uid->title = $title;
  86. }
  87. $initials = $entry->get_attribute('initials');
  88. if ($initials) {
  89. $uid->initials = $initials;
  90. }
  91. $postal = $entry->get_attribute('postalCode');
  92. if ($postal) {
  93. $uid->postalCode = $postal;
  94. }
  95. #cuenta de correo alucasa:
  96. $user = mb_convert_encoding($user, 'utf8');
  97. $uid->mail = "{$user}@alucasa.com.ve";
  98. #uid y cn del usuario:
  99. $uid->uid = strtolower($user);
  100. //$cn = mb_convert_encoding($entry->get_attribute('cn'), 'utf8');
  101. #informacion:
  102. $uid->sambaSID = $objsid;
  103. $comment = $entry->get_attribute('comment');
  104. if ($comment) {
  105. $uid->description = $comment;
  106. }
  107. $lastLogon = $entry->get_attribute('lastLogon');
  108. if ($lastLogon) {
  109. $uid->sambaLogonTime = $lastLogon;
  110. }
  111. $id = $entry->get_attribute('primaryGroupID');
  112. if ($id) {
  113. $uid->sambaPrimaryGroupSID = $id;
  114. }
  115. $pwd = $entry->get_attribute('pwdLastSet');
  116. if ($pwd) {
  117. $uid->sambaPwdLastSet = $pwd;
  118. }
  119. $description = $entry->get_attribute('description');
  120. if ($description) {
  121. $uid->description = $description;
  122. }
  123. $script = $entry->get_attribute('scriptPath');
  124. if($script) {
  125. $uid->sambaLogonScript = $script;
  126. }
  127. #UID y GID:
  128. #domain sid
  129. //$sid = 'S-1-5-21-1658329406-718221906-1845911597-';
  130. //$uid->uidNumber = str_replace($sid, '', $objsid);
  131. $uid->uidNumber = str_replace('S-1-5-21-89404532-1372478125-1516182889-', '', $objsid);
  132. #pertenece by default a domain users
  133. $uid->gidNumber = '513';
  134. $uid->homeDirectory = "/home/{$user}";
  135. $uid->loginShell = '/bin/bash';
  136. $uid->setRDN('');
  137. /*
  138. #direcciones de correo alternativas:
  139. #la cuenta esta en mail:
  140. $uid->mailHost = 'mail.alucasa.com.ve';
  141. //$uid->mailAlternateAddress = array("{$user}@mf.gov.ve", "{$user}@mppf.gob.ve", "{$user}@mf.gob.ve");
  142. #por ultimo, extraer la unidad funcional a la que pertenece:
  143. $a = ldap_explode_dn($entry->dn(), 1);
  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. $uid->sambaNTPassword = '';
  168. #crear:
  169. if (!$uid->insert()) {
  170. print_r($uid->row());
  171. $file->write("\n Error insertando a: " . $name . "\n");
  172. $file->write($entry->toLDIF());
  173. #agregamos un salto de linea al final de cada ldif:
  174. $file->write("\n");
  175. $i++;
  176. }
  177. }
  178. echo 'Se importaron ' . $entries->count() . " usuarios.\n";
  179. echo "Hubo {$i} errores de insercion; revisar log\n";
  180. $ad->close();
  181. $alucasa->close();
  182. }
  183. #cerramos el archivo
  184. $file->close();
  185. ?>