Los co-managers permiten añadir funciones a Linuxconf justo donde se precisa, en vez de agregar nuevos submenús.
Un co-manager es un componente que participa en un diálogo. Puede añadir campos y validaciones. El caso más común es el diálogo de cuenta de usuario, donde participan más de uno de ellos. El más visible es el módulo mailconf, que inserta una sección completa para gestionar los áliases de correo. Otro caso es el módulo pppdialin que agrega una sección para tratar con parámetros PPP.
Un co-manager debe proporcionar 4 funciones:
Nótese que los co-managers fueron creados en base a cuentas de usuario, pero el concepto es más genérico que eso. Cambie "cuenta de usuario" por "registro" y tendrá una visión más general.
Linuxconf debe ser notificado de que existe un co-manager para un diálogo dado, identificado por una pequeña clave. Por ejemplo, la clave para el diálogo de cuenta de usuario es üsuario".
Un co-manager shellmod debe proveer cuatro funciones que usen el mismo prefijo. Al registrarlo proporcione la función prefijo y la clave del diálogo. Ésto se hace con la función register. Aquí tiene un ejemplo:
# Registrar como co-manager en el diálogo de cuenta de usuario
echo comanager ufct user
La función prefijo es ufct. Se deben crear cuatro funciones according to this prefix:
Esta función es llamdada al construir un diálogo. Puede usar cualquier opcode de los normalmente utilizados para definir un diálogo. No tiene que definir el diálodo ud. mismo (echo DIALOG) ya que está implícitamente definido.
Mientras ud. puede añadir simplemente campos en el diálogo, uno definirá generalmente una nueva sección de diálogo. A menos que haga ésto, su nuevo campo se anexará a la sección actual que puede ser cualquiera.
Definició de una sección con el opcode newf_title
qecho newf_title "Listas de correo" 1 - "Listas de correo"
Esta función recibe todos los valores de los campos (introducidos por el usuario). Cada campo corresponde a una variable shell, así que ud. puede comprobar sus valores directamente. Debe usar "retcode" para decir que la validación se ha realizado con éxito. Como ejemplo:
echo retcode 0
Cualquier valor distinto de 0 se toma como una validación fallida. Todos los errores deben ser informados con el opcode "error". También puede usar "setcurfield" para ir a un campo específico.
if [ "$a1" = "válido" ] ; then
echo retcode 0
else
echo setcurfield a1
echo retcode -1
echo error \"sample.sh: Valor no válido, introduzca la palabra correcta\"
fi
Todos los valores del campo se retornan a su script como una variable shell. La función save debe hacer varias cosas con la información. Puede salvarlo en un archivo o realizar algunas acciones (enviar un mensaje al adminitrador acerca de los cambios requeridos, por ejemplo).
Otra variable shell contiene información relacionada con este diálogo (véase el contexto de diálogo abajo).
Este nombre de función es un poco engañoso. Significa que el registro debe ser borrado (en general, una cuenta de usuario). Debe usar la información del contexto del diálogo (ver abajo) para realizar la eliminación pretendida.
Un co-manager gestiona una parte de un diálogo mayor. Para gestionarlo adecuadamente, el co-manager debe saber otra información acerca del diálogo actual. Por ejemplo, para aumentar el diálogo de cuenta de usuario, se debe conocer la cuenta de usuario (id de usuario) que va a ser editada así como su dominio (żes una cuenta de usario de dominio virtual de correo?).
Esta información extra se pasa como una variable shell, utilizable para lectura. La información disponible depende del diálogo. Para co-managers de cuentas de usuario, se proporcionan las siguientes variables:
Se pasa el dominio virtual de correo. Para el dominio principal, esta variable se pone a /.
Esta el identificador que le dice si es una cuenta nueva (el nombre está vació) o no.
Esta es la id de usuario.
Una manera de aprender la información disponible para su script es mediante su ejecución en modo depurado bajo Linuxconf. Active este modo de la interfaz de usuario Linuxconf, en controlar archivo y sistema/gestión de módulo shell/configuración shellmod.