diff options
author | ramon <ramongomez@us.es> | 2012-07-19 08:55:27 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2012-07-19 08:55:27 +0000 |
commit | 1ca723075a19544f041c5267c345baa3193d70f8 (patch) | |
tree | 17eda30c4d8eec314bef6acaac69765806ab0d26 | |
parent | 1c93532b21492afae588da93f6ff59dd11a6e6d7 (diff) |
Versión 1.0.4, #531: Congelar versión en {{{tags/version-1.0.4}}}
git-svn-id: https://opengnsys.es/svn/tags/opengnsys-1.0.4@3261 a21b9725-9963-47de-94b9-378ad31fedc9
195 files changed, 7370 insertions, 1802 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> '.$TbMsg[20].' </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ñ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ó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].' </span><br>'; - echo '<IMG src="'.$urlimg.'"> <span align=center class=subcabeceras> - <U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span> </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].' </span><br>'; - echo '<IMG src="'.$urlimg.'"> <span align=center class=subcabeceras><U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span> </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.'"> <span align=center class=subcabeceras> - <U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span> </span></p>'; // Subcebecera + echo '<p align=center><span class=cabeceras>'.$TbMsg[5].' </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.' </span><br>'; echo '<p align=center><span class=cabeceras>'.$TbMsg[5].' </span><br>'; - echo '<IMG src="'.$urlimg.'"> <span align=center class=subcabeceras> - <U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span> </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].' </span><br>'; - echo '<IMG src="'.$urlimg.'"> <span align=center class=subcabeceras><U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span> </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].' </span><br>'; - echo '<IMG src="'.$urlimg.'"> <span align=center class=subcabeceras><U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span> </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.'"> <span align=center class=subcabeceras> - <U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span> </span></p>'; // Subcebecera + echo '<p align=center><span class=cabeceras>'.$TbMsg[5].' </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> '.$tbKeys[$k]["numpar"].' </TD>'.chr(13); echo '<TD align=center> '.$tbKeys[$k]["tipopar"].' </TD>'.chr(13); - - //echo '<TD> '.$tbKeys[$k]["nombreso"].' </TD>'.chr(13); echo '<TD align=center> '.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).' </TD>'.chr(13); - - //echo'<TD align=center> '.$tbKeys[$k]["sistemafichero"].' </TD>'.chr(13); echo'<TD align=center> '.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).' </TD>'.chr(13); - - //echo'<TD align=rigth> '.formatomiles($tbKeys[$k]["tamano"]).' </TD>'.chr(13); echo'<TD align=center> '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).' </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.'">
+ <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.'">
+ <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.'">
+ <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.'">
+ <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és de aceptar, ejecutar NetBoot Avanzado en el aula para aplicar los cambios.'; +$TbMsg["WARN_REBOOTAFTER"]='AVISO: Se realizará automáticamente un reinicio después de ejecutar la operació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ño'; $TbMsg[41]='Generar Instrucción OG'; +$TbMsg["CONFIG_PARTTABLE"='Tabla de particiones'; $TbMsg[42]='Variable'; $TbMsg[43]='Sin configuración: cliente no conectado al servidor.'; - +$TbMsg[44]='Equipo sin Perfil de Hardware'; +$TbMsg[45]='Agregue Perfil para obtener datos'; +$TbMsg[495]='Contenido Caché'; +$TbMsg[4951]='Caché 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ó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ú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ó"; $TbMsg[1]="Insertar"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Ordinadors"; +$TbMsg[4]="Gestió Ordinadors"; $TbMsg[5]="Nom"; -$TbMsg[6]="Direcci IP"; -$TbMsg[7]="Direcci MAC"; +$TbMsg[6]="Direcció IP"; +$TbMsg[7]="Direcció MAC"; $TbMsg[8]="Perfil Hardware"; $TbMsg[9]="Autoexec"; $TbMsg[10]="Repositori"; $TbMsg[11]="Menu"; -$TbMsg[12]="Tamany Cach"; +$TbMsg[12]="Tamany Caché"; $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é"; +$TbMsg[4951]="Caché 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ó"; $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ó 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és de aceptar, ejecutar NetBoot Avanzado en el aula para aplicar los cambios.'; +$TbMsg["WARN_REBOOTAFTER"]='AVISO: Se realizará automáticamente un reinicio después de ejecutar la operació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]='Ámbito'; @@ -13,7 +13,7 @@ $TbMsg[4]="Ordenadores"; $TbMsg[5]="Nombre"; $TbMsg[6]="Ubicación"; -$TbMsg[7]="Cañó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ño'; $TbMsg[41]='Generar Instrucción OG'; +$TbMsg["CONFIG_PARTTABLE"]='Tabla de particiones'; $TbMsg[42]='Variable'; $TbMsg[43]='Sin configuración: cliente no conectado al servidor.'; - +$TbMsg[44]='Equipo sin perfil de hardware'; +$TbMsg[45]='Agregue perfil para obtener datos'; +$TbMsg[495]='Contenido caché'; +$TbMsg[4951]='Caché 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ó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ú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ón"; $TbMsg[1]="Insertar"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gestión Aulas"; +$TbMsg[4]="Gestión Aulas"; $TbMsg[5]="Nombre"; -$TbMsg[6]="Ubicación"; -$TbMsg[7]="Cañón"; +$TbMsg[6]="Ubicación"; +$TbMsg[7]="Proyector"; $TbMsg[8]="Pizarra"; $TbMsg[9]="Puestos"; $TbMsg[10]="URL Imagen"; -$TbMsg[11]="Menú"; +$TbMsg[11]="Menú"; $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ño caché (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és de descarga-"; +$TbMsg[28]="Dirección gateway del aula"; +$TbMsg[29]="Máscara de red del aula"; +$TbMsg[495]="Contenido caché"; +$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ó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ño Caché (KB)"; +$TbMsg[11]="Menú"; +$TbMsg[12]="Tamaño caché (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é"; +$TbMsg[4951]="Caché 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ó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ó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> Tipo </TD> + <TH> <? echo $TbMsg["TYPE"] ?> </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"> <? echo utf8_encode(Descripcin)?> </TH> - <TH align="center"> Nombre </TH> + <TH align="center"> <? echo $TbMsg["DESCRIP"] ?> </TH> + <TH align="center"> <? echo $TbMsg["NAME"] ?> </TH> <TH align="center"> </TH> <TH align="center"> T </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> <? echo basename($rs->campos["descripcion"])?> </TD> + <TD> <? echo ( $TbMsg[basename($rs->campos["descripcion"])] ) ? $TbMsg[basename($rs->campos["descripcion"])] : basename($rs->campos["descripcion"]); ?> </TD> <TD> <? echo basename($rs->campos["urlicono"])?> </TD> <TD align=center> <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> Tipo </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> <? echo $TbMsg["TYPE"] ?> </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> Descripcion </TH> + <TH> <? echo $TbMsg["DESCRIP"] ?> </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> Icono </TH> + <TH> <? echo $TbMsg["ICON"] ?> </TH> <TD><INPUT type=file class=cajatexto name="urlicono" style="width:500" value="<? echo $urlicono?>"> </TR> <?}else{?> <TR> - <TH> Icono </TH> + <TH> <? echo $TbMsg["ICON"] ?> </TH> <TD><?echo basename($urlicono)?></TD> </TR> <TR> - <TH> Sustituir Fichero </TH> + <TH> <? echo $TbMsg["REPLACE"] ?> </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 Binary files differnew file mode 100644 index 00000000..f44edbab --- /dev/null +++ b/admin/WebConsole/images/boton_aceptar_cat.gif diff --git a/admin/WebConsole/images/boton_aceptar_eng.gif b/admin/WebConsole/images/boton_aceptar_eng.gif Binary files differnew file mode 100644 index 00000000..d85916b5 --- /dev/null +++ b/admin/WebConsole/images/boton_aceptar_eng.gif diff --git a/admin/WebConsole/images/boton_aceptar_esp.gif b/admin/WebConsole/images/boton_aceptar_esp.gif Binary files differnew file mode 100644 index 00000000..f44edbab --- /dev/null +++ b/admin/WebConsole/images/boton_aceptar_esp.gif diff --git a/admin/WebConsole/images/boton_cancelar_cat.gif b/admin/WebConsole/images/boton_cancelar_cat.gif Binary files differnew file mode 100644 index 00000000..95e3bd7f --- /dev/null +++ b/admin/WebConsole/images/boton_cancelar_cat.gif diff --git a/admin/WebConsole/images/boton_cancelar_eng.gif b/admin/WebConsole/images/boton_cancelar_eng.gif Binary files differnew file mode 100644 index 00000000..b57c1c88 --- /dev/null +++ b/admin/WebConsole/images/boton_cancelar_eng.gif diff --git a/admin/WebConsole/images/boton_cancelar_esp.gif b/admin/WebConsole/images/boton_cancelar_esp.gif Binary files differnew file mode 100644 index 00000000..95e3bd7f --- /dev/null +++ b/admin/WebConsole/images/boton_cancelar_esp.gif diff --git a/admin/WebConsole/images/boton_cerrar.gif b/admin/WebConsole/images/boton_cerrar.gif Binary files differindex a989c567..f7da1b8a 100644 --- a/admin/WebConsole/images/boton_cerrar.gif +++ b/admin/WebConsole/images/boton_cerrar.gif diff --git a/admin/WebConsole/images/boton_cerrar_cat.gif b/admin/WebConsole/images/boton_cerrar_cat.gif Binary files differnew file mode 100644 index 00000000..f7da1b8a --- /dev/null +++ b/admin/WebConsole/images/boton_cerrar_cat.gif diff --git a/admin/WebConsole/images/boton_cerrar_eng.gif b/admin/WebConsole/images/boton_cerrar_eng.gif Binary files differnew file mode 100644 index 00000000..a989c567 --- /dev/null +++ b/admin/WebConsole/images/boton_cerrar_eng.gif diff --git a/admin/WebConsole/images/boton_cerrar_esp.gif b/admin/WebConsole/images/boton_cerrar_esp.gif Binary files differnew file mode 100644 index 00000000..f7da1b8a --- /dev/null +++ b/admin/WebConsole/images/boton_cerrar_esp.gif diff --git a/admin/WebConsole/images/boton_confirmar_cat.gif b/admin/WebConsole/images/boton_confirmar_cat.gif Binary files differnew file mode 100644 index 00000000..bee63151 --- /dev/null +++ b/admin/WebConsole/images/boton_confirmar_cat.gif diff --git a/admin/WebConsole/images/boton_confirmar_eng.gif b/admin/WebConsole/images/boton_confirmar_eng.gif Binary files differnew file mode 100644 index 00000000..b0e33488 --- /dev/null +++ b/admin/WebConsole/images/boton_confirmar_eng.gif diff --git a/admin/WebConsole/images/boton_confirmar_esp.gif b/admin/WebConsole/images/boton_confirmar_esp.gif Binary files differnew file mode 100644 index 00000000..bee63151 --- /dev/null +++ b/admin/WebConsole/images/boton_confirmar_esp.gif diff --git a/admin/WebConsole/images/boton_insertar_cat.gif b/admin/WebConsole/images/boton_insertar_cat.gif Binary files differnew file mode 100644 index 00000000..ccff6b08 --- /dev/null +++ b/admin/WebConsole/images/boton_insertar_cat.gif diff --git a/admin/WebConsole/images/boton_insertar_eng.gif b/admin/WebConsole/images/boton_insertar_eng.gif Binary files differnew file mode 100644 index 00000000..4da7dcca --- /dev/null +++ b/admin/WebConsole/images/boton_insertar_eng.gif diff --git a/admin/WebConsole/images/boton_insertar_esp.gif b/admin/WebConsole/images/boton_insertar_esp.gif Binary files differnew file mode 100644 index 00000000..ccff6b08 --- /dev/null +++ b/admin/WebConsole/images/boton_insertar_esp.gif diff --git a/admin/WebConsole/images/fotos/aula.jpg b/admin/WebConsole/images/fotos/aula.jpg Binary files differnew file mode 100644 index 00000000..77123cbe --- /dev/null +++ b/admin/WebConsole/images/fotos/aula.jpg diff --git a/admin/WebConsole/images/fotos/fotoordenador.gif b/admin/WebConsole/images/fotos/fotoordenador.gif Binary files differnew file mode 100644 index 00000000..b6b09ad4 --- /dev/null +++ b/admin/WebConsole/images/fotos/fotoordenador.gif diff --git a/admin/WebConsole/images/ordenador_RMB.gif b/admin/WebConsole/images/ordenador_OPG.gif Binary files differindex 5d9306fc..5d9306fc 100644 --- a/admin/WebConsole/images/ordenador_RMB.gif +++ b/admin/WebConsole/images/ordenador_OPG.gif 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> </TD> @@ -114,21 +117,26 @@ if (!$cmd) <TD width="20" align=center> </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> </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> </TD> + <TD height=2 style="BORDER-TOP:#999999 1px solid;" align="center" colspan=17> </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"> '.$TbMsg[20].' </th>'; // Número de partición echo '<th align="center"> '.$TbMsg[24].' </th>'; // Tipo de partición @@ -157,6 +165,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) echo '<th align="center"> '.$TbMsg[22].' </th>'; // Tamaño echo '<th align="center"> '.$TbMsg[25].' </th>'; // Imagen instalada echo '<th align="center"> '.$TbMsg[26].' </th>'; // Perfil software + echo '<th align="center"> '.$TbMsg[495].' </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"> '.tomaPerfiles($tbKeys[$k]["numpar"],$idordenadores).' </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"> '; + $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 ' '.$ima[$x].'<br/>'.'<hr>';$numero++; + }else{ + echo ' '.$ima[$x].'<br/>'; + } + }else{ + if(ereg("MB",$ima[$x])) + { echo '<hr> ## '.$TbMsg[4951].' - ( '.$ima[$x].' )<br/><hr>';}else{ + echo $numero.".-".$ima[$x].'<br/>'; + } + } + + } + echo ' </td>'.chr(13); + }else{ + echo'<td align="center"> </td>'.chr(13); + } echo'</tr>'.chr(13); } @@ -206,6 +253,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) echo'<td align="right"> '.$disksize.' </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;"> </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> <? echo $TbMsg[13].': '. $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> <?echo $TbMsg[5]?> </TD> + <TH align=center> <?echo $TbMsg[5].'</br>'.$nombreaula?> </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> '.$TbMsg[13].': '. $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> <?echo $TbMsg[5]?> </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> Computers: '. $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> Computers: '. $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> <?echo $TbMsg[6]?> </TD> @@ -152,10 +157,30 @@ else <TH align=center> <?echo $TbMsg[10]?> </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> +<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> <?echo $TbMsg[9]?> </TD> - <? + <tr> + <th align="center"> <?php echo $TbMsg[9]?> </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> <?echo $TbMsg[10]?> </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> <?echo $TbMsg[5]?> </TD> - <?if ($opcion==$op_eliminacion) + <th align=center> <?echo $TbMsg[5]?> </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> <?echo $TbMsg[6]?> </TH> - <?if ($opcion==$op_eliminacion) + <th align=center> <?echo $TbMsg[6]?> </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> <?echo $TbMsg[18]?> </TD> + <th align=center> <?echo $TbMsg[18]?> </th> <? if ($opcion==$op_eliminacion) echo '<TD colspan=3>'.TomaDato($cmd,0,'iconos',$idurlimg,'idicono','descripcion').' </TD>'; @@ -95,34 +96,52 @@ if ($opcion!=$op_alta){ ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> -<? -/* +<!--<php--> + <TR> - <TH align=center> <?echo $TbMsg[17]?> </TH> - <? + <th align="center"> <?php echo $TbMsg[17]?> <sup>*</sup> </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> <?echo $TbMsg[7]?> </TH> - <?if ($opcion==$op_eliminacion) + <th align=center> <?echo $TbMsg[7]?> </th> + <?php if ($opcion==$op_eliminacion) echo '<TD >'.$comentarios.' </TD>'; else echo '<TD><TEXTAREA class="formulariodatos" name=comentarios rows=3 cols=55>'.$comentarios.'</TEXTAREA></TD>'; ?> - </TR> + </TR> + <tr> + <th colspan="2" align="center"> <sup>*</sup> <?php echo $TbMsg["WARN_NETBOOT"]?> </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> <?echo $TbMsg[5]?> </TD> - <? + <table align="center" border="0" cellPadding="1" cellSpacing="1" class="tabla_datos"> + <tr> + <th align="center"> <?php echo $TbMsg[5]?> <sup>*</sup> </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> <?echo $TbMsg[6]?> </TD> - <? + <th align="center"> <?php echo $TbMsg[6]?> <sup>*</sup> </th> + <?php if ($opcion==$op_eliminacion) echo '<TD>'.$ip.'</TD>'; else @@ -94,17 +113,51 @@ if ($opcion!=$op_alta){ </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?echo $TbMsg[7]?> </TD> - <? + <th align="center"> <?php echo $TbMsg[7]?> <sup>*</sup> </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> <?echo $TbMsg[509]?> </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> +<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> <?echo $TbMsg[8]?> </TD> + <th align=center> <?echo $TbMsg[8]?> </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> <?echo $TbMsg[10]?> </TD> + <th align=center> <?echo $TbMsg[10]?> </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> <?echo $TbMsg[11]?> </TD> + <th align=center> <?echo $TbMsg[11]?> </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> <?echo $TbMsg[9]?> </TD> + <th align=center> <?echo $TbMsg[9]?> </th> <? if ($opcion==$op_eliminacion) echo '<TD colspan=3>'.TomaDato($cmd,$idcentro,'procedimientos',$idprocedimiento,'idprocedimiento','descripcion').' </TD>'; @@ -144,7 +197,7 @@ if ($opcion!=$op_alta){ </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?echo $TbMsg[12]?> </TD> + <th align=center> <?echo $TbMsg[12]?> </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"> <sup>*</sup> <?php echo $TbMsg["WARN_NETBOOT"]?> </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> </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> </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> <?echo $TbMsg[5]?> </TD> - <?if ($opcion==$op_eliminacion) - echo '<TD style="width:215">'.$descripcion.'</TD>'; + <tr> + <th align="center"> <?echo $TbMsg["HARD_NAME"]?> </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> Ordenadores: <? 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> <?echo $TbMsg[6]?> </TD> - <?if ($opcion==$op_eliminacion) - echo '<TD>'.$comentarios.'</TD>'; + <tr> + <th align="center"> <?php echo $TbMsg["HARD_COMMENTS"]?> </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"> <?php echo $TbMsg["HARD_WINBOOT"]?> <sup>*</sup> </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"> <sup>*</sup> <?php echo $TbMsg["WARN_NETBOOT"]?> </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?>  <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"> <?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> <? echo $TbMsg[2]?> </th> + <tr> + <th> <?php echo $TbMsg[2]?> </th> <td><textarea class="cajatexto" name="contenido" cols="70" rows="18"></textarea></td></tr> + <tr><th colspan="2"> <?php echo $TbMsg["WARN_NETBOOT"]?> </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 Binary files differnew file mode 100755 index 00000000..cd34d121 --- /dev/null +++ b/client/shared/lib/ogclient/ogAdmLnxClient diff --git a/client/shared/lib/ogclient/ogAdmWinClient.exe b/client/shared/lib/ogclient/ogAdmWinClient.exe Binary files differnew file mode 100644 index 00000000..56f1899d --- /dev/null +++ b/client/shared/lib/ogclient/ogAdmWinClient.exe 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..a083ae46 --- /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/tags/opengnsys-1.0.4/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..08060848 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")) @@ -34,7 +41,7 @@ if [ -d "$PROGRAMDIR/../installer" ]; then else USESVN=1 fi -SVN_URL="http://$OPENGNSYS_SERVER/svn/trunk/" +SVN_URL="http://$OPENGNSYS_SERVER/svn/tags/opengnsys-1.0.4/" WORKDIR=/tmp/opengnsys_installer mkdir -p $WORKDIR @@ -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." @@ -614,8 +686,8 @@ function getNetworkSettings() NETIP[i]=$(netstat -nr | awk -v d="$dev" '$1!~/0\.0\.0\.0/&&$8==d {if (n=="") n=$1} END {print n}') ROUTERIP[i]=$(netstat -nr | awk -v d="$dev" '$1~/0\.0\.0\.0/&&$8==d {print $2}') DEFAULTDEV=${DEFAULTDEV:-"$dev"} - let i++ fi + let i++ done DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1) if [ -z "${NETIP}[*]" -o -z "${NETMASK[*]}" ]; then @@ -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 + + + + |