summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2012-07-18 12:00:06 +0000
committerramon <ramongomez@us.es>2012-07-18 12:00:06 +0000
commitd0df50b67a1392f81e6faecd27523c639e1ba845 (patch)
treeab5f37fe113fa7447b92f98e073c8618b64d2215
parent1c93532b21492afae588da93f6ff59dd11a6e6d7 (diff)
Versión 1.0.4, #531: Integrar versión 1.0.4 en rama principal.
git-svn-id: https://opengnsys.es/svn/trunk@3259 a21b9725-9963-47de-94b9-378ad31fedc9
-rw-r--r--admin/Database/ogAdmBD-1.0-1.0.3.sql4
-rw-r--r--admin/Database/ogAdmBD-1.0-1.0.4.sql62
-rw-r--r--admin/Database/ogAdmBD-1.0.1-1.0.3.sql4
-rw-r--r--admin/Database/ogAdmBD-1.0.1-1.0.4.sql62
-rw-r--r--admin/Database/ogAdmBD-1.0.2-1.0.3.sql5
-rw-r--r--admin/Database/ogAdmBD-1.0.2-1.0.4.sql64
-rw-r--r--admin/Database/ogAdmBD-1.0.2a-1.0.3.sql4
-rw-r--r--admin/Database/ogAdmBD-1.0.2a-1.0.4.sql60
-rw-r--r--admin/Database/ogAdmBD-1.0.3-1.0.4.sql58
-rw-r--r--admin/Database/ogAdmBD.sql75
-rwxr-xr-xadmin/Interface/RestaurarImagen9
-rwxr-xr-xadmin/Interface/getConfiguration17
-rw-r--r--admin/Sources/Clients/ogAdmLnxClient/Makefile34
-rw-r--r--admin/Sources/Clients/ogAdmLnxClient/ogAdmLnxClient.cfg4
-rw-r--r--admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.c438
-rw-r--r--admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.h54
-rw-r--r--admin/Sources/Clients/ogAdmWinClient/Readme25
-rw-r--r--admin/Sources/Clients/ogAdmWinClient/sources/ogAdmWinClient.cpp713
-rw-r--r--admin/Sources/Clients/ogAdmWinClient/sources/ogAdmWinClient.h60
-rw-r--r--admin/Sources/Clients/ogAdmWinClient/sources/servicio.c628
-rw-r--r--admin/Sources/Clients/ogAdmWinClient/sources/servicio.h153
-rw-r--r--admin/Sources/Includes/ogAdmLib.c20
-rw-r--r--admin/Sources/Includes/ogAdmLib.h6
-rw-r--r--admin/Sources/Includes/registrow.c199
-rw-r--r--admin/Sources/Includes/registrow.h20
-rw-r--r--admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp186
-rw-r--r--admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h2
-rwxr-xr-xadmin/Sources/Services/opengnsys.init107
-rw-r--r--admin/WebConsole/asistentes/AsistenteParticionado.php62
-rw-r--r--admin/WebConsole/asistentes/gestores/gestor_Comandos.php8
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php78
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php77
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php (renamed from admin/WebConsole/asistentes/includes/asistentes/formParticionado.php)0
-rw-r--r--admin/WebConsole/asistentes/includes/opcionesacciones.php2
-rw-r--r--admin/WebConsole/asistentes/jscripts/asistentes.js329
-rw-r--r--admin/WebConsole/barramenu.php4
-rw-r--r--admin/WebConsole/clases/jscripts/ArbolVistaXML.js6
-rw-r--r--admin/WebConsole/clases/jscripts/MenuContextual.js34
-rw-r--r--admin/WebConsole/comandos/Apagar.php39
-rw-r--r--admin/WebConsole/comandos/Arrancar.php38
-rw-r--r--admin/WebConsole/comandos/Configurar.php29
-rw-r--r--admin/WebConsole/comandos/EjecutarScripts.php38
-rw-r--r--admin/WebConsole/comandos/IniciarSesion.php31
-rw-r--r--admin/WebConsole/comandos/Reiniciar.php38
-rw-r--r--admin/WebConsole/comandos/RestaurarImagen.php129
-rw-r--r--admin/WebConsole/comandos/gestores/gestor_Comandos.php18
-rw-r--r--admin/WebConsole/comandos/includes/FiltradoAmbito.php393
-rw-r--r--admin/WebConsole/comandos/includes/capturaacciones.php2
-rw-r--r--admin/WebConsole/comandos/includes/formularioacciones.php1
-rw-r--r--admin/WebConsole/comandos/includes/opcionesacciones.php2
-rw-r--r--admin/WebConsole/comandos/jscripts/Apagar.js1
-rw-r--r--admin/WebConsole/comandos/jscripts/Arrancar.js1
-rw-r--r--admin/WebConsole/comandos/jscripts/Configurar.js3
-rw-r--r--admin/WebConsole/comandos/jscripts/EjecutarScripts.js1
-rw-r--r--admin/WebConsole/comandos/jscripts/IniciarSesion.js1
-rw-r--r--admin/WebConsole/comandos/jscripts/Reiniciar.js1
-rw-r--r--admin/WebConsole/comandos/jscripts/RestaurarImagen.js3
-rw-r--r--admin/WebConsole/controlpostacceso.php4
-rw-r--r--admin/WebConsole/gestores/gestor_aulas.php11
-rw-r--r--admin/WebConsole/gestores/gestor_ejecutaracciones.php11
-rw-r--r--admin/WebConsole/gestores/gestor_ordenadores.php25
-rw-r--r--admin/WebConsole/gestores/gestor_perfilhardwares.php10
-rw-r--r--admin/WebConsole/gestores/gestor_pxe.php72
-rw-r--r--admin/WebConsole/gestores/gestor_pxe_grub4dos.php49
-rw-r--r--admin/WebConsole/idiomas/javascripts/cat/iconos_cat.js7
-rw-r--r--admin/WebConsole/idiomas/javascripts/eng/iconos_eng.js7
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/iconos_esp.js7
-rw-r--r--admin/WebConsole/idiomas/php/cat/avisos_cat.php12
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php51
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_esp.php19
-rw-r--r--admin/WebConsole/idiomas/php/cat/configuraciones_cat.php16
-rw-r--r--admin/WebConsole/idiomas/php/cat/estados_cat.php16
-rw-r--r--admin/WebConsole/idiomas/php/cat/iconos_cat.php59
-rw-r--r--admin/WebConsole/idiomas/php/cat/menus_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php10
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_ordenadores_cat.php26
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php23
-rw-r--r--admin/WebConsole/idiomas/php/eng/avisos_eng.php12
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php49
-rw-r--r--admin/WebConsole/idiomas/php/eng/configuraciones_eng.php16
-rw-r--r--admin/WebConsole/idiomas/php/eng/estados_eng.php16
-rw-r--r--admin/WebConsole/idiomas/php/eng/iconos_eng.php61
-rw-r--r--admin/WebConsole/idiomas/php/eng/menus_eng.php3
-rw-r--r--admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php12
-rw-r--r--admin/WebConsole/idiomas/php/eng/propiedades_ordenadores_eng.php17
-rw-r--r--admin/WebConsole/idiomas/php/eng/propiedades_perfilhardwares_eng.php25
-rw-r--r--admin/WebConsole/idiomas/php/esp/aulas_esp.php2
-rw-r--r--admin/WebConsole/idiomas/php/esp/avisos_esp.php12
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php57
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php2
-rw-r--r--admin/WebConsole/idiomas/php/esp/configuraciones_esp.php16
-rw-r--r--admin/WebConsole/idiomas/php/esp/estados_esp.php16
-rw-r--r--admin/WebConsole/idiomas/php/esp/iconos_esp.php59
-rw-r--r--admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php35
-rw-r--r--admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php20
-rw-r--r--admin/WebConsole/idiomas/php/esp/propiedades_perfilhardwares_esp.php21
-rw-r--r--admin/WebConsole/images/L_Iconos.php39
-rw-r--r--admin/WebConsole/images/M_Iconos.js2
-rw-r--r--admin/WebConsole/images/M_Iconos.php90
-rw-r--r--admin/WebConsole/images/boton_aceptar_cat.gifbin0 -> 397 bytes
-rw-r--r--admin/WebConsole/images/boton_aceptar_eng.gifbin0 -> 367 bytes
-rw-r--r--admin/WebConsole/images/boton_aceptar_esp.gifbin0 -> 397 bytes
-rw-r--r--admin/WebConsole/images/boton_cancelar_cat.gifbin0 -> 653 bytes
-rw-r--r--admin/WebConsole/images/boton_cancelar_eng.gifbin0 -> 554 bytes
-rw-r--r--admin/WebConsole/images/boton_cancelar_esp.gifbin0 -> 653 bytes
-rw-r--r--admin/WebConsole/images/boton_cerrar.gifbin175 -> 320 bytes
-rw-r--r--admin/WebConsole/images/boton_cerrar_cat.gifbin0 -> 320 bytes
-rw-r--r--admin/WebConsole/images/boton_cerrar_eng.gifbin0 -> 175 bytes
-rw-r--r--admin/WebConsole/images/boton_cerrar_esp.gifbin0 -> 320 bytes
-rw-r--r--admin/WebConsole/images/boton_confirmar_cat.gifbin0 -> 573 bytes
-rw-r--r--admin/WebConsole/images/boton_confirmar_eng.gifbin0 -> 588 bytes
-rw-r--r--admin/WebConsole/images/boton_confirmar_esp.gifbin0 -> 573 bytes
-rw-r--r--admin/WebConsole/images/boton_insertar_cat.gifbin0 -> 462 bytes
-rw-r--r--admin/WebConsole/images/boton_insertar_eng.gifbin0 -> 451 bytes
-rw-r--r--admin/WebConsole/images/boton_insertar_esp.gifbin0 -> 462 bytes
-rw-r--r--admin/WebConsole/images/fotos/aula.jpgbin0 -> 10281 bytes
-rw-r--r--admin/WebConsole/images/fotos/fotoordenador.gifbin0 -> 7436 bytes
-rw-r--r--admin/WebConsole/images/ordenador_OPG.gif (renamed from admin/WebConsole/images/ordenador_RMB.gif)bin1060 -> 1060 bytes
-rw-r--r--admin/WebConsole/images/ver.php49
-rw-r--r--admin/WebConsole/includes/ConfiguracionesParticiones.php163
-rw-r--r--admin/WebConsole/includes/HTMLCTESELECT.php11
-rw-r--r--admin/WebConsole/includes/HTMLSELECT.php7
-rw-r--r--admin/WebConsole/includes/RecopilaIpesMacs.php61
-rw-r--r--admin/WebConsole/includes/constantes.php2
-rw-r--r--admin/WebConsole/includes/opcionesbotones.php4
-rw-r--r--admin/WebConsole/jscripts/aula.js78
-rw-r--r--admin/WebConsole/menus/examplemenu.html74
-rw-r--r--admin/WebConsole/principal/aula.php12
-rw-r--r--admin/WebConsole/principal/colasacciones.php36
-rw-r--r--admin/WebConsole/principal/configuraciones.php105
-rw-r--r--admin/WebConsole/principal/consolaremota.php2
-rw-r--r--admin/WebConsole/propiedades/propiedades_aulas.php74
-rw-r--r--admin/WebConsole/propiedades/propiedades_grupos.php12
-rw-r--r--admin/WebConsole/propiedades/propiedades_imagenes.php12
-rw-r--r--admin/WebConsole/propiedades/propiedades_menus.php59
-rw-r--r--admin/WebConsole/propiedades/propiedades_ordenadores.php94
-rw-r--r--admin/WebConsole/propiedades/propiedades_ordenadorestandar.php4
-rw-r--r--admin/WebConsole/propiedades/propiedades_perfilhardwares.php103
-rw-r--r--admin/WebConsole/propiedades/propiedades_usuarios.php4
-rw-r--r--admin/WebConsole/varios/incorporaordenadores.php10
-rw-r--r--admin/WebConsole/varios/menucliente.php21
-rwxr-xr-x[-rw-r--r--]client/boot-tools/boottoolsfunctions.lib17
-rwxr-xr-xclient/boot-tools/includes/etc/initramfs-tools/hooks/oghooks1
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions5
-rwxr-xr-xclient/boot-tools/includes/etc/initramfs-tools/scripts/oginit13
-rwxr-xr-x[-rw-r--r--]client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh0
-rwxr-xr-x[-rw-r--r--]client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh17
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh29
-rwxr-xr-x[-rw-r--r--]client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows0
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic7
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning3
-rwxr-xr-xclient/engine/Boot.lib28
-rwxr-xr-xclient/engine/Cache.lib84
-rwxr-xr-xclient/engine/Disk.lib705
-rwxr-xr-xclient/engine/File.lib15
-rwxr-xr-xclient/engine/FileSystem.lib218
-rwxr-xr-xclient/engine/Image.lib79
-rwxr-xr-xclient/engine/PostConf.lib380
-rwxr-xr-xclient/engine/PostConfEAC.lib141
-rwxr-xr-xclient/engine/Protocol.lib25
-rw-r--r--client/engine/README.es.txt15
-rwxr-xr-xclient/engine/System.lib9
-rw-r--r--client/shared/etc/engine.cfg12
-rw-r--r--client/shared/etc/lang.es_ES.conf27
-rwxr-xr-xclient/shared/etc/preinit/fileslinks.sh6
-rwxr-xr-xclient/shared/etc/preinit/loadenviron.sh2
-rwxr-xr-x[-rw-r--r--]client/shared/lib/httpd/LogCommand.sh0
-rwxr-xr-x[-rw-r--r--]client/shared/lib/httpd/LogSession.sh0
-rwxr-xr-x[-rw-r--r--]client/shared/lib/httpd/bandwidth.sh0
-rwxr-xr-xclient/shared/lib/httpd/cache.sh22
-rwxr-xr-x[-rw-r--r--]client/shared/lib/httpd/httpd-log.sh2
-rwxr-xr-x[-rw-r--r--]client/shared/lib/httpd/httpd-menu.sh0
-rw-r--r--[-rwxr-xr-x]client/shared/lib/httpd/lighttpd.conf0
-rwxr-xr-xclient/shared/lib/ogclient/ogAdmLnxClientbin0 -> 540196 bytes
-rw-r--r--client/shared/lib/ogclient/ogAdmWinClient.exebin0 -> 73728 bytes
-rwxr-xr-xclient/shared/scripts/configureOs63
-rwxr-xr-xclient/shared/scripts/generateMenuDefault42
-rwxr-xr-xclient/shared/scripts/poweroff2
-rwxr-xr-xclient/shared/scripts/reboot2
-rwxr-xr-xclient/shared/scripts/runhttplog.sh18
-rwxr-xr-xclient/shared/scripts/samples/configureGroup65
-rw-r--r--doc/CHANGELOG.es.txt102
-rw-r--r--doc/VERSION.txt2
-rw-r--r--installer/INSTALL.es.txt3
-rw-r--r--installer/README.es.txt2
-rwxr-xr-xinstaller/install_ticket_wolunicast.sh55
-rwxr-xr-xinstaller/opengnsys_installer.sh202
-rwxr-xr-xinstaller/opengnsys_uninstall.sh68
-rwxr-xr-xinstaller/opengnsys_update.sh134
-rwxr-xr-xrepoman/bin/opengnsys.cron5
-rwxr-xr-xrepoman/bin/torrent-creator6
-rwxr-xr-xserver/bin/compareDhcpOpengnsys49
-rwxr-xr-xserver/bin/setsmbpass13
-rw-r--r--server/etc/apache.conf.tmpl3
-rw-r--r--server/tftpboot/menu.lst/templates/pxe10
195 files changed, 7368 insertions, 1800 deletions
diff --git a/admin/Database/ogAdmBD-1.0-1.0.3.sql b/admin/Database/ogAdmBD-1.0-1.0.3.sql
deleted file mode 100644
index 9748b229..00000000
--- a/admin/Database/ogAdmBD-1.0-1.0.3.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-UPDATE ogAdmBD.parametros SET tipopa = '1', visual = '1' WHERE idparametro = 30;
-UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
-UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
-
diff --git a/admin/Database/ogAdmBD-1.0-1.0.4.sql b/admin/Database/ogAdmBD-1.0-1.0.4.sql
new file mode 100644
index 00000000..3542bd57
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0-1.0.4.sql
@@ -0,0 +1,62 @@
+UPDATE ogAdmBD.parametros SET tipopa = '1', visual = '1' WHERE idparametro = 30;
+
+UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
+UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
+
+ALTER TABLE ogAdmBD.menus MODIFY resolucion smallint(4);
+
+ALTER TABLE ogAdmBD.perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
+
+ALTER TABLE ogAdmBD.ordenadores_particiones
+ MODIFY codpar int(8) NOT NULL,
+ ADD numdisk tinyint(4) NOT NULL DEFAULT 1 AFTER idordenador,
+ ADD cache varchar(500),
+ DROP INDEX idordenadornumpar,
+ ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
+
+ALTER TABLE ogAdmBD.imagenes MODIFY codpar int(8) NOT NULL;
+ALTER TABLE ogAdmBD.sistemasficheros MODIFY codpar int(8) NOT NULL;
+ALTER TABLE ogAdmBD.tipospar MODIFY codpar int(8) NOT NULL;
+INSERT INTO ogAdmBD.tipospar (codpar,tipopar,clonable) VALUES
+ (6, 'FAT16', 1),
+ (CONV('A5',16,10), 'FREEBSD', 1),
+ (CONV('A6',16,10), 'OPENBSD', 1),
+ (CONV('AF',16,10), 'HFS', 1),
+ (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('DA',16,10), 'DATA', 1),
+ (CONV('EE',16,10), 'GPT', 0),
+ (CONV('EF',16,10), 'EFI', 0),
+ (CONV('FB',16,10), 'VMFS', 1),
+ (CONV('0700',16,10), 'WINDOWS', 1),
+ (CONV('0C01',16,10), 'WIN-RESERV', 1),
+ (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
+ (CONV('7F01',16,10), 'CHROMEOS', 1),
+ (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
+ (CONV('8200',16,10), 'LINUX-SWAP', 0),
+ (CONV('8300',16,10), 'LINUX', 1),
+ (CONV('8301',16,10), 'LINUX-RESERV', 1),
+ (CONV('8E00',16,10), 'LINUX-LVM', 1),
+ (CONV('A500',16,10), 'FREEBSD-DISK', 0),
+ (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
+ (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
+ (CONV('A503',16,10), 'FREEBSD', 1),
+ (CONV('AF00',16,10), 'HFS', 1),
+ (CONV('AF01',16,10), 'HFS-RAID', 1),
+ (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('BF00',16,10), 'SOLARIS', 1),
+ (CONV('BF01',16,10), 'SOLARIS', 1),
+ (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
+ (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
+ (CONV('BF04',16,10), 'SOLARIS', 1),
+ (CONV('BF05',16,10), 'SOLARIS', 1),
+ (CONV('CA00',16,10), 'CACHE', 0),
+ (CONV('EF00',16,10), 'EFI', 0),
+ (CONV('EF01',16,10), 'MBR', 0),
+ (CONV('EF02',16,10), 'BIOS-BOOT', 0),
+ (CONV('FD00',16,10), 'LINUX-RAID', 1),
+ (CONV('FFFF',16,10), 'UNKNOWN', 1);
+
+ALTER TABLE ogAdmBD.ordenadores ADD fotoord VARCHAR (250) NOT NULL;
+
+UPDATE ogAdmBD.aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
+
diff --git a/admin/Database/ogAdmBD-1.0.1-1.0.3.sql b/admin/Database/ogAdmBD-1.0.1-1.0.3.sql
deleted file mode 100644
index 9748b229..00000000
--- a/admin/Database/ogAdmBD-1.0.1-1.0.3.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-UPDATE ogAdmBD.parametros SET tipopa = '1', visual = '1' WHERE idparametro = 30;
-UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
-UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
-
diff --git a/admin/Database/ogAdmBD-1.0.1-1.0.4.sql b/admin/Database/ogAdmBD-1.0.1-1.0.4.sql
new file mode 100644
index 00000000..3542bd57
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.1-1.0.4.sql
@@ -0,0 +1,62 @@
+UPDATE ogAdmBD.parametros SET tipopa = '1', visual = '1' WHERE idparametro = 30;
+
+UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
+UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
+
+ALTER TABLE ogAdmBD.menus MODIFY resolucion smallint(4);
+
+ALTER TABLE ogAdmBD.perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
+
+ALTER TABLE ogAdmBD.ordenadores_particiones
+ MODIFY codpar int(8) NOT NULL,
+ ADD numdisk tinyint(4) NOT NULL DEFAULT 1 AFTER idordenador,
+ ADD cache varchar(500),
+ DROP INDEX idordenadornumpar,
+ ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
+
+ALTER TABLE ogAdmBD.imagenes MODIFY codpar int(8) NOT NULL;
+ALTER TABLE ogAdmBD.sistemasficheros MODIFY codpar int(8) NOT NULL;
+ALTER TABLE ogAdmBD.tipospar MODIFY codpar int(8) NOT NULL;
+INSERT INTO ogAdmBD.tipospar (codpar,tipopar,clonable) VALUES
+ (6, 'FAT16', 1),
+ (CONV('A5',16,10), 'FREEBSD', 1),
+ (CONV('A6',16,10), 'OPENBSD', 1),
+ (CONV('AF',16,10), 'HFS', 1),
+ (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('DA',16,10), 'DATA', 1),
+ (CONV('EE',16,10), 'GPT', 0),
+ (CONV('EF',16,10), 'EFI', 0),
+ (CONV('FB',16,10), 'VMFS', 1),
+ (CONV('0700',16,10), 'WINDOWS', 1),
+ (CONV('0C01',16,10), 'WIN-RESERV', 1),
+ (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
+ (CONV('7F01',16,10), 'CHROMEOS', 1),
+ (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
+ (CONV('8200',16,10), 'LINUX-SWAP', 0),
+ (CONV('8300',16,10), 'LINUX', 1),
+ (CONV('8301',16,10), 'LINUX-RESERV', 1),
+ (CONV('8E00',16,10), 'LINUX-LVM', 1),
+ (CONV('A500',16,10), 'FREEBSD-DISK', 0),
+ (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
+ (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
+ (CONV('A503',16,10), 'FREEBSD', 1),
+ (CONV('AF00',16,10), 'HFS', 1),
+ (CONV('AF01',16,10), 'HFS-RAID', 1),
+ (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('BF00',16,10), 'SOLARIS', 1),
+ (CONV('BF01',16,10), 'SOLARIS', 1),
+ (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
+ (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
+ (CONV('BF04',16,10), 'SOLARIS', 1),
+ (CONV('BF05',16,10), 'SOLARIS', 1),
+ (CONV('CA00',16,10), 'CACHE', 0),
+ (CONV('EF00',16,10), 'EFI', 0),
+ (CONV('EF01',16,10), 'MBR', 0),
+ (CONV('EF02',16,10), 'BIOS-BOOT', 0),
+ (CONV('FD00',16,10), 'LINUX-RAID', 1),
+ (CONV('FFFF',16,10), 'UNKNOWN', 1);
+
+ALTER TABLE ogAdmBD.ordenadores ADD fotoord VARCHAR (250) NOT NULL;
+
+UPDATE ogAdmBD.aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
+
diff --git a/admin/Database/ogAdmBD-1.0.2-1.0.3.sql b/admin/Database/ogAdmBD-1.0.2-1.0.3.sql
deleted file mode 100644
index b0403a6e..00000000
--- a/admin/Database/ogAdmBD-1.0.2-1.0.3.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-UPDATE ogAdmBD.entornos SET ipserveradm = 'SERVERIP' WHERE ipserveradm = '' LIMIT 1;
-UPDATE ogAdmBD.parametros SET tipopa = '1' WHERE idparametro = 30;
-UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
-UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
-
diff --git a/admin/Database/ogAdmBD-1.0.2-1.0.4.sql b/admin/Database/ogAdmBD-1.0.2-1.0.4.sql
new file mode 100644
index 00000000..a234a059
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.2-1.0.4.sql
@@ -0,0 +1,64 @@
+UPDATE ogAdmBD.entornos SET ipserveradm = 'SERVERIP' WHERE ipserveradm = '' LIMIT 1;
+
+UPDATE ogAdmBD.parametros SET tipopa = '1' WHERE idparametro = 30;
+
+UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
+UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
+
+ALTER TABLE ogAdmBD.menus MODIFY resolucion smallint(4);
+
+ALTER TABLE ogAdmBD.perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
+
+ALTER TABLE ogAdmBD.ordenadores_particiones
+ MODIFY codpar int(8) NOT NULL,
+ ADD numdisk tinyint(4) NOT NULL DEFAULT 1 AFTER idordenador,
+ ADD cache varchar(500),
+ DROP INDEX idordenadornumpar,
+ ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
+
+ALTER TABLE ogAdmBD.imagenes MODIFY codpar int(8) NOT NULL;
+ALTER TABLE ogAdmBD.sistemasficheros MODIFY codpar int(8) NOT NULL;
+ALTER TABLE ogAdmBD.tipospar MODIFY codpar int(8) NOT NULL;
+INSERT INTO ogAdmBD.tipospar (codpar,tipopar,clonable) VALUES
+ (6, 'FAT16', 1),
+ (CONV('A5',16,10), 'FREEBSD', 1),
+ (CONV('A6',16,10), 'OPENBSD', 1),
+ (CONV('AF',16,10), 'HFS', 1),
+ (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('DA',16,10), 'DATA', 1),
+ (CONV('EE',16,10), 'GPT', 0),
+ (CONV('EF',16,10), 'EFI', 0),
+ (CONV('FB',16,10), 'VMFS', 1),
+ (CONV('0700',16,10), 'WINDOWS', 1),
+ (CONV('0C01',16,10), 'WIN-RESERV', 1),
+ (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
+ (CONV('7F01',16,10), 'CHROMEOS', 1),
+ (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
+ (CONV('8200',16,10), 'LINUX-SWAP', 0),
+ (CONV('8300',16,10), 'LINUX', 1),
+ (CONV('8301',16,10), 'LINUX-RESERV', 1),
+ (CONV('8E00',16,10), 'LINUX-LVM', 1),
+ (CONV('A500',16,10), 'FREEBSD-DISK', 0),
+ (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
+ (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
+ (CONV('A503',16,10), 'FREEBSD', 1),
+ (CONV('AF00',16,10), 'HFS', 1),
+ (CONV('AF01',16,10), 'HFS-RAID', 1),
+ (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('BF00',16,10), 'SOLARIS', 1),
+ (CONV('BF01',16,10), 'SOLARIS', 1),
+ (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
+ (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
+ (CONV('BF04',16,10), 'SOLARIS', 1),
+ (CONV('BF05',16,10), 'SOLARIS', 1),
+ (CONV('CA00',16,10), 'CACHE', 0),
+ (CONV('EF00',16,10), 'EFI', 0),
+ (CONV('EF01',16,10), 'MBR', 0),
+ (CONV('EF02',16,10), 'BIOS-BOOT', 0),
+ (CONV('FD00',16,10), 'LINUX-RAID', 1),
+ (CONV('FFFF',16,10), 'UNKNOWN', 1);
+
+ALTER TABLE ogAdmBD.ordenadores ADD fotoord VARCHAR (250) NOT NULL;
+
+UPDATE ogAdmBD.aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
+
diff --git a/admin/Database/ogAdmBD-1.0.2a-1.0.3.sql b/admin/Database/ogAdmBD-1.0.2a-1.0.3.sql
deleted file mode 100644
index 0ea740a3..00000000
--- a/admin/Database/ogAdmBD-1.0.2a-1.0.3.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-UPDATE ogAdmBD.parametros SET tipopa = '1' WHERE idparametro = 30;
-UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
-UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
-
diff --git a/admin/Database/ogAdmBD-1.0.2a-1.0.4.sql b/admin/Database/ogAdmBD-1.0.2a-1.0.4.sql
new file mode 100644
index 00000000..c68106cb
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.2a-1.0.4.sql
@@ -0,0 +1,60 @@
+UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
+UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
+
+ALTER TABLE ogAdmBD.menus MODIFY resolucion smallint(4);
+
+ALTER TABLE ogAdmBD.perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
+
+ALTER TABLE ogAdmBD.ordenadores_particiones
+ MODIFY codpar int(8) NOT NULL,
+ ADD numdisk tinyint(4) NOT NULL DEFAULT 1 AFTER idordenador,
+ ADD cache varchar(500),
+ DROP INDEX idordenadornumpar,
+ ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
+
+ALTER TABLE ogAdmBD.imagenes MODIFY codpar int(8) NOT NULL;
+ALTER TABLE ogAdmBD.sistemasficheros MODIFY codpar int(8) NOT NULL;
+ALTER TABLE ogAdmBD.tipospar MODIFY codpar int(8) NOT NULL;
+INSERT INTO ogAdmBD.tipospar (codpar,tipopar,clonable) VALUES
+ (6, 'FAT16', 1),
+ (CONV('A5',16,10), 'FREEBSD', 1),
+ (CONV('A6',16,10), 'OPENBSD', 1),
+ (CONV('AF',16,10), 'HFS', 1),
+ (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('DA',16,10), 'DATA', 1),
+ (CONV('EE',16,10), 'GPT', 0),
+ (CONV('EF',16,10), 'EFI', 0),
+ (CONV('FB',16,10), 'VMFS', 1),
+ (CONV('0700',16,10), 'WINDOWS', 1),
+ (CONV('0C01',16,10), 'WIN-RESERV', 1),
+ (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
+ (CONV('7F01',16,10), 'CHROMEOS', 1),
+ (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
+ (CONV('8200',16,10), 'LINUX-SWAP', 0),
+ (CONV('8300',16,10), 'LINUX', 1),
+ (CONV('8301',16,10), 'LINUX-RESERV', 1),
+ (CONV('8E00',16,10), 'LINUX-LVM', 1),
+ (CONV('A500',16,10), 'FREEBSD-DISK', 0),
+ (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
+ (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
+ (CONV('A503',16,10), 'FREEBSD', 1),
+ (CONV('AF00',16,10), 'HFS', 1),
+ (CONV('AF01',16,10), 'HFS-RAID', 1),
+ (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('BF00',16,10), 'SOLARIS', 1),
+ (CONV('BF01',16,10), 'SOLARIS', 1),
+ (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
+ (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
+ (CONV('BF04',16,10), 'SOLARIS', 1),
+ (CONV('BF05',16,10), 'SOLARIS', 1),
+ (CONV('CA00',16,10), 'CACHE', 0),
+ (CONV('EF00',16,10), 'EFI', 0),
+ (CONV('EF01',16,10), 'MBR', 0),
+ (CONV('EF02',16,10), 'BIOS-BOOT', 0),
+ (CONV('FD00',16,10), 'LINUX-RAID', 1),
+ (CONV('FFFF',16,10), 'UNKNOWN', 1);
+
+ALTER TABLE ogAdmBD.ordenadores ADD fotoord VARCHAR (250) NOT NULL;
+
+UPDATE ogAdmBD.aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
+
diff --git a/admin/Database/ogAdmBD-1.0.3-1.0.4.sql b/admin/Database/ogAdmBD-1.0.3-1.0.4.sql
new file mode 100644
index 00000000..c7b05770
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.3-1.0.4.sql
@@ -0,0 +1,58 @@
+# Añadir resolución a menú de cliente.
+ALTER TABLE ogAdmBD.menus MODIFY resolucion smallint(4);
+# Añadir tipo de arranque Windows al perfil hardware.
+ALTER TABLE ogAdmBD.perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
+# Soportar particiones GPT y añadir información de caché.
+ALTER TABLE ogAdmBD.ordenadores_particiones
+ MODIFY codpar int(8) NOT NULL,
+ ADD numdisk tinyint(4) NOT NULL DEFAULT 1 AFTER idordenador,
+ ADD cache varchar(500),
+ DROP INDEX idordenadornumpar,
+ ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
+# Nuevos tipos de particiones y particiones GPT.
+ALTER TABLE ogAdmBD.imagenes MODIFY codpar int(8) NOT NULL;
+ALTER TABLE ogAdmBD.sistemasficheros MODIFY codpar int(8) NOT NULL;
+ALTER TABLE ogAdmBD.tipospar MODIFY codpar int(8) NOT NULL;
+INSERT INTO ogAdmBD.tipospar (codpar,tipopar,clonable) VALUES
+ (6, 'FAT16', 1),
+ (CONV('A5',16,10), 'FREEBSD', 1),
+ (CONV('A6',16,10), 'OPENBSD', 1),
+ (CONV('AF',16,10), 'HFS', 1),
+ (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('DA',16,10), 'DATA', 1),
+ (CONV('EE',16,10), 'GPT', 0),
+ (CONV('EF',16,10), 'EFI', 0),
+ (CONV('FB',16,10), 'VMFS', 1),
+ (CONV('0700',16,10), 'WINDOWS', 1),
+ (CONV('0C01',16,10), 'WIN-RESERV', 1),
+ (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
+ (CONV('7F01',16,10), 'CHROMEOS', 1),
+ (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
+ (CONV('8200',16,10), 'LINUX-SWAP', 0),
+ (CONV('8300',16,10), 'LINUX', 1),
+ (CONV('8301',16,10), 'LINUX-RESERV', 1),
+ (CONV('8E00',16,10), 'LINUX-LVM', 1),
+ (CONV('A500',16,10), 'FREEBSD-DISK', 0),
+ (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
+ (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
+ (CONV('A503',16,10), 'FREEBSD', 1),
+ (CONV('AF00',16,10), 'HFS', 1),
+ (CONV('AF01',16,10), 'HFS-RAID', 1),
+ (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('BF00',16,10), 'SOLARIS', 1),
+ (CONV('BF01',16,10), 'SOLARIS', 1),
+ (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
+ (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
+ (CONV('BF04',16,10), 'SOLARIS', 1),
+ (CONV('BF05',16,10), 'SOLARIS', 1),
+ (CONV('CA00',16,10), 'CACHE', 0),
+ (CONV('EF00',16,10), 'EFI', 0),
+ (CONV('EF01',16,10), 'MBR', 0),
+ (CONV('EF02',16,10), 'BIOS-BOOT', 0),
+ (CONV('FD00',16,10), 'LINUX-RAID', 1),
+ (CONV('FFFF',16,10), 'UNKNOWN', 1);
+# Añadir foto de ordenador.
+ALTER TABLE ogAdmBD.ordenadores ADD fotoord VARCHAR (250) NOT NULL;
+# Actualizar localización de foto de aula (eliminar el camino).
+UPDATE ogAdmBD.aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
+
diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql
index 3491688b..b1faabdf 100644
--- a/admin/Database/ogAdmBD.sql
+++ b/admin/Database/ogAdmBD.sql
@@ -410,7 +410,7 @@ CREATE TABLE IF NOT EXISTS `imagenes` (
`grupoid` int(11) DEFAULT NULL,
`idrepositorio` int(11) NOT NULL,
`numpar` smallint(6) NOT NULL,
- `codpar` smallint(6) NOT NULL,
+ `codpar` int(8) NOT NULL,
PRIMARY KEY (`idimagen`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -436,7 +436,7 @@ CREATE TABLE IF NOT EXISTS `menus` (
`grupoid` int(11) NOT NULL DEFAULT '0',
`htmlmenupub` varchar(250) DEFAULT NULL,
`htmlmenupri` varchar(250) DEFAULT NULL,
- `resolucion` tinyint(4) DEFAULT NULL,
+ `resolucion` SMALLINT(4) DEFAULT NULL,
PRIMARY KEY (`idmenu`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -476,6 +476,7 @@ CREATE TABLE IF NOT EXISTS `ordenadores` (
`arranque` VARCHAR( 30 ) NOT NULL DEFAULT '1',
`netiface` enum('eth0','eth1','eth2') DEFAULT 'eth0',
`netdriver` VARCHAR( 30 ) NOT NULL DEFAULT 'generic',
+ `fotoord` VARCHAR( 250 ) NOT NULL,
PRIMARY KEY (`idordenador`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -489,14 +490,16 @@ CREATE TABLE IF NOT EXISTS `ordenadores` (
CREATE TABLE IF NOT EXISTS `ordenadores_particiones` (
`idordenador` int(11) NOT NULL,
+ `numdisk` tinyint(4) NOT NULL,
`numpar` tinyint(4) NOT NULL,
- `codpar` smallint(11) NOT NULL,
+ `codpar` int(8) NOT NULL,
`tamano` int(11) NOT NULL,
`idsistemafichero` smallint(11) NOT NULL,
`idnombreso` smallint(11) NOT NULL,
`idimagen` int(11) NOT NULL,
`idperfilsoft` int(11) NOT NULL,
- UNIQUE KEY `idordenadornumpar` (`idordenador`,`numpar`)
+ `cache` varchar(500) NOT NULL,
+ UNIQUE KEY `idordenadornumdisknumpar` (`idordenador`,`numdisk`,`numpar`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
@@ -564,6 +567,7 @@ CREATE TABLE IF NOT EXISTS `perfileshard` (
`comentarios` text,
`grupoid` int(11) DEFAULT NULL,
`idcentro` int(11) NOT NULL,
+ `winboot` enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot',
PRIMARY KEY (`idperfilhard`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -727,7 +731,7 @@ CREATE TABLE IF NOT EXISTS `sistemasficheros` (
`idsistemafichero` smallint(11) NOT NULL AUTO_INCREMENT,
`descripcion` varchar(50) NOT NULL DEFAULT '',
`nemonico` varchar(16) DEFAULT NULL,
- `codpar` smallint(6) NOT NULL,
+ `codpar` int(8) NOT NULL,
PRIMARY KEY (`idsistemafichero`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -875,7 +879,7 @@ INSERT INTO `tiposos` (`idtiposo`, `tiposo`, `idplataforma`) VALUES
--
CREATE TABLE IF NOT EXISTS `tipospar` (
- `codpar` smallint(4) NOT NULL,
+ `codpar` int(8) NOT NULL,
`tipopar` varchar(250) NOT NULL,
`clonable` tinyint(4) NOT NULL,
UNIQUE KEY `codpar` (`codpar`)
@@ -889,18 +893,55 @@ INSERT INTO `tipospar` (`codpar`, `tipopar`, `clonable`) VALUES
(0, 'EMPTY', 0),
(1, 'FAT12', 1),
(5, 'EXTENDED', 0),
+(6, 'FAT16', 1),
(7, 'NTFS', 1),
-(11, 'FAT32', 1),
-(17, 'HFAT12', 1),
-(22, 'HFAT16', 1),
-(23, 'HNTFS', 1),
-(27, 'HFAT32', 1),
-(130, 'LINUX-SWAP', 0),
-(131, 'LINUX', 1),
-(142, 'LINUX-LVM', 1),
-(191, 'SOLARIS', 1),
-(202, 'CACHE', 0),
-(253, 'LINUX-RAID', 1);
+(CONV('0B',16,10), 'FAT32', 1),
+(CONV('11',16,10), 'HFAT12', 1),
+(CONV('16',16,10), 'HFAT16', 1),
+(CONV('17',16,10), 'HNTFS', 1),
+(CONV('1B',16,10), 'HFAT32', 1),
+(CONV('82',16,10), 'LINUX-SWAP', 0),
+(CONV('83',16,10), 'LINUX', 1),
+(CONV('8E',16,10), 'LINUX-LVM', 1),
+(CONV('A5',16,10), 'FREEBSD', 1),
+(CONV('A6',16,10), 'OPENBSD', 1),
+(CONV('AF',16,10), 'HFS', 1),
+(CONV('BE',16,10), 'SOLARIS-BOOT', 1),
+(CONV('BF',16,10), 'SOLARIS', 1),
+(CONV('CA',16,10), 'CACHE', 0),
+(CONV('DA',16,10), 'DATA', 1),
+(CONV('EE',16,10), 'GPT', 0),
+(CONV('EF',16,10), 'EFI', 0),
+(CONV('FB',16,10), 'VMFS', 1),
+(CONV('FD',16,10), 'LINUX-RAID', 1),
+(CONV('0700',16,10), 'WINDOWS', 1),
+(CONV('0C01',16,10), 'WIN-RESERV', 1),
+(CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
+(CONV('7F01',16,10), 'CHROMEOS', 1),
+(CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
+(CONV('8200',16,10), 'LINUX-SWAP', 0),
+(CONV('8300',16,10), 'LINUX', 1),
+(CONV('8301',16,10), 'LINUX-RESERV', 1),
+(CONV('8E00',16,10), 'LINUX-LVM', 1),
+(CONV('A500',16,10), 'FREEBSD-DISK', 0),
+(CONV('A501',16,10), 'FREEBSD-BOOT', 1),
+(CONV('A502',16,10), 'FREEBSD-SWAP', 0),
+(CONV('A503',16,10), 'FREEBSD', 1),
+(CONV('AF00',16,10), 'HFS', 1),
+(CONV('AF01',16,10), 'HFS-RAID', 1),
+(CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
+(CONV('BF00',16,10), 'SOLARIS', 1),
+(CONV('BF01',16,10), 'SOLARIS', 1),
+(CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
+(CONV('BF03',16,10), 'SOLARIS-DISK', 1),
+(CONV('BF04',16,10), 'SOLARIS', 1),
+(CONV('BF05',16,10), 'SOLARIS', 1),
+(CONV('CA00',16,10), 'CACHE', 0),
+(CONV('EF00',16,10), 'EFI', 0),
+(CONV('EF01',16,10), 'MBR', 0),
+(CONV('EF02',16,10), 'BIOS-BOOT', 0),
+(CONV('FD00',16,10), 'LINUX-RAID', 1),
+(CONV('FFFF',16,10), 'UNKNOWN', 1);
-- --------------------------------------------------------
diff --git a/admin/Interface/RestaurarImagen b/admin/Interface/RestaurarImagen
index 1ee08bee..6fcf8d66 100755
--- a/admin/Interface/RestaurarImagen
+++ b/admin/Interface/RestaurarImagen
@@ -54,7 +54,7 @@ echo "$MSG_INTERFACE_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
# Si el origen(pariticion) esta bloqueada salir.
-echo "TODO comprobando si esta bloqueado el $1 $2" | tee -a $OGLOGSESSION $OGLOGFILE
+echo "[1] TODO: $MSG_HEL_ogIsLocked: ogIsLocked $1 $2" | tee -a $OGLOGSESSION $OGLOGFILE
#if ogIsLocked $1 $2; then
# ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION, $1 $2"
# exit $?
@@ -66,9 +66,10 @@ REPO=${4:-"REPO"}
[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
[ "$REPO" == "CACHE" ] && REPO="CACHE"
-#Informacioin previa de la imagen
-IMGSIZE=$(ls -s `ogGetPath $REPO $3.img`| cut -f1 -d" ")
-IMGOS=$(ogGetImageInfo `ogGetPath $REPO $3.img`)
+#Informacion previa de la imagen
+IMGOS=$(ogGetImageInfo `ogGetPath $REPO $3.img`) || exit $(echo "ERROR: $OG_ERR_NOTFOUND $MSG_ERR_NOTFOUND, IMAGEN $REPO $3" | tee -a $OGLOGSESSION $OGLOGFILE; ogRaiseError $OG_ERR_NOTFOUND "$MSG_ERR_NOTFOUND, $REPO $3"; echo $?)
+#IMGOS=$(ogGetImageInfo `ogGetPath $REPO $3.img`) || exit $(ogRaiseError $OG_ERR_NOTFOUND "$MSG_ERR_NOTFOUND, $REPO $3"; echo $?)
+IMGSIZE=$(ls -s `ogGetPath $REPO $3.img`| cut -f1 -d" ")
echo "[1] IMG-FILE=$3 SIZE=$IMGSIZE (KB) METADATA=$IMGOS" | tee -a $OGLOGSESSION $OGLOGFILE
diff --git a/admin/Interface/getConfiguration b/admin/Interface/getConfiguration
index e8ef70c2..53ec9fa6 100755
--- a/admin/Interface/getConfiguration
+++ b/admin/Interface/getConfiguration
@@ -7,11 +7,11 @@
#_______________________________________________________________________________________________________________________________
particiones=$(ogGetPartitionsNumber 1) # Incluir todas las particiones
-cfg="0::::$(ogGetDiskSize 1);" # e información de disco (partición 0)
+cfg="0::::$(ogGetDiskSize 1);" # e información de disco (partición 0)
for ((par=1;par<=$particiones;par++)); do
# Código del identificador de tipo de partición
- cod=$(ogGetPartitionId 1 $par)
+ cod=$(ogGetPartitionId 1 $par 2>/dev/null)
# Tipo de partición o sistema de fichero
fsi=$(getFsType 1 $par 2>/dev/null)
fsi=${fsi:-"EMPTY"}
@@ -19,11 +19,11 @@ for ((par=1;par<=$particiones;par++)); do
tam=$(ogGetPartitionSize 1 $par 2>/dev/null)
tam=${tam:-"0"}
# Sistema de fichero instalado
- if [ $cod == 82 ]; then
- soi=" "
- else
- soi=$(getOsVersion 1 $par 2>/dev/null | cut -f2 -d:)
- fi
+ case "$cod" in
+ ""|82|8200|A502|BF02|EE|EF0[012])
+ soi=" " ;;
+ *) soi=$(getOsVersion 1 $par 2>/dev/null | cut -f2 -d:) ;;
+ esac
cfg="$cfg$par:$cod:$fsi:$soi:$tam;"
done
@@ -32,9 +32,8 @@ echo $cfg | awk '{
n=split($0,sep,";");
for (i=1; i<n; i++){
split (sep[i],dua,":");
- printf ("par=%s\tcpt=%s\tfsi=%s\tsoi=%s\ttam=%s\n",
+ printf ("disk=1\tpar=%s\tcpt=%s\tfsi=%s\tsoi=%s\ttam=%s\n",
dua[1],dua[2],dua[3],dua[4],dua[5]);
}
}'
-
diff --git a/admin/Sources/Clients/ogAdmLnxClient/Makefile b/admin/Sources/Clients/ogAdmLnxClient/Makefile
new file mode 100644
index 00000000..bc2fe3a9
--- /dev/null
+++ b/admin/Sources/Clients/ogAdmLnxClient/Makefile
@@ -0,0 +1,34 @@
+# makefile
+
+# Nombre del proyecto
+PROYECTO := ogAdmLnxClient
+
+# Directorios y librerias
+DIRS :=
+LIBS := -static
+
+# Opciones de compilacion
+#OPCS := -m32 -O0 -g -Wall # Depuracion
+OPCS := -m32 -O3 -Wall # Optimizacion
+
+# Ficheros objetos
+OBJS := sources/ogAdmLnxClient.o
+
+all: $(PROYECTO)
+
+$(PROYECTO): $(OBJS)
+ g++ $(OPCS) $(DIRS) $(LIBS) $(OBJS) -o $(PROYECTO)
+ strip $(PROYECTO) # Optimizacion
+
+clean:
+ rm $(PROYECTO) $(OBJS)
+
+sources/%.o: sources/%.cpp
+ g++ $(OPCS) -c -o"$@" "$<"
+
+sources/%.o: sources/%.c
+ gcc $(OPCS) -I ../../Includes -c -o"$@" "$<"
+
+
+
+
diff --git a/admin/Sources/Clients/ogAdmLnxClient/ogAdmLnxClient.cfg b/admin/Sources/Clients/ogAdmLnxClient/ogAdmLnxClient.cfg
new file mode 100644
index 00000000..80d69686
--- /dev/null
+++ b/admin/Sources/Clients/ogAdmLnxClient/ogAdmLnxClient.cfg
@@ -0,0 +1,4 @@
+ServidorAdm=Direccin IP del servidor de administracin
+PUERTO=Puerto del servidor de administracin
+IPLOCAL=Direccin IP local
+
diff --git a/admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.c b/admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.c
new file mode 100644
index 00000000..8c79ce8e
--- /dev/null
+++ b/admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.c
@@ -0,0 +1,438 @@
+// ********************************************************************************************************
+// Cliernte: ogAdmLnxClient
+// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creación: Febrero-2012
+// Fecha Última modificación: Febrero-2012
+// Nombre del fichero: ogAdmLnxClient.c
+// Descripción :Este fichero implementa el cliente windows del sistema
+// ********************************************************************************************************
+#include "ogAdmLnxClient.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 cliente vacío
+ return (FALSE);
+ }
+ FILE *fcfg;
+ int 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 cliente
+ 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);
+ }
+ lSize=fread(buffer, 1, lSize, fcfg); // Lee contenido del fichero
+ buffer[lSize]=CHARNULL;
+ fclose(fcfg);
+
+ /* Inicializar variables globales */
+ servidoradm[0]=CHARNULL;
+ puerto[0] = CHARNULL;
+ IPlocal[0]=CHARNULL;
+
+ 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]), "IPLOCAL");
+ if (resul == 0)
+ strcpy(IPlocal, dualparametro[1]);
+ }
+
+ if (servidoradm[0] == CHARNULL) {
+ errorLog(modulo,4, FALSE); // Falta parámetro SERVIDORADM
+ return (FALSE);
+ }
+
+ if (puerto[0] == CHARNULL) {
+ errorLog(modulo,5, FALSE); // Falta parámetro PUERTO
+ return (FALSE);
+ }
+ if (IPlocal[0] == CHARNULL) {
+ errorLog(modulo, 92, FALSE); // Falta parámetro IPLOCAL
+ return (FALSE);
+ }
+ return (TRUE);
+}
+//______________________________________________________________________________________________________
+// Función: InclusionClienteWinLnx
+// Descripción:
+// Abre una sesión en el servidor de administración y registra al cliente en el sistema
+// Parámetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+//______________________________________________________________________________________________________
+BOOLEAN InclusionClienteWinLnx(TRAMA* ptrTrama)
+{
+ int lon;
+ SOCKET socket_c;
+ char modulo[] = "InclusionClienteWinLnx()";
+
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=InclusionClienteWinLnx\r"); // Nombre de la función a ejecutar en el servidor
+
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_PETICION)){
+ errorLog(modulo,37,FALSE);
+ return(FALSE);
+ }
+ ptrTrama=recibeMensaje(&socket_c);
+ if(!ptrTrama){
+ errorLog(modulo,22,FALSE);
+ return(FALSE);
+ }
+ close(socket_c);
+
+ if(!gestionaTrama(ptrTrama)){ // Análisis de la trama
+ errorLog(modulo,39,FALSE);
+ return(FALSE);
+ }
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Función: RESPUESTA_InclusionClienteWinLnx
+//
+// Descripción:
+// Respuesta del servidor de administración a la petición de inicio
+// enviando los datos identificativos del cliente
+// Parámetros:
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+//______________________________________________________________________________________________________
+BOOLEAN RESPUESTA_InclusionClienteWinLnx(TRAMA* ptrTrama)
+{
+ char* res;
+ char modulo[] = "RESPUESTA_InclusionClienteWinLnx()";
+ int err;
+
+ res=copiaParametro("res",ptrTrama); // Resultado del proceso de inclusión
+ err=(int)atoi(res); // Código de error devuelto por el servidor
+ if(err>0){ // Error en el proceso de inclusión
+ errorLog(modulo,41,FALSE);
+ errorLog(modulo,err,FALSE);
+ return (FALSE);
+ }
+ strcpy(idordenador,copiaParametro("ido",ptrTrama)); // Identificador del ordenador
+ strcpy(nombreordenador,copiaParametro("npc",ptrTrama)); // Nombre del ordenador
+
+ if(idordenador==NULL || nombreordenador==NULL){
+ errorLog(modulo,40,FALSE);
+ return (FALSE);
+ }
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Función: ProcesaComandos
+//
+// Descripción:
+// Espera comando desde el Servidor de Administración para ejecutarlos
+// Parámetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+void procesaComandos(TRAMA* ptrTrama)
+{
+ int lon;
+ SOCKET socket_c;
+ char modulo[] = "procesaComandos()";
+
+ initParametros(ptrTrama,0);
+ while(TRUE){
+ lon=sprintf(ptrTrama->parametros,"nfn=DisponibilidadComandos\r");
+ lon+=sprintf(ptrTrama->parametros+lon,"tpc=%s\r",CLIENTE_LNX); // Activar disponibilidad
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_INFORMACION)){
+ errorLog(modulo,43,FALSE);
+ return;
+ }
+ infoLog(19); // Disponibilidad de cliente activada
+ ptrTrama=recibeMensaje(&socket_c);
+ if(!ptrTrama){
+ errorLog(modulo,46,FALSE);
+ return;
+ }
+
+ close(socket_c);
+
+ if(!gestionaTrama(ptrTrama)){ // Análisis de la trama
+ errorLog(modulo,39,FALSE);
+ return;
+ }
+ }
+}
+//_____________________________________________________________________________________________________
+// Función: Apagar
+//
+// Descripción:
+// Apaga el cliente
+// Parámetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+//_____________________________________________________________________________________________________
+BOOLEAN Apagar(TRAMA* ptrTrama)
+{
+ int lon;
+ char *ids,msglog[LONSTD];
+ char modulo[] = "Apagar()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ ids=copiaParametro("ids",ptrTrama);
+
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Apagar");
+ respuestaEjecucionComando(ptrTrama,0,ids);
+
+ system("shutdown -h now");
+ return(TRUE);
+}
+//_____________________________________________________________________________________________________
+// Función: Reiniciar
+//
+// Descripción:
+// Apaga el cliente
+// Parámetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún errorservidoradm
+//_____________________________________________________________________________________________________
+BOOLEAN Reiniciar(TRAMA* ptrTrama)
+{
+ int lon;
+ char *ids,msglog[LONSTD];
+ char modulo[] = "Reiniciar()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ ids=copiaParametro("ids",ptrTrama);
+
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Reiniciar");
+ respuestaEjecucionComando(ptrTrama,0,ids);
+
+ system("shutdown -r now");
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Función: Sondeo
+//
+// Descripción:
+// Envía al servidor una confirmación de que está dentro del sistema
+// Parámetros:
+// ptrTrama: contenido del mensajede
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+//______________________________________________________________________________________________________
+BOOLEAN Sondeo(TRAMA* ptrTrama)
+{
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Función: respuestaEjecucionComando
+//
+// Descripción:
+// Envia una respuesta a una ejecucion de comando al servidor de Administración
+// Parámetros:
+// - ptrTrama: contenido del mensaje
+// - res: Resultado de la ejecución (Código de error devuelto por el script ejecutado)
+// - ids: Identificador de la sesion (En caso de no haber seguimiento es NULO)
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN respuestaEjecucionComando(TRAMA* ptrTrama,int res,char *ids)
+{
+ int lon;
+ SOCKET socket_c;
+ char modulo[] = "respuestaEjecucionComando()";
+
+ lon=strlen(ptrTrama->parametros);
+ if(ids){ // Existe seguimiento
+ lon+=sprintf(ptrTrama->parametros+lon,"ids=%s\r",ids); // Añade identificador de la sesión
+ }
+ if (res==0){ // Resultado satisfactorio
+ lon+=sprintf(ptrTrama->parametros+lon,"res=%s\r","1");
+ lon+=sprintf(ptrTrama->parametros+lon,"der=%s\r","");
+ }
+ else{ // Algún error
+ lon+=sprintf(ptrTrama->parametros+lon,"res=%s\r","2");
+ lon+=sprintf(ptrTrama->parametros+lon,"der=%s\r",tbErrores[res]);// Descripción del error
+ }
+ if(!(enviaMensajeServidor(&socket_c,ptrTrama,MSG_NOTIFICACION))){
+ errorLog(modulo,44,FALSE);
+ return(FALSE);
+ }
+ close(socket_c);
+ return(TRUE);
+}
+// ________________________________________________________________________________________________________
+// Función: gestionaTrama
+//
+// Descripción:
+// Procesa las tramas recibidas.servidoradm
+// Parametros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN gestionaTrama(TRAMA *ptrTrama)
+{
+ int i, res;
+ char *nfn;
+ char modulo[] = "gestionaTrama()";
+
+ INTROaFINCAD(ptrTrama);
+ nfn = copiaParametro("nfn", ptrTrama); // Toma nombre de función
+ for (i = 0; i < MAXIMAS_FUNCIONES; i++) { // Recorre funciones que procesan las tramas
+ res = strcmp(tbfuncionesClient[i].nf, nfn);
+ if (res == 0) { // Encontrada la función que procesa el mensaje
+ return(tbfuncionesClient[i].fptr(ptrTrama)); // Invoca la función
+ }
+ }
+ errorLog(modulo, 18, FALSE);
+ return (FALSE);
+}
+//______________________________________________________________________________________________________
+// Función: enviaMensajeServidor
+//
+// Descripción:
+// Envia un mensaje al servidor de Administración
+// Parámetros:
+// - socket_c: (Salida) Socket utilizado para el envío
+// - ptrTrama: contenido del mensaje
+// - tipo: Tipo de mensaje
+// C=Comando, N=Respuesta a un comando, P=Peticion,R=Respuesta a una petición, I=Informacion
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN enviaMensajeServidor(SOCKET *socket_c,TRAMA *ptrTrama,char tipo)
+{
+ int lon;
+ char modulo[] = "enviaMensajeServidor()";
+
+ *socket_c=abreConexion();
+ if(*socket_c==INVALID_SOCKET){
+ errorLog(modulo,38,FALSE); // Error de conexión con el servidor
+ return(FALSE);
+ }
+ ptrTrama->arroba='@'; // Cabecera de la trama
+ strncpy(ptrTrama->identificador,"JMMLCAMDJ_MCDJ",14); // identificador de la trama
+ ptrTrama->tipo=tipo; // Tipo de mensaje
+ lon=strlen(ptrTrama->parametros); // Compone la trama
+ lon+=sprintf(ptrTrama->parametros+lon,"iph=%s\r",IPlocal); // Ip del ordenador
+ lon+=sprintf(ptrTrama->parametros+lon,"ido=%s\r",idordenador); // Identificador del ordenador
+ lon+=sprintf(ptrTrama->parametros+lon,"npc=%s\r",nombreordenador); // Nombre del ordenador
+
+ if (!mandaTrama(socket_c,ptrTrama)) {
+ errorLog(modulo,26,FALSE);
+ return (FALSE);
+ }
+ return(TRUE);
+}
+// ********************************************************************************************************
+// PROGRAMA PRINCIPAL (CLIENTE)
+// ********************************************************************************************************
+int main(int argc, char *argv[])
+{
+ TRAMA *ptrTrama;
+ char modulo[] = "main()";
+
+ ptrTrama=(TRAMA *)reservaMemoria(sizeof(TRAMA));
+ if (ptrTrama == NULL) { // No hay memoria suficiente para el bufer de las tramas
+ errorLog(modulo, 3, FALSE);
+ exit(EXIT_FAILURE);
+ }
+ /*--------------------------------------------------------------------------------------------------------
+ Validación de parámetros de ejecución y fichero de configuración
+ ---------------------------------------------------------------------------------------------------------*/
+ /*--------------------------------------------------------------------------------------------------------
+ Validación de parámetros de ejecución y fichero de configuración
+ ---------------------------------------------------------------------------------------------------------*/
+ if (!validacionParametros(argc, argv,6)) // Valida parámetros de ejecución
+ exit(EXIT_FAILURE);
+
+ if (!tomaConfiguracion(szPathFileCfg)) // Toma parametros de configuración
+ exit(EXIT_FAILURE);
+
+ /*--------------------------------------------------------------------------------------------------------
+ Carga catálogo de funciones que procesan las tramas
+ ---------------------------------------------------------------------------------------------------------*/
+ int cf = 0;
+
+ strcpy(tbfuncionesClient[cf].nf, "RESPUESTA_InclusionClienteWinLnx");
+ tbfuncionesClient[cf++].fptr = &RESPUESTA_InclusionClienteWinLnx;
+
+ strcpy(tbfuncionesClient[cf].nf, "Apagar");
+ tbfuncionesClient[cf++].fptr = &Apagar;
+
+ strcpy(tbfuncionesClient[cf].nf, "Reiniciar");
+ tbfuncionesClient[cf++].fptr = &Reiniciar;
+
+ strcpy(tbfuncionesClient[cf].nf, "Sondeo");
+ tbfuncionesClient[cf++].fptr = &Sondeo;
+
+ /*--------------------------------------------------------------------------------------------------------
+ Inicio de sesión
+ ---------------------------------------------------------------------------------------------------------*/
+ infoLog(1); // Inicio de sesión
+ infoLog(3); // Abriendo sesión en el servidor de Administración;
+ /*--------------------------------------------------------------------------------------------------------
+ Inclusión del cliente en el sistema
+ ---------------------------------------------------------------------------------------------------------*/
+ if(!InclusionClienteWinLnx(ptrTrama)){ // Ha habido algún problema al abrir sesión
+ errorLog(modulo,0,FALSE);
+ exit(EXIT_FAILURE);
+ }
+ infoLog(4); // Cliente iniciado
+ procesaComandos(ptrTrama); // Bucle para procesar comandos interactivos
+ exit(EXIT_SUCCESS);
+}
diff --git a/admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.h b/admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.h
new file mode 100644
index 00000000..8371d2e4
--- /dev/null
+++ b/admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.h
@@ -0,0 +1,54 @@
+// ********************************************************************************************************
+// Cliernte: ogAdmLnxClient
+// 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: ogAdmLnxClient.h
+// Descripción :Este fichero implementa el cliente general del sistema
+// ********************************************************************************************************
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <unistd.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <signal.h>
+#include "ogAdmLib.h"
+// ________________________________________________________________________________________________________
+// Variables globales
+// ________________________________________________________________________________________________________
+char idordenador[LONPRM]; // Identificador del ordenador
+char nombreordenador[LONPRM]; // Nombre del ordenador
+
+char servidoradm[LONPRM]; // Dirección IP del servidor de administración
+char puerto[LONPRM]; // Puerto de comunicación
+char IPlocal[LONPRM]; // Path donde está la interface entre la administración y el módulo de clonación
+
+
+typedef struct{ // Estructura usada para referenciar las funciones que procesan las tramas
+ char nf[LONFUN]; // Nombre de la función
+ BOOLEAN (*fptr)(TRAMA*); // Puntero a la función que procesa la trama
+}MSGFUN;
+MSGFUN tbfuncionesClient[MAXIMAS_FUNCIONES];
+// ________________________________________________________________________________________________________
+// Prototipo de funciones
+// ________________________________________________________________________________________________________
+
+void procesaComandos(TRAMA*);
+BOOLEAN gestionaTrama(TRAMA *);
+BOOLEAN InclusionClienteWinLnx();
+BOOLEAN RESPUESTA_InclusionClienteWinLnx(TRAMA *);
+BOOLEAN respuestaEjecucionComando(TRAMA *,int,char*);
+
+BOOLEAN Apagar(TRAMA *);
+BOOLEAN Reiniciar(TRAMA *);
+BOOLEAN Sondeo(TRAMA *);
+
+BOOLEAN enviaMensajeServidor(SOCKET *,TRAMA *,char);
+
diff --git a/admin/Sources/Clients/ogAdmWinClient/Readme b/admin/Sources/Clients/ogAdmWinClient/Readme
new file mode 100644
index 00000000..6585e818
--- /dev/null
+++ b/admin/Sources/Clients/ogAdmWinClient/Readme
@@ -0,0 +1,25 @@
+ El cliente opengnsys para Windows es una aplicacin que se instala como un servicio, de esta manera, no es necesario
+ abrir sesin en este sistema operativo para que la mquina cliente se comunique con el administrador de opengnsys.
+ Actualmente slo responde a los comandos "Apagar" y "Reiniciar".
+
+
+Para INSTALAR esta aplicacin como un servicio windows hay que seguir los siguentes pasos:
+
+1) Copiar el ejecutable ogAdmWinClient.exe en una carpeta cualquiera --se aconseja la carpeta c:\Windows\system32\opengnsys, crendola previamente--.
+2) Abrir una consola y posicionarse en la carpeta seleccionada
+3) Teclear:
+ c>ogAdmClient t -install -s [IP servidor Opengnsys] -p [puerto] -i [IP local usada para comunicaciones con el servidor]
+
+Este servicio se da de alta en la base de datos de servicios de Windows con estado "detenido" y "manual" por lo que es necesario abrir la consola
+del administrador de servicios de Windows para iniciarlos y modificar las propiedades para que arranquen automticamente al iniciarse Windows.
+
+
+ Para DESINTALAR esta aplicacin una vez que se ha instalado como servicio hay que hacer:
+ 1) Abrir una consola y posicionarse en la carpeta donde est el ejecutable del servicio
+ 2) Teclear:
+ c>ogAdmClient t -remove
+
+
+
+*** El fichero de log del servicio se llama por defecto ogAdmWinClient.log y estar en el caso de que la carpeta del ejecutable sea c:\Windows\system32\opengnsys,
+ este archivo estar en c:\Windows\system32\
diff --git a/admin/Sources/Clients/ogAdmWinClient/sources/ogAdmWinClient.cpp b/admin/Sources/Clients/ogAdmWinClient/sources/ogAdmWinClient.cpp
new file mode 100644
index 00000000..2f164d41
--- /dev/null
+++ b/admin/Sources/Clients/ogAdmWinClient/sources/ogAdmWinClient.cpp
@@ -0,0 +1,713 @@
+// ********************************************************************************************************
+// Cliente: ogAdmWinClient
+// Autor: Jos Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creacin: Febrero-2012
+// Fecha ltima modificacin: Febrero-2012
+// Nombre del fichero: ogAdmWinClient.cpp
+// Descripcin :Este fichero implementa el cliente windows del sistema
+// ********************************************************************************************************
+#include "ogAdmWinClient.h"
+#include "ogAdmLib.c"
+#include "registrow.c"
+//________________________________________________________________________________________________________
+// Funcin: tomaConfiguracion
+//
+// Descripcin:
+// Lee el fichero de configuracin del servicio
+// Parmetros:
+// filecfg : Ruta completa al fichero de configuracin
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//________________________________________________________________________________________________________
+BOOLEAN tomaConfiguracion(char* filecfg)
+{
+ char modulo[] = "tomaConfiguracion()";
+
+ if (filecfg == NULL || strlen(filecfg) == 0) {
+ errorLog(modulo, 1, FALSE); // Fichero de configuracin del cliente vaco
+ return (FALSE);
+ }
+ FILE *fcfg;
+ int 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 configuracin del cliente
+ return (FALSE);
+ }
+
+ fseek(fcfg, 0, SEEK_END);
+ lSize = ftell(fcfg); // Obtiene tamao 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);
+ }
+ lSize=fread(buffer, 1, lSize, fcfg); // Lee contenido del fichero
+ buffer[lSize]=CHARNULL;
+ fclose(fcfg);
+
+ /* Inicializar variables globales */
+ servidoradm[0]=CHARNULL;
+ puerto[0] = CHARNULL;
+ IPlocal[0]=CHARNULL;
+
+ 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]), "IPLOCAL");
+ if (resul == 0)
+ strcpy(IPlocal, dualparametro[1]);
+ }
+
+ if (servidoradm[0] == CHARNULL) {
+ errorLog(modulo,4, FALSE); // Falta parmetro SERVIDORADM
+ return (FALSE);
+ }
+
+ if (puerto[0] == CHARNULL) {
+ errorLog(modulo,5, FALSE); // Falta parmetro PUERTO
+ return (FALSE);
+ }
+ if (IPlocal[0] == CHARNULL) {
+ errorLog(modulo, 92, FALSE); // Falta parmetro IPLOCAL
+ return (FALSE);
+ }
+ return (TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: InclusionClienteWinLnx
+// Descripcin:
+// Abre una sesin en el servidor de administracin y registra al cliente en el sistema
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN InclusionClienteWinLnx(TRAMA* ptrTrama)
+{
+ int lon;
+ SOCKET socket_c;
+ char modulo[] = "InclusionClienteWinLnx()";
+
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=InclusionClienteWinLnx\r"); // Nombre de la funcin a ejecutar en el servidor
+
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_PETICION)){
+ errorLog(modulo,37,FALSE);
+ return(FALSE);
+ }
+ ptrTrama=recibeMensaje(&socket_c);
+ if(!ptrTrama){
+ errorLog(modulo,22,FALSE);
+ return(FALSE);
+ }
+ closesocket(socket_c);
+
+ if(!gestionaTrama(ptrTrama)){ // Anlisis de la trama
+ errorLog(modulo,39,FALSE);
+ return(FALSE);
+ }
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: RESPUESTA_InclusionClienteWinLnx
+//
+// Descripcin:
+// Respuesta del servidor de administracin a la peticin de inicio
+// enviando los datos identificativos del cliente
+// Parmetros:
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parmetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN RESPUESTA_InclusionClienteWinLnx(TRAMA* ptrTrama)
+{
+ char* res;
+ char modulo[] = "RESPUESTA_InclusionClienteWinLnx()";
+ int err;
+
+ res=copiaParametro("res",ptrTrama); // Resultado del proceso de inclusin
+ err=(int)atoi(res); // Cdigo de error devuelto por el servidor
+ if(err>0){ // Error en el proceso de inclusin
+ errorLog(modulo,41,FALSE);
+ errorLog(modulo,err,FALSE);
+ return (FALSE);
+ }
+ strcpy(idordenador,copiaParametro("ido",ptrTrama)); // Identificador del ordenador
+ strcpy(nombreordenador,copiaParametro("npc",ptrTrama)); // Nombre del ordenador
+
+ if(idordenador==NULL || nombreordenador==NULL){
+ errorLog(modulo,40,FALSE);
+ return (FALSE);
+ }
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: ProcesaComandos
+//
+// Descripcin:
+// Espera comando desde el Servidor de Administracin para ejecutarlos
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// ________________________________________________________________________________________________________
+void procesaComandos(TRAMA* ptrTrama)
+{
+ int lon;
+ SOCKET socket_c;
+ char modulo[] = "procesaComandos()";
+
+ initParametros(ptrTrama,0);
+ while(TRUE){
+ lon=sprintf(ptrTrama->parametros,"nfn=DisponibilidadComandos\r");
+ lon+=sprintf(ptrTrama->parametros+lon,"tpc=%s\r",CLIENTE_WIN); // Activar disponibilidad
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_INFORMACION)){
+ errorLog(modulo,43,FALSE);
+ return;
+ }
+ infoLog(19); // Disponibilidad de cliente activada
+ ptrTrama=recibeMensaje(&socket_c);
+ if(!ptrTrama){
+ errorLog(modulo,46,FALSE);
+ return;
+ }
+
+ closesocket(socket_c);
+
+ if(!gestionaTrama(ptrTrama)){ // Anlisis de la trama
+ errorLog(modulo,39,FALSE);
+ return;
+ }
+ }
+}
+//_____________________________________________________________________________________________________
+// Funcin: Apagar
+//
+// Descripcin:
+// Apaga el cliente
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//_____________________________________________________________________________________________________
+BOOLEAN Apagar(TRAMA* ptrTrama)
+{
+ int lon;
+ char *ids,msglog[LONSTD];
+ char modulo[] = "Apagar()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ ids=copiaParametro("ids",ptrTrama);
+
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Apagar");
+ respuestaEjecucionComando(ptrTrama,0,ids);
+
+ if(versionWin<5)
+ ApagarReiniciar(EWX_POWEROFF | EWX_FORCE,ids,0);
+ else
+ ApagarReiniciar(EWX_SHUTDOWN | EWX_FORCE,ids,0);
+ return(TRUE);
+}
+//_____________________________________________________________________________________________________
+// Funcin: Reiniciar
+//
+// Descripcin:
+// Apaga el cliente
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn errorservidoradm
+//_____________________________________________________________________________________________________
+BOOLEAN Reiniciar(TRAMA* ptrTrama)
+{
+ int lon;
+ char *ids,msglog[LONSTD];
+ char modulo[] = "Reiniciar()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ ids=copiaParametro("ids",ptrTrama);
+
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Reiniciar");
+ respuestaEjecucionComando(ptrTrama,0,ids);
+
+ if(versionWin<5)
+ ApagarReiniciar(EWX_REBOOT | EWX_FORCE,ids,1);
+ else
+ ApagarReiniciar(EWX_REBOOT | EWX_FORCE,ids,1);
+
+ return(TRUE);
+}
+// _____________________________________________________________________________________________________________
+//
+// Funcin: ApagarReiniciar
+//
+// Descripcin:
+// Apaga o reinicia el ordenador o bien hace logout del usuario
+//
+// Parmetros:
+// - uFlags : Especifica el tipo de shutdown
+// _____________________________________________________________________________________________________________
+BOOLEAN ApagarReiniciar(UINT uFlags,char *ids,int sw)
+{
+ HANDLE hToken;
+ TOKEN_PRIVILEGES tkp;
+ char modulo[] = "Reiniciar()";
+
+ if (versionWin>4){
+ if (!ExitWindowsEx(uFlags, 0)) {
+ errorLog(modulo,86,FALSE);
+ return(FALSE);
+ }
+ return TRUE;
+ }
+ // Get a token for this process.
+ if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
+ errorLog(modulo,86,FALSE);
+ return(FALSE);
+ }
+
+ // Get the LUID for the shutdown privilege.
+ LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
+
+ tkp.PrivilegeCount = 1; // one privilege to set
+ tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
+
+ // Get the shutdown privilege for this process.
+ AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
+
+ if (GetLastError() != ERROR_SUCCESS) {
+ errorLog(modulo,86,FALSE);
+ return(FALSE);
+ }
+
+ // Shut down the system and force all applications to close.
+ if (!ExitWindowsEx(uFlags, 0)) {
+ errorLog(modulo,86,FALSE);
+ return(FALSE);
+ }
+
+ return TRUE;
+}
+// _____________________________________________________________________________________________________________
+//
+// Funcin: TomaVersionWindows
+//
+// Descripcin:
+// Toma la versin del sistema operativo
+//
+// Valores de retorno:
+// 1.- Microsoft Windows Server 2003
+// 2.- Microsoft Windows XP
+// 3.- Microsoft Windows 2000
+// 4.- Microsoft Windows NT
+// 5.- Microsoft Windows 95
+// 6.- Microsoft Windows 98
+// 7.- Microsoft Windows Millennium Edition
+// _____________________________________________________________________________________________________________
+int TomaVersionWindows()
+{
+ OSVERSIONINFOEX osvi;
+ BOOL bOsVersionInfoEx;
+
+ // Intenta tomar la version usando la estructura OSVERSIONINFOEX
+ // Si falla lo intentausando la estructura OSVERSIONINFO.
+
+ ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
+
+ if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ){
+ osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
+ if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
+ return -1;
+ }
+ switch (osvi.dwPlatformId){
+ // Test for the Windows NT product family.
+ case VER_PLATFORM_WIN32_NT:
+ if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
+ return(1); // Microsoft Windows Server 2003
+ if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
+ return(2); // Microsoft Windows XP
+ if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
+ return(3); // Microsoft Windows 2000
+ if ( osvi.dwMajorVersion <= 4 )
+ return(4); // Microsoft Windows NT
+ break;
+
+ // Test for the Windows Me/98/95.
+ case VER_PLATFORM_WIN32_WINDOWS:
+ if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
+ return(5); // Microsoft Windows 95
+ if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
+ return(6); // Microsoft Windows 98
+ if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
+ return(7); // Microsoft Windows Millennium Edition
+ break;
+ }
+ return -1;
+}
+//______________________________________________________________________________________________________
+// Funcin: Sondeo
+//
+// Descripcin:
+// Enva al servidor una confirmacin de que est dentro del sistema
+// Parmetros:
+// ptrTrama: contenido del mensajede
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN Sondeo(TRAMA* ptrTrama)
+{
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: Actualizar
+//
+// Descripcin:
+// Enva al servidor una confirmacin de que est dentro del sistema
+// Parmetros:
+// ptrTrama: contenido del mensajede
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN Actualizar(TRAMA* ptrTrama)
+{
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: respuestaEjecucionComando
+//
+// Descripcin:
+// Envia una respuesta a una ejecucion de comando al servidor de Administracin
+// Parmetros:
+// - ptrTrama: contenido del mensaje
+// - res: Resultado de la ejecucin (Cdigo de error devuelto por el script ejecutado)
+// - ids: Identificador de la sesion (En caso de no haber seguimiento es NULO)
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// ________________________________________________________________________________________________________
+BOOLEAN respuestaEjecucionComando(TRAMA* ptrTrama,int res,char *ids)
+{
+ int lon;
+ SOCKET socket_c;
+ char modulo[] = "respuestaEjecucionComando()";
+
+ lon=strlen(ptrTrama->parametros);
+ if(ids){ // Existe seguimiento
+ lon+=sprintf(ptrTrama->parametros+lon,"ids=%s\r",ids); // Aade identificador de la sesin
+ }
+ if (res==0){ // Resultado satisfactorio
+ lon+=sprintf(ptrTrama->parametros+lon,"res=%s\r","1");
+ lon+=sprintf(ptrTrama->parametros+lon,"der=%s\r","");
+ }
+ else{ // Algn error
+ lon+=sprintf(ptrTrama->parametros+lon,"res=%s\r","2");
+ lon+=sprintf(ptrTrama->parametros+lon,"der=%s\r",tbErrores[res]);// Descripcin del error
+ }
+ if(!(enviaMensajeServidor(&socket_c,ptrTrama,MSG_NOTIFICACION))){
+ errorLog(modulo,44,FALSE);
+ return(FALSE);
+ }
+ closesocket(socket_c);
+ return(TRUE);
+}
+// ________________________________________________________________________________________________________
+// Funcin: gestionaTrama
+//
+// Descripcin:
+// Procesa las tramas recibidas.servidoradm
+// Parametros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// ________________________________________________________________________________________________________
+BOOLEAN gestionaTrama(TRAMA *ptrTrama)
+{
+ int i, res;
+ char *nfn;
+ char modulo[] = "gestionaTrama()";
+
+ INTROaFINCAD(ptrTrama);
+ nfn = copiaParametro("nfn", ptrTrama); // Toma nombre de funcin
+ for (i = 0; i < MAXIMAS_FUNCIONES; i++) { // Recorre funciones que procesan las tramas
+ res = strcmp(tbfuncionesClient[i].nf, nfn);
+ if (res == 0) { // Encontrada la funcin que procesa el mensaje
+ return(tbfuncionesClient[i].fptr(ptrTrama)); // Invoca la funcin
+ }
+ }
+ errorLog(modulo, 18, FALSE);
+ return (FALSE);
+}
+//______________________________________________________________________________________________________
+// Funcin: enviaMensajeServidor
+//
+// Descripcin:
+// Envia un mensaje al servidor de Administracin
+// Parmetros:
+// - socket_c: (Salida) Socket utilizado para el envo
+// - ptrTrama: contenido del mensaje
+// - tipo: Tipo de mensaje
+// C=Comando, N=Respuesta a un comando, P=Peticion,R=Respuesta a una peticin, I=Informacion
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// ________________________________________________________________________________________________________
+BOOLEAN enviaMensajeServidor(SOCKET *socket_c,TRAMA *ptrTrama,char tipo)
+{
+ int lon;
+ char modulo[] = "enviaMensajeServidor()";
+
+ *socket_c=abreConexion();
+ if(*socket_c==INVALID_SOCKET){
+ errorLog(modulo,38,FALSE); // Error de conexin con el servidor
+ return(FALSE);
+ }
+ ptrTrama->arroba='@'; // Cabecera de la trama
+ strncpy(ptrTrama->identificador,"JMMLCAMDJ_MCDJ",14); // identificador de la trama
+ ptrTrama->tipo=tipo; // Tipo de mensaje
+ lon=strlen(ptrTrama->parametros); // Compone la trama
+ lon+=sprintf(ptrTrama->parametros+lon,"iph=%s\r",IPlocal); // Ip del ordenador
+ lon+=sprintf(ptrTrama->parametros+lon,"ido=%s\r",idordenador); // Identificador del ordenador
+ lon+=sprintf(ptrTrama->parametros+lon,"npc=%s\r",nombreordenador); // Nombre del ordenador
+
+ if (!mandaTrama(socket_c,ptrTrama)) {
+ errorLog(modulo,26,FALSE);
+ return (FALSE);
+ }
+ return(TRUE);
+}
+// _____________________________________________________________________________________________________________
+// Funcin: TomaParametrosReg
+//
+// Descripcin:
+// Toma los parmetros de conexin del registro
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// _____________________________________________________________________________________________________________
+BOOLEAN TomaParametrosReg()
+{
+ if(!ReadRegistryString(HIVE,BASE,"servidoradm",servidoradm,20))
+ return(FALSE);
+
+ if(!ReadRegistryString(HIVE,BASE,"puerto",puerto,20))
+ return(FALSE);
+
+ if(!ReadRegistryString(HIVE,BASE,"Iplocal",IPlocal,20))
+ return(FALSE);
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: TomaIP
+//
+// Descripcin:
+// Recupera la ip de la mquina
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// ________________________________________________________________________________________________________
+BOOLEAN TomaIP(char* ip)
+{
+ char ac[80];
+ struct in_addr addr;
+ BOOLEAN ipv;
+
+ if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR) {
+ return (FALSE);
+ }
+ struct hostent *phe = gethostbyname(ac);
+ if (phe == 0) {
+ return (FALSE);
+ }
+ ipv=FALSE;
+ for (int i = 0; phe->h_addr_list[i] != 0 && !ipv; ++i) {
+ memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
+ strcpy(ip,inet_ntoa(addr));
+ if(strcmp(IPlocal,"127.0.0.1")==0)
+ ipv=FALSE;
+ else{
+ ipv=true; // IP vlida distinta a loop
+ break;
+ }
+ }
+
+ return(ipv);
+}
+// ********************************************************************************************************
+// PROGRAMA PRINCIPAL (CLIENTE)
+// ********************************************************************************************************
+//int main(int argc, char *argv[])
+VOID ServiceStart (DWORD dwArgc, LPTSTR *lpszArgv)
+ {
+ //___________________________________________________________
+ //
+ // Service initialization (Report the status to the service control manager)
+ //___________________________________________________________
+ //
+ if (!ReportStatusToSCMgr(
+ SERVICE_START_PENDING, // service state
+ NO_ERROR, // exit code
+ 3000)) // wait hint
+ return;
+ //__________________________________________
+
+ TRAMA *ptrTrama;
+ char modulo[] = "main()";
+
+ strcpy(szPathFileLog, "ogAdmWinClient.log"); // de configuracin y de logs
+
+
+ WSADATA wsd;
+ if (WSAStartup(MAKEWORD(2,2),&wsd)!=0){ // Carga librera Winsock
+ errorLog(modulo, 93, FALSE);
+ exit(EXIT_FAILURE);
+ }
+
+ ptrTrama=(TRAMA *)reservaMemoria(sizeof(TRAMA));
+ if (ptrTrama == NULL) { // No hay memoria suficiente para el bufer de las tramas
+ errorLog(modulo, 3, FALSE);
+ exit(EXIT_FAILURE);
+ }
+ /*--------------------------------------------------------------------------------------------------------
+ Validacin de parmetros de ejecucin y fichero de configuracin
+ ---------------------------------------------------------------------------------------------------------*/
+ if(!TomaParametrosReg()) // Toma parametros de configuracion
+ exit(EXIT_FAILURE);
+
+ //___________________________________________________________
+ //
+ // Service initialization (Report the status to the service control manager)
+ //___________________________________________________________
+ //
+ if (!ReportStatusToSCMgr(
+ SERVICE_START_PENDING, // service state
+ NO_ERROR, // exit code
+ 3000)) // wait hint
+ return;
+ //__________________________________________
+ //
+ // Toma IP local
+ //___________________________________________
+ //
+ // Toma la ip tambin del registro
+ /*if(!TomaIP(IPlocal)){
+ errorLog(modulo,85,FALSE);
+ exit(EXIT_FAILURE);
+ }
+ */
+ versionWin=TomaVersionWindows(); // Toma versin de windows
+
+ /*--------------------------------------------------------------------------------------------------------
+ Carga catlogo de funciones que procesan las tramas
+ ---------------------------------------------------------------------------------------------------------*/
+ int cf = 0;
+
+ strcpy(tbfuncionesClient[cf].nf, "RESPUESTA_InclusionClienteWinLnx");
+ tbfuncionesClient[cf++].fptr = &RESPUESTA_InclusionClienteWinLnx;
+
+ strcpy(tbfuncionesClient[cf].nf, "Apagar");
+ tbfuncionesClient[cf++].fptr = &Apagar;
+
+ strcpy(tbfuncionesClient[cf].nf, "Reiniciar");
+ tbfuncionesClient[cf++].fptr = &Reiniciar;
+
+ strcpy(tbfuncionesClient[cf].nf, "Sondeo");
+ tbfuncionesClient[cf++].fptr = &Sondeo;
+
+ strcpy(tbfuncionesClient[cf].nf, "Actualizar");
+ tbfuncionesClient[cf++].fptr = &Actualizar;
+
+ /*--------------------------------------------------------------------------------------------------------
+ Inicio de sesin
+ ---------------------------------------------------------------------------------------------------------*/
+ infoLog(1); // Inicio de sesin
+ infoLog(3); // Abriendo sesin en el servidor de Administracin;
+ /*--------------------------------------------------------------------------------------------------------
+ Inclusin del cliente en el sistema
+ ---------------------------------------------------------------------------------------------------------*/
+ if(!InclusionClienteWinLnx(ptrTrama)){ // Ha habido algn problema al abrir sesin
+ errorLog(modulo,0,FALSE);
+ exit(EXIT_FAILURE);
+ }
+ infoLog(4); // Cliente iniciado
+
+ //__________________________________________
+ // El servicio est instalado y debe ser iniciado
+ // -- report the status to the service control manager.--
+ //
+ if (!ReportStatusToSCMgr(
+ SERVICE_RUNNING, // service state
+ NO_ERROR, // exit code
+ 0)) // wait hint
+ return;
+ // End of initialization
+ //__________________________________________
+
+ //
+ // Service is now running, perform work until shutdown
+ //
+ while (ssStatus.dwCurrentState == SERVICE_RUNNING) { // Bucle para escuchar peticiones de clientes
+ procesaComandos(ptrTrama); // Bucle para procesar comandos interactivos
+ }
+ WSACleanup();
+ // El servicio de detiene
+}
+/* _____________________________________________________________________________________________________________
+ FUNCTION: ServiceStop
+
+ PURPOSE: Stops the service
+ PARAMETERS:
+ none
+
+ RETURN VALUE:
+ none
+
+ COMMENTS:
+
+ If a ServiceStop procedure is going to
+ take longer than 3 seconds to execute,
+ it should spawn a thread to execute the
+ stop code, and return. Otherwise, the
+ ServiceControlManager will believe that
+ the service has stopped responding.
+ _____________________________________________________________________________________________________________*/
+VOID ServiceStop()
+{
+ // Incluir aqu el cdigo necesario antes de parar el servicio
+ ReportStatusToSCMgr(SERVICE_STOPPED, NO_ERROR, 0);
+} \ No newline at end of file
diff --git a/admin/Sources/Clients/ogAdmWinClient/sources/ogAdmWinClient.h b/admin/Sources/Clients/ogAdmWinClient/sources/ogAdmWinClient.h
new file mode 100644
index 00000000..55e33ad8
--- /dev/null
+++ b/admin/Sources/Clients/ogAdmWinClient/sources/ogAdmWinClient.h
@@ -0,0 +1,60 @@
+// ********************************************************************************************************
+// Cliente: ogAdmWinClient
+// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creación: Febrero-2012
+// Fecha Última modificación: Febrero-2012
+// Nombre del fichero: ogAdmWinClient.h
+// Descripción :Este fichero implementa el cliente general del sistema
+// ********************************************************************************************************
+#define __WINDOWS__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <time.h>
+#include <signal.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include <winreg.h>
+
+#include "registrow.h"
+#include "ogAdmLib.h"
+#include "servicio.h"
+// ________________________________________________________________________________________________________
+// Variables globales
+// ________________________________________________________________________________________________________
+//
+int versionWin;
+char idordenador[LONPRM]; // Identificador del ordenador
+char nombreordenador[LONPRM]; // Nombre del ordenador
+
+char servidoradm[LONPRM]; // Dirección IP del servidor de administración
+char puerto[LONPRM]; // Puerto de comunicación
+char IPlocal[LONPRM]; // Ip local por donde se van a enviar las comunicaciones
+
+
+typedef struct{ // Estructura usada para referenciar las funciones que procesan las tramas
+ char nf[LONFUN]; // Nombre de la función
+ BOOLEAN (*fptr)(TRAMA*); // Puntero a la función que procesa la trama
+}MSGFUN;
+MSGFUN tbfuncionesClient[MAXIMAS_FUNCIONES];
+// ________________________________________________________________________________________________________
+// Prototipo de funciones
+// ________________________________________________________________________________________________________
+
+void procesaComandos(TRAMA*);
+BOOLEAN gestionaTrama(TRAMA *);
+BOOLEAN InclusionClienteWinLnx();
+BOOLEAN RESPUESTA_InclusionClienteWinLnx(TRAMA *);
+BOOLEAN respuestaEjecucionComando(TRAMA *,int,char*);
+
+BOOLEAN Apagar(TRAMA *);
+BOOLEAN Reiniciar(TRAMA *);
+BOOLEAN Sondeo(TRAMA *);
+
+BOOLEAN enviaMensajeServidor(SOCKET *,TRAMA *,char);
+BOOLEAN ApagarReiniciar(UINT,char *,int sw);
+
+SOCKADDR_IN *GetIPInterfaceList(SOCKET , int *); \ No newline at end of file
diff --git a/admin/Sources/Clients/ogAdmWinClient/sources/servicio.c b/admin/Sources/Clients/ogAdmWinClient/sources/servicio.c
new file mode 100644
index 00000000..773ac883
--- /dev/null
+++ b/admin/Sources/Clients/ogAdmWinClient/sources/servicio.c
@@ -0,0 +1,628 @@
+// ******************************************************************************************************************************************************************************
+// Aplicacin HIDRA
+// Copyright 2003-2005 Jos Manuel Alonso. Todos los derechos reservados.
+// Fichero: servicio.c
+// Descripcin:
+// Este proyecto implementa el servicio hidra en un ordenador con plataforma windows NT. Este fichero aporta las funciones para crear el servicio
+// ******************************************************************************************************************************************************************************
+//____________________________________________________________________________________________________________________________
+// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
+// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
+// PARTICULAR PURPOSE.
+//
+// Copyright (C) 1993-1997 Microsoft Corporation. All Rights Reserved.
+//
+// MODULE: service.c
+// PURPOSE: Implements functions required by all services windows.
+//
+// FUNCTIONS:
+// main(int argc, char **argv);
+// service_ctrl(DWORD dwCtrlCode);
+// service_main(DWORD dwArgc, LPTSTR *lpszArgv);
+// CmdInstallService();
+// CmdRemoveService();
+// CmdDebugService(int argc, char **argv);
+// ControlHandler ( DWORD dwCtrlType );
+// GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize );
+//
+// COMMENTS:
+// AUTHOR: Craig Link - Microsoft Developer Support
+//____________________________________________________________________________________________________________________________
+#include "servicio.h"
+//____________________________________________________________________________________________________________________________
+// internal variables
+DWORD dwErr = 0;
+BOOL bDebug = FALSE;
+TCHAR szErr[256];
+
+// internal function prototypes
+VOID WINAPI service_ctrl(DWORD dwCtrlCode);
+VOID WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv);
+VOID CmdInstallService();
+VOID CmdRemoveService();
+VOID CmdDebugService(int argc, char **argv);
+BOOL WINAPI ControlHandler ( DWORD dwCtrlType );
+LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize );
+//____________________________________________________________________________________________________________________________
+//
+// FUNCTION: tomarestoparametros
+//
+// Descripcin:
+//
+// Toma los parametros de conexin de la linea de comando y los graba en el Registro
+//____________________________________________________________________________________________________________________________
+int tomarestoparametros(int argc, char **argv)
+{
+ int i,lon;
+ char servidorhidra[20];
+ char puerto[10];
+ char iplocal[20];
+
+ strcpy(servidorhidra,SERVIDOR_DEFAULT);
+ strcpy(puerto,PUERTO_DEFAULT);
+ strcpy(iplocal,IPLOCAL_DEFAULT);
+
+ for(i=2;i<argc;i++){
+ lon=strlen(argv[i]);
+ if ((argv[i][0]=='-')||(argv[i][0]=='/') && argv[i][2]==' ') {
+ switch (tolower(argv[i][1])){
+ case 's': // Ip del servidor hidra
+ //strcpy(servidorhidra,&argv[i][3]);
+ TOMAPARAMSTR(servidorhidra);
+ break;
+ case 'p': // Puerto
+ TOMAPARAMSTR(puerto);
+ break;
+ case 'i': // Ip local
+ TOMAPARAMSTR(iplocal);
+ break;
+ default:
+ printf("\nSintaxis: -install\n\n");
+ printf(" -s IP del servidor\n -p puerto\n -i IP local\n");
+ return(FALSE);
+ break;
+ }
+ }
+ }
+ if(strcmp(servidorhidra,SERVIDOR_DEFAULT)==0
+ || strcmp(puerto,PUERTO_DEFAULT)==0
+ || strcmp(iplocal,IPLOCAL_DEFAULT)==0) {
+ printf("\nSintaxis: -install\n\n");
+ printf(" -s IP del servidor\n -p puerto\n -i IP local\n");
+ return(FALSE);
+ }
+
+ CHKREGISTRY(WriteRegistryString(HIVE,BASE,"servidoradm",servidorhidra));
+ CHKREGISTRY(WriteRegistryString(HIVE,BASE,"puerto",puerto));
+ CHKREGISTRY(WriteRegistryString(HIVE,BASE,"iplocal",iplocal));
+ return(TRUE);
+}
+//____________________________________________________________________________________________________________________________
+//
+// FUNCTION: borraparametros
+//
+// Descripcin:
+//
+// Elimina la clave y subclave donde estn los parmetros de conexin
+//____________________________________________________________________________________________________________________________
+int borraparametros()
+{
+ RMVREGISTRY(DeleteRegistryKey(HIVE,BASE)); // Borra la subclave completa
+ RMVREGISTRY(DeleteRegistryKey(HIVE,BASEKEY)); // Borra la clave completa
+ return(TRUE);
+}
+//____________________________________________________________________________________________________________________________
+//
+// FUNCTION: main
+//
+// PURPOSE: entrypoint for service
+//
+// PARAMETERS:
+// argc - number of command line arguments
+// argv - array of command line arguments
+//
+// RETURN VALUE:
+// none
+//
+// COMMENTS:
+// main() either performs the command line task, or
+// call StartServiceCtrlDispatcher to register the
+// main service thread. When the this call returns,
+// the service has stopped, so exit.
+//
+//____________________________________________________________________________________________________________________________
+void _CRTAPI1 main(int argc, char **argv)
+{
+ SERVICE_TABLE_ENTRY dispatchTable[] =
+ {
+ { TEXT(SZSERVICENAME), (LPSERVICE_MAIN_FUNCTION)service_main },
+ { NULL, NULL }
+ };
+
+ if ( (argc > 1) &&
+ ((*argv[1] == '-') || (*argv[1] == '/')) )
+ {
+ if ( _stricmp( "install", argv[1]+1 ) == 0 )
+ {
+ if (!tomarestoparametros(argc,argv))
+ exit(1);
+ CmdInstallService();
+ }
+ else if ( _stricmp( "remove", argv[1]+1 ) == 0 )
+ {
+ borraparametros();
+ CmdRemoveService();
+ }
+ else if ( _stricmp( "debug", argv[1]+1 ) == 0 )
+ {
+ bDebug = TRUE;
+ CmdDebugService(argc, argv);
+ }
+ else
+ {
+ goto dispatch;
+ }
+ exit(0);
+ }
+ // if it doesn't match any of the above parameters
+ // the service control manager may be starting the service
+ // so we must call StartServiceCtrlDispatcher
+ dispatch:
+ // this is just to be friendly
+ printf( "%s -install to install the service\n", SZAPPNAME );
+ printf( "%s -remove to remove the service\n", SZAPPNAME );
+ printf( "%s -debug <params> to run as a console app for debugging\n", SZAPPNAME );
+ printf( "\nStartServiceCtrlDispatcher being called.\n" );
+ printf( "This may take several seconds. Please wait.\n" );
+
+ if (!StartServiceCtrlDispatcher(dispatchTable))
+ AddToMessageLog(TEXT("StartServiceCtrlDispatcher failed."));
+}
+//____________________________________________________________________________________________________________________________
+// FUNCTION: service_main
+//
+// PURPOSE: To perform actual initialization of the service
+//
+// PARAMETERS:
+// dwArgc - number of command line arguments
+// lpszArgv - array of command line arguments
+//
+// RETURN VALUE:
+// none
+//
+// COMMENTS:
+// This routine performs the service initialization and then calls
+// the user defined ServiceStart() routine to perform majority
+// of the work.
+//
+//____________________________________________________________________________________________________________________________
+void WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv)
+{
+ // register our service control handler:
+ //
+ sshStatusHandle = RegisterServiceCtrlHandler( TEXT(SZSERVICENAME), service_ctrl);
+
+ if (!sshStatusHandle)
+ goto cleanup;
+
+ // SERVICE_STATUS members that don't change in example
+ //
+ ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
+ ssStatus.dwServiceSpecificExitCode = 0;
+
+
+ // report the status to the service control manager.
+ //
+ if (!ReportStatusToSCMgr(
+ SERVICE_START_PENDING, // service state
+ NO_ERROR, // exit code
+ 3000)) // wait hint
+ goto cleanup;
+
+ ServiceStart( dwArgc, lpszArgv );
+
+cleanup:
+
+ // try to report the stopped status to the service control manager.
+ //
+ if (sshStatusHandle)
+ (VOID)ReportStatusToSCMgr(
+ SERVICE_STOPPED,
+ dwErr,
+ 0);
+ return;
+}
+//____________________________________________________________________________________________________________________________
+//
+// FUNCTION: service_ctrl
+//
+// PURPOSE: This function is called by the SCM whenever
+// ControlService() is called on this service.
+//
+// PARAMETERS:
+// dwCtrlCode - type of control requested
+//
+// RETURN VALUE:
+// none
+//
+// COMMENTS:
+//
+//____________________________________________________________________________________________________________________________
+VOID WINAPI service_ctrl(DWORD dwCtrlCode)
+{
+ // Handle the requested control code.
+ //
+ switch(dwCtrlCode)
+ {
+ // Stop the service.
+ //
+ // SERVICE_STOP_PENDING should be reported before
+ // setting the Stop Event - hServerStopEvent - in
+ // ServiceStop(). This avoids a race condition
+ // which may result in a 1053 - The Service did not respond...
+ // error.
+ case SERVICE_CONTROL_STOP:
+ ReportStatusToSCMgr(SERVICE_STOP_PENDING, NO_ERROR, 0);
+ ServiceStop();
+ return;
+
+ // Update the service status.
+ //
+ case SERVICE_CONTROL_INTERROGATE:
+ break;
+
+ // invalid control code
+ //
+ default:
+ break;
+
+ }
+ ReportStatusToSCMgr(ssStatus.dwCurrentState, NO_ERROR, 0);
+}
+//____________________________________________________________________________________________________________________________
+//
+// FUNCTION: ReportStatusToSCMgr()
+//
+// PURPOSE: Sets the current status of the service and
+// reports it to the Service Control Manager
+//
+// PARAMETERS:
+// dwCurrentState - the state of the service
+// dwWin32ExitCode - error code to report
+// dwWaitHint - worst case estimate to next checkpoint
+//
+// RETURN VALUE:
+// TRUE - success
+// FALSE - failure
+//
+// COMMENTS:
+//
+//____________________________________________________________________________________________________________________________
+BOOL ReportStatusToSCMgr(DWORD dwCurrentState,DWORD dwWin32ExitCode,DWORD dwWaitHint)
+{
+ static DWORD dwCheckPoint = 1;
+ BOOL fResult = TRUE;
+
+
+ if ( !bDebug ) // when debugging we don't report to the SCM
+ {
+ if (dwCurrentState == SERVICE_START_PENDING)
+ ssStatus.dwControlsAccepted = 0;
+ else
+ ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
+
+ ssStatus.dwCurrentState = dwCurrentState;
+ ssStatus.dwWin32ExitCode = dwWin32ExitCode;
+ ssStatus.dwWaitHint = dwWaitHint;
+
+ if ( ( dwCurrentState == SERVICE_RUNNING ) ||
+ ( dwCurrentState == SERVICE_STOPPED ) )
+ ssStatus.dwCheckPoint = 0;
+ else
+ ssStatus.dwCheckPoint = dwCheckPoint++;
+
+ // Report the status of the service to the service control manager.
+ //
+ if (!(fResult = SetServiceStatus( sshStatusHandle, &ssStatus))) {
+ AddToMessageLog(TEXT("SetServiceStatus"));
+ }
+ }
+ return fResult;
+}
+//____________________________________________________________________________________________________________________________
+//
+// FUNCTION: AddToMessageLog(LPTSTR lpszMsg)
+//
+// PURPOSE: Allows any thread to log an error message
+//
+// PARAMETERS:
+// lpszMsg - text for message
+//
+// RETURN VALUE:
+// none
+//
+// COMMENTS:
+//
+//____________________________________________________________________________________________________________________________
+VOID AddToMessageLog(LPTSTR lpszMsg)
+{
+ TCHAR szMsg[256];
+ HANDLE hEventSource;
+ LPTSTR lpszStrings[2];
+
+ if ( !bDebug )
+ {
+ dwErr = GetLastError();
+
+ // Use event logging to log the error.
+ //
+ hEventSource = RegisterEventSource(NULL, TEXT(SZSERVICENAME));
+
+ _stprintf(szMsg, TEXT("%s error: %d"), TEXT(SZSERVICENAME), dwErr);
+ lpszStrings[0] = szMsg;
+ lpszStrings[1] = lpszMsg;
+
+ if (hEventSource != NULL) {
+ ReportEvent(hEventSource, // handle of event source
+ EVENTLOG_ERROR_TYPE, // event type
+ 0, // event category
+ 0, // event ID
+ NULL, // current user's SID
+ 2, // strings in lpszStrings
+ 0, // no bytes of raw data
+ lpszStrings, // array of error strings
+ NULL); // no raw data
+
+ (VOID) DeregisterEventSource(hEventSource);
+ }
+ }
+}
+//____________________________________________________________________________________________________________________________
+//
+// The following code handles service installation and removal
+//
+//____________________________________________________________________________________________________________________________
+//
+// FUNCTION: CmdInstallService()
+//
+// PURPOSE: Installs the service
+// PARAMETERS:
+// none
+//
+// RETURN VALUE:
+// none
+//
+// COMMENTS:
+//____________________________________________________________________________________________________________________________
+void CmdInstallService()
+{
+ SC_HANDLE schService;
+ SC_HANDLE schSCManager;
+
+ TCHAR szPath[512];
+
+ if ( GetModuleFileName( NULL, szPath, 512 ) == 0 )
+ {
+ _tprintf(TEXT("Unable to install %s - %s\n"), TEXT(SZSERVICEDISPLAYNAME), GetLastErrorText(szErr, 256));
+ return;
+ }
+ schSCManager = OpenSCManager(
+ NULL, // machine (NULL == local)
+ NULL, // database (NULL == default)
+ SC_MANAGER_ALL_ACCESS // access required
+ );
+ if ( schSCManager )
+ {
+ schService = CreateService(
+ schSCManager, // SCManager database
+ TEXT(SZSERVICENAME), // name of service
+ TEXT(SZSERVICEDISPLAYNAME), // name to display
+ SERVICE_ALL_ACCESS, // desired access
+ SERVICE_WIN32_OWN_PROCESS, // service type
+ SERVICE_AUTO_START, // start type
+ SERVICE_ERROR_NORMAL, // error control type
+ szPath, // service's binary
+ NULL, // no load ordering group
+ NULL, // no tag identifier
+ TEXT(SZDEPENDENCIES), // dependencies
+ NULL, // LocalSystem account
+ NULL); // no password
+
+ if ( schService )
+ {
+ _tprintf(TEXT("%s installed.\n"), TEXT(SZSERVICEDISPLAYNAME) );
+ CloseServiceHandle(schService);
+ }
+ else
+ {
+ _tprintf(TEXT("CreateService failed - %s\n"), GetLastErrorText(szErr, 256));
+ }
+
+ CloseServiceHandle(schSCManager);
+ }
+ else
+ _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(szErr,256));
+}
+//____________________________________________________________________________________________________________________________
+//
+// FUNCTION: CmdRemoveService()
+//
+// PURPOSE: Stops and removes the service
+//
+// PARAMETERS:
+// none
+//
+// RETURN VALUE:
+// none
+//
+// COMMENTS:
+//
+//____________________________________________________________________________________________________________________________
+void CmdRemoveService()
+{
+ SC_HANDLE schService;
+ SC_HANDLE schSCManager;
+
+ schSCManager = OpenSCManager(
+ NULL, // machine (NULL == local)
+ NULL, // database (NULL == default)
+ SC_MANAGER_ALL_ACCESS // access required
+ );
+ if ( schSCManager )
+ {
+ schService = OpenService(schSCManager, TEXT(SZSERVICENAME), SERVICE_ALL_ACCESS);
+
+ if (schService)
+ {
+ // try to stop the service
+ if ( ControlService( schService, SERVICE_CONTROL_STOP, &ssStatus ) )
+ {
+ _tprintf(TEXT("Stopping %s."), TEXT(SZSERVICEDISPLAYNAME));
+ Sleep( 1000 );
+
+ while( QueryServiceStatus( schService, &ssStatus ) )
+ {
+ if ( ssStatus.dwCurrentState == SERVICE_STOP_PENDING )
+ {
+ _tprintf(TEXT("."));
+ Sleep( 1000 );
+ }
+ else
+ break;
+ }
+
+ if ( ssStatus.dwCurrentState == SERVICE_STOPPED )
+ _tprintf(TEXT("\n%s stopped.\n"), TEXT(SZSERVICEDISPLAYNAME) );
+ else
+ _tprintf(TEXT("\n%s failed to stop.\n"), TEXT(SZSERVICEDISPLAYNAME) );
+
+ }
+
+ // now remove the service
+ if( DeleteService(schService) )
+ _tprintf(TEXT("%s removed.\n"), TEXT(SZSERVICEDISPLAYNAME) );
+ else
+ _tprintf(TEXT("DeleteService failed - %s\n"), GetLastErrorText(szErr,256));
+
+
+ CloseServiceHandle(schService);
+ }
+ else
+ _tprintf(TEXT("OpenService failed - %s\n"), GetLastErrorText(szErr,256));
+
+ CloseServiceHandle(schSCManager);
+ }
+ else
+ _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(szErr,256));
+}
+//____________________________________________________________________________________________________________________________
+//
+// The following code is for running the service as a console app
+//
+//
+// FUNCTION: CmdDebugService(int argc, char ** argv)
+//
+// PURPOSE: Runs the service as a console application
+//
+// PARAMETERS:
+// argc - number of command line arguments
+// argv - array of command line arguments
+//
+// RETURN VALUE:
+// none
+//
+// COMMENTS:
+//
+//____________________________________________________________________________________________________________________________
+void CmdDebugService(int argc, char ** argv)
+{
+ DWORD dwArgc;
+ LPTSTR *lpszArgv;
+
+#ifdef UNICODE
+ lpszArgv = CommandLineToArgvW(GetCommandLineW(), &(dwArgc) );
+#else
+ dwArgc = (DWORD) argc;
+ lpszArgv = argv;
+#endif
+
+ _tprintf(TEXT("Debugging %s.\n"), TEXT(SZSERVICEDISPLAYNAME));
+
+ SetConsoleCtrlHandler( ControlHandler, TRUE );
+
+ ServiceStart( dwArgc, lpszArgv );
+}
+//____________________________________________________________________________________________________________________________
+//
+// FUNCTION: ControlHandler ( DWORD dwCtrlType )
+//
+// PURPOSE: Handled console control events
+//
+// PARAMETERS:
+// dwCtrlType - type of control event
+//
+// RETURN VALUE:
+// True - handled
+// False - unhandled
+//
+// COMMENTS:
+//
+//____________________________________________________________________________________________________________________________
+BOOL WINAPI ControlHandler ( DWORD dwCtrlType )
+{
+ switch( dwCtrlType )
+ {
+ case CTRL_BREAK_EVENT: // use Ctrl+C or Ctrl+Break to simulate
+ case CTRL_C_EVENT: // SERVICE_CONTROL_STOP in debug mode
+ _tprintf(TEXT("Stopping %s.\n"), TEXT(SZSERVICEDISPLAYNAME));
+ ServiceStop();
+ return TRUE;
+ break;
+
+ }
+ return FALSE;
+}
+//____________________________________________________________________________________________________________________________
+//
+// FUNCTION: GetLastErrorText
+//
+// PURPOSE: copies error message text to string
+//
+// PARAMETERS:
+// lpszBuf - destination buffer
+// dwSize - size of buffer
+//
+// RETURN VALUE:
+// destination buffer
+//
+// COMMENTS:
+//
+//____________________________________________________________________________________________________________________________
+LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize )
+{
+ DWORD dwRet;
+ LPTSTR lpszTemp = NULL;
+
+ dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,
+ NULL,
+ GetLastError(),
+ LANG_NEUTRAL,
+ (LPTSTR)&lpszTemp,
+ 0,
+ NULL );
+
+ // supplied buffer is not long enough
+ if ( !dwRet || ( (long)dwSize < (long)dwRet+14 ) )
+ lpszBuf[0] = TEXT('\0');
+ else
+ {
+ lpszTemp[lstrlen(lpszTemp)-2] = TEXT('\0'); //remove cr and newline character
+ _stprintf( lpszBuf, TEXT("%s (0x%x)"), lpszTemp, GetLastError() );
+ }
+
+ if ( lpszTemp )
+ LocalFree((HLOCAL) lpszTemp );
+
+ return lpszBuf;
+}
diff --git a/admin/Sources/Clients/ogAdmWinClient/sources/servicio.h b/admin/Sources/Clients/ogAdmWinClient/sources/servicio.h
new file mode 100644
index 00000000..760d2c1a
--- /dev/null
+++ b/admin/Sources/Clients/ogAdmWinClient/sources/servicio.h
@@ -0,0 +1,153 @@
+// ******************************************************************************************************************************************************************************
+// Aplicacin HIDRA
+// Copyright 2003-2005 Jos Manuel Alonso. Todos los derechos reservados.
+// Fichero: servicio.h
+// Descripcin:
+// Este proyecto implementa el servicio hidra en un ordenador con plataforma windows NT. Este fichero aporta las funciones para crear el servicio
+// ******************************************************************************************************************************************************************************
+//____________________________________________________________________________________________________________________________
+// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
+// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
+// PARTICULAR PURPOSE.
+//
+// Copyright (C) 1993-1997 Microsoft Corporation. All Rights Reserved.
+//
+// MODULE: service.h
+// AUTHOR: Craig Link
+//
+// Comments: The use of this header file and the accompanying service.c
+// file simplifies the process of writting a service. You as a developer
+// simply need to follow the TODO's outlined in this header file, and
+// implement the ServiceStart() and ServiceStop() functions.
+//
+// There is no need to modify the code in service.c. Just add service.c
+// to your project and link with the following libraries...
+//
+// libcmt.lib kernel32.lib advapi.lib shell32.lib
+//
+// This code also supports unicode. Be sure to compile both service.c and
+// and code #include "service.h" with the same Unicode setting.
+//
+// Upon completion, your code will have the following command line interface
+//
+// <service exe> -? to display this list
+// <service exe> -install to install the service
+// <service exe> -remove to remove the service
+// <service exe> -debug <params> to run as a console app for debugging
+//
+// Note: This code also implements Ctrl+C and Ctrl+Break handlers
+// when using the debug option. These console events cause
+// your ServiceStop routine to be called
+//
+// Also, this code only handles the OWN_SERVICE service type
+// running in the LOCAL_SYSTEM security context.
+//
+// To control your service ( start, stop, etc ) you may use the
+// Services control panel applet or the NET.EXE program.
+//
+// To aid in writing/debugging service, the
+// SDK contains a utility (MSTOOLS\BIN\SC.EXE) that
+// can be used to control, configure, or obtain service status.
+// SC displays complete status for any service/driver
+// in the service database, and allows any of the configuration
+// parameters to be easily changed at the command line.
+// For more information on SC.EXE, type SC at the command line.
+//
+//____________________________________________________________________________________________________________________________
+#include <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <process.h>
+#include <tchar.h>
+#include "registrow.h"
+
+#ifndef _SERVICE_H
+#define _SERVICE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// name of the executable
+#define SZAPPNAME "ogAdmWinClient"
+// internal name of the service
+#define SZSERVICENAME "Cliente Opengnsys"
+// displayed name of the service
+#define SZSERVICEDISPLAYNAME "Cliente Opengnsys"
+// list of service dependencies - "dep1\0dep2\0\0"
+#define SZDEPENDENCIES ""
+
+#define SERVIDOR_DEFAULT "0.0.0.0"
+#define PUERTO_DEFAULT "2003"
+#define IPLOCAL_DEFAULT "0.0.0.0"
+
+#define CHKREGISTRY(f) if (!(f)) { return 0;}
+#define RMVREGISTRY(f) if (!(f)) { return 0;}
+#define TOMAPARAMINT(p) p=atoi(&argv[i][3]);
+#define TOMAPARAMSTR(p) strcpy(p,&argv[i][3]);
+
+#define HIVE HKEY_LOCAL_MACHINE // Rama del registro donde estarn los parametros de conexin
+#define BASEKEY "SOFTWARE\\opengnsys" // Key del registro para parametros de conexin
+#define BASE "SOFTWARE\\opengnsys\\cliente" // SubKey del registro para parametros de conexin
+
+//____________________________________________________________________________________________________________________________
+//
+SERVICE_STATUS ssStatus; // current status of the service
+SERVICE_STATUS_HANDLE sshStatusHandle;
+//
+//____________________________________________________________________________________________________________________________
+// ServiceStart()must be defined by in your code.
+// The service should use ReportStatusToSCMgr to indicate
+// progress. This routine must also be used by StartService()
+// to report to the SCM when the service is running.
+//
+// If a ServiceStop procedure is going to take longer than
+// 3 seconds to execute, it should spawn a thread to
+// execute the stop code, and return. Otherwise, the
+// ServiceControlManager will believe that the service has
+// stopped responding
+//
+//____________________________________________________________________________________________________________________________
+VOID ServiceStart(DWORD dwArgc, LPTSTR *lpszArgv);
+VOID ServiceStop();
+//____________________________________________________________________________________________________________________________
+// The following are procedures which
+// may be useful to call within the above procedures,
+// but require no implementation by the user.
+// They are implemented in service.c
+//
+// FUNCTION: ReportStatusToSCMgr()
+//
+// PURPOSE: Sets the current status of the service and
+// reports it to the Service Control Manager
+//
+// PARAMETERS:
+// dwCurrentState - the state of the service
+// dwWin32ExitCode - error code to report
+// dwWaitHint - worst case estimate to next checkpoint
+//
+// RETURN VALUE:
+// TRUE - success
+// FALSE - failure
+//____________________________________________________________________________________________________________________________
+BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint);
+//____________________________________________________________________________________________________________________________
+// FUNCTION: AddToMessageLog(LPTSTR lpszMsg)
+//
+// PURPOSE: Allows any thread to log an error message
+//
+// PARAMETERS:
+// lpszMsg - text for message
+//
+// RETURN VALUE:
+// none
+//____________________________________________________________________________________________________________________________
+void AddToMessageLog(LPTSTR lpszMsg);
+//____________________________________________________________________________________________________________________________
+//
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/admin/Sources/Includes/ogAdmLib.c b/admin/Sources/Includes/ogAdmLib.c
index fdda2855..dc1b6f60 100644
--- a/admin/Sources/Includes/ogAdmLib.c
+++ b/admin/Sources/Includes/ogAdmLib.c
@@ -17,7 +17,7 @@
// ________________________________________________________________________________________________________
char * encriptar(char *cadena,int*ret)
{
-return(cadena);
+ /*
int i,lon;
char clave;
@@ -26,6 +26,7 @@ return(cadena);
for(i=0;i<lon;i++)
cadena[i]=((char)cadena[i] ^ clave) & 0xFF;
*ret=lon;
+ */
return(cadena);
}
// ________________________________________________________________________________________________________
@@ -39,7 +40,7 @@ return(cadena);
// ________________________________________________________________________________________________________
char * desencriptar(char *cadena,int* ret)
{
-return(cadena);
+ /*
int i,lon;
char clave;
@@ -48,7 +49,9 @@ return(cadena);
for(i=0;i<lon;i++)
cadena[i]=((char)cadena[i] ^ clave) & 0xFF;
*ret=lon;
+ */
return(cadena);
+
}
// ________________________________________________________________________________________________________
// Función: tomaHora
@@ -191,6 +194,10 @@ BOOLEAN validacionParametros(int argc, char*argv[],int eje) {
strcpy(szPathFileCfg, "ogAdmAgent.cfg"); // Valores por defecto de archivos
strcpy(szPathFileLog, "ogAdmAgent.log"); // de configuración y de logs
break;
+ case 6: // Agente
+ strcpy(szPathFileCfg, "ogAdmWinClient.cfg"); // Valores por defecto de archivos
+ strcpy(szPathFileLog, "ogAdmWinClient.log"); // de configuración y de logs
+ break;
}
ndebug = 1; // Nivel de debuger por defecto
@@ -838,6 +845,7 @@ char * leeArchivo(char *fil)
{
FILE *f;
long lSize;
+ char* buffer;
f=fopen(fil,"rb");
if (!f)
@@ -845,7 +853,7 @@ char * leeArchivo(char *fil)
fseek (f,0,SEEK_END); // Obtiene tamaño del fichero.
lSize = ftell (f);
rewind (f);
- char*buffer = (char*) reservaMemoria(lSize+1); // Toma memoria para el buffer de lectura.
+ buffer = (char*) reservaMemoria(lSize+1); // Toma memoria para el buffer de lectura.
if (!buffer) // No hay memoria suficiente para el buffer
return (NULL);
lSize=fread (buffer,1,lSize,f); // Lee contenido del fichero
@@ -1036,7 +1044,11 @@ SOCKET abreConexion(void)
return(s);
}
swloop++;
- sleep(5); // Espera cinco sgendo antes de intentar una nueva conexión
+ #ifdef __WINDOWS__
+ Sleep(5*1000);
+ #else
+ sleep(5); // Espera cinco segundos antes de intentar una nueva conexión
+ #endif
}
return(INVALID_SOCKET);
}
diff --git a/admin/Sources/Includes/ogAdmLib.h b/admin/Sources/Includes/ogAdmLib.h
index 1a33efc4..07b05985 100644
--- a/admin/Sources/Includes/ogAdmLib.h
+++ b/admin/Sources/Includes/ogAdmLib.h
@@ -21,7 +21,7 @@
#define LONSUC 512 // Longitud de los mensajes de sucesos
#define LONBLK 512 // Longitud de los paquetes de tramas leidos cada vez
#define MAXPRM 10 // Máximo número de parámeros del fichero de configuración del servicio
-#define MAXPAR 16 // Máximo número de particiones manejadas por el sistema
+#define MAXPAR 128 // Maximo numero de particiones manejadas por el sistema, ahora con GPT es 128
#define MAXLONURL 512 // Longitud máxima de una dirección url con parámetros
#define LONHEXPRM 5 // Longitud del campo que contiene el tamaño de la cadena de parámetros
@@ -175,7 +175,7 @@ const char* tbErrores[]={"Se han generado errores. No se puede continuar la ejec
"037-Ha ocurrido algún problema en el proceso de inclusión del cliente",\
"038-No se ha podido establecer conexión con el Servidor de Administración",\
"039-Ha ocurrido algún problema al procesar la trama recibida",\
- "040-Se han recibido parámetros conurl valores no válidos",\
+ "040-Se han recibido parámetros con valores no válidos",\
"041-Ha ocurrido algún problema en el proceso de inclusión del cliente",\
"042-Ha ocurrido algún problema al enviar una petición de comandos o tareas pendientes al Servidor de Administración",\
"043-Ha ocurrido algún problema al enviar una petición de comandos interactivos al Servidor de Administración",\
@@ -227,6 +227,8 @@ const char* tbErrores[]={"Se han generado errores. No se puede continuar la ejec
"089-Error en el fichero de configuración del programa. No se ha definido el parámetro URLMENU",\
"090-Error en el fichero de configuración del programa. No se ha definido el parámetro URLMSG",\
"091-Ha habido algún problema al enviar un mensaje de tipo petición al Servidor",\
+ "092-Error en el fichero de configuración del programa. No se ha definido el parámetro IPLOCAL",\
+ "093-No se puede caragar la libraria Windows para trabajar con sockets",\
};
// ________________________________________________________________________________________________________
diff --git a/admin/Sources/Includes/registrow.c b/admin/Sources/Includes/registrow.c
new file mode 100644
index 00000000..ae16eef6
--- /dev/null
+++ b/admin/Sources/Includes/registrow.c
@@ -0,0 +1,199 @@
+// ********************************************************************************************************************************************************
+// Aplicacin HIDRA
+// Copyright 2003-2005 Jos Manuel Alonso. Todos los derechos reservados.
+// Fichero: registro.c
+// Descripcin:
+// Este proyecto implementa el servicio hidra en un ordenador con plataforma windows NT. Este fichero aporta las funciones de
+// manipulacin del registro de Windows
+// *********************************************************************************************************************************************************
+#include "registrow.h"
+//____________________________________________________________________________________________________________________________
+//
+BOOLEAN WriteRegistryString(HKEY hive,char *key,char *subkey,char *value)
+{
+ HKEY hk;
+ DWORD dp,ret;
+ int sz;
+
+ sz=strlen(value)+1;
+ if (RegCreateKeyEx(
+ hive,
+ key,
+ 0,
+ "REG_SZ",
+ REG_OPTION_NON_VOLATILE,
+ KEY_WRITE,
+ NULL,
+ &hk,
+ &dp)!=ERROR_SUCCESS)
+ return FALSE;
+ if ((ret=RegSetValueEx(hk,subkey,0,REG_SZ,(unsigned char *)value,sz))!=ERROR_SUCCESS)
+ {
+ SetLastError(ret);
+ return FALSE;
+ }
+ RegCloseKey(hk);
+ return TRUE;
+}
+// _____________________________________________________________________________________________________________
+BOOLEAN WriteRegistryBytes(HKEY hive,char *key,char *subkey,void *value,int sz)
+{
+ HKEY hk;
+ DWORD dp,ret;
+
+ if (RegCreateKeyEx(
+ hive,
+ key,
+ 0,
+ "REG_BINARY",
+ REG_OPTION_NON_VOLATILE,
+ KEY_WRITE,
+ NULL,
+ &hk,
+ &dp)!=ERROR_SUCCESS)
+ return FALSE;
+ if ((ret=RegSetValueEx(hk,subkey,0,REG_BINARY,(BYTE*)value,sz))!=ERROR_SUCCESS)
+ {
+ SetLastError(ret);
+ return FALSE;
+ }
+ RegCloseKey(hk);
+ return TRUE;
+}
+// _____________________________________________________________________________________________________________
+BOOLEAN WriteRegistryInteger(HKEY hive,char *key,char *subkey,DWORD value)
+{
+ HKEY hk;
+ DWORD dp,ret;
+ int sz;
+
+ sz=sizeof(DWORD);
+ if (RegCreateKeyEx(
+ hive,
+ key,
+ 0,
+ "REG_DWORD",
+ REG_OPTION_NON_VOLATILE,
+ KEY_WRITE,
+ NULL,
+ &hk,
+ &dp)!=ERROR_SUCCESS)
+ return FALSE;
+ if ((ret=RegSetValueEx(hk,subkey,0,REG_DWORD,(BYTE*)&value,sz))!=ERROR_SUCCESS)
+ {
+ SetLastError(ret);
+ return FALSE;
+ }
+ RegCloseKey(hk);
+ return TRUE;
+}
+// _____________________________________________________________________________________________________________
+BOOLEAN ReadRegistryString(HKEY hive,char *key,char *subkey,char *value,int sz)
+{
+ HKEY hk;
+ DWORD type,ret;
+
+ if (RegOpenKeyEx(
+ hive,
+ key,
+ 0,
+ KEY_QUERY_VALUE,
+ &hk)!=ERROR_SUCCESS)
+ {
+ return FALSE;
+ }
+ if ((ret=RegQueryValueEx(hk,subkey,0,&type,(unsigned char *)value,(DWORD*)&sz))!=ERROR_SUCCESS)
+ {
+ RegCloseKey(hk);
+ SetLastError(ret);
+ return FALSE;
+ }
+ RegCloseKey(hk);
+ return TRUE;
+}
+// _____________________________________________________________________________________________________________
+BOOLEAN ReadRegistryInteger(HKEY hive,char *key,char *subkey,DWORD *value)
+{
+ HKEY hk;
+ DWORD sz=sizeof(DWORD),type,ret;
+
+ if (RegOpenKeyEx(
+ hive,
+ key,
+ 0,
+ KEY_QUERY_VALUE,
+ &hk)!=ERROR_SUCCESS)
+ {
+ return FALSE;
+ }
+ if ((ret=RegQueryValueEx(hk,subkey,0,&type,(LPBYTE)value,&sz))!=ERROR_SUCCESS)
+ {
+ RegCloseKey(hk);
+ SetLastError(ret);
+ return FALSE;
+ }
+ RegCloseKey(hk);
+ return TRUE;
+}
+// _____________________________________________________________________________________________________________
+BOOLEAN ReadRegistryShort(HKEY hive,char *key,char *subkey,short *value)
+{
+ HKEY hk;
+ DWORD sz=sizeof(DWORD),type,tmpvalue,ret;
+
+ if (RegOpenKeyEx(
+ hive,
+ key,
+ 0,
+ KEY_QUERY_VALUE,
+ &hk)!=ERROR_SUCCESS)
+ {
+ return FALSE;
+ }
+ if ((ret=RegQueryValueEx(hk,subkey,0,&type,(LPBYTE)&tmpvalue,&sz))!=ERROR_SUCCESS)
+ {
+ RegCloseKey(hk);
+ SetLastError(ret);
+ return FALSE;
+ }
+ RegCloseKey(hk);
+ *value=(short)tmpvalue;
+ return TRUE;
+}
+// _____________________________________________________________________________________________________________
+BOOLEAN DeleteRegistryValue(HKEY hive,char *key,char *subkey)
+{
+ HKEY hk;
+ DWORD ret;
+
+ if (RegOpenKeyEx(
+ hive,
+ key,
+ 0,
+ KEY_SET_VALUE,
+ &hk)!=ERROR_SUCCESS)
+ {
+ return FALSE;
+ }
+ if ((ret=RegDeleteValue(hk,subkey))!=ERROR_SUCCESS)
+ {
+ RegCloseKey(hk);
+ SetLastError(ret);
+ return FALSE;
+ }
+ RegCloseKey(hk);
+ return TRUE;
+}
+// _____________________________________________________________________________________________________________
+BOOLEAN DeleteRegistryKey(HKEY hive,char *key)
+{
+ DWORD ret;
+
+ if ((ret=RegDeleteKey(hive,key))!=ERROR_SUCCESS)
+ {
+ SetLastError(ret);
+ return FALSE;
+ }
+ return TRUE;
+}
+
diff --git a/admin/Sources/Includes/registrow.h b/admin/Sources/Includes/registrow.h
new file mode 100644
index 00000000..611d493c
--- /dev/null
+++ b/admin/Sources/Includes/registrow.h
@@ -0,0 +1,20 @@
+// ********************************************************************************************************************************************************
+// Aplicacin HIDRA
+// Copyright 2003-2005 Jos Manuel Alonso. Todos los derechos reservados.
+// Fichero: registro.h
+// Descripcin:
+// Este proyecto implementa el servicio hidra en un ordenador con plataforma windows NT. Este fichero aporta las funciones de
+// manipulacin del registro de Windows
+// *********************************************************************************************************************************************************
+#include <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+BOOLEAN WriteRegistryString(HKEY hive,char *key,char *subkey,char *value);
+BOOLEAN WriteRegistryInteger(HKEY hive,char *key,char *subkey,DWORD value);
+BOOLEAN WriteRegistryBytes(HKEY hive,char *key,char *subkey,void *value,int sz);
+BOOLEAN ReadRegistryString(HKEY hive,char *key,char *subkey,char *value,int sz);
+BOOLEAN ReadRegistryInteger(HKEY hive,char *key,char *subkey,DWORD *value);
+BOOLEAN ReadRegistryShort(HKEY hive,char *key,char *subkey,short *value);
+BOOLEAN DeleteRegistryValue(HKEY hive,char *key,char *subkey);
+BOOLEAN DeleteRegistryKey(HKEY hive,char *key); \ No newline at end of file
diff --git a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp
index 25316dff..6f4a4785 100644
--- a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp
+++ b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp
@@ -1,11 +1,11 @@
-// ********************************************************************************************************
+// *******************************************************************************************************
// Servicio: ogAdmServer
// 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: ogAdmServer.cpp
// Descripción :Este fichero implementa el servicio de administración general del sistema
-// ********************************************************************************************************
+// *******************************************************************************************************
#include "ogAdmServer.h"
#include "ogAdmLib.c"
//________________________________________________________________________________________________________
@@ -130,6 +130,7 @@ BOOLEAN gestionaTrama(SOCKET *socket_c)
char modulo[] = "gestionaTrama()";
ptrTrama=recibeTrama(socket_c);
+
if (ptrTrama){
INTROaFINCAD(ptrTrama);
nfn = copiaParametro("nfn",ptrTrama); // Toma dirección/es IP
@@ -424,6 +425,113 @@ BOOLEAN hayHueco(int *idx) {
return (FALSE);
}
// ________________________________________________________________________________________________________
+// Función: InclusionClienteWin
+//
+// Descripción:
+// Esta función incorpora el socket de un nuevo cliente Windows o Linux a la tabla de clientes
+// Parámetros:
+// - socket_c: Socket del cliente que envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN InclusionClienteWinLnx(SOCKET *socket_c, TRAMA *ptrTrama)
+ {
+ char modulo[] = "InclusionClienteWinLnx()";
+ int res,idordenador,lon;
+ char nombreordenador[LONFIL];
+
+ res=procesoInclusionClienteWinLnx(socket_c, ptrTrama,&idordenador,nombreordenador);
+
+ // Prepara la trama de respuesta
+
+ initParametros(ptrTrama,0);
+ ptrTrama->tipo=MSG_RESPUESTA;
+ lon = sprintf(ptrTrama->parametros, "nfn=RESPUESTA_InclusionClienteWinLnx\r");
+ lon += sprintf(ptrTrama->parametros + lon, "ido=%d\r", idordenador);
+ lon += sprintf(ptrTrama->parametros + lon, "npc=%s\r", nombreordenador);
+ lon += sprintf(ptrTrama->parametros + lon, "res=%d\r", res);
+
+ if (!mandaTrama(socket_c, ptrTrama)) {
+ errorLog(modulo, 26, FALSE);
+ return (FALSE);
+ }
+ return (TRUE);
+}
+// ________________________________________________________________________________________________________
+// Función: procesoInclusionClienteWinLnx
+//
+// Descripción:
+// Implementa el proceso de inclusión en el sistema del Cliente Windows o Linux
+// Parámetros de entrada:
+// - socket_c: Socket del cliente que envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Parámetros de salida:
+// - ido: Identificador del ordenador
+// - nombreordenador: Nombre del ordenador
+// Devuelve:
+// Código del error producido en caso de ocurrir algún error, 0 si el proceso es correcto
+// ________________________________________________________________________________________________________
+BOOLEAN procesoInclusionClienteWinLnx(SOCKET *socket_c, TRAMA *ptrTrama,int *idordenador,char* nombreordenador)
+ {
+ char msglog[LONSTD], sqlstr[LONSQL];
+ Database db;
+ Table tbl;
+
+ char *iph;
+ char modulo[] = "procesoInclusionClienteWinLnx()";
+
+ // Toma parámetros
+ iph = copiaParametro("iph",ptrTrama); // Toma ip
+
+ if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexión con la BD
+ errorLog(modulo, 20, FALSE);
+ db.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (20);
+ }
+
+ // Recupera los datos del cliente
+ sprintf(sqlstr,
+ "SELECT idordenador,nombreordenador FROM ordenadores "
+ " WHERE ordenadores.ip = '%s'", iph);
+
+ if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
+ errorLog(modulo, 21, FALSE);
+ db.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (21);
+ }
+
+ if (tbl.ISEOF()) { // Si no existe el cliente
+ errorLog(modulo, 22, FALSE);
+ return (22);
+ }
+
+ if (ndebug == DEBUG_ALTO) {
+ sprintf(msglog, "%s IP:%s", tbMensajes[2], iph);
+ infoDebug(msglog);
+ }
+ if (!tbl.Get("idordenador", *idordenador)) {
+ tbl.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
+ if (!tbl.Get("nombreordenador", nombreordenador)) {
+ tbl.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
+ db.Close();
+
+ if (!registraCliente(iph)) { // Incluyendo al cliente en la tabla de sokets
+ errorLog(modulo, 25, FALSE);
+ return (25);
+ }
+ return(0);
+}
+// ________________________________________________________________________________________________________
// Función: InclusionCliente
//
// Descripción:
@@ -448,7 +556,7 @@ BOOLEAN InclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) {
}
}
return (TRUE);
-}
+}
// ________________________________________________________________________________________________________
// Función: procesoInclusionCliente
//
@@ -469,7 +577,7 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) {
char *iph, *cfg;
char nombreordenador[LONFIL];
int lon, resul, idordenador, idmenu, cache, idproautoexec, idaula, idcentro;
- char modulo[] = "InclusionCliente()";
+ char modulo[] = "procesoInclusionCliente()";
// Toma parámetros
iph = copiaParametro("iph",ptrTrama); // Toma ip
@@ -599,22 +707,25 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
{
char msglog[LONSTD], sqlstr[LONSQL];
int lon, p, c, i, dato, swu, idsoi, idsfi,k;
- char *ptrPar[MAXPAR], *ptrCfg[5], *ptrDual[2], tbPar[LONSTD];
- char *par, *cpt, *sfi, *soi, *tam; // Parametros que definen una partición
+ char *ptrPar[MAXPAR], *ptrCfg[6], *ptrDual[2], tbPar[LONSTD];
+ char *disk, *par, *cpt, *sfi, *soi, *tam; // Parametros que definen una partición
char modulo[] = "actualizaConfiguracion()";
lon = sprintf(tbPar, "(");
p = splitCadena(ptrPar, cfg, '\n');
for (i = 0; i < p; i++) {
c = splitCadena(ptrCfg, ptrPar[i], '\t');
- par = cpt = sfi = soi = tam = NULL;
+ disk = par = cpt = sfi = soi = tam = NULL;
splitCadena(ptrDual, ptrCfg[0], '=');
- par = ptrDual[1]; // Número de partición
+ disk = ptrDual[1]; // Número de disco
splitCadena(ptrDual, ptrCfg[1], '=');
+ par = ptrDual[1]; // Número de partición
+
+ splitCadena(ptrDual, ptrCfg[2], '=');
cpt = ptrDual[1]; // Código de partición
- k=splitCadena(ptrDual, ptrCfg[2], '=');
+ k=splitCadena(ptrDual, ptrCfg[3], '=');
if(k==2){
sfi = ptrDual[1]; // Sistema de ficheros
/* Comprueba existencia del sistema de ficheros instalado */
@@ -623,7 +734,7 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
else
idsfi=0;
- k=splitCadena(ptrDual, ptrCfg[3], '=');
+ k=splitCadena(ptrDual, ptrCfg[4], '=');
if(k==2){ // Sistema operativo detecdtado
soi = ptrDual[1]; // Nombre del S.O. instalado
/* Comprueba existencia del sistema operativo instalado */
@@ -632,16 +743,14 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
else
idsoi=0;
- splitCadena(ptrDual, ptrCfg[4], '=');
+ splitCadena(ptrDual, ptrCfg[5], '=');
tam = ptrDual[1]; // Tamaño de la partición
lon += sprintf(tbPar + lon, "%s,", par);
- sprintf(
- sqlstr,
- "SELECT numpar,codpar,tamano,idsistemafichero,idnombreso"
- " FROM ordenadores_particiones WHERE idordenador=%d AND numpar=%s",
- ido, par);
+ sprintf(sqlstr, "SELECT numdisk,numpar,codpar,tamano,idsistemafichero,idnombreso"
+ " FROM ordenadores_particiones WHERE idordenador=%d AND numdisk=%s AND numpar=%s",
+ ido, disk, par);
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
db.GetErrorErrStr(msglog);
@@ -649,12 +758,10 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
return (FALSE);
}
if (tbl.ISEOF()) { // Si no existe el registro
- sprintf(
- sqlstr,
- "INSERT INTO ordenadores_particiones(idordenador,numpar,codpar,tamano,idsistemafichero,idnombreso,idimagen)"
- " VALUES(%d,%s,0x%s,%s,%d,%d,0)", ido, par, cpt, tam,
- idsfi, idsoi);
-
+ sprintf(sqlstr, "INSERT INTO ordenadores_particiones(idordenador,numdisk,numpar,codpar,tamano,idsistemafichero,idnombreso,idimagen)"
+ " VALUES(%d,%s,%s,0x%s,%s,%d,%d,0)",
+ ido, disk, par, cpt, tam, idsfi, idsoi);
+ errorInfo(modulo,sqlstr);
if (!db.Execute(sqlstr, tbl)) { // Error al insertar
db.GetErrorErrStr(msglog);
errorInfo(modulo, msglog);
@@ -699,10 +806,9 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
" idnombreso=%d,"
" idimagen=%d,"
" idperfilsoft=%d"
- " WHERE idordenador=%d AND numpar=%s"\
-, cpt, tam, idsfi,
- idsoi, 0, 0, ido, par);
-
+ " WHERE idordenador=%d AND numdisk=%s AND numpar=%s",
+ cpt, tam, idsfi, idsoi, 0, 0, ido, disk, par);
+ errorInfo(modulo,sqlstr);
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
db.GetErrorErrStr(msglog);
@@ -714,10 +820,8 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
}
lon += sprintf(tbPar + lon, "%d)", 0);
// Eliminar particiones almacenadas que ya no existen
- sprintf(
- sqlstr,
- "DELETE FROM ordenadores_particiones WHERE idordenador=%d AND numpar NOT IN %s",
- ido, tbPar);
+ sprintf(sqlstr, "DELETE FROM ordenadores_particiones WHERE idordenador=%d AND numdisk=%s AND numpar NOT IN %s",
+ ido, disk, tbPar);
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
db.GetErrorErrStr(msglog);
@@ -995,7 +1099,7 @@ BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids)
errorInfo(modulo, msglog);
return (FALSE);
}
- sprintf(sqlstr,"SELECT sesion,parametros,length( parametros) as lonprm"\
+ sprintf(sqlstr,"SELECT idaccion,parametros,length( parametros) as lonprm"\
" FROM acciones WHERE idordenador=%s AND estado='%d' ORDER BY idaccion", ido, ACCION_INICIADA);
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
@@ -1007,7 +1111,7 @@ BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids)
db.Close();
return (FALSE); // No hay comandos pendientes
} else { // Busca entre todas las acciones de diversos ambitos
- if (!tbl.Get("sesion", *ids)) { // Toma identificador de la acción
+ if (!tbl.Get("idaccion", *ids)) { // Toma identificador de la acción
tbl.GetErrorErrStr(msglog); // Error al acceder al registro
errorInfo(modulo, msglog);
return (FALSE);
@@ -1044,13 +1148,14 @@ BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids)
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
BOOLEAN DisponibilidadComandos(SOCKET *socket_c, TRAMA *ptrTrama) {
- char *iph, *tpc;
+ char *iph, *tpc,msglog[LONSTD];
int idx;
char modulo[] = "DisponibilidadComandos()";
- iph = copiaParametro("iph",ptrTrama); // Toma ip
- tpc = copiaParametro("tpc",ptrTrama); // Tipo de cliente (Plataforma y S.O.)
+ tpc = copiaParametro("tpc",ptrTrama); // Tipo de cliente (Plataforma y S.O.)
+ iph = copiaParametro("iph",ptrTrama); // Toma ip
+
if (!clienteExistente(iph, &idx)) { // Busca índice del cliente
errorLog(modulo, 47, FALSE);
return (FALSE);
@@ -1093,7 +1198,7 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db,
return (TRUE);
sprintf(sqlstr,
- "SELECT * FROM acciones WHERE idordenador=%s AND sesion=%s", ido,
+ "SELECT * FROM acciones WHERE idordenador=%s AND idaccion=%s", ido,
ids);
if (!db.Execute(sqlstr, tbl)) { // Error al consultar
errorLog(modulo, 21, FALSE);
@@ -1113,7 +1218,7 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db,
sprintf(
sqlstr,
"UPDATE acciones SET resultado='%s',estado='%d',fechahorafin='%s',descrinotificacion='%s'"\
- " WHERE idordenador=%s AND sesion=%s",
+ " WHERE idordenador=%s AND idaccion=%s",
res, ACCION_FINALIZADA, fechafin, der, ido, ids);
if (!db.Execute(sqlstr, tbl)) { // Error al actualizar
db.GetErrorErrStr(msglog);
@@ -1138,7 +1243,8 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db,
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN enviaComando(TRAMA* ptrTrama, const char *estado) {
+BOOLEAN enviaComando(TRAMA* ptrTrama, const char *estado)
+ {
char *iph, *Ipes, *ptrIpes[MAXIMOS_CLIENTES];
int i, idx, lon;
char modulo[] = "enviaComando()";
@@ -2858,7 +2964,6 @@ BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama)
}
return (TRUE); // No existen registros
}
-
// ********************************************************************************************************
// PROGRAMA PRINCIPAL (SERVICIO)
// ********************************************************************************************************
@@ -2904,6 +3009,9 @@ int main(int argc, char *argv[]) {
strcpy(tbfuncionesServer[cf].nf, "InclusionCliente");
tbfuncionesServer[cf++].fptr = &InclusionCliente;
+ strcpy(tbfuncionesServer[cf].nf, "InclusionClienteWinLnx");
+ tbfuncionesServer[cf++].fptr = &InclusionClienteWinLnx;
+
strcpy(tbfuncionesServer[cf].nf, "AutoexecCliente");
tbfuncionesServer[cf++].fptr = &AutoexecCliente;
diff --git a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h
index 13a53570..fb2f117a 100644
--- a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h
+++ b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h
@@ -53,9 +53,11 @@ BOOLEAN tomaConfiguracion(char*);
BOOLEAN gestionaTrama(SOCKET*);
BOOLEAN Sondeo(SOCKET*,TRAMA*);
BOOLEAN respuestaSondeo(SOCKET *,TRAMA*);
+BOOLEAN InclusionClienteWinLnx(SOCKET*,TRAMA*);
BOOLEAN InclusionCliente(SOCKET*,TRAMA*);
BOOLEAN registraCliente(char *);
+BOOLEAN procesoInclusionClienteWinLnx(SOCKET*,TRAMA*,int*,char*);
BOOLEAN procesoInclusionCliente(SOCKET*,TRAMA*);
BOOLEAN clienteExistente(char *,int *);
BOOLEAN clienteDisponible(char *,int *);
diff --git a/admin/Sources/Services/opengnsys.init b/admin/Sources/Services/opengnsys.init
index 477cc99b..2c46fc70 100755
--- a/admin/Sources/Services/opengnsys.init
+++ b/admin/Sources/Services/opengnsys.init
@@ -7,13 +7,16 @@
# Default-Start: 2 3 4 5
# Default-Stop: 1
# Short-Description: Servicios del sistema OpenGnSys
-# Description: Servicios del sistema OpenGnSys:
+# Description: Servicios del sistema OpenGnSys
### END INIT INFO
#
# Definiciones globales
#
BASEDIR=/opt/opengnsys
+OPENGNSYSUSER="opengnsys"
+IMAGEDIR=$BASEDIR/images
+CLIENTLOGDIR=$BASEDIR/log/clients
#
# Servidor de OpenGnSys
@@ -35,7 +38,7 @@ REPODAEMON_OPTIONS="-f $REPOCFG -l $REPOLOG"
############## ADV
REPOAUXNAME=ogAdmRepoAux
REPOAUXDAEMON=$BASEDIR/sbin/$REPOAUXNAME
-REPOAUXPORT=$((`cat $SERVERCFG | grep PUERTO | cut -f2 -d"="` + 1))
+REPOAUXPORT=$(awk -F= '/PUERTO/ {print $2+1}' $SERVERCFG 2>/dev/null)
############## ADV
#
@@ -55,11 +58,10 @@ BTTRACK=/usr/bin/bttrack.bittorrent
BTSEEDER=/usr/bin/btlaunchmany.bittornado
BTTRACKPORT=6969
BTTRACKDFILE=/tmp/dstate
-BTTRACKLOG=/opt/opengnsys/log/bttrack.log
+BTTRACKLOG=$BASEDIR/log/bttrack.log
BTINTERVAL=30
-BTTORRENTSDIR=/opt/opengnsys/images
-BTALLOW_GET=1
-BTTRACK_OPTIONS=" --port $BTTRACKPORT --dfile $BTTRACKDFILE --reannounce_interval $BTINTERVAL --logfile $BTTRACKLOG --allowed_dir $BTTORRENTSDIR --allow_get $BTALLOW_GET --parse_allowed_interval 1"
+BTTORRENTSDIR=$BASEDIR/images
+BTTRACK_OPTIONS=" --port $BTTRACKPORT --dfile $BTTRACKDFILE --reannounce_interval $BTINTERVAL --logfile $BTTRACKLOG --allowed_dir $BTTORRENTSDIR --allow_get 1"
BTTRACKPID="/var/run/bttrack.pid"
BTSEEDERPID="/var/run/btseeder.pid"
@@ -67,8 +69,7 @@ BTSEEDERPID="/var/run/btseeder.pid"
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin:/usr/bin"
# Read config file if it is present.
-if [ -r /etc/default/opengnsys ]
-then
+if [ -r /etc/default/opengnsys ]; then
source /etc/default/opengnsys
fi
@@ -80,10 +81,30 @@ config() {
INITFUNCTIONS=/lib/lsb/init-functions
DAEMONSTART="start-stop-daemon --start --quiet --background --exec"
EXTRAOPTS="--"
- DAEMONSTOP="start-stop-daemon --stop --quiet --oknodo --exec"
+ DAEMONSTOP="start-stop-daemon --stop --quiet --oknodo --name"
ACTIONMSG="log_daemon_msg"
SUCCESSMSG="log_end_msg 0"
FAILMSG="log_end_msg 1"
+ TRACKERSTART="start-stop-daemon --make-pidfile --pidfile $BTTRACKPID --start --quiet --background --exec"
+ BTTRACK_OPTIONS="$BTTRACK_OPTIONS --parse_allowed_interval 1"
+ TRACKERSTOP="start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $BTTRACKPID"
+ SEEDERSTART="start-stop-daemon --make-pidfile --pidfile $BTSEEDERPID --start --quiet --background --exec"
+ SEEDERSTOP="start-stop-daemon --stop --quiet --oknodo --pidfile $BTSEEDERPID"
+ ;;
+ CentOS|Fedora)
+ INITFUNCTIONS=/etc/init.d/functions
+ DAEMONSTART="daemon"
+ ENDOPTS="&"
+ DAEMONSTOP="killproc"
+ ACTIONMSG="echo -n"
+ SUCCESSMSG="eval ( success; echo )"
+ FAILMSG="eval ( failure; echo )"
+ BTTRACK=/usr/bin/bttrack.py
+ BTSEEDER=/usr/bin/btlaunchmany.py
+ TRACKERSTART="daemon --pidfile $BTTRACKPID"
+ TRACKERSTOP="killproc -p $BTTRACKPID $BTTRACK"
+ SEEDERSTART="daemon --pidfile $BTSEEDERPID"
+ SEEDERSTOP="killproc -p $BTSEEDERPID $BTSEEDER"
;;
*) echo "Distribución Linux desconcocida o no soportada."
exit ;;
@@ -94,76 +115,84 @@ config() {
}
arranca_demonios() {
- if [ $RUN_OGADMSERVER = "yes" ]
- then
+ # Comprobar que está instalado OpenGnSys.
+ if [ ! -d $BASEDIR ]; then
+ $ACTIONMSG "ERROR: No existe el directorio $BASEDIR"
+ $FAILMSG
+ exit $?
+ fi
+ # Deshabilitar modo reforzado de SELinux.
+ [ -f /selinux/enforce ] && echo 0 > /selinux/enforce
+ # Verificar permisos básicos.
+ if [ "$(stat --printf="%A%G" $IMAGEDIR 2>/dev/null)" != "drwxrwxr-x$OPENGNSYSUSER" ]; then
+ mkdir $IMAGEDIR 2>/dev/null
+ chmod 775 $IMAGEDIR
+ chgrp $OPENGNSYSUSER $IMAGEDIR
+ fi
+ if [ "$(stat --printf="%A%G" $CLIENTLOGDIR 2>/dev/null)" != "drwxrwxr-x$OPENGNSYSUSER" ]; then
+ mkdir -p $CLIENTLOGDIR 2>/dev/null
+ chmod 775 $CLIENTLOGDIR
+ chgrp $OPENGNSYSUSER $CLIENTLOGDIR
+ fi
+ # Arrancar los servicios indicados.
+ if [ $RUN_OGADMSERVER = "yes" ]; then
$ACTIONMSG "Iniciando demonio: $SERVERNAME"
- $DAEMONSTART $SERVERDAEMON $EXTRAOPTS $SERVERDAEMON_OPTIONS
+ $DAEMONSTART $SERVERDAEMON $EXTRAOPTS $SERVERDAEMON_OPTIONS $ENDOPTS
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
fi
- if [ $RUN_OGADMSERVER = "yes" ] && [ $RUN_OGADMREPO = "yes" ]
- then
+ if [ $RUN_OGADMSERVER = "yes" ] && [ $RUN_OGADMREPO = "yes" ]; then
sleep 5 # Damos tiempo a que ogAdmServer este funcionando
fi
- if [ $RUN_OGADMREPO = "yes" ]
- then
+ if [ $RUN_OGADMREPO = "yes" ]; then
$ACTIONMSG "Iniciando demonio: $REPONAME"
- $DAEMONSTART $REPODAEMON $EXTRAOPTS $REPODAEMON_OPTIONS
+ $DAEMONSTART $REPODAEMON $EXTRAOPTS $REPODAEMON_OPTIONS $ENDOPTS
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
- ############ ADV
$ACTIONMSG "Iniciando demonio: $REPOAUXNAME"
faucet $REPOAUXPORT --daemon --in bash -c "$REPOAUXDAEMON"
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
- ############ ADV
fi
- if [ $RUN_OGADMAGENT = "yes" ]
- then
+ if [ $RUN_OGADMAGENT = "yes" ]; then
$ACTIONMSG "Iniciando demonio: $AGENTNAME"
- $DAEMONSTART $AGENTDAEMON $EXTRAOPTS $AGENTDAEMON_OPTIONS
+ $DAEMONSTART $AGENTDAEMON $EXTRAOPTS $AGENTDAEMON_OPTIONS $ENDOPTS
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
fi
- if [ $RUN_BTTRACKER = "yes" ]
- then
+ if [ $RUN_BTTRACKER = "yes" ]; then
$ACTIONMSG "Iniciando demonio: $BTTRACK"
- start-stop-daemon --make-pidfile --pidfile $BTTRACKPID --start --quiet --background --exec $BTTRACK -- $BTTRACK_OPTIONS
+ $TRACKERSTART $BTTRACK $EXTRAOPTS $BTTRACK_OPTIONS $ENDOPTS
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
fi
- if [ $RUN_BTSEEDER = "yes" ]
- then
+ if [ $RUN_BTSEEDER = "yes" ]; then
$ACTIONMSG "Iniciando demonio: $BTSEEDER"
- start-stop-daemon --make-pidfile --pidfile $BTSEEDERPID --start --quiet --background --exec $BTSEEDER -- $BTTORRENTSDIR
+ $SEEDERSTART $BTSEEDER $EXTRAOPTS $BTTORRENTSDIR &>/dev/null $ENDOPTS
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
fi
}
para_demonios() {
- if [ -e $BTSEEDERPID ]
- then
+ if [ -e $BTSEEDERPID ]; then
$ACTIONMSG "Parando demonio: $BTSEEDER"
- start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $BTSEEDERPID
+ $SEEDERSTOP
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
rm -f $BTSEEDERPID
fi
- if [ -e $BTTRACKPID ]
- then
+ if [ -e $BTTRACKPID ]; then
$ACTIONMSG "Parando demonio: $BTTRACK"
- start-stop-daemon --stop --quiet --oknodo --pidfile $BTTRACKPID
+ $TRACKERSTOP
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
rm -f $BTTRACKPID
fi
$ACTIONMSG "Parando demonio: $AGENTNAME"
- $DAEMONSTOP $AGENTDAEMON
+ $DAEMONSTOP $AGENTNAME
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
$ACTIONMSG "Parando demonio: $REPONAME"
- $DAEMONSTOP $REPODAEMON
+ $DAEMONSTOP $REPONAME
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
- ############# ADV
$ACTIONMSG "Parando demonio: $REPOAUXNAME"
pkill faucet
[ $? -le 1 ] && $SUCCESSMSG || $FAILMSG
- ############ ADV
$ACTIONMSG "Parando demonio: $SERVERNAME"
- $DAEMONSTOP $SERVERDAEMON
+ $DAEMONSTOP $SERVERNAME
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
}
diff --git a/admin/WebConsole/asistentes/AsistenteParticionado.php b/admin/WebConsole/asistentes/AsistenteParticionado.php
index 3a5f581e..d29be9b3 100644
--- a/admin/WebConsole/asistentes/AsistenteParticionado.php
+++ b/admin/WebConsole/asistentes/AsistenteParticionado.php
@@ -22,6 +22,7 @@ include_once("../includes/HTMLSELECT.php");
include_once("../idiomas/php/".$idioma."/comandos/ejecutarscripts_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/configuraciones_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/avisos_".$idioma.".php");
include_once("../includes/HTMLCTESELECT.php");
include_once("../includes/TomaDato.php");
include_once("../includes/ConfiguracionesParticiones.php");
@@ -43,14 +44,14 @@ if (!$cmd)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
-<title> Administración web de aulas </title>
+<title> Administración web de aulas </title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<LINK rel="stylesheet" type="text/css" href="../estilos.css">
<SCRIPT language="javascript" src="./jscripts/EjecutarScripts.js"></SCRIPT>
<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
<SCRIPT language="javascript" src="./jscripts/asistentes.js"></SCRIPT>
- <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/ejecutarscripts_'.$idioma.'.js"></SCRIPT>'?>
- <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
+ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/ejecutarscripts_'.$idioma.'.js"></SCRIPT>'?>
+ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
<?php
@@ -72,8 +73,8 @@ $xajax->printJavascript('../xajax/');
document.getElementById('minsize').value=min;
document.getElementById('freedisk').value=min;
">
-<?
-switch($ambito){
+<?php
+ switch($ambito){
case $AMBITO_CENTROS :
$urlimg='../images/iconos/centros.gif';
$textambito=$TbMsg[0];
@@ -109,27 +110,49 @@ switch($ambito){
$sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil;
pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false);
-
- ?>
-
+?>
<form align=center name="fdatos" >
-
-
- <table class=tabla_datos border="0" cellpadding="0" cellspacing="1">
- <?
- include_once("./includes/asistentes/formParticionado.php");
-?>
-
+ <table class="tabla_datos">
+ <tr>
+ <td>
+ <?php echo $TbMsg[35].":\n"; // Disco ?>
+ <input type="text" name="n_disk" value="1">
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?php echo $TbMsg["CONFIG_PARTTABLE"].":\n"; ?>
+ <select name="tipo_part_table" id="tipo_part_table" onchange="showPartitionForm(this.value)">
+ <option value="MSDOS">MSDOS</option>
+ <option value="GPT">GPT</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <div id="formMSDOS">
+ <table class="tabla_datos" border="0" cellpadding="0" cellspacing="1">
+ <?php include_once("includes/asistentes/formParticionado_msdos.php");?>
+ </table>
+ </div>
+ <div id="formGPT" style="display:none">
+ <table class="tabla_datos" border="0" cellpadding="0" cellspacing="1">
+ <?php include_once("includes/asistentes/formParticionado_gpt.php");?>
+ </table>
+ </div>
+ <table class="tabla_datos">
<tr>
<th><input type="button" name="GenerarInstruccion" Value="<?php echo $TbMsg[41];?>" onclick="codeParticionado(this.form)" /> </th>
<td colspan="2"><textarea class="cajatexto" name="codigo" cols="70" rows="7"></textarea></td>
</tr>
- </table>
+ <tr>
+ <th colspan="3"><?php echo $TbMsg["WARN_REBOOTAFTER"]; ?></th>
+ </tr>
+ </table>
</form>
-<?
+<?php
//________________________________________________________________________________________________________
include_once("./includes/formularioacciones.php");
//________________________________________________________________________________________________________
@@ -137,12 +160,9 @@ switch($ambito){
include_once("./includes/opcionesacciones.php");
//________________________________________________________________________________________________________
-
-
-
-
?>
</body>
</html>
+
diff --git a/admin/WebConsole/asistentes/gestores/gestor_Comandos.php b/admin/WebConsole/asistentes/gestores/gestor_Comandos.php
index 5425ea81..28321f89 100644
--- a/admin/WebConsole/asistentes/gestores/gestor_Comandos.php
+++ b/admin/WebConsole/asistentes/gestores/gestor_Comandos.php
@@ -134,7 +134,7 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
$cmd->ParamSetValor("@idcentro",$idcentro);
$auxID=split(",",$cadenaid);
$auxIP=split(";",$cadenaip);
-
+ $vez=0;
for ($i=0;$i<sizeof($auxID);$i++){
$cmd->ParamSetValor("@idordenador",$auxID[$i]);
$cmd->ParamSetValor("@ip",$auxIP[$i]);
@@ -144,8 +144,12 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idcentro)";
$resul=$cmd->Ejecutar();
//echo "<br>".$cmd->texto;
+ if(empty($vez)){
+ $idaccion=$cmd->Autonumerico();
+ $acciones=chr(13)."ids=".$idaccion.chr(13); // Para seguimiento
+ }
+ $vez++;
}
- $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
}
if (!$resul){
echo '<SCRIPT language="javascript">';
diff --git a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php
index 0f59bfd5..5f6686d0 100644
--- a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php
+++ b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php
@@ -272,26 +272,17 @@ function htmlOPTION_typepartnotcache($cmd)
function htmlForm_typepart($cmd,$numpar)
{
$SelectHtml="";
- $cmd->texto='SELECT DISTINCT tipopar FROM tipospar JOIN ordenadores_particiones ON ordenadores_particiones.codpar = tipospar.codpar WHERE numpar = ' .$numpar;
+ $cmd->texto='SELECT DISTINCT tipopar FROM tipospar
+ JOIN ordenadores_particiones ON ordenadores_particiones.codpar = tipospar.codpar
+ WHERE numpar = ' .$numpar;
$rs=new Recordset;
$rs->Comando=&$cmd;
if ($rs->Abrir()){
$rs->Primero();
while (!$rs->EOF){
- if ( $rs->campos["tipopar"] == "LINUX" )
- {
- $valor="EXT4";
- $valormostrar="LINUX:EXT[2:3:4]";
- }
- else
- {
$valor=$rs->campos["tipopar"];
- $valormostrar=$rs->campos["tipopar"];
- }
- $SelectHtml.='<OPTION value="'.$valor . '" ';
- $SelectHtml.='>';
- $SelectHtml.= $valormostrar .'</OPTION>';
+ $SelectHtml.='<option value="'.$valor.'"> '.$valor.' </option>';
$rs->Siguiente();
}
$rs->Cerrar();
@@ -300,35 +291,70 @@ function htmlForm_typepart($cmd,$numpar)
}
-
function htmlForm_typepartnotcacheEngine10($npart)
{
$SelectHtml="";
if ($npart == 4) {
$SelectHtml.='<OPTION value="CACHE"> CACHE </OPTION>';
}
-$SelectHtml.='<OPTION value="FAT12"> FAT12 </OPTION>';
-$SelectHtml.='<OPTION value="FAT16"> FAT16 </OPTION>';
-$SelectHtml.='<OPTION value="FAT32"> FAT32 </OPTION>';
-$SelectHtml.='<OPTION value="HFAT32"> Hidden FAT32 </OPTION>';
$SelectHtml.='<OPTION value="NTFS"> NTFS </OPTION>';
+$SelectHtml.='<OPTION value="FAT32"> FAT32 </OPTION>';
+$SelectHtml.='<OPTION value="FAT16"> FAT16 </OPTION>';
+$SelectHtml.='<OPTION value="FAT12"> FAT12 </OPTION>';
$SelectHtml.='<OPTION value="HNTFS"> Hidden NTFS </OPTION>';
-#$SelectHtml.='<OPTION value="EXT2"> EXT2 </OPTION>';
-#$SelectHtml.='<OPTION value="EXT3"> EXT3 </OPTION>';
-$SelectHtml.='<OPTION value="EXT4"> LINUX:EXT[2:3:4] </OPTION>';
+$SelectHtml.='<OPTION value="HFAT32"> Hidden FAT32 </OPTION>';
+$SelectHtml.='<OPTION value="HFAT16"> Hidden FAT16 </OPTION>';
+$SelectHtml.='<OPTION value="HFAT12"> Hidden FAT12 </OPTION>';
+$SelectHtml.='<OPTION value="LINUX"> LINUX </OPTION>';
$SelectHtml.='<OPTION value="LINUX-SWAP"> LINUX-SWAP </OPTION>';
-$SelectHtml.='<OPTION value="REISERFS"> REISERFS </OPTION>';
-$SelectHtml.='<OPTION value="REISER4"> RESISER4 </OPTION>';
-$SelectHtml.='<OPTION value="XFS"> XFS </OPTION>';
-$SelectHtml.='<OPTION value="JFS"> JFS </OPTION>';
$SelectHtml.='<OPTION value="LINUX-RAID"> LINUX-RAID </OPTION>';
$SelectHtml.='<OPTION value="LINUX-LVM"> LINUX-LVM </OPTION>';
+$SelectHtml.='<OPTION value="HFS"> HFS </OPTION>';
+$SelectHtml.='<OPTION value="FREEBSD"> FREEBSD </OPTION>';
+$SelectHtml.='<OPTION value="OPENBSD"> OPENBSD </OPTION>';
+$SelectHtml.='<OPTION value="SOLARIS"> SOLARIS </OPTION>';
+$SelectHtml.='<OPTION value="SOLARIS-BOOT"> SOLARIS-BOOT </OPTION>';
+$SelectHtml.='<OPTION value="VMFS"> VMFS </OPTION>';
+$SelectHtml.='<OPTION value="DATA"> DATA </OPTION>';
+$SelectHtml.='<OPTION value="EFI"> EFI </OPTION>';
+$SelectHtml.='<OPTION value="GPT"> GPT </OPTION>';
if ($npart <= 4) {
$SelectHtml.='<OPTION value="EXTENDED"> EXTENDED </OPTION>';
}
return($SelectHtml);
}
+function htmlForm_typepartnotcacheGPT($npart)
+{
+$SelectHtml="";
+if ($npart == 4) {
+ $SelectHtml.='<OPTION value="CACHE"> CACHE </OPTION>';
+}
+$SelectHtml.='<OPTION value="WINDOWS"> Windows </OPTION>';
+$SelectHtml.='<OPTION value="WIN-RESERV"> Windows Reserved </OPTION>';
+$SelectHtml.='<OPTION value="LINUX"> Linux </OPTION>';
+$SelectHtml.='<OPTION value="LINUX-RESERV"> Linux Reserved </OPTION>';
+$SelectHtml.='<OPTION value="LINUX-SWAP"> Linux Swap </OPTION>';
+$SelectHtml.='<OPTION value="LINUX-RAID"> Linux RAID </OPTION>';
+$SelectHtml.='<OPTION value="LINUX-LVM"> Linux LVM </OPTION>';
+$SelectHtml.='<OPTION value="CHROMEOS"> ChromeOS </OPTION>';
+$SelectHtml.='<OPTION value="CHROMEOS-KRN"> ChromeOS Kernel </OPTION>';
+$SelectHtml.='<OPTION value="CHROMEOS-RESERV"> ChromeOS Reserved </OPTION>';
+$SelectHtml.='<OPTION value="HFS"> MacOS HFS </OPTION>';
+$SelectHtml.='<OPTION value="HFS-RAID"> MacOS HFS RAID </OPTION>';
+$SelectHtml.='<OPTION value="FREEBSD"> FreeBSD </OPTION>';
+$SelectHtml.='<OPTION value="FREEBSD-DISK"> FreeBSD Disk </OPTION>';
+$SelectHtml.='<OPTION value="FREEBSD-BOOT"> FreeBSD Boot </OPTION>';
+$SelectHtml.='<OPTION value="FREEBSD-SWAP"> FreeBSD Swap </OPTION>';
+$SelectHtml.='<OPTION value="SOLARIS"> Solaris </OPTION>';
+$SelectHtml.='<OPTION value="SOLARIS-DISK"> Solaris Disk </OPTION>';
+$SelectHtml.='<OPTION value="SOLARIS-BOOT"> Solaris Boot </OPTION>';
+$SelectHtml.='<OPTION value="SOLARIS-SWAP"> Solaris Swap </OPTION>';
+$SelectHtml.='<OPTION value="EFI"> EFI </OPTION>';
+$SelectHtml.='<OPTION value="MBR"> MBR </OPTION>';
+$SelectHtml.='<OPTION value="BIOS-BOOT"> BIOS Boot </OPTION>';
+return($SelectHtml);
+}
function htmlForm_sizepart($cmd,$numpar)
{
@@ -355,7 +381,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
global $tbKeys; // Tabla contenedora de claves de configuración
global $conKeys; // Contador de claves de configuración
global $TbMsg;
-
+
$colums=7;
echo '<TR height=16>';
echo '<TH align=center>&nbsp;'.$TbMsg[20].'&nbsp;</TH>'; // Número de partición
diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php
new file mode 100644
index 00000000..1a002387
--- /dev/null
+++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php
@@ -0,0 +1,77 @@
+<tr>
+<td>
+<table id="particionesGPT">
+<caption><?php echo $TbMsg[36]?></caption>
+<tr>
+<td><?php echo $TbMsg[20]?></td>
+<td><?php echo $TbMsg[24]?></td>
+<td><?php echo $TbMsg[22]?></td>
+</tr>
+
+<?php
+for ($p=1; $p<4; $p++) {
+ echo '
+<tr id="trPartition'.$p.'">
+<td>
+<input type="checkbox" name="checkGPT'.$p.'" value="checkGPT'.$p.'" onclick="clickPartitionCheckbox(this.form, '.$p.',true);" /> '.$TbMsg[20].' '.$p.'</td>
+<td>
+<select name="partGPT'.$p.'" id="partGPT'.$p.'" style="width:220" disabled="true" onclick="
+ //if (this.form.part'.$p.'.options[this.form.part'.$p.'.selectedIndex].value == \'CUSTOM\') {
+ if (this.options[this.selectedIndex].value == \'CUSTOM\') {
+ this.form.partGPT'.$p.'custom.disabled=false;
+ } else {
+ this.form.partGPT'.$p.'custom.disabled=true;
+ }">'.htmlForm_typepart($cmd,$p).'<option value="CUSTOM"> '.$TbMsg[39].' </option>
+</select>
+<br>
+<select name="partGPT'.$p.'custom" id="partGPT'.$p.'custom" style="width:220" disabled="true" >'. htmlForm_typepartnotcacheGPT($p) .'</select>
+</td>
+<td>
+<select name="sizeGPT'.$p.'" id="sizeGPT'.$p.'" style="width:220" disabled="true" onclick="
+ if (this.form.sizeGPT'.$p.'.options[this.form.sizeGPT'.$p.'.selectedIndex].value == \'CUSTOM\') {
+ this.form.sizeGPT'.$p.'custom.disabled=false;
+ } else {
+ this.form.sizeGPT'.$p.'custom.disabled=true;
+ }
+" onchange="calculateFreeGPTDisk(this.form);">'.htmlForm_sizepart($cmd,$p).'
+<option value="CUSTOM"> '.$TbMsg[39].'</option>
+</select>
+<br />
+<input type="text" style="width:100" name="sizeGPT'.$p.'custom" value="0" disabled="true" onchange="calculateFreeDisk(this.form);" />
+</td>
+</tr>
+ ';
+}
+?>
+
+<tr id="trPartition4">
+<td><input type="checkbox" name="checkGPT4" value="checkGPT4" onclick="clickPartitionCheckbox(this.form, 4,true);" /> <?php echo $TbMsg[20].' '.$p;?> </td>
+<td><input type="label" readonly size="8" name="partGPT4" disabled="true" value="CACHE" /></td>
+<td><select name="sizeGPT4" id="sizeGPT4" style="width:220" disabled="true" onclick="if (this.form.sizeGPT4.options[this.form.sizeGPT4.selectedIndex].value == 'CUSTOM') { this.form.sizeGPT4custom.disabled=false } else { this.form.sizeGPT4custom.disabled=true }" onchange="calculateFreeGPTDisk(this.form);" />
+ <option value="0"> <?php echo $TbMsg[40];?> </option>
+ <?php echo ''. htmlForm_sizepart($cmd,4) .''; ?>
+ <option value="CUSTOM"> <?php echo $TbMsg[39];?> </option>
+</select>
+<br />
+<input type="text" style="width:100" name="sizeGPT4custom" value="0" disabled="true" onchange="calculateFreeGPTDisk(this.form);" /></td>
+</tr>
+</table>
+</td>
+</tr>
+<tr>
+ <td>
+ <input type="button" value="A&ntilde;adir particion" onclick="addGPTPartition()"/>
+ <input type="button" value="Eliminar particion" onclick="deleteGPTPartition()"/>
+ </td>
+
+</tr>
+<tr>
+<th>
+<input type="hidden" id="numGPTpartitions" value="4"/>
+<input type="hidden" id="minsizeGPT" />
+<?php echo $TbMsg[38];?>: <input type="text" id="freediskGPT" width="15" disabled="true" />
+</th>
+</tr>
+
+</td>
+
diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php
index 46207e15..46207e15 100644
--- a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php
+++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php
diff --git a/admin/WebConsole/asistentes/includes/opcionesacciones.php b/admin/WebConsole/asistentes/includes/opcionesacciones.php
index a6933672..2eeaf1ab 100644
--- a/admin/WebConsole/asistentes/includes/opcionesacciones.php
+++ b/admin/WebConsole/asistentes/includes/opcionesacciones.php
@@ -15,7 +15,7 @@
<?if($idcomando!=10){?>
<TABLE align=center>
<TR>
- <TD><IMG border=0 style="cursor:pointer" src="../images/boton_aceptar.gif" onclick="confirmar()" ></TD>
+ <TD><IMG border=0 style="cursor:pointer" src="../images/boton_aceptar_<?echo $idioma ?>.gif" onclick="confirmar()" ></TD>
</TR>
</TABLE>
<BR>
diff --git a/admin/WebConsole/asistentes/jscripts/asistentes.js b/admin/WebConsole/asistentes/jscripts/asistentes.js
index 7c760053..36aadc3d 100644
--- a/admin/WebConsole/asistentes/jscripts/asistentes.js
+++ b/admin/WebConsole/asistentes/jscripts/asistentes.js
@@ -60,12 +60,28 @@ command + " | tee -a $OGLOGCOMMAND";
}
-function codeParticionado (form) {
+function codeParticionado(form){
+ var n_disk = form.n_disk.value;
+ var tipo_part_table = form.tipo_part_table.value;
+ // Comprobamos si la opcion elejida es GPT o MSDOS para llamar a una funcion u otra
+ if(tipo_part_table == "GPT"){
+ codeParticionadoGPT(form);
+ }
+ else{
+ codeParticionadoMSDOS(form);
+ }
+}
+
+
+function codeParticionadoMSDOS (form) {
var partCode="";
var logicalCode="";
var cacheCode;
var cacheSize;
var extended=false;
+ var n_disk = form.n_disk.value;
+ var tipo_part_table = form.tipo_part_table.value;
+
for (var nPart=1; nPart<4; nPart++) {
var partCheck=eval("form.check"+nPart);
@@ -96,36 +112,33 @@ function codeParticionado (form) {
}
if (form.check4.checked) {
if (form.size4.value == "0") {
- //cacheCode = " ogUnmountCache \n ogUnmountAll 1 \n sizecache=`ogGetPartitionSize 1 4` \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache $sizecache ";
cacheCode="\
- echo \"[20] $MSG_HELP_ogGetPartitionSize CACHE\" | tee -a $OGLOGSESSION \n \
- sizecache=`ogGetPartitionSize 1 4` \n \
- echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
- ogDeletePartitionTable 1 \n \
- ogUpdatePartitionTable 1 | tee -a $OGLOGCOMMAND \n \
- echo \"[50] $MSG_HELP_ogCreateCache \" | tee -a $OGLOGSESSION \n \
- initCache $sizecache &>/dev/null | tee -a $OGLOGCOMMAND \n ";
+echo \"[20] $MSG_HELP_ogGetPartitionSize CACHE\" | tee -a $OGLOGSESSION \n \
+sizecache=`ogGetPartitionSize 1 4` \n \
+echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
+ogDeletePartitionTable "+n_disk+" \n \
+ogUpdatePartitionTable "+n_disk+" | tee -a $OGLOGCOMMAND \n \
+echo \"[50] $MSG_HELP_ogCreateCache \" | tee -a $OGLOGSESSION \n \
+initCache $sizecache &>/dev/null | tee -a $OGLOGCOMMAND \n ";
} else {
if (form.size4.value == "CUSTOM") {
cacheSize = form.size4custom.value;
} else {
cacheSize = form.size4.value;
}
- //cacheCode = " ogUnmountCache \n ogUnmountAll 1 \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache " + cacheSize;
cacheCode="\
- echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
- ogDeletePartitionTable 1 \n \
- ogUpdatePartitionTable 1 \n \
- echo \"[50] $MSG_HELP_ogCreateCache \" | tee -a $OGLOGSESSION \n \
- initCache " + cacheSize + " &>/dev/null | tee -a $OGLOGCOMMAND";
+echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
+ogDeletePartitionTable "+n_disk+" \n \
+ogUpdatePartitionTable "+n_disk+" \n \
+echo \"[50] $MSG_HELP_ogCreateCache \" | tee -a $OGLOGSESSION \n \
+initCache " + cacheSize + " &>/dev/null | tee -a $OGLOGCOMMAND";
}
} else {
- //cacheCode = " ogUnmountCache \n ogUnmountAll 1 \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 ";
cacheCode="\
- echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
- ogDeletePartitionTable 1 \n \
- ogUpdatePartitionTable 1 \n";
- partCode += " EMPTY:0";
+echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
+ogDeletePartitionTable "+n_disk+" \n \
+ogUpdatePartitionTable "+n_disk+" \n";
+partCode += " EMPTY:0";
}
if (extended) {
var lastLogical=5;
@@ -159,47 +172,147 @@ function codeParticionado (form) {
partCode += logicalCode;
}
-// form.codigo.value="\
-//" + cacheCode + " \n \
-//ogListPartitions 1 \n \
-//ogCreatePartitions 1 " + partCode + " \n \
-//ogSetPartitionActive 1 1 \n \
-//ogUpdatePartitionTable 1 \n \
-//ogListPartitions 1 \n";
-form.codigo.value="\
+ form.codigo.value="\
+ogCreatePartitionTable "+n_disk+" "+tipo_part_table +" \n \
+echo \"[0] $MSG_HELP_ogCreatePartitions \" | tee -a $OGLOGSESSION $OGLOGFILE \n \
+echo \"[10] $MSG_HELP_ogUnmountAll "+n_disk+"\" | tee -a $OGLOGSESSION \n \
+ogUnmountCache \n \
+ogUnmountAll "+n_disk+" \n \
+" + cacheCode + " \n \
+echo \"[60] $MSG_HELP_ogListPartitions "+n_disk+"\" | tee -a $OGLOGSESSION \n \
+ogListPartitions "+n_disk+" | tee -a $OGLOGCOMMAND $OGLOGSESSION \n \
+echo \"[70] $MSG_HELP_ogCreatePartitions " + partCode + " \" | tee -a $OGLOGSESSION \n \
+ogCreatePartitions "+n_disk+" " + partCode + " | tee -a $OGLOGCOMMAND \n \
+echo \"[80] $MSG_HELP_ogSetPartitionActive "+n_disk+" 1\" | tee -a $OGLOGSESSION \n \
+ogSetPartitionActive "+n_disk+" 1 \n \
+echo \"[100] $MSG_HELP_ogListPartitions "+n_disk+"\" | tee -a $OGLOGSESSION $OGLOGFILE \n \
+ogUpdatePartitionTable "+n_disk+" \n \
+ms-sys /dev/sda | grep unknow && ms-sys /dev/sda \n \
+ogListPartitions "+n_disk+" | tee -a $OGLOGCOMMAND $OGLOGSESSION $OGLOGFILE \
+reboot \n";
+}
+
+
+function codeParticionadoGPT (form) {
+ var partCode="";
+ var logicalCode="";
+ var cacheCode;
+ var cacheSize;
+ var extended=false;
+ var n_disk = form.n_disk.value;
+ var tipo_part_table = form.tipo_part_table.value;
+ numParts=document.getElementById("numGPTpartitions").value;
+
+ for (var nPart=1; nPart <= numParts; nPart++) {
+ var partCheck=eval("form.checkGPT"+nPart);
+ if (partCheck.checked) {
+ // Distinguimos entre cache y el resto de particiones
+ if(nPart == 4) {
+ if (form.sizeGPT4.value == "0") {
+ cacheCode="\
+echo \"[20] $MSG_HELP_ogGetPartitionSize CACHE\" | tee -a $OGLOGSESSION \n \
+sizecache=`ogGetPartitionSize 1 4` \n \
+echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
+ogDeletePartitionTable "+n_disk+" \n \
+ogUpdatePartitionTable "+n_disk+" | tee -a $OGLOGCOMMAND \n \
+echo \"[50] $MSG_HELP_ogCreateCache \" | tee -a $OGLOGSESSION \n \
+initCache $sizecache &>/dev/null | tee -a $OGLOGCOMMAND \n ";
+ } else {
+ if (form.sizeGPT4.value == "CUSTOM") {
+ cacheSize = form.sizeGPT4custom.value;
+ } else {
+ cacheSize = form.sizeGPT4.value;
+ }
+ cacheCode="\
+echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
+ogDeletePartitionTable "+n_disk+" \n \
+ogUpdatePartitionTable "+n_disk+" \n \
+echo \"[50] $MSG_HELP_ogCreateCache \" | tee -a $OGLOGSESSION \n \
+initCache " + cacheSize + " &>/dev/null | tee -a $OGLOGCOMMAND";
+ }
+ } else{
+ var partType=eval("form.partGPT"+nPart);
+ if (partType.value == "CUSTOM" ) {
+ var partTypeCustom=eval("form.partGPT"+nPart+"custom");
+ partCode += " " + partTypeCustom.value;
+ } else {
+ partCode += " " + partType.value;
+ }
+ var partSize=eval("form.sizeGPT"+nPart);
+ if (partSize.value == "CUSTOM" ) {
+ var partSizeCustom=eval("form.sizeGPT"+nPart+"custom");
+ partCode += ":" + partSizeCustom.value;
+ } else {
+ partCode += ":" + partSize.value;
+ }
+ }
+ } else {
+ if(nPart == 4){
+ cacheCode="\
+echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
+ogDeletePartitionTable "+n_disk+" \n \
+ogUpdatePartitionTable "+n_disk+" \n";
+partCode += " EMPTY:0";
+ } else{
+ partCode += " EMPTY:0";
+ }
+ }
+ }
+ form.codigo.value="\
+ogCreatePartitionTable "+n_disk+" "+tipo_part_table +" \n \
echo \"[0] $MSG_HELP_ogCreatePartitions \" | tee -a $OGLOGSESSION $OGLOGFILE \n \
-echo \"[10] $MSG_HELP_ogUnmountAll 1\" | tee -a $OGLOGSESSION \n \
+echo \"[10] $MSG_HELP_ogUnmountAll "+n_disk+"\" | tee -a $OGLOGSESSION \n \
ogUnmountCache \n \
-ogUnmountAll 1 \n \
+ogUnmountAll "+n_disk+" \n \
" + cacheCode + " \n \
-echo \"[60] $MSG_HELP_ogListPartitions 1\" | tee -a $OGLOGSESSION \n \
-ogListPartitions 1 | tee -a $OGLOGCOMMAND $OGLOGSESSION \n \
+echo \"[60] $MSG_HELP_ogListPartitions "+n_disk+"\" | tee -a $OGLOGSESSION \n \
+ogListPartitions "+n_disk+" | tee -a $OGLOGCOMMAND $OGLOGSESSION \n \
echo \"[70] $MSG_HELP_ogCreatePartitions " + partCode + " \" | tee -a $OGLOGSESSION \n \
-ogCreatePartitions 1 " + partCode + " | tee -a $OGLOGCOMMAND \n \
-echo \"[80] $MSG_HELP_ogSetPartitionActive 1 1\" | tee -a $OGLOGSESSION \n \
-ogSetPartitionActive 1 1 \n \
-echo \"[100] $MSG_HELP_ogListPartitions 1\" | tee -a $OGLOGSESSION $OGLOGFILE \n \
-ogUpdatePartitionTable 1 \n \
+ogCreatePartitions "+n_disk+" " + partCode + " | tee -a $OGLOGCOMMAND \n \
+echo \"[80] $MSG_HELP_ogSetPartitionActive "+n_disk+" 1\" | tee -a $OGLOGSESSION \n \
+ogSetPartitionActive "+n_disk+" 1 \n \
+echo \"[100] $MSG_HELP_ogListPartitions "+n_disk+"\" | tee -a $OGLOGSESSION $OGLOGFILE \n \
+ogUpdatePartitionTable "+n_disk+" \n \
ms-sys /dev/sda | grep unknow && ms-sys /dev/sda \n \
-ogListPartitions 1 | tee -a $OGLOGCOMMAND $OGLOGSESSION $OGLOGFILE \n";
+ogListPartitions "+n_disk+" | tee -a $OGLOGCOMMAND $OGLOGSESSION $OGLOGFILE \
+reboot \n";
+}
+
+function showPartitionForm (tipo_table_part) {
+ document.getElementById("form"+tipo_table_part).style.display="inline";
+ if(tipo_table_part == "MSDOS"){
+ // De los dos tipos, se oculta el otro
+ document.getElementById("formGPT").style.display="none";
+ } else{
+ document.getElementById("formMSDOS").style.display="none";
+ }
}
// Código de pulsación de selección de partición.
-function clickPartitionCheckbox(form, npart) {
- var partCheck=eval("form.check"+npart);
- var partType=eval("form.part"+npart);
- var partSize=eval("form.size"+npart);
- var partTypeCustom=eval("form.part"+npart+"custom");
- var partSizeCustom=eval("form.size"+npart+"custom");
- var freeDisk=document.getElementById("freedisk");
- var logical=document.getElementById("logicas");
+function clickPartitionCheckbox (form, npart, isGPT) {
+ // Si el parametro no esta definido, se toma como false
+ isGPT = (isGPT)?isGPT:"false";
+ if(isGPT == true){
+ prefix="GPT";
+ } else {
+ prefix="";
+ }
+ var partCheck=eval("form.check"+prefix+npart);
+ var partType=eval("form.part"+prefix+npart);
+ var partSize=eval("form.size"+prefix+npart);
+ var partTypeCustom=eval("form.part"+prefix+npart+"custom");
+ var partSizeCustom=eval("form.size"+prefix+npart+"custom");
+ var freeDisk=document.getElementById("freedisk"+prefix);
+ //var logical=document.getElementById("logicas"+prefix);
if (partCheck.checked) {
partType.disabled=false;
partSize.disabled=false;
- if (partType.options[partType.selectedIndex].value == "CUSTOM") {
- partTypeCustom.disabled=false;
+ if(npart != 4){
+ if (partType.options[partType.selectedIndex].value == "CUSTOM") {
+ partTypeCustom.disabled=false;
+ }
}
if (partSize.options[partSize.selectedIndex].value == "CUSTOM") {
partSizeCustom.disabled=false;
@@ -213,7 +326,10 @@ function clickPartitionCheckbox(form, npart) {
partSizeCustom.disabled=true;
}
if (npart <= 4) {
- checkExtendedPartition(form);
+ // Si el formulario es GPT no hay extendidas
+ if(isGPT != true){
+ checkExtendedPartition(form);
+ }
calculateFreeDisk(form);
}
}
@@ -221,6 +337,10 @@ function clickPartitionCheckbox(form, npart) {
// Código para calcular el espacio libre del disco.
function calculateFreeDisk(form) {
+ // Si esta seleccionada la opcion GPT, se llama a la funcion correspondiente
+ if(document.getElementById("tipo_part_table").value == "GPT"){
+ calculateFreeGPTDisk(form);
+ }
var freeDisk=document.getElementById("freedisk");
freeDisk.value=form.minsize.value;
for (npart=1; npart<=4; npart++) {
@@ -247,6 +367,117 @@ function calculateFreeDisk(form) {
}
}
+// Código para calcular el espacio libre del disco. en el formulario GPT
+function calculateFreeGPTDisk(form) {
+ // Si esta seleccionada la opcion MSDOS, se llama a la funcion correspondiente
+ if(document.getElementById("tipo_part_table").value == "MSDOS"){
+ calculateFreeDisk(form);
+ }
+
+ var freeDisk=document.getElementById("freediskGPT");
+ freeDisk.value=form.minsize.value;
+ // Capturamos el numero de particiones que hay hechas
+ numParts=document.getElementById("numGPTpartitions").value;
+ for (npart=1; npart<=numParts; npart++) {
+ var partCheck=eval("form.checkGPT"+npart);
+ var partSize=eval("form.sizeGPT"+npart);
+ var partSizeCustom=eval("form.sizeGPT"+npart+"custom");
+ if (partCheck.checked) {
+ if (partSize.options[partSize.selectedIndex].value == "CUSTOM") {
+ freeDisk.value -= parseInt(partSizeCustom.value);
+ } else {
+ freeDisk.value -= parseInt(partSize.options[partSize.selectedIndex].value);
+ }
+ }
+ }
+ if (parseInt(freeDisk.value) < 0) {
+ freeDisk.style.fontWeight = "bold";
+ freeDisk.style.fontStyle = "italic";
+ } else {
+ freeDisk.style.fontWeight = "normal";
+ freeDisk.style.fontStyle = "normal";
+ }
+ if (form.size4.value == 0) {
+ freeDisk.value += " (- cache)"; // Aviso de caché sin modificar.
+ }
+}
+
+// Agrega una nueva fila a la tabla de particiones con una nueva particion
+function addGPTPartition(){
+ var partitionTypes = "";
+ partitionTypes+='<OPTION value="WINDOWS"> Windows </OPTION>';
+ partitionTypes+='<OPTION value="WIN-RESERV"> Windows Reserved </OPTION>';
+ partitionTypes+='<OPTION value="LINUX"> Linux </OTION>';
+ partitionTypes+='<OPTION value="LINUX-RESERV"> Linux Reserved </OPTION>';
+ partitionTypes+='<OPTION value="LINUX-SWAP"> Linux Swap </OPTION>';
+ partitionTypes+='<OPTION value="LINUX-RAID"> Linux RAID </OPTION>';
+ partitionTypes+='<OPTION value="LINUX-LVM"> Linux LVM </OPTION>';
+ partitionTypes+='<OPTION value="CHROMEOS"> ChromeOS </OTION>';
+ partitionTypes+='<OPTION value="CHROMEOS-KRN"> ChromeOS Kernel </OPTION>';
+ partitionTypes+='<OPTION value="CHROMEOS-RESERV"> ChromeOS Reserved </OPTION>';
+ partitionTypes+='<OPTION value="HFS"> MacOS HFS </OPTION>';
+ partitionTypes+='<OPTION value="HFS-RAID"> MacOS HFS RAID </OPTION>';
+ partitionTypes+='<OPTION value="FREEBSD"> FreeBSD </OPTION>';
+ partitionTypes+='<OPTION value="FREEBSD-DISK"> FreeBSD Disk </OPTION>';
+ partitionTypes+='<OPTION value="FREEBSD-BOOT"> FreeBSD Boot </OPTION>';
+ partitionTypes+='<OPTION value="FREEBSD-SWAP"> FreeBSD Swap </OPTION>';
+ partitionTypes+='<OPTION value="SOLARIS"> Solaris </OPTION>';
+ partitionTypes+='<OPTION value="SOLARIS-DISK"> Solaris Disk </OPTION>';
+ partitionTypes+='<OPTION value="SOLARIS-BOOT"> Solaris Boot </OPTION>';
+ partitionTypes+='<OPTION value="SOLARIS-SWAP"> Solaris Swap </OPTION>';
+ partitionTypes+='<OPTION value="EFI"> EFI </OPTION>';
+ partitionTypes+='<OPTION value="MBR"> MBR </OPTION>';
+ partitionTypes+='<OPTION value="BIOS-BOOT"> BIOS Boot </OPTION>';
+
+
+ table = document.getElementById("particionesGPT");
+ // Capturamos el numero de particiones, antes incrementamos
+ document.getElementById("numGPTpartitions").value = parseInt(document.getElementById("numGPTpartitions").value)+1
+ numPart=document.getElementById("numGPTpartitions").value;
+ partitionRow = table.insertRow(-1);
+ partitionRow.id = "trPartition"+numPart;
+ partitionRow.innerHTML="<td> \
+<input type='checkbox' name='checkGPT"+numPart+"' value='checkGPT"+numPart+"' onclick='clickPartitionCheckbox(this.form, "+numPart+",true);' /> Partici&oacute;n "+numPart+"</td> \
+<td>\
+<select name='partGPT"+numPart+"' id='partGPT"+numPart+"' style='width:220' disabled='true' onclick=' \
+ if (this.options[this.selectedIndex].value == \'CUSTOM\') { \
+ this.form.partGPT"+numPart+"custom.disabled=false; \
+ } else { \
+ this.form.partGPT"+numPart+"custom.disabled=true; \
+ }'><option value='CUSTOM'> Personalizar </option> \
+</select> \
+<br> \
+<select name='partGPT"+numPart+"custom' id='partGPT"+numPart+"custom' style='width:220' disabled='true' >"+partitionTypes+"</select> \
+</td> \
+<td> \
+<select name='sizeGPT"+numPart+"' id='sizeGPT"+numPart+"' style='width:220' disabled='true' onclick=' \
+ if (this.form.size"+numPart+".options[this.form.size"+numPart+".selectedIndex].value == \'CUSTOM\') { \
+ this.form.sizeGPT"+numPart+"custom.disabled=false; \
+ } else { \
+ this.form.sizeGPT"+numPart+"custom.disabled=true; \
+ } \
+' onchange='calculateFreeGPTDisk(this.form);'>0<option value='CUSTOM'> Personalizar </option> \
+</select> \
+<br /> \
+<input type='text' style='width:100' name='sizeGPT"+numPart+"custom' value='0' disabled='true' onchange='calculateFreeDisk(this.form);' /> \
+</td>"
+
+}
+
+// Agrega una nueva fila a la tabla de particiones con una nueva particion
+function deleteGPTPartition(){
+ table = document.getElementById("particionesGPT");
+ // Capturamos el numero de particiones
+ numPart=document.getElementById("numGPTpartitions").value;
+ // Si ya solo quedan 4 particiones, no se elimina ni se decrementa el contador
+ if(numPart > 4){
+ partitionRow = document.getElementById("trPartition"+numPart);
+ table.deleteRow(partitionRow.rowIndex);
+ // Decrementamos el numero de particiones
+ document.getElementById("numGPTpartitions").value = parseInt(document.getElementById("numGPTpartitions").value)-1;
+ }
+}
+
// Código para comprobar si hay partición extendida activa para mostrar las lógicas.
function checkExtendedPartition(form) {
var logical=document.getElementById("logicas");
diff --git a/admin/WebConsole/barramenu.php b/admin/WebConsole/barramenu.php
index ea4cbd8b..be2c8928 100644
--- a/admin/WebConsole/barramenu.php
+++ b/admin/WebConsole/barramenu.php
@@ -1,4 +1,4 @@
-<?
+<?php
// ********************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -38,7 +38,7 @@ include_once("./idiomas/php/".$idioma."/barramenu_".$idioma.".php");
}
//________________________________________________________________________________________________________
function eleccion(o,op){
- opadre=window.parent // Toma frame padre
+ var opadre=window.parent // Toma frame padre
opadre.frames["frame_contenidos"].document.location.href="nada.php"
var href;
var href2="nada.php"
diff --git a/admin/WebConsole/clases/jscripts/ArbolVistaXML.js b/admin/WebConsole/clases/jscripts/ArbolVistaXML.js
index e5f5d282..9fcf3e69 100644
--- a/admin/WebConsole/clases/jscripts/ArbolVistaXML.js
+++ b/admin/WebConsole/clases/jscripts/ArbolVistaXML.js
@@ -157,7 +157,7 @@ var gLiteralbackground; // Fondo color nodo vista para restablecer
}
else
nodo.NodoPadre=null; // Es el primer nodo
- var o=nodo.Nodo;
+ o=nodo.Nodo;
var auxsplit=o.getAttribute("id");
var idTR=auxsplit.split("-") [0];
o=o.nextSibling
@@ -210,7 +210,7 @@ function clickNodo(nodov,pathimg){
nodov.ArbolHijos.style.display="block"
break;
case "mas_c" :
- nodov.imgsigno.setAttribute("value","menos_c",null);
+ nodov.imgsigno.setAttribute("value","menos_c",null);
nodov.imgsigno.setAttribute("src",pathimg+"/menos_c.gif",null);
if (nodov.nivel==0)
nodov.imgsigno.setAttribute("src",pathimg+"/menos_root.gif",null);
@@ -239,7 +239,7 @@ function clickLiteralNodo(oLIT,pathimg){
if(pathimg==null){
var signoimg=nodov.imgsigno.getAttribute("src");
var p=signoimg.lastIndexOf("/");
- var pathimg=signoimg.substring(0,p);
+ pathimg=signoimg.substring(0,p);
currentpathimg=pathimg;
}
var signoimg=nodov.imgsigno.getAttribute("value");
diff --git a/admin/WebConsole/clases/jscripts/MenuContextual.js b/admin/WebConsole/clases/jscripts/MenuContextual.js
index a39358db..6aaaf43c 100644
--- a/admin/WebConsole/clases/jscripts/MenuContextual.js
+++ b/admin/WebConsole/clases/jscripts/MenuContextual.js
@@ -10,7 +10,7 @@ var ctx_blanco="#ffffff";
var ctx_negro="#000000";
var ctx_grissombra="#808080";
-gmenuctx=new Array(); // Guarda el último menu flotante
+var gmenuctx=new Array(); // Guarda el último menu flotante
var idxmnu=0 // Indice de los menus flotantes
var currentItem=null;
var currentPadresubmenu;
@@ -29,12 +29,12 @@ var botonraton=null;
//____________________________________________________________________________
function muestra_contextual(x,y,menuctx){
var margen=0
- dpzx=16
- dpzy=16
- wtop=calculatop_ctx(y,dpzy,margen,menuctx) // Calcula posición del menu contextual
- wleft=calculaleft_ctx(x,dpzx,margen,menuctx)
- ftop=wtop+parseInt(document.body.scrollTop) // Tiene en cuenta el scrolling
- fleft=wleft+parseInt(document.body.scrollLeft)
+ var dpzx=16
+ var dpzy=16
+ var wtop=calculatop_ctx(y,dpzy,margen,menuctx) // Calcula posición del menu contextual
+ var wleft=calculaleft_ctx(x,dpzx,margen,menuctx)
+ var ftop=wtop+parseInt(document.body.scrollTop) // Tiene en cuenta el scrolling
+ var fleft=wleft+parseInt(document.body.scrollLeft)
menuctx.style.top=ftop
menuctx.style.left=fleft
menuctx.style.visibility="visible"
@@ -51,7 +51,7 @@ function muestra_contextual(x,y,menuctx){
// - menuctx: El menu (objeto DIV) que se mostrará
//____________________________________________________________________________
function calculatop_ctx(oriy,dpzy,margen,menuctx){ // Calcula Y del menu contextual
- largodiv=parseInt(menuctx.offsetHeight);
+ var largodiv=parseInt(menuctx.offsetHeight);
var wtop=oriy+dpzy+margen
if (wtop+largodiv>parseInt(document.body.clientHeight)){
var nwtop=oriy-dpzy-margen-largodiv
@@ -69,7 +69,7 @@ function calculatop_ctx(oriy,dpzy,margen,menuctx){ // Calcula Y del menu context
// - menuctx: El menu (objeto DIV) que se mostrará
//____________________________________________________________________________
function calculaleft_ctx(orix,dpzx,margen,menuctx){ // Calcula Y del menu contextual
- anchodiv=parseInt(menuctx.offsetWidth)
+ var anchodiv=parseInt(menuctx.offsetWidth)
var wleft=orix+dpzx+margen
var maximodpl=parseInt(document.body.clientWidth)
if (wleft+anchodiv>maximodpl){ // Si no cabe a la derecha
@@ -210,7 +210,8 @@ function marca_desmarca(o,sw){
var wfondo=ctx_grissistema;
var wcolor=ctx_negro;
}
- (MenuconImagen(contextual(o)) ? i0=2:i0=1);
+ var i0;
+ (MenuconImagen(contextual(o)) ? i0=2 : i0=1);
var nh=o.childNodes.length;
for (var i=i0;i<nh-1;i++){
var oTD=o.childNodes[i];
@@ -279,8 +280,8 @@ function reset_contextual(x,y){
// - menuctx: El submenu (objeto DIV)
//____________________________________________________________________________
function EnContextual(x,y,menuctx){
- origen_x=parseInt(menuctx.offsetLeft)-parseInt(document.body.scrollLeft)
- origen_y=parseInt(menuctx.offsetTop)-parseInt(document.body.scrollTop)
+ var origen_x=parseInt(menuctx.offsetLeft)-parseInt(document.body.scrollLeft)
+ var origen_y=parseInt(menuctx.offsetTop)-parseInt(document.body.scrollTop)
anchodiv=parseInt(menuctx.offsetWidth)
largodiv=parseInt(menuctx.offsetHeight)
@@ -332,14 +333,15 @@ function subcalculatop_ctx(y,menuctx){ // Calcula el posicionamiento (y) del DIV
// - menuctx: El submenu (objeto DIV) que se mostrará
//____________________________________________________________________________
function subcalculaleft_ctx(padrediv,menuctx){ // Calcula el posicionamiento (x) del DIV ( SUBmenu contextual)
- anchopadrediv=parseInt(padrediv.offsetWidth) // Ancho del div padre
- anchomenuctx=parseInt(menuctx.offsetWidth) // Ancho del div
+ var anchopadrediv=parseInt(padrediv.offsetWidth) // Ancho del div padre
+ var anchomenuctx=parseInt(menuctx.offsetWidth) // Ancho del div
+ var leftpadrediv; // Coordenada x del div padre
if(IE)
- leftpadrediv=padrediv.style.pixelLeft // Coordenada x del div padre
+ leftpadrediv=padrediv.style.pixelLeft
else
if(NS)
leftpadrediv=parseInt(padrediv.style.left) // Coordenada x del div padre
- desplazamiento=leftpadrediv+anchopadrediv-4 // Desplazamiento
+ var desplazamiento=leftpadrediv+anchopadrediv-4 // Desplazamiento
var wleft=parseInt(desplazamiento)
var maximodpl=parseInt(document.body.clientWidth)+parseInt(document.body.scrollLeft)
if (wleft+anchomenuctx>maximodpl){
diff --git a/admin/WebConsole/comandos/Apagar.php b/admin/WebConsole/comandos/Apagar.php
index 47bcb038..dbf9e50e 100644
--- a/admin/WebConsole/comandos/Apagar.php
+++ b/admin/WebConsole/comandos/Apagar.php
@@ -16,11 +16,11 @@ include_once("../includes/CreaComando.php");
include_once("../includes/HTMLSELECT.php");
include_once("../idiomas/php/".$idioma."/comandos/apagar_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
-
//________________________________________________________________________________________________________
+//
include_once("./includes/capturaacciones.php");
//________________________________________________________________________________________________________
-//________________________________________________________________________________________________________
+//
$cmd=CreaComando($cadenaconexion);
if (!$cmd)
Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
@@ -33,42 +33,27 @@ if (!$cmd)
<LINK rel="stylesheet" type="text/css" href="../estilos.css">
<SCRIPT language="javascript" src="./jscripts/Apagar.js"></SCRIPT>
<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
+ <SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY>
<?
-switch($ambito){
- case $AMBITO_CENTROS :
- $urlimg='../images/iconos/centros.gif';
- $textambito=$TbMsg[0];
- break;
- case $AMBITO_GRUPOSAULAS :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[1];
- break;
- case $AMBITO_AULAS :
- $urlimg='../images/iconos/aula.gif';
- $textambito=$TbMsg[2];
- break;
- case $AMBITO_GRUPOSORDENADORES :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[3];
- break;
- case $AMBITO_ORDENADORES :
- $urlimg='../images/iconos/ordenador.gif';
- $textambito=$TbMsg[4];
- break;
- }
echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
- echo '<IMG src="'.$urlimg.'">&nbsp;&nbsp;<span align=center class=subcabeceras>
- <U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span>&nbsp;&nbsp;</span></p>';
//________________________________________________________________________________________________________
- include_once("./includes/formularioacciones.php");
+ //
+ include_once("./includes/FiltradoAmbito.php");
//________________________________________________________________________________________________________
+ //
+ include_once("./includes/formularioacciones.php");
//________________________________________________________________________________________________________
+ //
include_once("./includes/opcionesacciones.php");
//________________________________________________________________________________________________________
+
?>
+<SCRIPT language="javascript">
+ Sondeo();
+</SCRIPT>
</BODY>
</HTML>
diff --git a/admin/WebConsole/comandos/Arrancar.php b/admin/WebConsole/comandos/Arrancar.php
index 84759414..ecb066e0 100644
--- a/admin/WebConsole/comandos/Arrancar.php
+++ b/admin/WebConsole/comandos/Arrancar.php
@@ -16,11 +16,11 @@ include_once("../includes/CreaComando.php");
include_once("../includes/HTMLSELECT.php");
include_once("../idiomas/php/".$idioma."/comandos/arrancar_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
-
//________________________________________________________________________________________________________
+//
include_once("./includes/capturaacciones.php");
//________________________________________________________________________________________________________
-//________________________________________________________________________________________________________
+//
$cmd=CreaComando($cadenaconexion);
if (!$cmd)
Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
@@ -38,36 +38,22 @@ if (!$cmd)
</HEAD>
<BODY>
<?
-switch($ambito){
- case $AMBITO_CENTROS :
- $urlimg='../images/iconos/centros.gif';
- $textambito=$TbMsg[0];
- break;
- case $AMBITO_GRUPOSAULAS :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[1];
- break;
- case $AMBITO_AULAS :
- $urlimg='../images/iconos/aula.gif';
- $textambito=$TbMsg[2];
- break;
- case $AMBITO_GRUPOSORDENADORES :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[3];
- break;
- case $AMBITO_ORDENADORES :
- $urlimg='../images/iconos/ordenador.gif';
- $textambito=$TbMsg[4];
- break;
- }
echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
- echo '<IMG src="'.$urlimg.'">&nbsp;&nbsp;<span align=center class=subcabeceras><U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span>&nbsp;&nbsp;</span></p>';
//________________________________________________________________________________________________________
+ //
+ include_once("./includes/FiltradoAmbito.php");
+ //________________________________________________________________________________________________________
+ //
include_once("./includes/formularioacciones.php");
//________________________________________________________________________________________________________
+ //
include_once("./includes/opcionesacciones.php");
- //________________________________________________________________________________________________________
+ //_______________________________________________________________________________________________________
+
?>
+<SCRIPT language="javascript">
+ Sondeo();
+</SCRIPT>
</BODY>
</HTML>
diff --git a/admin/WebConsole/comandos/Configurar.php b/admin/WebConsole/comandos/Configurar.php
index 117523da..10e11523 100644
--- a/admin/WebConsole/comandos/Configurar.php
+++ b/admin/WebConsole/comandos/Configurar.php
@@ -20,7 +20,6 @@ include_once("../includes/ConfiguracionesParticiones.php");
include_once("../includes/RecopilaIpesMacs.php");
include_once("../idiomas/php/".$idioma."/comandos/configurar_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
-
//________________________________________________________________________________________________________
include_once("./includes/capturaacciones.php");
//________________________________________________________________________________________________________
@@ -66,23 +65,12 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
</HEAD>
<BODY>
<?
- switch($ambito){
- case $AMBITO_AULAS :
- $urlimg='../images/iconos/aula.gif';
- $textambito=$TbMsg[2];
- break;
- case $AMBITO_GRUPOSORDENADORES :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[3];
- break;
- case $AMBITO_ORDENADORES :
- $urlimg='../images/iconos/ordenador.gif';
- $textambito=$TbMsg[4];
- break;
- }
- echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'</span><br>'; // Cabecera
- echo '<IMG src="'.$urlimg.'">&nbsp;&nbsp;<span align=center class=subcabeceras>
- <U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span>&nbsp;&nbsp;</span></p>'; // Subcebecera
+ echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
+ //________________________________________________________________________________________________________
+ //
+ include_once("./includes/FiltradoAmbito.php");
+ //________________________________________________________________________________________________________
+
echo '<P align=center><SPAN align=center class=subcabeceras>'.$TbMsg[19].'</SPAN></P>';
if($ambito!=$AMBITO_ORDENADORES){
$cadenaid="";
@@ -118,7 +106,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
<TR>
<TD height=20 align="center" colspan=14>
<A href=#>
- <IMG border=0 src="../images/boton_confirmar.gif" onclick="document.fdatos.submit()"></A></TD>
+ <IMG border=0 src="../images/boton_confirmar_<? echo $idioma ?>.gif" onclick="document.fdatos.submit()"></A></TD>
</TR>
</TABLE>
</FORM>
@@ -145,6 +133,9 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
include_once("./includes/opcionesacciones.php");
//________________________________________________________________________________________________________
?>
+<SCRIPT language="javascript">
+ Sondeo();
+</SCRIPT>
</BODY>
</HTML>
<?
diff --git a/admin/WebConsole/comandos/EjecutarScripts.php b/admin/WebConsole/comandos/EjecutarScripts.php
index 08ab3697..7ffba2e2 100644
--- a/admin/WebConsole/comandos/EjecutarScripts.php
+++ b/admin/WebConsole/comandos/EjecutarScripts.php
@@ -16,7 +16,6 @@ include_once("../includes/CreaComando.php");
include_once("../includes/HTMLSELECT.php");
include_once("../idiomas/php/".$idioma."/comandos/ejecutarscripts_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
-
//________________________________________________________________________________________________________
include_once("./includes/capturaacciones.php");
//________________________________________________________________________________________________________
@@ -33,38 +32,20 @@ if (!$cmd)
<LINK rel="stylesheet" type="text/css" href="../estilos.css">
<SCRIPT language="javascript" src="./jscripts/EjecutarScripts.js"></SCRIPT>
<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
+ <SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/ejecutarscripts_'.$idioma.'.js"></SCRIPT>'?>
<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY>
<?
-switch($ambito){
- case $AMBITO_CENTROS :
- $urlimg='../images/iconos/centros.gif';
- $textambito=$TbMsg[0];
- break;
- case $AMBITO_GRUPOSAULAS :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[1];
- break;
- case $AMBITO_AULAS :
- $urlimg='../images/iconos/aula.gif';
- $textambito=$TbMsg[2];
- break;
- case $AMBITO_GRUPOSORDENADORES :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[3];
- break;
- case $AMBITO_ORDENADORES :
- $urlimg='../images/iconos/ordenador.gif';
- $textambito=$TbMsg[4];
- break;
- }
- //echo '<p align=center><span class=cabeceras>'.$descricomando.'&nbsp;</span><br>';
echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
- echo '<IMG src="'.$urlimg.'">&nbsp;&nbsp;<span align=center class=subcabeceras>
- <U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span>&nbsp;&nbsp;</span></p>';
- ?>
+ //________________________________________________________________________________________________________
+ //
+ include_once("./includes/FiltradoAmbito.php");
+ //________________________________________________________________________________________________________
+?>
+ <P align=center>
+ <SPAN align=center class=subcabeceras><? echo $TbMsg[10] ?></SPAN>
<form align=center name="fdatos">
<table align=center class=tabla_datos border="0" cellpadding="0" cellspacing="1">
<tr>
@@ -80,5 +61,8 @@ switch($ambito){
include_once("./includes/opcionesacciones.php");
//________________________________________________________________________________________________________
?>
+<SCRIPT language="javascript">
+ Sondeo();
+</SCRIPT>
</BODY>
</HTML>
diff --git a/admin/WebConsole/comandos/IniciarSesion.php b/admin/WebConsole/comandos/IniciarSesion.php
index ec63f057..e9ffc80d 100644
--- a/admin/WebConsole/comandos/IniciarSesion.php
+++ b/admin/WebConsole/comandos/IniciarSesion.php
@@ -17,7 +17,6 @@ include_once("../includes/HTMLSELECT.php");
include_once("../includes/TomaDato.php");
include_once("../idiomas/php/".$idioma."/comandos/iniciarsesion_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
-
//________________________________________________________________________________________________________
include_once("./includes/capturaacciones.php");
//________________________________________________________________________________________________________
@@ -39,30 +38,11 @@ if (!$cmd)
</HEAD>
<BODY>
<?
-switch($ambito){
- case $AMBITO_CENTROS :
- $urlimg='../images/iconos/centros.gif';
- $textambito=$TbMsg[0];
- break;
- case $AMBITO_GRUPOSAULAS :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[1];
- break;
- case $AMBITO_AULAS :
- $urlimg='../images/iconos/aula.gif';
- $textambito=$TbMsg[2];
- break;
- case $AMBITO_GRUPOSORDENADORES :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[3];
- break;
- case $AMBITO_ORDENADORES :
- $urlimg='../images/iconos/ordenador.gif';
- $textambito=$TbMsg[4];
- break;
- }
echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
- echo '<IMG src="'.$urlimg.'">&nbsp;&nbsp;<span align=center class=subcabeceras><U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span>&nbsp;&nbsp;</span></p>';
+ //________________________________________________________________________________________________________
+ //
+ include_once("./includes/FiltradoAmbito.php");
+ //________________________________________________________________________________________________________
?>
<P align=center>
<SPAN align=center class=subcabeceras><? echo $TbMsg[7] ?></SPAN>
@@ -86,6 +66,9 @@ switch($ambito){
include_once("./includes/opcionesacciones.php");
//________________________________________________________________________________________________________
?>
+<SCRIPT language="javascript">
+ Sondeo();
+</SCRIPT>
</BODY>
</HTML>
<?
diff --git a/admin/WebConsole/comandos/Reiniciar.php b/admin/WebConsole/comandos/Reiniciar.php
index 47c3b623..ecaee6d7 100644
--- a/admin/WebConsole/comandos/Reiniciar.php
+++ b/admin/WebConsole/comandos/Reiniciar.php
@@ -16,11 +16,11 @@ include_once("../includes/CreaComando.php");
include_once("../includes/HTMLSELECT.php");
include_once("../idiomas/php/".$idioma."/comandos/reiniciar_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
-
//________________________________________________________________________________________________________
+//
include_once("./includes/capturaacciones.php");
//________________________________________________________________________________________________________
-//________________________________________________________________________________________________________
+//
$cmd=CreaComando($cadenaconexion);
if (!$cmd)
Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
@@ -33,41 +33,25 @@ if (!$cmd)
<LINK rel="stylesheet" type="text/css" href="../estilos.css">
<SCRIPT language="javascript" src="./jscripts/Reiniciar.js"></SCRIPT>
<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
+ <SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY>
<?
-switch($ambito){
- case $AMBITO_CENTROS :
- $urlimg='../images/iconos/centros.gif';
- $textambito=$TbMsg[0];
- break;
- case $AMBITO_GRUPOSAULAS :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[1];
- break;
- case $AMBITO_AULAS :
- $urlimg='../images/iconos/aula.gif';
- $textambito=$TbMsg[2];
- break;
- case $AMBITO_GRUPOSORDENADORES :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[3];
- break;
- case $AMBITO_ORDENADORES :
- $urlimg='../images/iconos/ordenador.gif';
- $textambito=$TbMsg[4];
- break;
- }
echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
- echo '<IMG src="'.$urlimg.'">&nbsp;&nbsp;<span align=center class=subcabeceras><U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span>&nbsp;&nbsp;</span></p>';
//________________________________________________________________________________________________________
- include_once("./includes/formularioacciones.php");
+ //
+ include_once("./includes/FiltradoAmbito.php");
//________________________________________________________________________________________________________
+ //
+ include_once("./includes/formularioacciones.php");
//________________________________________________________________________________________________________
+ //
include_once("./includes/opcionesacciones.php");
//________________________________________________________________________________________________________
?>
+<SCRIPT language="javascript">
+ Sondeo();
+</SCRIPT>
</BODY>
</HTML>
-
diff --git a/admin/WebConsole/comandos/RestaurarImagen.php b/admin/WebConsole/comandos/RestaurarImagen.php
index 1194c6c5..5e5bd250 100644
--- a/admin/WebConsole/comandos/RestaurarImagen.php
+++ b/admin/WebConsole/comandos/RestaurarImagen.php
@@ -66,23 +66,12 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
</HEAD>
<BODY>
<?
- switch($ambito){
- case $AMBITO_AULAS :
- $urlimg='../images/iconos/aula.gif';
- $textambito=$TbMsg[2];
- break;
- case $AMBITO_GRUPOSORDENADORES :
- $urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[3];
- break;
- case $AMBITO_ORDENADORES :
- $urlimg='../images/iconos/ordenador.gif';
- $textambito=$TbMsg[4];
- break;
- }
- echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'</span><br>'; // Cabecera
- echo '<IMG src="'.$urlimg.'">&nbsp;&nbsp;<span align=center class=subcabeceras>
- <U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span>&nbsp;&nbsp;</span></p>'; // Subcebecera
+ echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
+ //________________________________________________________________________________________________________
+
+ include_once("./includes/FiltradoAmbito.php");
+ //________________________________________________________________________________________________________
+
echo '<P align=center><SPAN align=center class=subcabeceras>'.$TbMsg[19].'</SPAN></P>';
if($ambito!=$AMBITO_ORDENADORES){
$cadenaid="";
@@ -117,7 +106,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
<TR>
<TD height=20 align="center" colspan=14>
<A href=#>
- <IMG border=0 src="../images/boton_confirmar.gif" onclick="document.fdatos.submit()"></A></TD>
+ <IMG border=0 src="../images/boton_confirmar_<? echo $idioma ?>.gif" onclick="document.fdatos.submit()"></A></TD>
</TR>
</TABLE>
</FORM>
@@ -132,6 +121,9 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
include_once("./includes/opcionesacciones.php");
//________________________________________________________________________________________________________
?>
+<SCRIPT language="javascript">
+ Sondeo();
+</SCRIPT>
</BODY>
</HTML>
<?
@@ -179,34 +171,29 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc,$ambito,$idam
echo '<TD ><input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numpar"].'></TD>'.chr(13);
echo '<TD align=center>&nbsp;'.$tbKeys[$k]["numpar"].'&nbsp;</TD>'.chr(13);
echo '<TD align=center>&nbsp;'.$tbKeys[$k]["tipopar"].'&nbsp;</TD>'.chr(13);
-
- //echo '<TD>&nbsp;'.$tbKeys[$k]["nombreso"].'&nbsp;</TD>'.chr(13);
echo '<TD align=center>&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
-
- //echo'<TD align=center>&nbsp;'.$tbKeys[$k]["sistemafichero"].'&nbsp;</TD>'.chr(13);
echo'<TD align=center>&nbsp;'.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
-
- //echo'<TD align=rigth>&nbsp;'.formatomiles($tbKeys[$k]["tamano"]).'&nbsp;</TD>'.chr(13);
echo'<TD align=center>&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
-
echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idordenadores,$ambito).'</TD>';
echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,false,$idordenadores,$ambito).'</TD>';
+
//Clonación
-
- $metodos="UNICAST-DIRECT=UNICAST-DIRECT".chr(13);
- $metodos.="MULTICAST-DIRECT " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-DIRECT".chr(13);
+ $metodos="UNICAST=UNICAST-CACHE".chr(13);
+ $metodos.="UNICAST-DIRECT=UNICAST-DIRECT".chr(13);
$metodos.="MULTICAST " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-CACHE".chr(13);
- $metodos.="TORRENT peer:60=TORRENT-CACHE";
-
- $TBmetodos["UNICAST-DIRECT"]=1;
- $TBmetodos["MULTICAST-DIRECT"]=2;
+ $metodos.="MULTICAST-DIRECT " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-DIRECT".chr(13);
+ $metodos.="TORRENT " . torrent_syntax($cmd,$ambito,$idambito) . "=TORRENT-CACHE";
+
+ $TBmetodos["UNICAST-CACHE"]=1;
+ $TBmetodos["UNICAST-DIRECT"]=2;
$TBmetodos["MULTICAST-CACHE"]=3;
- $TBmetodos["TORRENT-CACHE"]=4;
-
+ $TBmetodos["MULTICAST-DIRECT"]=4;
+ $TBmetodos["TORRENT-CACHE"]=5;
+
$idxc=$_SESSION["protclonacion"];
echo '<TD>'.HTMLCTESELECT($metodos,"protoclonacion_".$icp,"estilodesple","",$TBmetodos[$idxc],100).'</TD>';
}
- echo '<TR>'.chr(13);
+ echo '</TR>'.chr(13);
}
}
}
@@ -290,33 +277,38 @@ function mcast_syntax($cmd,$ambito,$idambito)
//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
if ($ambito == 4)
{
-$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas where aulas.idaula=' . $idambito ;
+$cmd->texto='SELECT pormul, ipmul, modomul, velmul, puestos FROM aulas
+ WHERE aulas.idaula=' . $idambito ;
}
if ($ambito == 8)
{
-$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula where gruposordenadores.idgrupo=' . $idambito ;
+$cmd->texto='SELECT pormul, ipmul, modomul, velmul, puestos FROM aulas
+ JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula
+ WHERE gruposordenadores.idgrupo=' . $idambito ;
}
if ($ambito == 16)
{
-$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ;
+$cmd->texto='SELECT pormul, ipmul, modomul, velmul, puestos FROM aulas
+ JOIN ordenadores ON ordenadores.idaula=aulas.idaula
+ WHERE ordenadores.idordenador=' . $idambito ;
}
$rs=new Recordset;
$rs->Comando=&$cmd;
-if ($rs->Abrir()){
+ if ($rs->Abrir()){
$rs->Primero();
- $mcastsyntax.= $rs->campos["pormul"] . ':';
-
+ $mcastsyntax.= $rs->campos["pormul"] . ':';
+
$rs->Siguiente();
switch ($rs->campos["modomul"])
{
case 1:
- $mcastsyntax.="half-duplex:";
+ $mcastsyntax.="half-duplex:";
break;
default:
- $mcastsyntax.="full-duplex:";
+ $mcastsyntax.="full-duplex:";
break;
}
$rs->Siguiente();
@@ -324,25 +316,50 @@ if ($rs->Abrir()){
$rs->Siguiente();
$mcastsyntax.=$rs->campos["velmul"] .'M:';
-
+
+ $rs->Siguiente();
+ $mcastsyntax.=$rs->campos["puestos"] . ':';
+
$rs->Cerrar();
}
- $mcastsyntax.="50:";
- $mcastsyntax.="60";
+ $mcastsyntax.="60";
+
return($mcastsyntax);
}
+function torrent_syntax($cmd,$ambito,$idambito)
+{
+if ($ambito == 4)
+{
+ $cmd->texto='SELECT modp2p, timep2p FROM aulas
+ WHERE aulas.idaula=' . $idambito ;
+}
+if ($ambito == 8)
+{
+ $cmd->texto='SELECT modp2p, timep2p FROM aulas
+ JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula
+ WHERE gruposordenadores.idgrupo=' . $idambito ;
+}
+if ($ambito == 16)
+{
+ $cmd->texto='SELECT modp2p, timep2p FROM aulas
+ JOIN ordenadores ON ordenadores.idaula=aulas.idaula
+ WHERE ordenadores.idordenador=' . $idambito ;
+}
-
-
-
-
-
-
-
-
-
-
+$rs=new Recordset;
+$rs->Comando=&$cmd;
+if ($rs->Abrir()){
+ $rs->Primero();
+ $torrentsyntax=$rs->campos["modp2p"] . ':';
+ $rs->Siguiente();
+ $torrentsyntax.=$rs->campos["timep2p"];
+ $rs->Siguiente();
+ $rs->Cerrar();
+}
+return($torrentsyntax);
+}
?>
+
diff --git a/admin/WebConsole/comandos/gestores/gestor_Comandos.php b/admin/WebConsole/comandos/gestores/gestor_Comandos.php
index 5425ea81..eee25672 100644
--- a/admin/WebConsole/comandos/gestores/gestor_Comandos.php
+++ b/admin/WebConsole/comandos/gestores/gestor_Comandos.php
@@ -78,7 +78,12 @@ $atributos=str_replace('$',chr(9),$atributos);
$cadenaid="";
$cadenaip="";
$cadenamac="";
-RecopilaIpesMacs($cmd,$ambito,$idambito);
+
+if(!empty($filtro)){ // Ambito restringido a un subconjuto de ordenadores
+ if(substr($filtro,strlen($cadenaid)-1,1)==";") // Si el último caracter es una coma
+ $filtro=substr($filtro,0,strlen($filtro)-1); // Quita la coma
+}
+RecopilaIpesMacs($cmd,$ambito,$idambito,$filtro);
/*--------------------------------------------------------------------------------------------------------------------
Creación de parametros para sentencias SQL
@@ -108,6 +113,9 @@ if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato
$cmd->ParamSetValor("@restrambito",$idambito);
$idambito=0;
}
+if(!empty($filtro)){ // Ambito restringido a un subconjuto de ordenadores
+ $cmd->ParamSetValor("@restrambito",$filtro);
+}
$resul=true;
/*--------------------------------------------------------------------------------------------------------------------
Switch de ejecución inmediata y de seguimiento
@@ -134,7 +142,7 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
$cmd->ParamSetValor("@idcentro",$idcentro);
$auxID=split(",",$cadenaid);
$auxIP=split(";",$cadenaip);
-
+ $vez=0;
for ($i=0;$i<sizeof($auxID);$i++){
$cmd->ParamSetValor("@idordenador",$auxID[$i]);
$cmd->ParamSetValor("@ip",$auxIP[$i]);
@@ -144,8 +152,12 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idcentro)";
$resul=$cmd->Ejecutar();
//echo "<br>".$cmd->texto;
+ if(empty($vez)){
+ $idaccion=$cmd->Autonumerico();
+ $acciones=chr(13)."ids=".$idaccion.chr(13); // Para seguimiento
+ }
+ $vez++;
}
- $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
}
if (!$resul){
echo '<SCRIPT language="javascript">';
diff --git a/admin/WebConsole/comandos/includes/FiltradoAmbito.php b/admin/WebConsole/comandos/includes/FiltradoAmbito.php
new file mode 100644
index 00000000..8c357efe
--- /dev/null
+++ b/admin/WebConsole/comandos/includes/FiltradoAmbito.php
@@ -0,0 +1,393 @@
+<?php
+// ******************************************************************************************************************
+// Aplicacin WEB: ogAdmWebCon
+// Autor: Jos Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creacin: Ao 2012
+// Fecha ltima modificacin: Febrero-2012
+// Nombre del fichero: FiltradoAmbito.php
+// Descripcin :
+// Coleccin de funciones en php y javascript que implementan la posibilidad de aplicar filtro de seleccin
+// a un determinado grupo de ordenadores dentro de un aula para aplicarles comandos.
+//
+// ********************************************************************************************************************
+//
+include_once("../idiomas/php/".$idioma."/estados_".$idioma.".php");
+
+$cadenaip="";
+$cid=0; // Identificadores para tablas de ordenadores
+switch($ambito)
+{
+ case $AMBITO_CENTROS :
+ $cmd->texto="SELECT idcentro,nombrecentro FROM centros WHERE idcentro=".$idambito;
+ RecorriendoCentro($cmd);
+ break;
+ case $AMBITO_GRUPOSAULAS :
+ $cmd->texto="SELECT idgrupo,nombregrupo FROM grupos WHERE tipo=".$AMBITO_GRUPOSAULAS." AND idgrupo=".$idambito;
+ RecorriendoGruposAulas($cmd);
+ break;
+ case $AMBITO_AULAS :
+ $cmd->texto="SELECT idaula,nombreaula FROM aulas WHERE idaula=".$idambito;
+ RecorriendoAulas($cmd);
+ break;
+ case $AMBITO_GRUPOSORDENADORES :
+ $cmd->texto="SELECT idgrupo,nombregrupoordenador FROM gruposordenadores WHERE idgrupo=".$idambito;
+ RecorriendoGruposOrdenadores($cmd);
+ break;
+}
+echo '<P><INPUT type="hidden" id="cadenaip" value="'.$cadenaip.'"></P>';
+//________________________________________________________________________________________________________
+//
+function RecorriendoCentro($cmd)
+{
+ global $AMBITO_GRUPOSAULAS;
+ global $TbMsg;
+
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return; // Error al abrir recordset
+ $rs->Primero();
+ if(!$rs->EOF){
+ $idcentro=$rs->campos["idcentro"];
+ $nombrecentro=$rs->campos["nombrecentro"];
+
+ $urlimg='../images/iconos/centros.gif';
+ $ambito=$TbMsg[0];
+ echo '<p align=center><IMG src="'.$urlimg.'">&nbsp;&nbsp;
+ <span align=center class=subcabeceras><U>'.$ambito.':'.$nombrecentro.'</U></span></p>';
+
+ $cmd->texto="SELECT idgrupo,nombregrupo FROM grupos WHERE idcentro=".$idcentro." AND grupoid=0
+ AND tipo=".$AMBITO_GRUPOSAULAS." ORDER BY nombregrupo ";
+ RecorriendoGruposAulas($cmd);
+ $cmd->texto="SELECT idaula,nombreaula FROM aulas WHERE idcentro=".$idcentro." AND grupoid=0 ORDER BY nombreaula";
+ RecorriendoAulas($cmd);
+ }
+ $rs->Cerrar();
+}
+//________________________________________________________________________________________________________
+//
+function RecorriendoGruposAulas($cmd)
+{
+ global $AMBITO_GRUPOSAULAS;
+ global $TbMsg;
+
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return; // Error al abrir recordset
+ $rs->Primero();
+ while (!$rs->EOF){
+ $idgrupo=$rs->campos["idgrupo"];
+ $nombregrupo=$rs->campos["nombregrupo"];
+
+ $urlimg='../images/iconos/carpeta.gif';
+ $ambito=$TbMsg[1];
+ echo '<p align=center><IMG src="'.$urlimg.'">&nbsp;&nbsp;
+ <span align=center class=subcabeceras><U>'.$ambito.':'.$nombregrupo.'</U></span></p>';
+
+ $cmd->texto="SELECT idgrupo,nombregrupo FROM grupos WHERE grupoid=".$idgrupo."
+ AND tipo=".$AMBITO_GRUPOSAULAS." ORDER BY nombregrupo";
+ RecorriendoGruposAulas($cmd);
+ $cmd->texto="SELECT idaula,nombreaula FROM aulas WHERE grupoid=".$idgrupo." ORDER BY nombreaula";
+ RecorriendoAulas($cmd);
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+}
+//________________________________________________________________________________________________________
+//
+function RecorriendoAulas($cmd)
+{
+ global $TbMsg;
+
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return; // Error al abrir recordset
+ $rs->Primero();
+ while (!$rs->EOF){
+ $idaula=$rs->campos["idaula"];
+ $nombreaula=$rs->campos["nombreaula"];
+
+ $urlimg='../images/iconos/aula.gif';
+ $ambito=$TbMsg[2];
+ echo '<p align=center><IMG src="'.$urlimg.'">&nbsp;&nbsp;
+ <span align=center class=subcabeceras><U>'.$ambito.':'.$nombreaula.'</U></span></p>';
+
+ $cmd->texto="SELECT idordenador,nombreordenador,ip,mac FROM ordenadores WHERE idaula=".$idaula;
+ RecorriendoOrdenadores($cmd);
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+}
+//________________________________________________________________________________________________________
+//
+function RecorriendoGruposOrdenadores($cmd)
+{
+ global $TbMsg;
+
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return; // Error al abrir recordset
+ $rs->Primero();
+ while (!$rs->EOF){
+ $idgrupo=$rs->campos["idgrupo"];
+ $nombregrupo=$rs->campos["nombregrupo"];
+
+ $urlimg='../images/iconos/carpeta.gif';
+ $ambito=$TbMsg[3];
+ echo '<p align=center><IMG src="'.$urlimg.'">&nbsp;&nbsp;
+ <span align=center class=subcabeceras><U>'.$ambito.':'.$nombregrupo.'</U></span></p>';
+
+ $cmd->texto="SELECT idgrupo,nombregrupoordenador FROM gruposOrdenadores WHERE grupoid=".$idgrupo." ORDER BY nombregrupoordenador";
+ RecorriendoGruposOrdenadores($cmd);
+ $cmd->texto="SELECT idordenador,nombreordenador,ip,mac FROM ordenadores WHERE grupoid=".$idgrupo;
+ RecorriendoOrdenadores($cmd);
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+}
+//____________________________________________________________________________________________________
+//
+function RecorriendoOrdenadores($cmd)
+{
+ global $TbMsg;
+ global $cadenaip;
+ global $cid;
+
+ $cid++;
+ $cmd->texto.= " ORDER BY nombreordenador";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return; // Error al abrir recordset
+ $rs->Primero();
+ $htmlCode="";
+ $con=0;
+
+ $htmlCode.='
+<TABLE border=0 class="tabla_busquedas" align=center>
+<TR>
+
+<TD align="center">'.$TbMsg["STATUS_OFF"].'</TD>
+<TD><INPUT type="checkbox" checked onclick="selector(this,1,'.$cid.')"></TD>
+
+<TD align="center">'.$TbMsg["STATUS_BSY"].'</TD>
+<TD><INPUT type="checkbox" checked onclick="selector(this,2,'.$cid.')"></TD>
+
+<TD align="center">'.$TbMsg["STATUS_OPG"].'</TD>
+<TD><INPUT type="checkbox" checked onclick="selector(this,3,'.$cid.')"></TD>
+
+<TD align="center">'.$TbMsg["STATUS_WXP"].'</TD>
+<TD><INPUT type="checkbox" checked onclick="selector(this,4,'.$cid.')"></TD>
+
+<TD align="center">'.$TbMsg["STATUS_LNX"].'</TD>
+<TD><INPUT type="checkbox" checked onclick="selector(this,5,'.$cid.')"></TD>
+
+</TR>
+</TABLE>';
+
+ $htmlCode.='<BR>';
+ $htmlCode.='<TABLE id="tbo-'.$cid.'" border=0 align=center>';
+ $htmlCode.='<TR>';
+
+ while (!$rs->EOF){
+ $htmlCode.='<TD style="BORDER-BOTTOM: #999999 1px solid;BORDER-LEFT: #999999 1px solid;BORDER-RIGHT: #999999 1px solid;BORDER-TOP: #999999 1px solid;">';
+ $nombreordenador=$rs->campos["nombreordenador"];
+ $ip=$rs->campos["ip"];
+ $cadenaip.=$ip.";";
+ $htmlCode.='<TABLE cellspacing=1 cellpadding=0>';
+ $htmlCode.=' <TR><TD align="center"><img sondeo="ordenador_OFF.gif" id="img-'.$ip.'" width=24 src="../images/ordenador_OFF.gif"></TD></TR>';
+ $htmlCode.=' <TR><TD align="center"><SPAN style="FONT-SIZE:9px; COLOR: #4f4f4f;">'.$nombreordenador.'</SPAN></TD></TR>';
+ $htmlCode.=' <TR><TD align="center"><SPAN style="FONT-SIZE:8px; COLOR: #4f4f4f;">'.$ip.'</SPAN></TD></TR>';
+ $htmlCode.=' <TR><TD align="center"><INPUT id="chk-'.$ip.'" type="checkbox" checked></TD></TR>';
+ $htmlCode.='</TABLE>';
+ $htmlCode.='</TD>';
+ $con++;
+ if($con>15){
+ $htmlCode.='</TR>';
+ $htmlCode.='<TR>';
+ $con=0;
+ }
+ $rs->Siguiente();
+ }
+ $htmlCode.='</TR>';
+ $htmlCode.='</TABLE>';
+ echo $htmlCode;
+}
+//______________________________________________________________________________________________________
+//
+echo '<SCRIPT language="javascript">';
+echo 'var cid='.$cid.';';
+echo '</SCRIPT>';
+?>
+<SCRIPT language="javascript">
+function Sondeo(){
+ var ambito=<? echo $ambito?>;
+ var idambito=<? echo $idambito?>;
+ var wurl="../principal/sondeo.php";
+ var prm="ambito="+ambito+"&idambito="+idambito+"&sw=1";
+ CallPage(wurl,prm,"retornoSondeo","POST");
+ setTimeout("respuestaSondeo();",100);
+}
+//______________________________________________________________________________________________________
+//
+function retornoSondeo(resul)
+{
+ // No se hace nada
+}
+//________________________________________________________________________________________________________
+//
+function respuestaSondeo(){
+ var ambito=<? echo $ambito?>;
+ var idambito=<? echo $idambito?>;
+ var wurl="../principal/sondeo.php";
+ var prm="ambito="+ambito+"&idambito="+idambito+"&sw=2";
+ CallPage(wurl,prm,"retornorespuestaSondeo","POST");
+ setTimeout("respuestaSondeo();",5000);
+}
+//______________________________________________________________________________________________________
+//
+function retornorespuestaSondeo(resul)
+{
+ if(resul.length>0){
+ var ip=""; // Direccin IP del ordenador
+ var so=""; // Sistema operativo activo
+ var objOrd=null; // Objeto ordenador
+ var imgOrd="";
+ var cadena=resul.split(";");
+ for (var i=0;i<cadena.length;i++){
+ var dual=cadena[i].split("/");
+ ip=dual[0].replace(/\n*/,"");
+ so=dual[1];
+ objOrd=document.getElementById("img-"+ip);
+ if(objOrd){
+ imgOrd=soIMG(so);
+ if(objOrd.getAttribute("sondeo")!=imgOrd){
+ objOrd.setAttribute("src", "../images/"+imgOrd);
+ objOrd.setAttribute("sondeo",imgOrd);
+ var objChk=document.getElementById("chk-"+ip);
+ if(objChk)
+ objChk.checked=true;
+ }
+ }
+ }
+ }
+}
+//______________________________________________________________________________________________________
+//
+function soIMG(so)
+{
+ var MimgOrdenador="";
+ switch(so){
+ case 'INI':
+ MimgOrdenador="ordenador_INI.gif"; // Cliente ocupado
+ break;
+ case 'BSY':
+ MimgOrdenador="ordenador_BSY.gif"; // Cliente ocupado
+ break;
+ case 'OPG':
+ MimgOrdenador="ordenador_OPG.gif"; // Cliente Rembo
+ break;
+ case 'WS2':
+ MimgOrdenador="ordenador_WS2.gif"; // Windows Server 2003
+ break;
+ case 'W2K':
+ MimgOrdenador="ordenador_W2K.gif"; // Windows 2000
+ break;
+ case 'WXP':
+ MimgOrdenador="ordenador_WXP.gif"; // Windows XP
+ break;
+ case 'WNT':
+ MimgOrdenador="ordenador_WNT.gif"; // Windows NT
+ break;
+ case 'W95':
+ MimgOrdenador="ordenador_W95.gif"; // Windows 95
+ break;
+ case 'W98':
+ MimgOrdenador="ordenador_W98.gif"; // Windows 98
+ break;
+ case 'WML':
+ MimgOrdenador="ordenador_WML.gif"; // Windows Millenium
+ break;
+ case 'WIN':
+ MimgOrdenador="ordenador_WXP.gif"; // Windows
+ break;
+ case 'LNX':
+ MimgOrdenador="ordenador_LNX.gif"; // Linux
+ break;
+ default:
+ MimgOrdenador="ordenador_OFF.gif"; // Apagado
+ break;
+ }
+ return(MimgOrdenador);
+}
+//______________________________________________________________________________________________________
+//
+function selector(oSLCT,op,id)
+{
+ var sw=oSLCT.checked;
+ var objTB=document.getElementById("tbo-"+id);
+
+ if(objTB){
+ var imagenes = objTB.getElementsByTagName('img');
+ for(var i=0;i<imagenes.length;i++){
+ var ip=imagenes[i].id.split("-")[1];
+ var estado=imagenes[i].getAttribute("sondeo");
+
+ var oCHK = document.getElementById('chk-'+ip); // Recupera checkbox
+
+ switch(parseInt(op)){
+ case 1: // Apagados
+ if(estado=="ordenador_OFF.gif")
+ oCHK.checked=sw;
+ break;
+
+ case 2: // Ocupados
+ if(estado=="ordenador_BSY.gif")
+ oCHK.checked=sw;
+ break;
+
+ case 3: // Opengnsys
+ if(estado=="ordenador_OPG.gif")
+ oCHK.checked=sw;
+ break;
+
+ case 4: // Windows
+ if(estado=="ordenador_WXP.gif")
+ oCHK.checked=sw;
+ break;
+
+ case 5: // Linux
+ if(estado=="ordenador_LNX.gif")
+ oCHK.checked=sw;
+ break;
+
+
+ }
+ }
+ }
+}
+
+//______________________________________________________________________________________________________
+//
+function filtrado()
+{
+ var ipes="";
+ for(j=1;j<=cid;j++){
+ var objTB=document.getElementById("tbo-"+j);
+ if(objTB){
+ var imagenes = objTB.getElementsByTagName('img');
+ for(var i=0;i<imagenes.length;i++){
+ var ip=imagenes[i].id.split("-")[1];
+ var oCHK = document.getElementById('chk-'+ip); // Recupera checkbox
+ if(oCHK.checked){
+ ipes+=ip+";";
+ }
+ }
+ }
+ }
+ var preipes=document.getElementById("cadenaip").value;
+ if(preipes!=ipes)
+ document.fdatosejecucion.filtro.value=ipes;
+ else
+ document.fdatosejecucion.filtro.value="";
+}
+</SCRIPT>
+
diff --git a/admin/WebConsole/comandos/includes/capturaacciones.php b/admin/WebConsole/comandos/includes/capturaacciones.php
index e26e38e6..97ec8435 100644
--- a/admin/WebConsole/comandos/includes/capturaacciones.php
+++ b/admin/WebConsole/comandos/includes/capturaacciones.php
@@ -18,6 +18,7 @@ $nombreambito="";
$funcion="";
$atributos="";
$gestor="";
+$filtro="";
if (isset($_POST["idcomando"])) $idcomando=$_POST["idcomando"];
if (isset($_POST["descricomando"])) $descricomando=$_POST["descricomando"];
@@ -27,5 +28,6 @@ if (isset($_POST["nombreambito"])) $nombreambito=$_POST["nombreambito"];
if (isset($_POST["funcion"])) $funcion=$_POST["funcion"];
if (isset($_POST["atributos"])) $atributos=$_POST["atributos"];
if (isset($_POST["gestor"])) $gestor=$_POST["gestor"];
+if (isset($_POST["filtro"])) $filtro=$_POST["filtro"];
?>
diff --git a/admin/WebConsole/comandos/includes/formularioacciones.php b/admin/WebConsole/comandos/includes/formularioacciones.php
index 4f8d401e..ffefa10c 100644
--- a/admin/WebConsole/comandos/includes/formularioacciones.php
+++ b/admin/WebConsole/comandos/includes/formularioacciones.php
@@ -17,4 +17,5 @@
<INPUT type="hidden" name="funcion" value="<? echo $funcion?>">
<INPUT type="hidden" name="atributos" value="<? echo $atributos?>">
<INPUT type="hidden" name="gestor" value="<? echo $gestor?>">
+ <INPUT type="hidden" name="filtro" value="">
diff --git a/admin/WebConsole/comandos/includes/opcionesacciones.php b/admin/WebConsole/comandos/includes/opcionesacciones.php
index a6933672..c4c72d2b 100644
--- a/admin/WebConsole/comandos/includes/opcionesacciones.php
+++ b/admin/WebConsole/comandos/includes/opcionesacciones.php
@@ -15,7 +15,7 @@
<?if($idcomando!=10){?>
<TABLE align=center>
<TR>
- <TD><IMG border=0 style="cursor:pointer" src="../images/boton_aceptar.gif" onclick="confirmar()" ></TD>
+ <TD><IMG border=0 style="cursor:pointer" src="../images/boton_aceptar_<? echo $idioma ?>.gif" onclick="confirmar()" ></TD>
</TR>
</TABLE>
<BR>
diff --git a/admin/WebConsole/comandos/jscripts/Apagar.js b/admin/WebConsole/comandos/jscripts/Apagar.js
index 44106958..4726c8b0 100644
--- a/admin/WebConsole/comandos/jscripts/Apagar.js
+++ b/admin/WebConsole/comandos/jscripts/Apagar.js
@@ -9,6 +9,7 @@
// *************************************************************************************************************************************************
function confirmar(){
if (comprobar_datos()){
+ filtrado();
document.fdatosejecucion.submit();
}
}
diff --git a/admin/WebConsole/comandos/jscripts/Arrancar.js b/admin/WebConsole/comandos/jscripts/Arrancar.js
index acd04a7e..fde33943 100644
--- a/admin/WebConsole/comandos/jscripts/Arrancar.js
+++ b/admin/WebConsole/comandos/jscripts/Arrancar.js
@@ -9,6 +9,7 @@
// *************************************************************************************************************************************************
function confirmar(){
if (comprobar_datos()){
+ filtrado();
document.fdatosejecucion.submit();
}
}
diff --git a/admin/WebConsole/comandos/jscripts/Configurar.js b/admin/WebConsole/comandos/jscripts/Configurar.js
index cc7eba86..2d0629b4 100644
--- a/admin/WebConsole/comandos/jscripts/Configurar.js
+++ b/admin/WebConsole/comandos/jscripts/Configurar.js
@@ -85,7 +85,8 @@ function Confirmar(cc)
document.fdatosejecucion.idambito.value=idordenadores;
}
}
- document.fdatosejecucion.atributos.value=atributos;
+ document.fdatosejecucion.atributos.value=atributos;
+ filtrado();
document.fdatosejecucion.submit();
}
}
diff --git a/admin/WebConsole/comandos/jscripts/EjecutarScripts.js b/admin/WebConsole/comandos/jscripts/EjecutarScripts.js
index e17411c0..5fd6c6aa 100644
--- a/admin/WebConsole/comandos/jscripts/EjecutarScripts.js
+++ b/admin/WebConsole/comandos/jscripts/EjecutarScripts.js
@@ -11,6 +11,7 @@
if (comprobar_datos()){
var RC='@';
document.fdatosejecucion.atributos.value="scp="+escape(document.fdatos.codigo.value)+RC;
+ filtrado();
document.fdatosejecucion.submit();
}
}
diff --git a/admin/WebConsole/comandos/jscripts/IniciarSesion.js b/admin/WebConsole/comandos/jscripts/IniciarSesion.js
index 05dcc52c..16b1d550 100644
--- a/admin/WebConsole/comandos/jscripts/IniciarSesion.js
+++ b/admin/WebConsole/comandos/jscripts/IniciarSesion.js
@@ -20,6 +20,7 @@ function confirmar(){
}
var RC='@';
document.fdatosejecucion.atributos.value="par="+particion+RC;
+ filtrado();
document.fdatosejecucion.submit();
}
}
diff --git a/admin/WebConsole/comandos/jscripts/Reiniciar.js b/admin/WebConsole/comandos/jscripts/Reiniciar.js
index 579ccdb5..3d424d3e 100644
--- a/admin/WebConsole/comandos/jscripts/Reiniciar.js
+++ b/admin/WebConsole/comandos/jscripts/Reiniciar.js
@@ -9,6 +9,7 @@
// *************************************************************************************************************************************************
function confirmar(){
if (comprobar_datos()){
+ filtrado();
document.fdatosejecucion.submit();
}
}
diff --git a/admin/WebConsole/comandos/jscripts/RestaurarImagen.js b/admin/WebConsole/comandos/jscripts/RestaurarImagen.js
index eb436aeb..fd1061bf 100644
--- a/admin/WebConsole/comandos/jscripts/RestaurarImagen.js
+++ b/admin/WebConsole/comandos/jscripts/RestaurarImagen.js
@@ -47,7 +47,8 @@
}
}
document.fdatosejecucion.atributos.value=atributos;
- document.fdatosejecucion.submit();
+ filtrado();
+ document.fdatosejecucion.submit();
break;
}
}
diff --git a/admin/WebConsole/controlpostacceso.php b/admin/WebConsole/controlpostacceso.php
index f6d3e66d..87b1958e 100644
--- a/admin/WebConsole/controlpostacceso.php
+++ b/admin/WebConsole/controlpostacceso.php
@@ -10,7 +10,7 @@
include_once("controlacceso.php");
include_once("./includes/CreaComando.php");
include_once("./clases/AdoPhp.php");
-include_once("idiomas/php/$idi/acceso_$idi.php");
+#include_once("idiomas/php/$idi/acceso_$idi.php");
//________________________________________________________________________________________________________
$usu="";
$pss="";
@@ -38,6 +38,8 @@ include_once("idiomas/php/$idi/acceso_$idi.php");
}
$resul=toma_datos($cmd,$idc,&$nmc,&$idi,$usu,&$tsu,$pss);
+ // Antes la variable idioma no es la correcta
+ include_once("idiomas/php/$idi/acceso_$idi.php");
if(!$resul)
Header("Location: ".$wac."?herror=4"); // Error de conexión con servidor B.D.
diff --git a/admin/WebConsole/gestores/gestor_aulas.php b/admin/WebConsole/gestores/gestor_aulas.php
index 013c03c1..a2630809 100644
--- a/admin/WebConsole/gestores/gestor_aulas.php
+++ b/admin/WebConsole/gestores/gestor_aulas.php
@@ -47,6 +47,17 @@ $netmask=0;
$modp2p=0;
$timep2p=0;
############ ADV
+//##agp
+if($_FILES['archivo']['type']=="image/gif" || $_FILES['archivo']['type']=="image/jpeg" || $_FILES['archivo']['type']=="image/jpg" || $_FILES['archivo']['type']=="image/png" || $_FILES['archivo']['type']=="image/JPG")
+{
+ $uploaddir ="../images/fotos/";
+
+ $uploadfile = $uploaddir.$_FILES['archivo']['name'];
+
+move_uploaded_file($_FILES['archivo']['tmp_name'], $uploadfile);
+#copy($_FILES['archivo']['tmp_name'], $uploadfile);
+}
+//##agp
if (isset($_POST["opcion"])) $opcion=$_POST["opcion"]; // Recoge parametros
if (isset($_POST["grupoid"])) $grupoid=$_POST["grupoid"];
diff --git a/admin/WebConsole/gestores/gestor_ejecutaracciones.php b/admin/WebConsole/gestores/gestor_ejecutaracciones.php
index 30aa8c7d..ae652af5 100644
--- a/admin/WebConsole/gestores/gestor_ejecutaracciones.php
+++ b/admin/WebConsole/gestores/gestor_ejecutaracciones.php
@@ -262,8 +262,10 @@ function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambit
/* Sólo envía por la red el primer comando, el resto, si hubiera,
lo encontrará el cliente a través de los comandos pendientes */
- if(empty($vez))
- if(!enviaComando($parametros)) return(false);
+ if(empty($vez)){
+ $idaccion=$cmd->Autonumerico();
+ if(!enviaComando($parametros,$idaccion)) return(false);
+ }
$vez++;
}
return(true);
@@ -272,12 +274,11 @@ function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambit
//
// Envia un procedimiento a un grupo de ordenadores a través de la red
//________________________________________________________________________________________________________
-function enviaComando($parametros)
+function enviaComando($parametros,$idaccion)
{
global $cadenaid;
global $cadenaip;
global $cadenamac;
- global $sesion;
global $servidorhidra;
global $hidraport;
global $LONCABECERA;
@@ -286,7 +287,7 @@ function enviaComando($parametros)
// Envio al servidor
$aplicacion=chr(13)."ido=".$cadenaid.chr(13)."mac=".$cadenamac.chr(13)."iph=".$cadenaip.chr(13);
- $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
+ $acciones=chr(13)."ids=".$idaccion.chr(13); // Para seguimiento
if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
$parametros.=$aplicacion;
diff --git a/admin/WebConsole/gestores/gestor_ordenadores.php b/admin/WebConsole/gestores/gestor_ordenadores.php
index 3b5645b4..c3d1990c 100644
--- a/admin/WebConsole/gestores/gestor_ordenadores.php
+++ b/admin/WebConsole/gestores/gestor_ordenadores.php
@@ -19,6 +19,7 @@ include_once("../includes/opciones.php");
//________________________________________________________________________________________________________
$opcion=0; // Inicializa parametros
+$fotoordenador="";
$grupoid=0;
$idaula=0;
$idordenador=0;
@@ -35,7 +36,18 @@ $cache=0;
$netiface="";
$netdriver="";
### ADV
+//##agp
+if($_FILES['archivo']['type']=="image/gif" || $_FILES['archivo']['type']=="image/jpeg" || $_FILES['archivo']['type']=="image/jpg" || $_FILES['archivo']['type']=="image/png" || $_FILES['archivo']['type']=="image/JPG")
+{
+ $uploaddir ="../images/fotos/";
+ $uploadfile = $uploaddir.$_FILES['archivo']['name'];
+
+move_uploaded_file($_FILES['archivo']['tmp_name'], $uploadfile);
+#copy($_FILES['archivo']['tmp_name'], $uploadfile);
+}
+//##agp
+if (isset($_POST["fotoordenador"])) $fotoordenador=$_POST["fotoordenador"];
if (isset($_POST["opcion"])) $opcion=$_POST["opcion"]; // Recoge parametros
if (isset($_POST["grupoid"])) $grupoid=$_POST["grupoid"];
if (isset($_POST["idaula"])) $idaula=$_POST["idaula"];
@@ -49,7 +61,6 @@ if (isset($_POST["idrepositorio"])) $idrepositorio=$_POST["idrepositorio"];
if (isset($_POST["idmenu"])) $idmenu=$_POST["idmenu"];
if (isset($_POST["idprocedimiento"])) $idprocedimiento=$_POST["idprocedimiento"];
if (isset($_POST["cache"])) $cache=$_POST["cache"];
-
if(empty($cache)) $cache=0;
if (isset($_POST["netiface"])) $netiface=$_POST["netiface"];
@@ -133,7 +144,8 @@ ________________________________________________________________________________
function Gestiona(){
global $cmd;
global $opcion;
-
+ $fotoordenador="../images/fotos/".$fotoordenador;
+ global $fotoordenador;
global $grupoid;
global $idordenador;
global $nombreordenador;
@@ -154,6 +166,7 @@ function Gestiona(){
global $op_movida;
global $tablanodo;
+
$cmd->CreaParametro("@grupoid",$grupoid,1);
$cmd->CreaParametro("@idaula",$idaula,1);
$cmd->CreaParametro("@idordenador",$idordenador,1);
@@ -167,13 +180,15 @@ function Gestiona(){
$cmd->CreaParametro("@cache",$cache,1);
$cmd->CreaParametro("@netiface",$netiface,0);
$cmd->CreaParametro("@netdriver",$netdriver,0);
+ $cmd->CreaParametro("@fotoordenador",$fotoordenador,0);
switch($opcion){
case $op_alta :
+ //Insertar fotoord con Values @fotoordenador
$cmd->texto="INSERT INTO ordenadores(nombreordenador,ip,mac,idperfilhard,idrepositorio,
- idmenu,idproautoexec,idaula,grupoid,cache,netiface,netdriver) VALUES (@nombreordenador,@ip,@mac,@idperfilhard,@idrepositorio,
- @idmenu,@idprocedimiento,@idaula,@grupoid,@cache,@netiface,@netdriver)";
+ idmenu,idproautoexec,idaula,grupoid,cache,netiface,netdriver,fotoord) VALUES (@nombreordenador,@ip,@mac,@idperfilhard,@idrepositorio,
+ @idmenu,@idprocedimiento,@idaula,@grupoid,@cache,@netiface,@netdriver,@fotoordenador)";
$resul=$cmd->Ejecutar();
//echo $cmd->texto;
@@ -188,7 +203,7 @@ function Gestiona(){
break;
case $op_modificacion:
$cmd->texto="UPDATE ordenadores SET nombreordenador=@nombreordenador,ip=@ip,mac=@mac,idperfilhard=@idperfilhard,
- idrepositorio=@idrepositorio,idmenu=@idmenu,idproautoexec=@idprocedimiento,cache=@cache,netiface=@netiface,netdriver=@netdriver
+ idrepositorio=@idrepositorio,idmenu=@idmenu,idproautoexec=@idprocedimiento,cache=@cache,netiface=@netiface,netdriver=@netdriver,fotoord=@fotoordenador
WHERE idordenador=@idordenador";
$resul=$cmd->Ejecutar();
//echo $cmd->texto;
diff --git a/admin/WebConsole/gestores/gestor_perfilhardwares.php b/admin/WebConsole/gestores/gestor_perfilhardwares.php
index ec932b6b..a9ee3294 100644
--- a/admin/WebConsole/gestores/gestor_perfilhardwares.php
+++ b/admin/WebConsole/gestores/gestor_perfilhardwares.php
@@ -33,6 +33,7 @@ if (isset($_POST["descripcion"])) $descripcion=$_POST["descripcion"];
if (isset($_POST["comentarios"])) $comentarios=$_POST["comentarios"];
if (isset($_POST["grupoid"])) $grupoid=$_POST["grupoid"];
if (isset($_POST["identificador"])) $idperfilhard=$_POST["identificador"];
+if (isset($_POST["winboot"])) $winboot=$_POST["winboot"];
$tablanodo=""; // Arbol para nodos insertados
@@ -100,6 +101,7 @@ function Gestiona(){
global $descripcion;
global $comentarios;
global $grupoid;
+ global $winboot;
global $urlimgth;
@@ -115,10 +117,11 @@ function Gestiona(){
$cmd->CreaParametro("@descripcion",$descripcion,0);
$cmd->CreaParametro("@comentarios",$comentarios,0);
$cmd->CreaParametro("@grupoid",$grupoid,1);
+ $cmd->CreaParametro("@winboot",$winboot,0);
switch($opcion){
case $op_alta :
- $cmd->texto="INSERT INTO perfileshard (descripcion,comentarios,idcentro,grupoid) VALUES (@descripcion,@comentarios,@idcentro,@grupoid)";
+ $cmd->texto="INSERT INTO perfileshard (descripcion,comentarios,idcentro,grupoid,winboot) VALUES (@descripcion,@comentarios,@idcentro,@grupoid,@winboot)";
$resul=$cmd->Ejecutar();
if ($resul){ // Crea una tabla nodo para devolver a la página que llamó ésta
$idperfilhard=$cmd->Autonumerico();
@@ -130,14 +133,14 @@ function Gestiona(){
}
break;
case $op_modificacion:
- $cmd->texto="UPDATE perfileshard SET descripcion=@descripcion,comentarios=@comentarios WHERE idperfilhard=@idperfilhard";
+ $cmd->texto="UPDATE perfileshard SET descripcion=@descripcion,comentarios=@comentarios,winboot=@winboot WHERE idperfilhard=@idperfilhard";
$resul=$cmd->Ejecutar();
break;
case $op_eliminacion :
$resul=EliminaPerfileshard($cmd,$idperfilhard,"idperfilhard");
break;
case $op_movida :
- $cmd->texto="UPDATE perfileshard SET grupoid=@grupoid WHERE idperfilhard=@idperfilhard";
+ $cmd->texto="UPDATE perfileshard SET grupoid=@grupoid WHERE idperfilhard=@idperfilhard";
$resul=$cmd->Ejecutar();
break;
default:
@@ -161,3 +164,4 @@ function SubarbolXML_perfileshard($idperfilhard,$descripcion){
return($cadenaXML);
}
?>
+
diff --git a/admin/WebConsole/gestores/gestor_pxe.php b/admin/WebConsole/gestores/gestor_pxe.php
index 04d5343d..331b6902 100644
--- a/admin/WebConsole/gestores/gestor_pxe.php
+++ b/admin/WebConsole/gestores/gestor_pxe.php
@@ -50,11 +50,17 @@ $cmd->texto="update ordenadores set arranque=@optboot where nombreordenador=@hos
$cmd->Ejecutar();
$cmd->texto="SELECT ordenadores.ip AS ip, ordenadores.mac AS mac,
- ordenadores.netiface AS netiface, aulas.netmask AS netmask, aulas.router AS router,
- repositorios.ip AS iprepo FROM ordenadores
- join aulas on ordenadores.idaula=aulas.idaula
- join repositorios on ordenadores.idrepositorio=repositorios.idrepositorio
- where ordenadores.nombreordenador='". $hostname ."'";
+ ordenadores.netiface AS netiface, aulas.netmask AS netmask,
+ aulas.router AS router, repositorios.ip AS iprepo,
+ aulas.nombreaula AS grupo,
+ menus.resolucion AS vga
+ FROM ordenadores
+ JOIN aulas ON ordenadores.idaula=aulas.idaula
+ JOIN repositorios ON ordenadores.idrepositorio=repositorios.idrepositorio
+ LEFT JOIN menus ON ordenadores.idmenu=menus.idmenu
+ WHERE ordenadores.nombreordenador='". $hostname ."'";
+
+
$rs=new Recordset;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) echo "error";
@@ -65,6 +71,12 @@ $rs->Primero();
$router=$rs->campos["router"];
$netmask=$rs->campos["netmask"];
$repo=$rs->campos["iprepo"];
+ $group=cleanString($rs->campos["grupo"]);
+ if($rs->campos["vga"]== null)
+ $vga="788";
+ else
+ $vga=$rs->campos["vga"];
+
$rs->Cerrar();
$cmd->texto="SELECT ipserveradm from entornos";
@@ -89,30 +101,27 @@ switch ($idioma) {
}
-$infohost="LANG=" .$idioma . " ip="
-. $ip . ":"
-. $server .":"
-. $router . ":"
-. $netmask .":"
-. $hostname .":"
-. $netiface . ":none ogrepo="
-. $repo . " oglive="
-. $repo . " oglog="
-. $server . " ogshare="
-. $repo;
+$infohost="vga=$vga ".
+ "LANG=$idioma ".
+ "ip=$ip:$server:$router:$netmask:$hostname:$netiface:none" .
+ " group=$group" .
+ " ogrepo=$repo" .
+ " oglive=$repo" .
+ " oglog=$server" .
+ " ogshare=$server";
###################obtenemos las variables de red del aula.
#02.1 obtenemos nombre fichero mac
+ $pxedir="/opt/opengnsys/tftpboot/pxelinux.cfg";
$mac= substr($mac,0,2) . ":" . substr($mac,2,2) . ":" . substr($mac,4,2) . ":" . substr($mac,6,2) . ":" . substr($mac,8,2) . ":" . substr($mac,10,2);
- $macfile="01-" . str_replace(":","-",strtolower($mac));
- $nombre_archivo="/var/lib/tftpboot/pxelinux.cfg/" . $macfile;
+ $macfile="$pxedir/01-" . str_replace(":","-",strtolower($mac));
########## Escribimos el fichero mac
-if (!$gestion=fopen($nombre_archivo, 'w+'))
+if (!$gestion=fopen($macfile, 'w+'))
{
- echo "No se puede abrir el archivo ($nombre_archivo)";
+ echo "No se puede abrir el archivo ($macfile)";
return;
}
# cuales son los parametros del menu
@@ -154,20 +163,21 @@ while (!$rs->EOF)
$iseac=substr_count($rs->campos["append"] , "boot=oginit");
$isinitrd=substr_count($rs->campos["append"] , "initrd.gz");
+ // delete vga value (included in the variable infohost)
+ // borramos valor vga (incluido en la variable infohost)
+ $append=preg_replace('/vga=.../','',$rs->campos["append"]);
if ($iseac > 0)
{
- $append=$rs->campos["append"];
fwrite($gestion, $append . " " . $infohost . " \n ");
}
elseif ($isinitrd > 0)
{
- $append=$rs->campos["append"];
fwrite($gestion, $append . " ogrepo=" . $repo . " \n");
}
else
{
- fwrite($gestion, $rs->campos["append"] . " \n");
+ fwrite($gestion, $append . " \n");
}
$prompt=$rs->campos["prompt"];
@@ -177,19 +187,13 @@ while (!$rs->EOF)
}
$rs->Cerrar();
-
fwrite($gestion, " \n");
fwrite($gestion, "PROMPT " . $prompt ." \n");
fwrite($gestion, "TIMEOUT " . $timeout . " \n");
fwrite($gestion, " \n");
fclose($gestion);
- exec("chown www-data:www-data /var/lib/tftpboot/pxelinux.cfg/". $macfile);
- exec("chmod 777 /var/lib/tftpboot/pxelinux.cfg/". $macfile);
-
-
-
-
+ exec("chmod 777 $macfile");
}
function netmask2cidr($netmask) {
@@ -202,4 +206,12 @@ function netmask2cidr($netmask) {
return $cidr;
}
+// Sustituye espacio por "_" y quita acentos y tildes.
+function cleanString ($cadena) {
+ $patron = array ('/ /','/á/','/é/','/í/','/ó/','/ú/','/ñ/','/Á/','/É/','/Í/','/Ó/','/Ú/','/Ñ/');
+ $reemplazo = array ('_','a','e','i','o','u','n','A','E','I','O','U','N');
+ return preg_replace($patron,$reemplazo,$cadena);
+}
+
+
?>
diff --git a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php
index f248f986..a9c52f61 100644
--- a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php
+++ b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php
@@ -50,15 +50,20 @@ $cmd->CreaParametro("@optboot",$optboot,0);
$cmd->CreaParametro("@hostname",$hostname,0);
$cmd->texto="update ordenadores set arranque=@optboot where nombreordenador=@hostname";
$cmd->Ejecutar();
-
$cmd->texto="SELECT ordenadores.ip AS ip, ordenadores.mac AS mac,
ordenadores.netiface AS netiface, aulas.netmask AS netmask,
aulas.router AS router, repositorios.ip AS iprepo,
- aulas.nombreaula AS grupo
+ aulas.nombreaula AS grupo,
+ menus.resolucion AS vga,
+ perfileshard.winboot AS winboot
FROM ordenadores
JOIN aulas ON ordenadores.idaula=aulas.idaula
JOIN repositorios ON ordenadores.idrepositorio=repositorios.idrepositorio
- WHERE ordenadores.nombreordenador='". $hostname ."'";
+ LEFT JOIN menus ON ordenadores.idmenu=menus.idmenu
+ LEFT JOIN perfileshard ON ordenadores.idperfilhard=perfileshard.idperfilhard
+ WHERE ordenadores.nombreordenador='". $hostname ."'";
+
+
$rs=new Recordset;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) echo "error";
@@ -70,6 +75,12 @@ $rs->Primero();
$netmask=$rs->campos["netmask"];
$repo=$rs->campos["iprepo"];
$group=cleanString($rs->campos["grupo"]);
+ if($rs->campos["vga"]== null || $rs->campos["vga"]== 0)
+ $vga="788";
+ else
+ $vga=$rs->campos["vga"];
+ $winboot=$rs->campos["winboot"];
+
$rs->Cerrar();
$cmd->texto="SELECT ipserveradm FROM entornos";
@@ -95,33 +106,32 @@ switch ($idioma) {
}
-$infohost="'LANG=$idioma ip=$ip:$server:$router:$netmask:$hostname:$netiface:none" .
+$infohost=" vga=$vga".
+ " LANG=$idioma".
+ " ip=$ip:$server:$router:$netmask:$hostname:$netiface:none" .
" group=$group" .
" ogrepo=$repo" .
" oglive=$repo" .
" oglog=$server" .
- " ogshare=$server'";
-
+ " ogshare=$server";
+if (! empty ($winboot)) {
+ $infohost.=" winboot=$winboot";
+}
###################obtenemos las variables de red del aula.
- #02.1 obtenemos nombre fichero mac
- $mac= substr($mac,0,2) . ":" . substr($mac,2,2) . ":" . substr($mac,4,2) . ":" . substr($mac,6,2) . ":" . substr($mac,8,2) . ":" . substr($mac,10,2);
- $macfile="01-" . str_replace(":","-",strtoupper($mac));
- $nombre_archivo="/var/lib/tftpboot/menu.lst/" . $macfile;
+#02.1 obtenemos nombre fichero mac
+$pxedir="/opt/opengnsys/tftpboot/menu.lst";
+$mac= substr($mac,0,2) . ":" . substr($mac,2,2) . ":" . substr($mac,4,2) . ":" . substr($mac,6,2) . ":" . substr($mac,8,2) . ":" . substr($mac,10,2);
+$macfile="$pxedir/01-" . str_replace(":","-",strtoupper($mac));
#controlar optboot
- #exec("cp /var/lib/tftpboot/menu.lst/templates/". $optboot . " /var/lib/tftpboot/menu.lst/". $macfile);
- exec("sed s/INFOHOST/".$infohost."/g /var/lib/tftpboot/menu.lst/templates/" . $optboot . " > /var/lib/tftpboot/menu.lst/" . $macfile);
- exec("chown www-data:www-data /var/lib/tftpboot/menu.lst/". $macfile);
- exec("chmod 777 /var/lib/tftpboot/menu.lst/". $macfile);
-
-
-
-
+exec("sed -e 's/vga=...//g' -e 's/INFOHOST/$infohost/g' $pxedir/templates/$optboot > $macfile");
+exec("chmod 777 $macfile");
}
+
function netmask2cidr($netmask) {
$cidr = 0;
foreach (explode('.', $netmask) as $number) {
@@ -130,7 +140,7 @@ function netmask2cidr($netmask) {
}
}
return $cidr;
- }
+}
// Sustituye espacio por "_" y quita acentos y tildes.
function cleanString ($cadena) {
@@ -140,3 +150,4 @@ function cleanString ($cadena) {
}
?>
+
diff --git a/admin/WebConsole/idiomas/javascripts/cat/iconos_cat.js b/admin/WebConsole/idiomas/javascripts/cat/iconos_cat.js
new file mode 100644
index 00000000..f9d19ba5
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/cat/iconos_cat.js
@@ -0,0 +1,7 @@
+//____________________________________________________________________________
+//
+// Fichero de idiomas javascript: acciones_esp.js
+// Idioma: Español
+//____________________________________________________________________________
+TbMsg=new Array;
+TbMsg["DESCRIP"]="Descripcion es un dato obligatorio";
diff --git a/admin/WebConsole/idiomas/javascripts/eng/iconos_eng.js b/admin/WebConsole/idiomas/javascripts/eng/iconos_eng.js
new file mode 100644
index 00000000..25dd6bb7
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/eng/iconos_eng.js
@@ -0,0 +1,7 @@
+//____________________________________________________________________________
+//
+// Fichero de idiomas javascript: acciones_esp.js
+// Idioma: Español
+//____________________________________________________________________________
+TbMsg=new Array;
+TbMsg["DESCRIP"]="Description is a mandatory";
diff --git a/admin/WebConsole/idiomas/javascripts/esp/iconos_esp.js b/admin/WebConsole/idiomas/javascripts/esp/iconos_esp.js
new file mode 100644
index 00000000..f9d19ba5
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/esp/iconos_esp.js
@@ -0,0 +1,7 @@
+//____________________________________________________________________________
+//
+// Fichero de idiomas javascript: acciones_esp.js
+// Idioma: Español
+//____________________________________________________________________________
+TbMsg=new Array;
+TbMsg["DESCRIP"]="Descripcion es un dato obligatorio";
diff --git a/admin/WebConsole/idiomas/php/cat/avisos_cat.php b/admin/WebConsole/idiomas/php/cat/avisos_cat.php
new file mode 100644
index 00000000..6be18a06
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/avisos_cat.php
@@ -0,0 +1,12 @@
+<?php
+//______________________________________________
+//
+// Fichero de idiomas php: avisos_esp.php
+// Idioma: Español
+//______________________________________________
+
+if (empty ($TbMsg)) $TbMsg=array();
+$TbMsg["WARN_NETBOOT"]='AVISO: Despu&eacute;s de aceptar, ejecutar NetBoot Avanzado en el aula para aplicar los cambios.';
+$TbMsg["WARN_REBOOTAFTER"]='AVISO: Se realizar&aacute; autom&aacute;ticamente un reinicio despu&eacute;s de ejecutar la operaci&oacute;n.';
+?>
+
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php
new file mode 100644
index 00000000..0315e19c
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php
@@ -0,0 +1,51 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: ejecutarscripts_esp.php (Comandos)
+// Idioma: Español
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Centros';
+ $TbMsg[1]='Grupo de aulas';
+ $TbMsg[2]='Aulas';
+ $TbMsg[3]='Grupo de ordenadores';
+ $TbMsg[4]='Ordenadores';
+ $TbMsg[5]='Ejecutar script';
+ $TbMsg[6]='Ámbito';
+ $TbMsg[7]='Título';
+ $TbMsg[8]='Description';
+ $TbMsg[9]='Código del script';
+ $TbMsg[10]='Datos a suministrar';
+
+ $TbMsg["WDI11"]='Asistente de Despliegue de la imagen';
+ $TbMsg["WDI12"]='Generar InstruccionOG';
+ $TbMsg["WDI13"]='Elige si solo quieres almacenar la imagen en la Cache - UpdateCache ';
+ $TbMsg["WDI14"]='deployImage (update+restore)';
+ $TbMsg["WDI15"]='updateCache (solo descarga)';
+ $TbMsg["WDI16"]='opciones basicas';
+ $TbMsg["WDI17"]='opciones multicast';
+ $TbMsg["WDI18"]='opciones torrent';
+ $TbMsg["WDI19"]='opciones unicast';
+ $TbMsg["WDI20"]='Elige la particion del disco donde se restaurar la imagen:';
+ $TbMsg["WDI21"]='Elige la imagen a distribuir:';
+ $TbMsg["WDI22"]='--Selecciona imagen --';
+ $TbMsg["WDI23"]='Elige el metodo de transferencia';
+
+ $TbMsg["WDI24"]='puerto : ';
+ $TbMsg["WDI25"]='direccion Mcast : ';
+ $TbMsg["WDI26"]='modo : ';
+ $TbMsg["WDI27"]='velocidad : ';
+ $TbMsg["WDI28"]='nº Max. clientes : ';
+ $TbMsg["WDI29"]='Tiempo(seg) Max. Espera : ';
+
+ $TbMsg["WDI30"]='tiempo de semilla :';
+
+ $TbMsg["WCRP31"]='Asistente Clonacion Particiones Remotas';
+ $TbMsg["WCRP32"]='Elige equipo MASTER:';
+ $TbMsg["WCRP33"]='Elige desde el Master la imagen o particion a enviar';
+ $TbMsg["WCRP34"]='Elige la identificacion de la particion destino de los clientes:';
+ $TbMsg["WCRP35"]='Elige el metodo de transferencia';
+ $TbMsg["WCRP36"]='Elige herramienta de clonacion:';
+ $TbMsg["WCRP37"]='Elige compresor para la herramienta de clonacion:';
+?>
+
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_esp.php b/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_esp.php
deleted file mode 100644
index 1bf0730e..00000000
--- a/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_esp.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?
-//________________________________________________________________________________________________________
-//
-// Fichero de idiomas php: ejecutarscripts_esp.php (Comandos)
-// Idioma: Español
-//________________________________________________________________________________________________________
- $TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Ejecutar script';
- $TbMsg[6]='Ámbito';
- $TbMsg[7]='Título';
- $TbMsg[8]='Description';
- $TbMsg[9]='Código del script';
- $TbMsg[10]='Fichero de código';
-?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php b/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php
index df3ca129..9feb3e2f 100644
--- a/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php
@@ -1,9 +1,9 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//____________________________________________________
//
-// Fichero de idiomas php: configuraciones_esp.php
-// Idioma: Español
-//________________________________________________________________________________________________________
+// Fitxer d'idiomes php: configuraciones_cat.php
+// Idioma: Català
+//____________________________________________________
$TbMsg=array();
$TbMsg[0]='Configuraciones';
$TbMsg[1]='Ámbito';
@@ -52,9 +52,13 @@ $TbMsg[38]='Menor espacio libre (KB)';
$TbMsg[39]='Personalizar';
$TbMsg[40]='Sin modificar tama&ntilde;o';
$TbMsg[41]='Generar Instrucci&oacute;n OG';
+$TbMsg["CONFIG_PARTTABLE"='Tabla de particiones';
$TbMsg[42]='Variable';
$TbMsg[43]='Sin configuraci&oacute;n: cliente no conectado al servidor.';
-
+$TbMsg[44]='Equipo sin Perfil de Hardware';
+$TbMsg[45]='Agregue Perfil para obtener datos';
+$TbMsg[495]='Contenido Cach&eacute;';
+$TbMsg[4951]='Cach&eacute; libre';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/estados_cat.php b/admin/WebConsole/idiomas/php/cat/estados_cat.php
new file mode 100644
index 00000000..ba77568d
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/estados_cat.php
@@ -0,0 +1,16 @@
+<?php
+//____________________________________________
+//
+// Fitxer d'idiomes php: estados_cat.php
+// Idioma: Català
+//____________________________________________
+
+if (empty ($TbMsg)) $TbMsg=array();
+$TbMsg["STATUS_BSY"]="Ocupado";
+$TbMsg["STATUS_INI"]="Iniciando";
+$TbMsg["STATUS_OFF"]="Apagado";
+$TbMsg["STATUS_OPG"]="OpenGnSys";
+$TbMsg["STATUS_LNX"]="GNU/Linux";
+$TbMsg["STATUS_WXP"]="Windows";
+?>
+
diff --git a/admin/WebConsole/idiomas/php/cat/iconos_cat.php b/admin/WebConsole/idiomas/php/cat/iconos_cat.php
new file mode 100644
index 00000000..1836a4d6
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/iconos_cat.php
@@ -0,0 +1,59 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: m_iconos_esp.php (
+// Idioma: Español
+//________________________________________________________________________________________________________
+// Parte derecha de la página
+ $TbMsg=array();
+ $TbMsg["ERROR_SELECT"]='Fallo al abrir la tabla: Iconos';
+
+ $TbMsg["TITLE"]='Iconos';
+ $TbMsg["TABLE_TITLE"]='____ Datos de Iconos ____';
+ $TbMsg["TYPE_WEB"]='Iconos web';
+ $TbMsg["TYPE_ITEMS"]='Iconos items';
+ $TbMsg["TYPE_MENU"]='Fondo menu';
+ $TbMsg["SELECT_WEB"]='1=iconos web';
+ $TbMsg["SELECT_ITEMS"]='2=iconos items';
+ $TbMsg["SELECT_MENU"]='3=fondo menu';
+ $TbMsg["MSG_SIZE_FILE"]='El tamaño del archivo no corresponde con los límites permitidos, debe ser mayor que 0 y menor de 100 KB';
+ $TbMsg["SUCCESS_SEND"]='Se ha enviado al servidor web el fichero de Icono, correctamente';
+ $TbMsg["SUCCESS_UPDATE"]='Se ha sustituido del servidor web el fichero de Icono, correctamente';
+ $TbMsg["SUCCESS_DELETE"]='Se ha eliminado del servidor web el fichero de Icono, correctamente';
+ $TbMsg["TYPE"]='Tipo';
+ $TbMsg["DESCRIP"]='Descripci&oacute;n';
+ $TbMsg["NAME"]='Nombre';
+ $TbMsg["ICON"]='Icono';
+ $TbMsg["REPLACE"]='Sustituir Fichero';
+
+ // Los siguientes nombres de atributos son variables de la página
+ $TbMsg["INSERTAR"]='INSERTAR';
+ $TbMsg["CONSULTAR"]='CONSULTAR';
+ $TbMsg["MODIFICAR"]='MODIFICAR';
+ $TbMsg["ELIMINAR"]='ELIMINAR';
+
+// Parte izquierda de la página
+ $TbMsg["SEARCH_OPT"]='____ Opciones de b&uacute;squeda ____';
+ $TbMsg["SEARCH_RESULT"]='Registros encontrados : ';
+ $TbMsg["MENU_CONS"]='Consultar';
+ $TbMsg["MENU_REPLACE"]='Modificar';
+ $TbMsg["MENU_DEL"]='Eliminar';
+ // Los atributos son las descripciones de los iconos en la BD
+ $TbMsg["Cámara web"]='Cámara web';
+ $TbMsg["Controladores IDE"]='Controladores IDE ';
+ $TbMsg["Dispositivos de audio"]='Dispositivos de audio';
+ $TbMsg["Lectoras y grabadoras de DVD"]='Lectoras y grabadoras de DVD';
+ $TbMsg["Mi icono usb"]='Mi icono usb';
+ $TbMsg["Placas base"]=' Placas base';
+ $TbMsg["Tarjeta de Red"]='Tarjeta de Red';
+ $TbMsg["Tarjeta de sonido"]='Tarjeta de sonido';
+ $TbMsg["Tarjeta gráfica"]='Tarjeta gráfica';
+ $TbMsg["Logo General de Linux"]='Logo General de Linux';
+ $TbMsg["Logo Windows XP"]='Logo Windows XP';
+ $TbMsg["Ordenador apagado"]='Ordenador apagado';
+ $TbMsg["Ordenador encendido"]='Ordenador encendido';
+ $TbMsg["Particionar"]='Particionar';
+
+
+?>
+
diff --git a/admin/WebConsole/idiomas/php/cat/menus_cat.php b/admin/WebConsole/idiomas/php/cat/menus_cat.php
index 9c353e33..d1259e05 100644
--- a/admin/WebConsole/idiomas/php/cat/menus_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/menus_cat.php
@@ -15,4 +15,6 @@
$TbMsg[7]='"Propietats"';
$TbMsg[8]='"Eliminar men"';
$TbMsg[9]='"Mens"';
-?> \ No newline at end of file
+ $TbMsg[10]='"Gestionar Items"';
+
+?>
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php
index a996ec18..09cfa98f 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php
@@ -1,9 +1,9 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//______________________________________________________
//
// Fitxer d'idiomes php: propiedades_aulas_esp.php
// Idioma: Catala
-//________________________________________________________________________________________________________
+//______________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opcio";
$TbMsg[1]="Insertar";
@@ -26,7 +26,7 @@ $TbMsg[17]="Perfil Hardware";
$TbMsg[18]="Propietat pert tot els ordinadors";
$TbMsg[19]="Tamaño caché (KB)";
$TbMsg[20]="Autoexec";
-$TbMsg[21]="";
+$TbMsg[21]="Ordinadors";
$TbMsg[22]="Modo Multicast";
$TbMsg[23]="IP Multicast";
$TbMsg[24]="Port Multicast";
@@ -35,4 +35,4 @@ $TbMsg[26]="Modo P2P -semillero durante la descarga-";
$TbMsg[27]="Temp P2P -semillero despres de descarga-";
$TbMsg[28]="adresa gateway del aule";
$TbMsg[29]="Mascara de la xarxa del aule";
-?> \ No newline at end of file
+?>
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_ordenadores_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_ordenadores_cat.php
index 26218f8c..1eb20fb6 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_ordenadores_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_ordenadores_cat.php
@@ -1,23 +1,29 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//____________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_ordenadores_esp.php
-// Idioma: Catal
-//________________________________________________________________________________________________________
+// Fitxer d'idiomes php: propiedades_ordenadores_cat.php
+// Idioma: Catal
+//____________________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sense Opci";
+$TbMsg[0]="Sense Opci&oacute;";
$TbMsg[1]="Insertar";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gesti Ordinadors";
+$TbMsg[4]="Gesti&oacute; Ordinadors";
$TbMsg[5]="Nom";
-$TbMsg[6]="Direcci IP";
-$TbMsg[7]="Direcci MAC";
+$TbMsg[6]="Direcci&oacute; IP";
+$TbMsg[7]="Direcci&oacute; MAC";
$TbMsg[8]="Perfil Hardware";
$TbMsg[9]="Autoexec";
$TbMsg[10]="Repositori";
$TbMsg[11]="Menu";
-$TbMsg[12]="Tamany Cach";
+$TbMsg[12]="Tamany Cach&eacute;";
$TbMsg[13]="Interfice de Xarxa";
$TbMsg[14]="Driver de Xarxa";
+$TbMsg[509]="Foto ordenador";
+$TbMsg[5091]="Insertar foto";
+$TbMsg[5092]="Ver fotos";
+$TbMsg[495]="Contenido cach&eacute;";
+$TbMsg[4951]="Cach&eacute; libre";
?>
+
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php
index f4188157..735906ec 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php
@@ -1,15 +1,20 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//________________________________________________________________
//
// Fitxer d'idiomes php: propiedades_perfilhardwares_esp.php
-// Idioma: Catal
-//________________________________________________________________________________________________________
+// Idioma: Català
+//________________________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sense Opci";
+$TbMsg[0]="Sense Opci&oacute;";
$TbMsg[1]="Insertar";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gesti Perfils Hardware";
-$TbMsg[5]="Nom";
-$TbMsg[6]="Comentaris";
-?> \ No newline at end of file
+$TbMsg["HARD_TITLE"]="Gesti&oacute; Perfils Hardware";
+$TbMsg["HARD_NAME"]="Nom";
+$TbMsg["HARD_COMMENTS"]="Comentaris";
+$TbMsg["HARD_COMPUTERS"]="Ordinadors";
+$TbMsg["HARD_WINBOOT"]="Arrencada Windows";
+$TbMsg["HARD_REBOOT"]="Reinici (reboot)";
+$TbMsg["HARD_KEXEC"]="Directe (kexec)";
+?>
+
diff --git a/admin/WebConsole/idiomas/php/eng/avisos_eng.php b/admin/WebConsole/idiomas/php/eng/avisos_eng.php
new file mode 100644
index 00000000..3720510b
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/avisos_eng.php
@@ -0,0 +1,12 @@
+<?php
+//________________________________________
+//
+// Php language file: avisos_esp.php
+// Language: Español
+//________________________________________
+
+if (empty ($TbMsg)) $TbMsg=array();
+$TbMsg["WARN_NETBOOT"]='WARNING: After accepting, executing Advanced NetBoot in the Lab to apply the changes.';
+$TbMsg["WARN_REBOOTAFTER"]='WARNING: Client(s) will be automatically rebooted after executing the operation.';
+?>
+
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php
index 06aee25e..35eaa81a 100644
--- a/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php
@@ -1,8 +1,8 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: ejecutarscripts_eng.php (Comandos)
-// Idioma: Ings
+// Php language file: ejecutarscripts_eng.php (Comandos)
+// Language: English
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='Centers';
@@ -11,29 +11,28 @@
$TbMsg[3]='Group of computers';
$TbMsg[4]='Computers';
$TbMsg[5]='Perfom Script';
- $TbMsg[6]='Environment';
+ $TbMsg[6]='Scope';
$TbMsg[7]='Title';
$TbMsg[8]='Description';
$TbMsg[9]='Opengnsys code';
- $TbMsg[10]='Code file';
+ $TbMsg[10]='Data to submit';
-
- $TbMsg["WDI11"]='Wizard Deploy Image';
+ $TbMsg["WDI11"]='Deploy Image Wizard';
$TbMsg["WDI12"]='Generate OG Code';
- $TbMsg["WDI13"]='Choose whether you just want to store the image on the Cache - UpdateCache';
- $TbMsg["WDI14"]='deployImage (update+restore)';
- $TbMsg["WDI15"]='updateCache (only download)';
+ $TbMsg["WDI13"]='Choose whether you just want to store the image on the Cache - UpdateCache';
+ $TbMsg["WDI14"]='deployImage (update+restore)';
+ $TbMsg["WDI15"]='updateCache (only download)';
- $TbMsg["WDI16"]='basic options';
- $TbMsg["WDI17"]='opciones multicast options';
- $TbMsg["WDI18"]='torrent options';
- $TbMsg["WDI19"]='unicast options';
- $TbMsg["WDI20"]='Select the partition where the restore disk image:';
- $TbMsg["WDI20"]='Select the disk partition where to restore the image:';
- $TbMsg["WDI21"]='Select the image to distribute:';
- $TbMsg["WDI22"]='--Select image --';
- $TbMsg["WDI23"]='Select the transfer mode ';
+ $TbMsg["WDI16"]='basic options';
+ $TbMsg["WDI17"]='multicast options';
+ $TbMsg["WDI18"]='torrent options';
+ $TbMsg["WDI19"]='unicast options';
+ $TbMsg["WDI20"]='Select the partition where the restore disk image:';
+ $TbMsg["WDI20"]='Select the disk partition where to restore the image:';
+ $TbMsg["WDI21"]='Select the image to distribute:';
+ $TbMsg["WDI22"]='--Select image --';
+ $TbMsg["WDI23"]='Select the transfer mode ';
$TbMsg["WDI24"]='port : ';
$TbMsg["WDI25"]='Mcast address : ';
$TbMsg["WDI26"]='mode : ';
@@ -41,14 +40,14 @@
$TbMsg["WDI28"]='Max. client number';
$TbMsg["WDI29"]='Max. waiting time (sec)';
- $TbMsg["WDI30"]='Seed time';
-
+ $TbMsg["WDI30"]='Seed time';
- $TbMsg["WCRP31"]='Wizard to Clone Remote Partitions';
+ $TbMsg["WCRP31"]='Clone to Remote Partition Wizard';
$TbMsg["WCRP32"]='Select MASTER PC:';
$TbMsg["WCRP33"]='Select the image or partition to send from Master PC';
- $TbMsg["WCRP34"]='Select the destine partition in the clients';
- $TbMsg["WCRP35"]='Select the transfer mode';
- $TbMsg["WCRP36"]='Select cloning tool';
- $TbMsg["WCRP37"]='Select compressor for cloning tool:';
+ $TbMsg["WCRP34"]='Select the destine partition in the clients';
+ $TbMsg["WCRP35"]='Select the transfer mode';
+ $TbMsg["WCRP36"]='Select cloning tool';
+ $TbMsg["WCRP37"]='Select compressor for cloning tool:';
?>
+
diff --git a/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php b/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php
index 34120d7f..8b513ad9 100644
--- a/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php
@@ -1,9 +1,9 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//_________________________________________________
//
-// Fichero de idiomas php: configuraciones_eng.php
-// Idioma: Inglés
-//________________________________________________________________________________________________________
+// Php language file: configuraciones_eng.php
+// Language: English
+//_________________________________________________
$TbMsg=array();
$TbMsg[0]='Configurations';
$TbMsg[1]='Scope';
@@ -52,9 +52,13 @@ $TbMsg[38]='Less free disk space (KB)';
$TbMsg[39]='Customize';
$TbMsg[40]='Size unchanged';
$TbMsg[41]='Generate OG Instruction';
+$TbMsg["CONFIG_PARTTABLE"='Partition table';
$TbMsg[42]='Variable';
$TbMsg[43]='No configuration: client does not connect to server.';
-
+$TbMsg[44]='Hardware equipment without profile';
+$TbMsg[45]='Add Profile to obtain data';
+$TbMsg[495]='Content cache';
+$TbMsg[4951]='Cache free';
?>
diff --git a/admin/WebConsole/idiomas/php/eng/estados_eng.php b/admin/WebConsole/idiomas/php/eng/estados_eng.php
new file mode 100644
index 00000000..573d5c7a
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/estados_eng.php
@@ -0,0 +1,16 @@
+<?php
+//_________________________________________
+//
+// Php language file: estados_eng.php
+// Language: English
+//_________________________________________
+
+if (empty ($TbMsg)) $TbMsg=array();
+$TbMsg["STATUS_BSY"]="Busy";
+$TbMsg["STATUS_INI"]="Initializing";
+$TbMsg["STATUS_OFF"]="Off";
+$TbMsg["STATUS_OPG"]="OpenGnSys";
+$TbMsg["STATUS_LNX"]="GNU/Linux";
+$TbMsg["STATUS_WXP"]="Windows";
+?>
+
diff --git a/admin/WebConsole/idiomas/php/eng/iconos_eng.php b/admin/WebConsole/idiomas/php/eng/iconos_eng.php
new file mode 100644
index 00000000..d062cda4
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/iconos_eng.php
@@ -0,0 +1,61 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: m_iconos_eng.php (
+// Idioma: Ingles
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg["ERROR_SELECT"]='Failed to open table: Icons';
+ $TbMsg["TITLE"]='Icons';
+ $TbMsg["TABLE_TITLE"]='____ Data Icons ____';
+ $TbMsg["TYPE_WEB"]='Web icons';
+ $TbMsg["TYPE_ITEMS"]='Items icons';
+ $TbMsg["TYPE_MENU"]='menu background';
+ $TbMsg["SELECT_WEB"]='1=web icons';
+ $TbMsg["SELECT_ITEMS"]='2=items icons';
+ $TbMsg["SELECT_MENU"]='3=menu background';
+ $TbMsg["MSG_SIZE_FILE"]='The file size does not correspond to the allowed limits, must be greater than 0 and less than 100 KBi';
+ $TbMsg["SUCCESS_SEND"]='It has sent the file icon to the web server correctly';
+ $TbMsg["SUCCESS_UPDATE"]='Replaced the icon file correctly in web server';
+ $TbMsg["SUCCESS_DELETE"]='Removed the file icon to the web server correctly';
+ $TbMsg["TYPE"]='Type';
+ $TbMsg["DESCRIP"]='Description';
+ $TbMsg["NAME"]='Name';
+ $TbMsg["ICON"]='Icon';
+ $TbMsg["REPLACE"]='Replace File';
+
+ // Los siguientes nombres de atributos son variables de la página
+ // The following attribute names are variables of the page
+ $TbMsg["INSERTAR"]='INSERT';
+ $TbMsg["CONSULTAR"]='CONSULT';
+ $TbMsg["MODIFICAR"]='MODIFY';
+ $TbMsg["ELIMINAR"]='DELETE';
+
+// Parte izquierda de la página
+ $TbMsg["SEARCH_OPT"]='____ Search options ____';
+ $TbMsg["SEARCH_RESULT"]='Found register: ';
+ $TbMsg["MENU_CONS"]='Consult';
+ $TbMsg["MENU_REPLACE"]='Replace';
+ $TbMsg["MENU_DEL"]='Delete';
+ // Los atributos son las descripciones de los iconos en la BD
+ //Attributes are the icon descriptions in the database
+ $TbMsg["Cámara web"]='Webcam';
+ $TbMsg["Controladores IDE"]='IDE drivers';
+ $TbMsg["Dispositivos de audio"]='Audio devices';
+ $TbMsg["Lectoras y grabadoras de DVD"]='Readers and DVD recorders';
+ $TbMsg["Mi icono usb"]='Usb devices';
+ $TbMsg["Placas base"]='Motherboards';
+ $TbMsg["Tarjeta de Red"]='Red Card';
+ $TbMsg["Tarjeta de sonido"]='Sound Card';
+ $TbMsg["Tarjeta gráfica"]='Graphic card';
+ $TbMsg["Logo General de Linux"]='General Linux Logo';
+ $TbMsg["Logo Windows XP"]='Windows XP Logo';
+ $TbMsg["Ordenador apagado"]='Computer off';
+ $TbMsg["Ordenador encendido"]='Computer on';
+ $TbMsg["Particionar"]='partitioning';
+
+
+
+
+?>
+
diff --git a/admin/WebConsole/idiomas/php/eng/menus_eng.php b/admin/WebConsole/idiomas/php/eng/menus_eng.php
index 69639bca..9167ef0b 100644
--- a/admin/WebConsole/idiomas/php/eng/menus_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/menus_eng.php
@@ -15,4 +15,5 @@
$TbMsg[7]='"Propiedades"';
$TbMsg[8]='"Remove menu"';
$TbMsg[9]='"Menus"';
-?> \ No newline at end of file
+ $TbMsg[10]='"Manage Items"';
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php b/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php
index 337da11f..48b21c98 100644
--- a/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php
@@ -1,9 +1,9 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//________________________________________________________
//
// Fichero de idiomas php: propiedades_aulas_eng.php
// Idioma: Inglés
-//________________________________________________________________________________________________________
+//________________________________________________________
$TbMsg=array();
$TbMsg[0]="No Option";
$TbMsg[1]="Insert";
@@ -26,7 +26,7 @@ $TbMsg[17]="Hardware profile";
$TbMsg[18]="Properties for all computers in this class";
$TbMsg[19]="Cache size (KB)";
$TbMsg[20]="Autoexec";
-$TbMsg[21]="";
+$TbMsg[21]="Computers";
$TbMsg[22]="Multicast mode";
$TbMsg[23]="Multicast IP address";
$TbMsg[24]="Multicast port";
@@ -35,6 +35,8 @@ $TbMsg[26]="P2P mode -seeder while downloading";
$TbMsg[27]="P2P time -seeder time(s) after download-";
$TbMsg[28]="Gateway";
$TbMsg[29]="Netmask";
-
+$TbMsg[509]="Computer Photo";
+$TbMsg[5091]="Insert Photo";
+$TbMsg[5092]="View Images";
?>
diff --git a/admin/WebConsole/idiomas/php/eng/propiedades_ordenadores_eng.php b/admin/WebConsole/idiomas/php/eng/propiedades_ordenadores_eng.php
index 00c76d42..8b5541be 100644
--- a/admin/WebConsole/idiomas/php/eng/propiedades_ordenadores_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/propiedades_ordenadores_eng.php
@@ -1,9 +1,9 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//_________________________________________________________
//
-// Fichero de idiomas php: propiedades_ordenadores_eng.php
-// Idioma: Ings
-//________________________________________________________________________________________________________
+// Php language file: propiedades_ordenadores_eng.php
+// Language: English
+//_________________________________________________________
$TbMsg=array();
$TbMsg[0]="No Option";
$TbMsg[1]="Insert";
@@ -20,5 +20,10 @@ $TbMsg[11]="Menu";
$TbMsg[12]="Cache size";
$TbMsg[13]="Network interface";
$TbMsg[14]="Network driver";
-
+$TbMsg[509]="Computer Photo";
+$TbMsg[5091]="Insert Photo";
+$TbMsg[5092]="View Images";
+$TbMsg[495]="Content Cache";
+$TbMsg[4951]="Cache Free";
?>
+
diff --git a/admin/WebConsole/idiomas/php/eng/propiedades_perfilhardwares_eng.php b/admin/WebConsole/idiomas/php/eng/propiedades_perfilhardwares_eng.php
index 939ea49a..26175af2 100644
--- a/admin/WebConsole/idiomas/php/eng/propiedades_perfilhardwares_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/propiedades_perfilhardwares_eng.php
@@ -1,15 +1,20 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//_____________________________________________________________
//
-// Fichero de idiomas php: propiedades_perfilhardwares_eng.php
-// Idioma: Ings
-//________________________________________________________________________________________________________
+// Php language file: propiedades_perfilhardwares_eng.php
+// Language: English
+//_____________________________________________________________
$TbMsg=array();
$TbMsg[0]="No Option";
$TbMsg[1]="Insert";
$TbMsg[2]="Modify";
-$TbMsg[3]="Remove";
-$TbMsg[4]="Hardware Profiles Management";
-$TbMsg[5]="Name";
-$TbMsg[6]="Comments";
-?> \ No newline at end of file
+$TbMsg[3]="remove";
+$TbMsg["HARD_TITLE"]="Hardware Profile Management";
+$TbMsg["HARD_NAME"]="Name";
+$TbMsg["HARD_COMMENTS"]="Comments";
+$TbMsg["HARD_COMPUTERS"]="Computers";
+$TbMsg["HARD_WINBOOT"]="Windows boot";
+$TbMsg["HARD_REBOOT"]="Reboot (reboot)";
+$TbMsg["HARD_KEXEC"]="Direct (kexec)";
+?>
+
diff --git a/admin/WebConsole/idiomas/php/esp/aulas_esp.php b/admin/WebConsole/idiomas/php/esp/aulas_esp.php
index d5a8368f..ed4de97f 100644
--- a/admin/WebConsole/idiomas/php/esp/aulas_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/aulas_esp.php
@@ -54,7 +54,5 @@
$TbMsg[46]='Identificador ámbito';
$TbMsg[47]='"Log historico"';
$TbMsg[48]='"Log en tiempo real"';
-
-
?>
diff --git a/admin/WebConsole/idiomas/php/esp/avisos_esp.php b/admin/WebConsole/idiomas/php/esp/avisos_esp.php
new file mode 100644
index 00000000..6be18a06
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/avisos_esp.php
@@ -0,0 +1,12 @@
+<?php
+//______________________________________________
+//
+// Fichero de idiomas php: avisos_esp.php
+// Idioma: Español
+//______________________________________________
+
+if (empty ($TbMsg)) $TbMsg=array();
+$TbMsg["WARN_NETBOOT"]='AVISO: Despu&eacute;s de aceptar, ejecutar NetBoot Avanzado en el aula para aplicar los cambios.';
+$TbMsg["WARN_REBOOTAFTER"]='AVISO: Se realizar&aacute; autom&aacute;ticamente un reinicio despu&eacute;s de ejecutar la operaci&oacute;n.';
+?>
+
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php
index ad7b05b6..d816a72b 100644
--- a/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php
@@ -15,38 +15,37 @@
$TbMsg[7]='Título';
$TbMsg[8]='Description';
$TbMsg[9]='Código del script';
- $TbMsg[10]='Fichero de código';
+ $TbMsg[10]='Datos a suministrar';
- $TbMsg["WDI11"]='Asistente de Despliegue de la imagen';
- $TbMsg["WDI12"]='Generar InstruccionOG';
- $TbMsg["WDI13"]='Elige si solo quieres almacenar la imagen en la Cache - UpdateCache ';
- $TbMsg["WDI14"]='deployImage (update+restore)';
- $TbMsg["WDI15"]='updateCache (solo descarga)';
- $TbMsg["WDI16"]='opciones basicas';
- $TbMsg["WDI17"]='opciones multicast';
- $TbMsg["WDI18"]='opciones torrent';
- $TbMsg["WDI19"]='opciones unicast';
- $TbMsg["WDI20"]='Elige la particion del disco donde se restaurar la imagen:';
- $TbMsg["WDI21"]='Elige la imagen a distribuir:';
- $TbMsg["WDI22"]='--Selecciona imagen --';
- $TbMsg["WDI23"]='Elige el metodo de transferencia';
+ $TbMsg["WDI11"]='Asistente de Despliegue de la imagen';
+ $TbMsg["WDI12"]='Generar InstruccionOG';
+ $TbMsg["WDI13"]='Elige si solo quieres almacenar la imagen en la Cache - UpdateCache ';
+ $TbMsg["WDI14"]='deployImage (update+restore)';
+ $TbMsg["WDI15"]='updateCache (solo descarga)';
+ $TbMsg["WDI16"]='opciones basicas';
+ $TbMsg["WDI17"]='opciones multicast';
+ $TbMsg["WDI18"]='opciones torrent';
+ $TbMsg["WDI19"]='opciones unicast';
+ $TbMsg["WDI20"]='Elige la particion del disco donde se restaurar la imagen:';
+ $TbMsg["WDI21"]='Elige la imagen a distribuir:';
+ $TbMsg["WDI22"]='--Selecciona imagen --';
+ $TbMsg["WDI23"]='Elige el metodo de transferencia';
- $TbMsg["WDI24"]='puerto : ';
- $TbMsg["WDI25"]='direccion Mcast : ';
- $TbMsg["WDI26"]='modo : ';
- $TbMsg["WDI27"]='velocidad : ';
- $TbMsg["WDI28"]='nº Max. clientes : ';
- $TbMsg["WDI29"]='Tiempo(seg) Max. Espera : ';
+ $TbMsg["WDI24"]='puerto : ';
+ $TbMsg["WDI25"]='direccion Mcast : ';
+ $TbMsg["WDI26"]='modo : ';
+ $TbMsg["WDI27"]='velocidad : ';
+ $TbMsg["WDI28"]='nº Max. clientes : ';
+ $TbMsg["WDI29"]='Tiempo(seg) Max. Espera : ';
$TbMsg["WDI30"]='tiempo de semilla :';
- $TbMsg["WCRP31"]='Asistente Clonacion Particiones Remotas';
- $TbMsg["WCRP32"]='Elige equipo MASTER:';
- $TbMsg["WCRP33"]='Elige desde el Master la imagen o particion a enviar';
- $TbMsg["WCRP34"]='Elige la identificacion de la particion destino de los clientes:';
- $TbMsg["WCRP35"]='Elige el metodo de transferencia';
- $TbMsg["WCRP36"]='Elige herramienta de clonacion:';
- $TbMsg["WCRP37"]='Elige compresor para la herramienta de clonacion:';
-
-
+ $TbMsg["WCRP31"]='Asistente Clonacion Particiones Remotas';
+ $TbMsg["WCRP32"]='Elige equipo MASTER:';
+ $TbMsg["WCRP33"]='Elige desde el Master la imagen o particion a enviar';
+ $TbMsg["WCRP34"]='Elige la identificacion de la particion destino de los clientes:';
+ $TbMsg["WCRP35"]='Elige el metodo de transferencia';
+ $TbMsg["WCRP36"]='Elige herramienta de clonacion:';
+ $TbMsg["WCRP37"]='Elige compresor para la herramienta de clonacion:';
?>
+
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php
index 55cbaace..28c15adb 100644
--- a/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php
@@ -15,7 +15,7 @@ $TbMsg["COMMAND_InventarioHardware"]="Inventario Hardware";
$TbMsg["COMMAND_InventarioSoftware"]="Inventario Software";
$TbMsg["COMMAND_Reiniciar"]="Reiniciar";
$TbMsg["COMMAND_RestaurarImagen"]="Restaurar Imagen";
-$TbMsg["WIZARD_Asistente Particionado"]="Partition";
+$TbMsg["WIZARD_Asistente Particionado"]="Asistente de particionado";
$TbMsg["WIZARD_Asistente Clonacion Particiones Remotas"]="Clonar particiones remotas";
$TbMsg["WIZARD_Asistente Deploy de Imagenes"]="Deploy de imagenes";
?>
diff --git a/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php b/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php
index 8a151b73..e464e32b 100644
--- a/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php
@@ -1,9 +1,9 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//______________________________________________________
//
// Fichero de idiomas php: configuraciones_esp.php
-// Idioma: Español
-//________________________________________________________________________________________________________
+// Idioma: Español
+//______________________________________________________
$TbMsg=array();
$TbMsg[0]='Configuraciones';
$TbMsg[1]='&Aacute;mbito';
@@ -13,7 +13,7 @@ $TbMsg[4]="Ordenadores";
$TbMsg[5]="Nombre";
$TbMsg[6]="Ubicaci&oacute;n";
-$TbMsg[7]="Ca&ntilde;&oacute;n";
+$TbMsg[7]="Proyector";
$TbMsg[8]="Pizarra";
$TbMsg[9]="Puestos";
$TbMsg[10]="URL Imagen";
@@ -52,9 +52,13 @@ $TbMsg[38]='Menor espacio libre (KB)';
$TbMsg[39]='Personalizar';
$TbMsg[40]='Sin modificar tama&ntilde;o';
$TbMsg[41]='Generar Instrucci&oacute;n OG';
+$TbMsg["CONFIG_PARTTABLE"]='Tabla de particiones';
$TbMsg[42]='Variable';
$TbMsg[43]='Sin configuraci&oacute;n: cliente no conectado al servidor.';
-
+$TbMsg[44]='Equipo sin perfil de hardware';
+$TbMsg[45]='Agregue perfil para obtener datos';
+$TbMsg[495]='Contenido cach&eacute;';
+$TbMsg[4951]='Cach&eacute; libre';
?>
diff --git a/admin/WebConsole/idiomas/php/esp/estados_esp.php b/admin/WebConsole/idiomas/php/esp/estados_esp.php
new file mode 100644
index 00000000..135ea747
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/estados_esp.php
@@ -0,0 +1,16 @@
+<?php
+//______________________________________________
+//
+// Fichero de idiomas php: estados_esp.php
+// Idioma: Español
+//______________________________________________
+
+if (empty ($TbMsg)) $TbMsg=array();
+$TbMsg["STATUS_BSY"]="Ocupado";
+$TbMsg["STATUS_INI"]="Iniciando";
+$TbMsg["STATUS_OFF"]="Apagado";
+$TbMsg["STATUS_OPG"]="OpenGnSys";
+$TbMsg["STATUS_LNX"]="GNU/Linux";
+$TbMsg["STATUS_WXP"]="Windows";
+?>
+
diff --git a/admin/WebConsole/idiomas/php/esp/iconos_esp.php b/admin/WebConsole/idiomas/php/esp/iconos_esp.php
new file mode 100644
index 00000000..1836a4d6
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/iconos_esp.php
@@ -0,0 +1,59 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: m_iconos_esp.php (
+// Idioma: Español
+//________________________________________________________________________________________________________
+// Parte derecha de la página
+ $TbMsg=array();
+ $TbMsg["ERROR_SELECT"]='Fallo al abrir la tabla: Iconos';
+
+ $TbMsg["TITLE"]='Iconos';
+ $TbMsg["TABLE_TITLE"]='____ Datos de Iconos ____';
+ $TbMsg["TYPE_WEB"]='Iconos web';
+ $TbMsg["TYPE_ITEMS"]='Iconos items';
+ $TbMsg["TYPE_MENU"]='Fondo menu';
+ $TbMsg["SELECT_WEB"]='1=iconos web';
+ $TbMsg["SELECT_ITEMS"]='2=iconos items';
+ $TbMsg["SELECT_MENU"]='3=fondo menu';
+ $TbMsg["MSG_SIZE_FILE"]='El tamaño del archivo no corresponde con los límites permitidos, debe ser mayor que 0 y menor de 100 KB';
+ $TbMsg["SUCCESS_SEND"]='Se ha enviado al servidor web el fichero de Icono, correctamente';
+ $TbMsg["SUCCESS_UPDATE"]='Se ha sustituido del servidor web el fichero de Icono, correctamente';
+ $TbMsg["SUCCESS_DELETE"]='Se ha eliminado del servidor web el fichero de Icono, correctamente';
+ $TbMsg["TYPE"]='Tipo';
+ $TbMsg["DESCRIP"]='Descripci&oacute;n';
+ $TbMsg["NAME"]='Nombre';
+ $TbMsg["ICON"]='Icono';
+ $TbMsg["REPLACE"]='Sustituir Fichero';
+
+ // Los siguientes nombres de atributos son variables de la página
+ $TbMsg["INSERTAR"]='INSERTAR';
+ $TbMsg["CONSULTAR"]='CONSULTAR';
+ $TbMsg["MODIFICAR"]='MODIFICAR';
+ $TbMsg["ELIMINAR"]='ELIMINAR';
+
+// Parte izquierda de la página
+ $TbMsg["SEARCH_OPT"]='____ Opciones de b&uacute;squeda ____';
+ $TbMsg["SEARCH_RESULT"]='Registros encontrados : ';
+ $TbMsg["MENU_CONS"]='Consultar';
+ $TbMsg["MENU_REPLACE"]='Modificar';
+ $TbMsg["MENU_DEL"]='Eliminar';
+ // Los atributos son las descripciones de los iconos en la BD
+ $TbMsg["Cámara web"]='Cámara web';
+ $TbMsg["Controladores IDE"]='Controladores IDE ';
+ $TbMsg["Dispositivos de audio"]='Dispositivos de audio';
+ $TbMsg["Lectoras y grabadoras de DVD"]='Lectoras y grabadoras de DVD';
+ $TbMsg["Mi icono usb"]='Mi icono usb';
+ $TbMsg["Placas base"]=' Placas base';
+ $TbMsg["Tarjeta de Red"]='Tarjeta de Red';
+ $TbMsg["Tarjeta de sonido"]='Tarjeta de sonido';
+ $TbMsg["Tarjeta gráfica"]='Tarjeta gráfica';
+ $TbMsg["Logo General de Linux"]='Logo General de Linux';
+ $TbMsg["Logo Windows XP"]='Logo Windows XP';
+ $TbMsg["Ordenador apagado"]='Ordenador apagado';
+ $TbMsg["Ordenador encendido"]='Ordenador encendido';
+ $TbMsg["Particionar"]='Particionar';
+
+
+?>
+
diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php
index f9e9778f..8327b7bc 100644
--- a/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php
@@ -1,40 +1,43 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//________________________________________________________
//
// Fichero de idiomas php: propiedades_aulas_esp.php
// Idioma: Español
-//________________________________________________________________________________________________________
+//________________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sin Opción";
+$TbMsg[0]="Sin Opci&oacute;n";
$TbMsg[1]="Insertar";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gestión Aulas";
+$TbMsg[4]="Gesti&oacute;n Aulas";
$TbMsg[5]="Nombre";
-$TbMsg[6]="Ubicación";
-$TbMsg[7]="Cañón";
+$TbMsg[6]="Ubicaci&oacute;n";
+$TbMsg[7]="Proyector";
$TbMsg[8]="Pizarra";
$TbMsg[9]="Puestos";
$TbMsg[10]="URL Imagen";
-$TbMsg[11]="Menú";
+$TbMsg[11]="Men&uacute;";
$TbMsg[12]="Comentarios";
$TbMsg[13]="Reservas";
$TbMsg[14]="Hora desde:";
$TbMsg[15]="Hora hasta:";
$TbMsg[16]="Repositorio";
-$TbMsg[17]="Perfil Hardware";
+$TbMsg[17]="Perfil hardware";
$TbMsg[18]="Propiedades aplicables a todos los ordenadores";
-$TbMsg[19]="Tamaño caché (KB)";
+$TbMsg[19]="Tama&ntilde;o cach&eacute; (KB)";
$TbMsg[20]="Autoexec";
-$TbMsg[21]="";
+$TbMsg[21]="Ordenadores";
$TbMsg[22]="Modo Multicast";
$TbMsg[23]="IP Multicast";
$TbMsg[24]="Puerto Multicast";
$TbMsg[25]="Velocidad Multicast";
$TbMsg[26]="Modo P2P -semillero durante la descarga-";
-$TbMsg[27]="Tiempo P2P -semillero despues de descarga-";
-$TbMsg[28]="Direccion gateway del aula";
-$TbMsg[29]="Mascara de red del aula";
-
-
+$TbMsg[27]="Tiempo P2P -semillero despu&eacute;s de descarga-";
+$TbMsg[28]="Direcci&oacute;n gateway del aula";
+$TbMsg[29]="M&aacute;scara de red del aula";
+$TbMsg[495]="Contenido cach&eacute;";
+$TbMsg[509]="Foto ordenador";
+$TbMsg[5091]="Insertar foto";
+$TbMsg[5092]="Ver fotos";
?>
+
diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php
index baa235b0..5f7d68df 100644
--- a/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php
@@ -1,11 +1,11 @@
-<?
-//_____________________________________________________________________________
+<?php
+//______________________________________________________________
//
// Fichero de idiomas php: propiedades_ordenadores_esp.php
// Idioma: Español
-//______________________________________________________________________________
+//______________________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sin Opción";
+$TbMsg[0]="Sin Opci&oacute;n";
$TbMsg[1]="Insertar";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
@@ -13,11 +13,17 @@ $TbMsg[4]="Gestión Ordenadores";
$TbMsg[5]="Nombre";
$TbMsg[6]="Dirección IP";
$TbMsg[7]="Dirección MAC";
-$TbMsg[8]="Perfil Hardware";
+$TbMsg[8]="Perfil hardware";
$TbMsg[9]="Autoexec";
$TbMsg[10]="Repositorio";
-$TbMsg[11]="Menú";
-$TbMsg[12]="Tama&ntilde;o Caché (KB)";
+$TbMsg[11]="Men&uacute;";
+$TbMsg[12]="Tama&ntilde;o cach&eacute; (KB)";
$TbMsg[13]="Interfaz de red";
$TbMsg[14]="Driver de red";
+$TbMsg[509]="Foto ordenador";
+$TbMsg[5091]="Insertar foto";
+$TbMsg[5092]="Ver fotos";
+$TbMsg[495]="Contenido cach&eacute;";
+$TbMsg[4951]="Cach&eacute; libre";
?>
+
diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_perfilhardwares_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_perfilhardwares_esp.php
index d44cfcd1..933b2c7f 100644
--- a/admin/WebConsole/idiomas/php/esp/propiedades_perfilhardwares_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/propiedades_perfilhardwares_esp.php
@@ -1,15 +1,20 @@
-<?
-//________________________________________________________________________________________________________
+<?php
+//__________________________________________________________________
//
// Fichero de idiomas php: propiedades_perfilhardwares_esp.php
// Idioma: Español
-//________________________________________________________________________________________________________
+//__________________________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sin Opción";
+$TbMsg[0]="Sin Opci&oacute;n";
$TbMsg[1]="Insertar";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gestión Perfiles Hardware";
-$TbMsg[5]="Nombre";
-$TbMsg[6]="Comentarios";
-?> \ No newline at end of file
+$TbMsg["HARD_TITLE"]="Gesti&oacute;n Perfiles Hardware";
+$TbMsg["HARD_NAME"]="Nombre";
+$TbMsg["HARD_COMMENTS"]="Comentarios";
+$TbMsg["HARD_COMPUTERS"]="Ordenadores";
+$TbMsg["HARD_WINBOOT"]="Arranque Windows";
+$TbMsg["HARD_REBOOT"]="Reinicio (reboot)";
+$TbMsg["HARD_KEXEC"]="Directo (kexec)";
+?>
+
diff --git a/admin/WebConsole/images/L_Iconos.php b/admin/WebConsole/images/L_Iconos.php
index 6326faa5..9c03528a 100644
--- a/admin/WebConsole/images/L_Iconos.php
+++ b/admin/WebConsole/images/L_Iconos.php
@@ -13,6 +13,7 @@ include_once("../clases/XmlPhp.php");
include_once("../clases/MenuContextual.php");
include_once("../includes/CreaComando.php");
include_once("../includes/HTMLCTESELECT.php");
+include_once("../idiomas/php/".$idioma."/iconos_".$idioma.".php");
//-------------------------------------------------------------------------------------------------------------------------------------------------
// Captura de parmetros
//-------------------------------------------------------------------------------------------------------------------------------------------------
@@ -36,7 +37,7 @@ $cmd->texto.=" order by idtipoicono,descripcion ";
$rs=new Recordset;
$rs->Comando=&$cmd;
if (!$rs->Abrir())
- RedireccionaError("Fallo al abrir la tabla: Iconos");
+ RedireccionaError($TbMsg["ERROR_SELECT"]);
?>
<!--------------------------------------------------------------------------------------------------------------------------------------------------->
<HTML>
@@ -49,20 +50,21 @@ var NS=(navigator.appName=="Netscape");
</SCRIPT>
<SCRIPT language="javascript" src="../clases/jscripts/MenuContextual.js"></SCRIPT>
<SCRIPT language="javascript" src="L_Iconos.js"></SCRIPT>
+<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/iconos_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY OnContextMenu="return false">
- <P align="center"><SPAN class=textos>____ Opciones de bsqueda ____</SPAN></P>
+ <P align="center"><SPAN class=textos><? echo $TbMsg["SEARCH_OPT"]; ?> </SPAN></P>
<FORM name="fdatos" action="L_Iconos.php" method="post">
<INPUT type=hidden name=identificador value="0">
<TABLE align=center class=tabla_busquedas>
<!--------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH>&nbsp;Tipo&nbsp;</TD>
+ <TH>&nbsp;<? echo $TbMsg["TYPE"] ?>&nbsp;</TD>
<TD ><?
$parametros="0=".chr(13);
- $parametros.="1=iconos web".chr(13);
- $parametros.="2=iconos items".chr(13);
- $parametros.="3=Fondo menu";
+ $parametros.=$TbMsg["SELECT_WEB"] .chr(13);
+ $parametros.=$TbMsg["SELECT_ITEMS"] .chr(13);
+ $parametros.=$TbMsg["SELECT_MENU"] ;
echo '<TD>'.HTMLCTESELECT($parametros, "idtipoicono","estilodesple","",$idtipoicono,100).'</TD>';?>
</TD>
</TR>
@@ -73,12 +75,12 @@ var NS=(navigator.appName=="Netscape");
<P align=center><A href="#"><img border=0 src="../images/iconos/busquedas.gif" onclick="document.fdatos.submit()" alt="Buscar"></A></P>
</FORM>
<!--------------------------------------------------------------------------------------------------------------------------------------------------->
-<P align="center"><SPAN class=textos>Registros encontrados : <? echo $rs->numeroderegistros?></SPAN></P>
+<P align="center"><SPAN class=textos><? echo $TbMsg["SEARCH_RESULT"]. $rs->numeroderegistros?></SPAN></P>
<TABLE align="center" class="tabla_listados">
<TR>
<TH align="center">A</TH>
- <TH align="center">&nbsp;<? echo utf8_encode(Descripcin)?>&nbsp;</TH>
- <TH align="center">&nbsp;Nombre&nbsp;</TH>
+ <TH align="center">&nbsp;<? echo $TbMsg["DESCRIP"] ?>&nbsp;</TH>
+ <TH align="center">&nbsp;<? echo $TbMsg["NAME"] ?>&nbsp;</TH>
<TH align="center">&nbsp;</TH>
<TH align="center">&nbsp;T&nbsp;</TH>
@@ -90,7 +92,7 @@ var NS=(navigator.appName=="Netscape");
while (!$rs->EOF){?>
<TR>
<TD align=center><IMG id=<?=$rs->campos["idicono"]?> style="cursor:hand" onclick="menu_contextual(this)" src="../images/iconos/administrar_off.gif"></TD>
- <TD>&nbsp;<? echo basename($rs->campos["descripcion"])?>&nbsp;</TD>
+ <TD>&nbsp;<? echo ( $TbMsg[basename($rs->campos["descripcion"])] ) ? $TbMsg[basename($rs->campos["descripcion"])] : basename($rs->campos["descripcion"]); ?>&nbsp;</TD>
<TD>&nbsp;<? echo basename($rs->campos["urlicono"])?>&nbsp;</TD>
<TD align=center>&nbsp;<IMG src="./iconos/<? echo $rs->campos["urlicono"] ?>"
@@ -110,16 +112,21 @@ var NS=(navigator.appName=="Netscape");
//-------------------------------------------------------------------------------------------------------------------------------------------------
$flotante=new MenuContextual(); // Crea objeto MenuContextual
-$XMLcontextual=CreacontextualXMLMenu(); // Crea contextual de las acciones
+$XMLcontextual=CreacontextualXMLMenu($TbMsg); // Crea contextual de las acciones
echo $flotante->CreaMenuContextual($XMLcontextual);
+
+
?>
+
+
+
</BODY>
</HTML>
<?
//-------------------------------------------------------------------------------------------------------------------------------------------------
// Menus contextuales
//-------------------------------------------------------------------------------------------------------------------------------------------------
-function CreacontextualXMLMenu(){
+function CreacontextualXMLMenu( $TbMsg ){
$layerXML='<MENUCONTEXTUAL';
$layerXML.=' maxanchu=110';
@@ -133,12 +140,12 @@ function CreacontextualXMLMenu(){
$layerXML.='<ITEM';
$layerXML.=' alpulsar="consultar()"';
$layerXML.=' imgitem="../images/iconos/consultar.gif"';
- $layerXML.=' textoitem="Consultar"';
+ $layerXML.=' textoitem="'. $TbMsg["MENU_CONS"] .'"';
$layerXML.='></ITEM>';
$layerXML.='<ITEM';
$layerXML.=' alpulsar="modificar()"';
- $layerXML.=' textoitem="Modificar"';
+ $layerXML.=' textoitem="'.$TbMsg["MENU_REPLACE"].'"';
$layerXML.=' imgitem="../images/iconos/modificar.gif"';
$layerXML.='></ITEM>';
@@ -148,10 +155,12 @@ function CreacontextualXMLMenu(){
$layerXML.='<ITEM';
$layerXML.=' alpulsar="borrar()"';
$layerXML.=' imgitem="../images/iconos/eliminar.gif"';
- $layerXML.=' textoitem="Eliminar"';
+ $layerXML.=' textoitem="'. $TbMsg["MENU_DEL"]. '"';
$layerXML.='></ITEM>';
$layerXML.='</MENUCONTEXTUAL>';
return($layerXML);
}
+
+
?>
diff --git a/admin/WebConsole/images/M_Iconos.js b/admin/WebConsole/images/M_Iconos.js
index a58d4a99..1528f710 100644
--- a/admin/WebConsole/images/M_Iconos.js
+++ b/admin/WebConsole/images/M_Iconos.js
@@ -77,7 +77,7 @@ function Confirmar() {
function comprobar_datos(){
if (document.fdatos.descripcion.value==""){
- alert("Descripcion es un dato obligatorio")
+ alert(TbMsg["DESCRIP"]);
document.forms.fdatos.descripcion.focus()
return(false)
}
diff --git a/admin/WebConsole/images/M_Iconos.php b/admin/WebConsole/images/M_Iconos.php
index 824f6cda..c0e1ef76 100644
--- a/admin/WebConsole/images/M_Iconos.php
+++ b/admin/WebConsole/images/M_Iconos.php
@@ -14,6 +14,8 @@ include_once("../includes/TomaDato.php");
include_once("../includes/HTMLCTESELECT.php");
include_once("../clases/SockHidra.php");
include_once("../includes/FicherosPost.php");
+include_once("../idiomas/php/".$idioma."/iconos_".$idioma.".php");
+
//-------------------------------------------------------------------------------------------------------------------------------------------------
// Captura de parmetros
//-------------------------------------------------------------------------------------------------------------------------------------------------
@@ -77,12 +79,12 @@ if($accion==$INSERTAR_REGISTRO || $accion==$MODIFICAR_REGISTRO){
$UrlPagina=$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; // Url pgina
// Se recibe fichero adjunto
- $NombreFichero_urlicono = $HTTP_POST_FILES['urlicono']['name'];
+ $NombreFichero_urlicono = $_FILES['urlicono']['name'];
if(!empty($NombreFichero_urlicono)){
- $NombreFicheroPost_urlicono = $HTTP_POST_FILES['urlicono']['tmp_name'];
- $tamano_archivo = $HTTP_POST_FILES['urlicono']['size'];
+ $NombreFicheroPost_urlicono = $_FILES['urlicono']['tmp_name'];
+ $tamano_archivo = $_FILES['urlicono']['size'];
if($tamano_archivo>100000){
- $msg="El tamao del archivo no corresponde con los lmites permitidos, debe ser mayor que 0 y menor de 100 KB";
+ $msg=$TbMsg["MSG_SIZE_FILE"];
IncializaCampos();
$opcion=$INSERTAR;
$accion=$SIN_ACCION;
@@ -91,7 +93,7 @@ if($accion==$INSERTAR_REGISTRO || $accion==$MODIFICAR_REGISTRO){
if(!SalvaFichero_POST($UrlPagina,$NombreFicheroPost_urlicono,$NombreFichero_urlicono,&$UrlFichero_urlicono))
Header('Location: '.$pagerror.'?herror=2'); // Error de conexin con servidor B.D.
else{
- $msg="Se ha enviado al servidor web el fichero de Icono, correctamente";
+ $msg=$TbMsg["SUCCESS_SEND"];
$cmd->ParamSetValor("@urlicono",basename($UrlFichero_urlicono));
}
}
@@ -112,7 +114,7 @@ if($accion==$INSERTAR_REGISTRO || $accion==$MODIFICAR_REGISTRO){
if(!EliminaFichero($UrlPagina,$filebaja_urlicono))
Header('Location: '.$pagerror.'?herror=2'); // Error de conexin con servidor B.D.
else
- $msg="Se ha sustituido del servidor web el fichero de Icono, correctamente";
+ $msg=$TbMsg["SUCCESS_UPDATE"];
}
}
else{
@@ -141,7 +143,7 @@ if($accion==$INSERTAR_REGISTRO || $accion==$MODIFICAR_REGISTRO){
if(!EliminaFichero($UrlPagina,$filebaja_urlicono))
Header('Location: '.$pagerror.'?herror=2'); // Error de conexin con servidor B.D.
else
- $msg="Se ha eliminado del servidor web el fichero de Icono, correctamente";
+ $msg=$TbMsg["SUCCESS_DELETE"];
}
IncializaCampos();
$opcion=$INSERTAR;
@@ -176,6 +178,7 @@ if($accion==$INSERTAR_REGISTRO || $accion==$MODIFICAR_REGISTRO){
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<LINK rel="stylesheet" type="text/css" href="../estilos.css">
<SCRIPT language="javascript" src="M_Iconos.js"></SCRIPT>
+<? echo ' <SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/iconos_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY>
<!--------------------------------------------------------------------------------------------------------------------------------------------------->
@@ -187,31 +190,34 @@ if($accion==$INSERTAR_REGISTRO || $accion==$MODIFICAR_REGISTRO){
<input name="fileexist_urlicono" type="hidden" value="<? echo $urlicono?>">
<!--------------------------------------------------------------------------------------------------------------------------------------------------->
<DIV align=center id="Layer_Datos">
- <P class=cabeceras>Iconos<BR>
- <SPAN class="subcabeceras"><?=$mopciones[$opcion]?></SPAN></P>
- <P align="center"><SPAN class=textos>____ Datos de Iconos ____</SPAN></P>
+ <P class=cabeceras><? echo $TbMsg["TITLE"] ; ?><BR>
+ <SPAN class="subcabeceras"><? echo $TbMsg["$mopciones[$opcion]"] ?></SPAN></P>
+ <P align="center"><SPAN class=textos><? echo $TbMsg["TABLE_TITLE"] ?></SPAN></P>
<TABLE class="tabla_datos" align="center">
+
<!--------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH>&nbsp;Tipo&nbsp;</TH>
- <?if ($opcion==$CONSULTAR || $opcion==$ELIMINAR){?>
- <TD><?
- $TBtipo[1]="Iconos web";
- $TBtipo[2]="Iconos items";
- $TBtipo[3]="Fondo menu";
- echo $TBtipo[$idtipoicono];
- }else{
- $parametros="0=".chr(13);
- $parametros.="1=iconos web".chr(13);
- $parametros.="2=iconos items".chr(13);
- $parametros.="3=Fondo menu";
- echo '<TD>'.HTMLCTESELECT($parametros, "idtipoicono","estilodesple","",$idtipoicono,100).'</TD>';
- }?>
- </TR>
+
+ <TR>
+ <TH>&nbsp;<? echo $TbMsg["TYPE"] ?> &nbsp;</TH>
+ <?if ($opcion==$CONSULTAR || $opcion==$ELIMINAR){?>
+ <TD><?
+ $TBtipo[1]=$TbMsg["TYPE_WEB"];
+ $TBtipo[2]=$TbMsg["TYPE_ITEMS"];
+ $TBtipo[3]=$TbMsg["TYPE_MENU"];
+ echo $TBtipo[$idtipoicono];
+ }else{
+ $parametros='0='.chr(13);
+ $parametros.=$TbMsg["SELECT_WEB"].chr(13);
+ $parametros.=$TbMsg["SELECT_ITEMS"].chr(13);
+ $parametros.=$TbMsg["SELECT_MENU"];
+ echo '<TD>'.HTMLCTESELECT($parametros, "idtipoicono","estilodesple","",$idtipoicono,100).'</TD>';
+ }?>
+ </TR>
+
<!-------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH>&nbsp;Descripcion&nbsp;</TH>
+ <TH>&nbsp;<? echo $TbMsg["DESCRIP"] ?> &nbsp;</TH>
<?if ($opcion==$CONSULTAR || $opcion==$ELIMINAR){?>
<TD><?echo $descripcion?></TD>
<?}else{?>
@@ -227,16 +233,16 @@ if($accion==$INSERTAR_REGISTRO || $accion==$MODIFICAR_REGISTRO){
<?}else{
if ($opcion==$INSERTAR || ($opcion==$MODIFICAR && empty($urlicono))){?>
<TR>
- <TH>&nbsp;Icono&nbsp;</TH>
+ <TH>&nbsp; <? echo $TbMsg["ICON"] ?> &nbsp;</TH>
<TD><INPUT type=file class=cajatexto name="urlicono" style="width:500" value="<? echo $urlicono?>">
</TR>
<?}else{?>
<TR>
- <TH>&nbsp;Icono&nbsp;</TH>
+ <TH>&nbsp; <? echo $TbMsg["ICON"] ?> &nbsp;</TH>
<TD><?echo basename($urlicono)?></TD>
</TR>
<TR>
- <TH>&nbsp;Sustituir Fichero&nbsp;</TH>
+ <TH>&nbsp; <? echo $TbMsg["REPLACE"] ?> &nbsp;</TH>
<TD><INPUT type=file class=cajatexto name="urlicono" style="width:500" value="<? echo $urlicono?>">
</TR>
<?}?>
@@ -252,20 +258,22 @@ if($accion==$INSERTAR_REGISTRO || $accion==$MODIFICAR_REGISTRO){
<TR>
<?switch($opcion){
case $CONSULTAR:
- echo '<TD><img style="cursor:hand" SRC="../images/boton_insertar.gif" onclick="Cancelar()"></TD>';
- break;
- case $ELIMINAR:
- echo '<TD><img SRC="../images/boton_confirmar.gif" style="cursor:hand" onclick="Confirmar()"></TD>';
- echo '<TD><img SRC="../images/boton_cancelar.gif" style="cursor:hand" onclick="Cancelar()"></TD>';
- break;
+ echo '<TD><img style="cursor:hand" SRC="../images/boton_insertar_'.$idioma.'.gif" onclick="Cancelar()"></TD>';
+ break;
+ case $ELIMINAR:
+ echo '<TD><img SRC="../images/boton_confirmar_'.$idioma.'.gif" style="cursor:hand" onclick="Confirmar()"></TD>';
+ echo '<TD><img SRC="../images/boton_cancelar_'.$idioma.'.gif" style="cursor:hand" onclick="Cancelar()"></TD>';
+ break;
default:
- echo '<TD><img style="cursor:hand" SRC="../images/boton_confirmar.gif" onclick="Confirmar()"></TD>';
- echo '<TD><img style="cursor:hand" SRC="../images/boton_cancelar.gif" onclick="Cancelar()"></TD>';
- break;
- }?>
+ echo '<TD><img style="cursor:hand" SRC="../images/boton_confirmar_'.$idioma.'.gif" onclick="Confirmar()"></TD>';
+ echo '<TD><img style="cursor:hand" SRC="../images/boton_cancelar_'.$idioma.'.gif" onclick="Cancelar()"></TD>';
+ break;
+ }?>
</TR>
</TABLE>
- </DIV>
+ </DIV>
+
+
<?
//________________________________________________________________________________________________________
// Posiciona cursor en campo usuario y muestra mensaje de error si lo hubiera
diff --git a/admin/WebConsole/images/boton_aceptar_cat.gif b/admin/WebConsole/images/boton_aceptar_cat.gif
new file mode 100644
index 00000000..f44edbab
--- /dev/null
+++ b/admin/WebConsole/images/boton_aceptar_cat.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_aceptar_eng.gif b/admin/WebConsole/images/boton_aceptar_eng.gif
new file mode 100644
index 00000000..d85916b5
--- /dev/null
+++ b/admin/WebConsole/images/boton_aceptar_eng.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_aceptar_esp.gif b/admin/WebConsole/images/boton_aceptar_esp.gif
new file mode 100644
index 00000000..f44edbab
--- /dev/null
+++ b/admin/WebConsole/images/boton_aceptar_esp.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_cancelar_cat.gif b/admin/WebConsole/images/boton_cancelar_cat.gif
new file mode 100644
index 00000000..95e3bd7f
--- /dev/null
+++ b/admin/WebConsole/images/boton_cancelar_cat.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_cancelar_eng.gif b/admin/WebConsole/images/boton_cancelar_eng.gif
new file mode 100644
index 00000000..b57c1c88
--- /dev/null
+++ b/admin/WebConsole/images/boton_cancelar_eng.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_cancelar_esp.gif b/admin/WebConsole/images/boton_cancelar_esp.gif
new file mode 100644
index 00000000..95e3bd7f
--- /dev/null
+++ b/admin/WebConsole/images/boton_cancelar_esp.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_cerrar.gif b/admin/WebConsole/images/boton_cerrar.gif
index a989c567..f7da1b8a 100644
--- a/admin/WebConsole/images/boton_cerrar.gif
+++ b/admin/WebConsole/images/boton_cerrar.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_cerrar_cat.gif b/admin/WebConsole/images/boton_cerrar_cat.gif
new file mode 100644
index 00000000..f7da1b8a
--- /dev/null
+++ b/admin/WebConsole/images/boton_cerrar_cat.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_cerrar_eng.gif b/admin/WebConsole/images/boton_cerrar_eng.gif
new file mode 100644
index 00000000..a989c567
--- /dev/null
+++ b/admin/WebConsole/images/boton_cerrar_eng.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_cerrar_esp.gif b/admin/WebConsole/images/boton_cerrar_esp.gif
new file mode 100644
index 00000000..f7da1b8a
--- /dev/null
+++ b/admin/WebConsole/images/boton_cerrar_esp.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_confirmar_cat.gif b/admin/WebConsole/images/boton_confirmar_cat.gif
new file mode 100644
index 00000000..bee63151
--- /dev/null
+++ b/admin/WebConsole/images/boton_confirmar_cat.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_confirmar_eng.gif b/admin/WebConsole/images/boton_confirmar_eng.gif
new file mode 100644
index 00000000..b0e33488
--- /dev/null
+++ b/admin/WebConsole/images/boton_confirmar_eng.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_confirmar_esp.gif b/admin/WebConsole/images/boton_confirmar_esp.gif
new file mode 100644
index 00000000..bee63151
--- /dev/null
+++ b/admin/WebConsole/images/boton_confirmar_esp.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_insertar_cat.gif b/admin/WebConsole/images/boton_insertar_cat.gif
new file mode 100644
index 00000000..ccff6b08
--- /dev/null
+++ b/admin/WebConsole/images/boton_insertar_cat.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_insertar_eng.gif b/admin/WebConsole/images/boton_insertar_eng.gif
new file mode 100644
index 00000000..4da7dcca
--- /dev/null
+++ b/admin/WebConsole/images/boton_insertar_eng.gif
Binary files differ
diff --git a/admin/WebConsole/images/boton_insertar_esp.gif b/admin/WebConsole/images/boton_insertar_esp.gif
new file mode 100644
index 00000000..ccff6b08
--- /dev/null
+++ b/admin/WebConsole/images/boton_insertar_esp.gif
Binary files differ
diff --git a/admin/WebConsole/images/fotos/aula.jpg b/admin/WebConsole/images/fotos/aula.jpg
new file mode 100644
index 00000000..77123cbe
--- /dev/null
+++ b/admin/WebConsole/images/fotos/aula.jpg
Binary files differ
diff --git a/admin/WebConsole/images/fotos/fotoordenador.gif b/admin/WebConsole/images/fotos/fotoordenador.gif
new file mode 100644
index 00000000..b6b09ad4
--- /dev/null
+++ b/admin/WebConsole/images/fotos/fotoordenador.gif
Binary files differ
diff --git a/admin/WebConsole/images/ordenador_RMB.gif b/admin/WebConsole/images/ordenador_OPG.gif
index 5d9306fc..5d9306fc 100644
--- a/admin/WebConsole/images/ordenador_RMB.gif
+++ b/admin/WebConsole/images/ordenador_OPG.gif
Binary files differ
diff --git a/admin/WebConsole/images/ver.php b/admin/WebConsole/images/ver.php
new file mode 100644
index 00000000..9d3ecd44
--- /dev/null
+++ b/admin/WebConsole/images/ver.php
@@ -0,0 +1,49 @@
+<?
+$eliminar=$_GET["eliminar"] ;
+$archivo=$_GET["archivo"] ;
+if ($eliminar=="si")
+{
+$archivo="./fotos/".$archivo;
+unlink($archivo);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+//////// MOSTRAR EL DIRECTORIO DE IMAGENES /////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+echo '<TABLE width="100%" border="0"><TR>';
+ $directory="./fotos";
+ $contador=1;
+ $dirint = dir($directory);
+ while (($archivo = $dirint->read()) !== false)
+ {
+ if ($contador < 3)
+ {
+ //Si contador es menor de 4 muestra 3 imagenes
+ //Si contador es 4 salta
+ //if (eregi("..", $archivo)){$contador--;}
+ $palabra=preg_quote('log');
+ if (eregi("gif", $archivo) || eregi("jpg", $archivo) || eregi("png", $archivo)){
+ if (eregi("login", $archivo))
+ {}else{
+ echo '<TD align="center"><img src="'.$directory."/".$archivo.'"><br>'.$archivo.'</br><a href="ver.php?eliminar=si&archivo='.$archivo.'">Eliminar Imagen</a></TD>';
+ }$contador++;
+ }
+ }else{
+ //Si contador es 4 salta aqui
+ //if (eregi(".", $archivo) || eregi("..", $archivo)){$contador--;}
+ $palabra=preg_quote('log');
+ if (eregi("gif", $archivo) || eregi("jpg", $archivo) || eregi("png", $archivo)){
+ if (eregi("login", $archivo))
+ {}else{
+ echo '<TD align="center"><img src="'.$directory."/".$archivo.'"><br>'.$archivo.'</br><a href="ver.php?eliminar=si&archivo='.$archivo.'">Eliminar Imagen</a></TD>';
+ }$contador++;
+ }
+ $contador=1; echo '</TR><TR>';
+ }
+ }
+ $dirint->close();
+
+echo '</TR></TABLE>';
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+?> \ No newline at end of file
diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php
index 39567c78..e2a8ddad 100644
--- a/admin/WebConsole/includes/ConfiguracionesParticiones.php
+++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php
@@ -41,6 +41,7 @@
00000100- No agrupar por Tamaño de partición
00001000- No agrupar por Imagen instalada
00010000- No agrupar por Perfil software contenido
+ 00100000- No agrupar por Contenido Cache
$swr: Indica si se se tiene en cuenta las particiones no clonables (si:true o no:false)
________________________________________________________________________________________________________*/
function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
@@ -56,28 +57,30 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
global $msk_tamano;
global $msk_imagen;
global $msk_perfil;
+ global $msk_cache;
- $cmd->texto="SELECT
- concat_WS( ';',
- ordenadores_particiones.numpar, ";
-
+ $cmd->texto="SELECT CONCAT_WS( ';', ordenadores_particiones.numpar, ";
+
if($sws & $msk_tamano)
$cmd->texto.=" ordenadores_particiones.tamano,";
-
if($sws & $msk_sysFi)
$cmd->texto.=" ordenadores_particiones.idsistemafichero, ";
if($sws & $msk_nombreSO)
- $cmd->texto.=" ordenadores_particiones.idnombreso, ";
-
- if($sws & $msk_imagen)
- $cmd->texto.=" ordenadores_particiones.idimagen, ";
-
- if($sws & $msk_perfil)
- $cmd->texto.=" ordenadores_particiones.idperfilsoft, ";
+ $cmd->texto.=" ordenadores_particiones.idnombreso, ";
+
+ if($sws & $msk_imagen)
+ $cmd->texto.=" ordenadores_particiones.idimagen, ";
+
+ if($sws & $msk_perfil)
+ $cmd->texto.=" ordenadores_particiones.idperfilsoft, ";
- $cmd->texto.=" ordenadores_particiones.codpar) as configuracion,
+ if($sws & $msk_cache)
+ $cmd->texto.=" ordenadores_particiones.cache, ";
+
+ $cmd->texto.=" ordenadores_particiones.codpar) as configuracion,
+ ordenadores_particiones.numdisk,
ordenadores_particiones.numpar ,
ordenadores_particiones.codpar ,
tipospar.tipopar,
@@ -102,21 +105,21 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero";
switch($ambito){
- case $AMBITO_AULAS :
- $cmd->texto.=" INNER JOIN aulas ON aulas.idaula = ordenadores.idaula
- WHERE aulas.idaula =".$idambito;
- break;
- case $AMBITO_GRUPOSORDENADORES :
- $cmd->texto.=" INNER JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
- WHERE gruposordenadores.idgrupo =".$idambito;
- break;
- case $AMBITO_ORDENADORES :
- $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
- break;
+ case $AMBITO_AULAS :
+ $cmd->texto.=" INNER JOIN aulas ON aulas.idaula = ordenadores.idaula
+ WHERE aulas.idaula =".$idambito;
+ break;
+ case $AMBITO_GRUPOSORDENADORES :
+ $cmd->texto.=" INNER JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
+ WHERE gruposordenadores.idgrupo =".$idambito;
+ break;
+ case $AMBITO_ORDENADORES :
+ $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
+ break;
}
if($swr) // Si se trata de restauración no se tiene en cuenta las partciones no clonables
$cmd->texto.=" AND tipospar.clonable=1 ";
-
+
$cmd->texto.=" GROUP by configuracion";
//echo "carga claves:".$cmd->texto;
$rs=new Recordset;
@@ -126,22 +129,24 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
$idx=0;
//echo $cmd->texto;
while (!$rs->EOF){
- $tbKeys[$idx]["cfg"]=$rs->campos["configuracion"];
- $tbKeys[$idx]["numpar"]=$rs->campos["numpar"];
- $tbKeys[$idx]["codpar"]=$rs->campos["codpar"];
- $tbKeys[$idx]["tipopar"]=$rs->campos["tipopar"];
- $tbKeys[$idx]["clonable"]=$rs->campos["clonable"];
- $tbKeys[$idx]["tamano"]=$rs->campos["tamano"];
- $tbKeys[$idx]["sistemafichero"]=$rs->campos["sistemafichero"];
- $tbKeys[$idx]["idnombreso"]=$rs->campos["idnombreso"];
- $tbKeys[$idx]["nombreso"]=$rs->campos["nombreso"];
- $tbKeys[$idx]["idimagen"]=$rs->campos["idimagen"];
- $tbKeys[$idx]["imagen"]=$rs->campos["imagen"];
- $tbKeys[$idx]["nombreca"]=$rs->campos["nombreca"];
- $tbKeys[$idx]["repositorio"]=$rs->campos["repositorio"];
- $tbKeys[$idx]["idperfilsoft"]=$rs->campos["idperfilsoft"];
- $tbKeys[$idx]["perfilsoft"]=$rs->campos["perfilsoft"];
- $idx++;
+ $tbKeys[$idx]["cfg"]=$rs->campos["configuracion"];
+ $tbKeys[$idx]["numdisk"]=$rs->campos["numdisk"];
+ $tbKeys[$idx]["numpar"]=$rs->campos["numpar"];
+ $tbKeys[$idx]["codpar"]=$rs->campos["codpar"];
+ $tbKeys[$idx]["tipopar"]=$rs->campos["tipopar"];
+ $tbKeys[$idx]["clonable"]=$rs->campos["clonable"];
+ $tbKeys[$idx]["tamano"]=$rs->campos["tamano"];
+ $tbKeys[$idx]["sistemafichero"]=$rs->campos["sistemafichero"];
+ $tbKeys[$idx]["idnombreso"]=$rs->campos["idnombreso"];
+ $tbKeys[$idx]["nombreso"]=$rs->campos["nombreso"];
+ $tbKeys[$idx]["idimagen"]=$rs->campos["idimagen"];
+ $tbKeys[$idx]["imagen"]=$rs->campos["imagen"];
+ $tbKeys[$idx]["nombreca"]=$rs->campos["nombreca"];
+ $tbKeys[$idx]["repositorio"]=$rs->campos["repositorio"];
+ $tbKeys[$idx]["idperfilsoft"]=$rs->campos["idperfilsoft"];
+ $tbKeys[$idx]["perfilsoft"]=$rs->campos["perfilsoft"];
+ $tbKeys[$idx]["cache"]=$rs->campos["cache"];
+ $idx++;
$rs->Siguiente();
}
$conKeys=$idx; // Guarda contador
@@ -167,19 +172,21 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr)
global $AMBITO_AULAS;
global $AMBITO_GRUPOSORDENADORES;
global $AMBITO_ORDENADORES;
-
+ global $TbMsg;
global $msk_sysFi;
global $msk_nombreSO;
global $msk_tamano;
global $msk_imagen;
global $msk_perfil;
-
+ global $msk_cache;
+
cargaCaves($cmd,$idambito,$ambito,$sws,$swr);
cargaSistemasFicheros($cmd,$idambito,$ambito);
cargaPerfiles($cmd,$idambito,$ambito);
cargaImagenes($cmd,$idambito,$ambito);
cargaNombresSO($cmd,$idambito,$ambito);
cargaTamano($cmd,$idambito,$ambito);
+ cargaCache($cmd,$idambito,$ambito);
$cmd->texto="SELECT COUNT(*) AS con,
GROUP_CONCAT(CAST( temp2.idordenador AS CHAR(11) ) ORDER BY temp2.idordenador SEPARATOR ',' ) AS idordenadores,
@@ -206,6 +213,9 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr)
if($sws & $msk_perfil)
$cmd->texto.=" ordenadores_particiones.idperfilsoft, ";
+
+ if($sws & $msk_cache)
+ $cmd->texto.=" ordenadores_particiones.cache, ";
$cmd->texto.=" ordenadores_particiones.codpar) AS configuracion
FROM ordenadores
@@ -666,6 +676,73 @@ function tomaTamano($numpar,$ordenadores)
}
}
}
+/*________________________________________________________________________________________________________
+
+ Selecciona los ordenadores que tienen el mismo Contenido de Cache para la misma partición
+________________________________________________________________________________________________________*/
+function cargaCache($cmd,$idambito,$ambito)
+{
+ global $tbCac; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $conCac; // Contador de elementos anteriores
+ global $AMBITO_AULAS;
+ global $AMBITO_GRUPOSORDENADORES;
+ global $AMBITO_ORDENADORES;
+
+ $cmd->texto="SELECT COUNT(*) AS con,
+ ordenadores_particiones.cache,
+ ordenadores_particiones.numpar,
+ GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
+ ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
+ FROM ordenadores
+ JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador";
+
+ switch($ambito){
+ case $AMBITO_AULAS :
+ $cmd->texto.=" JOIN aulas ON aulas.idaula = ordenadores.idaula
+ WHERE aulas.idaula =".$idambito;
+ break;
+ case $AMBITO_GRUPOSORDENADORES :
+ $cmd->texto.=" JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
+ WHERE gruposordenadores.idgrupo =".$idambito;
+ break;
+ case $AMBITO_ORDENADORES :
+ $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
+ break;
+ }
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.cache";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return; // Error al abrir recordset
+ $rs->Primero();
+ $idx=0;
+ while (!$rs->EOF){
+ $tbCac[$idx]["cache"]=$rs->campos["cache"];
+ $tbCac[$idx]["numpar"]=$rs->campos["numpar"];
+ $tbCac[$idx]["ordenadores"]=$rs->campos["ordenadores"];
+ $idx++;
+ $rs->Siguiente();
+ }
+ $conCac=$idx; // Guarda contador
+ $rs->Cerrar();
+}
+/*________________________________________________________________________________________________________
+
+ Toma tamaño de partición común a los ordenadores pasados como parámetros
+________________________________________________________________________________________________________*/
+function tomaCache($numpar,$ordenadores)
+{
+ global $tbCac; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $conCac; // Contador de elementos anteriores
+ for ($k=0; $k<$conCac; $k++) {
+ if ($tbCac[$k]["numpar"] == $numpar) {
+ $pcs = explode (",", $ordenadores);
+ $intersec = array_intersect (explode(",", $tbCac[$k]["ordenadores"]), $pcs);
+ if (array_diff ($pcs, $intersec) == NULL) {
+ return ($tbCac[$k]["cache"]);
+ }
+ }
+ }
+}
?>
diff --git a/admin/WebConsole/includes/HTMLCTESELECT.php b/admin/WebConsole/includes/HTMLCTESELECT.php
index bd07d085..93719426 100644
--- a/admin/WebConsole/includes/HTMLCTESELECT.php
+++ b/admin/WebConsole/includes/HTMLCTESELECT.php
@@ -19,13 +19,14 @@
function HTMLCTESELECT($parametros,$nombreid,$clase,$defaultlit,$valorselec,$ancho,$eventochg=""){
if (!empty($eventochg)) $eventochg='onchange="'.$eventochg.'(this);"';
$opciones=split(chr(13),$parametros);
- $SelectHtml= '<SELECT '.$eventochg.' class= "'.$clase.'" id='.$nombreid.' name="'.$nombreid.'" style="WIDTH: '.$ancho.'">';
- if (!empty($defaultlit)) $SelectHtml.= '<OPTION value="0">'.$defaultlit.'</OPTION>';
+ $SelectHtml= '<select '.$eventochg.' class="'.$clase.'" id='.$nombreid.' name="'.$nombreid.'" style="width: '.$ancho.'">';
+ if (!empty($defaultlit)) $SelectHtml.= '<option value="0">'.$defaultlit.'</option>';
for($i=0;$i<sizeof($opciones);$i++){
$item=split("=",$opciones[$i]);
- $SelectHtml.= '<OPTION value="'.$item[0].'"';
+ $SelectHtml.= '<option value="'.$item[0].'"';
if($valorselec==$item[0]) $SelectHtml.=" selected ";
- $SelectHtml.= '>'.$item[1].'</OPTION>';
+ $SelectHtml.= '>'.$item[1].'</option>';
}
+ $SelectHtml.= '</select>';
return($SelectHtml);
-} \ No newline at end of file
+}
diff --git a/admin/WebConsole/includes/HTMLSELECT.php b/admin/WebConsole/includes/HTMLSELECT.php
index 077e7680..5db2e45b 100644
--- a/admin/WebConsole/includes/HTMLSELECT.php
+++ b/admin/WebConsole/includes/HTMLSELECT.php
@@ -20,6 +20,9 @@
// - clausulawhere: Clausula Where adicional
// *************************************************************************************************************************************************
function HTMLSELECT($cmd,$idcentro,$nombretabla,$identificador,$nombreid,$nombreliteral,$ancho,$eventochg = "",$clase="",$clausulawhere=""){
+ $nombretabla=htmlentities($nombretabla);
+ $nombreid=htmlentities($nombreid);
+ $nombreliteral=htmlentities($nombreliteral);
if (!empty($eventochg)) $eventochg='onchange="'.$eventochg.'(this);"';
if (empty($clase)) $clase='formulariodatos';
$SelectHtml="";
@@ -30,7 +33,7 @@ function HTMLSELECT($cmd,$idcentro,$nombretabla,$identificador,$nombreid,$nombre
$cmd->texto.=" AND (".$clausulawhere.")";
}
else{
- $cmd->texto='SELECT * FROM '.$nombretabla;
+ $cmd->texto='SELECT DISTINCT '.$nombreid.', '.$nombreliteral.' FROM '.$nombretabla;
if(!empty($clausulawhere))
$cmd->texto.=" WHERE (".$clausulawhere.")";
}
@@ -49,4 +52,4 @@ function HTMLSELECT($cmd,$idcentro,$nombretabla,$identificador,$nombreid,$nombre
}$SelectHtml.= '</SELECT>';
$rs->Cerrar();
return($SelectHtml);
-} \ No newline at end of file
+}
diff --git a/admin/WebConsole/includes/RecopilaIpesMacs.php b/admin/WebConsole/includes/RecopilaIpesMacs.php
index 67bc5145..f3caac06 100644
--- a/admin/WebConsole/includes/RecopilaIpesMacs.php
+++ b/admin/WebConsole/includes/RecopilaIpesMacs.php
@@ -19,7 +19,7 @@
// Para ellos habrá que tener declarada tres variables globales :
// $cadenaid, $cadenaip y $cadenamac
// *************************************************************************************************************************************************
-function RecopilaIpesMacs($cmd,$ambito,$idambito){
+function RecopilaIpesMacs($cmd,$ambito,$idambito,$filtroip=""){
global $cadenaid;
global $cadenaip;
global $cadenamac;
@@ -35,31 +35,39 @@ function RecopilaIpesMacs($cmd,$ambito,$idambito){
$cadenamac="";
$rs=new Recordset;
- switch($ambito){
- case $AMBITO_CENTROS :
- $cmd->texto="SELECT idcentro,nombrecentro FROM centros WHERE idcentro=".$idambito;
- RecorreCentro($cmd);
- break;
- case $AMBITO_GRUPOSAULAS :
- $cmd->texto="SELECT idgrupo,nombregrupo FROM grupos WHERE idgrupo=".$idambito." AND tipo=".$AMBITO_GRUPOSAULAS;
- RecorreGruposAulas($cmd);
- break;
- case $AMBITO_AULAS :
- $cmd->texto="SELECT idaula,nombreaula FROM aulas WHERE idaula=".$idambito;
- RecorreAulas($cmd);
- break;
- case $AMBITO_GRUPOSORDENADORES :
- $cmd->texto="SELECT idgrupo,nombregrupoordenador FROM gruposordenadores WHERE idgrupo=".$idambito;
- RecorreGruposOrdenadores($cmd);
- break;
- case $AMBITO_ORDENADORES :
- $cmd->texto="SELECT ip,mac,nombreordenador,idordenador FROM ordenadores WHERE idordenador=".$idambito;
- RecorreOrdenadores($cmd);
- break;
- default: // Se trata de un conjunto aleatorio de ordenadores
- $cmd->texto="SELECT ip,mac,nombreordenador,idordenador FROM ordenadores WHERE idordenador IN (".$idambito.")";
- RecorreOrdenadores($cmd);
-
+
+ if(!empty($filtroip)){
+ $filtroip="'".str_replace(";","','",$filtroip)."'"; // Cambia caracter ; para consulta alfanumérica
+ $cmd->texto="SELECT ip, mac, nombreordenador, idordenador FROM ordenadores WHERE ip IN (".$filtroip.")";
+ RecorreOrdenadores($cmd);
+ }
+ else{
+ switch($ambito){
+ case $AMBITO_CENTROS :
+ $cmd->texto="SELECT idcentro,nombrecentro FROM centros WHERE idcentro=".$idambito;
+ RecorreCentro($cmd);
+ break;
+ case $AMBITO_GRUPOSAULAS :
+ $cmd->texto="SELECT idgrupo,nombregrupo FROM grupos WHERE idgrupo=".$idambito." AND tipo=".$AMBITO_GRUPOSAULAS;
+ RecorreGruposAulas($cmd);
+ break;
+ case $AMBITO_AULAS :
+ $cmd->texto="SELECT idaula,nombreaula FROM aulas WHERE idaula=".$idambito;
+ RecorreAulas($cmd);
+ break;
+ case $AMBITO_GRUPOSORDENADORES :
+ $cmd->texto="SELECT idgrupo,nombregrupoordenador FROM gruposordenadores WHERE idgrupo=".$idambito;
+ RecorreGruposOrdenadores($cmd);
+ break;
+ case $AMBITO_ORDENADORES :
+ $cmd->texto="SELECT ip,mac,nombreordenador,idordenador FROM ordenadores WHERE idordenador=".$idambito;
+ RecorreOrdenadores($cmd);
+ break;
+ default: // Se trata de un conjunto aleatorio de ordenadores
+ $cmd->texto="SELECT ip,mac,nombreordenador,idordenador FROM ordenadores WHERE idordenador IN (".$idambito.")";
+ RecorreOrdenadores($cmd);
+
+ }
}
$cadenaid=substr($cadenaid,0,strlen($cadenaid)-1); // Quita la coma
$cadenaip=substr($cadenaip,0,strlen($cadenaip)-1); // Quita la coma
@@ -147,3 +155,4 @@ function RecorreOrdenadores($cmd){
$rs->Cerrar();
}
?>
+
diff --git a/admin/WebConsole/includes/constantes.php b/admin/WebConsole/includes/constantes.php
index b069cd1b..ba79ef33 100644
--- a/admin/WebConsole/includes/constantes.php
+++ b/admin/WebConsole/includes/constantes.php
@@ -168,5 +168,7 @@ $msk_nombreSO=0x02;
$msk_tamano=0x04;
$msk_imagen=0x08;
$msk_perfil=0x10;
+$msk_cache=0x12;
?>
+
diff --git a/admin/WebConsole/includes/opcionesbotones.php b/admin/WebConsole/includes/opcionesbotones.php
index 0fabefa4..e75d7904 100644
--- a/admin/WebConsole/includes/opcionesbotones.php
+++ b/admin/WebConsole/includes/opcionesbotones.php
@@ -1,7 +1,7 @@
<TABLE align=center>
<TR>
- <TD><A href=#><IMG border=0 src="../images/boton_cancelar.gif" onclick="javascript:cancelar()"></A></TD>
+ <TD><A href=#><IMG border=0 src="../images/boton_cancelar_<?echo $idioma ?>.gif" onclick="javascript:cancelar()"></A></TD>
<TD width=20></TD>
- <TD><A href=#><IMG border=0 src="../images/boton_confirmar.gif" onclick="javascript:confirmar()" ></A></TD>
+ <TD><A href=#><IMG border=0 src="../images/boton_confirmar_<? echo $idioma ?>.gif" onclick="javascript:confirmar()" ></A></TD>
</TR>
</TABLE>
diff --git a/admin/WebConsole/jscripts/aula.js b/admin/WebConsole/jscripts/aula.js
index 282127ca..f34c01ba 100644
--- a/admin/WebConsole/jscripts/aula.js
+++ b/admin/WebConsole/jscripts/aula.js
@@ -83,6 +83,7 @@ function respuestaSondeo(){
//______________________________________________________________________________________________________
function retornorespuestaSondeo(resul)
{
+
if(resul.length>0){
var ip=""; // Dirección IP del ordenador
var so=""; // Sistema operativo activo
@@ -91,7 +92,7 @@ function retornorespuestaSondeo(resul)
var cadena=resul.split(";"); // Trocea la cadena devuelta por el servidor de adminsitración
for (var i=0;i<cadena.length;i++){
var dual=cadena[i].split("/");
- ip=dual[0];
+ ip=dual[0].replace(/\n*/,"");
so=dual[1];
objOrd=document.getElementById(ip);
if(objOrd){ // Si existe el objeto
@@ -109,43 +110,46 @@ function soIMG(so)
{
var MimgOrdenador="";
switch(so){
- case 'INI':
- MimgOrdenador="ordenador_INI.gif"; // Cliente ocupado
- break;
- case 'BSY':
- MimgOrdenador="ordenador_BSY.gif"; // Cliente ocupado
- break;
- case 'OPG':
- MimgOrdenador="ordenador_RMB.gif"; // Cliente Rembo
- break;
- case 'WS2':
- MimgOrdenador="ordenador_WS2.gif"; // Windows Server 2003
- break;
- case 'W2K':
- MimgOrdenador="ordenador_W2K.gif"; // Windows 2000
- break;
- case 'WXP':
- MimgOrdenador="ordenador_WXP.gif"; // Windows XP
- break;
- case 'WNT':
- MimgOrdenador="ordenador_WNT.gif"; // Windows NT
- break;
- case 'W95':
- MimgOrdenador="ordenador_W95.gif"; // Windows 95
- break;
- case 'W98':
- MimgOrdenador="ordenador_W98.gif"; // Windows 98
- break;
- case 'WML':
- MimgOrdenador="ordenador_WML.gif"; // Windows Millenium
- break;
- case 'LNX':
- MimgOrdenador="ordenador_LNX.gif"; // Linux
- default:
- MimgOrdenador="ordenador_OFF.gif"; // Linux
- break;
+ case 'INI':
+ MimgOrdenador="ordenador_INI.gif"; // Iniciando cliente
+ break;
+ case 'BSY':
+ MimgOrdenador="ordenador_BSY.gif"; // Cliente ocupado
+ break;
+ case 'OPG':
+ MimgOrdenador="ordenador_OPG.gif"; // Cliente OpenGnSys
+ break;
+ case 'WS2':
+ MimgOrdenador="ordenador_WS2.gif"; // Windows Server 2003
+ break;
+ case 'W2K':
+ MimgOrdenador="ordenador_W2K.gif"; // Windows 2000
+ break;
+ case 'WXP':
+ MimgOrdenador="ordenador_WXP.gif"; // Windows XP
+ break;
+ case 'WNT':
+ MimgOrdenador="ordenador_WNT.gif"; // Windows NT
+ break;
+ case 'W95':
+ MimgOrdenador="ordenador_W95.gif"; // Windows 95
+ break;
+ case 'W98':
+ MimgOrdenador="ordenador_W98.gif"; // Windows 98
+ break;
+ case 'WML':
+ MimgOrdenador="ordenador_WML.gif"; // Windows Millenium
+ break;
+ case 'WIN':
+ MimgOrdenador="ordenador_WXP.gif"; // Windows
+ break;
+ case 'LNX':
+ MimgOrdenador="ordenador_LNX.gif"; // Linux
+ break;
+ default:
+ MimgOrdenador="ordenador_OFF.gif"; // Apagado
+ break;
}
return(MimgOrdenador);
}
-
diff --git a/admin/WebConsole/menus/examplemenu.html b/admin/WebConsole/menus/examplemenu.html
new file mode 100644
index 00000000..e5fa336c
--- /dev/null
+++ b/admin/WebConsole/menus/examplemenu.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
+
+<head>
+ <meta http-equiv="content-type" content="text/html;charset=utf-8" />
+ <title>Init menu OpenGnSys client</title>
+
+ <style type="text/css">
+ body { background: #fff; font-size: 0.7em; }
+ h1, h2 { font-size: 1.5em; }
+ br {font-size: 0.2em; }
+ a:link, a:visited { text-decoration: none; color:#900; font-weight: bold; }
+ a:hover, a:active { color:#d90; }
+
+ h1 {
+ font-size: 1.5em;
+ width: 100%;
+ vertical-align: bottom;
+ color: #555;
+ background: transparent url('images/opengnsys.png') no-repeat top left;
+ padding: 2em 0 1.5em 12em;
+ margin-bottom: 1em;
+ }
+
+ dl {
+ background: transparent url('images/xp_peque.png') no-repeat top left;
+ padding: 0 0 1em 5em;
+ margin: 5px 50px;
+ }
+
+ dl.windows {
+ background-image: url('images/xp_peque.png');
+ }
+
+ dl.linux {
+ background-image: url('images/linux_peque.png');
+ }
+
+ dl.apagar {
+ background-image: url('images/poweroff.png');
+ }
+
+ dt { float: left;}
+ dd { margin: 1em 20em; }
+ </style>
+
+</head>
+
+ <body>
+
+
+ <h1>Option Menu</h1>
+ <dl class="windows">
+ <dt><a href="command:bootOs 1 1" title="Init session Windows" accesskey="1">Init session Windows.</a></dt>
+ <dd>Normal boot Windows without changes.</dd>
+ <dt><a href="commandwithconfirmation:restoreImage REPO windows 1 1" title="Format the disk and install the Windows operating system" accesskey="3">Install Windows.</a></dt>
+ <dd>The installation process takes a few minutes.</dd>
+ </dl>
+
+ <dl class="linux">
+ <dt><a href="command:bootOs 1 2" title="Init session GNU/Linux" accesskey="2">Init session GNU/Linux.</a></dt>
+ <dd>Normal boot <acronym title="GNU's not Unix">GNU</acronym>/Linux without changes.</dd>
+ <dt><a href="commandwithconfirmation:restoreImage REPO linux 1 2" title="Format the disk and install the GNU/Linux operating system GNU/Linux" accesskey="4">Install GNU/Linux.</a></dt>
+ <dd>The installation process takes a few minutes.</dd>
+ </dl>
+
+ <dl class="apagar">
+ <dt><a href="command:poweroff" title="Power-off" accesskey="5">Power-off.</a></dt>
+ <dd>Power-off computer.</dd>
+ <dt><a href="command:reboot" title="Reboot" accesskey="6">Reboot.</a></dt>
+ <dd>Reboot computer.</dd>
+ </dl>
+ </body>
+</html>
diff --git a/admin/WebConsole/principal/aula.php b/admin/WebConsole/principal/aula.php
index e92f8367..83b750d1 100644
--- a/admin/WebConsole/principal/aula.php
+++ b/admin/WebConsole/principal/aula.php
@@ -17,6 +17,7 @@ include_once("../includes/constantes.php");
include_once("../includes/comunes.php");
include_once("../includes/CreaComando.php");
include_once("../idiomas/php/".$idioma."/aulas_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/estados_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/mensajes_".$idioma.".php");
//________________________________________________________________________________________________________
$litambito=0;
@@ -282,6 +283,15 @@ function pintaordenadores(){
}
}
echo '</TABLE>';
+ echo '
+<p>
+<table style="border: #d4d0c8 1px solid; background: #eeeeee" align=center>
+ <tr align="center">';
+ foreach ( Array ("OPG", "BSY", "WXP", "LNX", "OFF") as $status) {
+ echo ' <td><img src="../images/ordenador_'.$status.'.gif" alt="'.$status.'" width="24" /><br /><font color="#003300" size="1" face="Arial, Helvetica, sans-serif">'.$TbMsg["STATUS_$status"].'</font></td>';
+ }
+ echo ' </tr>';
+ echo '</table>';
if ($nombreaula!="")
echo '</DIV>';
}
@@ -602,4 +612,4 @@ function ContextualXMLAsistentes($litambito,$ambito){
$finallayerXML=$prelayerXML.$layerXML;
return($finallayerXML);
}
-} \ No newline at end of file
+}
diff --git a/admin/WebConsole/principal/colasacciones.php b/admin/WebConsole/principal/colasacciones.php
index 76fbad69..83080fd6 100644
--- a/admin/WebConsole/principal/colasacciones.php
+++ b/admin/WebConsole/principal/colasacciones.php
@@ -446,15 +446,16 @@ function listaAcciones($ambito,$idambito)
RecopilaIpesMacs($cmd,$ambito,$idambito); // Recopila Ipes del ámbito
$cadenasesion="(SELECT DISTINCT sesion FROM acciones WHERE idordenador NOT IN (".$cadenaid."))";
- $cmd->texto="SELECT acciones.*,comandos.descripcion as comando,acciones.parametros,comandos.visuparametros,
- ordenadores.nombreordenador,procedimientos.descripcion as procedimiento,
- tareas.descripcion as tarea,programaciones.sesion as sesionprog
- FROM acciones";
- $cmd->texto.=" INNER JOIN comandos ON comandos.idcomando=acciones.idcomando";
- $cmd->texto.=" INNER JOIN ordenadores ON ordenadores.idordenador=acciones.idordenador";
- $cmd->texto.=" LEFT OUTER JOIN procedimientos ON procedimientos.idprocedimiento=acciones.idprocedimiento";
- $cmd->texto.=" LEFT OUTER JOIN tareas ON tareas.idtarea=acciones.idtarea";
- $cmd->texto.=" LEFT OUTER JOIN programaciones ON programaciones.sesion=acciones.sesion";
+ $cmd->texto="SELECT acciones.*, comandos.descripcion AS comando, acciones.parametros,
+ comandos.visuparametros, ordenadores.nombreordenador,
+ procedimientos.descripcion AS procedimiento,
+ tareas.descripcion AS tarea, programaciones.sesion AS sesionprog
+ FROM acciones
+ INNER JOIN comandos ON comandos.idcomando=acciones.idcomando
+ INNER JOIN ordenadores ON ordenadores.idordenador=acciones.idordenador
+ LEFT OUTER JOIN procedimientos ON procedimientos.idprocedimiento=acciones.idprocedimiento
+ LEFT OUTER JOIN tareas ON tareas.idtarea=acciones.idtarea
+ LEFT OUTER JOIN programaciones ON programaciones.sesion=acciones.sesion";
if(!empty($sesion)) // Filtro por acción
$cmd->texto.=" WHERE acciones.sesion =".$sesion;
else
@@ -466,16 +467,15 @@ function listaAcciones($ambito,$idambito)
if(!empty($ClausulaWhere))
$cmd->texto.=" AND (".$ClausulaWhere.")";
}
- $cmd->texto.=" ORDER BY acciones.idaccion desc,acciones.sesion desc ";
+ $cmd->texto.=" ORDER BY acciones.idaccion DESC, acciones.sesion DESC";
$rs=new Recordset;
$rs->Comando=&$cmd;
- //echo $cmd->texto;
if (!$rs->Abrir()) return; // Error al abrir recordset
- $acciones=""; // Variable que recogerá las acciones que cumplan los criterios
- // con formato "ambito,idambito" concadenando con ";" a otro identificador
- // Esta variable se usara para las operaciones globales de Eliminar, etc...
-
+ $acciones=""; // Variable que recogerá las acciones que cumplan los criterios
+ // con formato "ambito,idambito" concadenando con ";" a otro identificador
+ // Esta variable se usara para las operaciones globales de Eliminar, etc...
+
// Recorre acciones
$html="";
while (!$rs->EOF){
@@ -492,6 +492,9 @@ function listaAcciones($ambito,$idambito)
}
}
echo $html;
+while (!$rs->EOF){
+echo $rs->campos['descripcion'].'</br>';
+};
}
// _________________________________________________________________________
@@ -1237,4 +1240,7 @@ function ContextualXMLComun()
$layerXML.='</MENUCONTEXTUAL>';
return($layerXML);
}
+while (!$rs->EOF){
+echo $rs['descripcion'];
+};
?>
diff --git a/admin/WebConsole/principal/configuraciones.php b/admin/WebConsole/principal/configuraciones.php
index 435ea935..3f17fb4d 100644
--- a/admin/WebConsole/principal/configuraciones.php
+++ b/admin/WebConsole/principal/configuraciones.php
@@ -29,6 +29,7 @@ $fk_nombreSO=0;
$fk_tamano=0;
$fk_imagen=0;
$fk_perfil=0;
+$fk_cache=0;
if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
@@ -42,6 +43,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
if (isset($_POST["fk_tamano"])) $fk_tamano=$_POST["fk_tamano"];
if (isset($_POST["fk_imagen"])) $fk_imagen=$_POST["fk_imagen"];
if (isset($_POST["fk_perfil"])) $fk_perfil=$_POST["fk_perfil"];
+if (isset($_POST["fk_cache"])) $fk_cache=$_POST["fk_cache"];
//________________________________________________________________________________________________________
@@ -97,9 +99,10 @@ if (!$cmd)
<INPUT type="hidden" name="ambito" value="<? echo $ambito?>">
<TABLE class="tabla_busquedas" align=center border=0 cellPadding=0 cellSpacing=0>
<TR>
- <TH height=15 align="center" colspan=14><? echo $TbMsg[18]?></TH>
+ <TH height=15 align="center" colspan=17><? echo $TbMsg[18]?></TH>
</TR>
<TR>
+
<TD align=right><? echo $TbMsg[30]?></TD>
<TD align=center><INPUT type="checkbox" value="<? echo $msk_sysFi?>" name="fk_sysFi" <? if($fk_sysFi==$msk_sysFi) echo " checked "?>></TD>
<TD width="20" align=center>&nbsp;</TD>
@@ -114,21 +117,26 @@ if (!$cmd)
<TD width="20" align=center>&nbsp;</TD>
<TD align=right><? echo $TbMsg[34]?></TD>
<TD align=center><INPUT type="checkbox" value="<? echo $msk_perfil?>" name="fk_perfil" <? if($fk_perfil==$msk_perfil) echo " checked "?>></TD>
+ <TD width="20" align=center>&nbsp;</TD>
+ <TD align=right><? echo $TbMsg[495]?></TD>
+ <TD align=center><INPUT type="checkbox" value="<? echo $msk_cache?>" name="fk_cache" <? if($fk_cache==$msk_cache) echo " checked "?>></TD>
+
+
</TR>
<TR>
- <TD height=2 style="BORDER-TOP:#999999 1px solid;" align="center" colspan=14>&nbsp;</TD>
+ <TD height=2 style="BORDER-TOP:#999999 1px solid;" align="center" colspan=17>&nbsp;</TD>
</TR>
<TR>
<TD height=20 align="center" colspan=14>
<A href=#>
- <IMG border=0 src="../images/boton_confirmar.gif" onclick="document.fdatos.submit()"></A></TD>
+ <IMG border=0 src="../images/boton_confirmar.gif" onClick="document.fdatos.submit()"></A></TD>
</TR>
</TABLE>
</FORM>
<?
}
- $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil;
- pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false);
+ $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil | $fk_cache;
+ pintaConfiguraciones($cmd,$idambito,$ambito,8,$sws,false);
?>
</BODY>
</HTML>
@@ -148,7 +156,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
global $conKeys; // Contador de claves de configuración
global $TbMsg;
- $colums=7;
+ $colums=8;
echo '<tr height="16">';
echo '<th align="center">&nbsp;'.$TbMsg[20].'&nbsp;</th>'; // Número de partición
echo '<th align="center">&nbsp;'.$TbMsg[24].'&nbsp;</th>'; // Tipo de partición
@@ -157,6 +165,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
echo '<th align="center">&nbsp;'.$TbMsg[22].'&nbsp;</th>'; // Tamaño
echo '<th align="center">&nbsp;'.$TbMsg[25].'&nbsp;</th>'; // Imagen instalada
echo '<th align="center">&nbsp;'.$TbMsg[26].'&nbsp;</th>'; // Perfil software
+ echo '<th align="center">&nbsp;'.$TbMsg[495].'&nbsp;</th>';
echo '</tr>';
$auxCfg=split("@",$configuraciones); // Crea lista de particiones
@@ -189,6 +198,44 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
//echo'<td align="center">'.$tbKeys[$k]["perfilsoft"].'</td>'.chr(13);
echo'<td align="center">&nbsp;'.tomaPerfiles($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
+
+ //echo'<td align="center">'.$tbKeys[$k]["perfilsoft"].'</td>'.chr(13);
+ if ($tbKeys[$k]["numpar"] == "4")
+ {
+ $rs=new Recordset;
+ $cmd->texto="SELECT * FROM ordenadores_particiones WHERE idordenador='".$idordenadores."' AND numpar=4";
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(false); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $campocache=$rs->campos["cache"];
+ }$rs->Cerrar();
+ echo'<td align="leght">&nbsp;';
+ $ima=split(",",$campocache);
+ $numero=1;
+ for ($x=0;$x<count($ima); $x++)
+ {
+
+ if(ereg(".sum",$ima[$x]) || ereg(".torrent",$ima[$x]))
+ {
+ if(ereg(".torrent",$ima[$x]))
+ {
+ echo '&nbsp;&nbsp;&nbsp;&nbsp;'.$ima[$x].'<br/>'.'<hr>';$numero++;
+ }else{
+ echo '&nbsp;&nbsp;&nbsp;&nbsp;'.$ima[$x].'<br/>';
+ }
+ }else{
+ if(ereg("MB",$ima[$x]))
+ { echo '<hr> ## '.$TbMsg[4951].' - ( '.$ima[$x].' )<br/><hr>';}else{
+ echo $numero.".-".$ima[$x].'<br/>';
+ }
+ }
+
+ }
+ echo '&nbsp;</td>'.chr(13);
+ }else{
+ echo'<td align="center">&nbsp;&nbsp;</td>'.chr(13);
+ }
echo'</tr>'.chr(13);
}
@@ -206,6 +253,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
echo'<td align="right">&nbsp;'.$disksize.'&nbsp;</td>'.chr(13);
echo'<td></td>'.chr(13);
echo'<td></td>'.chr(13);
+ echo'<td></td>'.chr(13);
echo'</tr>'.chr(13);
}
echo '<tr height="5"><td colspan="'.$colums.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</td></tr>';
@@ -215,10 +263,10 @@ function datosAulas($cmd,$idaula)
{
global $TbMsg;
- $cmd->texto="SELECT DISTINCT aulas.*,count(*) as numordenadores
- FROM aulas
- INNER JOIN ordenadores ON ordenadores.idaula=aulas.idaula
- WHERE aulas.idaula=".$idaula;
+ $cmd->texto="SELECT DISTINCT aulas.*, COUNT(*) AS numordenadores
+ FROM aulas
+ INNER JOIN ordenadores ON ordenadores.idaula=aulas.idaula
+ WHERE aulas.idaula=$idaula";
$rs=new Recordset;
$rs->Comando=&$cmd;
if ($rs->Abrir()){
@@ -248,7 +296,7 @@ function datosAulas($cmd,$idaula)
?>
<TD valign=top align=center rowspan=3>
<IMG border=3 style="border-color:#63676b"
- src="<? if ($urlfoto=="") echo "../images/aula.jpg"; else echo $urlfoto;?>">
+ src="<? echo "../images/fotos/".$urlfoto?>">
<BR><center>&nbsp;<? echo $TbMsg[13].':&nbsp;'. $ordenadores?></center></TD>
</TR>
<TR>
@@ -281,10 +329,10 @@ function datosOrdenadores($cmd,$idordenador)
{
global $TbMsg;
- $cmd->texto="SELECT nombreordenador,ip,mac,perfileshard.descripcion as perfilhard
- FROM ordenadores
- INNER JOIN perfileshard ON perfileshard.idperfilhard=ordenadores.idperfilhard
- WHERE ordenadores.idordenador=".$idordenador;
+ $cmd->texto="SELECT nombreordenador, ip, mac, perfileshard.descripcion AS perfilhard
+ FROM ordenadores
+ LEFT JOIN perfileshard ON perfileshard.idperfilhard=ordenadores.idperfilhard
+ WHERE ordenadores.idordenador=$idordenador";
$rs=new Recordset;
$rs->Comando=&$cmd;
if ($rs->Abrir()){
@@ -327,10 +375,10 @@ function datosGruposOrdenadores($cmd,$idgrupo)
{
global $TbMsg;
- $cmd->texto="SELECT DISTINCT gruposordenadores.*,count(*) as numordenadores
- FROM gruposordenadores
- INNER JOIN ordenadores ON ordenadores.grupoid=gruposordenadores.idgrupo
- WHERE gruposordenadores.idgrupo=".$idgrupo;
+ $cmd->texto="SELECT DISTINCT gruposordenadores.*, COUNT(*) AS numordenadores
+ FROM gruposordenadores
+ INNER JOIN ordenadores ON ordenadores.grupoid=gruposordenadores.idgrupo
+ WHERE gruposordenadores.idgrupo=$idgrupo";
$rs=new Recordset;
$rs->Comando=&$cmd;
if ($rs->Abrir()){
@@ -338,17 +386,32 @@ function datosGruposOrdenadores($cmd,$idgrupo)
if (!$rs->EOF){
$nombregrupoordenador=$rs->campos["nombregrupoordenador"];
$ordenadores=$rs->campos["numordenadores"];
+ $idaula=$rs->campos["idaula"];
+ }
+ $rs->Cerrar();
+ }
+ //////////////////////////////////////
+ $cmd->texto="SELECT DISTINCT * FROM aulas
+ INNER JOIN grupoordenadores ON grupoordenadores.idaula=aulas.idaula
+ WHERE aulas.idaula=.$idaula";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if ($rs->Abrir()){
+ $rs->Primero();
+ if (!$rs->EOF){
+ $urlfoto=$rs->campos["urlfoto"];
+ $nombreaula=$rs->campos["nombreaula"];
}
$rs->Cerrar();
}
?>
<TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[5].'</br>'.$nombreaula?>&nbsp;</TD>
<?
echo '<TD>'.$nombregrupoordenador.'</TD>
<TD colspan=2 valign=top align=center rowspan=2>
- <IMG border=3 style="border-color:#63676b" src="../images/aula.jpg"><br>
+ <IMG border=3 style="border-color:#63676b" src="'.$urlfoto.'"><br>
<center>&nbsp;'.$TbMsg[13].':&nbsp;'. $ordenadores.'</center>
</TD>';
diff --git a/admin/WebConsole/principal/consolaremota.php b/admin/WebConsole/principal/consolaremota.php
index 72dd24c5..7ab72b5b 100644
--- a/admin/WebConsole/principal/consolaremota.php
+++ b/admin/WebConsole/principal/consolaremota.php
@@ -96,7 +96,7 @@ switch($litambito){
rows="'.$rows.'"></textarea></TD></TR>
<TR>
<TD align=center>
- <BR><IMG border=0 style="cursor:pointer" src="../images/boton_confirmar.gif"
+ <BR><IMG border=0 style="cursor:pointer" src="../images/boton_confirmar_'.$idioma.'.gif"
onclick="confirmar()"></TD></TR>';
}
if($ambito==$AMBITO_ORDENADORES) //Mensaje de espera
diff --git a/admin/WebConsole/propiedades/propiedades_aulas.php b/admin/WebConsole/propiedades/propiedades_aulas.php
index c55c7abf..76a8662d 100644
--- a/admin/WebConsole/propiedades/propiedades_aulas.php
+++ b/admin/WebConsole/propiedades/propiedades_aulas.php
@@ -39,7 +39,7 @@ if ($opcion!=$op_alta){
Header('Location: '.$pagerror.'?herror=3'); // Error de recuperación de datos.
}
else
- $urlfoto="../images/aula.jpg";
+ $urlfoto="aula.jpg";
//________________________________________________________________________________________________________
?>
<HTML>
@@ -51,10 +51,15 @@ else
<SCRIPT language="javascript" src="../jscripts/propiedades_aulas.js"></SCRIPT>
<SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT>
<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_aulas_'.$idioma.'.js"></SCRIPT>'?>
+ <script language=javascript>
+function abrir_ventana(URL){
+ window.open('../images/ver.php','Imagenes','scrollbars=yes,resizable=yes,width=950,height=640')
+}
+</script>
</HEAD>
<BODY>
<DIV align=center>
-<FORM name="fdatos" action="../gestores/gestor_aulas.php" method="post">
+<FORM name="fdatos" action="../gestores/gestor_aulas.php" method="post" enctype="multipart/form-data">
<INPUT type=hidden name=opcion value="<? echo $opcion?>">
<INPUT type=hidden name=idaula value="<? echo $idaula?>">
<INPUT type=hidden name=grupoid value="<? echo $grupoid?>">
@@ -71,21 +76,21 @@ else
<SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN></P>
<TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos >
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</TD>
- <?
+ <tr>
+ <th align="center"><?php echo $TbMsg[5]?></th>
+ <?php
if ($opcion==$op_eliminacion){
- echo '<TD>'. $nombreaula.'</TD>';
- echo '<TD colspan=2 valign=top align=center rowspan=2>
- <IMG border=3 style="border-color:#63676b" src="'.$urlfoto.'"
- <br><center>&nbsp;Computers:&nbsp;'. $ordenadores.'</center></TD>';
+ echo '<td>'. $nombreaula.'</td>';
+ echo '<td colspan="2" valign="top" align=c"enter" rowspan="2">
+ <img border="3" style="border-color:#63676b" src="../images/fotos/'.$urlfoto.'" />
+ <br />'.$TbMsg[21].': '. $ordenadores.'</td>';
}
else{
- echo '<TD><INPUT class="formulariodatos" name=nombreaula style="width:215" type=text value="'. $nombreaula.'"></TD>';
- echo'<TD colspan=2 valign=top align=left rowspan=2><IMG border=3 style="border-color:#63676b" src="'.$urlfoto.'"<br><center>&nbsp;Computers:&nbsp;'. $ordenadores.'</center></TD>';
+ echo '<td><input class="formulariodatos" name=nombreaula style="width:215" type=text value="'. $nombreaula.'" /></td>';
+ echo'<td colspan="2" valign="top" align="left" rowspan="2"><img border="3" style="border-color:#63676b" src="../images/fotos/'.$urlfoto.'" /><br />'.$TbMsg[21].': '. $ordenadores.'<br />(150X110)-(jpg - gif) ---- '.$TbMsg[5091].'<br /><input name="archivo" type="file" id="archivo" size="16" /></td>';
}
?>
- </TR>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
<TH align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</TD>
@@ -152,10 +157,30 @@ else
<TH align=center>&nbsp;<?echo $TbMsg[10]?>&nbsp;</TD>
<?
if ($opcion==$op_eliminacion)
- echo '<TD colspan=3>'.$urlfoto.'</TD>';
- else
- echo '<TD colspan=3><INPUT class="formulariodatos" name=urlfoto style="width:330" type=text value='.$urlfoto.'></TD>';
- ?>
+ echo '<TD colspan=3>../images/fotos/'.$urlfoto.'</TD>';
+ else{
+ ?>
+ <TD colspan=3><SELECT class="formulariodatos" name="urlfoto" >
+ <?php if($urlfoto==""){
+ echo '<option value="aula.gif"></option>';}else{
+ echo '<option value="'.$urlfoto.'">'.$urlfoto.'</option>';}
+ if ($handle = opendir("../images/fotos")) {
+ while (false !== ($entry = readdir($handle))) {
+ if ($entry != "." && $entry != "..") {?>
+
+ <option value="<? echo $entry ?>"><? echo $entry ?></option>
+ <?}
+ }
+ closedir($handle);
+ }
+ ?>
+ </SELECT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<a href="javascript:abrir_ventana('../images/ver.php')" onClick="MM_openBrWindow('../images/ver.php','Imagenes','scrollbars=yes,resizable=yes,width=950,height=640')"><? echo $TbMsg[5092] ?></a>
+ </TD>
+
+ <?
+ }
+ ?>
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
@@ -257,15 +282,12 @@ else
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$pormul.'</TD>';
else
- echo '<TD colspan=3>';
- $pormulmetodos="9000=9000".chr(13);
- $pormulmetodos.="9002=9002".chr(13);
- $pormulmetodos.="9004=9004".chr(13);
- $pormulmetodos.="9006=9006".chr(13);
- $pormulmetodos.="9010=9010".chr(13);
- $pormulmetodos.="9012=9012".chr(13);
- $pormulmetodos.="9014=9014";
- echo HTMLCTESELECT($pormulmetodos,"pormul","estilodesple","",$pormul,100).'</TD>';
+ echo '<td colspan="3">';
+ for ($i=9000; $i<9050; $i+=2) {
+ $pormulmetodos.="$i=$i".chr(13);
+ }
+ $pormulmetodos.="9050=9050";
+ echo HTMLCTESELECT($pormulmetodos,"pormul","estilodesple","",$pormul,100).'</td>';
?>
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
@@ -451,7 +473,7 @@ function TomaPropiedades($cmd,$ida)
$idaula=$rs->campos["idaula"];
$nombreaula=$rs->campos["nombreaula"];
$urlfoto=$rs->campos["urlfoto"];
- if ($urlfoto=="" ) $urlfoto="../images/aula.jpg";
+ if ($urlfoto=="" ) $urlfoto="aula.jpg";
$cagnon=$rs->campos["cagnon"];
$pizarra=$rs->campos["pizarra"];
$ubicacion=$rs->campos["ubicacion"];
diff --git a/admin/WebConsole/propiedades/propiedades_grupos.php b/admin/WebConsole/propiedades/propiedades_grupos.php
index d3245a92..fa3aaf42 100644
--- a/admin/WebConsole/propiedades/propiedades_grupos.php
+++ b/admin/WebConsole/propiedades/propiedades_grupos.php
@@ -162,13 +162,11 @@ switch($literaltipo){
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
</TABLE>
</FORM>
- <TABLE align=center>
- <TR>
- <TD><A href="#"><IMG border=0 src="../images/boton_cancelar.gif" onclick="cancelar()"></A></TD>
- <TD width=20></TD>
- <TD><A href="#"><IMG border=0 src="../images/boton_confirmar.gif" onclick="confirmar(<?=$opcion?>)" ></A></TD>
- </TR>
- </TABLE>
+<?
+//________________________________________________________________________________________________________
+include_once("../includes/opcionesbotonesop.php");
+//________________________________________________________________________________________________________
+?>
</BODY>
</HTML>
<?
diff --git a/admin/WebConsole/propiedades/propiedades_imagenes.php b/admin/WebConsole/propiedades/propiedades_imagenes.php
index 35f5412c..50a7ae5d 100644
--- a/admin/WebConsole/propiedades/propiedades_imagenes.php
+++ b/admin/WebConsole/propiedades/propiedades_imagenes.php
@@ -96,15 +96,15 @@ if ($opcion!=$op_alta){
?>
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[9]?>&nbsp;</TD>
- <?
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[9]?>&nbsp;</th>
+ <?php
if ($opcion==$op_eliminacion)
- echo '<TD>'.$tipopar.'</TD>';
+ echo '<td>'.$tipopar.'</td>';
else
- echo '<TD>'.HTMLSELECT($cmd,0,'tipospar',$codpar,'codpar','tipopar',100,"","","clonable=1").'</TD>';
+ echo '<td>'.HTMLSELECT($cmd,0,'tipospar',$codpar,'codpar',"CONCAT(tipopar,' (',HEX(codpar),')')",170,"","","clonable=1").'</td>';
?>
- </TR>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
<TH align=center>&nbsp;<?echo $TbMsg[10]?>&nbsp;</TD>
diff --git a/admin/WebConsole/propiedades/propiedades_menus.php b/admin/WebConsole/propiedades/propiedades_menus.php
index 54b017b5..9a6730e0 100644
--- a/admin/WebConsole/propiedades/propiedades_menus.php
+++ b/admin/WebConsole/propiedades/propiedades_menus.php
@@ -1,4 +1,4 @@
-<?
+<?php
// ************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -16,6 +16,7 @@ include_once("../includes/HTMLSELECT.php");
include_once("../includes/HTMLCTESELECT.php");
include_once("../clases/AdoPhp.php");
include_once("../idiomas/php/".$idioma."/propiedades_menus_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/avisos_".$idioma.".php");
//________________________________________________________________________________________________________
$opcion=0;
$opciones=array($TbMsg[0],$TbMsg[1],$TbMsg[2],$TbMsg[3]);
@@ -52,7 +53,7 @@ if ($opcion!=$op_alta){
//________________________________________________________________________________________________________
?>
<HTML>
-<TITLE>Administraci�n web de aulas</TITLE>
+<TITLE>Administración web de aulas</TITLE>
<HEAD>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<LINK rel="stylesheet" type="text/css" href="../estilos.css">
@@ -70,23 +71,23 @@ if ($opcion!=$op_alta){
<TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos >
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</TD>
- <?if ($opcion==$op_eliminacion)
+ <th align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
echo '<TD style="width:300">'.$descripcion.'</TD>';
else
echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:300" type=text value="'.$descripcion.'"></TD>';?>
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</TH>
- <?if ($opcion==$op_eliminacion)
+ <th align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
echo '<TD style="width:300">'.$titulo.'</TD>';
else
echo '<TD ><INPUT class="formulariodatos" name=titulo style="width:300" type=text value="'.$titulo.'"></TD>';?>
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[18]?>&nbsp;</TD>
+ <th align=center>&nbsp;<?echo $TbMsg[18]?>&nbsp;</th>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.TomaDato($cmd,0,'iconos',$idurlimg,'idicono','descripcion').'&nbsp;</TD>';
@@ -95,34 +96,52 @@ if ($opcion!=$op_alta){
?>
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
-<?
-/*
+<!--<php-->
+
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[17]?>&nbsp;</TH>
- <?
+ <th align="center">&nbsp;<?php echo $TbMsg[17]?> <sup>*</sup>&nbsp;</th>
+ <?php
if ($opcion==$op_eliminacion){
- $tbresolucion[1]="800x600";
- $tbresolucion[2]="1024x768";
+ $tbresolucion[788]="800x600 16bits";
+ $tbresolucion[791]="1024x768 16bits";
+ $tbresolucion[355]="1152x864 16bits";
+ $tbresolucion[794]="1280x1024 16bits";
+ $tbresolucion[798]="1600x1200 16bits";
+ $tbresolucion[789]="800x600 24bits";
+ $tbresolucion[792]="1024x768 24bits";
+ $tbresolucion[795]="1280x1024 24bits";
+ $tbresolucion[799]="1600x1200 24bits";
echo '<TD style="width:150">'.$tbresolucion[$resolucion].'</TD>';
}
else{
- $parametros="1=800x600".chr(13);
- $parametros.="2=1024x768";
+ $parametros="788=800x600 16bits".chr(13);
+ $parametros.="791=1024x768 16bits".chr(13);
+ $parametros.="355=1152x864 16bits".chr(13);
+ $parametros.="794=1280x1024 16bits".chr(13);
+ $parametros.="798=1600x1200 16bits".chr(13);
+ $parametros.="789=800x600 24bits".chr(13);
+ $parametros.="792=1024x768 24bits".chr(13);
+ $parametros.="795=1280x1024 24bits".chr(13);
+ $parametros.="799=1600x1200 24bits";
+
echo '<TD>'.HTMLCTESELECT($parametros,"resolucion","estilodesple","",$resolucion,100).'</TD>';
}
?>
</TR>
-*/
-?>
+
+<!--?> -->
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[7]?>&nbsp;</TH>
- <?if ($opcion==$op_eliminacion)
+ <th align=center>&nbsp;<?echo $TbMsg[7]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
echo '<TD >'.$comentarios.'&nbsp</TD>';
else
echo '<TD><TEXTAREA class="formulariodatos" name=comentarios rows=3 cols=55>'.$comentarios.'</TEXTAREA></TD>';
?>
- </TR>
+ </TR>
+ <tr>
+ <th colspan="2" align="center">&nbsp;<sup>*</sup> <?php echo $TbMsg["WARN_NETBOOT"]?>&nbsp;</th>
+ </tr>
</TABLE>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<BR>
diff --git a/admin/WebConsole/propiedades/propiedades_ordenadores.php b/admin/WebConsole/propiedades/propiedades_ordenadores.php
index ecc353b1..eccc54fa 100644
--- a/admin/WebConsole/propiedades/propiedades_ordenadores.php
+++ b/admin/WebConsole/propiedades/propiedades_ordenadores.php
@@ -17,6 +17,7 @@ include_once("../includes/HTMLSELECT.php");
include_once("../includes/HTMLCTESELECT.php");
include_once("../clases/AdoPhp.php");
include_once("../idiomas/php/".$idioma."/propiedades_ordenadores_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/avisos_".$idioma.".php");
//________________________________________________________________________________________________________
$opcion=0;
$opciones=array($TbMsg[0],$TbMsg[1],$TbMsg[2],$TbMsg[3]);
@@ -61,9 +62,15 @@ if ($opcion!=$op_alta){
<SCRIPT language="javascript" src="../jscripts/propiedades_ordenadores.js"></SCRIPT>
<SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT>
<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_ordenadores_'.$idioma.'.js"></SCRIPT>'?>
+ <script language=javascript>
+function abrir_ventana(URL){
+ window.open('../images/ver.php','Imagenes','scrollbars=yes,resizable=yes,width=950,height=640')
+}
+</script>
+
</HEAD>
<BODY>
-<FORM name="fdatos" action="../gestores/gestor_ordenadores.php" method="post">
+<FORM name="fdatos" action="../gestores/gestor_ordenadores.php" method="post" enctype="multipart/form-data">
<INPUT type=hidden name=opcion value="<? echo $opcion?>">
<INPUT type=hidden name=idordenador value="<? echo $idordenador?>">
<INPUT type=hidden name=grupoid value="<? echo $grupoid?>">
@@ -71,21 +78,33 @@ if ($opcion!=$op_alta){
<P align=center class=cabeceras><?echo $TbMsg[4]?><BR>
<SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN></P>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</TD>
- <?
+ <table align="center" border="0" cellPadding="1" cellSpacing="1" class="tabla_datos">
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[5]?> <sup>*</sup>&nbsp;</th>
+ <?php $fotomenu=$fotoordenador;
if ($opcion==$op_eliminacion)
echo '<TD>'.$nombreordenador.'</TD>';
else
echo '<TD><INPUT class="formulariodatos" name=nombreordenador type=text value="'.$nombreordenador.'"></TD>';
?>
- <TD colspan=2 valign=top align=left rowspan=3><IMG border=2 style="border-color:#63676b" src="../images/fotoordenador.gif"></TD>
- </TR>
+<td colspan="2" valign="top" align="left" rowspan="3">
+<img border="2" style="border-color:#63676b" src="<?php
+if ($fotoordenador=="")
+{
+$fotoordenador="../images/fotos/fotoordenador.gif";
+}else{
+$fotoordenador="../images/fotos/".$fotoordenador;
+}
+echo $fotoordenador?>">
+<br />(150X110)-(jpg - gif) ---- <?php echo $TbMsg[5091]?>
+<br />
+<input name="archivo" type="file" id="archivo" size="16" />
+</td>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</TD>
- <?
+ <th align="center">&nbsp;<?php echo $TbMsg[6]?> <sup>*</sup>&nbsp;</th>
+ <?php
if ($opcion==$op_eliminacion)
echo '<TD>'.$ip.'</TD>';
else
@@ -94,17 +113,51 @@ if ($opcion!=$op_alta){
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[7]?>&nbsp;</TD>
- <?
+ <th align="center">&nbsp;<?php echo $TbMsg[7]?> <sup>*</sup>&nbsp;</th>
+ <?php
if ($opcion==$op_eliminacion)
echo '<TD>'.$mac.'</TD>';
else
echo '<TD><INPUT class="formulariodatos" name=mac type=text value="'. $mac.'"></TD>';
?>
</TR>
+ <!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <TR>
+ <th align=center>&nbsp;<?echo $TbMsg[509]?>&nbsp;</th>
+ <?
+ if ($opcion==$op_eliminacion)
+ echo '<TD colspan=3>'.$fotoordenador.'</TD>';
+ else {
+ if ($fotoordenador=="")
+ $fotoordenador="../images/fotos/fotoordenador.gif";
+ $fotoordenador;
+
+ ?>
+ <TD colspan=3><SELECT class="formulariodatos" name="fotoordenador" >
+ <?php if($fotomenu==""){
+ echo '<option value="fotoordenador.gif"></option>';}else{
+ echo '<option value="'.$fotomenu.'">'.$fotomenu.'</option>';}
+ if ($handle = opendir("../images/fotos")) {
+ while (false !== ($entry = readdir($handle))) {
+ if ($entry != "." && $entry != "..") {?>
+
+ <option value="<? echo $entry ?>"><? echo $entry ?></option>
+ <?}
+ }
+ closedir($handle);
+ }
+ ?>
+ </SELECT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<a href="javascript:abrir_ventana('../images/ver.php')" onClick="MM_openBrWindow('../images/ver.php','Imagenes','scrollbars=yes,resizable=yes,width=950,height=640')"><? echo $TbMsg[5092] ?></a>
+ </TD>
+ <?
+ }
+ ?>
+
+ </TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[8]?>&nbsp;</TD>
+ <th align=center>&nbsp;<?echo $TbMsg[8]?>&nbsp;</th>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.TomaDato($cmd,$idcentro,'perfileshard',$idperfilhard,'idperfilhard','descripcion').'</TD>';
@@ -114,7 +167,7 @@ if ($opcion!=$op_alta){
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[10]?>&nbsp;</TD>
+ <th align=center>&nbsp;<?echo $TbMsg[10]?>&nbsp;</th>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.TomaDato($cmd,$idcentro,'repositorios',$idrepositorio,'idrepositorio','nombrerepositorio').'</TD>';
@@ -124,7 +177,7 @@ if ($opcion!=$op_alta){
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[11]?>&nbsp;</TD>
+ <th align=center>&nbsp;<?echo $TbMsg[11]?>&nbsp;</th>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.TomaDato($cmd,$idcentro,'menus',$idmenu,'idmenu','descripcion').'</TD>';
@@ -134,7 +187,7 @@ if ($opcion!=$op_alta){
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[9]?>&nbsp;</TD>
+ <th align=center>&nbsp;<?echo $TbMsg[9]?>&nbsp;</th>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.TomaDato($cmd,$idcentro,'procedimientos',$idprocedimiento,'idprocedimiento','descripcion').'&nbsp;</TD>';
@@ -144,7 +197,7 @@ if ($opcion!=$op_alta){
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[12]?>&nbsp;</TD>
+ <th align=center>&nbsp;<?echo $TbMsg[12]?>&nbsp;</th>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$cache.'</TD>';
@@ -176,8 +229,11 @@ if ($opcion!=$op_alta){
</tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <tr>
+ <th colspan="4" align="center">&nbsp;<sup>*</sup> <?php echo $TbMsg["WARN_NETBOOT"]?>&nbsp;</th>
+ </tr>
- </TABLE>
+ </table>
</FORM>
</DIV>
<?
@@ -191,7 +247,7 @@ include_once("../includes/opcionesbotonesop.php");
//
// Frame con la información de la configuración
echo '<DIV align=center>';
-echo '<IFRAME scrolling=yes height=170 width=90%
+echo '<IFRAME scrolling=auto height=500 width=90% frameborder=0
src="../principal/configuraciones.php?swp=1&idambito='.$idordenador.'&ambito='.$AMBITO_ORDENADORES.'"></IFRAME>';
echo '</DIV>';
//________________________________________________________________________________________________________
@@ -210,6 +266,7 @@ function TomaPropiedades($cmd,$id){
global $nombreordenador;
global $ip;
global $mac;
+ global $fotoordenador;
global $idperfilhard;
global $idrepositorio;
global $idmenu;
@@ -232,6 +289,7 @@ function TomaPropiedades($cmd,$id){
$idprocedimiento=$rs->campos["idproautoexec"];
$cache=$rs->campos["cache"];
$netiface=$rs->campos["netiface"];
+ $fotoordenador=$rs->campos["fotoord"]; //Creado para foto
$netdriver=$rs->campos["netdriver"];
$rs->Cerrar();
return(true);
diff --git a/admin/WebConsole/propiedades/propiedades_ordenadorestandar.php b/admin/WebConsole/propiedades/propiedades_ordenadorestandar.php
index b6dd3a3d..815670f6 100644
--- a/admin/WebConsole/propiedades/propiedades_ordenadorestandar.php
+++ b/admin/WebConsole/propiedades/propiedades_ordenadorestandar.php
@@ -119,9 +119,9 @@ if ($opcion!=$op_alta){
</TR>
<TR>
<TD width=20>&nbsp;</TD>
- <TD align=right><A href=#><IMG border=0 src="../images/boton_cancelar.gif" style="cursor:hand" onclick="cancelar()"></A></TD>
+ <TD align=right><A href=#><IMG border=0 src="../images/boton_cancelar_<? echo $idioma ?>.gif" style="cursor:hand" onclick="cancelar()"></A></TD>
<TD width=20></TD>
- <TD align=left ><A href=#><IMG border=0 src="../images/boton_confirmar.gif" style="cursor:hand" onclick="confirmar(<? echo $idaula?>)" ></A></TD>
+ <TD align=left ><A href=#><IMG border=0 src="../images/boton_confirmar_<? echo $idioma ?>.gif" style="cursor:hand" onclick="confirmar(<? echo $idaula?>)" ></A></TD>
<TD width=20>&nbsp;</TD>
</TR>
</TABLE>
diff --git a/admin/WebConsole/propiedades/propiedades_perfilhardwares.php b/admin/WebConsole/propiedades/propiedades_perfilhardwares.php
index ac1d5a74..cd2fe23f 100644
--- a/admin/WebConsole/propiedades/propiedades_perfilhardwares.php
+++ b/admin/WebConsole/propiedades/propiedades_perfilhardwares.php
@@ -11,8 +11,10 @@
include_once("../includes/ctrlacc.php");
include_once("../includes/opciones.php");
include_once("../includes/CreaComando.php");
+include_once("../includes/HTMLCTESELECT.php");
include_once("../clases/AdoPhp.php");
include_once("../idiomas/php/".$idioma."/propiedades_perfilhardwares_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/avisos_".$idioma.".php");
//________________________________________________________________________________________________________
$opcion=0;
$opciones=array($TbMsg[0],$TbMsg[1],$TbMsg[2],$TbMsg[3]);
@@ -21,7 +23,8 @@ $idperfilhard=0;
$descripcion="";
$comentarios="";
$grupoid=0;
-$ordenadores=0; // Número de ordenador que tienen este perfil
+$ordenadores=0; // Número de ordenadores que tienen este perfil
+$winboot="reboot"; // Método de arranque para Windows (por defecto, reboot).
if (isset($_GET["opcion"])) $opcion=$_GET["opcion"]; // Recoge parametros
if (isset($_GET["idperfilhard"])) $idperfilhard=$_GET["idperfilhard"];
@@ -38,54 +41,69 @@ if ($opcion!=$op_alta){
}
//________________________________________________________________________________________________________
?>
-<HTML>
-<TITLE>Administración web de aulas</TITLE>
-<HEAD>
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
- <LINK rel="stylesheet" type="text/css" href="../estilos.css">
- <SCRIPT language="javascript" src="../jscripts/propiedades_perfilhardwares.js"></SCRIPT>
- <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT>
- <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_perfilhardwares_'.$idioma.'.js"></SCRIPT>'?>
-</HEAD>
-<BODY>
-<DIV align=center>
-<FORM name="fdatos" action="../gestores/gestor_perfilhardwares.php" method="post">
- <INPUT type=hidden name=opcion value=<?=$opcion?>>
- <INPUT type=hidden name=idperfilhard value=<?=$idperfilhard?>>
- <INPUT type=hidden name=ordenadores value=<?=$ordenadores?>>
- <INPUT type=hidden name=grupoid value=<?=$grupoid?>>
- <P align=center class=cabeceras><?echo $TbMsg[4]?><BR>
- <SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN></P>
- <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos >
+<html>
+<title>Administración web de aulas</title>
+<head>
+ <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
+ <link rel="stylesheet" type="text/css" href="../estilos.css" />
+ <script language="javascript" src="../jscripts/propiedades_perfilhardwares.js"></script>
+ <script language="javascript" src="../jscripts/opciones.js"></script>
+ <?php echo '<script language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_perfilhardwares_'.$idioma.'.js"></script>'?>
+</head>
+<body>
+<div align="center">
+<form name="fdatos" action="../gestores/gestor_perfilhardwares.php" method="post">
+ <input type="hidden" name="opcion" value="<?=$opcion?>" />
+ <input type="hidden" name="idperfilhard" value="<?=$idperfilhard?>" />
+ <input type="hidden" name="ordenadores" value="<?=$ordenadores?>" />
+ <input type="hidden" name="grupoid" value="<?=$grupoid?>" />
+ <p align="center" class="cabeceras"><?echo $TbMsg["HARD_TITLE"]?><br />
+ <span align="center" class="subcabeceras"><? echo $opciones[$opcion]?></span></p>
+ <table align="center" border="0" cellPadding="1" cellSpacing="1" class="tabla_datos">
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</TD>
- <?if ($opcion==$op_eliminacion)
- echo '<TD style="width:215">'.$descripcion.'</TD>';
+ <tr>
+ <th align="center">&nbsp;<?echo $TbMsg["HARD_NAME"]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td style="width:215">'.$descripcion.'</td>';
else
- echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:215" type=text value="'.$descripcion.'"></TD>';?>
- <TD align=left rowspan=2><IMG border=3 style="border-color:#63676b" src="../images/aula.jpg"><br><center>&nbsp;Ordenadores:&nbsp;<? echo $ordenadores?></center></TD>
- </TR>
+ echo '<td><input class="formulariodatos" name="descripcion" style="width:215" type="text" value="'.$descripcion.'" /></td>'; ?>
+ <td align="left" rowspan="3"><img border="3" style="border-color:#63676b" src="../images/aula.jpg" /><br /> <?php echo $TbMsg["HARD_COMPUTERS"].": $ordenadores"?></td>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</TD>
- <?if ($opcion==$op_eliminacion)
- echo '<TD>'.$comentarios.'</TD>';
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg["HARD_COMMENTS"]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td>'.$comentarios.'</td>';
else
- echo '<TD><TEXTAREA class="formulariodatos" name=comentarios rows=3 cols=40>'.$comentarios.'</TEXTAREA></TD>';
+ echo '<td><textarea class="formulariodatos" name="comentarios" rows="3" cols="40">'.$comentarios.'</textarea></td>';
?>
- </TR>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- </TABLE>
-</FORM>
-</DIV>
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg["HARD_WINBOOT"]?> <sup>*</sup>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo "<td>$winboot</td>";
+ else {
+ $params = "reboot=".$TbMsg["HARD_REBOOT"].chr(13);
+ $params.= "kexec=".$TbMsg["HARD_KEXEC"];
+ echo "<td>".HTMLCTESELECT($params,"winboot","estilodesple","","$winboot",110)."</td>";
+ }
+ ?>
+ </tr>
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <tr>
+ <th colspan="3" align="center">&nbsp;<sup>*</sup> <?php echo $TbMsg["WARN_NETBOOT"]?>&nbsp;</th>
+ </tr>
+ </table>
+</form>
+</div>
<?
//________________________________________________________________________________________________________
include_once("../includes/opcionesbotonesop.php");
//________________________________________________________________________________________________________
?>
-</BODY>
-</HTML>
+</body>
+</html>
<?
//________________________________________________________________________________________________________
// Recupera los datos de un perfil hardware
@@ -98,10 +116,12 @@ function TomaPropiedades($cmd,$id)
global $descripcion;
global $comentarios;
global $ordenadores;
+ global $winboot;
$rs=new Recordset;
- $cmd->texto="SELECT perfileshard.*, count(*) as numordenadores FROM perfileshard
- INNER JOIN ordenadores ON ordenadores.idperfilhard=perfileshard.idperfilhard
- WHERE perfileshard.idperfilhard=".$id;
+ $cmd->texto="SELECT perfileshard.*, COUNT(*) AS numordenadores
+ FROM perfileshard
+ INNER JOIN ordenadores ON ordenadores.idperfilhard=perfileshard.idperfilhard
+ WHERE perfileshard.idperfilhard=".$id;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return(false); // Error al abrir recordset
$rs->Primero();
@@ -109,6 +129,7 @@ function TomaPropiedades($cmd,$id)
$descripcion=$rs->campos["descripcion"];
$comentarios=$rs->campos["comentarios"];
$ordenadores=$rs->campos["numordenadores"];
+ $winboot=$rs->campos["winboot"];
}
$rs->Cerrar();
return(true);
diff --git a/admin/WebConsole/propiedades/propiedades_usuarios.php b/admin/WebConsole/propiedades/propiedades_usuarios.php
index ecdb4072..8ba7762e 100644
--- a/admin/WebConsole/propiedades/propiedades_usuarios.php
+++ b/admin/WebConsole/propiedades/propiedades_usuarios.php
@@ -92,7 +92,7 @@ switch($idtipousuario){
<?if ($opcion==$op_eliminacion || ($opcion==$op_modificacion && $idtipousuario!=$SUPERADMINISTRADOR)){?>
<TD><?echo $usuario?>&nbsp&nbsp;<IMG src="<? echo $urlimg ?>"></TD>
<?}else{?>
- <TD><INPUT type=text class=cajatexto maxlength=10 name="usuario" style="width:100" value="<? echo $usuario?>">
+ <TD><INPUT type=text class=cajatexto name="usuario" style="width:100" value="<? echo $usuario?>">
<IMG src="<? echo $urlimg ?>">
<?}?>
@@ -103,7 +103,7 @@ switch($idtipousuario){
<?if ($opcion==$op_eliminacion || ($opcion==$op_modificacion && $idtipousuario!=$SUPERADMINISTRADOR)){?>
<TD><?echo $pasguor?></TD>
<?}else{?>
- <TD><INPUT type=text class=cajatexto maxlength=10 name="pasguor" style="width:100" value="<? echo $pasguor?>">
+ <TD><INPUT type=text class=cajatexto name="pasguor" style="width:100" value="<? echo $pasguor?>">
<?}?>
</TR>
<!-------------------------------------------------------------------------------------------------------------------------------------------------->
diff --git a/admin/WebConsole/varios/incorporaordenadores.php b/admin/WebConsole/varios/incorporaordenadores.php
index a9ed0163..b8e58bd5 100644
--- a/admin/WebConsole/varios/incorporaordenadores.php
+++ b/admin/WebConsole/varios/incorporaordenadores.php
@@ -12,6 +12,7 @@ include_once("../includes/ctrlacc.php");
include_once("../clases/AdoPhp.php");
include_once("../includes/CreaComando.php");
include_once("../idiomas/php/".$idioma."/incorporaordenadores_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/avisos_".$idioma.".php");
//________________________________________________________________________________________________________
$cmd=CreaComando($cadenaconexion);
if (!$cmd)
@@ -53,13 +54,14 @@ if(!empty($contenido)){ // Se ha introducido contenido en lugar de fichero
<P align=center class=cabeceras><?echo $TbMsg[0]?><BR>
<SPAN align=center class=subcabeceras><IMG src="../images/iconos/aula.gif">&nbsp;<?echo $TbMsg[1].":".$nombreaula ?></SPAN></P>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
-<table align=center class=tabla_datos border="0" cellpadding="0" cellspacing="1">
+<table align="center" class="tabla_datos" border="0" cellpadding="0" cellspacing="1">
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <tr>
- <th>&nbsp;<? echo $TbMsg[2]?>&nbsp;</th>
+ <tr>
+ <th>&nbsp;<?php echo $TbMsg[2]?>&nbsp;</th>
<td><textarea class="cajatexto" name="contenido" cols="70" rows="18"></textarea></td></tr>
+ <tr><th colspan="2">&nbsp;<?php echo $TbMsg["WARN_NETBOOT"]?>&nbsp;</th></tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
-</TABLE>
+</table>
</FORM>
<TABLE align=center>
<TR>
diff --git a/admin/WebConsole/varios/menucliente.php b/admin/WebConsole/varios/menucliente.php
index 7ab0284c..27a653b1 100644
--- a/admin/WebConsole/varios/menucliente.php
+++ b/admin/WebConsole/varios/menucliente.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -12,6 +12,7 @@ include_once("../includes/ctrlacc.php");
include_once("../clases/AdoPhp.php");
include_once("../includes/TomaDato.php");
include_once("../includes/CreaComando.php");
+include_once("../controlacceso.php");
include_once("../idiomas/php/".$idioma."/menucliente_".$idioma.".php");
//________________________________________________________________________________________________________
$cmd=CreaComando($cadenaconexion);
@@ -32,6 +33,22 @@ $UrlPagina=$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; // Url página
$UrlPagina=dirname($UrlPagina);
$UrlPaginaIconos=dirname($UrlPagina)."/images/iconos";
//________________________________________________________________________________________________________
+//agp
+$nombre_archivo = "/opt/opengnsys/log/clients/".$iph.".cache.txt";
+$gestor = fopen($nombre_archivo, 'r');
+$contenidofichero = fread($gestor, filesize($nombre_archivo));
+fclose($gestor);
+if (! empty ($contenidofichero)) {
+ $cmd->texto="UPDATE ordenadores_particiones
+ SET cache='".$contenidofichero."'
+ WHERE idordenador=(SELECT idordenador FROM ordenadores
+ WHERE ip='".$iph."') AND
+ idsistemafichero=(SELECT idsistemafichero FROM sistemasficheros
+ WHERE descripcion='CACHE')";
+ $resul=$cmd->Ejecutar();
+}
+//agp
+//________________________________________________________________________________________________________
$rsmenu=RecuperaMenu($cmd,$iph); // Recupera un recordset con los datos del m en
if(!empty($rsmenu)){
switch($tip){
@@ -87,6 +104,7 @@ else{
}
include_once("/opt/opengnsys/log/clients/".$iph.".info.html");
echo $codeHtml;
+
?>
</body>
</html>
@@ -229,3 +247,4 @@ function tomaIP(){
return($ipcliente);
}
?>
+
diff --git a/client/boot-tools/boottoolsfunctions.lib b/client/boot-tools/boottoolsfunctions.lib
index c8fef78c..b1f00d05 100644..100755
--- a/client/boot-tools/boottoolsfunctions.lib
+++ b/client/boot-tools/boottoolsfunctions.lib
@@ -332,28 +332,24 @@ ALLOWOPTIONS 1
MENU TITLE OpenGnsys ${NAMEISOCLIENT}
-LABEL gpxe
-MENU LABEL gpxe
-KERNEL /clonezilla/live/vmlinuz1
-APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
LABEL 0
-MENU LABEL ogClient vga irqpool acpi ogdebug ip:none
+MENU LABEL ogLive vga irqpool acpi ogdebug ip:none
KERNEL /ogclient/linuxISO
APPEND initrd=/ogclient/oginitrd.img ro vga=788 irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none
LABEL 1
-MENU LABEL ogClient irqpoll acpi ip:none
+MENU LABEL ogLive irqpoll acpi ip:none
KERNEL /ogclient/linuxISO
APPEND initrd=/ogclient/oginitrd.img ro irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=none
LABEL 2
-MENU LABEL ogClient acpi debug ip=dhcp
+MENU LABEL ogLive acpi debug ip=dhcp
KERNEL /ogclient/linuxISO
APPEND initrd=/ogclient/oginitrd.img ro acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=dhcp
LABEL 3
-MENU LABEL ogClient ip=dhcp
+MENU LABEL ogLive ip=dhcp
KERNEL /ogclient/linuxISO
APPEND initrd=/ogclient/oginitrd.img ro acpi=off boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=dhcp
@@ -377,6 +373,11 @@ KERNEL gpxe.pxe
label 8
MENU LABEL Network boot via gPXE iso
KERNEL gpxe.iso
+
+label 9
+MENU LABEL gpxe
+KERNEL /clonezilla/live/vmlinuz1
+APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
FIN
diff --git a/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks b/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
index afe21be6..e3c25677 100755
--- a/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
+++ b/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
@@ -51,7 +51,6 @@ copy_exec /bin/lsmod
#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine
#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine
-#rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl*
manual_add_modules cifs
manual_add_modules smbfs
manual_add_modules atl1e
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
index 35b24f9b..89cd2c65 100644
--- a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
@@ -156,8 +156,9 @@ ogPostConfigureFS()
echo "order hosts,bind" > /etc/host.conf
echo "multi on" >> /etc/host.conf
- #configuramos el dns
- echo "nameserver $ogdns" > /etc/resolv.conf
+ #configuramos el dns
+ #echo "nameserver $ogdns" > /etc/resolv.conf
+ echo "nameserver $ogdns" > /etc/resolvconf/resolv.conf.d/tail
# configuramos el /etc/networks
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit b/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
index 95efe282..61c68b96 100755
--- a/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
@@ -70,7 +70,13 @@ mountroot ()
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N "
[ $? == 0 ] && sh || echo " "
- ogConfigureNetworking
+ if [ -n "$oglive" ]
+ then
+ while !(ping -c 1 $oglive &> /dev/null)
+ do
+ ogConfigureNetworking
+ done
+ fi
log_success_msg "config networking"
ogConfigureLoopback
log_success_msg "config loopback"
@@ -85,7 +91,10 @@ mountroot ()
ogYesNo --timeout 5 --default no "Stop before check updating initrd: y/N "
[ $? == 0 ] && sh || echo " "
fi
- [ "$ogupdateinitrd" == "true" ] && ogUpdateInitrd
+ # Actualizar Initrd si se solicita o si no se corresponde con su kernel.
+ if [ "$ogupdateinitrd" == "true" -o ! -d /lib/modules/$(uname -r) ]; then
+ ogUpdateInitrd
+ fi
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect and merging the rootfs -ogLive- with $OGSERVERLIVE: y/N "
[ $? == 0 ] && sh || echo " "
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh
index edd0dc00..edd0dc00 100644..100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
index 21b7a54d..13f4703e 100644..100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
@@ -6,13 +6,13 @@
find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
apt-get -y --force-yes install subversion
-export SVNURL="http://opengnsys.es/svn/branches/version1.0/client/"
-VERSIONSVN=$(LANG=C svn info $SVNURL | awk '/Revision:/ {print "r"$2}')
-
+#export SVNURL="http://opengnsys.es/svn/branches/version1.0/client/"
+#VERSIONSVN=$(LANG=C svn info $SVNURL | awk '/Revision:/ {print "r"$2}')
+VERSIONSVN=$(cat /tmp/versionsvn.txt)
VERSIONBOOTTOOLS=ogLive
-NAMEISOCLIENT="/tmp/opengnsys_info_rootfs"
-NAMEHOSTCLIENT="/tmp/opengnsys_chroot"
+NAMEISOCLIENTFILE="/tmp/opengnsys_info_rootfs"
+NAMEHOSTCLIENTFILE="/tmp/opengnsys_chroot"
SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/client/boot-tools
SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared
@@ -115,10 +115,9 @@ cp -prv ${SVNOG2}/job_executer $OGCLIENTMOUNT/opt/opengnsys/bin/
cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin
-echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${OSRELEASE}-${VERSIONSVN} > $NAMEISOCLIENT
-echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > $NAMEHOSTCLIENT
-echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > /etc/debian_chroot
-echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > /etc/opengnsys_chroot
+echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${OSRELEASE}-${VERSIONSVN} > $NAMEISOCLIENTFILE
+echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > $NAMEHOSTCLIENTFILE
+
history -c
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
index 8d0cede9..ca721c22 100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
@@ -29,11 +29,32 @@ gdebi -n /var/cache/apt/archivesOG/xvesa.deb
echo "partclone"
gdebi -n /var/cache/apt/archivesOG/partclone_0.2.38_i386.deb
-#echo "busybox"
-#gdebi -n /var/cache/apt/archivesOG/busybox_1.17.1-10ubuntu1_i386.deb
-
-echo "busybox-static"
+echo "busybox-static 1.17.1 en rootfs"
+#echo "busybox-static 1.17.1 en ogLive rootfs permite reboot y poweroff
+apt-get remove -y busybox-static
gdebi -n /var/cache/apt/archivesOG/busybox-static_1.17.1-10ubuntu1_i386.deb
+cp /bin/busybox /bin/busyboxOLD
+/bin/busyboxOLD
+echo "busybox-static 1.18.5 en initrd"
+apt-get install -y busybox-static
+cp /bin/busybox /bin/busyboxNEW
+/bin/busyboxNEW
+# en scripts reboot y poweroff hacer llamada a busyboxOLD reboot|poweroff
+
+
+
+#gpt
+apt-get install -y uuid-dev libicu-dev libpopt-dev libpopt0 ncurses-base libncurses5-dev
+wget -O download.tgz http://sourceforge.net/projects/gptfdisk/files/gptfdisk/0.8.2/gptfdisk-0.8.2.tar.gz/download
+mkdir download
+tar xzvf download.tgz -C download
+cd download/gptfdisk-0.8.2
+make
+cp sgdisk gdisk fixparts cgdisk /sbin
+cd ..
+rm -fr download*
+
+
history -c \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows
index 41824f18..41824f18 100644..100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic
index e65da70e..358b76ed 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic
@@ -4,11 +4,14 @@ install man-db
install fbset
install gdebi-core
install bash-static
-#install busybox-static #la version en oneiric no incluye el reboot y poweroff -> ver compilacion software
+#La gestion del busybox-static (incompatibilidades reboot y poweroff) en boottoolSoftwareCompile.sh
+#install busybox-static
install console-data
install locales
install lshw
install gawk
install subversion
install python-openssl
-install python \ No newline at end of file
+install python
+install dmidecode
+install hwinfo \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning
index 9eda4b6b..2585f56f 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning
@@ -13,4 +13,5 @@ install reglookup
install libparse-win32registry-perl
install grokevt
install libhivex0
-install libhivex-bin \ No newline at end of file
+install libhivex-bin
+install rsync \ No newline at end of file
diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib
index 2b8e1a3a..7a858fac 100755
--- a/client/engine/Boot.lib
+++ b/client/engine/Boot.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Boot
#@class Boot
#@brief Funciones para arranque y post-configuración de sistemas de archivos.
-#@version 0.9
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -26,11 +26,14 @@
#@version 0.9 - Adaptación para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-11
+#@version 1.0.4 - Soporta modo de arranque Windows (parámetro de inicio "winboot").
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-04-12
#*/ ##
function ogBoot ()
{
# Variables locales.
-local PART TYPE MNTDIR PARAMS KERNEL INITRD APPEND FILE LOADER
+local PART TYPE MNTDIR PARAMS KERNEL INITRD APPEND FILE LOADER f
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -58,6 +61,7 @@ case "$TYPE" in
[ -e "$MNTDIR/etc" ] && APPEND=$(echo $APPEND | awk -v P="$PART " '{sub (/root=[-+=_/a-zA-Z0-9]* /,"root="P);print}')
# Configurar kernel Linux con los parámetros leídos de su GRUB.
kexec -l "${MNTDIR}${KERNEL}" --append="$APPEND" --initrd="${MNTDIR}${INITRD}"
+ kexec -e &
;;
NTFS|HNTFS|FAT32|HFAT32)
# Compruebar si hay un cargador de Windows.
@@ -66,10 +70,18 @@ case "$TYPE" in
[ -n "$FILE" ] && LOADER="$f"
done
[ -z "$LOADER" ] && ogRaiseError $OG_ERR_NOTOS && return $?
- # Activar la partición y copiar Grub4DOS.
+ # Activar la partición.
ogSetPartitionActive $1 $2
- #FIXME: activar seguimiento inicio sesion Windows con grub4dos
- if [ "$(ogGetOsType $1 $2)" == "Windows" ]; then
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet001\services\Cliente Opengnsys\Start' '2'
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet002\services\Cliente Opengnsys\Start' '2'
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet003\services\Cliente Opengnsys\Start' '2'
+ if [ "$winboot" == "kexec" ]; then
+ # Modo de arranque en caliente (con kexec).
+ cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen)
+ kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init"
+ kexec -e &
+ else
+ # Modo de arranque por reinicio (con reboot).
dd if=/dev/zero of=${MNTDIR}/ogboot.me bs=1024 count=3
dd if=/dev/zero of=${MNTDIR}/ogboot.firstboot bs=1024 count=3
dd if=/dev/zero of=${MNTDIR}/ogboot.secondboot bs=1024 count=3
@@ -77,9 +89,6 @@ case "$TYPE" in
ogHiveNTRunMachine "cmd /c del c:\ogboot.*" ogcleanboot
ogUpdateHiveWindows
reboot
- else
- cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen)
- kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init"
fi
;;
*) ogRaiseError $OG_ERR_PARTITION "$1, $2"
@@ -87,8 +96,7 @@ case "$TYPE" in
;;
esac
-# Arrancar.
-kexec -e &
+# Parar Browser para evitar cuelgues.
pkill browser
}
diff --git a/client/engine/Cache.lib b/client/engine/Cache.lib
index 50cd01de..118bc65b 100755
--- a/client/engine/Cache.lib
+++ b/client/engine/Cache.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Cache
#@class Cache
#@brief Funciones para gestión de la caché local de disco.
-#@version 0.9.1
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -24,40 +24,66 @@
#@version 0.9.2 - Corrección definición de límites.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010/06/01
+#@version 1.0.4 - Soporte para discos GPT.
+#@author Universidad de Huelva
+#@date 2012/03/13
#*/ ##
function ogCreateCache ()
{
# Variables locales.
-local DISK PART SECTORS CYLS START END SIZE MINSIZE MAXSIZE ENDPART3
+local FINDCACHE NDSK PART DISK START END ENDPREVPART SIZE MINSIZE MAXSIZE PTTYPE ID
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_partsize" "$FUNCNAME 10000000"
return
fi
-# Error si no se recibe 1 parámetro.
+# Error si no se recibe 1 parámetro que sea un número entero.
[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+[[ $1 =~ ([0-9]*) ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $?
-DISK=$(ogDiskToDev 1) || return $?
-PART="4"
-SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions)
-CYLS=$(sfdisk -g $DISK | cut -f2 -d" ")
-END=$[SECTORS/CYLS*CYLS-1] # Sector final del disco
-SIZE=$(echo $1|awk '{print $0*2}') # En sectores de 512 B.
+FINDCACHE="1 4" # Partición de caché (ndisco npart).
+NDSK=${FINDCACHE% *}
+PART=${FINDCACHE#* }
+DISK=$(ogDiskToDev $NDSK) || return $?
+END=$[$(ogGetLastSector $NDSK 2>/dev/null)] # Sector final del disco.
+SIZE=$[$1*2] # Tamaño en sectores de 512 B.
START=$[END-SIZE+1]
-ENDPART3=$(sfdisk -uS -l $DISK | awk -v P="${DISK}3" '{if ($1==P) print $3}')
-# Error si tamaño no está entre límites permitidos o si se solapa con la partición 3.
-MINSIZE=100000 # Error de formateo si tamaño < 50 MB.
+ENDPREVPART=$[$(ogGetLastSector $NDSK $[PART-1] 2>/dev/null)]
+# Error si tamaño no está entre límites permitidos o si se solapa con la partición anterior.
+MINSIZE=25000 # Error de formateo si tamaño < 50 MB.
MAXSIZE=$[END/2] # No permitir tamaño > mitad del disco.
-if [ $SIZE -lt $MINSIZE -o $SIZE -gt $MAXSIZE -o $START -le $ENDPART3 ]; then
+if [ $SIZE -lt $MINSIZE -o $SIZE -gt $MAXSIZE -o $START -le $ENDPREVPART ]; then
ogRaiseError $OG_ERR_FORMAT "$1" || return $?
fi
# Desmontar todos los sistemas de archivos del disco.
ogUnmountAll 1 2>/dev/null
-# Si la tabla de particiones no es valida, volver a generarla.
-[ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
# Definir particiones y notificar al kernel.
-sfdisk -f $DISK -uS -N$PART <<<"$START,$SIZE,ca" 2>/dev/null && partprobe
+# En el caso de ser disco GPT, de momento se borra la particion y se vuelve a crear,
+# por lo que se pierden los datos.
+PTTYPE=$(ogGetPartitionTableType $NDSK)
+if [ -z "$PTTYPE" ]; then
+ PTTYPE="MSDOS" # Por defecto para discos vacíos.
+ ogCreatePartitionTable $NDSK $PTTYPE
+fi
+case "$(ogGetPartitionTableType $NDSK)" in
+ GPT)
+ # Si la tabla de particiones no es valida, volver a generarla.
+ [ ! $(sgdisk -p $DISK 2>&1 >/dev/null) ] || echo -e "2\nw\nY\n" | gdisk $DISK
+ # Si existe la cache se borra previamente
+ [ -n $(ogFindCache) && ogDeleteCache
+ # Capturamos el codigo de particion GPT para cache
+ ID=$(ogTypeToId CACHE GPT)
+ sgdisk $DISK -n$PART:$START:$END -c$PART:CACHE -t$PART:$ID 2>/dev/null && partprobe
+ ;;
+ MSDOS)
+ # Si la tabla de particiones no es valida, volver a generarla.
+ [ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
+ # Definir particiones y notificar al kernel.
+ ID=$(ogTypeToId CACHE MSDOS)
+ sfdisk -f $DISK -uS -N$PART <<<"$START,$SIZE,$ID" 2>/dev/null && partprobe
+ ;;
+esac
}
@@ -70,6 +96,9 @@ sfdisk -f $DISK -uS -N$PART <<<"$START,$SIZE,ca" 2>/dev/null && partprobe
#@version 0.91 - Definición de caché local.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010/03/11
+#@version 1.0.4 - Soporte para discos GPT.
+#@author Universidad de Huelva
+#@date 2012/03/13
#*/ ##
function ogDeleteCache ()
{
@@ -87,10 +116,19 @@ DISK=$(ogDiskToDev $NDISK)
# Desmontar todos los sistemas de archivos del disco.
ogUnmountAll $NDISK 2>/dev/null
-# Si la tabla de particiones no es valida, volver a generarla.
-[ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
-# Eliminar (poner a 0) la partición de caché.
-sfdisk -f $DISK -N$NPART <<<"0,0,0" 2>/dev/null && partprobe
+case "$(ogGetPartitionTableType $1)" in
+ GPT)
+ # Si la tabla de particiones no es valida, volver a generarla.
+ [ ! $(sgdisk -p $DISK 2>&1 >/dev/null) ] || echo -e "2\nw\nY\n" | gdisk $DISK
+ sgdisk $DISK -d$NPART 2>/dev/null && partprobe
+ ;;
+ MSDOS)
+ # Si la tabla de particiones no es valida, volver a generarla.
+ [ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
+ # Eliminar (poner a 0) la partición de caché.
+ sfdisk -f $DISK -N$NPART <<<"0,0,0" 2>/dev/null && partprobe
+ ;;
+esac
# Borrar etiqueta de la caché.
rm -f /dev/disk/by-label/CACHE
}
@@ -123,7 +161,7 @@ fi
# Obtener el sistema de archivos etiquetado con "CACHE".
PART=$(realpath /dev/disk/by-label/CACHE 2>/dev/null)
# Si no, obtener la 1ª partición marcada como de tipo caché.
-PART=${PART:-$(sfdisk -l | awk '$6~/ca|a7/ {print $1}')}
+PART=${PART:-$(sfdisk -l 2>/dev/null | awk '$6~/ca|a7/ {print $1}')}
PART=${PART%% *}
ogDevToDisk $PART 2>/dev/null
@@ -160,10 +198,7 @@ DEV=$(ogDiskToDev $DEV) || return $?
# Formatear sistema de ficheros.
ogUnmountCache 2>/dev/null
- # Orden para formateo Ext4
mkfs.ext4 -q -F $DEV -L "CACHE" -O extent,large_file 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
- # Orden para formateo Reiser 3
- #mkfs.reiserfs -f $DEV -l "CACHE" 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
# Crear estructura básica.
MNTDIR=$(ogMountCache)
mkdir -p $MNTDIR/$OGIMG
@@ -264,7 +299,6 @@ if [ "$*" == "help" ]; then
fi
ogMountFs $(ogFindCache) 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "$MSG_NOCACHE" || return $?
-
}
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib
index fbedc66d..f9031d55 100755
--- a/client/engine/Disk.lib
+++ b/client/engine/Disk.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Disk
#@class Disk
#@brief Funciones para gestión de discos y particiones.
-#@version 0.9
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -16,8 +16,9 @@
#@param str_parttype mnemónico del tipo de partición
#@param int_partsize tamaño de la partición (en KB)
#@return (nada, por determinar)
-#@exception OG_ERR_FORMAT formato incorrecto.
-#@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo).
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@exception OG_ERR_NOTFOUND disco o partición no detectado (no es un dispositivo).
+#@exception OG_ERR_PARTITION error en partición o en tabla de particiones.
#@attention El nº de partición se indica por el orden de los párametros \c parttype:partsize
#@attention Pueden definirse particiones vacías de tipo \c EMPTY
#@attention No puede definirse partición de cache y no se modifica si existe.
@@ -29,11 +30,14 @@
#@version 0.9.1 - Corrección del redondeo del tamaño del disco.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010/03/09
+#@version 1.0.4 - Llamada a función específica para tablas GPT.
+#@author Universidad de Huelva
+#@date 2012/03/30
#*/ ##
function ogCreatePartitions ()
{
# Variables locales.
-local ND DISK PART SECTORS CYLS START SIZE TYPE CACHEPART CACHESIZE EXTSTART EXTSIZE tmpsfdisk
+local ND DISK PTTYPE PART SECTORS START SIZE TYPE CACHEPART CACHESIZE EXTSTART EXTSIZE tmpsfdisk
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk str_parttype:int_partsize ..." \
@@ -46,14 +50,20 @@ fi
# Nº total de sectores, para evitar desbordamiento (evitar redondeo).
ND="$1"
DISK=$(ogDiskToDev "$ND") || return $?
-SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions)
-CYLS=$(sfdisk -g $DISK | cut -f2 -d" ")
-SECTORS=$[SECTORS/CYLS*CYLS-1]
+PTTYPE=$(ogGetPartitionTableType $1)
+PTTYPE=${PTTYPE:-"MSDOS"} # Por defecto para discos vacíos.
+case "$PTTYPE" in
+ GPT) ogCreateGptPartitions "$@"
+ return $? ;;
+ MSDOS) ;;
+ *) ogRaiseError $OG_ERR_PARTITION "$PTTYPE"
+ return $? ;;
+esac
+SECTORS=$(ogGetLastSector $1)
# Se recalcula el nº de sectores del disco 1, si existe partición de caché.
CACHEPART=$(ogFindCache 2>/dev/null)
[ "$ND" = "${CACHEPART% *}" ] && CACHESIZE=$(ogGetCacheSize 2>/dev/null | awk '{print $0*2}')
[ -n "$CACHESIZE" ] && SECTORS=$[SECTORS-CACHESIZE]
-ENDPART3=$(sfdisk -uS -l $DISK | awk -v P="${DISK}3" '{if ($1==P) print $3}')
# Sector de inicio (la partición 1 empieza en el sector 63).
START=63
PART=1
@@ -77,7 +87,7 @@ while [ $# -gt 0 ]; do
TYPE="${1%%:*}"
SIZE="${1#*:}"
# Obtener identificador de tipo de partición válido.
- ID=$(ogFsToId "$TYPE")
+ ID=$(ogTypeToId "$TYPE" MSDOS)
[ "$TYPE" != "CACHE" -a -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$TYPE" || return $?
# Comprobar tamaño numérico y convertir en sectores de 512 B.
[[ "$SIZE" == *([0-9]) ]] || ogRaiseError $OG_ERR_FORMAT "$SIZE" || return $?
@@ -121,7 +131,7 @@ ogUnmountAll $ND 2>/dev/null
[ -n "$CACHESIZE" ] && ogUnmountCache 2>/dev/null
# Si la tabla de particiones no es valida, volver a generarla.
-[ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
+ogCreatePartitionTable $ND
# Definir particiones y notificar al kernel.
sfdisk -f $DISK < $tmpsfdisk 2>/dev/null && partprobe $DISK
rm -f $tmpsfdisk
@@ -130,6 +140,210 @@ rm -f $tmpsfdisk
#/**
+# ogCreateGptPartitions int_ndisk str_parttype:int_partsize ...
+#@brief Define el conjunto de particiones de un disco GPT
+#@param int_ndisk nº de orden del disco
+#@param str_parttype mnemónico del tipo de partición
+#@param int_partsize tamaño de la partición (en KB)
+#@return (nada, por determinar)
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@exception OG_ERR_NOTFOUND disco o partición no detectado (no es un dispositivo).
+#@exception OG_ERR_PARTITION error en partición o en tabla de particiones.
+#@attention El nº de partición se indica por el orden de los párametros \c parttype:partsize
+#@attention Pueden definirse particiones vacías de tipo \c EMPTY
+#@attention No puede definirse partición de caché y no se modifica si existe.
+#@note Requisitos: sfdisk, parted, partprobe, awk
+#@todo Definir atributos (arranque, oculta) y tamaños en MB, GB, etc.
+#@version 1.0.4 - Primera versión para OpenGnSys
+#@author Universidad de Huelva
+#@date 2012/03/30
+#*/ ##
+function ogCreateGptPartitions ()
+{
+# Variables locales.
+local ND DISK PART SECTORS ALIGN START SIZE TYPE CACHEPART CACHESIZE DELOPTIONS OPTIONS
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk str_parttype:int_partsize ..." \
+ "$FUNCNAME 1 NTFS:10000000 EXT3:5000000 LINUX-SWAP:1000000"
+ return
+fi
+# Error si no se reciben menos de 2 parámetros.
+[ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Nº total de sectores, para evitar desbordamiento (evitar redondeo).
+ND="$1"
+DISK=$(ogDiskToDev "$ND") || return $?
+# Se calcula el ultimo sector del disco (total de sectores usables)
+SECTORS=$(ogGetLastSector $1)
+[ "$ND" = "${CACHEPART% *}" ] && CACHESIZE=$(ogGetCacheSize 2>/dev/null | awk '{print $0*2}')
+[ -n "$CACHESIZE" ] && SECTORS=$[SECTORS-CACHESIZE]
+# Si el disco es GPT empieza en el sector 2048 por defecto, pero podria cambiarse
+ALIGN=$(sgdisk -D $DISK 2>/dev/null)
+START=$ALIGN
+PART=1
+
+# Leer parámetros con definición de particionado.
+shift
+
+while [ $# -gt 0 ]; do
+ # Si PART es la cache, nos la saltamos y seguimos con el siguiente numero para conservar los datos de la partición de caché.
+ if [ "$ND $PART" == "$CACHEPART" -a -n "$CACHESIZE" ]; then
+ PART=$[PART+1]
+ fi
+ # Leer formato de cada parámetro - Tipo:Tamaño
+ TYPE="${1%%:*}"
+ SIZE="${1#*:}"
+ # Error si la partición es extendida (no válida en discos GPT).
+ if [ "$TYPE" == "EXTENDED" ]; then
+ ogRaiseError $OG_ERR_PARTITION "EXTENDED"
+ return $?
+ fi
+ # Comprobar si existe la particion actual, capturamos su tamaño para ver si cambio o no
+ PARTSIZE=$(ogGetPartitionSize $ND $PART 2>/dev/null)
+ # En sgdisk no se pueden redimensionar las particiones, es necesario borrarlas y volver a crealas
+ [ $PARTSIZE ] && DELOPTIONS="$DELOPTIONS -d$PART"
+ # Creamos la particion
+ # Obtener identificador de tipo de partición válido.
+ ID=$(ogTypeToId "$TYPE" GPT)
+ [ "$TYPE" != "CACHE" -a -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$TYPE" || return $?
+ # Comprobar tamaño numérico y convertir en sectores de 512 B.
+ [[ "$SIZE" == *([0-9]) ]] || ogRaiseError $OG_ERR_FORMAT "$SIZE" || return $?
+ SIZE=$[SIZE*2]
+ # SIZE debe ser múltiplo de ALIGN, si no gdisk lo mueve automáticamente.
+ DIV=$[$SIZE/$ALIGN]
+ SIZE=$[$DIV*$ALIGN]
+ # En el caso de que la partición sea EMPTY no se crea nada
+ if [ "$TYPE" != "EMPTY" ]; then
+ OPTIONS="$OPTIONS -n$PART:$START:+$SIZE -t$PART:$ID "
+ fi
+ START=$[START+SIZE]
+ # Error si se supera el nº total de sectores.
+ [ $START -le $SECTORS ] || ogRaiseError $OG_ERR_FORMAT "$[START/2] > $[SECTORS/2]" || return $?
+ PART=$[PART+1]
+ shift
+done
+
+# Desmontar los sistemas de archivos del disco antes de realizar las operaciones.
+ogUnmountAll $ND 2>/dev/null
+[ -n "$CACHESIZE" ] && ogUnmountCache 2>/dev/null
+
+# Si la tabla de particiones no es valida, volver a generarla.
+ogCreatePartitionTable $ND
+# Definir particiones y notificar al kernel.
+# Borramos primero las particiones y luego creamos las nuevas
+sgdisk $DELOPTIONS $OPTIONS $DISK 2>/dev/null && partprobe $DISK
+[ -n "$CACHESIZE" ] && ogMountCache 2>/dev/null
+}
+
+
+#/**
+# ogCreatePartitionTable int_ndisk [str_tabletype]
+#@brief Genera una tabla de particiones en caso de que no sea valida, si es valida no hace nada.
+#@param int_ndisk nº de orden del disco
+#@param str_tabletype tipo de tabla de particiones (opcional)
+#@return (por determinar)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
+#@note tabletype: { MSDOS, GPT }
+#@note Requisitos: sfdisk, sgdisk
+#@version 1.0.4 - Primera versión compatible con OpenGNSys.
+#@author Universidad de Huelva
+#@date 2012/03/06
+#*/ ##
+function ogCreatePartitionTable ()
+{
+# Variables locales.
+local DISK PTTYPE CREATE CREATEPTT
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME int_ndisk [str_partype]" \
+ "$FUNCNAME 1 GPT" "$FUNCNAME 1"
+ return
+fi
+# Error si no se reciben 1 o 2 parámetros.
+case $# in
+ 1) CREATEPTT="" ;;
+ 2) CREATEPTT="$2" ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ return $? ;;
+esac
+
+# Capturamos el tipo de tabla de particiones actual
+DISK=$(ogDiskToDev $1) || return $?
+PTTYPE=$(ogGetPartitionTableType $1)
+PTTYPE=${PTTYPE:-"MSDOS"} # Por defecto para discos vacíos.
+CREATEPTT=${CREATEPTT:-"$PTTYPE"}
+
+# Si la tabla actual y la que se indica son iguales, se comprueba si hay que regenerarla.
+if [ "$CREATEPTT" == "$PTTYPE" ]; then
+ case "$PTTYPE" in
+ GPT) [ ! $(sgdisk -p $DISK 2>&1 >/dev/null) ] || CREATE="GPT" ;;
+ MSDOS) [ $(parted -s $DISK print >/dev/null) ] || CREATE="MSDOS" ;;
+ esac
+else
+ CREATE="$CREATEPTT"
+fi
+# Dependiendo del valor de CREATE, creamos la tabla de particiones en cada caso.
+case "$CREATE" in
+ GPT)
+ # Si es necesario crear una tabla GPT pero la actual es MSDOS
+ if [ "$PTTYPE" == "MSDOS" ]; then
+ sgdisk -g $DISK
+ else
+ echo -e "2\nw\nY\n" | gdisk $DISK
+ fi
+ partprobe $DISK 2>/dev/null
+ ;;
+ MSDOS)
+ # Si es necesario crear una tabla MSDOS pero la actual es GPT
+ if [ "$PTTYPE" == "GPT" ]; then
+ sgdisk -Z $DISK
+ fi
+ fdisk $DISK <<< "w"
+ partprobe $DISK 2>/dev/null
+ ;;
+esac
+}
+
+
+#/**
+# ogDeletePartitionTable ndisk
+#@brief Borra la tabla de particiones del disco.
+#@param int_ndisk nº de orden del disco
+#@return la informacion propia del fdisk
+#@version 0.1 - Integracion para OpenGnSys
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@date 2008/10/27
+#@version 1.0.4 - Adaptado para su uso con discos GPT
+#@author Universidad de Huelva
+#@date 2012/03/13
+#*/ ##
+function ogDeletePartitionTable ()
+{
+# Variables locales.
+local DISK
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME int_ndisk" "$FUNCNAME 1"
+ return
+fi
+# Error si no se reciben 1 parámetros.
+[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Obteniendo Identificador linux del disco.
+DISK=$(ogDiskToDev $1) || return $?
+# Crear una tabla de particiones vacía.
+case "$(ogGetPartitionTableType $1)" in
+ GPT) sgdisk -o $DISK ;;
+ MSDOS) echo -ne "o\nw" | fdisk $DISK ;;
+esac
+}
+
+
+#/**
# ogDevToDisk path_device
#@brief Devuelve el nº de orden de dicso (y partición) correspondiente al nombre de fichero de dispositivo.
#@param path_device Camino del fichero de dispositivo.
@@ -251,50 +465,111 @@ esac
#/**
# ogFsToId str_fstype
-#@brief Devuelve el identificador de partición correspondiente a un tipo de sistema de archivos.
-#@param str_fstype mnemónico de tipo de sistema de archivos
-#@return int_idpart nº identificador de tipo de partición.
+#@see ogTypeToId
+#*/ ##
+function ogFsToId ()
+{
+ogTypeToId "$@"
+}
+
+
+#/**
+# ogTypeToId str_parttype str_tabletype
+#@brief Devuelve el identificador correspondiente a un tipo de partición.
+#@param str_parttype mnemónico de tipo de partición.
+#@param str_tabletype mnemónico de tipo de tabla de particiones (MSDOS por defecto).
+#@return int_idpart identificador de tipo de partición.
#@exception OG_ERR_FORMAT Formato incorrecto.
+#@note tabletype = { MSDOS, GPT }
#@version 0.1 - Integracion para Opengnsys - EAC: TypeFS () en ATA.lib
#@author Antonio J. Doblas Viso, Universidad de Malaga
#@date 2008/10/27
#@version 0.9 - Primera version para OpenGNSys
#@author Ramon Gomez, ETSII Universidad Sevilla
#@date 2009-12-14
+#@version 1.0.4 - Soportar discos GPT (sustituye a ogFsToId).
+#@author Universidad de Huelva
+#@date 2012/03/30
#*/ ##
-function ogFsToId ()
+function ogTypeToId ()
{
# Variables locales
-local ID
+local PTTYPE ID
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME str_fstype" "$FUNCNAME EXT3 => 83"
+ ogHelp "$FUNCNAME" "$FUNCNAME str_parttype [str_tabletype]" \
+ "$FUNCNAME LINUX => 83" \
+ "$FUNCNAME LINUX MSDOS => 83"
return
fi
-# Error si no se recibe 1 parámetro.
-[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Error si no se reciben 2 parámetro.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Asociar id. de partición para su mnemónico de sistema de archivos.
-case "$1" in
- EMPTY) ID=0 ;;
- FAT12) ID=1 ;;
- EXTENDED) ID=5 ;;
- FAT16) ID=6 ;;
- NTFS|EXFAT) ID=7 ;;
- FAT32) ID=b ;;
- HFAT12) ID=11 ;;
- HFAT16) ID=16 ;;
- HNTFS) ID=17 ;;
- HFAT32) ID=1b ;;
- LINUX-SWAP) ID=82 ;;
- LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
- ID=83 ;;
- LINUX-LVM) ID=8e ;;
- SOLARIS) ID=bf ;;
- CACHE) ID=ca ;;
- LINUX-RAID) ID=fd ;;
- *) ID="" ;;
+# Asociar id. de partición para su mnemónico.
+PTTYPE=${2:-"MSDOS"}
+case "$PTTYPE" in
+ GPT) # Se incluyen mnemónicos compatibles con tablas MSDOS.
+ case "$1" in
+ EMPTY) ID=0 ;;
+ WINDOWS|NTFS|EXFAT|FAT32|FAT16|FAT12|HNTFS|HFAT32|HFAT16|HFAT12)
+ ID=0700 ;;
+ WIN-RESERV) ID=0C01 ;;
+ CHROMEOS-KRN) ID=7F00 ;;
+ CHROMEOS) ID=7F01 ;;
+ CHROMEOS-RESERV) ID=7F02 ;;
+ LINUX-SWAP) ID=8200 ;;
+ LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
+ ID=8300 ;;
+ LINUX-RESERV) ID=8301 ;;
+ LINUX-LVM) ID=8E00 ;;
+ FREEBSD-DISK) ID=A500 ;;
+ FREEBSD-BOOT) ID=A501 ;;
+ FREEBSD-SWAP) ID=A502 ;;
+ FREEBSD) ID=A503 ;;
+ HFS|HFS+) ID=AF00 ;;
+ HFS-RAID) ID=AF01 ;;
+ SOLARIS-BOOT) ID=BE00 ;;
+ SOLARIS) ID=BF00 ;;
+ SOLARIS-SWAP) ID=BF02 ;;
+ SOLARIS-DISK) ID=BF03 ;;
+ CACHE) ID=CA00;;
+ EFI) ID=EF00 ;;
+ LINUX-RAID) ID=FD00 ;;
+ *) ID="" ;;
+ esac
+ ;;
+ MSDOS)
+ case "$1" in
+ EMPTY) ID=0 ;;
+ FAT12) ID=1 ;;
+ EXTENDED) ID=5 ;;
+ FAT16) ID=6 ;;
+ WINDOWS|NTFS|EXFAT)
+ ID=7 ;;
+ FAT32) ID=b ;;
+ HFAT12) ID=11 ;;
+ HFAT16) ID=16 ;;
+ HNTFS) ID=17 ;;
+ HFAT32) ID=1b ;;
+ LINUX-SWAP) ID=82 ;;
+ LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
+ ID=83 ;;
+ LINUX-LVM) ID=8e ;;
+ FREEBSD) ID=a5 ;;
+ OPENBSD) ID=a6 ;;
+ HFS|HFS+) ID=af ;;
+ SOLARIS-BOOT) ID=be ;;
+ SOLARIS) ID=bf ;;
+ CACHE) ID=ca ;;
+ DATA) ID=da ;;
+ GPT) ID=ee ;;
+ EFI) ID=ef ;;
+ VMFS) ID=fb ;;
+ LINUX-RAID) ID=fd ;;
+ *) ID="" ;;
+ esac
+ ;;
esac
echo $ID
}
@@ -325,9 +600,9 @@ fi
# Error si no se recibe 1 parámetro.
[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Obtener el tamaño de la partición.
+# Obtener el tamaño del disco.
DISK="$(ogDiskToDev $1)" || return $?
-sfdisk -s $DISK
+awk -v D=${DISK#/dev/} '{if ($4==D) {print $3}}' /proc/partitions
}
@@ -357,6 +632,68 @@ echo $TYPE
#/**
+# ogGetLastSector int_ndisk [int_npart]
+#@brief Devuelve el último sector usable del disco o de una partición.
+#@param int_ndisk nº de orden del disco
+#@param int_npart nº de orden de la partición (opcional)
+#@return Último sector usable.
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Disco o partición no corresponde con un dispositivo.
+#@note Requisitos: sfdisk, sgdisk
+#@version 1.0.4 - Primera versión compatible con OpenGnSys.
+#@author Universidad de Huelva
+#@date 2012/06/03
+#*/ ##
+
+function ogGetLastSector ()
+{
+# Variables locales
+local DISK PART PTTYPE LASTSECTOR SECTORS CYLS
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk [int_npart]" \
+ "$FUNCNAME 1 => 488392064" \
+ "$FUNCNAME 1 1 => 102400062"
+ return
+fi
+# Error si no se reciben 1 o 2 parámetros.
+case $# in
+ 1) DISK=$(ogDiskToDev $1) || return $?
+ ;;
+ 2) DISK=$(ogDiskToDev $1) || return $?
+ PART=$(ogDiskToDev $1 $2) || return $?
+ ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ return $? ;;
+esac
+
+# Hay que comprobar si el disco es GPT
+PTTYPE=$(ogGetPartitionTableType $1)
+PTTYPE=${PTTYPE:-"MSDOS"} # Por defecto para discos vacíos.
+case "$PTTYPE" in
+ GPT)
+ if [ $# == 1 ]; then
+ LASTSECTOR=$(LANG=C sgdisk -p $DISK | awk '/last usable sector/ {print($(NF))}')
+ else
+ LASTSECTOR=$(LANG=C sgdisk -p $DISK | awk -v P="$2" '{if ($1==P) print $3}')
+ fi
+ ;;
+ MSDOS)
+ if [ $# == 1 ]; then
+ SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions)
+ CYLS=$(sfdisk -g $DISK | cut -f2 -d" ")
+ LASTSECTOR=$[SECTORS/CYLS*CYLS-1]
+ else
+ LASTSECTOR=$(sfdisk -uS -l $DISK 2>/dev/null | \
+ awk -v P="$PART" '{if ($1==P) {if ($2=="*") print $4; else print $3} }')
+ fi
+ ;;
+esac
+echo $LASTSECTOR
+}
+
+
+#/**
# ogGetPartitionActive int_ndisk
#@brief Muestra que particion de un disco esta marcada como de activa.
#@param int_ndisk nº de orden del disco
@@ -399,15 +736,15 @@ parted $DISK print 2>/dev/null | awk '/boot/ {print $1}'
#@note Requisitos: sfdisk
#@version 0.9 - Primera versión compatible con OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 25/03/2009
+#@date 2009/03/25
#@version 1.0.2 - Detectar partición vacía.
#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 23/12/2011
+#@date 2011/12/23
#*/ ##
function ogGetPartitionId ()
{
# Variables locales.
-local DISK ID
+local DISK PART ID
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -420,7 +757,13 @@ fi
# Detectar id. de tipo de partición y codificar al mnemónico.
DISK=$(ogDiskToDev $1) || return $?
-ID=$(sfdisk --id $DISK $2 2>/dev/null) || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $?
+PART=$(ogDiskToDev $1 $2) || return $?
+case "$(ogGetPartitionTableType $1)" in
+ GPT) ID=$(sgdisk -p $DISK 2>/dev/null | awk -v p="$2" '{if ($1==p) print $6;}') || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $?
+ [ "$ID" == "8301" -a "$1 $2" == "$(ogFindCache)" ] && ID=CA00
+ ;;
+ MSDOS) ID=$(sfdisk --id $DISK $2 2>/dev/null) || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $? ;;
+esac
echo $ID
}
@@ -470,6 +813,78 @@ esac
#/**
+# ogGetPartitionsNumber int_ndisk
+#@brief Detecta el numero de particiones del disco duro indicado.
+#@param int_ndisk nº de orden del disco
+#@return Devuelve el numero paritiones del disco duro indicado
+#@warning Salidas de errores no determinada
+#@attention Requisitos: parted
+#@note Notas sin especificar
+#@version 0.1 - Integracion para Opengnsys - EAC: DetectNumberPartition () en ATA.lib
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@date Date: 27/10/2008
+#@version 1.0 - Uso de sfdisk Primera version para OpenGnSys
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009/07/24
+#@version 1.0.4 - Uso de /proc/partitions para detectar el numero de particiones
+#@author Universidad de Huelva
+#@date 2012/03/28
+#*/ ##
+function ogGetPartitionsNumber ()
+{
+# Variables locales.
+local DISK
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
+ "$FUNCNAME 1 => 3"
+ return
+fi
+# Error si no se recibe 1 parámetro.
+[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Contar el nº de veces que aparece el disco en su lista de particiones.
+DISK=$(ogDiskToDev $1) 2>/dev/null
+case "$(ogGetPartitionTableType $1)" in
+ GPT) grep -c "${DISK#/dev/}." /proc/partitions ;;
+ MSDOS) sfdisk -l $DISK 2>/dev/null | grep -c "^$DISK" ;;
+esac
+}
+
+
+#/**
+# ogGetPartitionTableType int_ndisk
+#@brief Devuelve el tipo de tabla de particiones del disco (GPT o MSDOS)
+#@param int_ndisk nº de orden del disco
+#@return str_tabletype - Tipo de tabla de paritiones
+#@warning Salidas de errores no determinada
+#@note tabletype = { MSDOS, GPT }
+#@note Requisitos: parted
+#@version 1.0.4 - Primera versión para OpenGnSys
+#@author Universidad de Huelva
+#@date 2012/03/01
+#*/ ##
+function ogGetPartitionTableType ()
+{
+# Variables locales.
+local DISK
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
+ "$FUNCNAME 1 => MSDOS"
+ return
+fi
+# Error si no se recibe 1 parámetro.
+[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Sustituye n de disco por su dispositivo.
+DISK=`ogDiskToDev $1` || return $?
+parted -sm $DISK print | awk -F: -v D=$DISK '{ if($1 == D) print toupper($6)}'
+}
+
+
+#/**
# ogGetPartitionType int_ndisk int_npartition
#@brief Devuelve el mnemonico con el tipo de partición.
#@param int_ndisk nº de orden del disco
@@ -510,21 +925,42 @@ case "$ID" in
5|f) TYPE="EXTENDED" ;;
6|e) TYPE="FAT16" ;;
7) TYPE="NTFS" ;;
+ 700|0700) TYPE="WINDOWS" ;;
b|c) TYPE="FAT32" ;;
+ C01|0C01) TYPE="WIN-RESERV" ;;
11) TYPE="HFAT12" ;;
12) TYPE="COMPAQDIAG" ;;
16|1e) TYPE="HFAT16" ;;
17) TYPE="HNTFS" ;;
1b|1c) TYPE="HFAT32" ;;
42) TYPE="WIN-DYNAMIC" ;;
- 82) TYPE="LINUX-SWAP" ;;
- 83) TYPE="LINUX" ;;
- 8e) TYPE="LINUX-LVM" ;;
+ 7F00) TYPE="CHROMEOS-KRN" ;;
+ 7F01) TYPE="CHROMEOS" ;;
+ 7F02) TYPE="CHROMEOS-RESERV" ;;
+ 82|8200) TYPE="LINUX-SWAP" ;;
+ 83|8300) TYPE="LINUX" ;;
+ 8301) TYPE="LINUX-RESERV" ;;
+ 8e|8E00) TYPE="LINUX-LVM" ;;
+ a5|A503) TYPE="FREEBSD" ;;
+ A500) TYPE="FREEBSD-DISK" ;;
+ A501) TYPE="FREEBSD-BOOT" ;;
+ A502) TYPE="FREEBSD-SWAP" ;;
+ a6) TYPE="OPENBSD" ;;
a7) TYPE="CACHE" ;; # (compatibilidad con Brutalix)
- af) TYPE="HFS" ;;
- bf) TYPE="SOLARIS" ;;
- ca) TYPE="CACHE" ;;
- fd) TYPE="LINUX-RAID" ;;
+ af|AF00) TYPE="HFS" ;;
+ Af01) TYPE="HFS-RAID" ;;
+ be|BE00) TYPE="SOLARIS-BOOT" ;;
+ bf|BF0[0145]) TYPE="SOLARIS" ;;
+ BF02) TYPE="SOLARIS-SWAP" ;;
+ BF03) TYPE="SOLARIS-DISK" ;;
+ ca|CA00) TYPE="CACHE" ;;
+ da) TYPE="DATA" ;;
+ ee) TYPE="GPT" ;;
+ ef|EF00) TYPE="EFI" ;;
+ EF01) TYPE="MBR" ;;
+ EF02) TYPE="BIOS-BOOT" ;;
+ fb) TYPE="VMFS" ;;
+ fd|FD00) TYPE="LINUX-RAID" ;;
*) TYPE="UNKNOWN" ;;
esac
echo "$TYPE"
@@ -619,31 +1055,37 @@ echo
#/**
# ogListPrimaryPartitions int_ndisk
-#@brief Metafunción que lista las particiones primarias no vacías definidas en un disco.
+#@brief Metafunción que lista las particiones primarias no vacías de un disco.
#@param int_ndisk nº de orden del disco
#@see ogListPartitions
#*/ ##
function ogListPrimaryPartitions ()
{
# Variables locales.
-local PARTS
+local PTTYPE PARTS
+PTTYPE=$(ogGetPartitionTableType $1) || return $?
PARTS=$(ogListPartitions "$@") || return $?
-echo $PARTS | cut -sf1-4 -d" " | sed 's/\( EMPTY:0\)*$//'
+case "$PTTYPE" in
+ GPT) echo $PARTS | sed 's/\( EMPTY:0\)*$//' ;;
+ MSDOS) echo $PARTS | cut -sf1-4 -d" " | sed 's/\( EMPTY:0\)*$//' ;;
+esac
}
#/**
# ogListLogicalPartitions int_ndisk
-#@brief Metafunción que lista las particiones lógicas definidas en un disco.
+#@brief Metafunción que lista las particiones lógicas de una tabla tipo MSDOS.
#@param int_ndisk nº de orden del disco
#@see ogListPartitions
#*/ ##
function ogListLogicalPartitions ()
{
# Variables locales.
-local PARTS
+local PTTYPE PARTS
+PTTYPE=$(ogGetPartitionTableType $1) || return $?
+[ "$PTTYPE" == "MSDOS" ] || ogRaiseError $OG_ERR_PARTITION "" || return $?
PARTS=$(ogListPartitions "$@") || return $?
echo $PARTS | cut -sf5- -d" "
}
@@ -687,9 +1129,54 @@ parted -s $DISK set $2 boot on 2>/dev/null
#/**
+# ogSetPartitionId int_ndisk int_npartition str_type
+#@brief Cambia el identificador de la partición.
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_partid mnemónico de tipo de partición
+#@return (nada)
+#@attention Requisitos: fdisk, sgdisk
+#@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@date 2008/10/27
+#@version 1.0.4 - Soporte para discos GPT.
+#@author Universidad de Huelva
+#@date 2012/03/13
+#*/ ##
+function ogSetPartitionId ()
+{
+# Variables locales
+local DISK PART PTTYPE ID
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_type" \
+ "$FUNCNAME 1 1 NTFS"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Sustituye nº de disco por su dispositivo.
+DISK=`ogDiskToDev $1` || return $?
+PART=`ogDiskToDev $1 $2` || return $?
+
+# Elección del tipo de partición.
+PTTYPE=$(ogGetPartitionTableType $1)
+ID=$(ogTypeToId "$3" "$PTTYPE")
+[ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$3,$PTTYPE" || return $?
+case "$PTTYPE" in
+ GPT) sgdisk $DISK -t$PART:$ID 2>/dev/null ;;
+ MSDOS) echo -ne "t\n$2\n${ID}\nw\n" | fdisk $DISK &>/dev/null ;;
+esac
+partprobe $DISK 2>/dev/null
+}
+
+
+#/**
# ogSetPartitionSize int_ndisk int_npartition int_size
#@brief Muestra el tamano en KB de una particion determinada.
-#@param int_ndisk nº de orden del disco
+#@param int_ndisk nº de orden del disco
#@param int_npartition nº de orden de la partición
#@param int_size tamaño de la partición (en KB)
#@return (nada)
@@ -722,9 +1209,10 @@ PART="$(ogDiskToDev $1 $2)" || return $?
SIZE=$[$3*2] || ogRaiseError $OG_ERR_FORMAT || return $?
# Redefinir el tamaño de la partición.
sfdisk -f -uS -N$2 $DISK <<< ",$SIZE" &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
-partprobe 2>/dev/null
+partprobe $DISK 2>/dev/null
}
+
#/**
# ogUnhidePartition int_ndisk int_npartition
#@brief Hace visible una partición oculta.
@@ -788,35 +1276,6 @@ done
}
-
-#/**
-# ogGetPartitionsNumber int_ndisk
-#@brief Detecta el numero de particiones del disco duro indicado.
-#@param int_ndisk nº de orden del disco
-#@return Devuelve el numero paritiones del disco duro indicado
-#@warning Salidas de errores no determinada
-#@attention Requisitos: parted
-#@note Notas sin especificar
-#@version 0.1 - Integracion para Opengnsys - EAC: DetectNumberPartition () en ATA.lib
-#@author Antonio J. Doblas Viso. Universidad de Malaga
-#@date Date: 27/10/2008
-#@version 1.0 - Uso de sfdisk Primera version para OpenGnSys
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2009/07/24
-#*/ ##
-function ogGetPartitionsNumber ()
-{
- #local disco totalpart
- #disco=`ogDiskToDev $1`
- #totalpart=`parted $disco print | egrep ^" [0123456789] " -c`
- #echo $totalpart
-local DISK
-# Contar el nº de veces que aparece el disco en su lista de particiones.
-DISK=$(ogDiskToDev $1) 2>/dev/null
-sfdisk -l $DISK 2>/dev/null | grep -c "^$DISK"
-}
-
-
#/** @function ogDiskToRelativeDev: @brief Traduce los ID de discos o particiones EAC a ID Linux relativos, es decir 1 1 => sda1
#@param Admite 1 parametro: $1 int_numdisk
#@param Admite 2 parametro: $1 int_numdisk $2 int_partition
@@ -843,71 +1302,6 @@ PART=$(ogDiskToDev|cut -f$1 -d' ')$2
echo $PART | cut -f3 -d \/
}
-#/** @function ogDeletePartitionTable: @brief Borra la tabla de particiones del disco.
-#@param $1 opcion A (identificador LINUX) str_ID_linux (/dev/sda)
-#@param $1 opcion B (Identifiador EAC) int_numdiskEAC(1)
-#@return la informacion propia del fdisk
-#@warning no definidos
-#@attention
-#@note
-#@version 0.1 - Integracion para Opengnsys - EAC: DeletePartitionTable () en ATA.lib
-#@author Antonio J. Doblas Viso. Universidad de Malaga
-#@date 27/10/2008
-#*/
-function ogDeletePartitionTable () {
-if [ $# = 0 ]
-then
- Msg "sintaxis1: ogDeletePartitionTable int_disk" red
- Msg "sintaxis2: ogDeletePartitionTable str_/dev/sdX" red
- return
-fi
-if [ -n "${1%/dev/*}" ]
- then
- dev=`DiskToDev $1`
- else
- dev=$1
-fi
-echo -ne "o\nw" | fdisk $dev
-}
-
-
-#/** @function ogSetPartitionId: @brief Cambia el identificador de la particion, pero no su sistema de archivos.
-#@param $1 int_numdiskEAC
-#@param $2 int_numpartitionEAC
-#@param $3 str_tipoPartition admite EXT2 EXT3 NTFS FAT32 SWAP CACHE
-#@return la propia del fdisk
-#@warning no controla los parametros, si se introducen mal o simplemente no se introducen no muestra mensaje
-#@warning Identifica por nombre del sistema de archivos no por número
-#@attention Requisitos: fdisk
-#@note
-#@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib
-#@author Antonio J. Doblas Viso. Universidad de Malaga
-#@date 27/10/2008
-#*/
-function ogSetPartitionId() {
-# Variables locales
-local DISK PART ID
-
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_type" \
- "$FUNCNAME 1 1 NTFS"
- return
-fi
-# Error si no se reciben 3 parámetros.
-[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-
-# Sustituye nº de disco por su dispositivo.
-DISK=`ogDiskToDev $1` || return $?
-PART=`ogDiskToDev $1 $2` || return $?
-
-# Elección del tipo de partición.
-ID=$(ogFsToId "$3")
-[ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$3" || return $?
-
-echo -ne "t\n$2\n${ID}\nw\n" | fdisk $DISK 1>/dev/null 2>&1
-}
-
#/** @function ogDeletePartitionsLabels: @brief Elimina la informacion que tiene el kernel del cliente og sobre los labels de los sistemas de archivos
#@param No requiere
@@ -920,6 +1314,13 @@ echo -ne "t\n$2\n${ID}\nw\n" | fdisk $DISK 1>/dev/null 2>&1
#@date 27/10/2008
#*/
function ogDeletePartitionsLabels () {
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME " \
+ "$FUNCNAME "
+ return
+fi
+
rm /dev/disk/by-label/* # */ COMENTARIO OBLIGATORIO PARA DOXYGEN
}
diff --git a/client/engine/File.lib b/client/engine/File.lib
index b04d2278..ea3956e6 100755
--- a/client/engine/File.lib
+++ b/client/engine/File.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase File
#@class File
#@brief Funciones para gestión de archivos y directorios.
-#@version 0.9.2
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -20,6 +20,9 @@
#@version 0.9.2 - Primera versión para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-07-24
+#@version 1.0.4 - Calcula solo el checksum del último MB del fichero.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-03-16
#*/ ##
function ogCalculateChecksum ()
{
@@ -34,7 +37,7 @@ fi
# Comprobar que existe el fichero y devolver sus datos.
FILE=$(ogGetPath "$@")
[ -n "$FILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$*" || return $?
-md5sum "$FILE" 2>&1 | cut -f1 -d" "
+tail -c1M "$FILE" | md5sum -b 2>&1 | cut -f1 -d" "
}
@@ -80,10 +83,14 @@ test "$(cat "$SOURCE.sum" 2>/dev/null)" == "$(cat "$TARGET.sum" 2>/dev/null)"
# ogCopyFile [ str_repo | int_ndisk int_npart ] path_source [ str_repo | int_ndisk int_npart ] path_target
#@brief Metafunción para copiar un fichero de sistema OpenGnSys a un directorio.
#@see ogGetPath
+#@return Progreso de la copia.
#@warning Deben existir tanto el fichero origen como el directorio destino.
#@version 0.9 - Pruebas con OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-20
+#@version 1.0.4 - Copiar usando rsync.
+#@author Universidad de Huelva
+#@date 2012-07-06
#*/ ##
function ogCopyFile ()
{
@@ -111,8 +118,8 @@ esac
[ -n "$SOURCE" ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return $?
TARGET="$(ogGetPath "$@")"
[ -n "$TARGET" ] || ogRaiseError $OG_ERR_NOTFOUND "$@" || return $?
-# Copiar fichero.
-cp -a "$SOURCE" "$TARGET" # (definir posible error)
+# Copiar fichero (para evitar problemas de comunicaciones las copias se hacen con rsync en vez de cp).
+rsync --progress -avh "$SOURCE" "$TARGET"
}
diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib
index 1af06de8..0f23c91b 100755
--- a/client/engine/FileSystem.lib
+++ b/client/engine/FileSystem.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase FileSystem
#@class FileSystem
#@brief Funciones para gestión de sistemas de archivos.
-#@version 0.9
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -27,7 +27,10 @@
#@version 1.0.2 - Ignorar códigos de salida de comprobación (no erróneos).
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2011-09-23
-#*/
+#@version 1.0.4 - Soportar HFS/HFS+.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-05-21
+#*/ ##
function ogCheckFs ()
{
# Variables locales.
@@ -55,6 +58,8 @@ case "$TYPE" in
FAT32) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
FAT16) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
FAT12) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
+ HFS) PROG="fsck.hfs" ;;
+ HFS+) PROG="fsck.hfsplus" ;;
*) ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE"
return $? ;;
esac
@@ -69,6 +74,7 @@ if ogIsLocked $1 $2; then
fi
# Comprobar en modo uso exclusivo.
ogLock $1 $2
+trap "ogUnlock $1 $2" 1 2 3 6 9
eval $PROG $PARAMS $PART
ERRCODE=$?
case $ERRCODE in
@@ -100,7 +106,7 @@ return $ERRCODE
#@version 0.9 - Primera adaptacion para OpenGNSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-23
-#*/
+#*/ ##
function ogExtendFs ()
{
# Variables locales.
@@ -124,6 +130,7 @@ TYPE=$(ogGetFsType $1 $2)
case "$TYPE" in
EXT[234]) PROG="resize2fs"; PARAMS="-f" ;;
REISERFS) PROG="resize_reiserfs"; PARAMS="-f" ;;
+# BTRFS) PROG="btrfs"; PARAMS="filesystem resize max" ;;
NTFS) PROG="ntfsresize"; PARAMS="<<<\"y\" -f" ;;
*) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
return $? ;;
@@ -139,6 +146,7 @@ if ogIsLocked $1 $2; then
fi
# Redimensionar en modo uso exclusivo.
ogLock $1 $2
+trap "ogUnlock $1 $2" 1 2 3 6 9
eval $PROG $PARAMS $PART &>/dev/null
ERRCODE=$?
case $ERRCODE in
@@ -156,7 +164,7 @@ return $ERRCODE
#/**
# ogFormat int_ndisk int_npartition | CACHE
#@see ogFormatFs ogFormatCache
-#*/
+#*/ ##
function ogFormat ()
{
case "$*" in
@@ -183,6 +191,9 @@ esac
#@version 0.9 - Primera versión para OpenGNSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-08
+#@version 1.0.4 - Solucionado error cuando no se detecta tipo de sistema de ficheros pero si se indica
+#@author Universidad de Huelva
+#@date 2012-04-11
#*/ ##
function ogFormatFs ()
{
@@ -202,15 +213,26 @@ fi
[ $# -ge 2 -a $# -le 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Obtener dispositivo y tipo de sisitema de archivos.
PART="$(ogDiskToDev $1 $2)" || return $?
-TYPE="$(ogGetFsType $1 $2)" || return $?
+TYPE="$(ogGetFsType $1 $2)"
+# Si no se detecto el tipo de sistema de ficheros
+if [ -z "$TYPE" ]; then
+ # Si no se indico ningun tipo de sistema de ficheros se retorna
+ if [ -z "$3" ]; then
+ return $?
+ else
+ # Si no se detecto, se asigna el indicado
+ TYPE="$3"
+ fi
+fi
# Elegir tipo de formato segun el tipo de particion.
case "$3" in
- EXT2) ID=83; PROG="mkfs.ext2";;
- EXT3) ID=83; PROG="mkfs.ext3";;
- EXT4) ID=83; PROG="mkfs.ext4";;
+ EXT2) ID=83; PROG="mkfs.ext2" ;;
+ EXT3) ID=83; PROG="mkfs.ext3" ;;
+ EXT4) ID=83; PROG="mkfs.ext4" ;;
+ BTRFS) ID=83; PROG="mkfs.btrfs" ;;
REISERFS) ID=83; PROG="mkfs.reiserfs"; PARAMS="-f" ;;
- REISER4) ID=83; PROG="mkfs.reiser4";;
+ REISER4) ID=83; PROG="mkfs.reiser4" ;;
XFS) ID=83; PROG="mkfs.xfs"; PARAMS="-f" ;;
JFS) ID=83; PROG="mkfs.jfs"; PARAMS="<<<\"y\"";;
NTFS) ID=7; PROG="mkntfs"; PARAMS="-f" ;;
@@ -221,16 +243,20 @@ case "$3" in
HFAT16) ID=16; PROG="mkdosfs"; PARAMS="-F 16" ;;
FAT12) ID=1; PROG="mkdosfs"; PARAMS="-F 12" ;;
HFAT12) ID=11; PROG="mkdosfs"; PARAMS="-F 12" ;;
+ HFS) ID=af; PROG="mkfs.hfs" ;;
+ HFS+) ID=af; PROG="mkfs.hfsplus" ;;
+ UFS) ID=bf; PROG="mkfs.ufs"; PARAMS="-O 2" ;;
*) LABEL="$3" ;;
esac
# Si no se indica explícitamente, detectar el tipo de sistema de archivos.
if [ -z "$PROG" ]; then
case "$TYPE" in
- EXT2) PROG="mkfs.ext2";;
- EXT3) PROG="mkfs.ext3";;
- EXT4) PROG="mkfs.ext4";;
+ EXT2) PROG="mkfs.ext2" ;;
+ EXT3) PROG="mkfs.ext3" ;;
+ EXT4) PROG="mkfs.ext4" ;;
+ BTRFS) PROG="mkfs.btrfs" ;;
REISERFS) PROG="mkfs.reiserfs"; PARAMS="-f" ;;
- REISER4) PROG="mkfs.reiser4";;
+ REISER4) PROG="mkfs.reiser4" ;;
XFS) PROG="mkfs.xfs"; PARAMS="-f" ;;
JFS) PROG="mkfs.jfs"; PARAMS="<<<\"y\"" ;;
LINUX-SWAP) PROG="mkswap" ;;
@@ -238,6 +264,9 @@ if [ -z "$PROG" ]; then
FAT32|HFAT32) PROG="mkdosfs"; PARAMS="-F 32" ;;
FAT16|HFAT16) PROG="mkdosfs"; PARAMS="-F 16" ;;
FAT12|HFAT12) PROG="mkdosfs"; PARAMS="-F 12" ;;
+ HFS) PROG="mkfs.hfs" ;;
+ HFS+) PROG="mkfs.hfsplus" ;;
+ UFS) PROG="mkfs.ufs"; PARAMS="-O 2" ;;
*) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
return $? ;;
esac
@@ -266,6 +295,7 @@ if ogIsLocked $1 $2; then
fi
# Formatear en modo uso exclusivo.
ogLock $1 $2
+trap "ogUnlock $1 $2" 1 2 3 6 9
eval $PROG $PARAMS $PART 2>/dev/null
ERRCODE=$?
case $ERRCODE in
@@ -279,6 +309,62 @@ return $ERRCODE
#/**
+# ogGetFsSize int_ndisk int_npartition [str_unit]
+#@brief Muestra el tamanio del sistema de archivos indicado, permite definir la unidad de medida, por defecto GB
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_unit unidad (opcional, por defecto: KB)
+#@return float_size - Tamaño del sistema de archivos
+#@note str_unit = { KB, MB, GB, TB }
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositivo.
+#@version 0.1 - Integracion para Opengnsys - EAC: SizeFileSystem() en FileSystem.lib
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@date 2008-10-27
+#@version 1.0.4 - Adaptación de las salidas.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-06-18
+#*/ ##
+function ogGetFsSize ()
+{
+# Variables locales.
+local MNTDIR UNIT VALUE FACTOR SIZE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition [str_unit]" \
+ "$FUNCNAME 1 1 => 15624188" \
+ "$FUNCNAME 1 1 KB => 15624188"
+ return
+fi
+# Error si no se reciben 2 o 3 parámetros.
+[ $# == 2 ] || [ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Obtener unidad y factor de medida.
+UNIT="$3"
+UNIT=${UNIT:-"KB"}
+case "$UNIT" in
+ [kK]B)
+ FACTOR=1 ;;
+ MB) FACTOR=1024 ;;
+ GB) FACTOR=$[1024*1024] ;;
+ TB) FACTOR=$[1024*1024*1024] ;;
+ *) ogRaiseError $OG_ERR_FORMAT "$3 != { KB, MB, GB, TB }"
+ return $? ;;
+esac
+
+# Obtener el tamaño del sistema de archivo (si no está formateado; tamaño = 0).
+MNTDIR="$(ogMount $1 $2 2>/dev/null)"
+if [ -n "$MNTDIR" ]; then
+ VALUE=$(df -BK "$MNTDIR" | awk '{getline; print $2}')
+ SIZE=$(echo "$VALUE $FACTOR" | awk '{printf "%f\n", $1/$2}')
+else
+ SIZE=0
+fi
+# Devolver el tamaño (quitar decimales si son 0).
+echo ${SIZE%.0*}
+}
+
+
+#/**
# ogGetFsType int_ndisk int_npartition
#@brief Devuelve el mnemonico con el tipo de sistema de archivos.
#@param int_ndisk nº de orden del disco
@@ -313,9 +399,10 @@ fi
# Detectar id. de tipo de partición y codificar al mnemonico.
DISK=$(ogDiskToDev "$1") || return $?
ID=$(ogGetPartitionId "$1" "$2") || return $?
+[ "$ID" == "a7" ] && ID="ca" # Traducir antiguo id. de partición de caché.
TYPE=""
case "$ID" in
- ca|a7) # Detectar Caché local.
+ ca|CA00) # Detectar caché local (revisar detección en tablas GPT).
ogIsFormated $1 $2 2>/dev/null && TYPE="CACHE"
;;
*) # Detectar sistema de ficheros.
@@ -537,6 +624,9 @@ esac
#@version 0.9 - Primera version para OpenGNSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-28
+#@version 1.0.4 - Soportar HFS/HFS+.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-05-21
#*/ ##
function ogMountFs ()
{
@@ -585,6 +675,7 @@ if [ -z "$MNTDIR" ]; then
NTFS|HNTFS) MOUNT=ntfs-3g ;;
FAT16|FAT32|HFAT16|HFAT32)
MOUNT=mount; PARAMS="-t vfat" ;;
+ HFS|HFS+) MOUNT=mount; PARAMS="-o force" ;;
*) #/// Error, si la partición no es montable.
rmdir $MNTDIR
ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE"
@@ -673,18 +764,18 @@ case "$(ogGetFsType $1 $2)" in
# ;;
NTFS|HNTFS)
ogDeleteFile $1 $2 pagefile.sys
- ogDeleteFile $1 $2 hiberfile.sys
+ ogDeleteFile $1 $2 hiberfil.sys
ogUnmount $1 $2 2>/dev/null
## NTFS: Obtiene tamaño mínimo en MB.
#SIZE=$(ntfsresize -fi $PART | awk '/resize at/ {print int($8*1.1)}')
#ntfsresize -fns "${SIZE}M" $PART >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
#ntfsresize -fs "${SIZE}M" $PART <<<"y" >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
- SIZE=$(ogReduceFsCheck $1 $2)
- [ "$SIZE" == 0 ] && return 1
+ SIZE=$(ogReduceFsCheck $1 $2)
+ [ "$SIZE" == 0 ] && return 1
ntfsresize -fs "${SIZE}M" $PART <<<"y" || ogRaiseError $OG_ERR_PARTITION "error reduciendo $1,$2" || return $?
- ;;
+ ;;
*) ogRaiseError $OG_ERR_PARTITION "$1,$2"
- return $? ;;
+ return $? ;;
esac
ogGetFsSize $1 $2
}
@@ -749,7 +840,7 @@ esac
#/**
# ogUnlock int_ndisk int_npartition
#@see ogUnlockPartition
-#*/
+#*/ ##
function ogUnlock ()
{
ogUnlockPartition "$@"
@@ -794,7 +885,7 @@ rm -f $LOCKFILE
#/**
# ogUnmount int_ndisk int_npartition
#@see ogUnmountFs
-#*/
+#*/ ##
function ogUnmount ()
{
ogUnmountFs "$@"
@@ -883,57 +974,6 @@ for ((PART=1; PART<=$(ogGetPartitionsNumber $1); PART++)); do
done
}
-#/** @function ogGetFsSize: @brief Muestra el tamanio del sistema de archivos indicado, permite definir la unidad de medida, por defecto GB
-#@param $1 int_diskEAC
-#@param $2 int_PartitionEAC
-#@param $3 str_UnidadMediada parametro opcional, admite [ kB MB GB -default GB]
-#@return cadena con int_TotalSize:int_DataSize:int_DataFree
-#@warning Salidas de errores no determinada
-#@warning
-#@attention
-#@version 0.1 - Integracion para Opengnsys - EAC: SizeFileSystem() en FileSystem.lib
-#@author Antonio J. Doblas Viso. Universidad de Malaga
-#@date 2008-10-27
-#*/
-function ogGetFsSize () {
-if [ $# = 0 ]
-then
- echo "sintaxis: ogGetFsSize int_disco int_partition str_SizeOutput [ kB MB GB -default GB]-]" red
- echo "devuelve int_size : int_data : int_free" red
-return
-fi
-if [ $# -ge 2 ]
-then
- particion=`ogMount $1 $2 ` #1>/dev/null 2>&1
- if [ -z $3 ]
- then
- unit=kB # s B kB MB GB TB %
- else
- unit=$3
- fi
- case $unit in
- kB)
- factor="1.024";
- # valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d:%d:%d", size,used,free}'`
- valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d", size}'`
- ;;
- MB)
- factor="1.024/1000";
- valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000; used=$3*1.024/1000; free=$4*1.024/1000; printf "%d:%d:%d", size,used,free}'`
- ;;
- GB)
- factor="1.024/1000000";
- valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000000; used=$3*1.024/1000000; free=$4*1.024/1000000; printf "%f:%f:%f", size,used,free}'`
- ;;
- esac
- #echo $valor
- #NumberRound $valor
- #valor=`NumberRound $valor`;
- ogUnmount $1 $2 1>/dev/null 2>&1
- echo $valor
-
-fi
-}
function ogGetFreeSize () {
if [ $# = 0 ]
@@ -975,37 +1015,3 @@ then
fi
}
-
-
-function ogDeletePartitionsLabels ()
-{
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME " \
- "$FUNCNAME "
- return
-fi
-rm /dev/disk/by-label/* 2>/dev/null # */ COMENTARIO OBLIGATORIO PARA DOXYGEN
-}
-
-function ogDeletePartitionTable ()
-{
-
-# Variables locales.
-local DISK
-
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME int_disk" \
- "$FUNCNAME 1"
- return
-fi
-# Error si no se reciben 1 parámetros.
-[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-
-# Obteniendo Identificador linux de la particion.
-DISK=$(ogDiskToDev $1) || return $?
-
-# Elimando las particiones con fdisk
-echo -ne "o\nw" | fdisk $DISK
-}
diff --git a/client/engine/Image.lib b/client/engine/Image.lib
index 5ce8aa1c..6c53d5da 100755
--- a/client/engine/Image.lib
+++ b/client/engine/Image.lib
@@ -787,82 +787,3 @@ IMGFILE=$(ogGetPath "$1" "$2.img") || return $?
ogGetImageInfo $IMGFILE | awk -F: '{print $4}'
}
-
-#/**
-# ogGetImageFs str_repo path_image
-#@brief Devuelve el tipo de sistema de archivos almacenado en un fichero de imagen.
-#@param str_repo repositorio de imágenes o caché local
-#@param path_image camino de la imagen
-#@return str_imgtype - mnemónico del tipo de sistema de archivos
-#@exception OG_ERR_FORMAT formato incorrecto.
-#@exception OG_ERR_NOTFOUND fichero de imagen no encontrado.
-#@todo Comprobar salidas para todos los tipos de sistemas de archivos.
-#/**
-function ogGetImageFsUS ()
-{
-local IMGFILE IMGTYPE
-IMGTYPE=$(ogGetImageType "$1" "$2")
-IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") || return $?
-[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $?
-case "$IMGTYPE" in
- img) # Partimage.
- partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \
- awk '/^Filesystem/ {sub(/\.\.+/," "); if ($2=="ntfs") print NTFS;
- else { sub(/fs$/,""); print toupper($2);} }'
- ;;
- pgz) # Partclone / GZip
- gzip -dc "$IMGFILE" | partclone.chkimg -C -s - 2>&1 | \
- awk '/^File system/ {if ($2=="EXTFS") print "EXT3"; else print $3;}'
- ;;
- *) # Error si el fichero de imagen no es accesible.
- ogRaiseError OG_ERR_NOTFOUND "$IMGFILE"
- return $? ;;
-esac
-}
-
-
-# ogGetImageSize str_repo path_image
-#@brief Devuelve el tamaño del sistema de archivos almacenado en un fichero de imagen.
-#@param str_repo repositorio de imágenes o caché local
-#@param path_image camino de la imagen
-#@return int_size - tamaño (en KB)
-#@exception OG_ERR_FORMAT formato incorrecto.
-#@exception OG_ERR_NOTFOUND fichero de imagen no encontrado.
-#*/
-#@warning En pruebas iniciales
-#@todo Definición de parámetros y salidas.
-#@version 0.1 - Primera versión muy en pruebas para OpenGNSys
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2009/09/11
-#*/ ##
-function ogGetImageSizeUS ()
-{
-# Variables locales
-local IMGFILE IMGTYPE
-
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk int_npart" \
- "$FUNCNAME 1 1 REPO /aula1/winxp ==> 5642158"
- return
-fi
-# Error si no se reciben menos de 2 parámetros.
-[ $# -ne 2 ] && ogRaiseError $OG_ERR_FORMAT && return $?
-# Devuelve el tamaño de la imagen en KB.
-IMGTYPE=$(ogGetImageType "$1" "$2")
-IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE")
-case "$IMGTYPE" in
- img) # Partimage.
- partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \
- awk '/Partition size/ {sub(/\.\.+/," "); ps=$3} END {print ps*1024*1024;}'
- ;;
- pgz) # Partclone / GZip
- gzip -dc "$IMGFILE" | partclone.chkimg -C -s - 2>&1 | \
- awk -F: '/Block size/ {bs=$2} /Used block/ {ub=$2} END {print bs*ub/1024}'
- ;;
- *) # Error si el fichero de imagen no es accesible.
- ogRaiseError OG_ERR_NOTFOUND "$IMGFILE"
- return $? ;;
-esac
-}
-
diff --git a/client/engine/PostConf.lib b/client/engine/PostConf.lib
new file mode 100755
index 00000000..80c0b24f
--- /dev/null
+++ b/client/engine/PostConf.lib
@@ -0,0 +1,380 @@
+#!/bin/bash
+#/**
+#@file PostConf.lib
+#@brief Librería o clase PostConf
+#@class PostConf
+#@brief Funciones para la postconfiguración de sistemas operativos.
+#@version 1.0.4
+#@warning License: GNU GPLv3+
+#*/
+
+
+#/**
+# ogAddCmd int_ndisk int_npartition str_filename str_commands
+#@brief Añade comandos al cmd creado por ogInstalMiniSetup
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del fichero cmd (siempre se guardara en windows\system32\para que sea visible por el sistema
+#@param str_commands comando o comandos que se añadiran al fichero
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#@version 1.0.4 - Cambios en los parametros de entrada de la funcion
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2012-04-16
+#*/ ##
+function ogAddCmd ()
+{
+local MOUNTPOINT CMDFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_commands" \
+ "$FUNCNAME 1 1 filename.cmd command"
+ return
+fi
+# Error si no se reciben 4 parámetros.
+[ $# == 4 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Punto de montaje
+MOUNTPOINT="$(ogMount "$1" "$2")" || return $?
+# Comprobar que existe el fichero de comandos.
+CMDFILE=$(ogGetPath "$MOUNTPOINT/windows/system32/$3")
+[ -n "$CMDFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/windows/system32/$3" || return $?
+
+# Concatenamos el comando en el fichero de comandos
+cat >> "$CMDFILE" << EOF
+$4
+EOF
+}
+
+
+#/**
+# ogDomainScript int_ndisk int_npartition str_domain str_user str_password
+#@brief Crea un script .vbs para unir al dominio una maquina windows y el comando adequado en el archivo cmd creado por ogInstallMiniSetup
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
+#@param str_domain dominio donde se quiere conectar
+#@param str_user usuario con privilegios para unir al dominio
+#@param str_password password del usuario con privilegios
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#@version 1.0.4 - Cambios en los parametros de entrada de la funcion
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2012-04-16
+#*/ ##
+function ogDomainScript ()
+{
+local CMDDIR
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" \
+ "$FUNCNAME int_ndisk int_npartition str_filename str_domain str_user str_password" \
+ "$FUNCNAME 1 1 filename.cmd domain user password_user"
+ return
+fi
+# Error si no se reciben 6 parámetros.
+[ $# == 6 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Punto de montaje
+MOUNTPOINT="$(ogMount "$1" "$2")" || return $?
+# Comprobar que existe el directorio de comandos.
+CMDDIR=$(ogGetPath "$MOUNTPOINT/windows/system32")
+[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?
+
+# Añadimos en el cmd que se ejecutara al arranque, el comando de ejecutar el script que añade al dominio.
+ogAddCmd $1 $2 "$3" "CSCRIPT joindomain.vbs"
+# Eliminamos el script porque tiene el usuario de administrador de dominio en claro
+ogAddCmd $1 $2 "$3" "DEL /Q C:\Windows\System32\joindomain.vbs"
+# Metemos unas claves de registro para que el dominio salga seleccionado por defecto
+ogAddCmd $1 $2 "$3" "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultDomainName /t REG_SZ /d \"$3\" /f"
+
+# Creamos el archivo joindomain.vbs que nos introduce la maquina en el dominio
+cat > "$CMDDIR/joindomain.vbs" << EOF
+Const JOIN_DOMAIN = 1
+Const ACCT_CREATE = 2
+Const ACCT_DELETE = 4
+Const WIN9X_UPGRADE = 16
+Const DOMAIN_JOIN_IF_JOINED = 32
+Const JOIN_UNSECURE = 64
+Const MACHINE_PASSWORD_PASSED = 128
+Const DEFERRED_SPN_SET = 256
+Const INSTALL_INVOCATION = 262144
+
+strDomain = "$4"
+strUser = "$5"
+strPassword = "$6"
+
+Set objNetwork = CreateObject("WScript.Network")
+strComputer = objNetwork.ComputerName
+
+Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\" & _
+ strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
+
+ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, strPassword, _
+ strDomain & "\" & strUser, NULL, JOIN_DOMAIN + ACCT_CREATE)
+EOF
+}
+
+
+#/**
+# ogInstallLinuxClient int_ndisk int_filesys
+#@brief Instala el cliente OpenGnSys para sistemas operativos Linux.
+#@param int_ndisk nº de orden del disco
+#@param int_filesys nº de orden del sistema de archivos
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
+#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
+#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
+#@version 1.0.4 - Primera adaptación para OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-04-10
+#*/ ##
+function ogInstallLinuxClient ()
+{
+# Variables locales.
+local PART MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
+ "$FUNCNAME 1 1"
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Obtener sistema de archvios.
+PART="$(ogDiskToDev $1 $2)" || return $?
+# Comprobar si el sistema de archivos no está bloqueado.
+MNTDIR=$(ogMount $1 $2) 2>/dev/null
+[ -n "$MNTDIR" ] || ogRaiseError OG_ERR_PARTITION "$1, $2" || return $?
+# Comprobar si existe el cliente y los directorios y ficheros destino.
+CLIENTFILE=$OGLIB/ogclient/ogAdmLnxClient
+[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $?
+for i in /usr/local/sbin /sbin /usr/sbin; do
+ [ -d $MNTDIR/$i ] && SBINDIR=$i
+done
+[ -n "$SBINDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 sbin" || return $?
+for i in /usr/local/etc /etc; do
+ [ -d $MNTDIR/$i ] && ETCDIR=$i
+done
+[ -n "$ETCDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 etc" || return $?
+for i in $ETCDIR/rc.local $ETCDIR/rc.d/rc.local; do
+ [ -f $i ] && RCLOCAL=$i
+done
+[ -n "$RCLOCAL" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 rc.local" || return $?
+# Realizar la instalación en modo uso exclusivo.
+ogLock $1 $2
+trap "ogUnlock $1 $2" 1 2 3 6 9
+# Copiar cliente, generar fichero de configuración e incluir en el arranque.
+cp -a $CLIENTFILE $MNTDIR/$SBINDIR
+cat > $MNTDIR/$ETCDIR/ogAdmLnxClient.cfg << EOT
+ServidorAdm=$(ogGetServerIp)
+PUERTO=2008
+IPLOCAL=$(ogGetIpAddress)
+EOT
+cp -a $MNTDIR/$RCLOCAL /tmp/rclocal
+awk -v sbin=$SBINDIR -v etc=$ETCDIR \
+ '{ if (/^#/) { print; }
+ else {
+ if (loc==0) {
+ printf "%s/ogAdmLnxClient -f %s/ogAdmLnxClient.cfg &\n",sbin,etc;
+ loc=1; }
+ print; }
+ }' /tmp/rclocal > $MNTDIR/$RCLOCAL
+rm /tmp/rclocal
+ogUnlock $1 $2
+}
+
+
+#/**
+# ogInstallMiniSetup int_ndisk int_npartition str_filename [str_admuser str_admpassword bool_autologin [str_autouser str_autopassword] ]
+#@brief Metafunción para instalar archivo que se ejecutará en el arranque de Windows.
+#@see ogInstallFirstBoot ogInstallRunonce
+#*/ ##
+function ogInstallMiniSetup ()
+{
+case $# in
+ 3) # Ejecución en el primer arranque de la máquina.
+ ogInstallFirstBoot "$@" ;;
+ 6|8) # Ejecución en el "runonce".
+ ogInstallRunonce "$@" ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ exit $? ;;
+esac
+}
+
+
+#/**
+# ogInstallFirstBoot int_ndisk int_npartition str_filename
+#@brief Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del archivo .cmd a ejecutar en el arranque
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@note El archivo estará en system32 y será visible por el sistema.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#@version 1.0.4 - Heredada de antigua función ogInstallMiniSetup.
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2012-04-16
+#*/ ##
+function ogInstallFirstBoot ()
+{
+local MNTDIR DIR CMDDIR CMDFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename" \
+ "$FUNCNAME 1 1 filename.cmd"
+ return
+fi
+# Error si no se reciben 2 parámetros.
+[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Comprobar que existe el directorio del fichero de comandos.
+MNTDIR=$(ogMount "$1" "$2") || return $?
+for i in winnt windows; do
+ DIR=$(ogGetPath $MNTDIR/$i/system32)
+ [ -n "$DIR" ] && CMDDIR=$DIR
+done
+[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MNTDIR/windows/system32" || return $?
+CMDFILE="$CMDDIR/$2"
+
+# Creamos el archivo cmd y creamos un par de comandos para que una vez acabe la
+# postconfiguracion resetee el mini setup, sino lo haria en cada arranque.
+cat > "$CMDFILE" << EOF
+REG ADD HKLM\System\Setup /v SystemSetupInProgress /t REG_DWORD /d 0 /f
+REG ADD HKLM\System\Setup /v CmdLine /t REG_SZ /d "" /f
+EOF
+
+#Creamos las claves de registro necesarias para que se haga la ejecucion del .cmd al aranque
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SystemSetupInProgress" 1
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SetupType" 4
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" "cmd.exe /c $2"
+}
+
+
+#/**
+# ogInstallRunonce int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]
+#@brief Crea el archivo cmd que se ejecutara en el runonce de un usuario administrador
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del archivo .cmd a ejecutar en el arranque (estara en system32 y sera visible por el sistema)
+#@param str_adm_user usuario administrador para hacer autologin y ejecutar el runonce
+#@param str_adm_password password del usuario administrador
+#@param bool_autologin si despues de la postconfiguracion queremos que la maquina haga autologin (0 o 1)
+#@param str_auto_user Usuario con el que queremos que haga autologin despues de la postconfiguracion
+#@param str_auto_password Password del usuario que hara autologin
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#@version 1.0.4 - Heredado de antigua función ogInstallMiniSetup
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2012-04-16
+#*/ ##
+function ogInstallRunonce ()
+{
+local MOUNTPOINT DIR CMDDIR CMDFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]" \
+ "$FUNCNAME 1 1 filename.cmd administrator passadmin 1 userauto passuserauto" \
+ "$FUNCNAME 1 1 filename.cmd administrator passadmin 0"
+ return
+fi
+# Error si no se reciben 6 u 8 parámetros.
+[ $# == 6 -o $# == 8 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Punto de montaje.
+MOUNTPOINT="$(ogGetPath "$1" "$2" /)"
+# Comprobar que existe el directorio del fichero de comandos.
+for i in winnt windows; do
+ DIR=$(ogGetPath $MOUNTPOINT/$i/system32)
+ [ -n "$DIR" ] && CMDDIR=$DIR
+done
+[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/Windows/System32" || return $?
+CMDFILE="$CMDDIR/$3"
+
+if [ $6 == 0 ]; then
+ # Si no volem fer autologin despres de la postconfiguracio o indiquem a las claus de registre
+ cat > "$CMDFILE" << EOF
+DEL C:\ogboot.*
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "" /f
+REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f
+EOF
+else
+ # Si volem fer autologin despres de la postconfiguracio introduim l'informacio a les claus de registre
+ cat > "$CMDFILE" << EOF
+DEL C:\ogboot.*
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "$7" /f
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "$8" /f
+EOF
+fi
+#Creamos las claves de registro necesarias para que meter el cmd en el runonce del usuario y este haga autologin
+ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' "C:\windows\system32\\$3" 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 1 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$4" 2>/dev/null
+ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' "$5" 2>/dev/null
+}
+
+
+#/**
+# ogInstallWindowsClient int_ndisk int_filesys
+#@brief Instala el cliente OpenGnSys para sistemas operativos Windows.
+#@param int_ndisk nº de orden del disco
+#@param int_filesys nº de orden del sistema de archivos
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
+#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
+#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
+#@version 1.0.4 - Primera adaptación para OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-04-11
+#*/ ##
+function ogInstallWindowsClient ()
+{
+# Variables locales.
+local PART MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Obtener sistema de archvios.
+PART="$(ogDiskToDev $1 $2)" || return $?
+# Comprobar si el sistema de archivos no está bloqueado.
+MNTDIR=$(ogMount $1 $2) 2>/dev/null
+[ -n "$MNTDIR" ] || ogRaiseError OG_ERR_PARTITION "$1, $2" || return $?
+# Comprobar si existe el cliente y los directorios y ficheros destino.
+CLIENTFILE=$OGLIB/ogclient/ogAdmWinClient.exe
+[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $?
+for i in winnt windows; do
+ DIR=$(ogGetPath $MNTDIR/$i)
+ [ -n "$DIR" ] && WINDIR=$DIR
+done
+[ -n "$WINDIR " ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 windows" || return $?
+# Realizar la instalación en modo uso exclusivo.
+ogLock $1 $2
+trap "ogUnlock $1 $2" 1 2 3 6 9
+# Copiar cliente, generar fichero de configuración e incluir en el arranque.
+cp -a $CLIENTFILE "$WINDIR"
+ogInstallMiniSetup $1 $2 ogclient.cmd
+ogAddCmd $1 $2 ogclient.cmd "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)"
+ogUnlock $1 $2
+}
+
diff --git a/client/engine/PostConfEAC.lib b/client/engine/PostConfEAC.lib
index 33667f47..d950319b 100755
--- a/client/engine/PostConfEAC.lib
+++ b/client/engine/PostConfEAC.lib
@@ -601,144 +601,3 @@ schroot -c linux
schroot -end-sessiona --all-sessions
}
-####################################################################################
-################### Funciones para postconfiguracion windows #######################
-############# 2011 Jonathan Alonso Martinez jonathan.alonso@uab.cat ###############
-#################### Universidad Autonoma de Barcelona (Spain)######################
-####################################################################################
-
-#/**
-# ogInstallMiniSetup path_mountpoint str_filename
-#@brief Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado
-#@param path_mountpoint directorio donde está montado el sistema Windows
-#@param str_filename nombre del archivo .cmd a ejecutar en el arranque (estara en system32 y sera visible por el sistema)
-#@return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 1.0.2 - Nueva función
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2011-06-29
-#*/ ##
-function ogInstallMiniSetup ()
-{
-local CMDDIR CMDFILE
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_filename" \
- "$FUNCNAME /mnt/sda1 filename.cmd"
- return
-fi
-# Error si no se reciben 2 parámetros.
-[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Comprobar que existe el directorio del fichero de comandos.
-CMDDIR=$(ogGetPath "$1/windows/system32")
-[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?
-CMDFILE="$CMDDIR/$2"
-
-# Creamos el archivo cmd y creamos un par de comandos para que una vez acabe la
-# postconfiguracion resetee el mini setup, sino lo haria en cada arranque.
-cat > "$CMDFILE" << EOF
-REG ADD HKLM\System\Setup /v SystemSetupInProgress /t REG_DWORD /d 0 /f
-REG ADD HKLM\System\Setup /v CmdLine /t REG_SZ /d "" /f
-EOF
-
-#Creamos las claves de registro necesarias para que se haga la ejecucion del .cmd al aranque
-ogSetRegistryValue "$1" SYSTEM "\Setup\SystemSetupInProgress" 1
-ogSetRegistryValue "$1" SYSTEM "\Setup\SetupType" 4
-ogSetRegistryValue "$1" SYSTEM "\Setup\CmdLine" "cmd.exe /c $2"
-}
-
-
-# ogAddCmd path_mountpoint str_filename str_commands
-#@brief Añade comandos al cmd creado por ogInstalMiniSetup
-#@param path_mountpoint directorio donde está montado el sistema Windows
-#@param str_filename nombre del fichero cmd (siempre se guardara en windows\system32\para que sea visible por el sistema
-#@param str_commands comando o comandos que se añadiran al fichero
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
-#@version 1.0.2 - Nueva función
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2011-06-29
-#*/ ##
-
-function ogAddCmd ()
-{
-local CMDFILE
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_filename str_commands" \
- "$FUNCNAME /mnt/sda1 filename.cmd command"
- return
-fi
-# Error si no se reciben 3 parámetros.
-[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Comprobar que existe el fichero de comandos.
-CMDFILE=$(ogGetPath "$1/windows/system32/$2")
-[ -n "$CMDFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32/$2" || return $?
-
-cat >> "$CMDFILE" << EOF
-$3
-EOF
-}
-
-# ogDomainScript path_mountpoint str_domain str_user str_password
-#@brief Crea un script .vbs para unir al dominio una maquina windows y el comando adequado en el archivo cmd creado por ogInstallMiniSetup
-#@param path_mountpoint directorio donde está montado el sistema Windows
-#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
-#@param str_domain Dominio donde se quiere conectar
-#@param str_user Usuario con privilegios para unir al dominio
-#@param str_password Password del usuario con privilegios
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 1.0.2 - Nueva función
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2011-06-29
-#*/ ##
-
-function ogDomainScript ()
-{
-local CMDDIR
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_filename str_domain str_user str_password" \
- "$FUNCNAME /mnt/sda1 filename.cmd domain user password_user"
- return
-fi
-# Error si no se reciben 4 parámetros.
-[ $# == 5 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Comprobar que existe el directorio de comandos.
-CMDDIR=$(ogGetPath "$1/windows/system32")
-[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?
-
-# Añadimos en el cmd que se ejecutara al arranque, el comando de ejecutar el script que añade al dominio.
-ogAddCmd $1 "$2" "CSCRIPT joindomain.vbs"
-# Eliminamos el script porque tiene el usuario de administrador de dominio en claro
-ogAddCmd $1 "$2" "del /Q C:\Windows\System32\joindomain.vbs"
-
-# Creamos el archivo joindomain.vbs que nos introduce la maquina en el dominio
-cat > "$CMDDIR/joindomain.vbs" << EOF
-Const JOIN_DOMAIN = 1
-Const ACCT_CREATE = 2
-Const ACCT_DELETE = 4
-Const WIN9X_UPGRADE = 16
-Const DOMAIN_JOIN_IF_JOINED = 32
-Const JOIN_UNSECURE = 64
-Const MACHINE_PASSWORD_PASSED = 128
-Const DEFERRED_SPN_SET = 256
-Const INSTALL_INVOCATION = 262144
-
-strDomain = "$3"
-strUser = "$4"
-strPassword = "$5"
-
-Set objNetwork = CreateObject("WScript.Network")
-strComputer = objNetwork.ComputerName
-
-Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\" & _
- strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
-
-ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, strPassword, _
- strDomain & "\" & strUser, NULL, JOIN_DOMAIN + ACCT_CREATE)
-EOF
-}
-
diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib
index 5fe2bc74..102ed1c7 100755
--- a/client/engine/Protocol.lib
+++ b/client/engine/Protocol.lib
@@ -382,14 +382,14 @@ OIFS=$IFS; IFS=':' ; SESSION=($2); IFS=$OIFS
#controlamos el PORTBASE de la sesion. Comun.-
PORTBASE=${SESSION[0]}
-ogCheckStringInGroup ${SESSION[0]} "9000 9002 9004 9006 9008 9010" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $?
+ogCheckStringInGroup ${SESSION[0]} "$(seq 9000 2 9050)" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $?
if [ $MODE == "server" ]
then
ogCheckStringInGroup ${SESSION[1]} "full-duplex FULL-DUPLEX half-duplex HALF-DUPLEX broadcast BROADCAST" || ogRaiseError $OG_ERR_FORMAT "McastSession method ${SESSION[1]}" || PERROR=4 #return $?
METHOD=${SESSION[1]}
ogCheckIpAddress ${SESSION[2]} || ogRaiseError $OG_ERR_FORMAT "McastSession address ${SESSION[2]}" || PERROR=5 #return $?
ADDRESS=${SESSION[2]}
- ogCheckStringInReg ${SESSION[3]} "^[0-9]{1,2}\M$" || ogRaiseError $OG_ERR_FORMAT "McastSession bitrate ${SESSION[3]}" || PERROR=6 # return $?
+ ogCheckStringInReg ${SESSION[3]} "^[0-9]{1,3}\M$" || ogRaiseError $OG_ERR_FORMAT "McastSession bitrate ${SESSION[3]}" || PERROR=6 # return $?
BITRATE=${SESSION[3]}
ogCheckStringInReg ${SESSION[4]} "^[0-9]{1,10}$" || ogRaiseError $OG_ERR_FORMAT "McastSession nclients ${SESSION[4]}" || PERROR=7 # return $?
NCLIENTS=${SESSION[4]}
@@ -846,11 +846,11 @@ then
case "$MODE" in
peer|PEER)
echo "Donwloading Torrent as peer" ### echo "ctorrent -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 $SOURCE -s $TARGET -b ${SOURCE}.bf"
- ctorrent -f -X "sleep 15; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf
+ ctorrent -f -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf
;;
leecher|LEECHER)
- echo "Donwloading Torrent as leecher" # echo "ctorrent ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 -U 0"
- ctorrent ${SOURCE} -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 -U 0
+ echo "Donwloading Torrent as leecher" # echo "ctorrent ${SOURCE} -X 'sleep 30; kill -9 \$(pidof ctorrent)' -C 100 -U 0"
+ ctorrent ${SOURCE} -X "sleep 30; kill -2 \$(pidof ctorrent)" -C 100 -U 0
;;
seeder|SEEDER)
echo "MODE seeder ctorrent" #### ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100"
@@ -998,21 +998,12 @@ fi
#echo "paso 4. recuperamos o calculamos los md5 de los ficheros"
if [ -f $FILESOURCE.sum ]
then
- # echo "leyendo el sum del fichero sum del repo"
MD5SOURCE=$(cat $FILESOURCE.sum)
else
- # echo "calculando el sun del repo"
- MD5SOURCE=$(md5sum $FILESOURCE | cut -f1 -d" ")
-fi
-if [ -f $FILETARGET.sum ]
-then
- #echo "leyendo el sum de la cache"
- MD5TARGET=$(cat $FILETARGET.sum)
-else
- #echo "calculando el sum de la cache"
- md5sum $FILETARGET | cut -f1 -d" " > $FILETARGET.sum
- MD5TARGET=$(cat $FILETARGET.sum)
+ MD5SOURCE=$(ogCalculateChecksum $FILESOURCE)
fi
+[ ! -f $FILETARGET.sum ] && ogCalculateChecksum $FILETARGET > $FILETARGET.sum
+MD5TARGET=$(cat $FILETARGET.sum)
#echo "Paso 5. comparamos los md5"
#TODO: que hacer cuando los md5 son distintos. Por defecto borrar.
diff --git a/client/engine/README.es.txt b/client/engine/README.es.txt
index 9fc6862b..c2b90b4b 100644
--- a/client/engine/README.es.txt
+++ b/client/engine/README.es.txt
@@ -1,9 +1,9 @@
-OpenGNSys Client Cloning Engine README
+OpenGnSys Client Cloning Engine README
=======================================
En este directorio se incluirán las funciones del motor de
-clonación de OpenGNSys y la documentación asociada.
+clonación de OpenGnSys y la documentación asociada.
Este directorio estará localizado en el directorio del servidor
/opt/opengnsys/client/lib/engine/bin
@@ -11,8 +11,8 @@ Este directorio estará localizado en el directorio del servidor
Las funciones serán accesibles por el cliente en el directorio
/opt/opengnsys/lib/engine/bin
-OpenGNSys Client Cloning Engine se distribuye en un conjunto
-de librerías que incluyen funciones BASH que deben ser exportadas
+OpenGnSys Client Cloning Engine se distribuye en un conjunto de
+librerías que incluyen funciones BASH que deben ser exportadas
al entorno del cliente.
Librerías:
@@ -27,7 +27,10 @@ Librerías:
sistemas operativos.
- Inventory.lib funciones de control de inventario e informes.
- Net.lib funciones básicas de control de acceso a la red.
-- Protocol.lib funciones de implementación de protocolos de comunicación.
-- Registry.lib funciones básicas de gestión del registro de Windows.
+- Postconf.lib funciones de post-configuración de sistemas
+ operativos.
+- Protocol.lib funciones de implementación de protocolos de
+ comunicaciones.
+- Registry.lib funciones de gestión del registro de Windows.
- System.lib funciones básicas del sistema.
diff --git a/client/engine/System.lib b/client/engine/System.lib
index 0d060f29..ed6f24b6 100755
--- a/client/engine/System.lib
+++ b/client/engine/System.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase System
#@class System
#@brief Funciones básicas del sistema.
-#@version 0.9
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -24,7 +24,7 @@
function ogEcho () {
# Variables locales
-local LOGLEVEL LOGFILE DATETIME
+local LOGLEVEL DATETIME
# Selección del nivel de registro (opcional).
case "$1" in
@@ -37,7 +37,7 @@ esac
DATETIME=$(date +"%F %T")
if [ -n "$LOGLEVEL" ]; then
- logger -s -t "OpenGnSys $LOGLEVEL" -f $LOGFILE "$DATETIME $*"
+ logger -s -t "OpenGnSys $LOGLEVEL" -f $OGLOGFILE "$DATETIME $*"
logger -t "OpenGnSys $LOGLEVEL" -f $OGLOGCOMMAND "$DATETIME $*"
logger -t "OpenGnSys $LOGLEVEL" -f $OGLOGSESSION "$DATETIME $*"
else
@@ -72,6 +72,7 @@ case "$CODE" in
$OG_ERR_PARTITION) MSG="$MSG_ERR_PARTITION \"$2\"" ;;
$OG_ERR_LOCKED) MSG="$MSG_ERR_LOCKED \"$2\"" ;;
$OG_ERR_CACHE) MSG="$MSG_ERR_CACHE \"$2\"" ;;
+ $OG_ERR_NOGPT) MSG="$MSG_ERR_NOGPT \"$2\"" ;;
$OG_ERR_FILESYS) MSG="$MSG_ERR_FILESYS \"$2\"" ;;
$OG_ERR_IMAGE) MSG="$MSG_ERR_IMAGE \"$2\"" ;;
$OG_ERR_NOTOS) MSG="$MSG_ERR_NOTOS \"$2\"" ;;
@@ -92,7 +93,7 @@ case "$CODE" in
$OG_ERR_MCASTRECEIVERFILE) MSG="$MSG_ERR_MCASTRECEIVERFILE \"$2\"" ;;
$OG_ERR_MCASTSENDPARTITION) MSG="$MSG_ERR_MCASTSENDPARTITION \"$2\"" ;;
$OG_ERR_MCASTRECEIVERPARTITION) MSG="$MSG_ERR_MCASTRECEIVERPARTITION \"$2\"" ;;
- $OG_ERR_PROTOCOLJOINMASTER) MSG="$MSG_ERR_PROTOCOLJOINMASTER \"$2\"" ;;
+ $OG_ERR_PROTOCOLJOINMASTER) MSG="$MSG_ERR_PROTOCOLJOINMASTER \"$2\"" ;;
*) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;;
esac
diff --git a/client/shared/etc/engine.cfg b/client/shared/etc/engine.cfg
index 1bf98b5d..59b4a5b6 100644
--- a/client/shared/etc/engine.cfg
+++ b/client/shared/etc/engine.cfg
@@ -3,13 +3,14 @@ OGENGINECONFIGURATE="TRUE"
OGLOGSESSION="/tmp/session.log"
OGLOGCOMMAND="/tmp/command.log"
-#Definicion PostConfiguracion OS WIndows
+##Configuracion de la PostConfiguracion OS WIndows
+#Hacer chkdisk tras la clonacion
OGWINCHKDISK=TRUE
-#interface restauracion
-#Que hacer cuando la cache no tenga espacio libre. [ NONE] -- en desarrollo -> |DELETE|FORMAT]
+#Configuracion de interface restauracion
+#Que hacer cuando la cache no tenga espacio libre. [ NONE | FORMAT ] ]
ACTIONCACHEFULL=NONE
-# Definimos el protocolo a usar en el caso de que no exita cache o no haya espacio sufiencie.
+# Protocolo a usar en el caso de que no exita cache o no haya espacio sufiencie.
RESTOREPROTOCOLNOCACHE=UNICAST
#script Creacion imagen
@@ -18,5 +19,6 @@ IMGCOMP="lzop"
IMGEXT="img"
IMGREDUCE="TRUE"
-#scripts Clonacion remota usando master
+#Configuracion del asistente de Clonacion remota usando master
+#Al enviar particion reducir el sistema de archivos previamente.
OGWINREDUCE=TRUE \ No newline at end of file
diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf
index 93e2503c..8510381c 100644
--- a/client/shared/etc/lang.es_ES.conf
+++ b/client/shared/etc/lang.es_ES.conf
@@ -8,6 +8,7 @@ MSG_ERR_NOTFOUND="Fichero o dispositivo no encontrado"
MSG_ERR_PARTITION="Partición errónea o desconocida"
MSG_ERR_LOCKED="Recurso bloqueado por operación de uso exclusivo"
MSG_ERR_CACHE="Error en partición de caché local"
+MSG_ERR_NOGPT="El disco indicado no contiene una particion GPT"
MSG_ERR_FILESYS="Sistema de archivos desconocido o no se puede montar"
MSG_ERR_NOTOS="Sistema operativo no instalado o no detectado"
MSG_ERR_IMAGE="No se puede crear o restaurar una image de sistema"
@@ -68,6 +69,7 @@ MSG_ERRLOADUDEB="$MSG_ERROR: No se puede cargar el paquete udeb %s."
MSG_LOADUDEBS="Cargar paquetes udeb."
# Mensajes de descripción breve de las funciones de la API.
+MSG_HELP_ogAddCmd="Añade comandos al fichero creado por la función ogInstalMiniSetup."
MSG_HELP_ogAddRegistryKey="Añade una nueva clave al registro de Windows."
MSG_HELP_ogAddRegistryValue="Añade un nuevo valor al registro de Windows."
MSG_HELP_ogBoot="Arranca un sistema operativo instalado."
@@ -79,6 +81,8 @@ MSG_HELP_ogCreateCache="Reserva espacio para la partición de caché al final de
MSG_HELP_ogCreateImage="Genera una imagen exacta de un sistema operativo instalado localmente."
MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)."
MSG_HELP_ogCreatePartitions="Define la estructura de particiones de un disco."
+MSG_HELP_ogCreatePartitionTable="Genera una tabla de particiones en caso de que no sea valida."
+MSG_HELP_ogDeleteCache="Elimina la partición de caché local."
MSG_HELP_ogDeleteFile="Borra un fichero de un espacio de almacenamiento."
MSG_HELP_ogDeletePartitionTable="Elimina la tabla de particiones del disco"
MSG_HELP_ogDeleteRegistryKey="Borra una clave vacía del registro de Windows."
@@ -95,20 +99,25 @@ MSG_HELP_ogFormatFs=$MSG_HELP_ogFormat
MSG_HELP_ogGetArch="Devuelve el tipo de arquitectura del cliente."
MSG_HELP_ogGetCacheSize="Devuelve el tamaño de la partición de caché local."
MSG_HELP_ogGetCacheSpace="Devuelve el espacio máximo disponible que puede ser reservado para la partición de caché local."
+MSG_HELP_ogGetDiskSize="Devuelve el tamaño del disco."
MSG_HELP_ogGetFsSize="Devuelve el tamaño de un sistema de archivos."
MSG_HELP_ogGetFsType="Devuelve el mnemónico de tipo de sistema de archivos."
+MSG_HELP_ogGetGroupDir="Devuelve el cmaino del directorio por defecto para el grupo del cliente."
+MSG_HELP_ogGetGroupName="Devuelve el nombre del grupo al que pertenece el cliente."
MSG_HELP_ogGetHivePath="Devuelve el camino completo del fichero de una sección del registro de Windows."
MSG_HELP_ogGetHostname="Devuelve el nombre de la máquina local."
MSG_HELP_ogGetIpAddress="Devuelve la dirección IP del cliente."
MSG_HELP_ogGetImageSize="Devuelve el tamaño de una imagen de sistema."
+MSG_HELP_ogGetLastSector="Devuelve el último sector usable del disco o de una partición."
MSG_HELP_ogGetMacAddress="Devuelve la dirección Ethernet del cliente."
MSG_HELP_ogGetMountPoint="Devuelve el directorio donde está montado un sistema de archivos local."
MSG_HELP_ogGetOsType="Devuelve el tipo de un sistema operativo instalado."
MSG_HELP_ogGetOsVersion="Devuelve el tipo y la versión de un sistema operativo instalado."
-MSG_HELP_ogGetParentPath=$"Devuelve el camino completo del directorio padre de un fichero de sistema OpenGnSys."
+MSG_HELP_ogGetParentPath="Devuelve el camino completo del directorio padre de un fichero de sistema OpenGnSys."
MSG_HELP_ogGetPartitionActive="Indica cual es la partición marcada como activa en un disco."
MSG_HELP_ogGetPartitionId="Devuelve el identificador de tipo de una partición."
MSG_HELP_ogGetPartitionSize="Devuelve el tamaño de una partición."
+MSG_HELP_ogGetPartitionTableType="Devuelve el tipo de tabla de particiones del disco"
MSG_HELP_ogGetPartitionType="Devuelve el mnemónico de tipo de una partición."
MSG_HELP_ogGetPath="Devuelve el camino completo de un fichero de sistema OpenGnSys."
MSG_HELP_ogGetRegistryValue="Devuelve el dato de un valor del registro de Windows."
@@ -118,6 +127,9 @@ MSG_HELP_ogGetWindowsName="Devuelve el nombre del cliente guardado en el registr
MSG_HELP_ogHelp="Muestra mensajes de ayudas para las funciones."
MSG_HELP_ogHidePartition="Oculta una partición de Windows."
MSG_HELP_ogIdToType="Devuelve el mnemónico asociado al identificador de tipo de partición."
+MSG_HELP_ogInstallLinuxClient="Instala el cliente OpenGnSys en un sistema operativo GNU/Linux."
+MSG_HELP_ogInstallMiniSetup="Instala un archivo que se ejecutará en el arranque de Windows."
+MSG_HELP_ogInstallWindowsClient="Instala el cliente OpenGnSys en un sistema operativo Window."
MSG_HELP_ogIsFormated="Comprueba si un sistema de archivos está formateado."
MSG_HELP_ogIsLocked="Comprueba si una partición está bloqueada por una operación de uso exclusivo."
MSG_HELP_ogIsImageLocked="Comprueba si una imagen está bloqueada por una operación de uso exclusivo."
@@ -163,10 +175,10 @@ MSG_HELP_ogUpdatePartitionTable="Actualiza informacion tabla particiones del dis
# Mensajes de descripción breve de la interfaz.
-MSG_INTERFACE_START="[START Interface ] Ejecutar comando: "
+MSG_INTERFACE_START="[START Interface] Ejecutar comando: "
MSG_INTERFACE_END="[END Interface] Comando terminado con este código: "
-# SCRIPTS messages.
+# Mensajes de scripts.
MSG_SCRIPTS_START=" INICIO scripts : "
MSG_SCRIPTS_END=" FIN scripts: "
@@ -174,11 +186,11 @@ MSG_SCRIPTS_TASK_SLEEP="Esperando para iniciar"
MSG_SCRIPTS_TASK_START="Iniciando"
MSG_SCRIPTS_TASK_ERR="Error"
-# scripts createImage
+# Script createImage.
MSG_SCRIPTS_FILE_RENAME=" Renombrar fichero-imagen previo: "
MSG_SCRIPTS_CREATE_SIZE=" Calcular espacio (KB) requerido para almacenarlo y el disponible: "
-#scripts updateCache
+# Script updateCache.
MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobamos si Actualizacion - existe una imagen con igual nombre pero distinto sum-"
MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE="Comprobar que el tamaño de la cache es mayor que el fichero a descargar."
MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO="Comprobar el espacio libre de la cache y actuar según engine.cfg"
@@ -196,5 +208,6 @@ MSG_SCRIPTS_OS_CONFIGURE="Iniciar la configuracion del sistema restaurado"
MSG_SCRIPTS_TIME_TOTAL="tiempo total del proceso"
MSG_SCRIPTS_TIME_PARTIAL="tiempo parcial del subproceso"
-#HTTPLOG
-MSG_HTTPLOG_NOUSE="No apague este ordenador por favor" \ No newline at end of file
+# HTTPLOG
+MSG_HTTPLOG_NOUSE="No apague este ordenador por favor"
+
diff --git a/client/shared/etc/preinit/fileslinks.sh b/client/shared/etc/preinit/fileslinks.sh
index 7089ce46..ddea1198 100755
--- a/client/shared/etc/preinit/fileslinks.sh
+++ b/client/shared/etc/preinit/fileslinks.sh
@@ -20,7 +20,11 @@ if [ -n "$OPENGNSYS" ]; then
ln -fs /bin/bash /bin/sh
# Crear directorio de bloqueos
- mkdir -p /var/lock || mkdir -p /run/lock
+ mkdir -p /var/lock 2>/dev/null || mkdir -p /run/lock
+
+ # Crear ficheros temporales.
+ touch $OGLOGCOMMAND $OGLOGCOMMAND.tmp $OGLOGSESSION /tmp/menu.tmp
+ chmod 777 $OGLOGCOMMAND $OGLOGCOMMAND.tmp $OGLOGSESSION /tmp/menu.tmp
# # Directorio de tipos de letras para el browser.
QTDIR="/usr/local"
diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh
index 1260c973..1aa248d4 100755
--- a/client/shared/etc/preinit/loadenviron.sh
+++ b/client/shared/etc/preinit/loadenviron.sh
@@ -60,6 +60,8 @@ if [ -d $OPENGNSYS ]; then
# Cargar configuración del engine.
[ -f ${OGETC}/engine.cfg ] && source ${OGETC}/engine.cfg
+ export OGLOGCOMMAND=${OGLOGCOMMAND:-/tmp/command.log}
+ export OGLOGSESSION=${OGLOGSESSION:-/tmp/session.log}
# Cargar las APIs según engine.
if [ -n "$ogengine" ]; then
diff --git a/client/shared/lib/httpd/LogCommand.sh b/client/shared/lib/httpd/LogCommand.sh
index 9a116f7c..9a116f7c 100644..100755
--- a/client/shared/lib/httpd/LogCommand.sh
+++ b/client/shared/lib/httpd/LogCommand.sh
diff --git a/client/shared/lib/httpd/LogSession.sh b/client/shared/lib/httpd/LogSession.sh
index a5d18e68..a5d18e68 100644..100755
--- a/client/shared/lib/httpd/LogSession.sh
+++ b/client/shared/lib/httpd/LogSession.sh
diff --git a/client/shared/lib/httpd/bandwidth.sh b/client/shared/lib/httpd/bandwidth.sh
index 9e7833c3..9e7833c3 100644..100755
--- a/client/shared/lib/httpd/bandwidth.sh
+++ b/client/shared/lib/httpd/bandwidth.sh
diff --git a/client/shared/lib/httpd/cache.sh b/client/shared/lib/httpd/cache.sh
new file mode 100755
index 00000000..a2e40093
--- /dev/null
+++ b/client/shared/lib/httpd/cache.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+echo "Content-type: text/html"
+echo ""
+echo "<html><head> <meta http-equiv='Refresh' content='5,URL=./cache.sh'> <title>Listado de la Cache"
+echo "</title>"
+echo "<style type='text/css'>"
+echo "<!--"
+echo "TEXTAREA {"
+echo "background-color: navy;"
+echo "border: black 2px solid;"
+echo "color: white;"
+echo "font-family: arial, verdana, ms sans serif;"
+echo "font-size: 8pt;"
+echo "font-weight: normal"
+echo "} "
+echo "-->"
+echo "</style>"
+echo "</head><body>"
+echo "<TEXTAREA NAME='contenido' ROWS='30' COLS='150' >"
+echo "$(ls -lh /opt/opengnsys/cache/opt/opengnsys/images )"
+echo "</TEXTAREA>"
+echo "</body></html>" \ No newline at end of file
diff --git a/client/shared/lib/httpd/httpd-log.sh b/client/shared/lib/httpd/httpd-log.sh
index ae76b5fe..58ee6ec6 100644..100755
--- a/client/shared/lib/httpd/httpd-log.sh
+++ b/client/shared/lib/httpd/httpd-log.sh
@@ -8,7 +8,7 @@ echo "<html><head><title>OpenGnsys Client</title></head><body>"
echo "<h1> $(./httpd-runengine.sh 'ogEcho $MSG_HTTPLOG_NOUSE' ) . host $(hostname -s)</h1> "
echo "<IFRAME SRC='bandwidth.sh' WIDTH=250 HEIGHT=80> <A HREF="bandwidth.sh">link</A> </IFRAME> "
-
+echo "<IFRAME SRC='cache.sh' WIDTH=590 HEIGHT=90><A HREF="cache.sh">link</a> </IFRAME><br>"
echo "<IFRAME SRC='LogSession.sh' WIDTH=850 HEIGHT=230> <A HREF="LogSession.sh">link</A> </IFRAME>"
echo "<IFRAME SRC='LogCommand.sh' WIDTH=850 HEIGHT=250> <A HREF="LogCommand.sh">link</A> </IFRAME>"
diff --git a/client/shared/lib/httpd/httpd-menu.sh b/client/shared/lib/httpd/httpd-menu.sh
index c5e58364..c5e58364 100644..100755
--- a/client/shared/lib/httpd/httpd-menu.sh
+++ b/client/shared/lib/httpd/httpd-menu.sh
diff --git a/client/shared/lib/httpd/lighttpd.conf b/client/shared/lib/httpd/lighttpd.conf
index 7a11040b..7a11040b 100755..100644
--- a/client/shared/lib/httpd/lighttpd.conf
+++ b/client/shared/lib/httpd/lighttpd.conf
diff --git a/client/shared/lib/ogclient/ogAdmLnxClient b/client/shared/lib/ogclient/ogAdmLnxClient
new file mode 100755
index 00000000..cd34d121
--- /dev/null
+++ b/client/shared/lib/ogclient/ogAdmLnxClient
Binary files differ
diff --git a/client/shared/lib/ogclient/ogAdmWinClient.exe b/client/shared/lib/ogclient/ogAdmWinClient.exe
new file mode 100644
index 00000000..56f1899d
--- /dev/null
+++ b/client/shared/lib/ogclient/ogAdmWinClient.exe
Binary files differ
diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs
index 06745748..b0ab3d33 100755
--- a/client/shared/scripts/configureOs
+++ b/client/shared/scripts/configureOs
@@ -1,9 +1,8 @@
#!/bin/bash
#/**
-# configureOS
-#@brief Scirpt de ejemplo para realizar la configuracion del sistema operativo restaurado.
-#@brief (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin).
+# configureOs
+#@brief Scirpt para realizar la configuracion del sistema operativo restaurado.
#@param 1 disco
#@param 2 particion
#@return
@@ -21,39 +20,51 @@
#@version 1.0.3 - Configura el chkdisk en el arranque de windows, segun variable OGWINCHKDISK del engine.cfg.
#@author Antonio J. Doblas Viso. Universidad de Malaga.
#@date 2011-12-23
+#@version 1.0.4 - Inyecta el cliente para gestión del sistema operativo.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-04-11
-#Carga del configurador del engine
+# Carga el configurador del engine y los parámetros de red.
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+[ -f $DEVICECFG ] && source $DEVICECFG
-# Si el sistema de archivos no esta extendido. Realizar.
-PARTSIZE=$(ogGetPartitionSize $1 $2)
+# Si el sistema de archivos no esta extendido, ampliarlo al tamaño de su partición.
+PARTSIZE=$(ogGetPartitionSize $1 $2) || exit $?
FSSIZE=$(ogGetFsSize $1 $2)
if [ $FSSIZE -lt $PARTSIZE ]; then
echo "Extender sistema de archivos."
ogExtendFs $1 $2
fi
-#Si no existe particion activa, activar este sistema.
+# Si no existe partición activa, activar este sistema.
FLAGACTIVE=$(ogGetPartitionActive $1)
[ -z $FLAGACTIVE ] && ogSetPartitionActive $1 $2
-# Cambiar nombre en sistemas Windows y quitar usuario de acceso por defecto.
-if [ "$(ogGetOsType $1 $2)" = "Windows" ]; then
- # Cambiar nombre en sistemas Windows.
- HOST=$(ogGetHostname)
- HOST=${HOST:-"pc"}
- ogSetWindowsName $1 $2 "$HOST"
- # Descomentar la siguiente línea para cambiar usuario de inicio.
- #ogSetWinlogonUser $1 $2 " "
- # Configurar el boot sector de la partición Windows.
- ogFixBootSector $1 $2
- # Configurar el gestor de arranque de Windows XP/Vista/7.
- ogWindowsBootParameters $1 $2
- # Registrar en Windows que la partición indicada es su nueva unidad C:\
- ogWindowsRegisterPartition $1 $2 C $1 $2
- ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows
-fi
+# Post-configuración personalizada para cada tipo de sistema operativo.
+OSTYPE="$(ogGetOsType $1 $2)"
+case "$OSTYPE" in
+ Windows)
+ # Cambiar nombre en sistemas Windows.
+ HOST=$(ogGetHostname)
+ HOST=${HOST:-"pc"}
+ ogSetWindowsName $1 $2 "$HOST"
+ # Descomentar la siguiente línea para cambiar usuario de inicio.
+ #ogSetWinlogonUser $1 $2 " "
+ # Configurar el boot sector de la partición Windows.
+ ogFixBootSector $1 $2
+ # Configurar el gestor de arranque de Windows XP/Vista/7.
+ ogWindowsBootParameters $1 $2
+ # Registrar en Windows que la partición indicada es su nueva unidad C:\
+ ogWindowsRegisterPartition $1 $2 C $1 $2
+ ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows
+ # Instalar cliente para Windows.
+ ogInstallWindowsClient $1 $2
+ ;;
+ Linux)
+ ## Install and Configure Grub based on OS installed and Grub 1st stage location.
+ ogGrubInstallPartition $1 $2
+ # Instalar cliente para Linux.
+ ogInstallLinuxClient $1 $2
+ ;;
+esac
-if [ "$(ogGetOsType $1 $2)" = "Linux" ]; then
- ogGrubInstallPartition $1 $2
-fi \ No newline at end of file
diff --git a/client/shared/scripts/generateMenuDefault b/client/shared/scripts/generateMenuDefault
index 0437cd3d..404de375 100755
--- a/client/shared/scripts/generateMenuDefault
+++ b/client/shared/scripts/generateMenuDefault
@@ -1,30 +1,48 @@
#ª/bin/bash
source /tmp/net-eth0.conf
-FILEINFOHTML=/opt/opengnsys/log/`ogGetIpAddress`.info.html
-
-SPEED=$(ethtool $DEVICE | grep Speed | awk -F": " '{print $2}')
-DUPLEX=$(ethtool $DEVICE | grep Duplex | awk -F": " '{print $2}')
+FILEINFOHTML=$OGLOG/`ogGetIpAddress`.info.html
+FILEINFOCACHE=$OGLOG/`ogGetIpAddress`.cache.txt
+ogMountCache 2>/dev/null
+CACHECONTENIDO=`ls -m $OGCAC/$OGIMG 2>/dev/null`
+
+SPEED=$(LANG=C ethtool $DEVICE 2>/dev/null | awk '$1~/Speed/ {print $2}')
+case "$SPEED" in
+ 1000[Mm]b/s) ;;
+ 100[Mm]b/s) SPEED="<font color=\"blue\">$SPEED</font>" ;;
+ 10[Mm]b/s) SPEED="<font color=\"grey\">$SPEED</font>" ;;
+ *) SPEED="<font color=\"red\">$SPEED</font>" ;;
+esac
+DUPLEX=$(LANG=C ethtool $DEVICE 2>/dev/null | awk '$1~/Duplex/ {print $2}')
+case "$DUPLEX" in
+ [Ff]ull) ;;
+ *) DUPLEX="<font color=\"red\">$DUPLEX</font>"
+esac
+CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`)
+expr $CACHESIZEFREE / 1024 > $FILEINFOCACHE 2>/dev/null && echo '.MB,' >> $FILEINFOCACHE
#
# echo '';
#
cat > $FILEINFOHTML << EOF
-<div align="center" style="font-family: Arial, Helvetica, sans-serif;">'
+<div align="center" style="font-family: Arial, Helvetica, sans-serif;">
<p style="color:#999999; font-size: 16px; margin: 2em;">
-<table border=1>
-<tr>
-<TD rowspan=2><P align=left><IMG border=0 src="../images/iconos/logoopengnsys.png"><P> </td>
-<td> Hostname: </td> <td> IP </td> <td> MAC </td> <td> Speed </td> <td> duplex </td> </tr>
-<tr> <td> $HOSTNAME </td> <td> $(ogGetIpAddress) </td> <td> $(ogGetMacAddress) </td> <td> $SPEED </td> <td> $DUPLEX </td> </tr>
+<table border=1 width="100%">
+<tr>
+<td rowspan="2"><p align="left"><img border="0" src="../images/iconos/logoopengnsys.png"><p> </td>
+<td> Hostname </td> <td> IP </td> <td> MAC </td> <td> Speed </td> <td> Duplex </td> </tr>
+<tr> <td>$HOSTNAME </td> <td> $(ogGetIpAddress) </td> <td> $(ogGetMacAddress) </td> <td> $SPEED </td> <td> $DUPLEX </td> </tr>
</table>
-
</p>
<p style="font-size: 14px; margin: 2em;">
</p>
</div>
-EOF \ No newline at end of file
+EOF
+cat >> $FILEINFOCACHE << EOF
+$CACHECONTENIDO
+EOF
+
diff --git a/client/shared/scripts/poweroff b/client/shared/scripts/poweroff
index bf867467..3be97ed0 100755
--- a/client/shared/scripts/poweroff
+++ b/client/shared/scripts/poweroff
@@ -13,6 +13,6 @@ echo "[50] Desmontar cache local."
ogUnmountCache
echo "[70] Apagando el equipo."
ethtool -s $DEVICE wol g
-(sleep 5 && busybox poweroff) &
+(sleep 5 && busyboxOLD poweroff) &
diff --git a/client/shared/scripts/reboot b/client/shared/scripts/reboot
index 7b7f3c94..7966b9a3 100755
--- a/client/shared/scripts/reboot
+++ b/client/shared/scripts/reboot
@@ -13,5 +13,5 @@ echo "[50] Desmontar cache local."
ogUnmountCache
echo "[90] Reiniciar el equipo."
ethtool -s $DEVICE wol g
-(sleep 5 && busybox reboot) &
+(sleep 5 && busyboxOLD reboot) &
diff --git a/client/shared/scripts/runhttplog.sh b/client/shared/scripts/runhttplog.sh
index 04d3e530..82115b14 100755
--- a/client/shared/scripts/runhttplog.sh
+++ b/client/shared/scripts/runhttplog.sh
@@ -1,10 +1,5 @@
#!/bin/bash
-echo "export OGLOGCOMMAND=/tmp/command.log" >> /etc/profile.d/loadenviron.sh
-echo "export OGLOGSESSION=/tmp/session.log" >> /etc/profile.d/loadenviron.sh
- export OGLOGCOMMAND=/tmp/command.log
- export OGLOGSESSION=/tmp/session.log
-
#httd-log-status
cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.back
cp /opt/opengnsys/lib/httpd/lighttpd.conf /etc/lighttpd/
@@ -15,16 +10,5 @@ chmod 755 /opt
cp /opt/opengnsys/lib/httpd/* /usr/lib/cgi-bin
#TODO:
dstat -dn 10 > /tmp/bandwidth &
-#Se pasan al loadenviro para su uso en ssh
-#export OGLOGSESSION=/tmp/session.log
-#export OGLOGCOMMAND=/tmp/command.log
-touch $OGLOGCOMMAND
-touch $OGLOGSESSION
-touch ${OGLOGCOMMAND}.tmp
-chmod 777 $OGLOGCOMMAND
-chmod 777 $OGLOGSESSION
-chmod 777 ${OGLOGCOMMAND}.tmp
-touch /tmp/menu.tmp
-chmod 777 /tmp/menu.tmp
echo "WAITING" >> $OGLOGSESSION
-# http-log-status \ No newline at end of file
+# http-log-status
diff --git a/client/shared/scripts/samples/configureGroup b/client/shared/scripts/samples/configureGroup
new file mode 100755
index 00000000..65638438
--- /dev/null
+++ b/client/shared/scripts/samples/configureGroup
@@ -0,0 +1,65 @@
+#!/bin/bash
+#/**
+#@file configureGroup
+#@brief Script de ejemplo de post-configuracion del sistema operativo especifica de cada grupo de ordenadores.
+#@brief El directorio del grupo en el repositorio se situa en /opt/opengnsys/groups/Nombre_Grupo
+#@brief Se ponen archivos o marcas dentro del directorio del grupo (si queremos que afecte a todas las imagenes)
+#@brief o del subdirectorio de la imagen dentro del grupo. Los archivos se copian en el sitio correcto del sistema
+#@brief y las marcas se comprueba que existen para inicar una accion (ej: cambiar registro)
+#@param str_repo repositorio de imágenes (remoto o caché local)
+#@param path_image camino de la imagen (sin extensión)
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la particion
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@warning License: GNU GPLv3+
+#*/
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$0" "$0 path_dir str_image int_ndisk int_npart" \
+ "$0 REPO /aula1/winxp 1 1"
+ exit
+fi
+
+# Error si no se reciben 4 parámetros.
+[ $# -eq 4 ] || ogRaiseError $OG_ERR_FORMAT || exit $?
+
+# Procesar parámetros.
+PART=$(ogMount $3 $4) || ogRaiseError $OG_ERR_PARTITION "$3 $4" || exit $?
+IMGNAME=$(basename $2)
+GROUPDIR=$(ogGetGroupDir)
+IMGDIR=$GROUPDIR/$IMGNAME
+
+# Comprobamos que exista GROUPDIR. Si no existe no es error, nada que configurar
+[ ! -x "$GROUPDIR" ] && exit 0
+
+
+TYPE=$(ogGetOsVersion $3 $4)
+
+case "$TYPE" in
+ Linux*) echo "PostConfiguracion de Linux para el grupo $group"
+ # Si existen estos ficheros en el directorio del grupo o de la imagen se copian a la particion
+ [ -e $IMGDIR/menu.lst ] && echo "cp -f $IMGDIR/menu.lst $PART/boot/grub/menu.lst" && cp -f $IMGDIR/menu.lst $PART/boot/grub/menu.lst
+ [ -e $IMGDIR/grub.cfg ] && echo "cp $IMGDIR/grub.cfg $PART/boot/grub/grub.cfg" && cp -f $IMGDIR/grub.cfg $PART/boot/grub/grub.cfg
+ [ -e $IMGDIR/hosts ] && echo "cp -f $IMGDIR/hosts $PART/etc/hosts" && cp -f $IMGDIR/hosts $PART/etc/hosts
+ [ -e $IMGDIR/fstab ] && echo "cp -f $IMGDIR/fstab $PART/etc/fstab" && cp -f $IMGDIR/fstab $PART/etc/fstab
+ [ -e $IMGDIR/xorg.conf ] && echo "cp -f $IMGDIR/xorg.conf $PART/etc/X11/xorg.conf" && cp -f $IMGDIR/xorg.conf $PART/etc/X11/xorg.conf
+ [ -e $IMGDIR/rc.local ] && echo "cp -f $IMGDIR/rc.local $PART/etc/rc.local" && cp -f $IMGDIR/rc.local $PART/etc/rc.local
+ [ -e $IMGDIR/interfaces ] && echo "cp -f $IMGDIR/interfaces $PART/etc/network/interfaces" && cp -f $IMGDIR/interfaces $PART/etc/network/interfaces
+ [ -e $IMGDIR/passwd ] && echo "cp -f $IMGDIR/passwd $PART/etc/passwd" && cp -f $IMGDIR/passwd $PART/etc/passwd
+ ;;
+
+ *Windows\ XP) echo "PostConfiguracion de XP para el grupo $group"
+ # Si existen estos ficheros en el directorio del grupo o de la imagen se copian a la particion
+ [ -e $IMGDIR/SAM ] && echo "cp -f $IMGDIR/SAM $PART/Windows/System32/config/SAM" && cp -f $IMGDIR/SAM $PART/Windows/System32/config/SAM
+ ;;
+ *Windows\ 7*) echo "Postconfiguracion de W7 para el grupo $group"
+ # Si existen estos ficheros en el directorio del grupo o de la imagen se copian a la particion
+ [ -e $IMGDIR/SAM ] && echo "cp -f $IMGDIR/SAM $PART/Windows/System32/config/SAM" && cp -f $IMGDIR/SAM $PART/Windows/System32/config/SAM
+ ;;
+ *) exit 0
+ ;;
+ esac
+
diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt
index 520a470f..b44cd84a 100644
--- a/doc/CHANGELOG.es.txt
+++ b/doc/CHANGELOG.es.txt
@@ -2,11 +2,79 @@ LISTA DE CAMBIOS CHANGELOG.es.ext
========================================
+Lista de cambios incluidos en OpenGnSys 1.0.4
+---------------------------------------------
+
+Tickets resueltos en módulo OpenGnSys Cloning Engine:
+#465 httpdlog CrearImagen salida de reducir sistema archivos (no se resolverá)
+#489 Suma de verificacion de la imagen más rápida
+#518 Se marca mal el FS al particionar, lo marca como EMPTY y luego no se pueden formatear
+#521 Función ogUpdateCacheIsNecesary: usar funcion para cálculo de MD5
+#522 Script updateCache: eliminar opción del case $ACTIONCACHEFULL=NONE
+#527 Mejora del sistema de postconfiguracion
+#530 Función ogReduceFs sobre windows 7 no borra fichero hiberfil.sys
+#538 Función ogTypeToId: error en parámetro
+#540 Función ogCreateCache no detecta tipo de tabla de particiones
+#543 Particionado -incluido initCache- sobre disco duro sin formatear no funciona
+
+Tickets resueltos en módulo OpenGnSys Client:
+#116 Aviso en el browser de cliente rechazado (no se resolverá)
+#411 Menú por defecto para los clientes con información básica del estado de red
+#415 Compatiblidad hardware (red, disco) en los clientes OpenGnSys
+#416 Aviso en el browser de cliente rechazado
+#419 chntpw trunca las claves de registro largas
+#491 Log de seguimiento con información de caché local
+#494 Información de la caché en pantalla del cliente (no válido)
+#497 Clientes opengnsys para Windows y Linux (resuelto en #501)
+#520 ogLive modprobe no utiliza los modulos correspondientes
+#525 Seleccionar el tipo de arranque de sistemas Windows (reinicio o en caliente)
+#529 Cliente ogLive basado en Ubuntu 12.04
+#546 ogLive en modo PXE durante el proceso de arranque no continuará hasta que la interfaz de red esté correctamente configurada
+#547 oglive basado en Ubuntu 12.04 no detecta ficheros de configuración de DNS
+
+Tickets resueltos en módulo OpenGnSys Server:
+#426 isAlive: control de los servicios OpenGnSys
+#488 Script de comparación configuración DHCP y OpenGnSys
+#493 Configurar el modo PXE desde el cliente
+#513 Wake_on_lan por IP (opcional)
+#514 Controlar clave de acceso del cliente
+#517 Servicio opengnsys comprobación de permisos en sistema de archivos
+
+Tickets resueltos en módulo OpenGnSys Web Admin Console:
+#427 Postconfiguración por grupos de ordenadores (heredado de #14)
+#452 Elegir resolución en los menús
+#462 Consola: eliminar grupos de ordenadores
+#473 La cola de acciones no muestra el protocolo usado en la restauración ni sus parámetros
+#490 Usuarios y contraseñas con más de 10 caracteres
+#495 Contenido de la caché
+#496 Ejecuición procedimientos encadendos (resuelto en #501)
+#500 Iniciar sesión segunda partición Linux no habilitada
+#502 Tamaño Iframe propiedades ordenadores
+#503 Asistente con seguimiento predeterminado (no válido)
+#505 Filtrado de ordenadores para aplicar comandos
+#509 Incluir foto/imagen en propiedades de ordenadores y aulas
+#516 Restaurar desde consola: falla si esta recién particionado
+#539 Leyenda en estaus de ordenadores
+#545 Comando Restaurar de consola web: activación de unicast-cache (deploy unicast)
+
+Tickets resueltos en módulo OpenGnSys Installer:
+#414 Instalar OpenGnSys en otras distribuciones Linux
+#515 Actualizador no actualiza cambios de la base de datos
+
+Tickets genéricos resueltos:
+#445 Limitación puertos multicast: inconsistencia consola administración y Protocol.lib
+#501 Procedimientos encadenados y clientes para Linux y Windows
+#508 Branch UMA: Script con TODOS los cambios de las propuestas 1.0.4 (#491, #494, #495, #502 y #503)
+#526 Particionado discos GPT
+#531 Integración de OpenGnSys 1.0.4 en rama principal
+
+
Lista de cambios incluidos en OpenGnSys 1.0.3
---------------------------------------------
Tickets resueltos en módulo OpenGnSys Cloning Engine:
#92 ogGetFsType detecta identificador de partición no sistema de archivos
+#447 Restauración por Multicast en script restoreImage
#469 Definir fichero de configuración para el motor de clonación
#470 Implementar mejoras en script updateCache
#471 Test de rendimiento de sistemas de archivos en contenedor de imágenes local y remoto (duplicado de #468)
@@ -34,7 +102,8 @@ Tickets resueltos en módulo OpenGnSys Web Admin Console:
#492 Mejoras en páginas principal de acceso (mejora)
Tickets resueltos en módulo OpenGnSys Installer:
-#504 instalador: error al instalar servidor DHCP en Ubuntu 10.04.4
+#410 Instalación de servidor común para varias subredes
+#504 Instalador: error al instalar servidor DHCP en Ubuntu 10.04.4
#507 OpenGnSys Installer 1.0.3 no crea enlace /opt/opengnsys/tftpboot -> /var/lib/tftpboot en Ubuntu
#510 Instalador: error en función autoConfigurePost
@@ -62,18 +131,26 @@ Lista de cambios incluidos en OpenGnSys 1.0.2
Tickets resueltos en módulo OpenGnSys Cloning Engine:
#14 Crear funciones de línea de comando que permitan la gestión de los grupos de PCs (duplicado)
#370 ogGetMacAddress en host multiples interfaces siempre usa datos eth0 aunque no esté activa
+#381 Sincronizar errores del engine -> ogAdmClient -> ogAdmServer
#393 En acceso ssh a los clientes, no reconoce funciones de valores de la interfaz de red
#394 crearImagen y updateCache debe considerar espacio libre para almacenar la imagen
#402 Gestor de arranque para Windows 7/Vista/XP/2000
+#438 Modificación del fichero de boot bcd de Windows falla
#450 Instalar Grub en sistemas Linux restaurados
-#460 updateCache usando torrent en una operación con más de 60 clientes produce error inesperado del binario ctorrent en algunos equipos
+#459 updateCache usando torrent en una operación con más de 60 clientes produce error inesperado del binario ctorrent en algunos equipos
Tickets resueltos en módulo OpenGnSys Client:
#371 ogAdmClient debería realizar proceso de actualización a la BD después de particionado, restauración (duplicado de #265)
+#404 boot-tools iso - arranque pxe, cd, usb, cache
+#420 boot-tools (oglive-ogclient) compatible con og2
#421 boot-tools-httd-log (mejora)
#422 boot-tools: Separar los log normales de los de seguimiento
+#429 Añadir herramienta gráfica gparted al ogclient
#430 RAMFS del boot-tools autogestión sobre la caché: Instalación y Actualización
+#431 Instalador boot-tools incluye iso y el md5 de todos los componentes
#432 Escalar servicios de almacenamiento
+#439 boot-tools herramientas acceso registro Windows
+#442 Consola ssh desde interfaz web
#444 Sustitución definitiva de PXELinux por Grub4Dos en el arranque de clientes (heredado de #134)
#451 Fase inicial para apagado programado de clientes inactivos
@@ -91,6 +168,9 @@ Tickets resueltos en módulo OpenGnSys Web Admin Console:
#458 Interfaz RestaurarImagen no pasa los parametros correctos a script updateCache
Tickets resueltos en módulo OpenGnSys Installer:
+#424 opengnsys installer|update updateClient() no descarga iso cliente con nombre distinto
+#433 ogLive-natty-2.6.38-8-generic-pae-r2268.iso
+#449 Actualizar installer y update con el nuevo formato de cliente ogLive iso y adaptado al ogupdteinitrd
#464 opengnsys_update de la 1.0.1 a la 1.0.2 no actualiza el ogAdmClient.cfg
Tickets genéricos resueltos:
@@ -128,7 +208,7 @@ Tickets resueltos en módulo OpenGnSys Server:
Tickets resueltos en módulo OpenGnSys Web Admin Console:
#256 Restaurar con caché (duplicado de #357)
-#357 Comando Restaurar admite protocolos P2P, multicast, unicast
+#270 Consola web: error en nombre canónico de imagen
#378 Asignar letrero auxiliar en el fondo del browser, indicando que no se apague el ordenador
#387 Opción reubicador de ordenadores, no soporta nombres de grupos de ordenadores que incluye espacios
#388 Netboot sobre grupo de aulas muestra ordenadores que no le corresponde
@@ -170,6 +250,7 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine:
Tickets resueltos en módulo OpenGnSys Client:
#93 Gestionar una estructura de directorios Linux debootstrap para enlazarlo al Initrd
#115 ogAdmClient no lee correctamente el fichero de configuración
+#127 Generar cliente con Debootstrap basado en Ubuntu Lucid (duplicado de #93)
#131 Generar paquetes deb para el cliente (no se resolverá)
#162 Optimizar el uso del fichero-disco con particiones para su uso en entorno virtualizado (mejora)
#163 Incluir en el cliente la clave autorizada rsa ssh del servidor
@@ -187,6 +268,7 @@ Tickets resueltos en módulo OpenGnSys Client:
#368 Generar nuevo cliente como boot-tools
Tickets resueltos en módulo OpenGnSys Server:
+#340 Menú PXE de arranque con tiempo de espera
#350 ogAdmAgent no se inicia
Tickets resueltos en módulo OpenGnSys Repository Server:
@@ -208,6 +290,7 @@ Tickets resueltos en módulo OpenGnSys Web Admin Console:
#307 Asistente Deploy de Imagenes no muestra nombres de imágenes
#308 Asistente Deploy de Imagenes - multicast: no lanza el repo
#310 Instalar: no genera las propiedades del repositorio por defecto en la consola (duplicado de #248)
+#311 Consola: Añadir aula no comprueba valores
#315 OpenGnSys distribuido: CloneRemoteFromPartition en Unicast
#338 Validación de formularios de la consola web
#339 Añadir opción de apagado en cliente sin menú asociado (mejora)
@@ -234,6 +317,7 @@ Lista de cambios incluidos en OpenGnSys 0.10
--------------------------------------------
Tickets resueltos en módulo OpenGnSys Cloning Engine:
+#128 Scripts para pruebas de rendimiento de NFS vs NBD
#182 Clonación remota partición a partición
#257 ogCreatePartitions: Al crear o modificar las particiones desaparece la cache
#261 restoreImage de un XP cambia usuario inicio sesión a HOSTNAME
@@ -244,9 +328,11 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine:
#290 ogReduceFs en Ext[234]
#293 createImageTesting incluye el redimensionado de la partición origen pero luego no la expande
#297 Error al detectar tipo de partición Linux marcada como activa
+#351 ogCreatePartitions() ogUpdatePartitionTable() error con equipos con ciertas disqueteras
Tickets resueltos en módulo OpenGnSys Client:
#112 Problema al arrancar Windows en discos SATA2
+#157 ogClient falla al buscar una función ogConfigureRamfs
#237 Sustituir Partimage
#250 En ocasiones el cliente no arranca el browser gráfico
#255 ogClient: Si falla alguna comprobación inicial, se para el ogClient
@@ -254,6 +340,7 @@ Tickets resueltos en módulo OpenGnSys Client:
#275 Generador de cliente Initrd no detecta versión de Ubuntu
Tickets resueltos en módulo OpenGnSys Server:
+#89 Incluir binarios herramientas testing
#260 Gestionar plantillas PXE mediante scripts
Tickets resueltos en módulo OpenGnSys Repository Server:
@@ -286,11 +373,16 @@ Lista de cambios incluidos en OpenGnSys 0.9.2
---------------------------------------------
Tickets resueltos en módulo OpenGnSys Cloning Engine:
+#70 Funciones para distribuir imágenes por P2P
#159 No reconoce Ubuntu 10.04
#165 Función torrent no migrada correctamente desde el branch
#166 Errores Particionando y Formateando
+#168 Protocol.lib control errores ogGenerateSintaxMcast
+#170 Redefinir proceso de creación de torrent de una imagen
#172 Protocol.lib Error control nº parámetros sesión multicast de cliente
#178 Adaptar funciones de generación y restauración de imágenes monolíticas
+#180 Funiocnes de generación sintaxis no detecta la existencia de mbuffer
+#183 Renombrar funciones composición de sintaxis para que sean tipo "Syntax"
#191 ogReduceFs con ntfs, tamaño auxiliar mínimo depende del tamaño total de datos
#216 Incluir histórico al engine, adaptarlo a doxygen
@@ -302,11 +394,13 @@ Tickets resueltos en módulo OpenGnSys Client:
#155 Controlar tamaño mínimo de la caché
#156 ogClient no encuentra ni el kernel ni el initrd
#161 El cliente no acepta las solicitud de reboot y reiniciar del servicio ogADMClient
+#167 Cliente opengnsys 2ndFS con descarga torrent no participa en el enjambre (mejora)
#169 No se detectan discos en placas nuevas
#173 Arranque de cliente lento al crear enlaces simbólicos
#174 Algunos binarios no se ejecutan en clientes de 64 bits
#176 No se ve el vídeo en cliente basado en Ubuntu Lucid
#181 Parámetro eliminación cache
+#186 ogadmclient -> ogGetIpAddress -> devuleve como ip la interfaz loop
#229 Mensaje de confirmación para ejecutar algunas acciones en el Browser
Tickets resueltos en módulo OpenGnSys Server:
@@ -323,7 +417,7 @@ Tickets resueltos en módulo OpenGnSys Web Admin Console
Tickets resueltos en módulo OpenGnSys Installer:
#100 oginstaller gestor torrent
-#150 Fallo de Opengnsys Intaller (si MySQL ya instalado)
+#150 Fallo de Opengnsys Intaller (duplicado de #144)
#171 binarios y scripts para multicast
Tickets genéricos resueltos:
diff --git a/doc/VERSION.txt b/doc/VERSION.txt
index 5e63a308..efa6d78c 100644
--- a/doc/VERSION.txt
+++ b/doc/VERSION.txt
@@ -1 +1 @@
-OpenGnSys 1.0.3 r2379
+OpenGnSys 1.0.4
diff --git a/installer/INSTALL.es.txt b/installer/INSTALL.es.txt
index 7291d677..4a809ac1 100644
--- a/installer/INSTALL.es.txt
+++ b/installer/INSTALL.es.txt
@@ -14,6 +14,9 @@ Descargar una versión completa y desccomprimir el fichero "opengnsys-version.ta
O bien, descargar el instalador desde la última reversión del repositorio:
svn export http://www.opengnsys.es/svn/trunk/installer/opengnsys_installer.sh
+Opcionalmente, puede descargarse la imagen del cliente; si no se realiza este paso, el instalador la descargará automáticamente.
+ wget http://www.opengnsys.es/downloads/ogLive-versioncliente.iso
+
2. Configuración básica.
Como medida de seguridad, debe modificarse los usuarios y claves por defecto de acceso al sistema. Para ello, editar el fichero de instalación opengnsys_installer.sh y modificar los valores de las variables de configuración:
diff --git a/installer/README.es.txt b/installer/README.es.txt
index 828a32cc..1b270926 100644
--- a/installer/README.es.txt
+++ b/installer/README.es.txt
@@ -14,3 +14,5 @@ eliminar el Proyecto OpenGnSys.
- opengnsys_uninstall.sh programa de desinstalación del serviidor
- opengnsys_update.sh programa de actualización del serviidor
+- install_ticket_wolunicast.sh programa de instalación del parche para ejecutar
+ arranque Wake-On-Lan por IP usando protocolo Unicast
diff --git a/installer/install_ticket_wolunicast.sh b/installer/install_ticket_wolunicast.sh
new file mode 100755
index 00000000..31621636
--- /dev/null
+++ b/installer/install_ticket_wolunicast.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+# Instalacin del ticket 513: Wake-On-Lan por IP en Unicast.
+
+# Declaracin de variables.
+TICKET="513-WOL-Unicast";
+SVNURLSOURCE="http://opengnsys.es/svn/branches/version1.0-tickets/Resueltos/wake_on_lan_por_IP_unicast_ticket513/";
+BASEDIR="/opt/opengnsys/";
+TICKETDIR="${BASEDIR}tickets/";
+TARGETDIR="${TICKETDIR}${TICKET}/";
+LISTTOBACKUP="${TICKETDIR}${TICKET}-BACKUP.txt";
+FILEBACKUP="${TICKETDIR}${TICKET}-BACKUP.tgz";
+SVNURLSOURCEBASE="http://opengnsys.es/svn/trunk/admin/Sources/";
+
+#TODO comprobar version de opengnsys.
+
+echo "Parando los servios."
+/etc/init.d/opengnsys stop
+sleep 5
+
+mkdir -p $TARGETDIR;
+echo "Descargando base de los sources"
+svn export --force $SVNURLSOURCEBASE $TARGETDIR/admin/Sources;
+if [ ! -d $TARGETDIR/admin/Sources ]; then
+ echo "Error de acceso a los ficheros fuente" >&2
+ exit 1
+fi
+echo "Descando modificaciones del ticket"
+svn export --force $SVNURLSOURCE $TARGETDIR/;
+find $TARGETDIR -name .svn -type d -exec rm -fr {} \;
+
+## Especifico de este tiket
+mv ${TARGETDIR}/admin/WebConsole ${TARGETDIR}/www/
+
+echo "Generando fichero de los archivos involucrados en $LISTTOBACKUP "
+find $TARGETDIR -type f | egrep -v 'Sources|installer-info' | awk -F"$TARGETDIR" '{print $2}' > $LISTTOBACKUP;
+
+#compilamos el ogAdmServer
+cd ${TARGETDIR}/admin/Sources/Services/ogAdmServer
+make
+mkdir -p ${TARGETDIR}sbin/
+cp -a ${TARGETDIR}admin/Sources/Services/ogAdmServer/ogAdmServer ${BASEDIR}sbin/.
+echo "sbin/ogAdmServer" >> $LISTTOBACKUP;
+##
+
+echo "Creando backup en $FILEBACKUP "
+cd $BASEDIR;
+[ -f $FILEBACKUP ] || tar czvf $FILEBACKUP -T $LISTTOBACKUP 2>/dev/null;
+
+echo "Copiando estructura de opengnsys"
+cp -av ${TARGETDIR}/[^installer][^admin]* ${BASEDIR};
+
+echo "Inicando los servicios"
+/etc/init.d/opengnsys start
+sleep 5
+
diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh
index c2062e70..e23dce52 100755
--- a/installer/opengnsys_installer.sh
+++ b/installer/opengnsys_installer.sh
@@ -8,13 +8,15 @@
#### AVISO: Editar configuración de acceso por defecto.
+#### WARNING: Edit default access configuration.
MYSQL_ROOT_PASSWORD="passwordroot" # Clave root de MySQL
OPENGNSYS_DB_USER="usuog" # Usuario de acceso a la base de datos
OPENGNSYS_DB_PASSWD="passusuog" # Clave de acceso a la base de datos
OPENGNSYS_CLIENT_PASSWD="og" # Clave de acceso del cliente
-#### AVISO: NO EDITAR.
+#### AVISO: NO EDITAR.
+#### WARNING: DO NOT EDIT.
OPENGNSYS_DATABASE="ogAdmBD" # Nombre de la base datos
OPENGNSYS_CLIENT_USER="opengnsys" # Usuario del cliente para acceso remoto
@@ -25,6 +27,11 @@ if [ "$(whoami)" != 'root' ]; then
echo "ERROR: this program must run under root privileges!!"
exit 1
fi
+# Solo se deben aceptar números y letras en la clave de acceso del cliente.
+if [ -n "${OPENGNSYS_CLIENT_PASSWD//[a-zA-Z0-9]/}" ]; then
+ echo "ERROR: client password must be alphanumeric, edit installer variables."
+ exit 1
+fi
# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1).
PROGRAMDIR=$(readlink -e $(dirname "$0"))
@@ -55,11 +62,18 @@ OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogAdmBD.sql
# - OSDISTRIB, OSCODENAME - datos de la distribución Linux
# - DEPENDENCIES - array de dependencias que deben estar instaladas
# - UPDATEPKGLIST, INSTALLPKGS, CHECKPKGS - comandos para gestión de paquetes
-# - APACHEINIT, APACHECFGDIR, APACHEUSER, APACHEGROUP - arranque y configuración de Apache
-# - ENABLEMOD, ENABLESITE - habilitar módulo Apache y sitio web
-# - DHCPINIT, DHCPCFGDIR - arranque y configuración de DHCP
-# - SAMBAINIT, SAMBACFGDIR - arranque y configuración de Samba
-# - TFTPCFGDIR - configuración de TFTP
+# - INSTALLEXTRADEPS - instalar dependencias no incluidas en la distribución
+# - STARTSERVICE, ENABLESERVICE - iniciar y habilitar un servicio
+# - STOPSERVICE, DISABLESERVICE - parar y deshabilitar un servicio
+# - APACHESERV, APACHECFGDIR, APACHESITESDIR, APACHEUSER, APACHEGROUP - servicio y configuración de Apache
+# - APACHESSLMOD, APACHEENABLESSL, APACHEMAKECERT - habilitar módulo Apache y certificado SSL
+# - APACHEENABLEOG, APACHEOGSITE, - habilitar sitio web de OpenGnSys
+# - INETDSERV - servicio Inetd
+# - IPTABLESSERV - servicio IPTables
+# - DHCPSERV, DHCPCFGDIR - servicio y configuración de DHCP
+# - MYSQLSERV - servicio MySQL
+# - SAMBASERV, SAMBACFGDIR - servicio y configuración de Samba
+# - TFTPSERV, TFTPCFGDIR, SYSLINUXDIR - servicio y configuración de TFTP/PXE
function autoConfigure()
{
# Detectar sistema operativo del servidor (debe soportar LSB).
@@ -73,16 +87,59 @@ case "$OSDISTRIB" in
UPDATEPKGLIST="apt-get update"
INSTALLPKG="apt-get -y install --force-yes"
CHECKPKG="dpkg -s \$package 2>/dev/null | grep Status | grep -qw install"
- APACHEINIT=/etc/init.d/apache2
+ if which service &>/dev/null; then
+ STARTSERVICE="eval service \$service restart"
+ STOPSERVICE="eval service \$service stop"
+ else
+ STARTSERVICE="eval /etc/init.d/\$service restart"
+ STOPSERVICE="eval /etc/init.d/\$service stop"
+ fi
+ ENABLESERVICE="eval update-rc.d \$service defaults"
+ DISABLESERVICE="eval update-rc.d \$service disable"
+ APACHESERV=apache2
APACHECFGDIR=/etc/apache2
+ APACHESITESDIR=sites-available
+ APACHEOGSITE=opengnsys
APACHEUSER="www-data"
APACHEGROUP="www-data"
- ENABLEMOD="a2enmod"
- ENABLESITE="a2ensite"
- DHCPINIT=/etc/init.d/isc-dhcp-server
+ APACHESSLMOD="a2enmod ssl"
+ APACHEENABLESSL="a2ensite default-ssl"
+ APACHEENABLEOG="a2ensite $APACHEOGSITE"
+ APACHEMAKECERT="make-ssl-cert generate-default-snakeoil --force-overwrite"
+ DHCPSERV=isc-dhcp-server
DHCPCFGDIR=/etc/dhcp
- SAMBAINIT=/etc/init.d/smbd
+ INETDSERV=openbsd-inetd
+ MYSQLSERV=mysql
+ SAMBASERV=smbd
SAMBACFGDIR=/etc/samba
+ SYSLINUXDIR=/usr/lib/syslinux
+ TFTPCFGDIR=/var/lib/tftpboot
+ ;;
+ Fedora|CentOS)
+ DEPENDENCIES=( subversion httpd mod_ssl php mysql-server mysql-devel mysql-devel.i686 php-mysql dhcp tftp-server tftp syslinux binutils gcc gcc-c++ glibc-devel glibc-devel.i686 glibc-static glibc-static.i686 libstdc++ libstdc++.i686 libstdc++-devel.i686 make wget doxygen graphviz ctorrent samba unzip debootstrap schroot squashfs-tools )
+ INSTALLEXTRADEPS=( 'rpm -Uv ftp://ftp.altlinux.org/pub/distributions/ALTLinux/5.1/branch/files/i586/RPMS/netpipes-4.2-alt1.i586.rpm'
+ 'pushd /tmp; wget http://download2.bittornado.com/download/BitTornado-0.3.18.tar.gz; tar xvzf BitTornado-0.3.18.tar.gz; cd BitTornado-CVS; python setup.py install; ln -s btlaunchmany.py /usr/bin/btlaunchmany; ln -s bttrack.py /usr/bin/bttrack; popd' )
+ UPDATEPKGLIST='test rpm -q --quiet epel-release || echo -e "[epel]\nname=EPEL temporal\nmirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-\$releasever&arch=\$basearch\nenabled=1\ngpgcheck=0" >/etc/yum.repos.d/epel.repo'
+ INSTALLPKG="yum install -y"
+ CHECKPKG="rpm -q --quiet \$package"
+ STARTSERVICE="eval service \$service start"
+ STOPSERVICE="eval service \$service stop"
+ ENABLESERVICE="eval chkconfig \$service on"
+ DISABLESERVICE="eval chkconfig \$service off"
+ APACHESERV=httpd
+ APACHECFGDIR=/etc/httpd/conf.d
+ APACHEOGSITE=opengnsys.conf
+ APACHEUSER="apache"
+ APACHEGROUP="apache"
+ DHCPSERV=dhcpd
+ DHCPCFGDIR=/etc/dhcp
+ INETDSERV=xinetd
+ IPTABLESSERV=iptables
+ MYSQLSERV=mysqld
+ SAMBASERV=smb
+ SAMBACFGDIR=/etc/samba
+ SYSLINUXDIR=/usr/share/syslinux
+ TFTPSERV=tftp
TFTPCFGDIR=/var/lib/tftpboot
;;
"") echo "ERROR: Unknown Linux distribution, please install \"lsb_release\" command."
@@ -95,10 +152,12 @@ esac
# Modificar variables de configuración tras instalar paquetes del sistema.
function autoConfigurePost()
{
-[ -e $SAMBAINIT ] || SAMBAINIT=/etc/init.d/samba # Debian 6
+[ -e /etc/init.d/$SAMBASERV ] || SAMBASERV=samba # Debian 6
[ -e $TFTPCFGDIR ] || TFTPCFGDIR=/srv/tftp # Debian 6
+[ -f /selinux/enforce ] && echo 0 > /selinux/enforce # SELinux permisivo
}
+
# Cargar lista de paquetes del sistema y actualizar algunas variables de configuración
# dependiendo de la versión instalada.
function updatePackageList()
@@ -110,17 +169,21 @@ local DHCPVERSION
# Configuración personallizada de algunos paquetes.
case "$OSDISTRIB" in
- Ubuntu|LinuxMint) # Postconfiguación personalizada para Ubuntu.
+ Ubuntu|LinuxMint) # Postconfiguación personalizada para Ubuntu.
# Configuración para DHCP v3.
DHCPVERSION=$(apt-cache show $(apt-cache pkgnames|egrep "dhcp.?-server$") | \
awk '/Version/ {print substr($2,1,1);}' | \
sort -n | tail -1)
if [ $DHCPVERSION = 3 ]; then
DEPENDENCIES=( ${DEPENDENCIES[@]/isc-dhcp-server/dhcp3-server} )
- DHCPINIT=/etc/init.d/dhcp3-server
+ DHCPSERV=dhcp3-server
DHCPCFGDIR=/etc/dhcp3
fi
;;
+ CentOS) # Postconfiguación personalizada para CentOS.
+ # Incluir repositorio de paquetes EPEL.
+ DEPENDENCIES=( ${DEPENDENCIES[@]} epel-release )
+ ;;
esac
}
@@ -266,7 +329,7 @@ function installDependencies()
exit 1
fi
- OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND
+ OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND # Debian/Ubuntu
export DEBIAN_FRONTEND=noninteractive
echoAndLog "${FUNCNAME}(): now $string_deps will be installed"
@@ -276,7 +339,9 @@ function installDependencies()
return 1
fi
- DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND
+ DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND # Debian/Ubuntu
+ test grep -q "EPEL temporal" /etc/yum.repos.d/epel.repo 2>/dev/null ] || mv -f /etc/yum.repos.d/epel.repo.rpmnew /etc/yum.repos.d/epel.repo 2>/dev/null # CentOS/RedHat EPEL
+
echoAndLog "${FUNCNAME}(): dependencies installed"
}
@@ -579,6 +644,13 @@ function svnExportCode()
# Comprobar si existe conexión.
function checkNetworkConnection()
{
+ echoAndLog "${FUNCNAME}(): Disabling IPTables."
+ if [ -n "$IPTABLESSERV" ]; then
+ service=$IPTABLESSERV
+ $STOPSERVICE; $DISABLESERVICE
+ fi
+
+ echoAndLog "${FUNCNAME}(): Checking OpenGnSys server conectivity."
OPENGNSYS_SERVER=${OPENGNSYS_SERVER:-"www.opengnsys.es"}
wget --spider -q $OPENGNSYS_SERVER
}
@@ -600,7 +672,7 @@ function getNetworkSettings()
local i=0
local dev=""
- echoAndLog "${FUNCNAME}(): Detecting network parameters."
+ echoAndLog "${FUNCNAME}(): Detecting network parameters."
DEVICE=( $(ip -o link show up | awk '!/loopback/ {sub(/:.*/,"",$2); print $2}') )
if [ -z "$DEVICE" ]; then
errorAndLog "${FUNCNAME}(): Network devices not detected."
@@ -642,16 +714,21 @@ function getNetworkSettings()
function tftpConfigure()
{
- echoAndLog "${FUNCNAME}(): Configuring TFTP service."
- # reiniciamos demonio internet ????? porque ????
- /etc/init.d/openbsd-inetd start
-
- # preparacion contenedor tftpboot
- cp -a /usr/lib/syslinux/ $TFTPCFGDIR/syslinux
- cp -a /usr/lib/syslinux/pxelinux.0 $TFTPCFGDIR
- # prepamos el directorio de la configuracion de pxe
- mkdir -p $TFTPCFGDIR/pxelinux.cfg
- cat > $TFTPCFGDIR/pxelinux.cfg/default <<EOF
+ echoAndLog "${FUNCNAME}(): Configuring TFTP service."
+ # Habilitar TFTP y reiniciar Inetd.
+ if [ -n "$TFTPSERV" ]; then
+ service=$TFTPSERV
+ $ENABLESERVICE
+ fi
+ service=$INETDSERV
+ $ENABLESERVICE; $STARTSERVICE
+
+ # preparacion contenedor tftpboot
+ cp -a $SYSLINUXDIR $TFTPCFGDIR/syslinux
+ cp -a $SYSLINUXDIR/pxelinux.0 $TFTPCFGDIR
+ # prepamos el directorio de la configuracion de pxe
+ mkdir -p $TFTPCFGDIR/pxelinux.cfg
+ cat > $TFTPCFGDIR/pxelinux.cfg/default <<EOF
DEFAULT syslinux/vesamenu.c32
MENU TITLE Aplicacion GNSYS
@@ -663,17 +740,17 @@ APPEND hd0
PROMPT 0
TIMEOUT 10
EOF
- # comprobamos el servicio tftp
- sleep 1
- testPxe
+ # comprobamos el servicio tftp
+ sleep 1
+ testPxe
}
function testPxe ()
{
- echoAndLog "${FUNCNAME}(): Checking TFTP service... please wait."
- cd /tmp
- tftp -v localhost -c get pxelinux.0 /tmp/pxelinux.0 && echoAndLog "TFTP service is OK." || errorAndLog "TFTP service is down."
- cd /
+ echoAndLog "${FUNCNAME}(): Checking TFTP service... please wait."
+ pushd /tmp
+ tftp -v localhost -c get pxelinux.0 /tmp/pxelinux.0 && echoAndLog "TFTP service is OK." || errorAndLog "TFTP service is down."
+ popd
}
@@ -790,8 +867,10 @@ function smbConfigure()
sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
$WORKDIR/opengnsys/server/etc/smb-og.conf.tmpl > $SAMBACFGDIR/smb-og.conf
# Configurar y recargar Samba"
- perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/; s/^\; *include \=.*$/ include \= ${SAMBACFGDIR//\//\\/}\/smb-og.conf/" $SAMBACFGDIR/smb.conf
- $SAMBAINIT restart
+ perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/" $SAMBACFGDIR/smb.conf
+ test grep -q "smb-og" $SAMBACFGDIR/smb.conf || echo "include = $SAMBACFGDIR/smb-og.conf" >> $SAMBACFGDIR/smb.conf
+ service=$SAMBASERV
+ $ENABLESERVICE; $STARTSERVICE
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error while configure Samba"
return 1
@@ -836,7 +915,8 @@ function dhcpConfigure()
return 1
fi
ln -f $DHCPCFGDIR/dhcpd-$DEFAULTDEV.conf $DHCPCFGDIR/dhcpd.conf
- $DHCPINIT restart
+ service=$DHCPSERV
+ $ENABLESERVICE; $STARTSERVICE
echoAndLog "${FUNCNAME}(): Sample DHCP configured in \"$DHCPCFGDIR\"."
return 0
}
@@ -857,9 +937,9 @@ function installWebFiles()
fi
find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null
# Descomprimir XAJAX.
- unzip $WORKDIR/opengnsys/admin/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax
+ unzip -o $WORKDIR/opengnsys/admin/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax
# Cambiar permisos para ficheros especiales.
- chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/iconos
+ chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/{fotos,iconos}
echoAndLog "${FUNCNAME}(): Web files installed successfully."
}
@@ -885,22 +965,23 @@ function installWebConsoleApacheConf()
echoAndLog "${FUNCNAME}(): creating apache2 config file.."
# Activar HTTPS.
- $ENABLESITE default-ssl
- $ENABLEMOD ssl
- make-ssl-cert generate-default-snakeoil --force-overwrite
+ $APACHESSLMOD
+ $APACHEENABLESSL
+ $APACHEMAKECERT
# Genera configuración de consola web a partir del fichero plantilla.
sed -e "s/CONSOLEDIR/${CONSOLEDIR//\//\\/}/g" \
$WORKDIR/opengnsys/server/etc/apache.conf.tmpl > $path_opengnsys_base/etc/apache.conf
- ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys
- $ENABLESITE opengnsys
+ ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/$APACHESITESDIR/$APACHEOGSITE
+ $APACHEENABLEOG
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation"
return 1
else
echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon"
- $APACHEINIT restart
+ service=$APACHESERV
+ $ENABLESERVICE; $STARTSERVICE
return 0
fi
}
@@ -994,12 +1075,14 @@ function copyServerFiles ()
repoman/bin \
installer/opengnsys_uninstall.sh \
installer/opengnsys_update.sh \
+ installer/install_ticket_wolunicast.sh \
doc )
local TARGETS=( tftpboot \
bin \
bin \
lib \
lib \
+ lib \
doc )
if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then
@@ -1134,17 +1217,23 @@ function copyClientFiles()
function clientCreate()
{
local DOWNLOADURL="http://$OPENGNSYS_SERVER/downloads"
- local FILENAME=ogLive-oneiric-3.0.0-14-generic-r2439.iso
+ local FILENAME=ogLive-precise-3.2.0-23-generic-r3257.iso # 1.0.4-rc2
local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME
local TMPDIR=/tmp/${FILENAME%.iso}
- echoAndLog "${FUNCNAME}(): Loading Client"
- # Descargar, montar imagen, copiar cliente ogclient y desmontar.
- wget $DOWNLOADURL/$FILENAME -O $TARGETFILE
+ # Descargar cliente, si es necesario.
+ if [ -s $PROGRAMDIR/$FILENAME ]; then
+ echoAndLog "${FUNCNAME}(): Moving $PROGRAMDIR/$FILENAME file to $(dirname $TARGETFILE)"
+ mv $PROGRAMDIR/$FILENAME $TARGETFILE
+ else
+ echoAndLog "${FUNCNAME}(): Loading Client"
+ wget $DOWNLOADURL/$FILENAME -O $TARGETFILE
+ fi
if [ ! -s $TARGETFILE ]; then
errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client"
return 1
fi
+ # Montar imagen, copiar cliente ogclient y desmontar.
echoAndLog "${FUNCNAME}(): Copying Client files"
mkdir -p $TMPDIR
mount -o loop,ro $TARGETFILE $TMPDIR
@@ -1181,7 +1270,6 @@ function openGnsysConfigure()
cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.default /etc/default/opengnsys
cp -p $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepoAux $INSTALL_TARGET/sbin
- update-rc.d opengnsys defaults
echoAndLog "${FUNCNAME}(): Creating cron files."
echo "* * * * * root [ -x $INSTALL_TARGET/bin/opengnsys.cron ] && $INSTALL_TARGET/bin/opengnsys.cron" > /etc/cron.d/opengnsys
echo "* * * * * root [ -x $INSTALL_TARGET/bin/torrent-creator ] && $INSTALL_TARGET/bin/torrent-creator" > /etc/cron.d/torrentcreator
@@ -1232,7 +1320,8 @@ function openGnsysConfigure()
chown $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/controlacceso*.php
chmod 600 $INSTALL_TARGET/www/controlacceso*.php
echoAndLog "${FUNCNAME}(): Starting OpenGnSys services."
- /etc/init.d/opengnsys start
+ service="opengnsys"
+ $ENABLESERVICE; $STARTSERVICE
}
@@ -1264,6 +1353,7 @@ function installationSummary()
echo
echoAndLog "Post-Installation Instructions:"
echo "==============================="
+ echoAndLog "Change IPTables and SELinux system configuration, if needed."
echoAndLog "Review or edit all configuration files."
echoAndLog "Insert DHCP configuration data and restart service."
echoAndLog "Optional: Log-in as Web Console admin user."
@@ -1316,6 +1406,12 @@ if [ $? -ne 0 ]; then
exit 1
fi
fi
+if [ -n "$INSTALLEXTRADEPS" ]; then
+ echoAndLog "Installing extra dependencies"
+ for (( i=0; i<${#INSTALLEXTRADEPS[*]}; i++ )); do
+ eval ${INSTALLEXTRADEPS[i]}
+ done
+fi
# Detectar datos de auto-configuración después de instalar paquetes.
autoConfigurePost
@@ -1379,6 +1475,8 @@ fi
# Instalar Base de datos de OpenGnSys Admin.
isInArray notinstalled "mysql-server"
if [ $? -eq 0 ]; then
+ service=$MYSQLSERV
+ $ENABLESERVICE; $STARTSERVICE
mysqlSetRootPassword ${MYSQL_ROOT_PASSWORD}
else
mysqlGetRootPassword
@@ -1440,7 +1538,7 @@ installWebFiles
makeDoxygenFiles
# creando configuracion de apache2
-installWebConsoleApacheConf $INSTALL_TARGET /etc/apache2
+installWebConsoleApacheConf $INSTALL_TARGET $APACHECFGDIR
if [ $? -ne 0 ]; then
errorAndLog "Error configuring Apache for OpenGnSys Admin"
exit 1
diff --git a/installer/opengnsys_uninstall.sh b/installer/opengnsys_uninstall.sh
index f9b5ce0e..2edb6c22 100755
--- a/installer/opengnsys_uninstall.sh
+++ b/installer/opengnsys_uninstall.sh
@@ -1,23 +1,53 @@
#!/bin/bash
-# Desinstalación de OpenGnSys.
+#/**
+#@file opengnsys_update.sh
+#@brief Script de desinstalación de OpenGnSys
+#@warning No se elimina el directorio de imágenes, ni se desinstalan otros programas.
+#@version 0.10 - Primera prueba de desinstalación.
+#@author Ramón Gómez - ETSII Univ. Sevilla
+#@date 2010/10/28
+#@version 1.0 - Eliminar servicios de OpenGnSys.
+#@author Ramón Gómez - ETSII Univ. Sevilla
+#@date 2011/03/02
+#@version 1.0.2 - Información de desinstalación y correcciones.
+#@author Ramón Gómez - ETSII Univ. Sevilla
+#@date 2011/12/22
+#@version 1.0.4 - Compatibilidad con otras distribuciones y auto configuración de acceso a BD
+#@author Ramón Gómez - ETSII Univ. Sevilla
+#@date 2012/03/28
#### AVISO: Editar configuración de acceso.
-MYSQLROOT="passwordroot" # Clave de root de MySQL
-DATABASE="ogAdmBD" # Base de datos de administración
-OLDDATABASE="ogBDAdmin" # Antigua base de datos
-DBUSER="usuog" # Usuario de acceso a la base de datos
+#### WARNING: Edit access configuration
+MYSQLROOT="passwordroot" # Clave de root de MySQL
+DATABASE="ogAdmBD" # Base de datos de administración
+DBUSER="usuog" # Usuario de acceso a la base de datos
+
+
+#### AVISO: NO EDITAR variables de configuración.
+#### WARNING: DO NOT EDIT configuration variables.
+OPENGNSYS="/opt/opengnsys" # Directorio de OpenGnSys
+OGIMG="images" # Directorio de imágenes del repositorio
+CLIENTUSER="opengnsys" # Usuario Samba
+OLDDATABASE="ogBDAdmin" # Antigua base de datos
+
+
+# Sólo ejecutable por usuario root
+if [ "$(whoami)" != 'root' ]; then
+ echo "ERROR: this program must run under root privileges!!"
+ exit 1
+fi
-# Variables.
-OPENGNSYS="/opt/opengnsys" # Directorio de OpenGnSys
-OGIMG="images" # Directorio de imágenes del repositorio
-CLIENTUSER="opengnsys" # Usuario de acceso del cliente
# Parar servicio.
echo "Uninstalling OpenGnSys services."
if [ -x /etc/init.d/opengnsys ]; then
/etc/init.d/opengnsys stop
- update-rc.d -f opengnsys remove
+ if test which update-rc.d 2>/dev/null; then
+ update-rc.d -f opengnsys remove
+ else
+ chkconfig --del opengnsys
+ fi
fi
# Eliminar bases de datos.
echo "Erasing OpenGnSys database."
@@ -39,9 +69,11 @@ if test $DROP; then
mysql -u root -p"$MYSQLROOT" <<<"DROP USER '$DBUSER'@'localhost';" 2>/dev/null
fi
# Quitar configuración específica de Apache.
-a2dissite opengnsys
-rm -f /etc/apache2/{sites-available,sites-enabled}/opengnsys*
-/etc/init.d/apache2 reload
+test which a2dissite 2>/dev/null && a2dissite opengnsys
+rm -f /etc/{apache2/{sites-available,sites-enabled},httpd/conf.d}/opengnsys*
+for serv in apache2 httpd; do
+ [ -x /etc/init.d/$serv ] && /etc/init.d/$serv reload
+done
# Eliminar ficheros.
echo "Deleting OpenGnSys files."
for dir in $OPENGNSYS/*; do
@@ -50,9 +82,13 @@ for dir in $OPENGNSYS/*; do
fi
done
rm -f /etc/init.d/opengnsys /etc/default/opengnsys /var/log/opengnsys
-# Comentar recursos de OpenGnSys en Samba.
-perl -pi -e "s/^ *include \= \/etc\/samba\/smb-og.conf/\; include \= \/etc\/samba\/smb-og.conf/" /etc/samba/smb.conf
-/etc/init.d/smbd restart
+rm -f /etc/cron.d/{opengnsys,torrentcreator,torrenttracker}
+# Elminar recursos de OpenGnSys en Samba.
+rm -f /etc/samba/smb-og.conf
+perl -ni -e "print unless /smb-og.conf/" /etc/samba/smb.conf
+for serv in smbd smb ; do
+ [ -x /etc/init.d/$serv ] && /etc/init.d/$serv reload
+done
# Eliminar usuario de OpenGnSys.
smbpasswd -x $CLIENTUSER
userdel $CLIENTUSER
diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh
index aeb4172c..55e7dc9e 100755
--- a/installer/opengnsys_update.sh
+++ b/installer/opengnsys_update.sh
@@ -15,18 +15,18 @@
#@version 1.0.2a - obtiene valor de dirección IP por defecto
#@author Ramón Gómez - ETSII Univ. Sevilla
#@date 2012/01/18
-#@version 1.0.3 - Compatibilidad con Debian.
+#@version 1.0.3 - Compatibilidad con Debian y auto configuración de acceso a BD.
#@author Ramón Gómez - ETSII Univ. Sevilla
-#@date 2012/02/01
+#@date 2012/03/12
+#@version 1.0.4 - Detector de distribución y compatibilidad con CentOS.
+#@author Ramón Gómez - ETSII Univ. Sevilla
+#@date 2012/05/04
#*/
-#### AVISO: Editar configuración de acceso por defecto a la Base de Datos.
-OPENGNSYS_DATABASE="ogAdmBD" # Nombre de la base datos
-OPENGNSYS_DBUSER="usuog" # Usuario de acceso
-OPENGNSYS_DBPASSWORD="passusuog" # Clave del usuario
-
-#### AVISO: NO Editar variables de acceso desde el cliente
+#### AVISO: NO EDITAR variables de configuración.
+#### WARNING: DO NOT EDIT configuration variables.
+INSTALL_TARGET=/opt/opengnsys # Directorio de instalación
OPENGNSYS_CLIENTUSER="opengnsys" # Usuario Samba
@@ -36,22 +36,32 @@ if [ "$(whoami)" != 'root' ]; then
exit 1
fi
# Error si OpenGnSys no está instalado (no existe el directorio del proyecto)
-INSTALL_TARGET=/opt/opengnsys
if [ ! -d $INSTALL_TARGET ]; then
echo "ERROR: OpenGnSys is not installed, cannot update!!"
exit 1
fi
+# Cargar configuración de acceso a la base de datos.
+if [ -r $INSTALL_TARGET/etc/ogAdmServer.cfg ]; then
+ source $INSTALL_TARGET/etc/ogAdmServer.cfg
+elif [ -r $INSTALL_TARGET/etc/ogAdmAgent.cfg ]; then
+ source $INSTALL_TARGET/etc/ogAdmAgent.cfg
+fi
+OPENGNSYS_DATABASE=${OPENGNSYS_DATABASE:-"$CATALOG"} # Base datos
+OPENGNSYS_DBUSER=${OPENGNSYS_DBUSER:-"$USUARIO"} # Usuario de acceso
+OPENGNSYS_DBPASSWORD=${OPENGNSYS_DBPASSWORD:-"$PASSWORD"} # Clave del usuario
+if [ -z "$OPENGNSYS_DATABASE" -o -z "$OPENGNSYS_DBUSER" -o -z "$OPENGNSYS_DBPASSWORD" ]; then
+ echo "ERROR: set OPENGNSYS_DATABASE, OPENGNSYS_DBUSER and OPENGNSYS_DBPASSWORD"
+ echo " variables, and run this script again."
+fi
# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1).
PROGRAMDIR=$(readlink -e $(dirname "$0"))
PROGRAMNAME=$(basename "$0")
-DEPS="build-essential g++-multilib rsync ctorrent samba unzip netpipes debootstrap schroot squashfs-tools"
OPENGNSYS_SERVER="www.opengnsys.es"
if [ -d "$PROGRAMDIR/../installer" ]; then
USESVN=0
else
USESVN=1
- DEPS="$DEPS subversion"
fi
SVN_URL="http://$OPENGNSYS_SERVER/svn/trunk/"
@@ -66,6 +76,49 @@ LOG_FILE=/tmp/opengnsys_update.log
####### Algunas funciones útiles de propósito general:
#####################################################################
+# Generar variables de configuración del actualizador
+# Variables globales:
+# - OSDISTRIB - distribución Linux
+# - DEPENDENCIES - array de dependencias que deben estar instaladas
+# - UPDATEPKGLIST, INSTALLPKGS, CHECKPKG - comandos para gestión de paquetes
+# - APACHECFGDIR, APACHESERV, DHCPSERV - configuración y servicios
+function autoConfigure()
+{
+local i
+
+# Detectar sistema operativo del servidor (debe soportar LSB).
+OSDISTRIB=$(lsb_release -is 2>/dev/null)
+
+# Configuración según la distribución de Linux.
+case "$OSDISTRIB" in
+ Ubuntu|Debian|LinuxMint)
+ DEPENDENCIES=
+ UPDATEPKGLIST="apt-get update"
+ INSTALLPKGS="apt-get -y install --force-yes"
+ CHECKPKG="dpkg -s \$package 2>/dev/null | grep -q \"Status: install ok\""
+ APACHEUSER="www-data"
+ APACHEGROUP="www-data"
+ ;;
+ Fedora|CentOS)
+ DEPENDENCIES=
+ INSTALLPKGS="yum install -y"
+ CHECKPKG="rpm -q --quiet \$package"
+ APACHEUSER="apache"
+ APACHEGROUP="apache"
+ ;;
+ *) # Otras distribuciones.
+ ;;
+esac
+for i in apache2 httpd; do
+ [ -f /etc/$i ] && APACHECFGDIR="/etc/$i"
+ [ -f /etc/init.d/$i ] && APACHESERV="/etc/init.d/$i"
+done
+for i in dhcpd dhcpd3-server isc-dhcp-server; do
+ [ -f /etc/init.d/$i ] && DHCPSERV="/etc/init.d/$i"
+done
+}
+
+
# Comprobar auto-actualización.
function checkAutoUpdate()
{
@@ -74,14 +127,14 @@ function checkAutoUpdate()
# Actaulizar el script si ha cambiado o no existe el original.
if [ $USESVN -eq 1 ]; then
svn export $SVN_URL/installer/$PROGRAMNAME
- if ! diff --brief $PROGRAMNAME $INSTALL_TARGET/lib/$PROGRAMNAME &>/dev/null || ! test -f $INSTALL_TARGET/lib/$PROGRAMNAME; then
+ if ! diff -q $PROGRAMNAME $INSTALL_TARGET/lib/$PROGRAMNAME 2>/dev/null || ! test -f $INSTALL_TARGET/lib/$PROGRAMNAME; then
mv $PROGRAMNAME $INSTALL_TARGET/lib
update=1
else
rm -f $PROGRAMNAME
fi
else
- if ! diff --brief $PROGRAMDIR/$PROGRAMNAME $INSTALL_TARGET/lib/$PROGRAMNAME &>/dev/null || ! test -f $INSTALL_TARGET/lib/$PROGRAMNAME; then
+ if ! diff -q $PROGRAMDIR/$PROGRAMNAME $INSTALL_TARGET/lib/$PROGRAMNAME 2>/dev/null || ! test -f $INSTALL_TARGET/lib/$PROGRAMNAME; then
cp -a $PROGRAMDIR/$PROGRAMNAME $INSTALL_TARGET/lib
update=1
fi
@@ -208,18 +261,19 @@ function importSqlFile()
# Instalar las deependencias necesarias para el actualizador.
function installDependencies()
{
+ local package
+
if [ $# = 0 ]; then
echoAndLog "${FUNCNAME}(): no deps needed."
else
while [ $# -gt 0 ]; do
- dpkg -s $1 2>/dev/null | grep -q "Status: install ok"
- if [ $? -ne 0 ]; then
- INSTALLDEPS="$INSTALLDEPS $1"
- fi
+ package="$1"
+ eval $CHECKPKG || INSTALLDEPS="$INSTALLDEPS $1"
shift
done
if [ -n "$INSTALLDEPS" ]; then
- apt-get update && apt-get -y install --force-yes $INSTALLDEPS
+ $UPDATEPKGLIST
+ $INSTALLPKGS $INSTALLDEPS
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): cannot install some dependencies: $INSTALLDEPS."
return 1
@@ -310,27 +364,25 @@ function updateClientFiles()
# Configurar HTTPS y exportar usuario y grupo del servicio Apache.
function apacheConfiguration ()
{
- local APACHECONF=/etc/apache2
-
- # Activar HTTPS, si es necesario.
- if [ -e $APACHECONF/sites-available/opengnsys.conf ]; then
+ # Activar HTTPS (solo actualizando desde versiones anteriores a 1.0.2).
+ if [ -e $APACHECFGDIR/sites-available/opengnsys.conf ]; then
echoAndLog "${FUNCNAME}(): Configuring HTTPS access..."
- mv $APACHECONF/sites-available/opengnsys.conf $APACHECONF/sites-available/opengnsys
+ mv $APACHECFGDIR/sites-available/opengnsys.conf $APACHECFGDIR/sites-available/opengnsys
a2ensite default-ssl
a2enmod ssl
a2dissite opengnsys.conf
a2ensite opengnsys
- /etc/init.d/apache2 restart
+ $APACHESERV restart
fi
# Variables de ejecución de Apache.
# - APACHE_RUN_USER
# - APACHE_RUN_GROUP
- if [ -f $APACHECONF/envvars ]; then
- source $APACHECONF/envvars
+ if [ -f $APACHECFGDIR/envvars ]; then
+ source $APACHECFGDIR/envvars
fi
- APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"}
- APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"}
+ APACHE_RUN_USER=${APACHE_RUN_USER:-"$APACHEUSER"}
+ APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"$APACHEGROUP"}
}
# Copiar ficheros del OpenGnSys Web Console.
@@ -350,7 +402,7 @@ function updateWebFiles()
fi
restoreFile $INSTALL_TARGET/www/controlacceso.php
# Cambiar permisos para ficheros especiales.
- chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/includes $INSTALL_TARGET/www/images/iconos
+ chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/{fotos,iconos}
echoAndLog "${FUNCNAME}(): Web files updated successfully."
}
@@ -449,11 +501,13 @@ function updateServerFiles()
server/bin \
server/tftpboot \
installer/opengnsys_uninstall.sh \
+ installer/install_ticket_wolunicast.sh \
doc )
local TARGETS=( bin \
bin \
tftpboot \
lib/opengnsys_uninstall.sh \
+ lib/install_ticket_wolunicast.sh \
doc )
if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then
@@ -468,7 +522,7 @@ function updateServerFiles()
if [ -d "$INSTALL_TARGET/${TARGETS[i]}" ]; then
rsync --exclude .svn -irplt "${SOURCES[i]}" $(dirname $(readlink -e "$INSTALL_TARGET/${TARGETS[i]}"))
else
- rsync --exclude .svn -irplt "${SOURCES[i]}" $(readlink -e "$INSTALL_TARGET/${TARGETS[i]}")
+ rsync -irplt "${SOURCES[i]}" $(readlink -m "$INSTALL_TARGET/${TARGETS[i]}")
fi
done
popd >/dev/null
@@ -476,12 +530,10 @@ function updateServerFiles()
if grep -q 'pxelinux.0' /etc/dhcp*/dhcpd*.conf; then
echoAndLog "${FUNCNAME}(): updating DHCP files"
perl -pi -e 's/pxelinux.0/grldr/' /etc/dhcp*/dhcpd*.conf
- for i in isc-dhcp-server dhcpd3-server dhcpd; do
- [ -f /etc/init.d/$i ] && /etc/init.d/$i restart
- done
+ $DHCPSERV restart
NEWFILES="/etc/dhcp*/dhcpd*.conf"
fi
- if ! diff --quiet $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys 2>/dev/null; then
+ if ! diff -q $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys 2>/dev/null; then
echoAndLog "${FUNCNAME}(): updating new init file"
backupFile /etc/init.d/opengnsys
cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
@@ -494,8 +546,9 @@ function updateServerFiles()
NEWFILES="$NEWFILES $INSTALL_TARGET/client/etc/ogAdmClient.cfg"
fi
echoAndLog "${FUNCNAME}(): updating cron files"
- echo "* * * * * root [ -x $INSTALL_TARGET/bin/opengnsys.cron ] && $INSTALL_TARGET/bin/opengnsys.cron" > /etc/cron.d/opengnsys
- echo "* * * * * root [ -x $INSTALL_TARGET/bin/torrent-creator ] && $INSTALL_TARGET/bin/torrent-creator" > /etc/cron.d/torrentcreator
+ [ ! -f /etc/cron.d/opengnsys ] && echo "* * * * * root [ -x $INSTALL_TARGET/bin/opengnsys.cron ] && $INSTALL_TARGET/bin/opengnsys.cron" > /etc/cron.d/opengnsys
+ [ ! -f /etc/cron.d/torrentcreator ] && echo "* * * * * root [ -x $INSTALL_TARGET/bin/torrent-creator ] && $INSTALL_TARGET/bin/torrent-creator" > /etc/cron.d/torrentcreator
+ [ ! -f /etc/cron.d/torrenttracker ] && echo "5 * * * * root [ -x $INSTALL_TARGET/bin/torrent-tracker ] && $INSTALL_TARGET/bin/torrent-tracker" > /etc/cron.d/torrenttracker
echoAndLog "${FUNCNAME}(): server files updated successfully."
}
@@ -554,11 +607,11 @@ function compileServices()
### Funciones instalacion cliente OpenGnSys
####################################################################
-# Actualizar nuevo cliente para OpenGnSys 1.0
+# Actualizar cliente OpenGnSys
function updateClient()
{
local DOWNLOADURL="http://$OPENGNSYS_SERVER/downloads"
- local FILENAME=ogLive-oneiric-3.0.0-14-generic-r2439.iso
+ local FILENAME=ogLive-precise-3.2.0-23-generic-r3257.iso # 1.0.4-rc2
local SOURCEFILE=$DOWNLOADURL/$FILENAME
local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME
local SOURCELENGTH
@@ -666,8 +719,11 @@ if [ "$PROGRAMDIR" != "$INSTALL_TARGET/bin" ]; then
fi
fi
+# Detectar datos de auto-configuración del instalador.
+autoConfigure
+
# Instalar dependencias.
-installDependencies $DEPS
+installDependencies $DEPENDENCIES
if [ $? -ne 0 ]; then
errorAndLog "Error: you may install all needed dependencies."
exit 1
diff --git a/repoman/bin/opengnsys.cron b/repoman/bin/opengnsys.cron
index 55022ef1..76236f73 100755
--- a/repoman/bin/opengnsys.cron
+++ b/repoman/bin/opengnsys.cron
@@ -1,3 +1,4 @@
+#!/bin/bash
# Comprobamos si los servicios de opengnsys están levantado y si no es así los iniciamos.
# Variables.
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
@@ -8,11 +9,11 @@ DEFAULTFILE=/etc/default/opengnsys
[ -f $DEFAULTFILE ] && source $DEFAULTFILE
# Si un servicio debe estar activo y no se está ejecutando, reiniciar OpenGnSys.
-if [ "$RUN_OGADMSERVER" == "yes" -a $(pgrep -c ogAdmServer) == 0 ]; then
+if [ "$RUN_OGADMSERVER" == "yes" -a $(pgrep ogAdmServer | wc -w) == 0 ]; then
date +"%d/%m/%Y %T ERROR: El servicio ogAdmServer estaba caido, se reinicia" >> $LOGDIR/ogAdmServer.log
/etc/init.d/opengnsys restart
fi
-if [ "$RUN_OGADMREPO" == "yes" -a $(pgrep -c ogAdmRepo) == 0 ]; then
+if [ "$RUN_OGADMREPO" == "yes" -a $(pgrep ogAdmRepo | wc -w) == 0 ]; then
date +"%d/%m/%Y %T ERROR: El servicio ogAdmRepo estaba caido, se reinicia" >> $LOGDIR/ogAdmRepo.log
/etc/init.d/opengnsys restart
fi
diff --git a/repoman/bin/torrent-creator b/repoman/bin/torrent-creator
index 21d58581..61765ed5 100755
--- a/repoman/bin/torrent-creator
+++ b/repoman/bin/torrent-creator
@@ -36,7 +36,7 @@ for IMG in *.{img,pgz}; do
SUMFILE="$IMG.sum"
if [ -f "$TORRENT" ]; then
FILESIZE="$(ls -l $IMG | awk '{print $5}')"
- read -e TORRFILE TORRSIZE <<<"$(ctorrent -x $TORRENT | awk '$1~/<1>/ {print $2,$3}')"
+ read -e TORRFILE TORRSIZE <<<"$(ctorrent -x $TORRENT 2>/dev/null | awk '$1~/<1>/ {print $2,$3}')"
[ "$(basename $IMG)" = "$TORRFILE" -a "[$FILESIZE]" = "$TORRSIZE" ] && continue
fi
# Bloquear imagen, crear ficheros Torrent y Checksum y desbloquear imagen.
@@ -44,9 +44,9 @@ for IMG in *.{img,pgz}; do
touch "$LOCKFILE"
trap "rm -f $LOCKFILE" 1 2 3 6 9
rm -f "$TORRENT" "$SUMFILE"
- DATASUM=`md5sum "$IMG" | cut -f1 -d" "`
+ DATASUM=$(tail -c1M "$IMG" | md5sum -b | cut -f1 -d" ")
echo $DATASUM > "$SUMFILE"
- nice -8 ctorrent -t "$IMG" -u $TRACKERURL -s "$TORRENT" -c $DATASUM
+ nice -8 ctorrent -t "$IMG" -u $TRACKERURL -s "$TORRENT" -c $DATASUM 2>/dev/null
rm -f "$LOCKFILE"
if [ -f "$TORRENT" ]; then
echo "`date` : Fin creación de fichero $TORRENT" >> $LOGFILE
diff --git a/server/bin/compareDhcpOpengnsys b/server/bin/compareDhcpOpengnsys
new file mode 100755
index 00000000..5bf3cd43
--- /dev/null
+++ b/server/bin/compareDhcpOpengnsys
@@ -0,0 +1,49 @@
+#!/bin/bash
+# Descripcion: scrit compara la configuración de los equipos en el dhcp y la base de datos de opengnsys
+# utiliza dos archivos temporales, uno de cada servicio, con el formato nombre;mac;ip.
+# El formato depende de que el fichero dhcpd.conf este en el orden "correcto"
+# Uso: compareDhcpOpengnsys (fichero DHCP por defecto: /etc/dhcp/dhcpd.conf)
+# DHCPFILE=/camino/fichero/dhcpd.conf compareDhcpOpengnsys
+# Autora: Irina Gómez, Univ. Sevilla.
+# Fecha: 2012-02-08
+
+
+PROG=$(basename $0)
+DHCPFILE=${DHCPFILE:-/etc/dhcp/dhcpd.conf}
+TMP_DHCP=/tmp/$PROG-dhcp$$
+TMP_MYSQL=/tmp/$PROG-mysql$$
+
+OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
+SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+if [ ! -r $DHCPFILE ] ; then
+ echo "$PROG: No tenemos acceso al fichero de configuracion del dhcp"
+ exit 2
+fi
+
+# Obtener datos de acceso a la Base de datos.
+source $SERVERCONF
+
+trap "rm -f $TMP_DHCP $TMP_MYSQL" 1 2 3 9 15
+# Creo fichero temporal del dhcp
+grep -v "#" $DHCPFILE |egrep -e "host " -e "hardware ethernet" -e fixed-address | sed -e 's/.$//' \
+ |sed -e s/"^.*host "//g -e s/\{/\;/g -e s/"^.*hardware ethernet "/=/g -e s/"^.*fixed-address "/=/g \
+ | sed -e :a -e '$!N;s/\n=/ \;/;ta' -e 'P;D'\
+ | sed -e s/\ //g -e s/://g -e s/\;$//g -e s/\;\;/\;/g |sort > $TMP_DHCP
+
+
+# Creo fichero temporal del mysql, de la base de datos de opengnsys
+mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
+ "select CONCAT_WS (';', nombreordenador, mac, ip) from ordenadores order by nombreordenador;" > $TMP_MYSQL
+
+# Comparo los ficheros
+echo "Comparamos las configuraciones: < dhcp y > mysql"
+diff -bi $TMP_DHCP $TMP_MYSQL
+[ $? == 0 ] && echo "El ficheros del servicio dhcp y la base de datos de ogAdmBD tienen la misma configuracion"
+
+rm -f $TMP_DHCP $TMP_MYSQL
+
diff --git a/server/bin/setsmbpass b/server/bin/setsmbpass
index 2c239601..b678ce91 100755
--- a/server/bin/setsmbpass
+++ b/server/bin/setsmbpass
@@ -11,7 +11,8 @@
PROG=$(basename $0)
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SAMBAUSER="opengnsys" # Usuario por defecto.
-CLIENTINITRD=$OPENGNSYS/tftpboot/ogclient/oginitrd.img
+TFTPDIR=$OPENGNSYS/tftpboot
+CLIENTINITRD=$TFTPDIR/ogclient/oginitrd.img
TMPDIR=/tmp/ogclient$$
# Control básico de errores.
@@ -30,6 +31,13 @@ if [ -r $CLIENTINITRD ]; then
stty -echo 2>/dev/null
echo -n "Clave del usuario Samba: "
read SAMBAPASS
+ # Solo se deben aceptar números y letras para la clave de acceso.
+ if [ -n "${SAMBAPASS//[a-zA-Z0-9]/}" ]; then
+ echo
+ echo "$PROG: Error: la clave solo debe contener caracteres alfanuméricos" >&2
+ stty echo 2>/dev/null
+ exit 2
+ fi
echo
echo -n "Confirmar clave: "
read SAMBAPASS2
@@ -51,6 +59,9 @@ if [ -r $CLIENTINITRD ]; then
echo "$PROG: Aviso: no se ha modificado la clave del cliente."
fi
rm -fr $TMPDIR
+ md5sum $CLIENTINITRD | cut -f1 -d" " > $CLIENTINITRD.sum
+ cp -a $CLIENTINITRD $TFTPDIR
+ cp -a $CLIENTINITRD.sum $TFTPDIR
else
SAMBAPASS="og" # Clave por defecto.
echo "$PROG: Aviso: no se ha modificado la clave del cliente."
diff --git a/server/etc/apache.conf.tmpl b/server/etc/apache.conf.tmpl
index 57ffb94e..ddf8cc97 100644
--- a/server/etc/apache.conf.tmpl
+++ b/server/etc/apache.conf.tmpl
@@ -2,6 +2,9 @@
Alias /opengnsys CONSOLEDIR
+# Overrides default CentOS php.ini configuration.
+php_value short_open_tag on
+
<Directory CONSOLEDIR>
Options -Indexes FollowSymLinks
DirectoryIndex index.php
diff --git a/server/tftpboot/menu.lst/templates/pxe b/server/tftpboot/menu.lst/templates/pxe
index 00d1a455..29687f0e 100644
--- a/server/tftpboot/menu.lst/templates/pxe
+++ b/server/tftpboot/menu.lst/templates/pxe
@@ -19,16 +19,20 @@ chainloader +1
savedefault fallback
boot
-title OpenGnSys-CACHE
+title OpenGnsys-CACHE
find --set-root --ignore-floppies --ignore-cd /boot/ogvmlinuz
-kernel /boot/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false INFOHOST
+kernel /boot/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogupdateinitrd=true INFOHOST
initrd /boot/oginitrd.img
savedefault fallback
boot
-title OpenGnSys-NET
+title OpenGnsys-NET
keeppxe
kernel (pd)/ogclient/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false INFOHOST
initrd (pd)/ogclient/oginitrd.img
boot
+
+
+
+