def fija_horarios(usr,rango): """Modifica el archivo de configuracion con los nuevos horarios de acceso al pc""" xmldoc=parse_file(archivo.configuracion) usuarios=xmldoc.getElementsByTagName('usuarios') modificar=False for node in usuarios[0].childNodes: if node.nodeName.find(usr)!=-1 and usr.find(node.nodeName)!=-1: modificar=True break if modificar: node.setAttribute("acceso",rango) else: tab=usuarios[0].firstChild.nodeValue tab_hijo=tab+"\t" tab_salto="\n"+tab nodo_usuario=xmldoc.createElement(usr) nodo_usuario.setAttribute("acceso",rango) nodo_usuario.appendChild(xmldoc.createTextNode(tab_hijo)) usuarios[0].appendChild(xmldoc.createTextNode(tab)) usuarios[0].appendChild(nodo_usuario) usuarios[0].appendChild(xmldoc.createTextNode(tab_salto)) correcto=False while not correcto: try: copia_seguridad() f2=open(archivo.configuracion,"w") f2.write(xmldoc.toxml()) f2.close() correcto=True except: correcto=False
def revisa_blacklists(file_conf): from func import parse_file xmldoc=parse_file(file_conf) bl=xmldoc.getElementsByTagName('blacklists')[0] #tab=str(bl.firstChild.nodeValue) tab="\n\t" node=bl.firstChild for i in range(len(bl.childNodes)): if node.nextSibling==None: bl.removeChild(node) bl.appendChild(xmldoc.createTextNode(tab)) break node=node.nextSibling correcto=False while not correcto: try: copia_seguridad() f=open(file_conf,'w') f.write(xmldoc.toxml()) f.close() correcto=True except: correcto=False
def actualiza_consumo (config): """ Actualiza el archivo de configuracion xml con el consumo actual de los servicios Acepta como parametro una tabla con el usuario, el servicio, el campo y el tiempo. Campo y tiempo son listas.""" from xml import xpath doc = parse_file(archivo.configuracion) iteraciones=len(config[0]) for i in range (iteraciones): usuario=config[0][i] servicio=config[1][i] campo=config[2][i] tiempo=config[3][i] if xpath.Evaluate('/config/usuarios/'+usuario+'/'+servicio+'/limite_diario',doc)!=[]: j=0 for c in campo: t=tiempo[j] xpath.Evaluate('/config/usuarios/'+usuario+'/'+servicio+'/'+c, doc)[0].firstChild.data=t j=j+1 correcto=False while not correcto: try: copia_seguridad() f2=open(archivo.configuracion,'w') f2.write(doc.toxml()) f2.close() correcto=True except: correcto=False
def restaura_consumo(campo,valor): """Modifica todos los nodos de nombre 'campo' con 'valor' """ xmldoc=parse_file(archivo.configuracion) items=xmldoc.getElementsByTagName(campo) for item in items: item.firstChild.data=valor correcto=False while not correcto: try: copia_seguridad() f2=open(archivo.configuracion,'w') f2.write(xmldoc.toxml()) f2.close() correcto=True except: correcto=False
def actualiza_fecha(nueva_fecha): """Actualiza fecha registrada en archivo de configuracion con la actual""" from xml import xpath xmldoc=parse_file(archivo.configuracion) xpath.Evaluate('/config/demonio/fecha',xmldoc)[0].childNodes[0].data=nueva_fecha correcto=False while not correcto: try: copia_seguridad() f2=open(archivo.configuracion,'w') f2.write(xmldoc.toxml()) f2.close() correcto=True except: correcto=False return
def nodo_usuario(usr): """Crea la estructura basica de un usuario en el archivo de configuracion en caso de no existir""" xmldoc=parse_file(archivo.configuracion) padre=xmldoc.getElementsByTagName('usuarios') encontrado=False for user in padre[0].childNodes: if user.nodeName.find(usr)!=-1 and usr.find(user.nodeName)!=-1: encontrado=True break if not encontrado: tab=padre[0].firstChild.nodeValue+"\t" tab_hijo=tab+"\t" nodo_usuario=xmldoc.createElement(usr) nodo_usuario.setAttribute("acceso",'Mo0000-2359Tu0000-2359We0000-2359Th0000-2359Fr0000-2359Sa0000-2359Su0000-2359') nodo_usuario.appendChild(xmldoc.createTextNode(tab)) todo=xmldoc.createElement("todo") activo=xmldoc.createElement("activo") activo.appendChild(xmldoc.createTextNode("1")) todo.appendChild(xmldoc.createTextNode(tab_hijo)) todo.appendChild(activo) todo.appendChild(xmldoc.createTextNode(tab_hijo)) nodo_usuario.appendChild(todo) nodo_usuario.appendChild(xmldoc.createTextNode(tab)) padre[0].appendChild(xmldoc.createTextNode(padre[0].firstChild.nodeValue)) padre[0].appendChild(nodo_usuario) padre[0].appendChild(xmldoc.createTextNode("\n"+padre[0].firstChild.nodeValue)) correcto=False while not correcto: try: copia_seguridad() f2=open(archivo.configuracion,"w") f2.write(xmldoc.toxml()) f2.close() correcto=True except: correcto=False
def elimina_srv(servicio): """Borra el sevicio que se le pase como argumento del archivo de configuracion""" from func import extrae_users, servicio_definido xmldoc=parse_file(archivo.configuracion) srvs=xmldoc.getElementsByTagName("servicios") j=False for i in srvs[0].childNodes: if i.localName == servicio: srvs[0].removeChild(i) if j: srvs[0].removeChild(j) j=i #si algun usuario tiene definida entrada para este servicio se elimina users=extrae_users(archivo.mefilog) padre=xmldoc.getElementsByTagName('usuarios')[0] for user in users: if servicio_definido(user,servicio,archivo.mefilog): for nodo_user in padre.childNodes: if nodo_user.nodeName.find(user)!=-1 and user.find(nodo_user.nodeName)!=-1: break for hijo in nodo_user.childNodes: if hijo.nodeName.find(servicio)!=-1 and servicio.find(hijo.nodeName)!=-1: nodo_user.removeChild(hijo.previousSibling) nodo_user.removeChild(hijo) break correcto=False while not correcto: try: copia_seguridad() f2=open(archivo.configuracion,"w") f2.write(xmldoc.toxml()) f2.close() correcto=True except: correcto=False
def revisa_grupo(grupo,descrip,f_obj,archivo,DBdest): """Se revisa grupo en archivo de configuracion, con las respectivas entradas que ese grupo engloba""" cad_domains='domains' cad_urls='urls' cad_expressions='expressions' nlista={'domains':0,'urls':0,'expressions':0} actual={'domains':0,'urls':0,'expressions':0} #comprueba descripciones que incluye el grupo for content in os.listdir(DBdest): if cad_domains.find(content)!=-1: nlista['domains']=1 if cad_urls.find(content)!=-1: nlista['urls']=1 if cad_expressions.find(content)!=-1: nlista['expressions']=1 #elemento dentro del que se inserta el grupo bl=f_obj.getElementsByTagName('blacklists')[0] #tab=str(bl.firstChild.nodeValue) tab="\n\t" tab_hijo=tab+'\t' for node in bl.childNodes: actual['domains']=0 actual['urls']=0 actual['expressions']=0 if node.nodeName.find('group')!=-1: if node.attributes['tag'].value.find(grupo)!=-1: for hijo in node.childNodes: if hijo.nodeName.find('entry')!=-1: if cad_domains.find(hijo.attributes['tag'].value)!=-1: actual['domains']=1 if cad_urls.find(hijo.attributes['tag'].value)!=-1: actual['urls']=1 if cad_expressions.find(hijo.attributes['tag'].value)!=-1: actual['expressions']=1 if nlista['domains']==1 and actual['domains']==0: dm=f_obj.createElement('entry') dm.setAttribute('tag','domains') node.insertBefore(f_obj.createTextNode(tab_hijo),node.lastChild) node.insertBefore(dm,node.lastChild) if nlista['urls']==1 and actual['urls']==0: ur=f_obj.createElement('entry') ur.setAttribute('tag','urls') node.insertBefore(f_obj.createTextNode(tab_hijo),node.lastChild) node.insertBefore(ur,node.lastChild) if nlista['expressions']==1 and actual['expressions']==0: ex=f_obj.createElement('entry') ex.setAttribute('tag','expressions') node.insertBefore(f_obj.createTextNode(tab_hijo),node.lastChild) node.insertBefore(ex,node.lastChild) correcto=False while not correcto: try: copia_seguridad() f=open(archivo,'w') f.write(f_obj.toxml()) f.close() correcto=True except: correcto=False
def append_grupo(grupo,descrip,f_obj,archivo,DBdest): """Se agrega grupo a archivo de configuracion, con las respectivas entradas que ese grupo engloba""" import os cad_domains='domains' cad_urls='urls' cad_expressions='expressions' #comprueba descripciones que incluye el grupo #elemento dentro del que se inserta el grupo bl=f_obj.getElementsByTagName('blacklists')[0] #tab=str(bl.firstChild.nodeValue) tab="\n\t" n=tab.rfind('\t') tab_padre=tab[:n] tab_hijo=tab+'\t' tab_hijo2=tab_hijo+'\t' ds=f_obj.createElement('descripcion') ds.appendChild(f_obj.createTextNode(tab_hijo2)) ds.appendChild(f_obj.createTextNode(descrip)) ds.appendChild(f_obj.createTextNode(tab_hijo)) dm=f_obj.createElement('entry') dm.setAttribute('tag','domains') ur=f_obj.createElement('entry') ur.setAttribute('tag','urls') ex=f_obj.createElement('entry') ex.setAttribute('tag','expressions') gr=f_obj.createElement('group') gr.appendChild(f_obj.createTextNode(tab_hijo)) gr.appendChild(ds) if os.path.isfile(DBdest+"/domains"): gr.appendChild(f_obj.createTextNode(tab_hijo)) gr.appendChild(dm) if os.path.isfile(DBdest+"/urls"): gr.appendChild(f_obj.createTextNode(tab_hijo)) gr.appendChild(ur) if os.path.isfile(DBdest+"/expressions"): gr.appendChild(f_obj.createTextNode(tab_hijo)) gr.appendChild(ex) gr.setAttribute('local','no') gr.setAttribute('tag',grupo) gr.appendChild(f_obj.createTextNode(tab)) bl.insertBefore(f_obj.createTextNode(tab),bl.lastChild) bl.insertBefore(gr,bl.lastChild) correcto=False while not correcto: try: copia_seguridad() f=open(archivo,'w') f.write(f_obj.toxml()) f.close() correcto=True except: correcto=False
def avanz_usr(todos,user,tabla,listas): """Establece los parametros de un usuario en el archivo d econfiguracion""" xmldoc=parse_file(archivo.configuracion) usuarios=xmldoc.getElementsByTagName("usuarios") anterior=False for i in usuarios[0].childNodes: if i.localName == user: usuarios[0].removeChild(i) if anterior: usuarios[0].removeChild(anterior) anterior=i usr=xmldoc.createElement(user) web=False if listas!=[]: web=True include_web=True cad_web="web" if todos: usr.appendChild(xmldoc.createTextNode("\n\t\t\t")) tod=xmldoc.createElement("todo") tod.appendChild(xmldoc.createTextNode("\n\t\t\t\t")) act=xmldoc.createElement("activo") act.appendChild(xmldoc.createTextNode("1")) tod.appendChild(act) tod.appendChild(xmldoc.createTextNode("\n\t\t\t")) usr.appendChild(tod) usr.appendChild(xmldoc.createTextNode("\n\t\t")) else: filas=len(tabla[0]) for i in range(filas): if web: if cad_web.find(tabla[0][i])!=-1: include_web=False usr.appendChild(xmldoc.createTextNode("\n\t\t\t")) srv=xmldoc.createElement(tabla[0][i]) srv.appendChild(xmldoc.createTextNode("\n\t\t\t\t")) if tabla[8][i]!="SL": lim_d=xmldoc.createElement("limite_diario") lim_d.appendChild(xmldoc.createTextNode(tabla[1][i])) srv.appendChild(lim_d) srv.appendChild(xmldoc.createTextNode("\n\t\t\t\t")) lim_s=xmldoc.createElement("limite_semanal") lim_s.appendChild(xmldoc.createTextNode(tabla[2][i])) srv.appendChild(lim_s) srv.appendChild(xmldoc.createTextNode("\n\t\t\t\t")) lim_m=xmldoc.createElement("limite_mensual") lim_m.appendChild(xmldoc.createTextNode(tabla[3][i])) srv.appendChild(lim_m) srv.appendChild(xmldoc.createTextNode("\n\t\t\t\t")) tot_d=xmldoc.createElement("total_diario") tot_d.appendChild(xmldoc.createTextNode(tabla[4][i])) srv.appendChild(tot_d) srv.appendChild(xmldoc.createTextNode("\n\t\t\t\t")) tot_s=xmldoc.createElement("total_semanal") tot_s.appendChild(xmldoc.createTextNode(tabla[5][i])) srv.appendChild(tot_s) srv.appendChild(xmldoc.createTextNode("\n\t\t\t\t")) tot_m=xmldoc.createElement("total_mensual") tot_m.appendChild(xmldoc.createTextNode(tabla[6][i])) srv.appendChild(tot_m) srv.appendChild(xmldoc.createTextNode("\n\t\t\t\t")) prorroga=xmldoc.createElement("prorroga") prorroga.appendChild(xmldoc.createTextNode(tabla[7][i])) srv.appendChild(prorroga) srv.appendChild(xmldoc.createTextNode("\n\t\t\t\t")) act=xmldoc.createElement("activo") act.appendChild(xmldoc.createTextNode("1")) srv.appendChild(act) srv.appendChild(xmldoc.createTextNode("\n\t\t\t")) usr.appendChild(xmldoc.createTextNode("\n\t\t\t")) usr.appendChild(srv) if web: if include_web: usr.appendChild(xmldoc.createTextNode("\n\t\t\t")) srv=xmldoc.createElement("web") srv.appendChild(xmldoc.createTextNode("\n\t\t\t\t")) act=xmldoc.createElement("activo") act.appendChild(xmldoc.createTextNode("1")) srv.appendChild(act) srv.appendChild(xmldoc.createTextNode("\n\t\t\t")) usr.appendChild(xmldoc.createTextNode("\n\t\t\t")) usr.appendChild(srv) usr.appendChild(xmldoc.createTextNode("\n\t\t")) usuarios[0].appendChild(xmldoc.createTextNode("\n\t\t")) usuarios[0].appendChild(usr) usuarios[0].appendChild(xmldoc.createTextNode("\n\t")) correcto=False while not correcto: try: copia_seguridad() f2=open(archivo.configuracion,"w") f2.write(xmldoc.toxml()) f2.close() correcto=True except: correcto=False
def crea_srv(servicio,puertos_tcp,puertos_udp): """Acepta una cadena alfanumerica y dos listas de enteros, crea un servicio de nombre igual a la cadena con los puertos tcp y udop de las listas y lo graba en el archivo de configuracion""" nivel=0 if puertos_tcp!=['']: j=-10 consecutivos=[] cons=False for i in puertos_tcp: if int(i)==int(j)+1: consecutivos.append(str(j)) cons=True if i==puertos_tcp[-1]: consecutivos.append(i) elif cons or i == puertos_tcp[-1]: consecutivos.append(j) consecutivos.append("-") cons=False j=i cc=[] if len(consecutivos) > 0 and consecutivos[-1]!="-": consecutivos.append("-") items=len(consecutivos) if items > 2: ii=0 cc.append(consecutivos[ii]) for i in range(items): if consecutivos[i]=="-": cc.append(consecutivos[i-1]) ii=i+1 if items!=i+1: cc.append(consecutivos[ii]) unicos_tcp=[] for i in puertos_tcp: existe=False for j in consecutivos: if i == j: existe=True if not existe: unicos_tcp.append("s-"+i) items=len(cc) consecutivos_tcp=[] for i in range(0,items,2): consecutivos_tcp.append("s-"+cc[i]+":"+"s-"+cc[i+1]) else: unicos_tcp=[] consecutivos_tcp=[''] for i in puertos_tcp: unicos_tcp.append("s-"+i) else: nivel=nivel+1 unicos_tcp=[''] consecutivos_tcp=[''] if puertos_udp!=['']: j=-10 consecutivos=[] cons=False for i in puertos_udp: if int(i)==int(j)+1: consecutivos.append(str(j)) cons=True if i==puertos_udp[-1]: consecutivos.append(i) elif cons or i == puertos_udp[-1]: consecutivos.append(j) consecutivos.append("-") cons=False j=i cc=[] if len(consecutivos) > 0 and consecutivos[-1]!="-": consecutivos.append("-") items=len(consecutivos) if items > 2: ii=0 cc.append(consecutivos[ii]) for i in range(items): if consecutivos[i]=="-": cc.append(consecutivos[i-1]) ii=i+1 if items!=i+1: cc.append(consecutivos[ii]) unicos_udp=[] for i in puertos_udp: existe=False for j in consecutivos: if i == j: existe=True if not existe: unicos_udp.append("s-"+i) items=len(cc) consecutivos_udp=[] for i in range(0,items,2): consecutivos_udp.append("s-"+cc[i]+":"+"s-"+cc[i+1]) else: unicos_udp=[] consecutivos_udp=[''] for i in puertos_udp: unicos_udp.append("s-"+i) else: nivel=nivel+1 unicos_udp=[''] consecutivos_udp=[''] if nivel != 2: tcp='' for i in unicos_tcp: tcp=tcp+i+";" for i in consecutivos_tcp: tcp=tcp+i+";" if tcp: r=True while r: if len(tcp)>0 and tcp[-1]==";": tcp=tcp[:-1] else: r=False udp='' for i in unicos_udp: udp=udp+i+";" for i in consecutivos_udp: udp=udp+i+";" if udp: r=True while r: if len(udp)>0 and udp[-1]==";": udp=udp[:-1] else: r=False xmldoc=parse_file(archivo.configuracion) todos_srv=xmldoc.getElementsByTagName("servicios") todos_srv[0].appendChild(xmldoc.createTextNode("\t")) nodo_srv=xmldoc.createElement(servicio) nodo_srv.setAttribute("tcp",tcp) nodo_srv.setAttribute("udp",udp) todos_srv[0].appendChild(nodo_srv) todos_srv[0].appendChild(xmldoc.createTextNode("\n\t")) correcto=False while not correcto: try: copia_seguridad() f2=open(archivo.configuracion,"w") f2.write(xmldoc.toxml()) f2.close() correcto=True except: correcto=False return nivel