Proyecto

General

Perfil

« Anterior | Siguiente » 

Revisión 180

Añadido por jredrejo hace casi 14 años

Módulo de Rayuela2Ldap terminado a falta de más pruebas

Ver diferencias:

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