PageRenderTime 55ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/samba/netlogon.php

https://bitbucket.org/phenobarbital/php-ldap
PHP | 113 lines | 46 code | 1 blank | 66 comment | 6 complexity | 4c9f95fb23111f12f96e0c3c7b9fb015 MD5 | raw file
  1. #!/usr/bin/php
  2. <?php
  3. /*
  4. * instalar para usar:
  5. * aptitude install php5-snmp php5-mcrypt php5-curl php5-common php5-auth-pam php5-ldap php5-cli
  6. */
  7. include dirname(dirname(__FILE__)) . "/conf/base.inc.php";
  8. include_once BASE_DIR . "conf/include_ldap.inc.php";
  9. /**
  10. * script de netlogon:
  11. * en samba:
  12. * root preexec = addmachinemppef %u %m
  13. * Uso: el script de netlogon se ejecuta CADA VEZ que un usuario inicia sesión en una maquina
  14. * @param usuario (1): nombre del usuario que inicia sesion
  15. * @param machine (2): maquina desde donde el usuario ha iniciado sesion
  16. * @param IP (3): IP de la maquina desde donde ha iniciado sesion
  17. * @param Arch (4): Arquitectura del equipo
  18. * @uses En caso de equipos que no haya procedido el script de addmachinescript, este agrega el equipo cuando es detectado
  19. * en el inicio de sesion
  20. * @author Jesus Lara
  21. * Variable Definition
  22. Tabla: Variables de Samba.
  23. Variable Definición
  24. Relativas a Clientes
  25. %a Arquitectura de Cliente (p.ej., Samba, WfWg, WinNT, Win95, o UNKNOWN)
  26. %I Dirección IP de Cliente (p.ej., 192.168.220.100)
  27. %m Nombre NetBIOS de Cliente
  28. %M Nombre DNS de Cliente
  29. Relativas a Usuarios
  30. %g Grupo Primario de %u
  31. %G Grupo Primario de %U
  32. %H Directorio "home" de %u
  33. %u Actual nombre usuario Unix
  34. %U Nombre de usuario (no siempre usado por Samba)
  35. Relativas a Recursos
  36. %p Automontador de ruta para el recurso, si difiere de %P
  37. %P Actual directorio root del recurso
  38. %S Actual nombre del recurso
  39. Relativas a Servidor
  40. %d Actual PID de servidor
  41. %h nombre DNS de máquina del servidor Samba
  42. %L Nombre NetBIOS del servidor Samba
  43. %N Directorio "home" del servidor, desde el mapa automount
  44. %v Versión de Samba
  45. Varias
  46. %R Nivel de protocolo SMB que se ha negociado
  47. %T Fecha y hora actual
  48. */
  49. #si hay más de un argumento, debemos determinar si ese usuario existe:
  50. if ($argc > 1) {
  51. #argumentos pasados al script
  52. #user
  53. $user = $argv[1];
  54. #Computer
  55. $computer = $argv[2];
  56. #IP
  57. $ip = $argv[3];
  58. #arch
  59. $arch = $argv[4];
  60. #necesito un log
  61. $file = new file();
  62. $file->filename('/var/log/samba/netlogon.log');
  63. $file->open('w');
  64. $file->write("Init logon | params:\n");
  65. foreach($argv as $a) {
  66. $file->write($a);
  67. #agregamos un salto de linea al final de cada entrada:
  68. $file->write("\n");
  69. }
  70. $file->write("\n");
  71. $file->write("Logon date: {date()}\n");
  72. $file->close();
  73. #directorio donde se crean los usuarios
  74. $dir = '/srv/samba/users/' . $user;
  75. #base de inserción y busqueda en mppef:
  76. $basemppef = 'ou=unidades,dc=mppef,dc=gob,dc=ve';
  77. $mppef = ldap::load('mppef');
  78. $filter = "(&(objectClass=posixAccount)(uid={$user}))";
  79. #abrir la conexion:
  80. $mppef->open();
  81. #si el usuario existe luego de un query:
  82. $u = $mppef->query($filter, $basemppef, 'sub');
  83. if ($u->uid == $user) {
  84. log::log("LDAP: encontrado uid: {$u->uid}");
  85. if ($u->sambaUserQuota) {
  86. $quota = $u->sambaUserQuota . 'm';
  87. } else {
  88. $quota = '1024m';
  89. }
  90. if (!is_dir($dir)) {
  91. #si no existe el directorio, entonces lo creamos, más todo lo demás
  92. log::log('netlogon: no existe el directorio ' . $dir);
  93. @mkdir($dir, 0775, true);
  94. #cambio la permisologia del directorio
  95. @chown($dir, $user);
  96. @chgrp($dir, 513);
  97. }
  98. #al usuario le asigno la cuota XFS respectiva
  99. $cmd = escapeshellcmd("/usr/sbin/xfs_quota -x -c 'limit bsoft={$quota} bhard={$quota} {$user}' /srv/samba/users");
  100. @shell_exec($cmd);
  101. }
  102. #luego, intento "crear" la entrada si no existe, de la maquina
  103. #ademas de sus entradas DNS
  104. #ejecutar el machineadd
  105. $cmd = escapeshellcmd("/usr/sbin/machineadd '{$computer}' '{$ip}' '{$arch}'");
  106. @shell_exec($cmd);
  107. #cerramos la conexion
  108. $mppef->close();
  109. }
  110. #imprimiendo el log:
  111. #log::show();
  112. ?>