290 lines
9.9 KiB
C
290 lines
9.9 KiB
C
// ***************************************************************************************************************************************
|
|
// Aplicacin HIDRA (Gestin y Admistracin de aulas de informtica)
|
|
// Copyright 2003-2007 Jos Manuel Alonso. Todos los derechos reservados.
|
|
// Fichero: hidrax.h
|
|
// Descripcin:
|
|
// Fichero de cabecera de hidrax.cpp
|
|
// ***************************************************************************************************************************************
|
|
#include <sys/types.h>
|
|
#include <sys/wait.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <netdb.h>
|
|
#include <arpa/inet.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
#include <unistd.h>
|
|
#include <ctype.h>
|
|
#include <time.h>
|
|
#include <signal.h>
|
|
|
|
#define LEER 0
|
|
#define ESCRIBIR 1
|
|
|
|
#define LONGITUD_SCRIPTSALIDA 1024 // Longitud máima de la informacin devuelta por un script
|
|
#define LONGITUD_PARAMETROS 4048 // Longitud m?ima de la informacin de la trama (parametros)
|
|
#define LONGITUD_TRAMA LONGITUD_PARAMETROS+11 // Longitud m?ima de la trama completa
|
|
#define LONGITUD_CONFIGURACION 1024 // Longitud mxima de las configuraciones de particin
|
|
#define MAX_NUM_CSADDRS 20
|
|
#define MAX_INTERFACE_LIST 20
|
|
#define MAXCNX 5 // Mximos intentos de conexión al servidor HIDRA
|
|
#define MAXITEMS 100
|
|
#define MAXHTMLMNU 4000
|
|
#define MAXPARTICIONES 24
|
|
#define MAXINFOSO 5 // Numero máximo de nemonicos enla inforamción del S.O. de una partición
|
|
#define MAXARGS 16 // Numero máximo de argumentos enviados a un scripts
|
|
#define LONSTD 512 // Longitud de memoria estandar
|
|
#define LONSTDC 256 // Longitud de memoria estandar corta
|
|
|
|
#define PUERTOMINUSER 20000
|
|
#define PUERTOMAXUSER 60000
|
|
|
|
#define TRUE 1
|
|
#define FALSE 0
|
|
|
|
#define true 1
|
|
#define false 0
|
|
|
|
#define SOCKET_ERROR (-1)
|
|
#define INVALID_SOCKET (SOCKET)(~0)
|
|
|
|
typedef unsigned short WORD;
|
|
typedef int BOOL;
|
|
typedef char BYTE;
|
|
typedef int SOCKET;
|
|
|
|
typedef struct{ // EstructUra de la trama recibida
|
|
char arroba; // cabecera de la trama
|
|
char identificador[9]; // identificador de la trama
|
|
char ejecutor; // ejecutor de la trama 1=el servidor hidra 2=el cliente hidra 3=el repositorio
|
|
char parametros[LONGITUD_PARAMETROS]; // Contenido de la trama (par?etros)
|
|
}TRAMA;
|
|
|
|
TRAMA trama[1];
|
|
|
|
char IPlocal[20]; // Ip local
|
|
char Servidorhidra[20]; // IP servidor HIDRA
|
|
char Puerto[20]; // Puerto Unicode
|
|
|
|
char szPathFileCfg[128];
|
|
char szPathFileLog[128];
|
|
|
|
//___________________________________________________________________________________________________
|
|
// Variables y estructuras
|
|
//___________________________________________________________________________________________________
|
|
|
|
char cmdshell[LONSTD];
|
|
char parametros[LONSTD];
|
|
char* argumentos[MAXARGS];
|
|
char msglog[LONSTD];
|
|
char msgcon[LONSTD];
|
|
char filecmdshell[LONSTDC];
|
|
char filemenu[LONSTDC];
|
|
char fileitem[LONSTDC];
|
|
char fileini[LONSTDC];
|
|
char filecmd[LONSTDC];
|
|
|
|
struct excepcion {
|
|
int herror;
|
|
char msg[LONSTDC];
|
|
char modulo[LONSTDC];
|
|
};
|
|
struct excepcion e;
|
|
|
|
int ndebug=1; // Nivel de debuger por defecto
|
|
|
|
// Nemónicos
|
|
int MsDos=1;
|
|
int Win98=2;
|
|
int Win2K=3;
|
|
int WinXP=4;
|
|
int Linux=5;
|
|
|
|
BOOL PROCESO=true; // Indicador de la actividad del proceso principal
|
|
BOOL CACHEEXISTS; // Indica si existe cache
|
|
|
|
char HIDRACHEIMAGENES[LONSTDC]; // Path al directorio donde están las imágenes (en la caché)
|
|
char HIDRASRVIMAGENES[LONSTDC]; // Path al directorio hidra donde están las imágenes (en el repositorio)
|
|
char HIDRASRVCMD[LONSTDC]; // Path del directorio del repositorio donde se depositan los comandos para el cliente hidra
|
|
char HIDRASCRIPTS[LONSTDC]; // Path al directorio donde están los scripts de hidra (en el cliente hidra)
|
|
|
|
int HIDRAVER; // Versión Hidra
|
|
int TPAR ; // Tamaño de la particin
|
|
|
|
SOCKET sock; // Socket
|
|
|
|
struct s_CabMnu {
|
|
char resolucion[2]; // Resolucin de pantalla
|
|
char titulo[LONSTDC]; // Titulo del menu
|
|
char coorx[4]; // Coordenada x
|
|
char coory[4]; // Coordenada y
|
|
char modalidad[2]; // modalidad ( numero de items por linea )
|
|
char scoorx[4]; // Coordenada x // Menu privado
|
|
char scoory[4]; // Coordenada y
|
|
char smodalidad[LONSTDC]; // modalidad ( numero de items por linea )
|
|
char htmmenupub[64]; // Nombre del fichero que contiene el html del menu (público)
|
|
char htmmenupri[64]; // Nombre del fichero que contiene el html del menu (privado)
|
|
} CabMnu; // Estructura con los datos de los menús
|
|
|
|
BOOL swmnu=false; // Indicador de menu asignado
|
|
|
|
struct s_Item{
|
|
char idaccionmenu[16]; // Identificador del item a ejecutar
|
|
char urlimg[64]; // Nombre de la imagen de fonfo del botn
|
|
char literal[LONSTDC]; // Literal del item
|
|
char tipoitem[2]; // Tipo de otem ( público o privado)
|
|
char tipoaccion[2]; // Tipo de accin que ejecuta el item
|
|
} ;
|
|
|
|
struct s_Propiedades {
|
|
char idordenador[16]; // Identificador del ordenador
|
|
char nombreordenador[64]; // Nombre del ordenador
|
|
char idaula[16]; // Identificador del aula
|
|
char servidorhidra[64]; // IP del servidor HUDRA
|
|
char puerto[16]; // Puerto
|
|
char iprepo[16]; // Direción IP repositorio
|
|
char puertorepo[16]; // Puerto
|
|
char idperfilhard[16]; // Identificador del perfil hardware
|
|
char IPlocal[16]; // Ip local
|
|
} Propiedades; // Estructura con los datos del odenador
|
|
|
|
struct s_Particiones{
|
|
char tiposo[64]; // Tipo de sistema operativo
|
|
char tipopart[16]; // Tipo de particin
|
|
char tamapart[16]; // Tamao de la particin
|
|
char numpart[5]; // Nmero de la particin
|
|
char nombreso[64]; // Nombre del S.O.
|
|
};
|
|
|
|
struct s_Hardware{
|
|
char nemonico[4]; // Tipo de sistema operativo
|
|
char tipo[45]; // Tipo de hardware
|
|
char codigovalor[256]; // Codigo o descripcion
|
|
}
|
|
;
|
|
struct tiposo {
|
|
char *tipopart;
|
|
char *tiposo;
|
|
char *nombreso;
|
|
};
|
|
struct tiposo tiposos[] = {
|
|
{"BIGDOS", "MsDos","MsDos"},
|
|
{"NTFS","Windows NT Platafom","Windows 2000,XP,2003"},
|
|
{"FAT32","Windows","Windos 98,SE,Millenium"},
|
|
{"EXT","Extendida","Extendida"},
|
|
{"EXT3","Linux","Linux"},
|
|
{"EXT2","Linux","Linux"},
|
|
{"VFAT","VFAT","VFAT"},
|
|
{"CACHE","CACHE","CACHE"},
|
|
{"UNKNOWN","UNKNOWN","UNKNOWN"},
|
|
{"EMPTY","Libre","Libre"},
|
|
{"LINUX-SWAP","","Linux-swap"}};
|
|
|
|
int ntiposo = sizeof (tiposos) / sizeof (struct tiposo);
|
|
|
|
struct s_Item tbMenu[MAXITEMS]; // Tabla con los items del menu
|
|
int contitems; // Contador items del menu
|
|
|
|
BOOL PRCCMD; // Indicador de comandos interactivos
|
|
BOOL CMDPTES; // Indicador de comandos pendientes
|
|
|
|
//char modulo[64]; // Nombre de la funcin donde se produce el error
|
|
|
|
BOOL aut = false; // Variable para controlar el acceso al menu de administracion
|
|
|
|
|
|
char* tbErrores[]={"000-Se han generado errores. No se puede continuar la ejecución de este módulo",\
|
|
"001-No hay memoria suficiente para el buffer",\
|
|
"002-No se puede establecer conexión con el servidor Hidra",\
|
|
"003-El fichero especificado no existe o bien no puede crearse o abrirse",\
|
|
"004-Comando Error",\
|
|
"005-El fichero est vacio",\
|
|
"006-Error en la ejecución del fichero autoexec",\
|
|
"007-Error en la recuperacion del Menu principal",\
|
|
"008-No hay espacio reservado para la cache en este disco",\
|
|
"009-Ha ocurrido algún error generando el perfil software",\
|
|
"010-IPlocal, NO se ha definido este parámetro",\
|
|
"011-IPhidra, NO se ha definido este parámetro",\
|
|
"012-Puerto, NO se ha definido este parámetro",\
|
|
"013-NO existe fichero de configuración o contiene un error de sintaxis",\
|
|
"014-Fallo de sintaxis en los parámetros: Debe especificar -f nombre_del_fichero_de_configuración",\
|
|
"015-No se ha podido crear socket para comunicación con el repositorio",\
|
|
"016-No se ha podido comunicar con el repositorio",\
|
|
"017-No existe Menu principal",\
|
|
"018-No se ha podido recuperar la configuración hardware del ordenador",\
|
|
"019-El cliente no se ha podido incluir en el sistema por un fallo en la conexión con el Servidor Hidra",\
|
|
"020-No se ha podido crear la carpeta en el repositorio",\
|
|
"021-Error en el envío de tramas al servidor Hidra",\
|
|
"022-Error en la recepción de tramas desde el servidor Hidra",\
|
|
"023-Error desconocido",\
|
|
};
|
|
|
|
#define MAXERROR 23 // Error máximo cometido
|
|
|
|
// Prototipos de funciones
|
|
char* Desencriptar(char *);
|
|
char* Encriptar(char *);
|
|
int ValidacionParametros(int,char**);
|
|
int CrearArchivoLog(char*);
|
|
int LeeFileConfiguracion();
|
|
void Log(char*);
|
|
void UltimoError(int,char*);
|
|
void INTROaFINCAD(char*);
|
|
char* TomaParametro(char*,char*);
|
|
int SplitParametros(char**,char*, char*);
|
|
|
|
int EjecutarScript (char*,char* ,char*);
|
|
char* ReservaMemoria(int);
|
|
|
|
SOCKET TCPConnect(char *,char* );
|
|
void TCPClose(SOCKET);
|
|
int AbreConexionTCP(void);
|
|
void CierraConexionTCP(void);
|
|
int EnviaTramasHidra(SOCKET,TRAMA*);
|
|
int RecibeTramasHidra(SOCKET,TRAMA*);
|
|
int TCPWrite(SOCKET ,TRAMA*);
|
|
int TCPRead(SOCKET ,TRAMA*);
|
|
SOCKET UDPConnect();
|
|
int EnviaTramaRepo(SOCKET,TRAMA*,char*,char*);
|
|
int RecibeTramaRepo(SOCKET);
|
|
|
|
long CreateTextFile(char*,char*);
|
|
int ExisteFichero(char*);
|
|
int RemoveFile(char *);
|
|
int LoadTextFile(char *);
|
|
|
|
int ProcesaComandos();
|
|
int DisponibilidadComandos(int);
|
|
int GestionTramas(TRAMA *);
|
|
|
|
int Cortesia();
|
|
int NoComandosPtes();
|
|
int TomaIPlocal();
|
|
int InclusionClienteHIDRA();
|
|
int RESPUESTA_InclusionClienteHIDRA(TRAMA*);
|
|
int ComandosPendientes(void);
|
|
int Arrancar(TRAMA *,TRAMA *);
|
|
int Apagar(TRAMA*,TRAMA*);
|
|
int Reiniciar(TRAMA*,TRAMA*);
|
|
int Actualizar();
|
|
int CrearPerfilSoftware(TRAMA*,TRAMA*);
|
|
int CrearPerfil(char*,char*,char*,char*,char*);
|
|
int Nemonico(char*);
|
|
int RestaurarImagen(TRAMA*,TRAMA*);
|
|
int RestaurandoImagen(char*,char*,char*,char*,char*,char*,char*);
|
|
int ParticionaryFormatear(TRAMA*,TRAMA*);
|
|
int Particionar(char*,char*,char* );
|
|
int Particionando(char*,char*,char*);
|
|
int Formatear(char*,char*);
|
|
int SetCachePartitionSize(int);
|
|
int AutoexecClienteHidra(void);
|
|
char* LeeConfiguracion(char*);
|
|
char* TomaNomSO(char*,int);
|
|
int InventarioHardware(TRAMA *,TRAMA *);
|
|
int TomaConfiguracion(TRAMA *,TRAMA *);
|
|
int RespuestaEjecucionComando(TRAMA* , TRAMA *, int);
|
|
int ExecShell(TRAMA *,TRAMA *);
|
|
char* URLDecode(char*);
|