ispadmin.system (version 1.0)
index
/usr/lib/python2.2/site-packages/ispadmin/system.py

ispadmin - Suite Administración Correo/Web/DNS
hector@bith.net
---
Librería
 
Gestión de usuarios y otras funciones del sistema

 
Modules
            
commands
ispadmin.config
fcntl
grp
ispadmin.interfaz
os
pwd
re
string
sys
 
Classes
            
crontab_file
fichero
 
class crontab_file
      maneja el /etc/crontab mediante la clase fichero
(es decir, inserta en el fichero líneas (begin ispadmin)
y (end ispadmin) para controlar la área modificada)
 
   Methods defined here:
__init__(self)
append(self, linea)
añade una nueva programación al crontab
(en realidad añade una línea directamente al final)
close(self)
delete(self, linea)
borra una línea existente del crontab
lineas(self)
devuelve las líneas que hay en el fichero

Data and non-method functions defined here:
__doc__ = 'maneja el /etc/crontab mediante la clase fichero...ispadmin) para controlar la \xe1rea modificada)\n '
__module__ = 'ispadmin.system'
 
class fichero
      clase diseñada para ofrecer un acceso transparente a los ficheros
 de configuración que ispadmin puede llegar a modificar y al mismo
 tiempo ofrecer bloqueos mediante la librería fcntl()
 
 hay una estructura muy similar a la utilizada en berkeleydb.fichero()
 objeto independiente ya que se ha procurado que el acceso a los 
 ficheros con datos tipo berkeleydb sean independientes.
 
si en la creación del objeto se especifica un separador, sólo
se pueda modificar lo que está en este bloque, por ejemplo:
    
fichero config:
  YYY
  # (begin ispadmin)
  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  # (end ispadmin)
  YYY
  
si en la creación se usa:
 aux = fichero("/etc/tal","ispadmin")
sólo se devolverá XXXXXXXXXXXXXXXXXXX, y sólo se podrá modificar éste
bloque
 
si hacemos modificar con un bloque y en el fichero no había nada,
crea al final dicho bloque
 
   Methods defined here:
__error__(self, mensaje)
llamar cuando se produzca un error irrecuperable, que obligue
a abortar la ejecución
__init__(self, nombre, bloque=None, delim_coment='#')
nombre = nombre del fichero a acceder
         (en principio estamos accediendo en modo lectura)
