lunes, 31 de enero de 2011

Quick Hack

Tenia que resolver lo siguiente:

Una macbook que baja mails desde un servidor propio (con un Kerio en la empresa)

Un router que no soporta loopback

Entonces, cuando la mac esta fuera de la empresa, se podia hacer referencia, en el cliente de mail, al DNS, que llamaremos empresa.dyndns.ws (para no revelar datos reales)
Pero, dentro de la empresa, el DNS empresa.dyndns.ws, simplemente no funciona.
Habia que resolverlo, y rapido[0].

Python al rescate!
Colorized Source Code


He aquí el script (es feo, muy feo, pero salio rapidisimo y con fritas!)

import os
from subprocess import Popen, PIPE, STDOUT
esta = False
p = Popen(['ping','-c','1','server'], stdout = PIPE)
output = p.stdout.read()
p.wait()

if 'bytes from' in output:
    ok = True
else:
    ok = False

f = open('/etc/hosts', 'r')
f2 = open('/etc/hosts2', 'w')

for i in f:
    if 'empresa.dyndns' in i:
        esta = True
        if ok:
            f2.write(i)   
    else:
        f2.write(i)      

if not esta and ok:
    f2.write('192.168.0.1    empresa.dyndns.ws \n')	


f.close()
f2.close()

os.remove('/etc/hosts')
os.rename('/etc/hosts2','/etc/hosts')

Basicamente, hace un ping al nombre del servidor donde esta el servidor de mail (el Kerio) con el nombre local, 'server'. Si esta, estoy en le empresa, sino, no.
Entonces, basado en eso, toco el archivo hots (gracias Apple por hacer su OS un UNIX) y listo[1]. Se agrego al inicio y se corre con permisos de root y logramos lo que esta persona queria, una solucion rapida y magica.

No estoy orgulloso del script en si, sino, del poder de python para hacer estos quick hacks, que te salvan la papas. =)


[0] Dicen que rapido y bien, es imposible.
[1] Pero, como decia TuSam, puede fallar. Por ejemplo, si justo hay otro 'server', donde esta esta persona (shit happens)

No hay comentarios:

Publicar un comentario