|
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
# Project: wifi-ltsp
|
|
# Module: configura_hostapd.py
|
|
# Purpose: genera un archivo hostapc.accept para dar acceso a internet a los alumnos.
|
|
# Language: Python 2.5
|
|
# Date: 07-Feb-2011.
|
|
# Ver: 07-Feb-2011.
|
|
# Author: Isabel Aparicio Pérez
|
|
# Copyright: 2011 - Isabel Aparicio Pérez <prog5pe@edu.juntaextremadura.net>
|
|
#
|
|
# wifi-ltsp is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
# Script2 is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with wifi-ltsp. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
""" Este programa genera el archivo hostapd.access necesario para que en el momento del logueo del
|
|
profesor se de acceso a internet a los alumnos que tienen clase en esa hora con ese profesor. Para ello
|
|
tenemos que recoger el dia de la semana y la hora actual que tiene el servidor de aula y con el dia actual
|
|
buscar en el servidor nfs el fichero del dia de la semana que corresponde con el dia concreto. El fichero
|
|
descargado del servidor nfs se almacena en el servidor de aula en la ruta /wifi con el nombre horario.txt.
|
|
Tambien controlamos el usuario que esta logueado en ese preciso momento en el servidor. A partir del usuario
|
|
logueado, de la hora del sistema y del fichero descargado del servidor nfs se genera el fichero hostapd.access
|
|
con las mac de los alumnos correspondientes.
|
|
|
|
Isabel Aparicio Pérez
|
|
Consejería de Educacion.
|
|
prog5pe@edu.juntaextremadura.net
|
|
|
|
"""
|
|
|
|
import time
|
|
import urllib
|
|
import os
|
|
import errno
|
|
import sys
|
|
import re
|
|
|
|
#Expresiones regulares
|
|
|
|
fecha=[]
|
|
ip=[]
|
|
dia_semana={"Mon":"lunes.txt","Tue":"martes.txt","Wed":"miercoles.txt","Thu":"jueves.txt","Fri":"viernes.txt"}
|
|
|
|
|
|
def dia_actual():
|
|
"""con esta funcion se obtiene la fecha actual que tiene el servidor de aula"""
|
|
fecha = time.asctime()
|
|
return fecha
|
|
|
|
def fichero_semana(fecha):
|
|
"""Con esta funcion se obtiene la parte de la fecha actual que corresponde con el dia de la semana"""
|
|
dia= fecha[0:3]
|
|
if dia not in ["Mon","Tue","Web","Thu","Fri"]:
|
|
print "El formato de la fecha del sistema no es el esperado"
|
|
# break
|
|
else:
|
|
fichero=dia_semana[dia]
|
|
return fichero
|
|
|
|
def hora_actual(fecha):
|
|
"""Con esta funcion se obtiene la hora actual del sistema sin los : de forma que la 08:45 se representaran
|
|
como la 0845"""
|
|
hora= fecha[11:13]+fecha[14:16]
|
|
h=int(hora)
|
|
if (h<int(0000) or h>int(2500)):
|
|
print "El formato de la hora del sistema no es el esperado"
|
|
# break
|
|
else:
|
|
return hora
|
|
|
|
|
|
def descargar_fichero(fichero):
|
|
"""funcion que se encarga de descargar el fichero del dia de la semana correspondiente al dia actual del
|
|
servidor nfs y colocarlo en la ubicacion correcta en el servidor de terminales con el nombre de horario.txt"""
|
|
file="http://servidor/wifi/"+fichero
|
|
print file
|
|
destino="/wifi/horario.txt"
|
|
destino2="/wifi"
|
|
if not os.path.exists(destino2):
|
|
print "La ruta destino no existe y hay que crearla"
|
|
try:
|
|
os.makedirs(destino2)
|
|
except OSError:
|
|
print "Hay algun error a la hora de crear el directorio /wifi en el servidor de aula"
|
|
urllib.urlretrieve(file, destino)
|
|
return destino
|
|
|
|
|
|
|
|
|
|
def devuelve_usuario():
|
|
"""con esta funcion recogemos el usuario que esta logueado en ese momento en el ordenador, seguira intentandolo
|
|
hasta que se loguee antes"""
|
|
resultado = sys.argv[1]
|
|
return resultado
|
|
|
|
def crea_hostapd(destino,resultado,hora):
|
|
"""con esta funcion generamos el fichero hostapd con las mac correspondientes a los alumnos a los que se
|
|
les va a dar acceso a internet y lo colocamos en la ruta correcta."""
|
|
if not os.path.exists(destino):
|
|
print "Hay un error el el fichero horario.txt en el servidor de aula"
|
|
else:
|
|
f=open(destino,"r")
|
|
if not os.path.exists("/etc/hostapd"):
|
|
try:
|
|
os.makedirs("/etc/hostapd")
|
|
except IOError:
|
|
print "Ha habido algun error a la hora de crear el directorio /etc/hostapd"
|
|
# break
|
|
if not os.access("/etc/hostapd", os.W_OK):
|
|
print "No tiene permisos de escritura sobre el directorio /etc/hostapd"
|
|
# break
|
|
else:
|
|
g=open("/etc/hostapd/hostapd.accept","w")
|
|
while True:
|
|
dato=f.readline()
|
|
if not dato:
|
|
break
|
|
else:
|
|
lin=dato.split("|")
|
|
if lin[0]==resultado:
|
|
if hora>lin[2] and hora<lin[3]:
|
|
g.write(lin[1])
|
|
g.write("\n")
|
|
f.close()
|
|
g.close()
|
|
return g
|
|
|
|
def reinicia_hostapd():
|
|
resultado = os.system("invoke-rc.d hostapd restart")
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
dia_hoy=""
|
|
hora=""
|
|
user=""
|
|
fich=""
|
|
hos=""
|
|
res=""
|
|
f=""
|
|
dia_hoy=dia_actual()
|
|
hora=hora_actual(dia_hoy)
|
|
fich=fichero_semana(dia_hoy)
|
|
f=descargar_fichero(fich)
|
|
user=devuelve_usuario()
|
|
hos=crea_hostapd(f,user,hora)
|
|
res=reinicia_hostapd()
|
|
if hos=="":
|
|
print "El script no ha funcionado correctamente"
|
|
else:
|
|
print "Todo ha ido bien"
|