Revisión 180
Añadido por jredrejo hace casi 14 años
controlies/trunk/applications/controlies/modules/Utils/LdapUtils.py | ||
---|---|---|
import ldap
|
||
import ldap.modlist
|
||
|
||
result = ldap_con.search("ou=Group",tipo_grupo,["member","memberuid","cn"])
|
||
result = ldap_con.search("ou=Group",tipo_grupo,["member","memberUid","cn"])
|
||
if result is not None:
|
||
for grupo in result:
|
||
dn="cn="+ grupo[0][1]['cn'][0] + ",ou=Group"
|
||
... | ... | |
modificacion=ldap.modlist.modifyModlist(attr_viejo,attr_nuevo)
|
||
ldap_con.modify(dn, modificacion)
|
||
|
||
|
||
def sanea_grupos(ldap_con):
|
||
"""borrar de los grupos usuarios que ya no existen"""
|
||
import ldap
|
||
import ldap.modlist
|
||
tipos=('school_class','school_department')
|
||
grupos=['teachers','students']
|
||
|
||
#obtengo todos los grupos
|
||
for tipo in tipos:
|
||
result=ldap_con.search('ou=Group','groupType=' + tipo,['cn'])
|
||
if len(result)>0:
|
||
for i in result:
|
||
grupos.append(i[0][1]['cn'][0])
|
||
|
||
#en cada grupo borro usuarios
|
||
for grupo in grupos:
|
||
result=ldap_con.search('ou=Group','cn=' + grupo,['memberUid','member'])
|
||
if len(result)>0:
|
||
listado=result[0][0][1]['memberUid']
|
||
listado_members=result[0][0][1]['member']
|
||
modificar=False
|
||
for usuario in listado:
|
||
if usuario!='':
|
||
existe=len(ldap_con.search('ou=People','uid=' + usuario,['cn']))>0
|
||
if not existe:
|
||
modificar=True
|
||
listado.remove(usuario)
|
||
listado_members.remove('uid=' + usuario + ',ou=People,dc=instituto,dc=extremadura,dc=es')
|
||
|
||
if modificar:
|
||
attr_viejo=ldap_con.search('ou=Group','cn=' + grupo,['memberUid','member'])[0][0][1]
|
||
attr_nuevo={'member':listado_members,'memberUid':listado}
|
||
dn="cn="+ grupo + ",ou=Group"
|
||
modificacion=ldap.modlist.modifyModlist(attr_viejo,attr_nuevo)
|
||
ldap_con.modify(dn, modificacion)
|
||
|
controlies/trunk/applications/controlies/modules/Rayuela2Ldap.py | ||
---|---|---|
from Users import Users
|
||
from Groups import Groups
|
||
|
||
borrando=False
|
||
borrando=True
|
||
esAlumnos=False
|
||
ldap_con=None
|
||
|
||
... | ... | |
except Exception,e:
|
||
print e
|
||
|
||
|
||
def lista_antiguos(ldap_con,grupo):
|
||
lista={}
|
||
try:
|
||
resultado=ldap_con.search("ou=Group","cn=" + grupo ,["memberuid"])
|
||
|
||
miembros=resultado[0][0][1]['memberUid']
|
||
if len(miembros) > 0:
|
||
for usuario in miembros:
|
||
dato=ldap_con.search("ou=People","uid=" + usuario ,["employeeNumber","uid"])
|
||
if len(dato) > 0:
|
||
dni=dato[0][0][1]['employeeNumber'][0]
|
||
uid=dato[0][0][1]['uid'][0]
|
||
lista[dni]=uid
|
||
|
||
|
||
except:
|
||
pass
|
||
|
||
return lista
|
||
|
||
|
||
def borra_antiguos(ldap_con,viejos,nuevos):
|
||
|
||
for usuario in nuevos:
|
||
if usuario['dni'] in viejos:
|
||
viejos.pop(usuario['dni'])
|
||
|
||
for viejo in viejos:
|
||
try:
|
||
ldap_con.delete('uid='+ viejos[viejo] +',ou=People')
|
||
ldap_con.delete("cn="+ viejos[viejo] +",ou=Group")
|
||
except:
|
||
pass #algún dato ya estaba borrado
|
||
|
||
|
||
|
||
|
||
if __name__ == '__main__':
|
||
#El código siguiente es sólo para depuración y desarrollo
|
||
#No tiene sentido fuera de ese contexto
|
||
... | ... | |
import Utils.LdapUtils as LdapUtils
|
||
aulas={}
|
||
dptos={}
|
||
|
||
session=Storage()
|
||
session.server="ldap"
|
||
session.username="admin"
|
||
... | ... | |
|
||
ldap_con=LdapConnection.LdapConnection(session)
|
||
ldap_con.process()
|
||
|
||
|
||
try:
|
||
os.mkdir( "/tmp/rayuela-ldap")
|
||
... | ... | |
|
||
esAlumnos=(archivo[-4:].lower()==".zip")
|
||
|
||
|
||
if esAlumnos:
|
||
intento=unzip_alumnos(archivo)
|
||
if intento!="":
|
||
... | ... | |
parsea_archivo(archivo,"profesor")
|
||
dptos=lista_grupos(usuarios,"departamento","SIN_DPTO")
|
||
|
||
|
||
crea_grupos(ldap_con,aulas)
|
||
crea_grupos(ldap_con,dptos)
|
||
total=crea_usuarios(ldap_con,usuarios)
|
||
print total
|
||
|
||
if esAlumnos:
|
||
usuarios_antiguos=lista_antiguos(ldap_con,"students")
|
||
|
||
LdapUtils.clean_students(ldap_con)
|
||
rellena_students(ldap_con,usuarios)
|
||
usuarios_grupos(ldap_con,aulas)
|
||
else:
|
||
usuarios_antiguos=lista_antiguos(ldap_con,"teachers")
|
||
LdapUtils.clean_teachers(ldap_con)
|
||
rellena_teachers(ldap_con,usuarios)
|
||
usuarios_grupos(ldap_con,dptos)
|
||
|
||
if borrando:
|
||
borra_antiguos(ldap_con,usuarios_antiguos,usuarios)
|
||
|
||
LdapUtils.sanea_grupos(ldap_con)
|
||
|
||
|
||
|
||
|
||
|
||
|
Exportar a: Unified diff
Módulo de Rayuela2Ldap terminado a falta de más pruebas