source: admin/Services/ogAdmClient/sources/ogAdmClient.h @ bf1840e9

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since bf1840e9 was 90f061f6, checked in by alonso <alonso@…>, 15 years ago

git-svn-id: https://opengnsys.es/svn/trunk@921 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100644
File size: 11.2 KB
Line 
1//****************************************************************************************************************************************************
2//      Aplicación OpenGNSys
3//      Autor: José Manuel Alonso.
4//      Licencia: Open Source
5//      Fichero: ogAdmServer.cpp
6//      Descripción:
7//              Este módulo de la aplicación OpenGNSys implementa las comunicaciones con el Cliente.
8// ****************************************************************************************************************************************************
9#include <sys/types.h>
10#include <sys/wait.h>
11#include <arpa/inet.h>
12#include <stdio.h>
13#include <stdlib.h>
14#include <string.h>
15#include <errno.h>
16#include <unistd.h>
17#include <ctype.h>
18#include <time.h>
19#include <signal.h>
20 
21#define LEER            0
22#define ESCRIBIR        1
23
24#define LONGITUD_SCRIPTSALIDA 4064      // Longitud máxima de la informacin devuelta por un script
25#define LONGITUD_PARAMETROS_TRAMA 4024  // Longitud máima de la informacin de la trama (parametros)
26#define LONGITUD_TRAMA LONGITUD_PARAMETROS_TRAMA+11     // Longitud máxima de la trama completa
27#define LONGITUD_CONFIGURACION 1024     // Longitud mxima de las configuraciones de particin
28#define MAX_NUM_CSADDRS        20
29#define MAX_INTERFACE_LIST     20
30#define MAXCNX 5                // Máximos intentos de conexión al servidor de Administración
31#define MAXITEMS 100
32#define MAXHTMLMNU 4000
33#define MAXPARTICIONES 24
34#define MAXINFOSO 5 // Numero máximo de nemonicos enla inforamción del S.O. de una partición
35#define MAXARGS 16 // Numero máximo de argumentos enviados a un scripts
36#define LONSTD 512 // Longitud de memoria estandar
37#define LONSTDC 256 // Longitud de memoria estandar corta
38
39#define PUERTOMINUSER 20000
40#define PUERTOMAXUSER 60000
41
42#define TRUE 1
43#define FALSE 0
44
45#define true 1
46#define false 0
47
48#define SOCKET_ERROR            (-1)
49#define INVALID_SOCKET  (SOCKET)(~0)
50
51typedef unsigned short  WORD;
52typedef  int  BOOL;
53typedef char  BYTE;
54typedef  int  SOCKET;
55
56typedef struct{         // EstructUra de la trama recibida
57        char arroba;    // cabecera de la trama
58        char identificador[9];  // identificador de la trama
59        char ejecutor;  // ejecutor de la trama 1=el servidor de admistración  2=el cliente 3=el repositorio
60        char parametros[LONGITUD_PARAMETROS_TRAMA]; // Contenido de la trama (par?etros)
61}TRAMA;
62
63TRAMA trama[1];
64
65char IPlocal[20];               // Ip local
66char Servidorhidra[20]; // IP servidor de Administración
67char Puerto[20];                // Puerto Unicode
68
69char szPathFileCfg[128];
70char szPathFileLog[128];
71
72//___________________________________________________________________________________________________
73// Variables y estructuras
74//___________________________________________________________________________________________________
75
76char cmdshell[LONSTD];
77char parametros[LONSTD];
78char* argumentos[MAXARGS];
79char msglog[LONSTD];
80char msgcon[LONSTD];
81char filecmdshell[LONSTDC];
82char urlpag[LONSTDC];
83char fileini[LONSTDC];
84char filecmd[LONSTDC];
85
86struct excepcion {
87        int herror;
88        char msg[LONSTDC];
89        char modulo[LONSTDC];   
90};
91struct excepcion e;
92
93int ndebug=1; // Nivel de debuger por defecto
94
95// Nemónicos
96int MsDos=1;
97int Win98=2;
98int Win2K=3;
99int WinXP=4;
100int Linux=5;
101               
102BOOL PROCESO=true;                      // Indicador de la actividad del proceso principal
103BOOL CACHEEXISTS;                       // Indica si existe cache
104
105char HIDRACHEIMAGENES[LONSTDC]; // Path al directorio donde están las imágenes (en la caché)
106char HIDRASRVIMAGENES[LONSTDC]; // Path al directorio donde están las imágenes (en el repositorio)
107char HIDRASRVCMD[LONSTDC];      // Path del directorio del repositorio donde se depositan los comandos para el cliente
108char HIDRASCRIPTS[LONSTDC];     // Path al directorio donde están los scripts de la interface con la APi de funciones de OpenGnsys (en el cliente )
109char URLMENU[LONSTDC]; // Url de la pagina de menu para el browser
110char URLMSG[LONSTDC]; // Url de la página de mensajed para el browser
111
112
113int HIDRAVER;   // Versión de la apliación de Administración
114int TPAR ;      // Tamaño de la particin
115       
116SOCKET sock;    // Socket
117
118struct s_CabMnu {
119        char resolucion[2];                      // Resolucin de pantalla
120        char titulo[LONSTDC];                                           // Titulo del menu
121        char coorx[4];                                  // Coordenada x
122        char coory[4];                                  // Coordenada y
123        char modalidad[2];              // modalidad ( numero de items por linea )
124        char scoorx[4];                         // Coordenada x // Menu privado
125        char scoory[4];                         // Coordenada y
126        char smodalidad[LONSTDC];               // modalidad ( numero de items por linea )
127        char htmmenupub[64];    // Nombre del fichero que contiene el html del menu (público)
128        char htmmenupri[64];            // Nombre del fichero que contiene el html del menu (privado)
129} CabMnu;  // Estructura con los datos de los menús
130       
131BOOL swmnu=false; // Indicador de menu asignado
132       
133struct s_Item{
134        char idaccionmenu[16];  // Identificador del item a ejecutar
135        char urlimg[64];        // Nombre de la imagen de fonfo del botn
136        char literal[LONSTDC];  // Literal del item
137        char tipoitem[2];       // Tipo de otem ( público o privado)
138        char tipoaccion[2];     // Tipo de accin que ejecuta el item
139} ;
140       
141struct s_Propiedades {
142        char idordenador[16];                            // Identificador del ordenador
143        char nombreordenador[64];                // Nombre del ordenador
144        char idaula[16];                                                                // Identificador del aula
145        char servidorhidra[64];                         // IP  del servidor HUDRA
146        char puerto[16];                                                                // Puerto
147        char iprepo[16];                                                                // Direción IP repositorio     
148        char puertorepo[16];                                                            // Puerto       
149        char idperfilhard[16];                                  // Identificador del perfil hardware
150        char IPlocal[16];
151        char cache[16];                                         // Tamaño de la cache
152} Propiedades;    // Estructura con los datos del odenador
153       
154struct s_Particiones{
155        char tiposo[64];                                // Tipo de sistema operativo
156        char tipopart[16];                      // Tipo de particin
157        char tamapart[16];              // Tamao de la particin
158        char numpart[5];                // Nmero de la particin
159        char nombreso[64];    // Nombre del S.O.
160};
161       
162struct s_Hardware{
163        char nemonico[4];                               // Tipo de sistema operativo
164        char tipo[45];                  // Tipo de hardware
165        char codigovalor[256];                  // Codigo o descripcion
166}
167;       
168struct tiposo {
169  char *tipopart;
170  char *tiposo;
171  char *nombreso; 
172};     
173
174char* tbPathImg[]={"CLIEN","CACHE","REPO"};
175
176struct tiposo tiposos[] = {
177                {"BIGDOS", "MsDos","MsDos"},
178                {"NTFS","Windows NT Platafom","Windows 2000,XP,2003"},
179                {"FAT32","Windows","Windos 98,SE,Millenium"},                   
180                {"EXT","Extendida","Extendida"},
181                {"EXT3","Linux","Linux"},
182                {"EXT2","Linux","Linux"},       
183                {"VFAT","VFAT","VFAT"},
184                {"CACHE","CACHE","CACHE"},                     
185                {"UNKNOWN","UNKNOWN","UNKNOWN"},                       
186                {"EMPTY","Libre","Libre"},
187                {"LINUX-SWAP","","Linux-swap"}};
188               
189int ntiposo = sizeof (tiposos) / sizeof (struct tiposo);
190
191struct s_Item tbMenu[MAXITEMS];                 // Tabla con los items del menu
192int contitems;                  // Contador items del menu
193       
194BOOL PRCCMD;            // Indicador de comandos interactivos
195BOOL CMDPTES;   // Indicador de comandos pendientes
196       
197//char modulo[64];      // Nombre de la funcin donde se produce el error
198
199BOOL aut = false; // Variable para controlar el acceso al menu de administracion
200
201pid_t  pidmenu;
202
203char* tbErrores[]={"000-Se han generado errores. No se puede continuar la ejecución de este módulo",\
204                "001-No hay memoria suficiente para el buffer",\
205                "002-No se puede establecer conexión con el servidor de administración",\
206                "003-El fichero especificado no existe o bien no puede crearse o abrirse",\
207                "004-Comando Error",\
208                "005-El fichero est vacio",\
209                "006-Error en la ejecución del fichero autoexec",\
210                "007-Error en la recuperacion del Menu principal",\
211                "008-No hay espacio reservado para la cache en este disco",\
212                "009-Ha ocurrido algún error generando el perfil software",\
213                "010-IPlocal, NO se ha definido este parámetro",\
214                "011-IPhidra, NO se ha definido este parámetro",\
215                "012-Puerto, NO se ha definido este parámetro",\
216                "013-NO existe fichero de configuración o contiene un error de sintaxis",\
217                "014-Fallo de sintaxis en los parámetros: Debe especificar -f nombre_del_fichero_de_configuración",\
218                "015-No se ha podido crear socket para comunicación con el repositorio",\
219                "016-No se ha podido comunicar con el repositorio",\
220                "017-No existe Menu principal",\
221                "018-No se ha podido recuperar la configuración hardware del ordenador",\
222                "019-El cliente no se ha podido incluir en el sistema por un fallo en la conexión con el Servidor de Administración",\
223                "020-No se ha podido crear la carpeta en el repositorio",\
224                "021-Error en el envío de tramas al Servidor de Administración",\
225                "022-Error en la recepción de tramas desde el Servidor de Administración",\
226                "023-Error al crear Proceso Hijo para  mostrar Menú",\
227                "024-Error desconocido",\
228                };             
229                #define MAXERROR 24             // Error máximo cometido
230
231char* tbErroresScripts[]={"000-Se han generado errores. No se puede continuar la ejecución de este módulo",\
232                "001-Formato de ejecución incorrecto.",\
233                "002-Fichero o dispositivo no encontrado",\
234                "003-Error en partición de disco",\
235                "004- Partición o fichero bloqueado",\
236                "005-Error al crear o restaurar una imagen",\
237                "006-Sin sistema operativo",\
238                "007-Programa o función no ejecutable",\
239                "008-Error en la eliminación del archivo temporal de intercambio",\
240                "009-Error en la lectura del archivo temporal de intercambio",\
241                "010-Error al ejecutar código de la shell",\
242                "011-Error desconocido",       
243                };             
244        #define MAXERRORSCRIPT 11               // Error máximo cometido
245
246// Prototipos de funciones
247char* Desencriptar(char *);
248char* Encriptar(char *);
249int ValidacionParametros(int,char**);
250int CrearArchivoLog(char*);
251int LeeFileConfiguracion();
252void Log(char*);
253void UltimoError(int,char*);
254void UltimoErrorScript(int,char*);
255
256void INTROaFINCAD(char*);
257char* TomaParametro(char*,char*);
258int SplitParametros(char**,char*, char*);
259
260int EjecutarScript (char*,char* ,char*,int);
261char* ReservaMemoria(int);
262
263SOCKET TCPConnect(char *,char* );
264void TCPClose(SOCKET);
265int AbreConexionTCP(void);
266void CierraConexionTCP(void);
267int EnviaTramasHidra(SOCKET,TRAMA*);
268int RecibeTramasHidra(SOCKET,TRAMA*);
269int TCPWrite(SOCKET ,TRAMA*);
270int TCPRead(SOCKET ,TRAMA*);
271SOCKET UDPConnect();
272int EnviaTramaRepo(SOCKET,TRAMA*,char*,char*);
273int RecibeTramaRepo(SOCKET,int);
274
275long CreateTextFile(char*,char*);
276int ExisteFichero(char*);
277int RemoveFile(char *);
278int LoadTextFile(char *);
279
280int ProcesaComandos();
281int DisponibilidadComandos(int);
282int GestionTramas(TRAMA *);
283
284int Cortesia();
285int NoComandosPtes();
286int TomaIPlocal();
287int InclusionCliente();
288int RESPUESTA_InclusionCliente(TRAMA*);
289int ComandosPendientes(void);
290int Arrancar(TRAMA *,TRAMA *);
291int Apagar(TRAMA*,TRAMA*);
292int Reiniciar(TRAMA*,TRAMA*);
293int IniciarSesion(TRAMA*,TRAMA*);
294int Actualizar();
295int CrearPerfilSoftware(TRAMA*,TRAMA*);
296int CrearPerfil(char*,char*,char*,char*,char*);
297int Nemonico(char*);
298int RestaurarImagen(TRAMA*,TRAMA*);
299int RestaurandoImagen(char* ,char *,char* ,char *,char *,char *,char*);
300
301int ParticionaryFormatear(TRAMA*,TRAMA*);
302int Particionar(char*,char*,char* );
303int Particionando(char*,char*,char*);
304int Formatear(char*,char*);
305int SetCachePartitionSize(int);
306int AutoexecClienteHidra(void);
307char* LeeConfiguracion(char*);
308char* TomaNomSO(char*,int);
309int InventarioHardware(TRAMA *,TRAMA *);
310int InventarioSoftware(TRAMA *,TRAMA *);
311int TomaConfiguracion(TRAMA *,TRAMA *);
312int RespuestaEjecucionComando(TRAMA* , TRAMA *, int);
313int ExecShell(TRAMA *,TRAMA *);
314int ConsolaRemota(TRAMA *,TRAMA *);
315int ExecBash(char*);
316char* URLDecode(char*);
317char* URLEncode(char *);
318int MuestraMenu(char*);
319void MuestraMensaje(int,char*);
320int cuestionCache(char*);
Note: See TracBrowser for help on using the repository browser.