Modificando authz file

Post on 17-Jun-2015

374 views 2 download

description

Script en Python que sirve para obtener, cuales deben ser las líneas a ser agregadas en el authz file, una vez se sepa cual es la poítica de accesos que desea el responsable del Repositorio.

Transcript of Modificando authz file

1. Se tiene el siguiente contenido en un fichero llamado file en la carpeta de trabajo:

PROG-ASI1 [paulino,rafa,jose]maria[maria,pedro]sofi[sofia,juan]andres[andres]raul[andres,pedro,rauli]

Este fichero contiene la política de acceso al repositorio PROG-ASI1, sobre el cual trabajará un conjunto de usuarios

2. Ejecutando el siguiente script Python se obtienen dos ficheros en /tmp: output_perm y output_usLos contenidos de dichos ficheros deben ser agregados por el Administrador de Repositorios al fichero authz

#!/usr/bin/env pytonimport re

D={}S=set([])T=set([])

def agrupar(line):  match=separar(line)  repos=match.group(1).rstrip()  D[repos]=match.group(2)  def separar(line):   line=line.rstrip()   line=line.lstrip()   match=re.match('(.*)\[(.*)\](.*)',line)   return match

def put_en_set(clave): for i in D:  if i!=clave:    alum=D[i].split(',')    for a in alum:       S.add(a)

def presentar(A):  c=''  i=0  for t in A:    if i<len(A)-1:       c+='%s,' % t    else:       c+='%s' % t

    i+=1  return c

def main():  f=open('file')  while True:    line=f.readline()    if not line:     break    agrupar(line)    if len(D.keys()) == 1:     for clave in D:      repositorio=clave      us_rw_repos=D[clave]

  put_en_set(clave)  # generar el total de autorizados al repo  output_us = open('/tmp/output_us', 'w')  output_perm = open('/tmp/output_perm', 'w')  output_us.write('u-rw-%s = %s\n' % (repositorio,us_rw_repos))  c=presentar(S)  output_us.write('u-r-%s = %s\n' % (repositorio,c))  output_perm.write('[%s:/]\n' % repositorio)  output_perm.write('@u-rw-%s = rw\n' % repositorio)  output_perm.write('@u-r-%s = r\n' % repositorio)  for i in D:   if i!=clave:    alum=D[i].split(',')    for a in alum:       T.add(a)    R=S-T    c=presentar(alum)    output_us.write('u-rw-%s-%s = %s\n' % (repositorio,i,c))    c=presentar(R)    output_us.write('u-nor-%s-%s = %s\n' % (repositorio,i,c))    output_perm.write('[%s:/%s]\n' % (repositorio,i))    output_perm.write('@u-rw-%s-%s = rw\n' % (repositorio,i))    output_perm.write('@u-nor-%s-%s = \n' % (repositorio,i))    T.clear()    R.clear()  output_perm.close()

  output_us.close()

if __name__ == "__main__":    main()

Produce la siguiente salida:

fichero /tmp/output_us

u-rw-PROG-ASI1 = paulino,rafa,joseu-r-PROG-ASI1 = pedro,andres,juan,sofia,rauli,mariau-rw-PROG-ASI1-raul = andres,pedro,rauliu-nor-PROG-ASI1-raul = juan,sofia,mariau-rw-PROG-ASI1-sofi = sofia,juanu-nor-PROG-ASI1-sofi = rauli,andres,pedro,mariau-rw-PROG-ASI1-andres = andresu-nor-PROG-ASI1-andres = sofia,rauli,juan,pedro,mariau-rw-PROG-ASI1-maria = maria,pedrou-nor-PROG-ASI1-maria = rauli,andres,juan,sofia

fichero /tmp/output_perm

[PROG-ASI1:/]@u-rw-PROG-ASI1 = rw@u-r-PROG-ASI1 = r[PROG-ASI1:/raul]@u-rw-PROG-ASI1-raul = rw@u-nor-PROG-ASI1-raul =[PROG-ASI1:/sofi]@u-rw-PROG-ASI1-sofi = rw@u-nor-PROG-ASI1-sofi =[PROG-ASI1:/andres]@u-rw-PROG-ASI1-andres = rw@u-nor-PROG-ASI1-andres =[PROG-ASI1:/maria]@u-rw-PROG-ASI1-maria = rw@u-nor-PROG-ASI1-maria =