PageRenderTime 80ms CodeModel.GetById 46ms RepoModel.GetById 6ms app.codeStats 0ms

/importusers_mppf.php

https://bitbucket.org/phenobarbital/php-ldap
PHP | 175 lines | 135 code | 3 blank | 37 comment | 15 complexity | 07cb360f863590d1fd8242ab56de40cf MD5 | raw file
  1. #!/usr/bin/php
  2. <?php
  3. include_once 'ldap/ldap.inc.php';
  4. include_once 'file/file.inc.php';
  5. #carga del objeto ldap
  6. ldap::init('conf/');
  7. #inicio la conexion a MF
  8. $basemf = 'ou=MF,ou=Usuarios,dc=mf,dc=gob,dc=ve';
  9. $mppf = ldap::load('mppf');
  10. $mppf->open();
  11. #base de inserciĆ³n y busqueda en mppef:
  12. $basemppef = 'ou=unidades,dc=mppef,dc=gob,dc=ve';
  13. $mppef = ldap::load('mppef');
  14. #creo mi archivo de log de usuarios malos:
  15. $file = new file();
  16. $file->filename('usersmppfbad.ldif');
  17. $file->open('w');
  18. if ($mppef->open()) {
  19. #cargar los schemas de mppef (para razones de creacion y validacion de entradas)
  20. #objeto unico dentro de todo el arbol LDAP
  21. ldap_schema::setAdapter($mppef);
  22. #construyo el arbol:
  23. ldap_schema::build();
  24. #filtro de busqueda:
  25. $filter = "(&(objectClass=posixAccount)(uid=*))";
  26. #primero, verificamos las unidades del MF:
  27. $entries = $mppf->query($filter, $basemf, 'sub');
  28. $i = 0;
  29. #datos
  30. $nuevos = 0;
  31. $editados = 0;
  32. $error = 0;
  33. foreach($entries as $entry) {
  34. #si existe la entrada en mppef:
  35. $uid = $entry->uid;
  36. #Crear una entrada de usuario
  37. $u = $mppef->create($basemppef);
  38. #Agrego los objectclasses efectivos de una entrada:
  39. $u->addObjectclass('organizationalPerson');
  40. $u->addObjectClass('inetOrgPerson');
  41. $u->addObjectClass('sambaSamAccount');
  42. $u->addObjectClass('qmailUser');
  43. $u->addObjectClass('posixAccount');
  44. $u->addObjectClass('shadowAccount');
  45. #atributo base de la entrada
  46. $u->baseAttribute('cn');
  47. #atributos base:
  48. $u->cn = $entry->cn;
  49. $u->sn = $entry->sn;
  50. $givenName = $entry->givenName;
  51. if ($givenName) {
  52. $u->givenName = $givenName;
  53. }
  54. $u->uid = $entry->uid;
  55. #dato critico, su password:
  56. $u->userPassword = $entry->userPassword;
  57. #description:
  58. $desc = $entry->description;
  59. if ($desc) {
  60. $u->description = $desc;
  61. }
  62. #atributos que no cambian:
  63. $name = $entry->displayName;
  64. if ($name) {
  65. $u->displayName = $name;
  66. }
  67. $tlf = $entry->get_attribute('telephoneNumber');
  68. if ($tlf) {
  69. $u->telephoneNumber = $tlf;
  70. }
  71. $tlf = $entry->get_attribute('telexNumber');
  72. if ($tlf) {
  73. $u->telexNumber = $tlf;
  74. }
  75. $tlf = $entry->get_attribute('mobile');
  76. if ($tlf) {
  77. $u->mobile = $tlf;
  78. }
  79. $tlf = $entry->get_attribute('pager');
  80. if ($tlf) {
  81. $u->pager = $tlf;
  82. }
  83. $tlf = $entry->get_attribute('homePhone');
  84. if ($tlf) {
  85. $u->homePhone = $tlf;
  86. }
  87. #officeName:
  88. $u->physicalDeliveryOfficeName = $entry->physicalDeliveryOfficeName;
  89. $u->employeeType = $entry->employeeType;
  90. #datos posix:
  91. $u->uidNumber = $entry->uidNumber;
  92. $u->gidNumber = $entry->gidNumber;
  93. $u->homeDirectory = $entry->homeDirectory;
  94. $u->loginShell = $entry->loginShell;
  95. $u->gecos = $entry->gecos;
  96. #correo:
  97. #cuenta de correo mppef:
  98. $u->mail = "{$uid}@mppef.gob.ve";
  99. #la cuenta esta en dovecot:
  100. $u->mailHost = 'acacia.mppf.gob.ve';
  101. #direcciones de correo alternativas:
  102. $u->mailAlternateAddress = array("{$uid}@mf.gov.ve", "{$uid}@mppf.gob.ve", "{$uid}@mf.gob.ve");
  103. #atributos especificos de la entrada MPPEF:
  104. $u->accountStatus = 'active';
  105. $u->deliveryMode = 'virtual:';
  106. $u->mailQuotaSize = $entry->quota;
  107. #por ultimo, extraer la unidad funcional a la que pertenece:
  108. $a = ldap_explode_dn($entry->dn(), 1);
  109. unset($a['count']);
  110. $b = ldap_explode_dn($basemf, 1);
  111. unset($b['count']);
  112. $ou = array_diff($a, $b);
  113. $ou = $ou[1];
  114. #RDN de la entrada:
  115. $u->setRDN("ou=usuarios,ou={$ou}");
  116. print_r($u->getRDN());
  117. echo "\n";
  118. #busco si existe el usuario:
  119. $filter = "(&(objectClass=posixAccount)(uid={$uid}))";
  120. $e = $mppef->query($filter, $basemppef, 'sub');
  121. if (!$e->count()) {
  122. #usuario no existe;
  123. echo "importando a {$uid}\n";
  124. #domain sid
  125. $sid = 'S-1-5-21-1658329406-718221906-1845911597-';
  126. $u->sambaSID = $sid . $entry->uidNumber;
  127. echo "\n";
  128. print_r($u->row());
  129. echo "\n";
  130. if (!$u->insert()) {
  131. $file->write($entry->toLDIF());
  132. #agregamos un salto de linea al final de cada ldif:
  133. $file->write("\n");
  134. $error++;
  135. } else {
  136. $nuevos++;
  137. }
  138. } else {
  139. #usuario existe; debemos actualizar su entrada:
  140. echo "actualizando entradas de usuario {$uid}\n";
  141. #es necesario mantener el CN de la entrada original
  142. $u->cn = $e->cn;
  143. $u->sn = $e->sn;
  144. #verdadero OU de la entrada:
  145. $ou = $e->get_attribute('o');
  146. $u->setRDN("ou=usuarios,ou={$ou}");
  147. print_r($u->getRDN());
  148. echo "\n";
  149. print_r($u->row());
  150. echo "\n";
  151. if ($u->update()) {
  152. $editados++;
  153. } else {
  154. $file->write($entry->toLDIF());
  155. #agregamos un salto de linea al final de cada ldif:
  156. $file->write("\n");
  157. $error++;
  158. }
  159. }
  160. }
  161. echo "==== stats ====\n";
  162. echo 'Se obtuvieron ' . $entries->count() . " usuarios desde MPPF.\n";
  163. echo "se registraron {$nuevos} usuarios nuevos\n";
  164. echo "se modificaron {$editados} usuarios existentes\n";
  165. echo "hubo {$error} errores de insercion; revisar log\n";
  166. echo "==== ======\n";
  167. $mppf->close();
  168. $mppef->close();
  169. }
  170. #cerramos el archivo
  171. $file->close();
  172. ?>