bloque = separador esperado (debe estar en el fichero)
delim_coment = caracter o caracteres con los que debe comenzar
               una línea que contenga un comentario (#)
close(self)
equivale a 'file'.close() --> HAY QUE HACERLO CUANDO
ESTAMOS EMPLEANDO SINTAXIS DE BLOQUE PARA QUE ESCRIBA
EL BLOQUE DEL FINAL
closed(self)
fileno(self)
modificar(self)
reabre el fichero en modo de escritura para que podamos hacer
sobre él cambios, pero si mientras el fichero fue modificado
haremos que se aborten sobre él cualquier tipo de cambios
read(self, num=1)
readline(self)
readlines(self)
write(self, elem)
writelines(self, elem)

Data and non-method functions defined here:
__doc__ = 'clase dise\xf1ada para ofrecer un acceso transparen...hab\xeda nada,\n crea al final dicho bloque\n '
__module__ = 'ispadmin.system'
 
Functions
            
ask_desc(desc)
diálogo interactivo para establecer/cambiar la descripción del usuario
- None devuelve directamente None
ask_fecha_desactivacion(fecha_desactivacion, info=1)
diálogo interactivo para establecer/cambiar
la fecha de desactivación del usuario
(con None devuelve directamente None)
ask_password(confirmar=1, validar_password=1)
diálogo interactivo para obtener/generar una contraseña
para este usuario. Devuelve tanto la contraseña en claro
como ya encriptada.
 
'confirmar' es usado para que pida necesariamente o no la
contraseña (para que deje mantener o no la actual)
'validar_password' es para que avise cuando 
contiene caracteres no válidos (y además no deja seguir)
ask_quota(quota_orig, quotas_default)
diálogo interactivo para establecer/cambiar
las quotas
(con None devuelve directamente None)
(quotas_default son las que pondrá por defecto en caso de que no haya
 y representa el prototipo para este grupo de usuarios)
ask_user(user)
diálogo interactivo para establecer/cambiar
el nombre de usuario
(con None devuelve directamente None)
ask_user_web(usuario, info=None)
versión para web de ask_user()-->
NO hay que obligar a que el usuario exista ¿o si?
diálogo interactiva para establecer/cambiar el nombre de usuario web
SOLO para usuarios web
bloquea_usuario(usuario)
bloquea una cuenta de usuario (sea del tipo que sea)
check_fecha_desactivacion(fecha_desactivacion)
check_nombre_usuario(usuario, tipo='correo')
comprueba que el nombre de usuario se ajuste formato de usuario tipo. 
[tipo] -> 'correo' o 'web'
check_password(passwd)
devuelve 0 si el formato de password es incorrecto
check_usuario_bloqueado(usuario)
devuelve 0 si no está bloqueado el usuario, y uno en caso contrario
check_usuario_existe(usuario)
devuelve 1 si existe el usuario y 0 en caso contrario
check_usuario_groups(usuario, grupos)
devuelve 1 si es de alguno de los grupos indicados en 'grupos',
que ha de ser necesariamente un array [] de strings o números
(el usuario sólo puede ser string)
codifica_password(password)
a partir de una contrasenya en claro devuelve un array
con el md5 condificado y la contraseña misma en claro
crear(name, comment, expire, passwd, usr_type='gratuito', tipo='correo')
crear una cuenta de correo (buzón) con sus direcciones de email
o crear una cuenta web
    
[usr_type]   -> en un futuro dentro de las posibilidades
[tipo]       -> 'correo', 'web'
 
el valor de retorno es cero si creó el usuario correctamente
crear_buzon_correo(elem)
crea el buzón de un usuario si este no existe o lo vacía si
ya existía, además de asegurarse de que pertenece al usuario/grupo
adecuados
desbloquea_usuario(usuario)
desbloquea una cuenta de usuario (sea del tipo que sea)
discos_con_quota()
recupera de este sistema aquellos discos para los que hay
establecidas quotas
ejecutar_remoto(orden_a_ejecutar, servidor, txtinput='')
devuelve una tupla con (valor_retorno,output) de
ejecutar en el remoto un comando
 
se permite introducir UNA ÚNICA LÍNEA DE TEXTO POR STDIN AL
PROGRAMA REMOTO
estado_usuario(user)
 devuelve información adicional sobre un usuario
[bloqueo,fecha_desactivacion,cuotas] o None en caso de que el nombre
de usuario no sea válido (no vale darle el uid)
expresion_regular_hoy()
como es posible que tengamos locales, esta función devuelve una 
cadena válida para buscar tanto en inglés como en español si la
fecha viene en formato 'Mes  XX', por ejemplo 'Jan  29', o 'Ene 29'
(faltará el -i para que busque tanto en mayúsculas como en 
minúsculas)
formatea_quota(quota, modo=1)
devuelve un string en un formato amigable con la cuota de un 
  determinado disco
ésta viene el forma de array [ DISCO, MB,HARD,SOFT, FILES,HARD,SOFT ]
en 'quota'
 
y 'modo' puede ser:
    1 -> ver USO ESPACIO (por defecto)
    2 -> ver USO NUM FICHEROS
    3 -> ver TODO 
    
las únicas quotas a tocar/mostrar son las HARD, las SOFT ni se editan
ni se muestran
generar_password(longitud=6, caract='ABCDEFGHJKLMNPQRSTUVWXYZ23456789')
Genera una clave aleatoria (en texto plano) en mayúsculas y formada
por letras y números a los que se ha retirado 0/O y 1/I por inducir
a error
Devuelve una tupla en la que el primer elemento es la contraseña
en claro y la segunda la contraseña ya codificada con MD5
get_usr_all()
devuelve el nombre de los usuarios del grupo web
get_usr_type(name)
devuelve el tipo del usuario o None en caso contrario
info_usuario(nameORuid)
devuelve información sobre los usuarios del sistema
  (tanto si pasas un nombre como si pasas un uid)
el formato devuelto es: 
  [nombre,grupos,descrip,home,shell]      
none en caso de que no se encuentre el usuario o uid
nombre_disco(disc)
traduce un nombre del tipo /dev/hda1 en su punto de montaje /home
si se indica en el argumento el disco a traducir ("" devuelve si no
lo encuentra)
notificar(texto)
envía un email al correo de administración definido informando
de algún cambio en la configuración
set_desact(uname, fecha)
dada una fecha de desactivación en formato AAA-MM-DD, procede a
darle ésta al usuario especificado
set_password(usuario, contrasenya)
establece la contraseña de un usuario a la dada YA 
CODIFICADA
set_quota(uname, umodel)
cambia la quota del usuario 'uname' para que coincida con la dada
en los discos especificados.
si un disco NO aparece esto no implica que pongamos a cero la quota
de ese disco, únicamente se establecen en aquellos discos para los
que se presenta el argumento, estableciéndose tanto los parámetros
HARD y SOFT de bloques, como para el número de ficheros (inodes)
show_quotas(quotas)
dado un array con las quotas a aplicar o de que dispone este usuario,
las muestra por pantalla en un formato amigable, usando para ello
formatea_quota()
 
Data
             __discos_con_quota__ = None
__file__ = '/usr/lib/python2.2/site-packages/ispadmin/system.pyc'
__name__ = 'ispadmin.system'
__nombre_disco__ = None
__version__ = '1.0'