diff options
-rw-r--r-- | admin/Sources/Services/ogAdmAgent/sources/ogAdmAgent.cpp | 1822 | ||||
-rw-r--r-- | doc/CHANGELOG.es.txt | 5 | ||||
-rw-r--r-- | installer/vagrant/Vagrantfile-1.0.6b-vbox | 2 | ||||
-rw-r--r-- | installer/vagrant/Vagrantfile-devel-vbox | 2 | ||||
-rw-r--r-- | installer/vagrant/Vagrantfile-prod-vbox | 2 | ||||
-rwxr-xr-x | server/lib/security-config | 29 |
6 files changed, 933 insertions, 929 deletions
diff --git a/admin/Sources/Services/ogAdmAgent/sources/ogAdmAgent.cpp b/admin/Sources/Services/ogAdmAgent/sources/ogAdmAgent.cpp index cce297fe..07a6eef3 100644 --- a/admin/Sources/Services/ogAdmAgent/sources/ogAdmAgent.cpp +++ b/admin/Sources/Services/ogAdmAgent/sources/ogAdmAgent.cpp @@ -1,911 +1,911 @@ -// ********************************************************************************************************
-// Servicio: ogAdmAgent
-// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
-// Fecha Creación: Marzo-2010
-// Fecha Última modificación: Marzo-2010
-// Nombre del fichero: ogAdmAgent.cpp
-// Descripción: Este fichero implementa el servicio agente del sistema. Revisa a intervalos
-// regulares la base de datos para comprobar si existen acciones programadas.
-// ********************************************************************************************************
-#include "ogAdmAgent.h"
-#include "ogAdmLib.c"
-//________________________________________________________________________________________________________
-// Función: tomaConfiguracion
-//
-// Descripción:
-// Lee el fichero de configuración del servicio
-// Parámetros:
-// filecfg : Ruta completa al fichero de configuración
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//________________________________________________________________________________________________________
-BOOLEAN tomaConfiguracion(char* filecfg)
-{
- char modulo[] = "tomaConfiguracion()";
-
- if (filecfg == NULL || strlen(filecfg) == 0) {
- errorLog(modulo, 1, FALSE); // Fichero de configuración del servicio vacío
- return (FALSE);
- }
- FILE *fcfg;
- long lSize;
- char * buffer, *lineas[MAXPRM], *dualparametro[2];
- int i, numlin, resul;
-
- fcfg = fopen(filecfg, "rt");
- if (fcfg == NULL) {
- errorLog(modulo, 2, FALSE); // No existe fichero de configuración del servicio
- return (FALSE);
- }
-
- fseek(fcfg, 0, SEEK_END);
- lSize = ftell(fcfg); // Obtiene tamaño del fichero.
- rewind(fcfg);
- buffer = (char*) reservaMemoria(lSize + 1); // Toma memoria para el buffer de lectura.
- if (buffer == NULL) { // No hay memoria suficiente para el buffer
- errorLog(modulo, 3, FALSE);
- return (FALSE);
- }
- fread(buffer, 1, lSize, fcfg); // Lee contenido del fichero
- buffer[lSize] = (char) NULL;
- fclose(fcfg);
-
- servidoradm[0] = (char) NULL; //inicializar variables globales
- puerto[0] = (char) NULL;
- usuario[0] = (char) NULL;
- pasguor[0] = (char) NULL;
- datasource[0] = (char) NULL;
- catalog[0] = (char) NULL;
-
- numlin = splitCadena(lineas, buffer, '\n');
- for (i = 0; i < numlin; i++) {
- splitCadena(dualparametro, lineas[i], '=');
- resul = strcmp(StrToUpper(dualparametro[0]), "SERVIDORADM");
- if (resul == 0)
- strcpy(servidoradm, dualparametro[1]);
- resul = strcmp(StrToUpper(dualparametro[0]), "PUERTO");
- if (resul == 0)
- strcpy(puerto, dualparametro[1]);
- resul = strcmp(StrToUpper(dualparametro[0]), "USUARIO");
- if (resul == 0)
- strcpy(usuario, dualparametro[1]);
- resul = strcmp(StrToUpper(dualparametro[0]), "PASSWORD");
- if (resul == 0)
- strcpy(pasguor, dualparametro[1]);
- resul = strcmp(StrToUpper(dualparametro[0]), "DATASOURCE");
- if (resul == 0)
- strcpy(datasource, dualparametro[1]);
- resul = strcmp(StrToUpper(dualparametro[0]), "CATALOG");
- if (resul == 0)
- strcpy(catalog, dualparametro[1]);
- }
- if (servidoradm[0] == (char) NULL) {
- errorLog(modulo, 4, FALSE); // Falta parámetro SERVIDORADM
- return (FALSE);
- }
- if (puerto[0] == (char) NULL) {
- errorLog(modulo, 5, FALSE); // Falta parámetro PUERTO
- return (FALSE);
- }
- if (usuario[0] == (char) NULL) {
- errorLog(modulo, 6, FALSE); // Falta parámetro USUARIO
- return (FALSE);
- }
- if (pasguor[0] == (char) NULL) {
- errorLog(modulo, 7, FALSE); // Falta parámetro PASSWORD
- return (FALSE);
- }
- if (datasource[0] == (char) NULL) {
- errorLog(modulo, 8, FALSE); // Falta parámetro DATASOURCE
- return (FALSE);
- }
- if (catalog[0] == (char) NULL) {
- errorLog(modulo, 9, FALSE); // Falta parámetro CATALOG
- return (FALSE);
- }
- return (TRUE);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: diadelaSemana
-//
-// Descripción:
-// Calcula el número del día de la semana que corresponde a una fecha
-// Parámetros:
-// - dia: Un día
-// - mes: Un mes
-// - anno: Un año
-// Devuelve:
-// El número del día de la semana: 1=Lunes, 2=martes ... 6=sábado 7=domingo
-// ________________________________________________________________________________________________________
-
-int diadelaSemana(WORD dia,WORD mes,WORD anno)
-{
- int i,cont,dias_anuales;
- int desplazamiento_dias=6;
- int orddiasem;
-
- cont =0;
- for (i=1900;i<anno;i++){
- if (bisiesto(i)) dias_anuales=366; else dias_anuales=365;
- cont+=dias_anuales;
- }
- for (i=1;i<mes;i++){
- if (i!=2)
- cont+=dias_meses[i];
- else{
- if (bisiesto(anno))
- cont+=29;
- else
- cont+=28;
- }
- }
- cont+=dia+desplazamiento_dias;
- orddiasem=(cont%7);
- if(orddiasem==0) orddiasem=7;
- return(orddiasem);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: bisiesto
-//
-// Descripción:
-// Calcula si un año es bisiesto o no lo es
-// Parámetros:
-// - anno: Un año
-// Devuelve:
-// TRUE si el año es bisiesto
-// FALSE si no es bisiesto
-// ________________________________________________________________________________________________________
-
-BOOLEAN bisiesto(WORD anno){
- return(anno%4==0);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: semanadelMes
-//
-// Descripción:
-// Calcula el número de semana perteneciente a un día del mes
-// Parámetros:
-// - ordiasem_1: Orden semanal (1,2...) del primer dia del mes que se pasa como parámetro
-// - diames: El mes concreto
-// Devuelve:
-// El número del día de la semana: 1=Lunes, 2=martes ... 6=sábado 7=domingo , de ese mes
-// ________________________________________________________________________________________________________
-
-int semanadelMes(int ordiasem_1,int diames)
-{
- int nwdia,resto,cociente;
-
- nwdia=diames+ordiasem_1-1;
- cociente=nwdia/7;
- resto=nwdia%7;
- if(resto>0) cociente++;
- return(cociente);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: buscaAccion
-//
-// Descripción:
-// Busca en la base de datos, acciones programadas
-// Parámetros:
-// - db: Objeto base de datos (operativo)
-// - dia : Día actual del mes
-// - mes : mes en curso
-// - anno : Año en curso
-// - hora : Hora actual
-// - minutos : Minutos actuales
-// - diasemana : Dia de la semana 1=lunes,2=martes ... ( 0 Domingo)
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-
-BOOLEAN buscaAccion(Database db,WORD dia,WORD mes,WORD anno,WORD hora,WORD minutos,WORD diasemana)
-{
- char msglog[LONSTD], sqlstr[LONSQL];
- Table tbl;
- BYTE swampm,bitsemana;
- int ordsem,ordulsem,ordiasem_1,maxdias;
- int sesionprog;
- char modulo[] = "buscaAccion()";
-
- /* Año de comienzo */
- anno=anno-ANNOREF; //
- /* Preparación hora */
- if(hora>11){
- hora-=12;
- swampm=1; // Es P.M.
- }
- else
- swampm=0; // Es am
- /* Preparación semana */
- if(diasemana==0) diasemana=7; // El domingo
-
- // Cuestión semanas
- ordiasem_1=diadelaSemana(1,mes,anno+2009);
- ordsem=semanadelMes(ordiasem_1,dia); // Calcula el número de la semana
- if (mes!=2) // Toma el último día de ese mes
- maxdias=dias_meses[mes];
- else{
- if (bisiesto(anno+ANNOREF))
- maxdias=29;
- else
- maxdias=28;
- }
- ordulsem=semanadelMes(ordiasem_1,maxdias); // Calcula el número de la última semana
- bitsemana=HEX_semanas[ordsem];
- if(ordsem==ordulsem) // Si es la última semana del mes
- bitsemana|=HEX_semanas[6];
-
- sprintf(sqlstr,"SELECT DISTINCT idprogramacion,tipoaccion,identificador,sesion,idcentro,"\
- "tareas.descripcion as descritarea"\
- " FROM programaciones"\
- " LEFT OUTER JOIN tareas ON tareas.idtarea=programaciones.identificador"\
- " WHERE suspendida=0 "\
- " AND (annos & %d <> 0) "\
- " AND (meses & %d<>0) "\
- " AND ((diario & %d<>0) OR (dias & %d<>0) OR (semanas & %d<>0))"\
- " AND (horas & %d<>0) AND ampm=%d AND minutos=%d",\
- HEX_annos[anno],\
- HEX_meses[mes],\
- HEX_dias[dia],\
- HEX_diasemana[diasemana],\
- bitsemana,\
- HEX_horas[hora],\
- swampm,minutos);
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(tbl.ISEOF()){
- return(TRUE); // No hay acciones programadas
- }
-
- while(!tbl.ISEOF()){
- if(!tbl.Get("idprogramacion",idprogramacion)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("tipoaccion",tipoaccion)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("identificador",idtipoaccion)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("sesion",sesionprog)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("idcentro",idcentro)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
-
- if(tipoaccion==EJECUCION_COMANDO){ // Es una programación de un comando
- return(ejecutarComando(db,idprogramacion,sesionprog));
- }
- else{
-
- if(tipoaccion==EJECUCION_TAREA){
- if(!tbl.Get("descritarea",descriaccion)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- return(ejecutarTarea(db,idprogramacion,idtipoaccion));
- }
- else{
- if(tipoaccion==EJECUCION_RESERVA){
- EjecutarReserva(idtipoaccion,db); // Es una programación de un trabajo
- }
- }
- }
- tbl.MoveNext();
- }
- return(TRUE);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: ejecutarComando
-//
-// Descripción:
-// Ejecuta un comando programado
-// Parámetros:
-// - db: Objeto base de datos (operativo)
-// - idcomando: Identificador del comando
-// - sesion: Sesión correspondiente al comando cuando se grabó en la tabla acciones
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-
-BOOLEAN ejecutarComando(Database db,int idprogramacion,int sesion )
-{
- struct tm* st;
- char msglog[LONSTD], sqlstr[LONSQL];
- char fechahorareg[24];
- char modulo[] = "ejecutarComando()";
-
- st = tomaHora();
- sprintf(fechahorareg,"%d/%d/%d %d:%d:%d", st->tm_year + 1900, st->tm_mon + 1,
- st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec);
-
- sprintf(sqlstr,"UPDATE acciones SET estado=%d,idprogramacion=%d,fechahorareg='%s'"\
- " WHERE sesion=%d", ACCION_INICIADA,idprogramacion,fechahorareg,sesion);
-
- if (!db.Execute(sqlstr)) { // Error al recuperar los datos
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- return(enviaPeticion(idprogramacion));
-}
-// ________________________________________________________________________________________________________
-//
-// Función: ejecutarProcedimiento
-//
-// Descripción:
-// Ejecuta un procedimiento programado
-// Parámetros:
-// - db: Objeto base de datos (operativo)
-// - idprocedimiento: Identificador del procedimiento
-// - ambito: Ámbito de aplicación
-// - idambito: Identificador del ámbito
-// - restrambito: cadena con los identificadores de los ordenadores a los que se aplica la acción
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-
-BOOLEAN ejecutarProcedimiento(Database db,int idprocedimiento,int ambito,int idambito,char* restrambito)
-{
- char msglog[LONSTD], sqlstr[LONSQL],*parametros;
- Table tbl;
- int procedimientoid,idcomando,lonprm;
- char modulo[] = "ejecutarProcedimiento()";
-
- sprintf(sqlstr,"SELECT idcomando,procedimientoid,parametros,length(parametros) as lonprm"\
- " FROM procedimientos_acciones"\
- " WHERE idprocedimiento=%d ORDER BY orden",idprocedimiento);
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
-
- if(tbl.ISEOF()){
- return(TRUE); // No exustde tarea
- }
- while(!tbl.ISEOF()){
- if(!tbl.Get("procedimientoid",procedimientoid)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(procedimientoid>0){ // Procedimiento recursivo
- if(!ejecutarProcedimiento(db,procedimientoid,ambito,idambito,restrambito)){
- return(false);
- }
- }
- else{
- if(!tbl.Get("lonprm",lonprm)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- parametros = reservaMemoria(lonprm+1); // Reserva para almacenar los parametros del procedimiento
- if (parametros == NULL) {
- errorLog(modulo, 3, FALSE);
- return (FALSE);
- }
- if(!tbl.Get("parametros",parametros)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- liberaMemoria(parametros);
- return (FALSE);
- }
- liberaMemoria(parametros);
- if(!tbl.Get("idcomando",idcomando)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
-
- if(!insertaComando(db,idcomando,parametros,idprocedimiento,ambito,idambito,restrambito))
- return(false);
- }
- tbl.MoveNext();
- }
- return(TRUE);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: ejecutarTarea
-//
-// Descripción:
-// Ejecuta una tarea programada
-// Parámetros:
-// - db: Objeto base de datos (operativo)
-// - idtarea: Identificador de la tarea
-// - idprogramacion: Identificador de la programación
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-
-BOOLEAN ejecutarTarea(Database db, int idprogramacion, int idtarea)
-{
- char msglog[LONSTD], sqlstr[LONSQL];
- Table tbl;
- int tareaid,ambito,idambito,idprocedimiento,lonrestrambito;
- char* restrambito;
- char modulo[] = "ejecutarTarea()";
-
- sprintf(sqlstr,"SELECT tareas_acciones.orden,tareas_acciones.idprocedimiento,tareas_acciones.tareaid,"\
- " tareas.ambito,tareas.idambito,tareas.restrambito,length(tareas.restrambito) as lonrestrambito"\
- " FROM tareas"\
- " INNER JOIN tareas_acciones ON tareas_acciones.idtarea=tareas.idtarea"\
- " WHERE tareas_acciones.idtarea=%d ORDER BY tareas_acciones.orden",idtarea);
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
-
- if(tbl.ISEOF()){
- return(TRUE); // No existe tarea
- }
-
- while(!tbl.ISEOF()){
- if(!tbl.Get("tareaid",tareaid)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(tareaid>0){ // Tarea recursiva
- if(!ejecutarTarea(db,idprogramacion,tareaid)){
- return(false);
- }
- }
- else{
- if(!tbl.Get("ambito",ambito)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("idambito",idambito)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("lonrestrambito",lonrestrambito)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- restrambito = reservaMemoria(lonrestrambito+1);
- if (restrambito == NULL) {
- errorLog(modulo, 3, FALSE);
- return (FALSE);
- }
- if(!tbl.Get("restrambito",restrambito)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- liberaMemoria(restrambito);
- return (FALSE);
- }
- liberaMemoria(restrambito);
- RecopilaIpesMacs(db,ambito,idambito,restrambito); // Recopila Ipes del ámbito
- if(!tbl.Get("idprocedimiento",idprocedimiento)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sesion=time(NULL);
-
- if(!ejecutarProcedimiento(db,idprocedimiento,ambito,idambito,restrambito))
- return(FALSE);
- }
- tbl.MoveNext();
- }
- return(enviaPeticion(idprogramacion));
-}
-// ________________________________________________________________________________________________________
-//
-// Función: ejecutarTarea
-//
-// Descripción:
-// Registra un procedimiento para un ambito concreto
-// Parámetros:
-// - db: Objeto base de datos (operativo)
-// - idcomando: Identificador del comando
-// - idprocedimiento: Identificador del procedimiento
-// - ambito: Ámbito de aplicación
-// - idambito: Identificador del ámbito
-// - restrambito: cadena con los identificadores de los ordenadores a los que se aplica la acción
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//________________________________________________________________________________________________________
-BOOLEAN insertaComando(Database db,int idcomando,char*parametros,int idprocedimiento,int ambito,int idambito,char*restrambito)
-{
- char msglog[LONSTD], sqlstr[LONSQL];
- struct tm* st;
- char *auxID[MAXIMOS_CLIENTES],*auxIP[MAXIMOS_CLIENTES];
- char fechahorareg[24];
- int i;
- char modulo[] = "insertaComando()";
-
- if(concli==0) return(TRUE); // No hay ordenadores en el ámbito
-
- st = tomaHora();
- sprintf(fechahorareg,"%d/%d/%d %d:%d:%d", st->tm_year + 1900, st->tm_mon + 1, st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec);
-
- splitCadena(auxID,cadenaid,',');
- splitCadena(auxIP,cadenaip,';');
-
- for (i=0;i<concli;i++){
- sprintf(sqlstr,"INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,"\
- "sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,"\
- "restrambito,idprocedimiento,idcentro,idprogramacion)"\
- " VALUES (%s,%d,%d,'%s','%s',%d,%d,'%s','%s',%d,%d,%d,%d,'%s',%d,%d,%d)",\
- auxID[i],tipoaccion,idtipoaccion,descriaccion,auxIP[i],sesion,idcomando,parametros,fechahorareg,\
- ACCION_INICIADA,ACCION_SINRESULTADO,ambito,idambito,restrambito,idprocedimiento,idcentro,idprogramacion);
- if (!db.Execute(sqlstr)) { // Error al recuperar los datos
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- }
- return(TRUE);
-}
-// _____________________________________________________________________________________________________________
-// Función: EjecutarReserva
-//
-// Descripción:
-// Registra una acción (Tarea) y la envía para su ejecución
-// Parámetros:
-// - idreserva : Identificador de la reserva
-// - db: una conexion ADO operativa
-// - parametros: Parámetros de la acción
-// _____________________________________________________________________________________________________________
-BOOLEAN EjecutarReserva(int idreserva,Database db )
-{
-
-
- return(true);
-}
-// _____________________________________________________________________________________________________________
-// Función: enviaPeticion
-//
-// Descripción:
-// Hace una petición al servidor para que actualice los ordenadores implicados en la programación
-// Parámetros:
-// - idprogramacion: Identificador de la programación
-// _____________________________________________________________________________________________________________
-BOOLEAN enviaPeticion(int idprogramacion)
-{
- int lon;
- TRAMA *ptrTrama;
- SOCKET socket_c;
- char modulo[] = "enviaPeticion()";
-
- /* Envio de comandos a clientes */
- ptrTrama=(TRAMA *)reservaMemoria(sizeof(TRAMA));
- if (ptrTrama == NULL) { // No hay memoria suficiente para el bufer de las tramas
- errorLog(modulo, 3, FALSE);
- return(FALSE);
- }
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=envioProgramacion\r"); // Nombre de la función a ejecutar en el servidor
- lon+=sprintf(ptrTrama->parametros+lon,"idp=%d\r",idprogramacion); // Configuración de los Sistemas Operativos del cliente
-
- if(!enviaMensaje(&socket_c,ptrTrama,MSG_PETICION)){
- errorLog(modulo,91,FALSE);
- liberaMemoria(ptrTrama);
- return(FALSE);
- }
- liberaMemoria(ptrTrama);
- return(TRUE);
-}
-// _____________________________________________________________________________________________________________
-//
-// Función: RecopilaIpesMacs
-//
-// Descripción :
-// Recopila las IPes, las Macs y los identificadores de ordenadores de un ámbito determinado
-//
-// Especificaciones:
-// Esta Función recibe tres parámatros:
-// db : Un objeto Base de datos totalmente operativo
-// ambito: Tipo de ámbito
-// idambito: Identificador del ámbito
-// Devuelve:
-// Todas los identificadores de ordenadores , las ipes y las macs de los ordenadores que componen el ámbito
-// Para ellos habrá que tener declarada tres variables globales :
-// cadenaid,cadenaip y cadenamac
-// _____________________________________________________________________________________________________________
-
-BOOLEAN RecopilaIpesMacs(Database db,int ambito,int idambito,char *restrambito)
-{
- char sqlstr[LONSQL];
-
- concli=0;
- /* Reserva memoria al meno para caracter nulo */
- cadenaid=(char*) reservaMemoria(1);
- cadenaip=(char*) reservaMemoria(1);
- cadenamac=(char*) reservaMemoria(1);
-
- switch(ambito){
- case AMBITO_CENTROS :
- sprintf(sqlstr,"SELECT idcentro FROM centros WHERE idcentro=%d",idambito);
- RecorreCentro(db,sqlstr);
- break;
- case AMBITO_GRUPOSAULAS :
- sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE idgrupo=%d AND tipo=%d",idambito,AMBITO_GRUPOSAULAS);
- RecorreGruposAulas(db,sqlstr);
- break;
- case AMBITO_AULAS :
- sprintf(sqlstr,"SELECT idaula FROM aulas WHERE idaula=%d",idambito);
- RecorreAulas(db,sqlstr);
- break;
- case AMBITO_GRUPOSORDENADORES :
- sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE idgrupo=%d",idambito);
- RecorreGruposOrdenadores(db,sqlstr);
- break;
- case AMBITO_ORDENADORES :
- sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idordenador=%d",idambito);
- RecorreOrdenadores(db,sqlstr);
- break;
- default: // Se trata de un conjunto aleatorio de ordenadores
- sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idordenador IN (%s)",restrambito);
- RecorreOrdenadores(db,sqlstr);
-
- }
- return (TRUE);
-}
-//________________________________________________________________________________________________________
-
-BOOLEAN RecorreCentro(Database db, char* sqlstr)
-{
- char msglog[LONSTD];
- Table tbl;
- int idcentro;
- char modulo[] = "RecorreCentro()";
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.ISEOF()){
- if(!tbl.Get("idcentro",idcentro)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE idcentro=%d AND grupoid=0 AND tipo=%d",idcentro,AMBITO_GRUPOSAULAS);
- RecorreGruposAulas(db,sqlstr);
- sprintf(sqlstr,"SELECT idaula FROM aulas WHERE idcentro=%d AND grupoid=0",idcentro);
- RecorreAulas(db,sqlstr);
- }
- return (TRUE);
-}
-//________________________________________________________________________________________________________
-
-BOOLEAN RecorreGruposAulas(Database db, char* sqlstr)
-{
- char msglog[LONSTD];
- Table tbl;
- int idgrupo;
- char modulo[] = "RecorreGruposAulas()";
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- while(!tbl.ISEOF()){
- if(!tbl.Get("idgrupo",idgrupo)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE grupoid=%d AND tipo=%d",idgrupo,AMBITO_GRUPOSAULAS);
- RecorreGruposAulas(db,sqlstr);
- sprintf(sqlstr,"SELECT idaula FROM aulas WHERE grupoid=%d",idgrupo);
- RecorreAulas(db,sqlstr);
- tbl.MoveNext();
- }
- return (TRUE);
-}
-//________________________________________________________________________________________________________
-
-BOOLEAN RecorreAulas(Database db, char* sqlstr)
-{
- char msglog[LONSTD];
- Table tbl;
- int idaula;
- char modulo[] = "RecorreAulas()";
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- while(!tbl.ISEOF()){
- if(!tbl.Get("idaula",idaula)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE idaula=%d AND grupoid=0",idaula);
- RecorreGruposOrdenadores(db,sqlstr);
- sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idaula=%d AND grupoid=0",idaula);
- RecorreOrdenadores(db,sqlstr);
- tbl.MoveNext();
- }
- return (TRUE);
-}
-//________________________________________________________________________________________________________
-
-BOOLEAN RecorreGruposOrdenadores(Database db, char* sqlstr)
-{
- char msglog[LONSTD];
- Table tbl;
- int idgrupo;
- char modulo[] = "RecorreGruposOrdenadores()";
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- while(!tbl.ISEOF()){
- if(!tbl.Get("idgrupo",idgrupo)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE grupoid=%d",idgrupo);
- RecorreGruposOrdenadores(db,sqlstr);
- sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE grupoid=%d",idgrupo);
- RecorreOrdenadores(db,sqlstr);
- tbl.MoveNext();
- }
- return (TRUE);
-}
-//________________________________________________________________________________________________________
-
-BOOLEAN RecorreOrdenadores(Database db, char* sqlstr)
-{
- char msglog[LONSTD];
- Table tbl;
- int idordenador,o,p,m,lon;
- char ido[16],ip[LONIP],mac[LONMAC];
- char modulo[] = "RecorreOrdenadores()";
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- o=p=m=0;
- while(!tbl.ISEOF()){
- if(!tbl.Get("idordenador",idordenador)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("ip",ip)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("mac",mac)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sprintf(ido,"%d",idordenador);
- lon=strlen(ido);
- if(lon>16) lon=16;
- cadenaid=(char*) ampliaMemoria(cadenaid,o+lon+1);
- memcpy(&cadenaid[o],ido,lon);
- o+=lon;
- cadenaid[o++]=',';
-
- lon=strlen(ip);
- if(lon>16) lon=LONIP;
- cadenaip=(char*) ampliaMemoria(cadenaip,p+lon+1);
- memcpy(&cadenaip[p],ip,lon);
- p+=lon;
- cadenaip[p++]=';';
-
- lon=strlen(mac);
- if(lon>16) lon=LONMAC;
- cadenamac=(char*) ampliaMemoria(cadenamac,m+lon+1);
- memcpy(&cadenamac[m],mac,lon);
- m+=lon;
- cadenamac[m++]=';';
-
- concli++;
- tbl.MoveNext();
- }
- if(o>0) o--;
- if(p>0) p--;
- if(m>0) m--;
- cadenaid[o]='\0';
- cadenaip[p]='\0';
- cadenamac[m]='\0';
-
- return (TRUE);
-}
-// ********************************************************************************************************
-// PROGRAMA PRINCIPAL (SERVICIO)
-// ********************************************************************************************************
-int main(int argc, char *argv[])
-{
- int pseg;
- char msglog[LONSTD];
- struct tm* st;
- Database db;
- char modulo[] = "main()";
-
- /* Validación de parámetros de ejecución y lectura del fichero de configuración del servicio */
-
- if (!validacionParametros(argc, argv, 5)) // Valida parámetros de ejecución
- exit(EXIT_FAILURE);
-
- if (!tomaConfiguracion(szPathFileCfg)) { // Toma parametros de configuracion
- exit(EXIT_FAILURE);
- }
-
- /* Bucle principal del servicio */
-
- while (TRUE){
- st = tomaHora();
- pseg=65-st->tm_sec; // Calcula segundos de inactividad de la hebra
- sleep(pseg);
-
- // Toma la hora
- st = tomaHora();
-
- if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion
- errorLog(modulo, 20, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- exit(EXIT_FAILURE);
- }
- buscaAccion(db,st->tm_mday,st->tm_mon+1,st->tm_year+1900,st->tm_hour,st->tm_min,st->tm_wday );
- db.Close(); // Cierra conexión
- }
- exit(EXIT_SUCCESS);
-}
-
-
+// ******************************************************************************************************** +// Servicio: ogAdmAgent +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: Marzo-2010 +// Fecha Última modificación: Marzo-2010 +// Nombre del fichero: ogAdmAgent.cpp +// Descripción: Este fichero implementa el servicio agente del sistema. Revisa a intervalos +// regulares la base de datos para comprobar si existen acciones programadas. +// ******************************************************************************************************** +#include "ogAdmAgent.h" +#include "ogAdmLib.c" +//________________________________________________________________________________________________________ +// Función: tomaConfiguracion +// +// Descripción: +// Lee el fichero de configuración del servicio +// Parámetros: +// filecfg : Ruta completa al fichero de configuración +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +//________________________________________________________________________________________________________ +BOOLEAN tomaConfiguracion(char* filecfg) +{ + char modulo[] = "tomaConfiguracion()"; + + if (filecfg == NULL || strlen(filecfg) == 0) { + errorLog(modulo, 1, FALSE); // Fichero de configuración del servicio vacío + return (FALSE); + } + FILE *fcfg; + long lSize; + char * buffer, *lineas[MAXPRM], *dualparametro[2]; + int i, numlin, resul; + + fcfg = fopen(filecfg, "rt"); + if (fcfg == NULL) { + errorLog(modulo, 2, FALSE); // No existe fichero de configuración del servicio + return (FALSE); + } + + fseek(fcfg, 0, SEEK_END); + lSize = ftell(fcfg); // Obtiene tamaño del fichero. + rewind(fcfg); + buffer = (char*) reservaMemoria(lSize + 1); // Toma memoria para el buffer de lectura. + if (buffer == NULL) { // No hay memoria suficiente para el buffer + errorLog(modulo, 3, FALSE); + return (FALSE); + } + fread(buffer, 1, lSize, fcfg); // Lee contenido del fichero + buffer[lSize] = (char) NULL; + fclose(fcfg); + + servidoradm[0] = (char) NULL; //inicializar variables globales + puerto[0] = (char) NULL; + usuario[0] = (char) NULL; + pasguor[0] = (char) NULL; + datasource[0] = (char) NULL; + catalog[0] = (char) NULL; + + numlin = splitCadena(lineas, buffer, '\n'); + for (i = 0; i < numlin; i++) { + splitCadena(dualparametro, lineas[i], '='); + resul = strcmp(StrToUpper(dualparametro[0]), "SERVIDORADM"); + if (resul == 0) + strcpy(servidoradm, dualparametro[1]); + resul = strcmp(StrToUpper(dualparametro[0]), "PUERTO"); + if (resul == 0) + strcpy(puerto, dualparametro[1]); + resul = strcmp(StrToUpper(dualparametro[0]), "USUARIO"); + if (resul == 0) + strcpy(usuario, dualparametro[1]); + resul = strcmp(StrToUpper(dualparametro[0]), "PASSWORD"); + if (resul == 0) + strcpy(pasguor, dualparametro[1]); + resul = strcmp(StrToUpper(dualparametro[0]), "DATASOURCE"); + if (resul == 0) + strcpy(datasource, dualparametro[1]); + resul = strcmp(StrToUpper(dualparametro[0]), "CATALOG"); + if (resul == 0) + strcpy(catalog, dualparametro[1]); + } + if (servidoradm[0] == (char) NULL) { + errorLog(modulo, 4, FALSE); // Falta parámetro SERVIDORADM + return (FALSE); + } + if (puerto[0] == (char) NULL) { + errorLog(modulo, 5, FALSE); // Falta parámetro PUERTO + return (FALSE); + } + if (usuario[0] == (char) NULL) { + errorLog(modulo, 6, FALSE); // Falta parámetro USUARIO + return (FALSE); + } + if (pasguor[0] == (char) NULL) { + errorLog(modulo, 7, FALSE); // Falta parámetro PASSWORD + return (FALSE); + } + if (datasource[0] == (char) NULL) { + errorLog(modulo, 8, FALSE); // Falta parámetro DATASOURCE + return (FALSE); + } + if (catalog[0] == (char) NULL) { + errorLog(modulo, 9, FALSE); // Falta parámetro CATALOG + return (FALSE); + } + return (TRUE); +} +// ________________________________________________________________________________________________________ +// +// Función: diadelaSemana +// +// Descripción: +// Calcula el número del día de la semana que corresponde a una fecha +// Parámetros: +// - dia: Un día +// - mes: Un mes +// - anno: Un año +// Devuelve: +// El número del día de la semana: 1=Lunes, 2=martes ... 6=sábado 7=domingo +// ________________________________________________________________________________________________________ + +int diadelaSemana(WORD dia,WORD mes,WORD anno) +{ + int i,cont,dias_anuales; + int desplazamiento_dias=6; + int orddiasem; + + cont =0; + for (i=1900;i<anno;i++){ + if (bisiesto(i)) dias_anuales=366; else dias_anuales=365; + cont+=dias_anuales; + } + for (i=1;i<mes;i++){ + if (i!=2) + cont+=dias_meses[i]; + else{ + if (bisiesto(anno)) + cont+=29; + else + cont+=28; + } + } + cont+=dia+desplazamiento_dias; + orddiasem=(cont%7); + if(orddiasem==0) orddiasem=7; + return(orddiasem); +} +// ________________________________________________________________________________________________________ +// +// Función: bisiesto +// +// Descripción: +// Calcula si un año es bisiesto o no lo es +// Parámetros: +// - anno: Un año +// Devuelve: +// TRUE si el año es bisiesto +// FALSE si no es bisiesto +// ________________________________________________________________________________________________________ + +BOOLEAN bisiesto(WORD anno){ + return(anno%4==0); +} +// ________________________________________________________________________________________________________ +// +// Función: semanadelMes +// +// Descripción: +// Calcula el número de semana perteneciente a un día del mes +// Parámetros: +// - ordiasem_1: Orden semanal (1,2...) del primer dia del mes que se pasa como parámetro +// - diames: El mes concreto +// Devuelve: +// El número del día de la semana: 1=Lunes, 2=martes ... 6=sábado 7=domingo , de ese mes +// ________________________________________________________________________________________________________ + +int semanadelMes(int ordiasem_1,int diames) +{ + int nwdia,resto,cociente; + + nwdia=diames+ordiasem_1-1; + cociente=nwdia/7; + resto=nwdia%7; + if(resto>0) cociente++; + return(cociente); +} +// ________________________________________________________________________________________________________ +// +// Función: buscaAccion +// +// Descripción: +// Busca en la base de datos, acciones programadas +// Parámetros: +// - db: Objeto base de datos (operativo) +// - dia : Día actual del mes +// - mes : mes en curso +// - anno : Año en curso +// - hora : Hora actual +// - minutos : Minutos actuales +// - diasemana : Dia de la semana 1=lunes,2=martes ... ( 0 Domingo) +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +// ________________________________________________________________________________________________________ + +BOOLEAN buscaAccion(Database db,WORD dia,WORD mes,WORD anno,WORD hora,WORD minutos,WORD diasemana) +{ + char msglog[LONSTD], sqlstr[LONSQL]; + Table tbl; + BYTE swampm,bitsemana; + int ordsem,ordulsem,ordiasem_1,maxdias; + int sesionprog; + char modulo[] = "buscaAccion()"; + + /* Año de comienzo */ + anno=anno-ANNOREF; // + /* Preparación hora */ + if(hora>11){ + hora-=12; + swampm=1; // Es P.M. + } + else + swampm=0; // Es am + /* Preparación semana */ + if(diasemana==0) diasemana=7; // El domingo + + // Cuestión semanas + ordiasem_1=diadelaSemana(1,mes,anno+2009); + ordsem=semanadelMes(ordiasem_1,dia); // Calcula el número de la semana + if (mes!=2) // Toma el último día de ese mes + maxdias=dias_meses[mes]; + else{ + if (bisiesto(anno+ANNOREF)) + maxdias=29; + else + maxdias=28; + } + ordulsem=semanadelMes(ordiasem_1,maxdias); // Calcula el número de la última semana + bitsemana=HEX_semanas[ordsem]; + if(ordsem==ordulsem) // Si es la última semana del mes + bitsemana|=HEX_semanas[6]; + + sprintf(sqlstr,"SELECT DISTINCT idprogramacion,tipoaccion,identificador,sesion,idcentro,"\ + "tareas.descripcion as descritarea"\ + " FROM programaciones"\ + " LEFT OUTER JOIN tareas ON tareas.idtarea=programaciones.identificador"\ + " WHERE suspendida=0 "\ + " AND (annos & %d <> 0) "\ + " AND (meses & %d<>0) "\ + " AND ((diario & %d<>0) OR (dias & %d<>0) OR (semanas & %d<>0))"\ + " AND (horas & %d<>0) AND ampm=%d AND minutos=%d",\ + HEX_annos[anno],\ + HEX_meses[mes],\ + HEX_dias[dia],\ + HEX_diasemana[diasemana],\ + bitsemana,\ + HEX_horas[hora],\ + swampm,minutos); + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(tbl.ISEOF()){ + return(TRUE); // No hay acciones programadas + } + + while(!tbl.ISEOF()){ + if(!tbl.Get("idprogramacion",idprogramacion)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("tipoaccion",tipoaccion)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("identificador",idtipoaccion)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("sesion",sesionprog)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("idcentro",idcentro)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + + if(tipoaccion==EJECUCION_COMANDO){ // Es una programación de un comando + return(ejecutarComando(db,idprogramacion,sesionprog)); + } + else{ + + if(tipoaccion==EJECUCION_TAREA){ + if(!tbl.Get("descritarea",descriaccion)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + return(ejecutarTarea(db,idprogramacion,idtipoaccion)); + } + else{ + if(tipoaccion==EJECUCION_RESERVA){ + EjecutarReserva(idtipoaccion,db); // Es una programación de un trabajo + } + } + } + tbl.MoveNext(); + } + return(TRUE); +} +// ________________________________________________________________________________________________________ +// +// Función: ejecutarComando +// +// Descripción: +// Ejecuta un comando programado +// Parámetros: +// - db: Objeto base de datos (operativo) +// - idcomando: Identificador del comando +// - sesion: Sesión correspondiente al comando cuando se grabó en la tabla acciones +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +// ________________________________________________________________________________________________________ + +BOOLEAN ejecutarComando(Database db,int idprogramacion,int sesion ) +{ + struct tm* st; + char msglog[LONSTD], sqlstr[LONSQL]; + char fechahorareg[24]; + char modulo[] = "ejecutarComando()"; + + st = tomaHora(); + sprintf(fechahorareg,"%d/%d/%d %d:%d:%d", st->tm_year + 1900, st->tm_mon + 1, + st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec); + + sprintf(sqlstr,"UPDATE acciones SET estado=%d,idprogramacion=%d,fechahorareg='%s'"\ + " WHERE sesion=%d", ACCION_INICIADA,idprogramacion,fechahorareg,sesion); + + if (!db.Execute(sqlstr)) { // Error al recuperar los datos + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + return(enviaPeticion(idprogramacion)); +} +// ________________________________________________________________________________________________________ +// +// Función: ejecutarProcedimiento +// +// Descripción: +// Ejecuta un procedimiento programado +// Parámetros: +// - db: Objeto base de datos (operativo) +// - idprocedimiento: Identificador del procedimiento +// - ambito: Ámbito de aplicación +// - idambito: Identificador del ámbito +// - restrambito: cadena con los identificadores de los ordenadores a los que se aplica la acción +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +// ________________________________________________________________________________________________________ + +BOOLEAN ejecutarProcedimiento(Database db,int idprocedimiento,int ambito,int idambito,char* restrambito) +{ + char msglog[LONSTD], sqlstr[LONSQL],*parametros; + Table tbl; + int procedimientoid,idcomando,lonprm; + char modulo[] = "ejecutarProcedimiento()"; + + sprintf(sqlstr,"SELECT idcomando,procedimientoid,parametros,length(parametros) as lonprm"\ + " FROM procedimientos_acciones"\ + " WHERE idprocedimiento=%d ORDER BY orden",idprocedimiento); + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + + if(tbl.ISEOF()){ + return(TRUE); // No exustde tarea + } + while(!tbl.ISEOF()){ + if(!tbl.Get("procedimientoid",procedimientoid)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(procedimientoid>0){ // Procedimiento recursivo + if(!ejecutarProcedimiento(db,procedimientoid,ambito,idambito,restrambito)){ + return(false); + } + } + else{ + if(!tbl.Get("lonprm",lonprm)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + parametros = reservaMemoria(lonprm+1); // Reserva para almacenar los parametros del procedimiento + if (parametros == NULL) { + errorLog(modulo, 3, FALSE); + return (FALSE); + } + if(!tbl.Get("parametros",parametros)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + liberaMemoria(parametros); + return (FALSE); + } + liberaMemoria(parametros); + if(!tbl.Get("idcomando",idcomando)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + + if(!insertaComando(db,idcomando,parametros,idprocedimiento,ambito,idambito,restrambito)) + return(false); + } + tbl.MoveNext(); + } + return(TRUE); +} +// ________________________________________________________________________________________________________ +// +// Función: ejecutarTarea +// +// Descripción: +// Ejecuta una tarea programada +// Parámetros: +// - db: Objeto base de datos (operativo) +// - idtarea: Identificador de la tarea +// - idprogramacion: Identificador de la programación +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +// ________________________________________________________________________________________________________ + +BOOLEAN ejecutarTarea(Database db, int idprogramacion, int idtarea) +{ + char msglog[LONSTD], sqlstr[LONSQL]; + Table tbl; + int tareaid,ambito,idambito,idprocedimiento,lonrestrambito; + char* restrambito; + char modulo[] = "ejecutarTarea()"; + + sprintf(sqlstr,"SELECT tareas_acciones.orden,tareas_acciones.idprocedimiento,tareas_acciones.tareaid,"\ + " tareas.ambito,tareas.idambito,tareas.restrambito,length(tareas.restrambito) as lonrestrambito"\ + " FROM tareas"\ + " INNER JOIN tareas_acciones ON tareas_acciones.idtarea=tareas.idtarea"\ + " WHERE tareas_acciones.idtarea=%d ORDER BY tareas_acciones.orden",idtarea); + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + + if(tbl.ISEOF()){ + return(TRUE); // No existe tarea + } + + while(!tbl.ISEOF()){ + if(!tbl.Get("tareaid",tareaid)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(tareaid>0){ // Tarea recursiva + if(!ejecutarTarea(db,idprogramacion,tareaid)){ + return(false); + } + } + else{ + if(!tbl.Get("ambito",ambito)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("idambito",idambito)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("lonrestrambito",lonrestrambito)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + restrambito = reservaMemoria(lonrestrambito+1); + if (restrambito == NULL) { + errorLog(modulo, 3, FALSE); + return (FALSE); + } + if(!tbl.Get("restrambito",restrambito)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + liberaMemoria(restrambito); + return (FALSE); + } + liberaMemoria(restrambito); + RecopilaIpesMacs(db,ambito,idambito,restrambito); // Recopila Ipes del ámbito + if(!tbl.Get("idprocedimiento",idprocedimiento)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sesion=time(NULL); + + if(!ejecutarProcedimiento(db,idprocedimiento,ambito,idambito,restrambito)) + return(FALSE); + } + tbl.MoveNext(); + } + return(enviaPeticion(idprogramacion)); +} +// ________________________________________________________________________________________________________ +// +// Función: ejecutarTarea +// +// Descripción: +// Registra un procedimiento para un ambito concreto +// Parámetros: +// - db: Objeto base de datos (operativo) +// - idcomando: Identificador del comando +// - idprocedimiento: Identificador del procedimiento +// - ambito: Ámbito de aplicación +// - idambito: Identificador del ámbito +// - restrambito: cadena con los identificadores de los ordenadores a los que se aplica la acción +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +//________________________________________________________________________________________________________ +BOOLEAN insertaComando(Database db,int idcomando,char*parametros,int idprocedimiento,int ambito,int idambito,char*restrambito) +{ + char msglog[LONSTD], sqlstr[LONSQL]; + struct tm* st; + char *auxID[MAXIMOS_CLIENTES],*auxIP[MAXIMOS_CLIENTES]; + char fechahorareg[24]; + int i; + char modulo[] = "insertaComando()"; + + if(concli==0) return(TRUE); // No hay ordenadores en el ámbito + + st = tomaHora(); + sprintf(fechahorareg,"%d/%d/%d %d:%d:%d", st->tm_year + 1900, st->tm_mon + 1, st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec); + + splitCadena(auxID,cadenaid,','); + splitCadena(auxIP,cadenaip,';'); + + for (i=0;i<concli;i++){ + sprintf(sqlstr,"INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,"\ + "sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,"\ + "restrambito,idprocedimiento,idcentro,idprogramacion)"\ + " VALUES (%s,%d,%d,'%s','%s',%d,%d,'%s','%s',%d,%d,%d,%d,'%s',%d,%d,%d)",\ + auxID[i],tipoaccion,idtipoaccion,descriaccion,auxIP[i],sesion,idcomando,parametros,fechahorareg,\ + ACCION_INICIADA,ACCION_SINRESULTADO,ambito,idambito,restrambito,idprocedimiento,idcentro,idprogramacion); + if (!db.Execute(sqlstr)) { // Error al recuperar los datos + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + } + return(TRUE); +} +// _____________________________________________________________________________________________________________ +// Función: EjecutarReserva +// +// Descripción: +// Registra una acción (Tarea) y la envía para su ejecución +// Parámetros: +// - idreserva : Identificador de la reserva +// - db: una conexion ADO operativa +// - parametros: Parámetros de la acción +// _____________________________________________________________________________________________________________ +BOOLEAN EjecutarReserva(int idreserva,Database db ) +{ + + + return(true); +} +// _____________________________________________________________________________________________________________ +// Función: enviaPeticion +// +// Descripción: +// Hace una petición al servidor para que actualice los ordenadores implicados en la programación +// Parámetros: +// - idprogramacion: Identificador de la programación +// _____________________________________________________________________________________________________________ +BOOLEAN enviaPeticion(int idprogramacion) +{ + int lon; + TRAMA *ptrTrama; + SOCKET socket_c; + char modulo[] = "enviaPeticion()"; + + /* Envio de comandos a clientes */ + ptrTrama=(TRAMA *)reservaMemoria(sizeof(TRAMA)); + if (ptrTrama == NULL) { // No hay memoria suficiente para el bufer de las tramas + errorLog(modulo, 3, FALSE); + return(FALSE); + } + initParametros(ptrTrama,0); + lon=sprintf(ptrTrama->parametros,"nfn=envioProgramacion\r"); // Nombre de la función a ejecutar en el servidor + lon+=sprintf(ptrTrama->parametros+lon,"idp=%d\r",idprogramacion); // Configuración de los Sistemas Operativos del cliente + + if(!enviaMensaje(&socket_c,ptrTrama,MSG_PETICION)){ + errorLog(modulo,91,FALSE); + liberaMemoria(ptrTrama); + return(FALSE); + } + liberaMemoria(ptrTrama); + return(TRUE); +} +// _____________________________________________________________________________________________________________ +// +// Función: RecopilaIpesMacs +// +// Descripción : +// Recopila las IPes, las Macs y los identificadores de ordenadores de un ámbito determinado +// +// Especificaciones: +// Esta Función recibe tres parámatros: +// db : Un objeto Base de datos totalmente operativo +// ambito: Tipo de ámbito +// idambito: Identificador del ámbito +// Devuelve: +// Todas los identificadores de ordenadores , las ipes y las macs de los ordenadores que componen el ámbito +// Para ellos habrá que tener declarada tres variables globales : +// cadenaid,cadenaip y cadenamac +// _____________________________________________________________________________________________________________ + +BOOLEAN RecopilaIpesMacs(Database db,int ambito,int idambito,char *restrambito) +{ + char sqlstr[LONSQL]; + + concli=0; + /* Reserva memoria al meno para caracter nulo */ + cadenaid=(char*) reservaMemoria(1); + cadenaip=(char*) reservaMemoria(1); + cadenamac=(char*) reservaMemoria(1); + + switch(ambito){ + case AMBITO_CENTROS : + sprintf(sqlstr,"SELECT idcentro FROM centros WHERE idcentro=%d",idambito); + RecorreCentro(db,sqlstr); + break; + case AMBITO_GRUPOSAULAS : + sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE idgrupo=%d AND tipo=%d",idambito,AMBITO_GRUPOSAULAS); + RecorreGruposAulas(db,sqlstr); + break; + case AMBITO_AULAS : + sprintf(sqlstr,"SELECT idaula FROM aulas WHERE idaula=%d",idambito); + RecorreAulas(db,sqlstr); + break; + case AMBITO_GRUPOSORDENADORES : + sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE idgrupo=%d",idambito); + RecorreGruposOrdenadores(db,sqlstr); + break; + case AMBITO_ORDENADORES : + sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idordenador=%d",idambito); + RecorreOrdenadores(db,sqlstr); + break; + default: // Se trata de un conjunto aleatorio de ordenadores + sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idordenador IN (%s)",restrambito); + RecorreOrdenadores(db,sqlstr); + + } + return (TRUE); +} +//________________________________________________________________________________________________________ + +BOOLEAN RecorreCentro(Database db, char* sqlstr) +{ + char msglog[LONSTD]; + Table tbl; + int idcentro; + char modulo[] = "RecorreCentro()"; + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.ISEOF()){ + if(!tbl.Get("idcentro",idcentro)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE idcentro=%d AND grupoid=0 AND tipo=%d",idcentro,AMBITO_GRUPOSAULAS); + RecorreGruposAulas(db,sqlstr); + sprintf(sqlstr,"SELECT idaula FROM aulas WHERE idcentro=%d AND grupoid=0",idcentro); + RecorreAulas(db,sqlstr); + } + return (TRUE); +} +//________________________________________________________________________________________________________ + +BOOLEAN RecorreGruposAulas(Database db, char* sqlstr) +{ + char msglog[LONSTD]; + Table tbl; + int idgrupo; + char modulo[] = "RecorreGruposAulas()"; + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + while(!tbl.ISEOF()){ + if(!tbl.Get("idgrupo",idgrupo)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE grupoid=%d AND tipo=%d",idgrupo,AMBITO_GRUPOSAULAS); + RecorreGruposAulas(db,sqlstr); + sprintf(sqlstr,"SELECT idaula FROM aulas WHERE grupoid=%d",idgrupo); + RecorreAulas(db,sqlstr); + tbl.MoveNext(); + } + return (TRUE); +} +//________________________________________________________________________________________________________ + +BOOLEAN RecorreAulas(Database db, char* sqlstr) +{ + char msglog[LONSTD]; + Table tbl; + int idaula; + char modulo[] = "RecorreAulas()"; + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + while(!tbl.ISEOF()){ + if(!tbl.Get("idaula",idaula)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE idaula=%d AND grupoid=0",idaula); + RecorreGruposOrdenadores(db,sqlstr); + sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idaula=%d AND grupoid=0",idaula); + RecorreOrdenadores(db,sqlstr); + tbl.MoveNext(); + } + return (TRUE); +} +//________________________________________________________________________________________________________ + +BOOLEAN RecorreGruposOrdenadores(Database db, char* sqlstr) +{ + char msglog[LONSTD]; + Table tbl; + int idgrupo; + char modulo[] = "RecorreGruposOrdenadores()"; + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + while(!tbl.ISEOF()){ + if(!tbl.Get("idgrupo",idgrupo)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE grupoid=%d",idgrupo); + RecorreGruposOrdenadores(db,sqlstr); + sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE grupoid=%d",idgrupo); + RecorreOrdenadores(db,sqlstr); + tbl.MoveNext(); + } + return (TRUE); +} +//________________________________________________________________________________________________________ + +BOOLEAN RecorreOrdenadores(Database db, char* sqlstr) +{ + char msglog[LONSTD]; + Table tbl; + int idordenador,o,p,m,lon; + char ido[16],ip[LONIP],mac[LONMAC]; + char modulo[] = "RecorreOrdenadores()"; + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + o=p=m=0; + while(!tbl.ISEOF()){ + if(!tbl.Get("idordenador",idordenador)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("ip",ip)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("mac",mac)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sprintf(ido,"%d",idordenador); + lon=strlen(ido); + if(lon>16) lon=16; + cadenaid=(char*) ampliaMemoria(cadenaid,o+lon+1); + memcpy(&cadenaid[o],ido,lon); + o+=lon; + cadenaid[o++]=','; + + lon=strlen(ip); + if(lon>16) lon=LONIP; + cadenaip=(char*) ampliaMemoria(cadenaip,p+lon+1); + memcpy(&cadenaip[p],ip,lon); + p+=lon; + cadenaip[p++]=';'; + + lon=strlen(mac); + if(lon>16) lon=LONMAC; + cadenamac=(char*) ampliaMemoria(cadenamac,m+lon+1); + memcpy(&cadenamac[m],mac,lon); + m+=lon; + cadenamac[m++]=';'; + + concli++; + tbl.MoveNext(); + } + if(o>0) o--; + if(p>0) p--; + if(m>0) m--; + cadenaid[o]='\0'; + cadenaip[p]='\0'; + cadenamac[m]='\0'; + + return (TRUE); +} +// ******************************************************************************************************** +// PROGRAMA PRINCIPAL (SERVICIO) +// ******************************************************************************************************** +int main(int argc, char *argv[]) +{ + int pseg; + char msglog[LONSTD]; + struct tm* st; + Database db; + char modulo[] = "main()"; + + /* Validación de parámetros de ejecución y lectura del fichero de configuración del servicio */ + + if (!validacionParametros(argc, argv, 5)) // Valida parámetros de ejecución + exit(EXIT_FAILURE); + + if (!tomaConfiguracion(szPathFileCfg)) { // Toma parametros de configuracion + exit(EXIT_FAILURE); + } + + /* Bucle principal del servicio */ + + while (TRUE){ + st = tomaHora(); + pseg=65-st->tm_sec; // Calcula segundos de inactividad de la hebra + sleep(pseg); + + // Toma la hora + st = tomaHora(); + + if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion + errorLog(modulo, 20, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + exit(EXIT_FAILURE); + } + buscaAccion(db,st->tm_mday,st->tm_mon+1,st->tm_year+1900,st->tm_hour,st->tm_min,st->tm_wday ); + db.Close(); // Cierra conexión + } + exit(EXIT_SUCCESS); +} + + diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt index 22c9edac..f8cd9eda 100644 --- a/doc/CHANGELOG.es.txt +++ b/doc/CHANGELOG.es.txt @@ -17,7 +17,7 @@ Tickets resueltos en módulo OpenGnsys Client: Tickets resueltos en módulo OpenGnsys Server: #846 Configuración de logrotate para que incluya todos los servicios de OpenGnsys (corrección) #859 Gestor de los ficheros PXE duplicado -#886 Actualización de la 1.0.6b a la 1.1.0 da errores a la hora de agregar ordenadores/aulas (no válido) +#904 ogAdmClient se cuelga al programar una tarea para un equipo Tickets resueltos en módulo OpenGnsys Repository Server: #850 Problema con repositorio recién instalado (corrección) @@ -32,7 +32,8 @@ Tickets resueltos en módulo OpenGnsys Web Admin Console: Tickets resueltos en módulo OpenGnsys Installer: #876 Problemas al actualizar desde Subversion a Git (corrección) #879 Función checkVersion de opengnsys_update.sh del tar.gz da error si se ejecuta sobre la misma versión de OpenGnsys (corrección) -#880 openGnsys_update.sh no deja la revisión, solo deja 1.1.0a (corrección +#880 openGnsys_update.sh no deja la revisión, solo deja 1.1.0a (corrección) +#886 Actualización de la 1.0.6b a la 1.1.0 da errores a la hora de agregar ordenadores/aulas (no válido) Tickets genéricos resueltos: #839 Errores detectado en API REST para Remote PC (corrección) diff --git a/installer/vagrant/Vagrantfile-1.0.6b-vbox b/installer/vagrant/Vagrantfile-1.0.6b-vbox index 2db25e1c..4317c654 100644 --- a/installer/vagrant/Vagrantfile-1.0.6b-vbox +++ b/installer/vagrant/Vagrantfile-1.0.6b-vbox @@ -42,7 +42,7 @@ fi # Install OpenGnsys and change server address. wget -q https://opengnsys.es/svn/tags/opengnsys-1.0.6b/installer/opengnsys_installer.sh -O - | bash || exit $? mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log -echo y | /opt/opengnsys/bin/setserveraddr eth1 +echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) # Insert DHCP data. for ((i=#{NCLIENTS+10}; i>10; i--)); do sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf diff --git a/installer/vagrant/Vagrantfile-devel-vbox b/installer/vagrant/Vagrantfile-devel-vbox index 2e0bdce7..23757f0d 100644 --- a/installer/vagrant/Vagrantfile-devel-vbox +++ b/installer/vagrant/Vagrantfile-devel-vbox @@ -45,7 +45,7 @@ elif which wget &>/dev/null; then fi $DOWNLOAD -s https://raw.githubusercontent.com/opengnsys/OpenGnsys/devel/installer/opengnsys_installer.sh | bash || exit $? mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log -echo y | /opt/opengnsys/bin/setserveraddr enp0s8 +echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) # Insert DHCP data. for ((i=#{NCLIENTS+10}; i>10; i--)); do sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf diff --git a/installer/vagrant/Vagrantfile-prod-vbox b/installer/vagrant/Vagrantfile-prod-vbox index fa6f6ded..fbb7543b 100644 --- a/installer/vagrant/Vagrantfile-prod-vbox +++ b/installer/vagrant/Vagrantfile-prod-vbox @@ -45,7 +45,7 @@ elif which wget &>/dev/null; then fi $DOWNLOAD -s https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh | bash || exit $? mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log -echo y | /opt/opengnsys/bin/setserveraddr enp0s8 +echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) # Insert DHCP data. for ((i=#{NCLIENTS+10}; i>10; i--)); do sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf diff --git a/server/lib/security-config b/server/lib/security-config index eb8bf5cf..d7f90d4a 100755 --- a/server/lib/security-config +++ b/server/lib/security-config @@ -22,13 +22,13 @@ fi if which ufw 2>/dev/null; then # Adding active services. ufw allow "Apache Secure" + ufw allow from 127.0.0.1/8 to any port mysql proto tcp # MySQL from the loopback ufw allow OpenSSH ufw allow Samba - ufw allow mysql ufw allow rsync ufw allow tftp ufw allow 67,68/udp # DHCP - ufw allow 2002,2008/tcp # OpenGnsys services + ufw allow 2002,2008,2009,2011/tcp # OpenGnsys services ufw allow 9000:9051/udp # Multicast ufw allow 6881:6999/udp # BitTorrent # Applying configuration. @@ -41,11 +41,11 @@ import firewall.core.io.service as ios s=ios.Service() s.short = 'OpenGnsys Server' s.name = 'ogAdmServer' -s.ports = [('2008', 'tcp')] +s.ports = [('2008', 'tcp'), ('2011', 'tcp')] ios.service_writer(s, '/etc/firewalld/services') s.short = 'OpenGnsys Repository' s.name = 'ogAdmRepo' -s.ports = [('2002', 'tcp')] +s.ports = [('2002', 'tcp'), ('2009', 'tcp')] ios.service_writer(s, '/etc/firewalld/services')" # Adding active services. firewall-cmd --permanent --add-service=dhcp @@ -71,15 +71,18 @@ fi # SELinux configuration. if which setsebool 2>/dev/null; then - # Configuring Apache. - setsebool -P httpd_can_connect_ldap on - semanage fcontext -at httpd_sys_content_t "$OPENGNSYS/www(/.*)?" - # Configuring Samba. - setsebool -P samba_export_all_ro=1 samba_export_all_rw=1 - semanage fcontext -at samba_share_t "$OPENGNSYS/client(/.*)?" - semanage fcontext -at samba_share_t "$OPENGNSYS/images(/.*)?" - # Applying configuration. - restorecon -R $OPENGNSYS + if selinuxenabled 2>/dev/null; then + # Configuring Apache. + setsebool -P httpd_can_connect_ldap on + semanage fcontext -at httpd_sys_content_t "$OPENGNSYS/www(/.*)?" + # Configuring Samba. + setsebool -P samba_export_all_ro=1 samba_export_all_rw=1 + semanage fcontext -at samba_share_t "$OPENGNSYS/client(/.*)?" + semanage fcontext -at samba_share_t "$OPENGNSYS/images(/.*)?" + # Applying configuration. + restorecon -R $OPENGNSYS + else + echo "$PROG: Warning: SELinux is disabled, it won't be configured." else echo "$PROG: Warning: SELinux won't be configured (policycoreutils is not installed)." fi |