Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Pasar los esquemas ldap a una tabla relacion mysql, con la posibilidad de guardar los tipos de inputs
- # html y el javascript a usar para que el usuario cargue los datos, de paso hice un diccionario de acuerto
- # al rfc 1778, que contiene la descripcion del tipo de sintaxis de los atributos ldap
- # Luego guarde la misma informacion en una base de datos mongo, y en verdad paso lo que dice la documentacion de mongo,
- # la estructura de datos era igual a la que tenia en mi cabeza :p
- #PRIMERO VEREMOS EL TRABAJO CON MYSQL
- from ldapenviroment import schemas
- import ldap
- import ldap.schema
- import MySQLdb
- import sys
- SYNTAXMAP = {
- '1.3.6.1.4.1.1466.115.121.1.1':['ACI Item', '<input type="text" id="aciitem" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.2':['Access Point','<input type="text" id="accesspoint" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.3':['Attribute Type Description','<input type="text" id="attributetypedescription" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.4':['Audio','<input type="text" id="audio" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.5':['Binary','<input type="text" id="binary" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.6':['Bit String','<input type="text" id="bitstring" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.7':['Boolean','<input type="text" id="boolean" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.8':['Certificate','<input type="text" id="certificate" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.9':['Certificate List', '<input type="text" id="certificatelist" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.10':['Certificate Pair','<input type="text" id="certificatepair" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.11':['Country String', '<input type="text" id="countrystring" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.12':['DN','<input type="text" id="dn" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.13':['Data Quality Syntax','<input type="text" id="dataqualitysyntax" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.14':['Delivery Method','<input type="text" id="deliverymethod" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.15':['Directory String','<input type="text" id="directorystring" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.48':['Supplier And Consumer','<input type="text" id="supplierandconsumer" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.49':['Supported Algorithm','<input type="text" id="supportedalgorithm" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.44':['Printable String','<input type="text" id="printablestring" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.45':['Subtree Specification','<input type="text" id="subtreespecification" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.46':['Supplier Information','<input type="text" id="supplierinformation" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.47':['Supplier Or Consumer','<input type="text" id="supplierorconsumer" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.40':['Octet String','<input type="text" id="octetstring" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.41':['Postal Address','<input type="text" id="postaladdress" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.42':['Protocol Information','<input type="text" id="protocolinformation" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.43':['Presentation Address','<input type="text" id="presentationaddress" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.39':['Other Mailbox','<input type="text" id="othermailbox" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.38':['OID','<input type="text" id="oid" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.31':['Matching Rule Use Description','<input type="text" id="matchingruleusedescription" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.30':['Matching Rule Description','<input type="text" id="matchingruledescription" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.33':['MHS OR Address','<input type="text" id="mhsoraddress" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.32':['Mail Preference','<input type="text" id="mailpreference" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.35':['Name Form Description','<input type="text" id="nameformdescription" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.34':['Name And Optional UID','<input type="text" id="nameandoptionaluid" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.37':['Object Class Description','<input type="text" id="objectclassdescription" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.36':['Numeric String','<input type="text" id="numericstring" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.53':['UTC Time','<div id="utctime"></div>'],
- '1.3.6.1.4.1.1466.115.121.1.52':['Telex Number','<input type="text" id="telexnumber" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.51':['Teletex Terminal Identifier','<input type="text" id="teletexterminalidentifier" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.50':['Telephone Number','<div id="telephonenumber"></div>'],
- '1.3.6.1.4.1.1466.115.121.1.57':['LDAP Schema Description','<input type="text" id="ldapschemadescription" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.56':['LDAP Schema Definition','<input type="text" id="ldapschemadefinition" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.55':['Modify Rights','<input type="text" id="modifyrights" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.54':['LDAP Syntax Description','<input type="text" id="ldapsyntaxdescription" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.58':['Substring Assertion','<input type="text" id="substringassertion" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.28':['JPEG','<div id="jpeg"></div>'],
- '1.3.6.1.4.1.1466.115.121.1.29':['Master And Shadow Access Points','<input type="text" id="masterandshadowaccesspoints" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.22':['Facsimile Telephone Number','<input type="text" id="facsimiletelephonenumber" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.23':['Fax','<div id="fax"></div>'],
- '1.3.6.1.4.1.1466.115.121.1.20':['DSE Type','<input type="text" id="dsetype" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.21':['Enhanced Guide','<input type="text" id="enhancedguide" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.26':['IA5 String','<input type="text" id="ia5string" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.27':['INTEGER','<div id="integer"></div>'],
- '1.3.6.1.4.1.1466.115.121.1.24':['Generalized Time','<div id="generalizedtime"></div>'],
- '1.3.6.1.4.1.1466.115.121.1.25':['Guide','<input type="text" id="guide" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.17':['DIT Structure Rule Description','<input type="text" id="ditstructureruledescription" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.16':['DIT Content Rule Description','<input type="text" id="ditcontentruledescription" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.19':['DSA Quality Syntax','<input type="text" id="dsaqualitysyntax" class="text-input" />'],
- '1.3.6.1.4.1.1466.115.121.1.18':['DL Submit Permission','<input type="text" id="dlsubmitpermission" class="text-input" />'],
- }
- def tosql():
- ldap._trace_level = 0
- ldap.set_option(ldap.OPT_DEBUG_LEVEL,0)
- subschemasubentry_dn, schemas = ldap.schema.urlfetch('ldap://localhost',ldap._trace_level)
- obj = schemas.tree(ldap.schema.ObjectClass)
- attr = schemas.tree(ldap.schema.AttributeType)
- cmysql = MySQLdb.connect(db='XXX', user='XXX', passwd='XXXX', host='localhost')
- cursor = cmysql.cursor()
- allatt= {}
- for a in obj.keys():
- objc = schemas.get_obj(ldap.schema.ObjectClass, a)
- if objc != None:
- #insert objectclass in mysql
- sqli = """insert into ldapobj (nombre,oid, jst) values (%s,%s, %s)"""
- data = (objc.names[0],objc.oid,'ldaprender.%s' % objc.names[0].strip().replace('-','').lower() )
- cursor.execute(sqli, data)
- cmysql.commit()
- sqli = 'select id from ldapobj where nombre=%s'
- data = (objc.names[0], )
- cursor.execute(sqli, data)
- cmysql.commit()
- ret = cursor.fetchall()
- id_obj = ret[0][0]
- sqli = """insert into ldapattr (nombre,oid, tipo, sintaxis, sintaxislen, htmlin, id_obj) values (%s,%s,%s,%s,%s,%s,%s)"""
- if objc.must:
- for item, obli in enumerate(objc.must):
- att = schemas.get_obj(ldap.schema.AttributeType, obli)
- if att != None:
- nsyn = SYNTAXMAP.get(att.syntax)
- lsyn = att.syntax_len
- if not nsyn:
- nsyn = ['No definido', 'No definido']
- if not lsyn:
- lsyn = '999'
- data = (att.names[0],att.oid,'obligatorio', nsyn[0], lsyn, nsyn[-1], id_obj)
- try:
- cursor.execute(sqli, data)
- cmysql.commit()
- except Exception, e:
- print e
- if objc.may:
- for item, obli in enumerate(objc.may):
- att = schemas.get_obj(ldap.schema.AttributeType, obli)
- if att != None:
- nsyn = SYNTAXMAP.get(att.syntax)
- lsyn = att.syntax_len
- if not nsyn:
- nsyn = ['No definido', 'No definido']
- if not lsyn:
- lsyn = '999'
- data = (att.names[0],att.oid,'opcional', nsyn[0], lsyn, nsyn[-1], id_obj)
- try:
- cursor.execute(sqli, data)
- cmysql.commit()
- except Exception, e:
- print e
- # Una vez hecho eso, podremos retraer informacion de esta forma.
- # > select ldapattr.nombre, ldapattr.tipo, ldapattr.sintaxis, ldapobj.nombre, ldapobj.jst, ldapattr.htmlin from ldapattr, ldapobj where ldapobj.id = '74' AND ldapattr.id_obj = '74';
- # +---------------+-------------+------------------+--------------+-------------------------+---------------------------------------------------------------+
- # | nombre | tipo | sintaxis | nombre | jst | htmlin |
- # +---------------+-------------+------------------+--------------+-------------------------+---------------------------------------------------------------+
- # | cn | obligatorio | No definido | posixAccount | ldaprender.posixaccount | No definido |
- # | uid | obligatorio | Directory String | posixAccount | ldaprender.posixaccount | <input type="text" id="directorystring" class="text-input" /> |
- # | uidNumber | obligatorio | INTEGER | posixAccount | ldaprender.posixaccount | <div id="integer"></div> |
- # | gidNumber | obligatorio | INTEGER | posixAccount | ldaprender.posixaccount | <div id="integer"></div> |
- # | homeDirectory | obligatorio | IA5 String | posixAccount | ldaprender.posixaccount | <input type="text" id="ia5string" class="text-input" /> |
- # | userPassword | opcional | Octet String | posixAccount | ldaprender.posixaccount | <input type="text" id="octetstring" class="text-input" /> |
- # | loginShell | opcional | IA5 String | posixAccount | ldaprender.posixaccount | <input type="text" id="ia5string" class="text-input" /> |
- # | gecos | opcional | IA5 String | posixAccount | ldaprender.posixaccount | <input type="text" id="ia5string" class="text-input" /> |
- # | description | opcional | Directory String | posixAccount | ldaprender.posixaccount | <input type="text" id="directorystring" class="text-input" /> |
- # +---------------+-------------+------------------+--------------+-------------------------+---------------------------------------------------------------+
- #SEGUNDO LA ESTRUCTURA EN MONGO
- #Esto se mejora sustancialmente al usar mongodb
- from ldapenviroment import schemas
- import ldap
- import ldap.schema
- import sys
- from pymongo import Connection
- from pymongo.errors import ConnectionFailure
- def ldaprender():
- try:
- c = Connection(host='localhost', port=27017)
- except Exception, e:
- print e
- sys.exit(1)
- dbh = c['netipa']
- assert dbh.connection == c
- ldap._trace_level = 0
- ldap.set_option(ldap.OPT_DEBUG_LEVEL,0)
- subschemasubentry_dn, schemas = ldap.schema.urlfetch('ldap://localhost',ldap._trace_level)
- obj = schemas.tree(ldap.schema.ObjectClass)
- attr = schemas.tree(ldap.schema.AttributeType)
- allatt= {}
- for a in obj.keys():
- objc = schemas.get_obj(ldap.schema.ObjectClass, a)
- if objc != None:
- data = (objc.names[0],objc.oid,'ldaprender.%s' % objc.names[0].strip().replace('-','').lower())
- data = {'objectclass': objc.names[0].lower(),
- 'oid': objc.oid,
- 'render': 'ldaprender.%s' % objc.names[0].strip().replace('-','').lower()
- }
- if objc.must:
- data.update({'obligatorio': []})
- for item, obli in enumerate(objc.must):
- att = schemas.get_obj(ldap.schema.AttributeType, obli)
- if att != None:
- nsyn = SYNTAXMAP.get(att.syntax)
- lsyn = att.syntax_len
- if not nsyn:
- nsyn = ['No definido', '<input type="text" id="%s" class="text-input" />' % att.names[0].lower()]
- if not lsyn:
- lsyn = '999'
- data['obligatorio'].append({'nombre': att.names[0].lower(),'oid': att.oid,'sintaxis': nsyn[0], 'longitud': lsyn, 'html': nsyn[-1]})
- if objc.may:
- data.update({'opcional': []})
- for item, obcio in enumerate(objc.may):
- att = schemas.get_obj(ldap.schema.AttributeType, obcio)
- if att != None:
- nsyn = SYNTAXMAP.get(att.syntax)
- lsyn = att.syntax_len
- if not nsyn:
- nsyn = ['No definido', '<input type="text" id="%s" class="text-input" />' % att.names[0].lower()]
- if not lsyn:
- lsyn = '999'
- # data = (att.names[0],att.oid,'opcional', nsyn[0], lsyn, nsyn[-1], id_obj)
- data['opcional'].append({'nombre': att.names[0].lower(),'oid': att.oid,'sintaxis': nsyn[0], 'longitud': lsyn, 'html': nsyn[-1]})
- try:
- dbh.ldaprenders.insert(data, safe=True)
- print 'entro'
- except Exception, e:
- print e
- # Luego el acceso a los valores necesitados es mucho mas comodo
- # db.ldaprenders.find({'objectclass': 'posixgroup'}).next()
- # {
- # "_id" : ObjectId("5042d8ee4b15d50b575f3ffa"),
- # "render" : "ldaprender.posixgroup",
- # "objectclass" : "posixgroup",
- # "oid" : "1.3.6.1.1.1.2.2",
- # "opcional" : [
- # {
- # "nombre" : "userpassword",
- # "oid" : "2.5.4.35",
- # "html" : "<input type=\"text\" id=\"octetstring\" class=\"text-input\" />",
- # "sintaxis" : "Octet String",
- # "longitud" : NumberLong(128)
- # },
- # {
- # "nombre" : "memberuid",
- # "oid" : "1.3.6.1.1.1.1.12",
- # "html" : "<input type=\"text\" id=\"ia5string\" class=\"text-input\" />",
- # "sintaxis" : "IA5 String",
- # "longitud" : "999"
- # },
- # {
- # "nombre" : "description",
- # "oid" : "2.5.4.13",
- # "html" : "<input type=\"text\" id=\"directorystring\" class=\"text-input\" />",
- # "sintaxis" : "Directory String",
- # "longitud" : NumberLong(1024)
- # }
- # ],
- # "obligatorio" : [
- # {
- # "nombre" : "cn",
- # "oid" : "2.5.4.3",
- # "html" : "<input type=\"text\" id=\"cn\" class=\"text-input\" />",
- # "sintaxis" : "No definido",
- # "longitud" : "999"
- # },
- # {
- # "nombre" : "gidnumber",
- # "oid" : "1.3.6.1.1.1.1.1",
- # "html" : "<div id=\"integer\"></div>",
- # "sintaxis" : "INTEGER",
- # "longitud" : "999"
- # }
- # ]
- # }
- # happy coding
Advertisement
Add Comment
Please, Sign In to add comment