diff options
559 files changed, 10292 insertions, 9352 deletions
@@ -1 +1,4 @@ +.DS_Store +.editorconfig .idea +__pycache__/ @@ -18,5 +18,5 @@ OpenGnsys website: https://opengnsys.es/ ## Installation notes -Please, read `installer/INSTALL.en.txt` (or `installer/INSTALL.es.txt`) for detailled instructions. +Please, read `doc/INSTALL.en.txt` (or `doc/INSTALL.es.txt`) for detailled instructions. diff --git a/admin/Database/ogAdmBD-1.1.0-1.1.1.sql b/admin/Database/ogAdmBD-1.1.0-1.1.1.sql new file mode 120000 index 00000000..fd52f3c8 --- /dev/null +++ b/admin/Database/ogAdmBD-1.1.0-1.1.1.sql @@ -0,0 +1 @@ +ogAdmBD-1.1.0a-1.1.1.sql
\ No newline at end of file diff --git a/admin/Database/ogAdmBD-1.1.0a-1.1.1pre.sql b/admin/Database/ogAdmBD-1.1.0a-1.1.1.sql index d0b3e0a7..d0b3e0a7 100644 --- a/admin/Database/ogAdmBD-1.1.0a-1.1.1pre.sql +++ b/admin/Database/ogAdmBD-1.1.0a-1.1.1.sql diff --git a/admin/Database/ogAdmBD-1.1.1pre.sql b/admin/Database/ogAdmBD-1.1.1pre-1.1.1.sql index a89f37be..6d075d40 100644 --- a/admin/Database/ogAdmBD-1.1.1pre.sql +++ b/admin/Database/ogAdmBD-1.1.1pre-1.1.1.sql @@ -1,5 +1,5 @@ ### Fichero de actualización de la base de datos. -# OpenGnsys 1.1.1 +# OpenGnsys 1.1.1pre - OpenGnsys 1.1.1 #use ogAdmBD # Eliminar procedimiento y disparador para evitar errores de ejecución. @@ -28,6 +28,9 @@ DELIMITER ';' CALL addcols(); DROP PROCEDURE addcols; +# Cambio del nombre de las plantillas PXE para compatibilidad con UEFI. +UPDATE ordenadores SET arranque='10' WHERE arranque='01'; + # Nueva tabla de proyectores (ticket #794). DROP TABLE IF EXISTS projectors; CREATE TABLE `projectors` ( @@ -39,4 +42,3 @@ CREATE TABLE `projectors` ( lab_id INT(11) NOT NULL DEFAULT 0, PRIMARY KEY(`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; - diff --git a/admin/Sources/Clients/ogagent/linux/debian/changelog b/admin/Sources/Clients/ogagent/linux/debian/changelog index 176cac0d..056c0dc4 100644 --- a/admin/Sources/Clients/ogagent/linux/debian/changelog +++ b/admin/Sources/Clients/ogagent/linux/debian/changelog @@ -1,8 +1,15 @@ ogagent (1.1.1) unstable; urgency=medium - * OGAgent code retrieved from GitHub + * Set connection timeout + * Compatibility with "Exam Mode" from the University of Seville - -- Ramón M. Gómez <ramongomez@us.es> Sun, 3 Jun 2018 13:00:00 +0200 + -- Ramón M. Gómez <ramongomez@us.es> Thu, 23 May 2019 13:00:00 +0200 + +ogagent (1.1.0a) stable; urgency=medium + + * Fix a bug when activating the agent with some network devices + + -- Ramón M. Gómez <ramongomez@us.es> Wed, 22 May 2019 18:00:00 +0200 ogagent (1.1.0) stable; urgency=medium diff --git a/admin/Sources/Clients/ogagent/src/cfg/ogagent.cfg b/admin/Sources/Clients/ogagent/src/cfg/ogagent.cfg index 8888e88a..3fa38ab2 100644 --- a/admin/Sources/Clients/ogagent/src/cfg/ogagent.cfg +++ b/admin/Sources/Clients/ogagent/src/cfg/ogagent.cfg @@ -8,6 +8,8 @@ path=test_modules/server # Remote OpenGnsys Service remote=https://192.168.2.10/opengnsys/rest +# Alternate OpenGnsys Service (comment out to enable this option) +#altremote=https://10.0.2.2/opengnsys/rest # Log Level, if ommited, will be set to INFO log=DEBUG diff --git a/admin/Sources/Clients/ogagent/src/opengnsys/RESTApi.py b/admin/Sources/Clients/ogagent/src/opengnsys/RESTApi.py index 5caaf8c4..d785dfa7 100644 --- a/admin/Sources/Clients/ogagent/src/opengnsys/RESTApi.py +++ b/admin/Sources/Clients/ogagent/src/opengnsys/RESTApi.py @@ -26,9 +26,9 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -''' +""" @author: Adolfo Gómez, dkmaster at dkmon dot com -''' +""" # pylint: disable-msg=E1101,W0703 @@ -43,7 +43,8 @@ from .log import logger from .utils import exceptionToMessage -VERIFY_CERT = False +VERIFY_CERT = False # Do not check server certificate +TIMEOUT = 5 # Connection timout, in seconds class RESTError(Exception): @@ -66,30 +67,34 @@ try: except Exception: pass # In fact, isn't too important, but wil log warns to logging file + class REST(object): - ''' + """ Simple interface to remote REST apis. The constructor expects the "base url" as parameter, that is, the url that will be common on all REST requests Remember that this is a helper for "easy of use". You can provide your owns using requests lib for example. Examples: v = REST('https://example.com/rest/v1/') (Can omit trailing / if desired) v.sendMessage('hello?param1=1¶m2=2') - This will generate a GET message to https://example.com/rest/v1/hello?param1=1¶m2=2, and return the deserialized JSON result or an exception + This will generate a GET message to https://example.com/rest/v1/hello?param1=1¶m2=2, and return the + deserialized JSON result or an exception v.sendMessage('hello?param1=1¶m2=2', {'name': 'mario' }) - This will generate a POST message to https://example.com/rest/v1/hello?param1=1¶m2=2, with json encoded body {'name': 'mario' }, and also returns + This will generate a POST message to https://example.com/rest/v1/hello?param1=1¶m2=2, with json encoded + body {'name': 'mario' }, and also returns the deserialized JSON result or raises an exception in case of error - ''' + """ + def __init__(self, url): - ''' + """ Initializes the REST helper url is the full url of the REST API Base, as for example "https://example.com/rest/v1". @param url The url of the REST API Base. The trailing '/' can be included or omitted, as desired. - ''' + """ self.endpoint = url - + if self.endpoint[-1] != '/': self.endpoint += '/' - + # Some OSs ships very old python requests lib implementations, workaround them... try: self.newerRequestLib = requests.__version__.split('.')[0] >= '1' @@ -105,37 +110,39 @@ class REST(object): pass def _getUrl(self, method): - ''' + """ Internal method Composes the URL based on "method" @param method: Method to append to base url for composition - ''' + """ url = self.endpoint + method return url def _request(self, url, data=None): - ''' + """ Launches the request @param url: The url to obtain - @param data: if None, the request will be sent as a GET request. If != None, the request will be sent as a POST, with data serialized as JSON in the body. - ''' + @param data: if None, the request will be sent as a GET request. If != None, the request will be sent as a POST, + with data serialized as JSON in the body. + """ try: if data is None: logger.debug('Requesting using GET (no data provided) {}'.format(url)) - # Old requests version does not support verify, but they do not checks ssl certificate by default + # Old requests version does not support verify, but it do not checks ssl certificate by default if self.newerRequestLib: - r = requests.get(url, verify=VERIFY_CERT) + r = requests.get(url, verify=VERIFY_CERT, timeout=TIMEOUT) else: - r = requests.get(url) - else: # POST + r = requests.get(url) + else: # POST logger.debug('Requesting using POST {}, data: {}'.format(url, data)) if self.newerRequestLib: - r = requests.post(url, data=data, headers={'content-type': 'application/json'}, verify=VERIFY_CERT) + r = requests.post(url, data=data, headers={'content-type': 'application/json'}, + verify=VERIFY_CERT, timeout=TIMEOUT) else: r = requests.post(url, data=data, headers={'content-type': 'application/json'}) - r = json.loads(r.content) # Using instead of r.json() to make compatible with oooold rquests lib versions + r = json.loads(r.content) # Using instead of r.json() to make compatible with old requests lib versions except requests.exceptions.RequestException as e: raise ConnectionError(e) except Exception as e: @@ -144,17 +151,17 @@ class REST(object): return r def sendMessage(self, msg, data=None, processData=True): - ''' + """ Sends a message to remote REST server @param data: if None or omitted, message will be a GET, else it will send a POST @param processData: if True, data will be serialized to json before sending, else, data will be sent as "raw" - ''' + """ logger.debug('Invoking post message {} with data {}'.format(msg, data)) if processData and data is not None: data = json.dumps(data) - + url = self._getUrl(msg) logger.debug('Requesting {}'.format(url)) - + return self._request(url, data) diff --git a/admin/Sources/Clients/ogagent/src/opengnsys/config.py b/admin/Sources/Clients/ogagent/src/opengnsys/config.py index c86c6979..d1f3ede6 100644 --- a/admin/Sources/Clients/ogagent/src/opengnsys/config.py +++ b/admin/Sources/Clients/ogagent/src/opengnsys/config.py @@ -33,7 +33,6 @@ from __future__ import unicode_literals from ConfigParser import SafeConfigParser -from .log import logger config = None diff --git a/admin/Sources/Clients/ogagent/src/opengnsys/modules/server/OpenGnSys/__init__.py b/admin/Sources/Clients/ogagent/src/opengnsys/modules/server/OpenGnSys/__init__.py index 8ef866ad..24d69ee4 100644 --- a/admin/Sources/Clients/ogagent/src/opengnsys/modules/server/OpenGnSys/__init__.py +++ b/admin/Sources/Clients/ogagent/src/opengnsys/modules/server/OpenGnSys/__init__.py @@ -25,14 +25,12 @@ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -''' +""" @author: Ramón M. Gómez, ramongomez at us dot es -''' +""" from __future__ import unicode_literals -import subprocess import threading -import thread import os import platform import time @@ -47,8 +45,28 @@ from opengnsys import operations from opengnsys.log import logger from opengnsys.scriptThread import ScriptExecutorThread + +# Check authorization header decorator +def check_secret(fnc): + """ + Decorator to check for received secret key and raise exception if it isn't valid. + """ + def wrapper(*args, **kwargs): + try: + this, path, get_params, post_params, server = args # @UnusedVariable + if this.random == server.headers['Authorization']: + fnc(*args, **kwargs) + else: + raise Exception('Unauthorized operation') + except Exception as e: + logger.error(e) + raise Exception(e) + + return wrapper + + # Error handler decorator. -def catchBackgroundError(fnc): +def catch_background_error(fnc): def wrapper(*args, **kwargs): this = args[0] try: @@ -57,32 +75,26 @@ def catchBackgroundError(fnc): this.REST.sendMessage('error?id={}'.format(kwargs.get('requestId', 'error')), {'error': '{}'.format(e)}) return wrapper + class OpenGnSysWorker(ServerWorker): name = 'opengnsys' - interface = None # Binded interface for OpenGnsys - loggedin = False # User session flag + interface = None # Bound interface for OpenGnsys + REST = None # REST object + logged_in = False # User session flag locked = {} random = None # Random string for secure connections length = 32 # Random string length - def checkSecret(self, server): - """ - Checks for received secret key and raise exception if it isn't valid. - """ - try: - if self.random != server.headers['Authorization']: - raise Exception('Unauthorized operation') - except Exception as e: - logger.error(e) - raise Exception(e) - def onActivation(self): """ Sends OGAgent activation notification to OpenGnsys server """ - self.cmd = None + t = 0 + # Generate random secret to send on activation + self.random = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(self.length)) # Ensure cfg has required configuration variables or an exception will be thrown - self.REST = REST(self.service.config.get('opengnsys', 'remote')) + url = self.service.config.get('opengnsys', 'remote') + self.REST = REST(url) # Get network interfaces until they are active or timeout (5 minutes) for t in range(0, 300): try: @@ -99,6 +111,29 @@ class OpenGnSysWorker(ServerWorker): # Raise error after timeout if not self.interface: raise e + # Loop to send initialization message + for t in range(0, 100): + try: + try: + self.REST.sendMessage('ogagent/started', {'mac': self.interface.mac, 'ip': self.interface.ip, + 'secret': self.random, 'ostype': operations.os_type, + 'osversion': operations.os_version}) + break + except: + # Trying to initialize on alternative server, if defined + # (used in "exam mode" from the University of Seville) + self.REST = REST(self.service.config.get('opengnsys', 'altremote')) + self.REST.sendMessage('ogagent/started', {'mac': self.interface.mac, 'ip': self.interface.ip, + 'secret': self.random, 'ostype': operations.os_type, + 'osversion': operations.os_version, 'alt_url': True}) + break + except: + time.sleep(3) + # Raise error after timeout + if 0 < t < 100: + logger.debug('Successful connection after {} tries'.format(t)) + elif t == 100: + raise Exception('Initialization error: Cannot connect to remote server') # Delete marking files for f in ['ogboot.me', 'ogboot.firstboot', 'ogboot.secondboot']: try: @@ -106,22 +141,19 @@ class OpenGnSysWorker(ServerWorker): except OSError: pass # Copy file "HostsFile.FirstOctetOfIPAddress" to "HostsFile", if it exists - # (used in "exam mode" of the University of Seville) - hostsFile = os.path.join(operations.get_etc_path(), 'hosts') - newHostsFile = hostsFile + '.' + self.interface.ip.split('.')[0] - if os.path.isfile(newHostsFile): - shutil.copyfile(newHostsFile, hostsFile) - # Generate random secret to send on activation - self.random = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(self.length)) - # Send initialization message - self.REST.sendMessage('ogagent/started', {'mac': self.interface.mac, 'ip': self.interface.ip, 'secret': self.random, 'ostype': operations.osType, 'osversion': operations.osVersion}) + # (used in "exam mode" from the University of Seville) + hosts_file = os.path.join(operations.get_etc_path(), 'hosts') + new_hosts_file = hosts_file + '.' + self.interface.ip.split('.')[0] + if os.path.isfile(new_hosts_file): + shutil.copyfile(new_hosts_file, hosts_file) def onDeactivation(self): """ Sends OGAgent stopping notification to OpenGnsys server """ logger.debug('onDeactivation') - self.REST.sendMessage('ogagent/stopped', {'mac': self.interface.mac, 'ip': self.interface.ip, 'ostype': operations.osType, 'osversion': operations.osVersion}) + self.REST.sendMessage('ogagent/stopped', {'mac': self.interface.mac, 'ip': self.interface.ip, + 'ostype': operations.os_type, 'osversion': operations.os_version}) def processClientMessage(self, message, data): logger.debug('Got OpenGnsys message from client: {}, data {}'.format(message, data)) @@ -132,18 +164,19 @@ class OpenGnSysWorker(ServerWorker): """ user, sep, language = data.partition(',') logger.debug('Received login for {} with language {}'.format(user, language)) - self.loggedin = True - self.REST.sendMessage('ogagent/loggedin', {'ip': self.interface.ip, 'user': user, 'language': language, 'ostype': operations.osType, 'osversion': operations.osVersion}) + self.logged_in = True + self.REST.sendMessage('ogagent/loggedin', {'ip': self.interface.ip, 'user': user, 'language': language, + 'ostype': operations.os_type, 'osversion': operations.os_version}) def onLogout(self, user): """ Sends session logout notification to OpenGnsys server """ logger.debug('Received logout for {}'.format(user)) - self.loggedin = False + self.logged_in = False self.REST.sendMessage('ogagent/loggedout', {'ip': self.interface.ip, 'user': user}) - def process_ogclient(self, path, getParams, postParams, server): + def process_ogclient(self, path, get_params, post_params, server): """ This method can be overridden to provide your own message processor, or better you can implement a method that is called exactly as "process_" + path[0] (module name has been removed from path @@ -151,11 +184,11 @@ class OpenGnSysWorker(ServerWorker): * Example: Imagine this invocation url (no matter if GET or POST): http://example.com:9999/Sample/mazinger/Z The HTTP Server will remove "Sample" from path, parse arguments and invoke this method as this: - module.processMessage(["mazinger","Z"], getParams, postParams) + module.processMessage(["mazinger","Z"], get_params, post_params) This method will process "mazinger", and look for a "self" method that is called "process_mazinger", and invoke it this way: - return self.process_mazinger(["Z"], getParams, postParams) + return self.process_mazinger(["Z"], get_params, post_params) In the case path is empty (that is, the path is composed only by the module name, like in "http://example.com/Sample", the "process" method will be invoked directly @@ -169,13 +202,18 @@ class OpenGnSysWorker(ServerWorker): operation = getattr(self, 'ogclient_' + path[0]) except Exception: raise Exception('Message processor for "{}" not found'.format(path[0])) - return operation(path[1:], getParams, postParams) + return operation(path[1:], get_params, post_params) - def process_status(self, path, getParams, postParams, server): + def process_status(self, path, get_params, post_params, server): """ - Returns client status. + Returns client status (OS type or execution status) and login status + :param path: + :param get_params: + :param post_params: + :param server: + :return: JSON object {"status": "status_code", "loggedin": boolean} """ - res = {'status': '', 'loggedin': self.loggedin} + res = {'status': '', 'loggedin': self.logged_in} if platform.system() == 'Linux': # GNU/Linux # Check if it's OpenGnsys Client. if os.path.exists('/scripts/oginit'): @@ -194,66 +232,83 @@ class OpenGnSysWorker(ServerWorker): res['status'] = 'OSX' return res - def process_reboot(self, path, getParams, postParams, server): + @check_secret + def process_reboot(self, path, get_params, post_params, server): """ - Launches a system reboot operation. + Launches a system reboot operation + :param path: + :param get_params: + :param post_params: + :param server: authorization header + :return: JSON object {"op": "launched"} """ logger.debug('Received reboot operation') - self.checkSecret(server) - # Rebooting thread. + + # Rebooting thread def rebt(): operations.reboot() threading.Thread(target=rebt).start() return {'op': 'launched'} - def process_poweroff(self, path, getParams, postParams, server): + @check_secret + def process_poweroff(self, path, get_params, post_params, server): """ - Launches a system power off operation. + Launches a system power off operation + :param path: + :param get_params: + :param post_params: + :param server: authorization header + :return: JSON object {"op": "launched"} """ logger.debug('Received poweroff operation') - self.checkSecret(server) - # Powering off thread. + + # Powering off thread def pwoff(): time.sleep(2) operations.poweroff() threading.Thread(target=pwoff).start() return {'op': 'launched'} - def process_script(self, path, getParams, postParams, server): + @check_secret + def process_script(self, path, get_params, post_params, server): """ Processes an script execution (script should be encoded in base64) + :param path: + :param get_params: + :param post_params: JSON object {"script": "commands"} + :param server: authorization header + :return: JSON object {"op": "launched"} """ logger.debug('Processing script request') - self.checkSecret(server) - # Decoding script. - script = urllib.unquote(postParams.get('script').decode('base64')).decode('utf8') + # Decoding script + script = urllib.unquote(post_params.get('script').decode('base64')).decode('utf8') script = 'import subprocess; subprocess.check_output("""{}""",shell=True)'.format(script) # Executing script. - if postParams.get('client', 'false') == 'false': + if post_params.get('client', 'false') == 'false': thr = ScriptExecutorThread(script) thr.start() else: self.sendClientMessage('script', {'code': script}) return {'op': 'launched'} - def process_logoff(self, path, getParams, postParams, server): + @check_secret + def process_logoff(self, path, get_params, post_params, server): """ - Closes user session. + Closes user session """ logger.debug('Received logoff operation') - self.checkSecret(server) - # Sending log off message to OGAgent client. + # Sending log off message to OGAgent client self.sendClientMessage('logoff', {}) return {'op': 'sent to client'} - def process_popup(self, path, getParams, postParams, server): + @check_secret + def process_popup(self, path, get_params, post_params, server): """ - Shows a message popup on the user's session. + Shows a message popup on the user's session """ logger.debug('Received message operation') - self.checkSecret(server) - # Sending popup message to OGAgent client. - self.sendClientMessage('popup', postParams) + # Sending popup message to OGAgent client + self.sendClientMessage('popup', post_params) return {'op': 'launched'} def process_client_popup(self, params): diff --git a/admin/Sources/Clients/ogagent/src/opengnsys/operations.py b/admin/Sources/Clients/ogagent/src/opengnsys/operations.py index dcfa40cb..1a274b20 100644 --- a/admin/Sources/Clients/ogagent/src/opengnsys/operations.py +++ b/admin/Sources/Clients/ogagent/src/opengnsys/operations.py @@ -26,25 +26,25 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -''' +""" @author: Adolfo Gómez, dkmaster at dkmon dot com -''' +""" # pylint: disable=unused-wildcard-import,wildcard-import from __future__ import unicode_literals - import sys + # Importing platform operations and getting operating system data. if sys.platform == 'win32': from .windows.operations import * # @UnusedWildImport - osType = 'Windows' - osVersion = getWindowsVersion() + os_type = 'Windows' + os_version = getWindowsVersion() else: if sys.platform == 'darwin': from .macos.operations import * # @UnusedWildImport - osType = 'MacOS' - osVersion = getMacosVersion().replace(',','') + os_type = 'MacOS' + os_version = getMacosVersion().replace(',', '') else: from .linux.operations import * # @UnusedWildImport - osType = 'Linux' - osVersion = getLinuxVersion().replace(',','') + os_type = 'Linux' + os_version = getLinuxVersion().replace(',', '') diff --git a/admin/Sources/Clients/ogagent/windows/build-windows.sh b/admin/Sources/Clients/ogagent/windows/build-windows.sh index d7248ab7..88a3c4ed 100755 --- a/admin/Sources/Clients/ogagent/windows/build-windows.sh +++ b/admin/Sources/Clients/ogagent/windows/build-windows.sh @@ -1,5 +1,7 @@ #!/bin/bash +cd "$(dirname "$0")" export WINEARCH=win32 -export WINEPREFIX=$(realpath $(dirname $0)/wine) +export WINEPREFIX=$PWD/wine +grep -o "[0-9]*\.[0-9]*\.[0-9]*" ../src/VERSION > VERSION wine cmd /c c:\\ogagent\\build.bat -chmod -x $(dirname $0)/../OGAgentSetup*.exe +chmod -x ../OGAgentSetup*.exe diff --git a/admin/Sources/Clients/ogagent/windows/ogagent.nsi b/admin/Sources/Clients/ogagent/windows/ogagent.nsi index 88c9ab2f..8caf6738 100644 --- a/admin/Sources/Clients/ogagent/windows/ogagent.nsi +++ b/admin/Sources/Clients/ogagent/windows/ogagent.nsi @@ -2,12 +2,17 @@ # Copy inside the two x86_xxxxx folders inside nsis plugins folder
Name "OpenGnsys Agent"
-# OpenGnsys Actor version
+# OpenGnsys Agent version
!define /file OGA_VERSION "src\VERSION"
+!define /file OGA_WINVERSION "windows\VERSION"
# General Symbol Definitions
!define REGKEY "SOFTWARE\OGAgent"
-!define VERSION ${OGA_VERSION}.0
+!if ${OGA_VERSION} == ${OGA_WINVERSION}
+ !define VERSION ${OGA_WINVERSION}.0
+!else
+ !define VERSION ${OGA_WINVERSION}.1
+!endif
!define COMPANY "OpenGnsys Project"
!define URL https://opengnsys.es
diff --git a/admin/Sources/Includes/ogAdmLib.c b/admin/Sources/Includes/ogAdmLib.c index a526d173..7faa9f08 100644 --- a/admin/Sources/Includes/ogAdmLib.c +++ b/admin/Sources/Includes/ogAdmLib.c @@ -7,53 +7,6 @@ // Descripción: Este fichero implementa una libreria de funciones para uso común de los servicios // ************************************************************************************************************************************************** // ________________________________________________________________________________________________________ -// Función: encriptar -// -// Descripción: -// Encripta una cadena -// Parametros: -// - cadena : Cadena a encriptar -// - ret : Longitud de la caden cadena encriptada -// ________________________________________________________________________________________________________ -char * encriptar(char *cadena,int*ret) -{ - /* - int i,lon; - char clave; - - clave = 12 & 0xFFU; // La clave elegida entre 0-255, en este caso 12 - lon=strlen(cadena); - for(i=0;i<lon;i++) - cadena[i]=((char)cadena[i] ^ clave) & 0xFF; - *ret=lon; - */ - return(cadena); -} -// ________________________________________________________________________________________________________ -// Función: desencriptar -// -// Descripción: -// Desencripta una cadena -// Parametros: -// - cadena : Cadena a desencriptar -// - ret : Longitud de la caden cadena encriptada -// ________________________________________________________________________________________________________ -char * desencriptar(char *cadena,int* ret) -{ - /* - int i,lon; - char clave; - - clave = 12 & 0xFFU; // La clave elegida entre 0-255, en este caso 12 - lon=strlen(cadena); - for(i=0;i<lon;i++) - cadena[i]=((char)cadena[i] ^ clave) & 0xFF; - *ret=lon; - */ - return(cadena); - -} -// ________________________________________________________________________________________________________ // Función: tomaHora // // Descripción: @@ -606,7 +559,6 @@ BOOLEAN mandaTrama(SOCKET *sock, TRAMA* ptrTrama) BOOLEAN res; lonprm=strlen(ptrTrama->parametros); - ptrTrama->parametros=encriptar(ptrTrama->parametros,&lonprm); // Encripta los parámetros sprintf(hlonprm,"%05X",LONGITUD_CABECERATRAMA+LONHEXPRM+lonprm); // Convierte en hexadecimal la longitud buffer=reservaMemoria(LONGITUD_CABECERATRAMA+LONHEXPRM+lonprm); // Longitud total de la trama @@ -699,7 +651,7 @@ TRAMA* recibeTrama(SOCKET *sock) if (!ptrTrama) return(NULL); memcpy(ptrTrama,buffer,LONGITUD_CABECERATRAMA); // Copia cabecera de trama lon=lSize-(LONGITUD_CABECERATRAMA+LONHEXPRM); // Longitud de los parametros aún encriptados - bufferd=desencriptar(&buffer[LONGITUD_CABECERATRAMA+LONHEXPRM],&lon); + bufferd = &buffer[LONGITUD_CABECERATRAMA+LONHEXPRM]; initParametros(ptrTrama,lon); // Desencripta la trama memcpy(ptrTrama->parametros,bufferd,lon); liberaMemoria((char*)buffer); @@ -1120,23 +1072,3 @@ TRAMA* recibeMensaje(SOCKET *socket_c) } // ________________________________________________________________________________________________________ - -int tomaPuerto(SOCKET s) -{ - struct sockaddr_in sin; - socklen_t addrlen = sizeof(sin); - int local_port; - - if(getpeername(s, (struct sockaddr *)&sin, &addrlen) == 0 - && sin.sin_family == AF_INET && - addrlen == sizeof(sin)) - { - local_port = ntohs(sin.sin_port); - } - else - local_port=-1; - - return(local_port); - -} - diff --git a/admin/Sources/Includes/ogAdmLib.h b/admin/Sources/Includes/ogAdmLib.h index 2e63bbc5..42279a3e 100644 --- a/admin/Sources/Includes/ogAdmLib.h +++ b/admin/Sources/Includes/ogAdmLib.h @@ -232,7 +232,7 @@ const char* tbErrores[]={"Se han generado errores. No se puede continuar la ejec "094-Ha habido algún problerma al procesar la actualización después de crear una imagen",\ "095-Ha habido algún problerma al procesar la actualización después de restaurar una imagen",\ "096-Ha habido algún problerma al procesar la actualización después de crear un software incremental",\ - + "097-Este fichero de log está obsoleto, este proceso usa ahora syslog para gestionar los mensajes de log",\ }; // ________________________________________________________________________________________________________ // Tabla de mensajes @@ -267,12 +267,12 @@ const char* tbMensajes[]={"",\ // ________________________________________________________________________________________________________ // Prototipo de funciones // ________________________________________________________________________________________________________ -char *desencriptar(char *,int*); -char *encriptar(char *,int*); struct tm * tomaHora(); void registraLog(const char *,const char *,int ); void errorLog(const char *,int ,int); +#define og_log(err, swe) errorLog(__FUNCTION__, err, swe) void errorInfo(const char *,char *); +#define og_info(err) errorInfo(__FUNCTION__, err) void infoLog(int); void infoDebug(char*); BOOLEAN validacionParametros(int,char**,int); @@ -310,5 +310,10 @@ BOOLEAN escribeArchivo(char *,char*); BOOLEAN sendArchivo(SOCKET *,char *); BOOLEAN recArchivo(SOCKET *,char *); SOCKET TCPConnect(char *,char*); -int tomaPuerto(SOCKET); + +#include <stddef.h> /* for offsetof. */ + +#define container_of(ptr, type, member) ({ \ + typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) diff --git a/admin/Sources/Services/ogAdmAgent/Makefile b/admin/Sources/Services/ogAdmAgent/Makefile index 143c4c81..b9d39b9b 100644 --- a/admin/Sources/Services/ogAdmAgent/Makefile +++ b/admin/Sources/Services/ogAdmAgent/Makefile @@ -8,8 +8,7 @@ INSTALL_DIR := /opt/opengnsys # Opciones de compilacion CFLAGS := $(shell mysql_config --cflags) -CFLAGS += -O0 -g -Wall -I../../Includes # Depuracion -#CFLAGS += -O3 -I../../Includes # Optimizacion +CFLAGS += -g -Wall -I../../Includes CPPFLAGS := $(CFLAGS) # Opciones de linkado @@ -23,7 +22,6 @@ all: $(PROYECTO) $(PROYECTO): $(OBJS) g++ $(LDFLAGS) $(OBJS) -o $(PROYECTO) -# strip $(PROYECTO) # Optimizacion install: $(PROYECTO) cp $(PROYECTO) $(INSTALL_DIR)/sbin diff --git a/admin/Sources/Services/ogAdmAgent/sources/ogAdmAgent.cpp b/admin/Sources/Services/ogAdmAgent/sources/ogAdmAgent.cpp index cce297fe..2f0f442b 100644 --- a/admin/Sources/Services/ogAdmAgent/sources/ogAdmAgent.cpp +++ b/admin/Sources/Services/ogAdmAgent/sources/ogAdmAgent.cpp @@ -1,911 +1,914 @@ -// ********************************************************************************************************
-// Servicio: ogAdmAgent
-// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
-// Fecha Creación: Marzo-2010
-// Fecha Última modificación: Marzo-2010
-// Nombre del fichero: ogAdmAgent.cpp
-// Descripción: Este fichero implementa el servicio agente del sistema. Revisa a intervalos
-// regulares la base de datos para comprobar si existen acciones programadas.
-// ********************************************************************************************************
-#include "ogAdmAgent.h"
-#include "ogAdmLib.c"
-//________________________________________________________________________________________________________
-// Función: tomaConfiguracion
-//
-// Descripción:
-// Lee el fichero de configuración del servicio
-// Parámetros:
-// filecfg : Ruta completa al fichero de configuración
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//________________________________________________________________________________________________________
-BOOLEAN tomaConfiguracion(char* filecfg)
-{
- char modulo[] = "tomaConfiguracion()";
-
- if (filecfg == NULL || strlen(filecfg) == 0) {
- errorLog(modulo, 1, FALSE); // Fichero de configuración del servicio vacío
- return (FALSE);
- }
- FILE *fcfg;
- long lSize;
- char * buffer, *lineas[MAXPRM], *dualparametro[2];
- int i, numlin, resul;
-
- fcfg = fopen(filecfg, "rt");
- if (fcfg == NULL) {
- errorLog(modulo, 2, FALSE); // No existe fichero de configuración del servicio
- return (FALSE);
- }
-
- fseek(fcfg, 0, SEEK_END);
- lSize = ftell(fcfg); // Obtiene tamaño del fichero.
- rewind(fcfg);
- buffer = (char*) reservaMemoria(lSize + 1); // Toma memoria para el buffer de lectura.
- if (buffer == NULL) { // No hay memoria suficiente para el buffer
- errorLog(modulo, 3, FALSE);
- return (FALSE);
- }
- fread(buffer, 1, lSize, fcfg); // Lee contenido del fichero
- buffer[lSize] = (char) NULL;
- fclose(fcfg);
-
- servidoradm[0] = (char) NULL; //inicializar variables globales
- puerto[0] = (char) NULL;
- usuario[0] = (char) NULL;
- pasguor[0] = (char) NULL;
- datasource[0] = (char) NULL;
- catalog[0] = (char) NULL;
-
- numlin = splitCadena(lineas, buffer, '\n');
- for (i = 0; i < numlin; i++) {
- splitCadena(dualparametro, lineas[i], '=');
- resul = strcmp(StrToUpper(dualparametro[0]), "SERVIDORADM");
- if (resul == 0)
- strcpy(servidoradm, dualparametro[1]);
- resul = strcmp(StrToUpper(dualparametro[0]), "PUERTO");
- if (resul == 0)
- strcpy(puerto, dualparametro[1]);
- resul = strcmp(StrToUpper(dualparametro[0]), "USUARIO");
- if (resul == 0)
- strcpy(usuario, dualparametro[1]);
- resul = strcmp(StrToUpper(dualparametro[0]), "PASSWORD");
- if (resul == 0)
- strcpy(pasguor, dualparametro[1]);
- resul = strcmp(StrToUpper(dualparametro[0]), "DATASOURCE");
- if (resul == 0)
- strcpy(datasource, dualparametro[1]);
- resul = strcmp(StrToUpper(dualparametro[0]), "CATALOG");
- if (resul == 0)
- strcpy(catalog, dualparametro[1]);
- }
- if (servidoradm[0] == (char) NULL) {
- errorLog(modulo, 4, FALSE); // Falta parámetro SERVIDORADM
- return (FALSE);
- }
- if (puerto[0] == (char) NULL) {
- errorLog(modulo, 5, FALSE); // Falta parámetro PUERTO
- return (FALSE);
- }
- if (usuario[0] == (char) NULL) {
- errorLog(modulo, 6, FALSE); // Falta parámetro USUARIO
- return (FALSE);
- }
- if (pasguor[0] == (char) NULL) {
- errorLog(modulo, 7, FALSE); // Falta parámetro PASSWORD
- return (FALSE);
- }
- if (datasource[0] == (char) NULL) {
- errorLog(modulo, 8, FALSE); // Falta parámetro DATASOURCE
- return (FALSE);
- }
- if (catalog[0] == (char) NULL) {
- errorLog(modulo, 9, FALSE); // Falta parámetro CATALOG
- return (FALSE);
- }
- return (TRUE);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: diadelaSemana
-//
-// Descripción:
-// Calcula el número del día de la semana que corresponde a una fecha
-// Parámetros:
-// - dia: Un día
-// - mes: Un mes
-// - anno: Un año
-// Devuelve:
-// El número del día de la semana: 1=Lunes, 2=martes ... 6=sábado 7=domingo
-// ________________________________________________________________________________________________________
-
-int diadelaSemana(WORD dia,WORD mes,WORD anno)
-{
- int i,cont,dias_anuales;
- int desplazamiento_dias=6;
- int orddiasem;
-
- cont =0;
- for (i=1900;i<anno;i++){
- if (bisiesto(i)) dias_anuales=366; else dias_anuales=365;
- cont+=dias_anuales;
- }
- for (i=1;i<mes;i++){
- if (i!=2)
- cont+=dias_meses[i];
- else{
- if (bisiesto(anno))
- cont+=29;
- else
- cont+=28;
- }
- }
- cont+=dia+desplazamiento_dias;
- orddiasem=(cont%7);
- if(orddiasem==0) orddiasem=7;
- return(orddiasem);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: bisiesto
-//
-// Descripción:
-// Calcula si un año es bisiesto o no lo es
-// Parámetros:
-// - anno: Un año
-// Devuelve:
-// TRUE si el año es bisiesto
-// FALSE si no es bisiesto
-// ________________________________________________________________________________________________________
-
-BOOLEAN bisiesto(WORD anno){
- return(anno%4==0);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: semanadelMes
-//
-// Descripción:
-// Calcula el número de semana perteneciente a un día del mes
-// Parámetros:
-// - ordiasem_1: Orden semanal (1,2...) del primer dia del mes que se pasa como parámetro
-// - diames: El mes concreto
-// Devuelve:
-// El número del día de la semana: 1=Lunes, 2=martes ... 6=sábado 7=domingo , de ese mes
-// ________________________________________________________________________________________________________
-
-int semanadelMes(int ordiasem_1,int diames)
-{
- int nwdia,resto,cociente;
-
- nwdia=diames+ordiasem_1-1;
- cociente=nwdia/7;
- resto=nwdia%7;
- if(resto>0) cociente++;
- return(cociente);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: buscaAccion
-//
-// Descripción:
-// Busca en la base de datos, acciones programadas
-// Parámetros:
-// - db: Objeto base de datos (operativo)
-// - dia : Día actual del mes
-// - mes : mes en curso
-// - anno : Año en curso
-// - hora : Hora actual
-// - minutos : Minutos actuales
-// - diasemana : Dia de la semana 1=lunes,2=martes ... ( 0 Domingo)
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-
-BOOLEAN buscaAccion(Database db,WORD dia,WORD mes,WORD anno,WORD hora,WORD minutos,WORD diasemana)
-{
- char msglog[LONSTD], sqlstr[LONSQL];
- Table tbl;
- BYTE swampm,bitsemana;
- int ordsem,ordulsem,ordiasem_1,maxdias;
- int sesionprog;
- char modulo[] = "buscaAccion()";
-
- /* Año de comienzo */
- anno=anno-ANNOREF; //
- /* Preparación hora */
- if(hora>11){
- hora-=12;
- swampm=1; // Es P.M.
- }
- else
- swampm=0; // Es am
- /* Preparación semana */
- if(diasemana==0) diasemana=7; // El domingo
-
- // Cuestión semanas
- ordiasem_1=diadelaSemana(1,mes,anno+2009);
- ordsem=semanadelMes(ordiasem_1,dia); // Calcula el número de la semana
- if (mes!=2) // Toma el último día de ese mes
- maxdias=dias_meses[mes];
- else{
- if (bisiesto(anno+ANNOREF))
- maxdias=29;
- else
- maxdias=28;
- }
- ordulsem=semanadelMes(ordiasem_1,maxdias); // Calcula el número de la última semana
- bitsemana=HEX_semanas[ordsem];
- if(ordsem==ordulsem) // Si es la última semana del mes
- bitsemana|=HEX_semanas[6];
-
- sprintf(sqlstr,"SELECT DISTINCT idprogramacion,tipoaccion,identificador,sesion,idcentro,"\
- "tareas.descripcion as descritarea"\
- " FROM programaciones"\
- " LEFT OUTER JOIN tareas ON tareas.idtarea=programaciones.identificador"\
- " WHERE suspendida=0 "\
- " AND (annos & %d <> 0) "\
- " AND (meses & %d<>0) "\
- " AND ((diario & %d<>0) OR (dias & %d<>0) OR (semanas & %d<>0))"\
- " AND (horas & %d<>0) AND ampm=%d AND minutos=%d",\
- HEX_annos[anno],\
- HEX_meses[mes],\
- HEX_dias[dia],\
- HEX_diasemana[diasemana],\
- bitsemana,\
- HEX_horas[hora],\
- swampm,minutos);
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(tbl.ISEOF()){
- return(TRUE); // No hay acciones programadas
- }
-
- while(!tbl.ISEOF()){
- if(!tbl.Get("idprogramacion",idprogramacion)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("tipoaccion",tipoaccion)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("identificador",idtipoaccion)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("sesion",sesionprog)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("idcentro",idcentro)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
-
- if(tipoaccion==EJECUCION_COMANDO){ // Es una programación de un comando
- return(ejecutarComando(db,idprogramacion,sesionprog));
- }
- else{
-
- if(tipoaccion==EJECUCION_TAREA){
- if(!tbl.Get("descritarea",descriaccion)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- return(ejecutarTarea(db,idprogramacion,idtipoaccion));
- }
- else{
- if(tipoaccion==EJECUCION_RESERVA){
- EjecutarReserva(idtipoaccion,db); // Es una programación de un trabajo
- }
- }
- }
- tbl.MoveNext();
- }
- return(TRUE);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: ejecutarComando
-//
-// Descripción:
-// Ejecuta un comando programado
-// Parámetros:
-// - db: Objeto base de datos (operativo)
-// - idcomando: Identificador del comando
-// - sesion: Sesión correspondiente al comando cuando se grabó en la tabla acciones
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-
-BOOLEAN ejecutarComando(Database db,int idprogramacion,int sesion )
-{
- struct tm* st;
- char msglog[LONSTD], sqlstr[LONSQL];
- char fechahorareg[24];
- char modulo[] = "ejecutarComando()";
-
- st = tomaHora();
- sprintf(fechahorareg,"%d/%d/%d %d:%d:%d", st->tm_year + 1900, st->tm_mon + 1,
- st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec);
-
- sprintf(sqlstr,"UPDATE acciones SET estado=%d,idprogramacion=%d,fechahorareg='%s'"\
- " WHERE sesion=%d", ACCION_INICIADA,idprogramacion,fechahorareg,sesion);
-
- if (!db.Execute(sqlstr)) { // Error al recuperar los datos
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- return(enviaPeticion(idprogramacion));
-}
-// ________________________________________________________________________________________________________
-//
-// Función: ejecutarProcedimiento
-//
-// Descripción:
-// Ejecuta un procedimiento programado
-// Parámetros:
-// - db: Objeto base de datos (operativo)
-// - idprocedimiento: Identificador del procedimiento
-// - ambito: Ámbito de aplicación
-// - idambito: Identificador del ámbito
-// - restrambito: cadena con los identificadores de los ordenadores a los que se aplica la acción
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-
-BOOLEAN ejecutarProcedimiento(Database db,int idprocedimiento,int ambito,int idambito,char* restrambito)
-{
- char msglog[LONSTD], sqlstr[LONSQL],*parametros;
- Table tbl;
- int procedimientoid,idcomando,lonprm;
- char modulo[] = "ejecutarProcedimiento()";
-
- sprintf(sqlstr,"SELECT idcomando,procedimientoid,parametros,length(parametros) as lonprm"\
- " FROM procedimientos_acciones"\
- " WHERE idprocedimiento=%d ORDER BY orden",idprocedimiento);
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
-
- if(tbl.ISEOF()){
- return(TRUE); // No exustde tarea
- }
- while(!tbl.ISEOF()){
- if(!tbl.Get("procedimientoid",procedimientoid)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(procedimientoid>0){ // Procedimiento recursivo
- if(!ejecutarProcedimiento(db,procedimientoid,ambito,idambito,restrambito)){
- return(false);
- }
- }
- else{
- if(!tbl.Get("lonprm",lonprm)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- parametros = reservaMemoria(lonprm+1); // Reserva para almacenar los parametros del procedimiento
- if (parametros == NULL) {
- errorLog(modulo, 3, FALSE);
- return (FALSE);
- }
- if(!tbl.Get("parametros",parametros)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- liberaMemoria(parametros);
- return (FALSE);
- }
- liberaMemoria(parametros);
- if(!tbl.Get("idcomando",idcomando)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
-
- if(!insertaComando(db,idcomando,parametros,idprocedimiento,ambito,idambito,restrambito))
- return(false);
- }
- tbl.MoveNext();
- }
- return(TRUE);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: ejecutarTarea
-//
-// Descripción:
-// Ejecuta una tarea programada
-// Parámetros:
-// - db: Objeto base de datos (operativo)
-// - idtarea: Identificador de la tarea
-// - idprogramacion: Identificador de la programación
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-
-BOOLEAN ejecutarTarea(Database db, int idprogramacion, int idtarea)
-{
- char msglog[LONSTD], sqlstr[LONSQL];
- Table tbl;
- int tareaid,ambito,idambito,idprocedimiento,lonrestrambito;
- char* restrambito;
- char modulo[] = "ejecutarTarea()";
-
- sprintf(sqlstr,"SELECT tareas_acciones.orden,tareas_acciones.idprocedimiento,tareas_acciones.tareaid,"\
- " tareas.ambito,tareas.idambito,tareas.restrambito,length(tareas.restrambito) as lonrestrambito"\
- " FROM tareas"\
- " INNER JOIN tareas_acciones ON tareas_acciones.idtarea=tareas.idtarea"\
- " WHERE tareas_acciones.idtarea=%d ORDER BY tareas_acciones.orden",idtarea);
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
-
- if(tbl.ISEOF()){
- return(TRUE); // No existe tarea
- }
-
- while(!tbl.ISEOF()){
- if(!tbl.Get("tareaid",tareaid)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(tareaid>0){ // Tarea recursiva
- if(!ejecutarTarea(db,idprogramacion,tareaid)){
- return(false);
- }
- }
- else{
- if(!tbl.Get("ambito",ambito)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("idambito",idambito)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("lonrestrambito",lonrestrambito)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- restrambito = reservaMemoria(lonrestrambito+1);
- if (restrambito == NULL) {
- errorLog(modulo, 3, FALSE);
- return (FALSE);
- }
- if(!tbl.Get("restrambito",restrambito)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- liberaMemoria(restrambito);
- return (FALSE);
- }
- liberaMemoria(restrambito);
- RecopilaIpesMacs(db,ambito,idambito,restrambito); // Recopila Ipes del ámbito
- if(!tbl.Get("idprocedimiento",idprocedimiento)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sesion=time(NULL);
-
- if(!ejecutarProcedimiento(db,idprocedimiento,ambito,idambito,restrambito))
- return(FALSE);
- }
- tbl.MoveNext();
- }
- return(enviaPeticion(idprogramacion));
-}
-// ________________________________________________________________________________________________________
-//
-// Función: ejecutarTarea
-//
-// Descripción:
-// Registra un procedimiento para un ambito concreto
-// Parámetros:
-// - db: Objeto base de datos (operativo)
-// - idcomando: Identificador del comando
-// - idprocedimiento: Identificador del procedimiento
-// - ambito: Ámbito de aplicación
-// - idambito: Identificador del ámbito
-// - restrambito: cadena con los identificadores de los ordenadores a los que se aplica la acción
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//________________________________________________________________________________________________________
-BOOLEAN insertaComando(Database db,int idcomando,char*parametros,int idprocedimiento,int ambito,int idambito,char*restrambito)
-{
- char msglog[LONSTD], sqlstr[LONSQL];
- struct tm* st;
- char *auxID[MAXIMOS_CLIENTES],*auxIP[MAXIMOS_CLIENTES];
- char fechahorareg[24];
- int i;
- char modulo[] = "insertaComando()";
-
- if(concli==0) return(TRUE); // No hay ordenadores en el ámbito
-
- st = tomaHora();
- sprintf(fechahorareg,"%d/%d/%d %d:%d:%d", st->tm_year + 1900, st->tm_mon + 1, st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec);
-
- splitCadena(auxID,cadenaid,',');
- splitCadena(auxIP,cadenaip,';');
-
- for (i=0;i<concli;i++){
- sprintf(sqlstr,"INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,"\
- "sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,"\
- "restrambito,idprocedimiento,idcentro,idprogramacion)"\
- " VALUES (%s,%d,%d,'%s','%s',%d,%d,'%s','%s',%d,%d,%d,%d,'%s',%d,%d,%d)",\
- auxID[i],tipoaccion,idtipoaccion,descriaccion,auxIP[i],sesion,idcomando,parametros,fechahorareg,\
- ACCION_INICIADA,ACCION_SINRESULTADO,ambito,idambito,restrambito,idprocedimiento,idcentro,idprogramacion);
- if (!db.Execute(sqlstr)) { // Error al recuperar los datos
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- }
- return(TRUE);
-}
-// _____________________________________________________________________________________________________________
-// Función: EjecutarReserva
-//
-// Descripción:
-// Registra una acción (Tarea) y la envía para su ejecución
-// Parámetros:
-// - idreserva : Identificador de la reserva
-// - db: una conexion ADO operativa
-// - parametros: Parámetros de la acción
-// _____________________________________________________________________________________________________________
-BOOLEAN EjecutarReserva(int idreserva,Database db )
-{
-
-
- return(true);
-}
-// _____________________________________________________________________________________________________________
-// Función: enviaPeticion
-//
-// Descripción:
-// Hace una petición al servidor para que actualice los ordenadores implicados en la programación
-// Parámetros:
-// - idprogramacion: Identificador de la programación
-// _____________________________________________________________________________________________________________
-BOOLEAN enviaPeticion(int idprogramacion)
-{
- int lon;
- TRAMA *ptrTrama;
- SOCKET socket_c;
- char modulo[] = "enviaPeticion()";
-
- /* Envio de comandos a clientes */
- ptrTrama=(TRAMA *)reservaMemoria(sizeof(TRAMA));
- if (ptrTrama == NULL) { // No hay memoria suficiente para el bufer de las tramas
- errorLog(modulo, 3, FALSE);
- return(FALSE);
- }
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=envioProgramacion\r"); // Nombre de la función a ejecutar en el servidor
- lon+=sprintf(ptrTrama->parametros+lon,"idp=%d\r",idprogramacion); // Configuración de los Sistemas Operativos del cliente
-
- if(!enviaMensaje(&socket_c,ptrTrama,MSG_PETICION)){
- errorLog(modulo,91,FALSE);
- liberaMemoria(ptrTrama);
- return(FALSE);
- }
- liberaMemoria(ptrTrama);
- return(TRUE);
-}
-// _____________________________________________________________________________________________________________
-//
-// Función: RecopilaIpesMacs
-//
-// Descripción :
-// Recopila las IPes, las Macs y los identificadores de ordenadores de un ámbito determinado
-//
-// Especificaciones:
-// Esta Función recibe tres parámatros:
-// db : Un objeto Base de datos totalmente operativo
-// ambito: Tipo de ámbito
-// idambito: Identificador del ámbito
-// Devuelve:
-// Todas los identificadores de ordenadores , las ipes y las macs de los ordenadores que componen el ámbito
-// Para ellos habrá que tener declarada tres variables globales :
-// cadenaid,cadenaip y cadenamac
-// _____________________________________________________________________________________________________________
-
-BOOLEAN RecopilaIpesMacs(Database db,int ambito,int idambito,char *restrambito)
-{
- char sqlstr[LONSQL];
-
- concli=0;
- /* Reserva memoria al meno para caracter nulo */
- cadenaid=(char*) reservaMemoria(1);
- cadenaip=(char*) reservaMemoria(1);
- cadenamac=(char*) reservaMemoria(1);
-
- switch(ambito){
- case AMBITO_CENTROS :
- sprintf(sqlstr,"SELECT idcentro FROM centros WHERE idcentro=%d",idambito);
- RecorreCentro(db,sqlstr);
- break;
- case AMBITO_GRUPOSAULAS :
- sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE idgrupo=%d AND tipo=%d",idambito,AMBITO_GRUPOSAULAS);
- RecorreGruposAulas(db,sqlstr);
- break;
- case AMBITO_AULAS :
- sprintf(sqlstr,"SELECT idaula FROM aulas WHERE idaula=%d",idambito);
- RecorreAulas(db,sqlstr);
- break;
- case AMBITO_GRUPOSORDENADORES :
- sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE idgrupo=%d",idambito);
- RecorreGruposOrdenadores(db,sqlstr);
- break;
- case AMBITO_ORDENADORES :
- sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idordenador=%d",idambito);
- RecorreOrdenadores(db,sqlstr);
- break;
- default: // Se trata de un conjunto aleatorio de ordenadores
- sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idordenador IN (%s)",restrambito);
- RecorreOrdenadores(db,sqlstr);
-
- }
- return (TRUE);
-}
-//________________________________________________________________________________________________________
-
-BOOLEAN RecorreCentro(Database db, char* sqlstr)
-{
- char msglog[LONSTD];
- Table tbl;
- int idcentro;
- char modulo[] = "RecorreCentro()";
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.ISEOF()){
- if(!tbl.Get("idcentro",idcentro)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE idcentro=%d AND grupoid=0 AND tipo=%d",idcentro,AMBITO_GRUPOSAULAS);
- RecorreGruposAulas(db,sqlstr);
- sprintf(sqlstr,"SELECT idaula FROM aulas WHERE idcentro=%d AND grupoid=0",idcentro);
- RecorreAulas(db,sqlstr);
- }
- return (TRUE);
-}
-//________________________________________________________________________________________________________
-
-BOOLEAN RecorreGruposAulas(Database db, char* sqlstr)
-{
- char msglog[LONSTD];
- Table tbl;
- int idgrupo;
- char modulo[] = "RecorreGruposAulas()";
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- while(!tbl.ISEOF()){
- if(!tbl.Get("idgrupo",idgrupo)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE grupoid=%d AND tipo=%d",idgrupo,AMBITO_GRUPOSAULAS);
- RecorreGruposAulas(db,sqlstr);
- sprintf(sqlstr,"SELECT idaula FROM aulas WHERE grupoid=%d",idgrupo);
- RecorreAulas(db,sqlstr);
- tbl.MoveNext();
- }
- return (TRUE);
-}
-//________________________________________________________________________________________________________
-
-BOOLEAN RecorreAulas(Database db, char* sqlstr)
-{
- char msglog[LONSTD];
- Table tbl;
- int idaula;
- char modulo[] = "RecorreAulas()";
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- while(!tbl.ISEOF()){
- if(!tbl.Get("idaula",idaula)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE idaula=%d AND grupoid=0",idaula);
- RecorreGruposOrdenadores(db,sqlstr);
- sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idaula=%d AND grupoid=0",idaula);
- RecorreOrdenadores(db,sqlstr);
- tbl.MoveNext();
- }
- return (TRUE);
-}
-//________________________________________________________________________________________________________
-
-BOOLEAN RecorreGruposOrdenadores(Database db, char* sqlstr)
-{
- char msglog[LONSTD];
- Table tbl;
- int idgrupo;
- char modulo[] = "RecorreGruposOrdenadores()";
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- while(!tbl.ISEOF()){
- if(!tbl.Get("idgrupo",idgrupo)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE grupoid=%d",idgrupo);
- RecorreGruposOrdenadores(db,sqlstr);
- sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE grupoid=%d",idgrupo);
- RecorreOrdenadores(db,sqlstr);
- tbl.MoveNext();
- }
- return (TRUE);
-}
-//________________________________________________________________________________________________________
-
-BOOLEAN RecorreOrdenadores(Database db, char* sqlstr)
-{
- char msglog[LONSTD];
- Table tbl;
- int idordenador,o,p,m,lon;
- char ido[16],ip[LONIP],mac[LONMAC];
- char modulo[] = "RecorreOrdenadores()";
-
- if (!db.Execute(sqlstr, tbl)) { // Error al leer
- errorLog(modulo, 21, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- o=p=m=0;
- while(!tbl.ISEOF()){
- if(!tbl.Get("idordenador",idordenador)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("ip",ip)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- if(!tbl.Get("mac",mac)){
- tbl.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- return (FALSE);
- }
- sprintf(ido,"%d",idordenador);
- lon=strlen(ido);
- if(lon>16) lon=16;
- cadenaid=(char*) ampliaMemoria(cadenaid,o+lon+1);
- memcpy(&cadenaid[o],ido,lon);
- o+=lon;
- cadenaid[o++]=',';
-
- lon=strlen(ip);
- if(lon>16) lon=LONIP;
- cadenaip=(char*) ampliaMemoria(cadenaip,p+lon+1);
- memcpy(&cadenaip[p],ip,lon);
- p+=lon;
- cadenaip[p++]=';';
-
- lon=strlen(mac);
- if(lon>16) lon=LONMAC;
- cadenamac=(char*) ampliaMemoria(cadenamac,m+lon+1);
- memcpy(&cadenamac[m],mac,lon);
- m+=lon;
- cadenamac[m++]=';';
-
- concli++;
- tbl.MoveNext();
- }
- if(o>0) o--;
- if(p>0) p--;
- if(m>0) m--;
- cadenaid[o]='\0';
- cadenaip[p]='\0';
- cadenamac[m]='\0';
-
- return (TRUE);
-}
-// ********************************************************************************************************
-// PROGRAMA PRINCIPAL (SERVICIO)
-// ********************************************************************************************************
-int main(int argc, char *argv[])
-{
- int pseg;
- char msglog[LONSTD];
- struct tm* st;
- Database db;
- char modulo[] = "main()";
-
- /* Validación de parámetros de ejecución y lectura del fichero de configuración del servicio */
-
- if (!validacionParametros(argc, argv, 5)) // Valida parámetros de ejecución
- exit(EXIT_FAILURE);
-
- if (!tomaConfiguracion(szPathFileCfg)) { // Toma parametros de configuracion
- exit(EXIT_FAILURE);
- }
-
- /* Bucle principal del servicio */
-
- while (TRUE){
- st = tomaHora();
- pseg=65-st->tm_sec; // Calcula segundos de inactividad de la hebra
- sleep(pseg);
-
- // Toma la hora
- st = tomaHora();
-
- if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion
- errorLog(modulo, 20, FALSE);
- db.GetErrorErrStr(msglog);
- errorInfo(modulo, msglog);
- exit(EXIT_FAILURE);
- }
- buscaAccion(db,st->tm_mday,st->tm_mon+1,st->tm_year+1900,st->tm_hour,st->tm_min,st->tm_wday );
- db.Close(); // Cierra conexión
- }
- exit(EXIT_SUCCESS);
-}
-
-
+// ******************************************************************************************************** +// Servicio: ogAdmAgent +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: Marzo-2010 +// Fecha Última modificación: Marzo-2010 +// Nombre del fichero: ogAdmAgent.cpp +// Descripción: Este fichero implementa el servicio agente del sistema. Revisa a intervalos +// regulares la base de datos para comprobar si existen acciones programadas. +// ******************************************************************************************************** +#include "ogAdmAgent.h" +#include "ogAdmLib.c" +//________________________________________________________________________________________________________ +// Función: tomaConfiguracion +// +// Descripción: +// Lee el fichero de configuración del servicio +// Parámetros: +// filecfg : Ruta completa al fichero de configuración +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +//________________________________________________________________________________________________________ +BOOLEAN tomaConfiguracion(char* filecfg) +{ + char modulo[] = "tomaConfiguracion()"; + + if (filecfg == NULL || strlen(filecfg) == 0) { + errorLog(modulo, 1, FALSE); // Fichero de configuración del servicio vacío + return (FALSE); + } + FILE *fcfg; + long lSize; + char * buffer, *lineas[MAXPRM], *dualparametro[2]; + int i, numlin, resul; + + fcfg = fopen(filecfg, "rt"); + if (fcfg == NULL) { + errorLog(modulo, 2, FALSE); // No existe fichero de configuración del servicio + return (FALSE); + } + + fseek(fcfg, 0, SEEK_END); + lSize = ftell(fcfg); // Obtiene tamaño del fichero. + rewind(fcfg); + buffer = (char*) reservaMemoria(lSize + 1); // Toma memoria para el buffer de lectura. + if (buffer == NULL) { // No hay memoria suficiente para el buffer + errorLog(modulo, 3, FALSE); + return (FALSE); + } + fread(buffer, 1, lSize, fcfg); // Lee contenido del fichero + buffer[lSize] = (char) NULL; + fclose(fcfg); + + servidoradm[0] = (char) NULL; //inicializar variables globales + puerto[0] = (char) NULL; + usuario[0] = (char) NULL; + pasguor[0] = (char) NULL; + datasource[0] = (char) NULL; + catalog[0] = (char) NULL; + + numlin = splitCadena(lineas, buffer, '\n'); + for (i = 0; i < numlin; i++) { + splitCadena(dualparametro, lineas[i], '='); + resul = strcmp(StrToUpper(dualparametro[0]), "SERVIDORADM"); + if (resul == 0) + strcpy(servidoradm, dualparametro[1]); + resul = strcmp(StrToUpper(dualparametro[0]), "PUERTO"); + if (resul == 0) + strcpy(puerto, dualparametro[1]); + resul = strcmp(StrToUpper(dualparametro[0]), "USUARIO"); + if (resul == 0) + strcpy(usuario, dualparametro[1]); + resul = strcmp(StrToUpper(dualparametro[0]), "PASSWORD"); + if (resul == 0) + strcpy(pasguor, dualparametro[1]); + resul = strcmp(StrToUpper(dualparametro[0]), "DATASOURCE"); + if (resul == 0) + strcpy(datasource, dualparametro[1]); + resul = strcmp(StrToUpper(dualparametro[0]), "CATALOG"); + if (resul == 0) + strcpy(catalog, dualparametro[1]); + } + if (servidoradm[0] == (char) NULL) { + errorLog(modulo, 4, FALSE); // Falta parámetro SERVIDORADM + return (FALSE); + } + if (puerto[0] == (char) NULL) { + errorLog(modulo, 5, FALSE); // Falta parámetro PUERTO + return (FALSE); + } + if (usuario[0] == (char) NULL) { + errorLog(modulo, 6, FALSE); // Falta parámetro USUARIO + return (FALSE); + } + if (pasguor[0] == (char) NULL) { + errorLog(modulo, 7, FALSE); // Falta parámetro PASSWORD + return (FALSE); + } + if (datasource[0] == (char) NULL) { + errorLog(modulo, 8, FALSE); // Falta parámetro DATASOURCE + return (FALSE); + } + if (catalog[0] == (char) NULL) { + errorLog(modulo, 9, FALSE); // Falta parámetro CATALOG + return (FALSE); + } + return (TRUE); +} +// ________________________________________________________________________________________________________ +// +// Función: diadelaSemana +// +// Descripción: +// Calcula el número del día de la semana que corresponde a una fecha +// Parámetros: +// - dia: Un día +// - mes: Un mes +// - anno: Un año +// Devuelve: +// El número del día de la semana: 1=Lunes, 2=martes ... 6=sábado 7=domingo +// ________________________________________________________________________________________________________ + +int diadelaSemana(WORD dia,WORD mes,WORD anno) +{ + int i,cont,dias_anuales; + int desplazamiento_dias=6; + int orddiasem; + + cont =0; + for (i=1900;i<anno;i++){ + if (bisiesto(i)) dias_anuales=366; else dias_anuales=365; + cont+=dias_anuales; + } + for (i=1;i<mes;i++){ + if (i!=2) + cont+=dias_meses[i]; + else{ + if (bisiesto(anno)) + cont+=29; + else + cont+=28; + } + } + cont+=dia+desplazamiento_dias; + orddiasem=(cont%7); + if(orddiasem==0) orddiasem=7; + return(orddiasem); +} +// ________________________________________________________________________________________________________ +// +// Función: bisiesto +// +// Descripción: +// Calcula si un año es bisiesto o no lo es +// Parámetros: +// - anno: Un año +// Devuelve: +// TRUE si el año es bisiesto +// FALSE si no es bisiesto +// ________________________________________________________________________________________________________ + +BOOLEAN bisiesto(WORD anno){ + return(anno%4==0); +} +// ________________________________________________________________________________________________________ +// +// Función: semanadelMes +// +// Descripción: +// Calcula el número de semana perteneciente a un día del mes +// Parámetros: +// - ordiasem_1: Orden semanal (1,2...) del primer dia del mes que se pasa como parámetro +// - diames: El mes concreto +// Devuelve: +// El número del día de la semana: 1=Lunes, 2=martes ... 6=sábado 7=domingo , de ese mes +// ________________________________________________________________________________________________________ + +int semanadelMes(int ordiasem_1,int diames) +{ + int nwdia,resto,cociente; + + nwdia=diames+ordiasem_1-1; + cociente=nwdia/7; + resto=nwdia%7; + if(resto>0) cociente++; + return(cociente); +} +// ________________________________________________________________________________________________________ +// +// Función: buscaAccion +// +// Descripción: +// Busca en la base de datos, acciones programadas +// Parámetros: +// - db: Objeto base de datos (operativo) +// - dia : Día actual del mes +// - mes : mes en curso +// - anno : Año en curso +// - hora : Hora actual +// - minutos : Minutos actuales +// - diasemana : Dia de la semana 1=lunes,2=martes ... ( 0 Domingo) +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +// ________________________________________________________________________________________________________ + +BOOLEAN buscaAccion(Database db,WORD dia,WORD mes,WORD anno,WORD hora,WORD minutos,WORD diasemana) +{ + char msglog[LONSTD], sqlstr[LONSQL]; + Table tbl; + BYTE swampm,bitsemana; + int ordsem,ordulsem,ordiasem_1,maxdias; + int sesionprog; + char modulo[] = "buscaAccion()"; + + /* Año de comienzo */ + anno=anno-ANNOREF; // + /* Preparación hora */ + if(hora>11){ + hora-=12; + swampm=1; // Es P.M. + } + else + swampm=0; // Es am + /* Preparación semana */ + if(diasemana==0) diasemana=7; // El domingo + + // Cuestión semanas + ordiasem_1=diadelaSemana(1,mes,anno+2009); + ordsem=semanadelMes(ordiasem_1,dia); // Calcula el número de la semana + if (mes!=2) // Toma el último día de ese mes + maxdias=dias_meses[mes]; + else{ + if (bisiesto(anno+ANNOREF)) + maxdias=29; + else + maxdias=28; + } + ordulsem=semanadelMes(ordiasem_1,maxdias); // Calcula el número de la última semana + bitsemana=HEX_semanas[ordsem]; + if(ordsem==ordulsem) // Si es la última semana del mes + bitsemana|=HEX_semanas[6]; + + sprintf(sqlstr,"SELECT DISTINCT idprogramacion,tipoaccion,identificador,sesion,idcentro,"\ + "tareas.descripcion as descritarea"\ + " FROM programaciones"\ + " LEFT OUTER JOIN tareas ON tareas.idtarea=programaciones.identificador"\ + " WHERE suspendida=0 "\ + " AND (annos & %d <> 0) "\ + " AND (meses & %d<>0) "\ + " AND ((diario & %d<>0) OR (dias & %d<>0) OR (semanas & %d<>0))"\ + " AND (horas & %d<>0) AND ampm=%d AND minutos=%d",\ + HEX_annos[anno],\ + HEX_meses[mes],\ + HEX_dias[dia],\ + HEX_diasemana[diasemana],\ + bitsemana,\ + HEX_horas[hora],\ + swampm,minutos); + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(tbl.ISEOF()){ + return(TRUE); // No hay acciones programadas + } + + while(!tbl.ISEOF()){ + if(!tbl.Get("idprogramacion",idprogramacion)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("tipoaccion",tipoaccion)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("identificador",idtipoaccion)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("sesion",sesionprog)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("idcentro",idcentro)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + + if(tipoaccion==EJECUCION_COMANDO){ // Es una programación de un comando + return(ejecutarComando(db,idprogramacion,sesionprog)); + } + else{ + + if(tipoaccion==EJECUCION_TAREA){ + if(!tbl.Get("descritarea",descriaccion)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + return(ejecutarTarea(db,idprogramacion,idtipoaccion)); + } + else{ + if(tipoaccion==EJECUCION_RESERVA){ + EjecutarReserva(idtipoaccion,db); // Es una programación de un trabajo + } + } + } + tbl.MoveNext(); + } + return(TRUE); +} +// ________________________________________________________________________________________________________ +// +// Función: ejecutarComando +// +// Descripción: +// Ejecuta un comando programado +// Parámetros: +// - db: Objeto base de datos (operativo) +// - idcomando: Identificador del comando +// - sesion: Sesión correspondiente al comando cuando se grabó en la tabla acciones +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +// ________________________________________________________________________________________________________ + +BOOLEAN ejecutarComando(Database db,int idprogramacion,int sesion ) +{ + struct tm* st; + char msglog[LONSTD], sqlstr[LONSQL]; + char fechahorareg[24]; + char modulo[] = "ejecutarComando()"; + + st = tomaHora(); + sprintf(fechahorareg,"%d/%d/%d %d:%d:%d", st->tm_year + 1900, st->tm_mon + 1, + st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec); + + sprintf(sqlstr,"UPDATE acciones SET estado=%d,idprogramacion=%d,fechahorareg='%s'"\ + " WHERE sesion=%d", ACCION_INICIADA,idprogramacion,fechahorareg,sesion); + + if (!db.Execute(sqlstr)) { // Error al recuperar los datos + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + return(enviaPeticion(idprogramacion)); +} +// ________________________________________________________________________________________________________ +// +// Función: ejecutarProcedimiento +// +// Descripción: +// Ejecuta un procedimiento programado +// Parámetros: +// - db: Objeto base de datos (operativo) +// - idprocedimiento: Identificador del procedimiento +// - ambito: Ámbito de aplicación +// - idambito: Identificador del ámbito +// - restrambito: cadena con los identificadores de los ordenadores a los que se aplica la acción +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +// ________________________________________________________________________________________________________ + +BOOLEAN ejecutarProcedimiento(Database db,int idprocedimiento,int ambito,int idambito,char* restrambito) +{ + char msglog[LONSTD], sqlstr[LONSQL],*parametros; + Table tbl; + int procedimientoid,idcomando,lonprm; + char modulo[] = "ejecutarProcedimiento()"; + + sprintf(sqlstr,"SELECT idcomando,procedimientoid,parametros,length(parametros) as lonprm"\ + " FROM procedimientos_acciones"\ + " WHERE idprocedimiento=%d ORDER BY orden",idprocedimiento); + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + + if(tbl.ISEOF()){ + return(TRUE); // No exustde tarea + } + while(!tbl.ISEOF()){ + if(!tbl.Get("procedimientoid",procedimientoid)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(procedimientoid>0){ // Procedimiento recursivo + if(!ejecutarProcedimiento(db,procedimientoid,ambito,idambito,restrambito)){ + return(false); + } + } + else{ + if(!tbl.Get("lonprm",lonprm)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + parametros = reservaMemoria(lonprm+1); // Reserva para almacenar los parametros del procedimiento + if (parametros == NULL) { + errorLog(modulo, 3, FALSE); + return (FALSE); + } + if(!tbl.Get("parametros",parametros)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + liberaMemoria(parametros); + return (FALSE); + } + if(!tbl.Get("idcomando",idcomando)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + + if(!insertaComando(db,idcomando,parametros,idprocedimiento,ambito,idambito,restrambito)) { + + liberaMemoria(parametros); + return(false); + } + liberaMemoria(parametros); + } + tbl.MoveNext(); + } + return(TRUE); +} +// ________________________________________________________________________________________________________ +// +// Función: ejecutarTarea +// +// Descripción: +// Ejecuta una tarea programada +// Parámetros: +// - db: Objeto base de datos (operativo) +// - idtarea: Identificador de la tarea +// - idprogramacion: Identificador de la programación +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +// ________________________________________________________________________________________________________ + +BOOLEAN ejecutarTarea(Database db, int idprogramacion, int idtarea) +{ + char msglog[LONSTD], sqlstr[LONSQL]; + Table tbl; + int tareaid,ambito,idambito,idprocedimiento,lonrestrambito; + char* restrambito; + char modulo[] = "ejecutarTarea()"; + + sprintf(sqlstr,"SELECT tareas_acciones.orden,tareas_acciones.idprocedimiento,tareas_acciones.tareaid,"\ + " tareas.ambito,tareas.idambito,tareas.restrambito,length(tareas.restrambito) as lonrestrambito"\ + " FROM tareas"\ + " INNER JOIN tareas_acciones ON tareas_acciones.idtarea=tareas.idtarea"\ + " WHERE tareas_acciones.idtarea=%d ORDER BY tareas_acciones.orden",idtarea); + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + + if(tbl.ISEOF()){ + return(TRUE); // No existe tarea + } + + while(!tbl.ISEOF()){ + if(!tbl.Get("tareaid",tareaid)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(tareaid>0){ // Tarea recursiva + if(!ejecutarTarea(db,idprogramacion,tareaid)){ + return(false); + } + } + else{ + if(!tbl.Get("ambito",ambito)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("idambito",idambito)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("lonrestrambito",lonrestrambito)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + restrambito = reservaMemoria(lonrestrambito+1); + if (restrambito == NULL) { + errorLog(modulo, 3, FALSE); + return (FALSE); + } + if(!tbl.Get("restrambito",restrambito)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + liberaMemoria(restrambito); + return (FALSE); + } + liberaMemoria(restrambito); + RecopilaIpesMacs(db,ambito,idambito,restrambito); // Recopila Ipes del ámbito + if(!tbl.Get("idprocedimiento",idprocedimiento)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sesion=time(NULL); + + if(!ejecutarProcedimiento(db,idprocedimiento,ambito,idambito,restrambito)) + return(FALSE); + } + tbl.MoveNext(); + } + return(enviaPeticion(idprogramacion)); +} +// ________________________________________________________________________________________________________ +// +// Función: ejecutarTarea +// +// Descripción: +// Registra un procedimiento para un ambito concreto +// Parámetros: +// - db: Objeto base de datos (operativo) +// - idcomando: Identificador del comando +// - idprocedimiento: Identificador del procedimiento +// - ambito: Ámbito de aplicación +// - idambito: Identificador del ámbito +// - restrambito: cadena con los identificadores de los ordenadores a los que se aplica la acción +// Devuelve: +// TRUE: Si el proceso es correcto +// FALSE: En caso de ocurrir algún error +//________________________________________________________________________________________________________ +BOOLEAN insertaComando(Database db,int idcomando,char*parametros,int idprocedimiento,int ambito,int idambito,char*restrambito) +{ + char msglog[LONSTD], sqlstr[LONSQL]; + struct tm* st; + char *auxID[MAXIMOS_CLIENTES],*auxIP[MAXIMOS_CLIENTES]; + char fechahorareg[24]; + int i; + char modulo[] = "insertaComando()"; + + if(concli==0) return(TRUE); // No hay ordenadores en el ámbito + + st = tomaHora(); + sprintf(fechahorareg,"%d/%d/%d %d:%d:%d", st->tm_year + 1900, st->tm_mon + 1, st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec); + + splitCadena(auxID,cadenaid,','); + splitCadena(auxIP,cadenaip,';'); + + for (i=0;i<concli;i++){ + sprintf(sqlstr,"INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,"\ + "sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,"\ + "restrambito,idprocedimiento,idcentro,idprogramacion)"\ + " VALUES (%s,%d,%d,'%s','%s',%d,%d,'%s','%s',%d,%d,%d,%d,'%s',%d,%d,%d)",\ + auxID[i],tipoaccion,idtipoaccion,descriaccion,auxIP[i],sesion,idcomando,parametros,fechahorareg,\ + ACCION_INICIADA,ACCION_SINRESULTADO,ambito,idambito,restrambito,idprocedimiento,idcentro,idprogramacion); + if (!db.Execute(sqlstr)) { // Error al recuperar los datos + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + } + return(TRUE); +} +// _____________________________________________________________________________________________________________ +// Función: EjecutarReserva +// +// Descripción: +// Registra una acción (Tarea) y la envía para su ejecución +// Parámetros: +// - idreserva : Identificador de la reserva +// - db: una conexion ADO operativa +// - parametros: Parámetros de la acción +// _____________________________________________________________________________________________________________ +BOOLEAN EjecutarReserva(int idreserva,Database db ) +{ + + + return(true); +} +// _____________________________________________________________________________________________________________ +// Función: enviaPeticion +// +// Descripción: +// Hace una petición al servidor para que actualice los ordenadores implicados en la programación +// Parámetros: +// - idprogramacion: Identificador de la programación +// _____________________________________________________________________________________________________________ +BOOLEAN enviaPeticion(int idprogramacion) +{ + int lon; + TRAMA *ptrTrama; + SOCKET socket_c; + char modulo[] = "enviaPeticion()"; + + /* Envio de comandos a clientes */ + ptrTrama=(TRAMA *)reservaMemoria(sizeof(TRAMA)); + if (ptrTrama == NULL) { // No hay memoria suficiente para el bufer de las tramas + errorLog(modulo, 3, FALSE); + return(FALSE); + } + initParametros(ptrTrama,0); + lon=sprintf(ptrTrama->parametros,"nfn=envioProgramacion\r"); // Nombre de la función a ejecutar en el servidor + lon+=sprintf(ptrTrama->parametros+lon,"idp=%d\r",idprogramacion); // Configuración de los Sistemas Operativos del cliente + + if(!enviaMensaje(&socket_c,ptrTrama,MSG_PETICION)){ + errorLog(modulo,91,FALSE); + liberaMemoria(ptrTrama); + return(FALSE); + } + liberaMemoria(ptrTrama); + return(TRUE); +} +// _____________________________________________________________________________________________________________ +// +// Función: RecopilaIpesMacs +// +// Descripción : +// Recopila las IPes, las Macs y los identificadores de ordenadores de un ámbito determinado +// +// Especificaciones: +// Esta Función recibe tres parámatros: +// db : Un objeto Base de datos totalmente operativo +// ambito: Tipo de ámbito +// idambito: Identificador del ámbito +// Devuelve: +// Todas los identificadores de ordenadores , las ipes y las macs de los ordenadores que componen el ámbito +// Para ellos habrá que tener declarada tres variables globales : +// cadenaid,cadenaip y cadenamac +// _____________________________________________________________________________________________________________ + +BOOLEAN RecopilaIpesMacs(Database db,int ambito,int idambito,char *restrambito) +{ + char sqlstr[LONSQL]; + + concli=0; + /* Reserva memoria al meno para caracter nulo */ + cadenaid=(char*) reservaMemoria(1); + cadenaip=(char*) reservaMemoria(1); + cadenamac=(char*) reservaMemoria(1); + + switch(ambito){ + case AMBITO_CENTROS : + sprintf(sqlstr,"SELECT idcentro FROM centros WHERE idcentro=%d",idambito); + RecorreCentro(db,sqlstr); + break; + case AMBITO_GRUPOSAULAS : + sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE idgrupo=%d AND tipo=%d",idambito,AMBITO_GRUPOSAULAS); + RecorreGruposAulas(db,sqlstr); + break; + case AMBITO_AULAS : + sprintf(sqlstr,"SELECT idaula FROM aulas WHERE idaula=%d",idambito); + RecorreAulas(db,sqlstr); + break; + case AMBITO_GRUPOSORDENADORES : + sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE idgrupo=%d",idambito); + RecorreGruposOrdenadores(db,sqlstr); + break; + case AMBITO_ORDENADORES : + sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idordenador=%d",idambito); + RecorreOrdenadores(db,sqlstr); + break; + default: // Se trata de un conjunto aleatorio de ordenadores + sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idordenador IN (%s)",restrambito); + RecorreOrdenadores(db,sqlstr); + + } + return (TRUE); +} +//________________________________________________________________________________________________________ + +BOOLEAN RecorreCentro(Database db, char* sqlstr) +{ + char msglog[LONSTD]; + Table tbl; + int idcentro; + char modulo[] = "RecorreCentro()"; + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.ISEOF()){ + if(!tbl.Get("idcentro",idcentro)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE idcentro=%d AND grupoid=0 AND tipo=%d",idcentro,AMBITO_GRUPOSAULAS); + RecorreGruposAulas(db,sqlstr); + sprintf(sqlstr,"SELECT idaula FROM aulas WHERE idcentro=%d AND grupoid=0",idcentro); + RecorreAulas(db,sqlstr); + } + return (TRUE); +} +//________________________________________________________________________________________________________ + +BOOLEAN RecorreGruposAulas(Database db, char* sqlstr) +{ + char msglog[LONSTD]; + Table tbl; + int idgrupo; + char modulo[] = "RecorreGruposAulas()"; + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + while(!tbl.ISEOF()){ + if(!tbl.Get("idgrupo",idgrupo)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sprintf(sqlstr,"SELECT idgrupo FROM grupos WHERE grupoid=%d AND tipo=%d",idgrupo,AMBITO_GRUPOSAULAS); + RecorreGruposAulas(db,sqlstr); + sprintf(sqlstr,"SELECT idaula FROM aulas WHERE grupoid=%d",idgrupo); + RecorreAulas(db,sqlstr); + tbl.MoveNext(); + } + return (TRUE); +} +//________________________________________________________________________________________________________ + +BOOLEAN RecorreAulas(Database db, char* sqlstr) +{ + char msglog[LONSTD]; + Table tbl; + int idaula; + char modulo[] = "RecorreAulas()"; + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + while(!tbl.ISEOF()){ + if(!tbl.Get("idaula",idaula)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE idaula=%d AND grupoid=0",idaula); + RecorreGruposOrdenadores(db,sqlstr); + sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE idaula=%d AND grupoid=0",idaula); + RecorreOrdenadores(db,sqlstr); + tbl.MoveNext(); + } + return (TRUE); +} +//________________________________________________________________________________________________________ + +BOOLEAN RecorreGruposOrdenadores(Database db, char* sqlstr) +{ + char msglog[LONSTD]; + Table tbl; + int idgrupo; + char modulo[] = "RecorreGruposOrdenadores()"; + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + while(!tbl.ISEOF()){ + if(!tbl.Get("idgrupo",idgrupo)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sprintf(sqlstr,"SELECT idgrupo FROM gruposordenadores WHERE grupoid=%d",idgrupo); + RecorreGruposOrdenadores(db,sqlstr); + sprintf(sqlstr,"SELECT ip,mac,idordenador FROM ordenadores WHERE grupoid=%d",idgrupo); + RecorreOrdenadores(db,sqlstr); + tbl.MoveNext(); + } + return (TRUE); +} +//________________________________________________________________________________________________________ + +BOOLEAN RecorreOrdenadores(Database db, char* sqlstr) +{ + char msglog[LONSTD]; + Table tbl; + int idordenador,o,p,m,lon; + char ido[16],ip[LONIP],mac[LONMAC]; + char modulo[] = "RecorreOrdenadores()"; + + if (!db.Execute(sqlstr, tbl)) { // Error al leer + errorLog(modulo, 21, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + o=p=m=0; + while(!tbl.ISEOF()){ + if(!tbl.Get("idordenador",idordenador)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("ip",ip)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + if(!tbl.Get("mac",mac)){ + tbl.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + return (FALSE); + } + sprintf(ido,"%d",idordenador); + lon=strlen(ido); + if(lon>16) lon=16; + cadenaid=(char*) ampliaMemoria(cadenaid,o+lon+1); + memcpy(&cadenaid[o],ido,lon); + o+=lon; + cadenaid[o++]=','; + + lon=strlen(ip); + if(lon>16) lon=LONIP; + cadenaip=(char*) ampliaMemoria(cadenaip,p+lon+1); + memcpy(&cadenaip[p],ip,lon); + p+=lon; + cadenaip[p++]=';'; + + lon=strlen(mac); + if(lon>16) lon=LONMAC; + cadenamac=(char*) ampliaMemoria(cadenamac,m+lon+1); + memcpy(&cadenamac[m],mac,lon); + m+=lon; + cadenamac[m++]=';'; + + concli++; + tbl.MoveNext(); + } + if(o>0) o--; + if(p>0) p--; + if(m>0) m--; + cadenaid[o]='\0'; + cadenaip[p]='\0'; + cadenamac[m]='\0'; + + return (TRUE); +} +// ******************************************************************************************************** +// PROGRAMA PRINCIPAL (SERVICIO) +// ******************************************************************************************************** +int main(int argc, char *argv[]) +{ + int pseg; + char msglog[LONSTD]; + struct tm* st; + Database db; + char modulo[] = "main()"; + + /* Validación de parámetros de ejecución y lectura del fichero de configuración del servicio */ + + if (!validacionParametros(argc, argv, 5)) // Valida parámetros de ejecución + exit(EXIT_FAILURE); + + if (!tomaConfiguracion(szPathFileCfg)) { // Toma parametros de configuracion + exit(EXIT_FAILURE); + } + + /* Bucle principal del servicio */ + + while (TRUE){ + st = tomaHora(); + pseg=65-st->tm_sec; // Calcula segundos de inactividad de la hebra + sleep(pseg); + + // Toma la hora + st = tomaHora(); + + if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion + errorLog(modulo, 20, FALSE); + db.GetErrorErrStr(msglog); + errorInfo(modulo, msglog); + exit(EXIT_FAILURE); + } + buscaAccion(db,st->tm_mday,st->tm_mon+1,st->tm_year+1900,st->tm_hour,st->tm_min,st->tm_wday ); + db.Close(); // Cierra conexión + } + exit(EXIT_SUCCESS); +} + + diff --git a/admin/Sources/Services/ogAdmBoot/Makefile b/admin/Sources/Services/ogAdmBoot/Makefile deleted file mode 100644 index 78a7e88d..00000000 --- a/admin/Sources/Services/ogAdmBoot/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# makefile - -# Nombre del proyecto -PROYECTO := ogAdmBoot - -# Directorio de instalación -INSTALL_DIR := /opt/opengnsys - -# Opciones de compilacion -CFLAGS := $(shell mysql_config --cflags) -CFLAGS += -O0 -g -Wall -I../../Includes # Depuracion -#CFLAGS += -O3 -I../../Includes # Optimizacion -CPPFLAGS := $(CFLAGS) - -# Opciones de linkado -LDFLAGS := -Wl,--no-as-needed $(shell mysql_config --libs) -lpthread - -# Ficheros objetos -OBJS := ../includes/Database.o sources/ogAdmBoot.o - - -all: $(PROYECTO) - -$(PROYECTO): $(OBJS) - g++ $(LDFLAGS) $(OBJS) -o $(PROYECTO) -# strip $(PROYECTO) # Optimizacion - -install: $(PROYECTO) - cp $(PROYECTO) $(INSTALL_DIR)/sbin - cp $(PROYECTO).cfg $(INSTALL_DIR)/etc - -clean: - rm -f $(PROYECTO) $(OBJS) - -uninstall: clean - rm -f /usr/local/sbin/$(PROYECTO) /usr/local/etc/$(PROYECTO).cfg - -sources/%.o: sources/%.cpp - g++ $(CPPFLAGS) -I ../includes -c -o"$@" "$<" - -sources/%.o: sources/%.c - gcc $(CFLAGS) -I ../includes -c -o"$@" "$<" - - diff --git a/admin/Sources/Services/ogAdmBoot/ogAdmBoot.cfg b/admin/Sources/Services/ogAdmBoot/ogAdmBoot.cfg deleted file mode 100644 index 5a33b513..00000000 --- a/admin/Sources/Services/ogAdmBoot/ogAdmBoot.cfg +++ /dev/null @@ -1,8 +0,0 @@ -IPLocal=SERVERIP -USUARIO=usuog -PASSWORD=passusuog -datasource=localhost -CATALOG=ogAdmBD -router=10.1.12.1 -mascara=255.255.252.0 - diff --git a/admin/Sources/Services/ogAdmBoot/sources/ogAdmBoot.cpp b/admin/Sources/Services/ogAdmBoot/sources/ogAdmBoot.cpp deleted file mode 100644 index 03468d5b..00000000 --- a/admin/Sources/Services/ogAdmBoot/sources/ogAdmBoot.cpp +++ /dev/null @@ -1,1264 +0,0 @@ -// ******************************************************************************************************** -// Servicio: ogAdmBoot -// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla -// Fecha Creación: Julio-2010 -// Fecha Última modificación: Julio-2010 -// Nombre del fichero: ogAdmBoot.cpp -// Descripción :Este fichero implementa el servicio dhcp y tftp propios del sistema -// ******************************************************************************************************** -#include "ogAdmBoot.h" -#include "ogAdmLib.c" -//________________________________________________________________________________________________________ -// Función: tomaConfiguracion -// -// Descripción: -// Lee el fichero de configuración del servicio -// Parámetros: -// filecfg : Ruta completa al fichero de configuración -// Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error -//________________________________________________________________________________________________________ -BOOLEAN tomaConfiguracion(char* filecfg) -{ - char modulo[] = "tomaConfiguracion()"; - - if (filecfg == NULL || strlen(filecfg) == 0) { - errorLog(modulo, 1, FALSE); // Fichero de configuración del servicio vacío - return (FALSE); - } - FILE *fcfg; - long lSize; - char * buffer, *lineas[MAXPRM], *dualparametro[2]; - int i, numlin, resul; - - fcfg = fopen(filecfg, "rt"); - if (fcfg == NULL) { - errorLog(modulo, 2, FALSE); // No existe fichero de configuración del servicio - return (FALSE); - } - - fseek(fcfg, 0, SEEK_END); - lSize = ftell(fcfg); // Obtiene tamaño del fichero. - rewind(fcfg); - buffer = (char*) reservaMemoria(lSize+1); // Toma memoria para el buffer de lectura. - if (buffer == NULL) { // No hay memoria suficiente para el buffer - errorLog(modulo, 3, FALSE); - return (FALSE); - } - fread(buffer, 1, lSize, fcfg); // Lee contenido del fichero - buffer[lSize]=(char) NULL; - fclose(fcfg); - - IPlocal[0] = (char) NULL; //inicializar variables globales - usuario[0] = (char) NULL; - pasguor[0] = (char) NULL; - datasource[0] = (char) NULL; - catalog[0] = (char) NULL; - router[0] = (char) NULL; - mascara[0] = (char) NULL; - - numlin = splitCadena(lineas, buffer, '\n'); - for (i = 0; i < numlin; i++) { - splitCadena(dualparametro, lineas[i], '='); - resul = strcmp(StrToUpper(dualparametro[0]), "IPLOCAL"); - if (resul == 0) - strcpy(IPlocal, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "USUARIO"); - if (resul == 0) - strcpy(usuario, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "PASSWORD"); - if (resul == 0) - strcpy(pasguor, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "DATASOURCE"); - if (resul == 0) - strcpy(datasource, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "CATALOG"); - if (resul == 0) - strcpy(catalog, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "ROUTER"); - if (resul == 0) - strcpy(router, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "MASCARA"); - if (resul == 0) - strcpy(mascara, dualparametro[1]); - } - if (IPlocal[0] == (char) NULL) { - errorLog(modulo, 4, FALSE); // Falta parámetro IPLOCAL - return (FALSE); - } - if (usuario[0] == (char) NULL) { - errorLog(modulo, 6, FALSE); // Falta parámetro USUARIO - return (FALSE); - } - if (pasguor[0] == (char) NULL) { - errorLog(modulo, 7, FALSE); // Falta parámetro PASSWORD - return (FALSE); - } - if (datasource[0] == (char) NULL) { - errorLog(modulo, 8, FALSE); // Falta parámetro DATASOURCE - return (FALSE); - } - if (catalog[0] == (char) NULL) { - errorLog(modulo, 9, FALSE); // Falta parámetro CATALOG - return (FALSE); - } - return (TRUE); -} -// _____________________________________________________________________________________________________________ -// Función: ServicioDHCP -// -// Descripción: -// Esta hebra implementa el servicio DHCP -// _____________________________________________________________________________________________________________ - -LPVOID ServicioDHCP(LPVOID ipl) -{ - SOCKET socket_s; // Socket donde escucha el servidor - struct TramaDhcpBootp * trmInfo; - struct sockaddr_in local; - int ret,resul; - BOOLEAN bOpt; - pthread_t hThread; - char modulo[]="ServicioDHCP()"; - - socket_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // Crea socket para UDP - if (socket_s == SOCKET_ERROR){ - errorLog(modulo,61, TRUE); - return(FALSE); - } - local.sin_addr.s_addr = htonl(INADDR_ANY); // selecciona interface - local.sin_family = AF_INET; - local.sin_port = htons(PUERTODHCPORIGEN); // Puerto - - // Enlaza socket - if (bind(socket_s,(struct sockaddr *)&local,sizeof(local)) == SOCKET_ERROR){ - errorLog(modulo,62, TRUE); - return(FALSE); - } - - bOpt=TRUE; // Pone el socket en modo "soportar Broadcast" - ret=setsockopt(socket_s,SOL_SOCKET,SO_BROADCAST,(char *)&bOpt,sizeof(bOpt)); - if (ret == SOCKET_ERROR){ - errorLog(modulo,48, TRUE); - return(FALSE); - } - while(true){ - trmInfo = (struct TramaDhcpBootp*)malloc(sizeof(struct TramaDhcpBootp)); // Crea estructura de control para hebra - if (trmInfo == NULL){ - errorLog(modulo,64, FALSE); - return(FALSE); - } - // Inicializa parámetros - memset(trmInfo,0,sizeof(struct TramaDhcpBootp)); - trmInfo->sockaddrsize = sizeof(trmInfo->cliente); - trmInfo->sck=socket_s; - // Espera tramas DHCP - ret = recvfrom(trmInfo->sck,(char *)&trmInfo->pckDchp, sizeof(trmInfo->pckDchp),0,(struct sockaddr *)&trmInfo->cliente, &trmInfo->sockaddrsize); - if (ret == SOCKET_ERROR){ - errorLog(modulo,65, TRUE); - return(FALSE); - } - else{ - if (ret>0){ - resul=pthread_create(&hThread,NULL,GestionaServicioDHCP,(LPVOID)trmInfo); - if(resul!=0){ - errorLog(modulo,66,TRUE); - return(FALSE); - } - pthread_detach(hThread); - } - } - } - close(socket_s); -} -// _____________________________________________________________________________________________________________ -// Función: ServicioBOOTP -// -// Descripción: -// Esta hebra implementa el servicio BOOTP -// _____________________________________________________________________________________________________________ - -LPVOID ServicioBOOTP(LPVOID iplocal) -{ - SOCKET socket_s; // Socket donde escucha el servidor - struct TramaDhcpBootp * trmInfo; - struct sockaddr_in local; - int ret,resul; - pthread_t hThread; - char modulo[]="ServicioBOOTP()"; - - socket_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // Crea socket para UDP - if (socket_s == SOCKET_ERROR){ - errorLog(modulo,67, TRUE); - return(FALSE); - } - local.sin_addr.s_addr = htonl(INADDR_ANY); // selecciona interface - local.sin_family = AF_INET; - local.sin_port = htons(PUERTOBOOTPORIGEN); // Puerto - - // Enlaza socket - if (bind(socket_s,(struct sockaddr *)&local,sizeof(local)) == SOCKET_ERROR){ - errorLog(modulo,68, TRUE); - return(FALSE); - } - while(true){ - trmInfo = (struct TramaDhcpBootp*)malloc(sizeof(struct TramaDhcpBootp)); // Crea estructura de control para hebra - if (trmInfo == NULL){ - errorLog(modulo,69, FALSE); - return(FALSE); - } - // Inicializa parámetros - memset(trmInfo,0,sizeof(struct TramaDhcpBootp)); - trmInfo->sockaddrsize = sizeof(trmInfo->cliente); - trmInfo->sck=socket_s; - // Espera tramas BOOTP - ret = recvfrom(trmInfo->sck,(char *)&trmInfo->pckDchp, sizeof(trmInfo->pckDchp),0,(struct sockaddr *)&trmInfo->cliente, &trmInfo->sockaddrsize); - - if (ret == SOCKET_ERROR){ - errorLog(modulo,70, TRUE); - return(FALSE); - } - else{ - if (ret>0){ - resul=pthread_create(&hThread,NULL,GestionaServicioBOOTP,(LPVOID)trmInfo); - if(resul!=0){ - errorLog(modulo,71, TRUE); - return(FALSE); - } - pthread_detach(hThread); - } - } - } - close(socket_s); -} -// _____________________________________________________________________________________________________________ -// Función: ServicioTFTP -// -// Descripción: -// Esta hebra implementa el servicio TFTP -// _____________________________________________________________________________________________________________ - -LPVOID ServicioTFTP(LPVOID ipl) -{ - SOCKET socket_s; // Socket donde escucha el servidor - struct TramaTftp * trmInfo; - struct sockaddr_in local; - pthread_t hThread; - int ret,resul; - char modulo[]="ServicioTFTP()"; - - socket_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // Crea socket para UDP - if (socket_s == SOCKET_ERROR){ - errorLog(modulo,72, TRUE); - return(FALSE); - } - local.sin_addr.s_addr = htonl(INADDR_ANY); // selecciona interface - local.sin_family = AF_INET; - local.sin_port = htons(PUERTOTFTPORIGEN); // Puerto - - // Enlaza socket - if (bind(socket_s,(struct sockaddr *)&local,sizeof(local)) == SOCKET_ERROR){ - errorLog(modulo,73, TRUE); - return(FALSE); - } - while(true){ - trmInfo = (struct TramaTftp*)malloc(sizeof(struct TramaTftp)); // Crea estructura de control para hebra - if (trmInfo == NULL){ - errorLog(modulo,74, FALSE); - return(FALSE); - } - memset(trmInfo,0,sizeof(struct TramaTftp)); - trmInfo->sockaddrsize = sizeof(trmInfo->cliente); - // Espera tramas TFTP - ret = recvfrom(socket_s,(char *)&trmInfo->pckTftp, sizeof(trmInfo->pckTftp),0,(struct sockaddr *)&trmInfo->cliente,&trmInfo->sockaddrsize); - if (ret == SOCKET_ERROR){ - errorLog(modulo,75, TRUE); - return(FALSE); - } - else{ - if (ret>0){ - resul=pthread_create(&hThread,NULL,GestionaServicioTFTP,(LPVOID)trmInfo); - if(resul!=0){ - errorLog(modulo,76, TRUE); - return(FALSE); - } - pthread_detach(hThread); - } - } - - } - close(socket_s); -} -//________________________________________________________________________________________________________ -// Función: GestionaServicioDHCP -// -// Descripción: -// Gestiona la conexiónn con un cliente que sea Hidra para el servicio DHCP -// Parámetros: -// lpParam: Puntero a la estructura de control para la conversacion DHCP -// Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error -//________________________________________________________________________________________________________ -LPVOID GestionaServicioDHCP(LPVOID lpParam) -{ - struct TramaDhcpBootp * trmInfo=(struct TramaDhcpBootp *)lpParam; - char IPCliente[16]; // Ip del cliente - char MACCliente[16]; // Mac del cliente - - if(!OpcionesPresentes(trmInfo->pckDchp.magiccookie)) // Comprueba que existen opciones en la trama Dhcp - return(false); - strcpy(IPCliente,inet_ntoa(trmInfo->cliente.sin_addr)); - if(strcmp(IPCliente,"0.0.0.0")!=0){ // El cliente tiene una IP concreta distinta de 0.0.0.0 - if(!ClienteExistente(trmInfo,IPCliente,1)){ // Comprueba que se trata de un cliente Hidra - free(trmInfo); - return(false); - } - } - else{ - sprintf(MACCliente,"%02.2x%02.2x%02.2x%02.2x%02.2x%02.2x",(unsigned int)trmInfo->pckDchp.chaddr[0],(unsigned int)trmInfo->pckDchp.chaddr[1],(unsigned int)trmInfo->pckDchp.chaddr[2],(unsigned int)trmInfo->pckDchp.chaddr[3],(unsigned int)trmInfo->pckDchp.chaddr[4],(unsigned int)trmInfo->pckDchp.chaddr[5]); - if(!ClienteExistente(trmInfo,MACCliente,0)){ // Comprueba que se trata de un cliente Hidra (Por la Mac) - free(trmInfo); - return(false); - } - } - if(OpcionPXEClient(&trmInfo->pckDchp)) // Comprueba que sea un cliente PXE - ProcesaTramaClientePXE(trmInfo); // Procesa DHCP para el protocolo PXE - else - ProcesaTramaClienteDHCP(trmInfo); // Procesa DHCP de cliente Windows o Linux - - free(trmInfo); - return(false); -} -//_______________________________________________________________________________________________________________ -// -// Gestiona la conexion con un cliente que sea Hidra para el servicio BOOTP -// Parámetros: -// lpParam: Puntero a la estructura de control para la conversacion BOOTP -//_______________________________________________________________________________________________________________ -LPVOID GestionaServicioBOOTP(LPVOID lpParam) -{ - struct TramaDhcpBootp * trmInfo=(struct TramaDhcpBootp *)lpParam; - char IPCliente[16]; // Ip del cliente - - if(!OpcionesPresentes(trmInfo->pckDchp.magiccookie)) // Comprueba que existen opciones en la trama Dhcp - return(false); - - strcpy(IPCliente,inet_ntoa(trmInfo->cliente.sin_addr)); - if(!ClienteExistente(trmInfo,IPCliente,1)) // Comprueba que se trata de un cliente Hidra - return(false); - - if(OpcionPXEClient(&trmInfo->pckDchp)) // Comprueba que sea un cliente PXE - ProcesaTramaClienteBOOTP(trmInfo); // Procesa DHCP para el protocolo PXE - - free(trmInfo); - return(trmInfo); -} -//_______________________________________________________________________________________________________________ -// -// Comprueba si la IP del cliente está en la base de datos de Hidra -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin DHCP -// ipmac: IP o MAC del cliente que ha abierto la hebra -// sw: Si vale 1 o 2 o 3 el parámetro anterior ser una IP en caso contrario ser una MAC -// -// Devuelve: -// true: Si el cliente est en la base de datos -// false: En caso contrario -// -// Comentarios: -// Slo se procesarn mensages dhcp de clientes hidra. -//_______________________________________________________________________________________________________________ -int ClienteExistente(struct TramaDhcpBootp *trmInfo,char* ipmac,int sw) -{ - char sqlstr[1000],ErrStr[200]; - Database db; - Table tbl; - char wrouter[LONPRM]; - char wmascara[LONPRM]; - ///////////////////////////////////////////////////////////////////////// - // ACCESO atnico A TRAVEZ DE OBJETO MUTEX a este trozo de cnigo - pthread_mutex_lock(&guardia); - - // Abre conexion con base de datos - if(!db.Open(usuario,pasguor,datasource,catalog)){ // error de conexion - db.GetErrorErrStr(ErrStr); - return(false); - } - - if(sw==1 || sw==2){ // Bsqueda por IP - sprintf(sqlstr,"SELECT ip,router,mascara FROM ordenadores WHERE ip='%s' ",ipmac); - } - else{ // Bsqueda por MAC - sprintf(sqlstr,"SELECT ip,router,mascara FROM ordenadores WHERE mac='%s' ",ipmac); - } - if(!db.Execute(sqlstr,tbl)){ // Error al leer - db.GetErrorErrStr(ErrStr); - db.Close(); - pthread_mutex_unlock(&guardia); - return(false); - } - - if(tbl.ISEOF()){ // No existe el cliente - db.Close(); - pthread_mutex_unlock(&guardia); - return(false); - } - if(sw==1 || sw==0){ // Sólo para las tramas dhcp PXE y BOOTP - if(!tbl.Get("ip",trmInfo->bdIP)){ // Incorpora la IP a asignar al cliente a la estructura de control - tbl.GetErrorErrStr(ErrStr); // error al acceder al registro - db.Close(); - pthread_mutex_unlock(&guardia); - return(false); - } - if(!tbl.Get("router",wrouter)){ // Toma la configuración router del cliente - tbl.GetErrorErrStr(ErrStr); // error al acceder al registro - db.Close(); - pthread_mutex_unlock(&guardia); - return(false); - } - if(strlen(wrouter)>0) - strcpy(oProuter,wrouter); - else - strcpy(oProuter,router); - - if(!tbl.Get("mascara",wmascara)){ // Toma la configuración router del cliente - tbl.GetErrorErrStr(ErrStr); // error al acceder al registro - db.Close(); - pthread_mutex_unlock(&guardia); - return(false); - } - if(strlen(wmascara)>0) - strcpy(oPmascara,wmascara); - else - strcpy(oPmascara,mascara); - } - db.Close(); - pthread_mutex_unlock(&guardia); - //////////////////////////////////////////////////////////////////////////////// - return(true); -} -//_______________________________________________________________________________________________________________ -// -// Comprueba que existen opciones en el mensage dhcp analizando la magic cookie -// Parámetros: -// mc: Puntero al primer elemento de la magic cookie (primer campo de las opciones) -// -// Devuelve: -// true: Si esta presenta el valor 99..130.83.99 -// false: En caso contrario -//_______________________________________________________________________________________________________________ -int OpcionesPresentes(unsigned char *mc) -{ - if(mc[0]!=0x63) return(false); - if(mc[1]!=0x82) return(false); - if(mc[2]!=0x53) return(false); - if(mc[3]!=0x63) return(false); - - // Magic Cookie presente - return(true); -} -//_______________________________________________________________________________________________________________ -// -// Busca una determinada opción dentro de la trama dhcp -// Parámetros: -// dhcp_packet: Puntero a la estructura que contiene el mensaje dhcp -// codop: Cdigo de la opción a buscar -// -// Devuelve: -// Si existe, un puntero al primer elemento de la estructura de la opción (codigo,longitud,valor) -// en caso contrario devuelve null -//_______________________________________________________________________________________________________________ -unsigned char * BuscaOpcion(dhcp_packet* tDhcp,unsigned char codop) -{ - unsigned char wcodop; - unsigned char wlongitud; - unsigned char *ptrOp,*ptrDhcp; - - ptrDhcp=(unsigned char*)tDhcp; // Se toma el puntero al principio del mensage - ptrOp=(unsigned char*)&tDhcp->options[0]; // Se toma el puntero a las opciones - - while(ptrOp-ptrDhcp<DHCP_OPTION_LEN-4){ - wcodop = ptrOp[0]; - if(wcodop==DHCP_PAD) - ptrOp++; - else{ - if(wcodop==DHCP_END) // Fin de la cadena de opciones, no se encontr la opción - return(NULL); - else{ - - if (wcodop == codop) // Encuentra la opción - return(ptrOp); // Devuelve el puntero a la estructura variable opción - else{ - wlongitud = ptrOp[1]; - ptrOp+=wlongitud+2; // Avanza hasta la prxima opción - } - } - } - } - return(NULL); -} -//_______________________________________________________________________________________________________________ -// -// Comprueba si el mensaje recibido proviene de un cliente PXE -// Parámetros: -// dhcp_packet: Puntero a la estructura que contiene el mensaje dhcp -// -// Devuelve: -// true: Si el mensaje lo ha enviado un cliente PXE -// false: En caso contrario -//_______________________________________________________________________________________________________________ -int OpcionPXEClient(dhcp_packet* tDhcp) -{ - if(!BuscaOpcion(tDhcp,DHCP_CLASS_IDENTIFIER)) - return(false); - else - return(true); -} -//_______________________________________________________________________________________________________________ -// -// Procesa un mensaje DHCP recibido que proviene de un cliente PXE -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin DHCP -//_______________________________________________________________________________________________________________ -void ProcesaTramaClientePXE(struct TramaDhcpBootp* trmInfo) -{ - unsigned char codop; - unsigned char longitud; - unsigned char *ptrOp; - unsigned char *msgDhcp; - char modulo[]="ProcesaTramaClientePXE()"; - - ptrOp=BuscaOpcion(&trmInfo->pckDchp,DHCP_MESSAGE_TYPE); // Puntero a la opción tipo de mensaje - if(!ptrOp){ // No existe la opción DHCP - errorLog(modulo,77, FALSE); - return; - } - codop = ptrOp[0]; - longitud=ptrOp[1]; - msgDhcp=ptrOp+2; // Puntero al dato tipo de mensaje - switch(*msgDhcp){ - case DHCPDISCOVER: - dhcpDISCOVER_PXE(trmInfo); - break; - case DHCPREQUEST: - dhcpREQUEST_PXE(trmInfo); - break; - } -} -//_______________________________________________________________________________________________________________ -// -// Procesa un mensaje BOOTP recibido que proviene de un cliente PXE -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin BOOTP -//_______________________________________________________________________________________________________________ -void ProcesaTramaClienteBOOTP(struct TramaDhcpBootp* trmInfo) -{ - unsigned char codop; - unsigned char longitud; - unsigned char *ptrOp; - unsigned char *msgDhcp; - char modulo[]="ProcesaTramaClienteBOOTP()"; - - ptrOp=BuscaOpcion(&trmInfo->pckDchp,DHCP_MESSAGE_TYPE); // Puntero a la opción tipo de mensaje - if(!ptrOp){ // No existe la opción DHCP - errorLog(modulo,77, FALSE); - return; - } - codop = ptrOp[0]; - longitud=ptrOp[1]; - msgDhcp=ptrOp+2; // Puntero al dato tipo de mensaje - switch(*msgDhcp){ - case DHCPREQUEST: - bootpREQUEST_PXE(trmInfo); - break; - } -} -//_______________________________________________________________________________________________________________ -// -// Gestiona la conexion con un cliente que sea Hidra para el servicio TFTP -// Parámetros: -// lpParam: Puntero a la estructura de control para la conversacion TFTP -//_______________________________________________________________________________________________________________ -LPVOID GestionaServicioTFTP(LPVOID lpParam) -{ - struct TramaTftp * trmInfo=(struct TramaTftp *)lpParam; - char IPCliente[16]; // Ip del cliente - - strcpy(IPCliente,inet_ntoa(trmInfo->cliente.sin_addr)); - if(!ClienteExistente((struct TramaDhcpBootp*)trmInfo,IPCliente,2)) // Comprueba que se trata de un cliente Hidra - return(false); - - // Inicializa parámetros - trmInfo->sockaddrsize = sizeof(trmInfo->cliente); - trmInfo->sck=TomaSocketUser(); - if(trmInfo->sck==INVALID_SOCKET) return(false); // Ha habido algn problama para crear el socket de usuario - - trmInfo->currentopCode=0x0000; // Cdigo de operación para detectar errores de secuencia - trmInfo->bloquesize=512; // Tamao de bloque por defecto 512 - trmInfo->tsize=0; // Tamao del fichero - trmInfo->interval=0; // Intervalo - - ProcesaTramaClienteTFTP(trmInfo); // Procesa TFTP para el protocolo PXE - close(trmInfo->sck); - free(trmInfo); - return(trmInfo); -} -//_______________________________________________________________________________________________________________ -// -// Procesa un mensaje TFTP recibido que proviene de un cliente PXE -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin TFTP -//_______________________________________________________________________________________________________________ -void ProcesaTramaClienteTFTP(struct TramaTftp* trmInfo) -{ - char *ptr; - int bloque,lon,ret; - char tam[20]; - struct tftppacket_ack* ptrack; - char modulo[]="ProcesaTramaClienteTFTP()"; - - while(true){ - switch(ntohs(trmInfo->pckTftp.opcode)){ - case TFTPRRQ: // Read Request - if(trmInfo->currentopCode!=0x0000) return; // Error en la secuencia de operaciones - if(!PeticionFichero(trmInfo)) return; - fseek(trmInfo->fileboot,0,SEEK_SET); - trmInfo->pckTftp.opcode= htons(TFTPOACK); - trmInfo->currentopCode=TFTPOACK; - ptr=&trmInfo->pckTftp.buffer[0]; - if(trmInfo->tsize>0){ // opción tsize - strcpy(ptr,"tsize"); - ptr+=strlen(ptr)+1; - //itoa(trmInfo->tsize,tam,10); - sprintf(tam,"%d",trmInfo->tsize); - strcpy(ptr,tam); - ptr+=strlen(ptr)+1; - *ptr=0x00; - } - else{ - if(trmInfo->bloquesize>0){ // opción blksize - strcpy(ptr,"blksize"); - ptr+=strlen(ptr)+1; - //itoa(trmInfo->bloquesize,tam,10); - sprintf(tam,"%d",trmInfo->bloquesize); - strcpy(ptr,tam); - ptr+=strlen(ptr)+1; - *ptr=0x00; - } - else - trmInfo->bloquesize=512; - } - - lon=ptr-(char*)&trmInfo->pckTftp; - //ret=connect(trmInfo->sck,(struct sockaddr*)&trmInfo->cliente,trmInfo->sockaddrsize); - //if (ret == SOCKET_ERROR){ - // RegistraLog("***connect() fallo:",true); - // return; - //} - ret=sendto(trmInfo->sck,(char*)&trmInfo->pckTftp,lon,0,(struct sockaddr*)&trmInfo->cliente,trmInfo->sockaddrsize); - //ret=send(trmInfo->sck,(char*)&trmInfo->pckTftp,lon,0); - if (ret == SOCKET_ERROR){ - errorLog(modulo,26, TRUE); - return; - } - break; - - case TFTPACK: // - if(trmInfo->currentopCode!=TFTPOACK && trmInfo->currentopCode!=TFTPDATA) return; // Error en la secuencia de operaciones - ptrack=(struct tftppacket_ack*)&trmInfo->pckTftp; - bloque=ntohs(ptrack->block); - trmInfo->currentopCode=TFTPDATA; - ptrack->opcode=htons(TFTPDATA); - bloque++; - ptrack->block=htons(bloque); - trmInfo->numblock=bloque; - lon=fread(ptrack->buffer,1,trmInfo->bloquesize,trmInfo->fileboot); - //ret=connect(trmInfo->sck,(struct sockaddr*)&trmInfo->cliente,trmInfo->sockaddrsize); - //if (ret == SOCKET_ERROR){ - // RegistraLog("***connect() fallo:",true); - // return; - //} - ret=sendto(trmInfo->sck,(char*)&trmInfo->pckTftp,lon+4,0,(struct sockaddr*)&trmInfo->cliente,trmInfo->sockaddrsize); - //ret=send(trmInfo->sck,(char*)&trmInfo->pckTftp,lon+4,0); - if (ret == SOCKET_ERROR){ - errorLog(modulo,26, TRUE); - return; - } - if(lon==0) - return; // Fin de la trama tftp - break; - case TFTPERROR: - errorLog(modulo,78, TRUE); - } - ret = recvfrom(trmInfo->sck,(char *)&trmInfo->pckTftp, sizeof(trmInfo->pckTftp),0,(struct sockaddr *)&trmInfo->cliente,&trmInfo->sockaddrsize); - if (ret == SOCKET_ERROR){ - errorLog(modulo,79, TRUE); - return; - } - else - if(ret==0) break; - } - return; -} -//_______________________________________________________________________________________________________________ -// -// Procesa un mensaje Tftp de peticin de fichero. Recupera datos de tamao de bloque y otros parámetros -// para gestionar la conversacin. -// -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin TFTP -//_______________________________________________________________________________________________________________ -int PeticionFichero(struct TramaTftp* trmInfo) -{ - char *ptr; - char nomfile[250]; - - if(strncmp(trmInfo->pckTftp.buffer,"pxelinux.cfg",12)==0) - strcpy(nomfile,"default"); - else - strcpy(nomfile,trmInfo->pckTftp.buffer); - - trmInfo->currentopCode=ntohs(trmInfo->pckTftp.opcode); // Guarda código de operación - // Localiza parámetros - ptr=&trmInfo->pckTftp.buffer[0]; - ptr+=strlen(ptr)+1; // Avanza al campo siguiente al del nombre de fichero - if(!strcmp(ptr,"octet")){ // Modo de apertura - //trmInfo->fileboot=fopen(trmInfo->pckTftp.buffer,"rb"); - trmInfo->fileboot=fopen(nomfile,"rb"); - } - else{ - //trmInfo->fileboot=fopen(trmInfo->pckTftp.buffer,"rt"); - trmInfo->fileboot=fopen(nomfile,"rt"); - } - if(trmInfo->fileboot==NULL) - return(false); // No existe el fichero boot - ptr+=strlen(ptr)+1; // Paso al parámetro siguiente - while(*ptr){ - if(strcmp(ptr,"blksize")==0){ // parámetro blksize - ptr+=strlen(ptr) + 1; - trmInfo->bloquesize=atoi(ptr); - if(trmInfo->bloquesize<512) trmInfo->bloquesize=512; - if(trmInfo->bloquesize>MAXBLOCK) trmInfo->bloquesize=512; - ptr+=strlen(ptr) + 1; - } - else{ - if(strcmp(ptr,"tsize")==0){ // parámetro tsize - ptr+=strlen(ptr) + 1; - fseek(trmInfo->fileboot,0,SEEK_END); - trmInfo->tsize=ftell(trmInfo->fileboot); - ptr+=strlen(ptr) + 1; - } - else{ - if(strcmp(ptr,"interval")==0){ // Tamao de los bloques - ptr+=strlen(ptr) + 1; - trmInfo->interval=atoi(ptr); - ptr+=strlen(ptr) + 1; - } - else - return(false); - } - - } - } - return(true); -} -//_______________________________________________________________________________________________________________ -// -// Procesa un mensaje recibido que proviene de un cliente Hidra pero no en el momento de arranque con PXE -// sino cuando arranca con algn S.O. como (Windows oLinux) -// -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin DHCP -//_______________________________________________________________________________________________________________ -void ProcesaTramaClienteDHCP(struct TramaDhcpBootp* trmInfo) -{ - unsigned char codop; - unsigned char longitud; - unsigned char *ptrOp; - unsigned char *msgDhcp; - int ret; - char modulo[]="ProcesaTramaClienteDHCP()"; - - while(true){ - ptrOp=BuscaOpcion(&trmInfo->pckDchp,DHCP_MESSAGE_TYPE); // Puntero a la opción tipo de mensaje - if(!ptrOp){ // No existe la opción DHCP - errorLog(modulo,77, FALSE); - return; - } - codop = ptrOp[0]; - longitud=ptrOp[1]; - msgDhcp=ptrOp+2; // Puntero al dato tipo de mensaje - - switch(*msgDhcp){ - case DHCPDISCOVER: - dhcpDISCOVER_PXE(trmInfo); - break; - case DHCPREQUEST: - dhcpREQUEST_PXE(trmInfo); - break; - } - ret = recvfrom(trmInfo->sck,(char *)&trmInfo->pckDchp, sizeof(trmInfo->pckDchp),0,(struct sockaddr *)&trmInfo->cliente,&trmInfo->sockaddrsize); - if (ret == SOCKET_ERROR){ - errorLog(modulo,80, TRUE); - } - else - if(ret==0) break; - } -} -//_______________________________________________________________________________________________________________ -// -// Rellena el campo IP asignada(yiaddr) al cliente dentro del mensaje DHCP -// -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin DHCP -//_______________________________________________________________________________________________________________ -void RellenaIPCLiente(struct TramaDhcpBootp* trmInfo) -{ - unsigned long aux; - - aux=inet_addr(trmInfo->bdIP); // Ip para el cliente - memcpy((void*)&trmInfo->pckDchp.yiaddr,&aux,sizeof(aux)); -} -//_______________________________________________________________________________________________________________ -// -// Rellena el campo IP del servidor(siaddr) dentro del mensaje DHCP -// -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin DHCP -//_______________________________________________________________________________________________________________ -void RellenaIPServidor(struct TramaDhcpBootp* trmInfo) -{ - unsigned long aux; - - aux=inet_addr(IPlocal); // Ip del servidor - memcpy(&trmInfo->pckDchp.siaddr,&aux,sizeof(aux)); -} -//_______________________________________________________________________________________________________________ -// -// Rellena el campo nombre del servidor boot dentro del mensaje BOOTP -// -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin BOOTP -//_______________________________________________________________________________________________________________ -void RellenaNombreServidorBoot(struct TramaDhcpBootp* trmInfo) -{ - char aux[100]; - - strcpy(aux,"Hidra 2.0 PXE Boot Server"); - memcpy(&trmInfo->pckDchp.sname,&aux,25); -} -//_______________________________________________________________________________________________________________ -// -// Rellena el campo nombre del fichero boot dentro del mensaje BOOTP -// -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin BOOTP -//_______________________________________________________________________________________________________________ -void RellenaNombreFicheroBoot(struct TramaDhcpBootp* trmInfo) -{ - char aux[100]; - - strcpy(aux,"pxelinux.0"); - memcpy(&trmInfo->pckDchp.file,&aux,25); -} -//_______________________________________________________________________________________________________________ -// -// Procesa un mensaje DHCPDISCOVER -// -// Parámetros: -// trmInfo: Puntero a la estructura de control de la conversacin DHCP -// -// Devuelve: -// true: Si el mensaje se procesa correctamente -// false: En caso contrario -//_______________________________________________________________________________________________________________ -void dhcpDISCOVER_PXE(struct TramaDhcpBootp* trmInfo) -{ - unsigned char *ptrOp,*ptrDhcp; - int lon,ret; - char modulo[]="dhcpDISCOVER_PXE()"; - - ptrDhcp=(unsigned char*)&trmInfo->pckDchp; // Se toma el puntero al principio del mensage - ptrOp=(unsigned char*)&trmInfo->pckDchp.options[0]; // Se toma el puntero a las opciones - lon=ptrOp-ptrDhcp; //Longitud del mensaje sin las opciones ni la magic coockie - - RellenaIPCLiente(trmInfo); - RellenaIPServidor(trmInfo); - *ptrOp='\0'; //Borra opciones del mensaje recibido para colocar las nuevas - - - AdjDHCPOFFER(&ptrOp,&lon); // Genera opción de Mensaje (0x35) dhcp valor 1 - AdjSERVERIDENTIFIER(&ptrOp,&lon); // Genera opción de Mensaje (0x36) Dhcp - AdjLEASETIME(&ptrOp,&lon); // Genera opción de Mensaje (0x33) Dhcp - AdjSUBNETMASK(&ptrOp,&lon); // Genera opción de Mensaje (0x01) Dhcp - AdjROUTERS(&ptrOp,&lon); // Genera opción de Mensaje (0x03) Dhcp - AdjCLASSIDENTIFIER(&ptrOp,&lon); // Genera opción de Mensaje (0x3c) Dhcp - *ptrOp=DHCP_END; - lon++; - trmInfo->pckDchp.op=DHCPOFFER; - //MandaRespuesta(&trmInfo->pckDchp,htonl(INADDR_BROADCAST),lon,htons(PUERTODHCPDESTINO)); - trmInfo->cliente.sin_addr.s_addr=htonl(INADDR_BROADCAST); - ret=sendto(trmInfo->sck,(char*)&trmInfo->pckDchp,lon,0,(struct sockaddr*)&trmInfo->cliente,trmInfo->sockaddrsize); - if (ret == SOCKET_ERROR){ - errorLog(modulo,26, TRUE); - } -} -//_______________________________________________________________________________________________________________ -// -// Procesa un mensaje DHCPREQUEST (DHCP) -// -// Parámetros: -// trmInfo: Puntero a la estructura de control para la conversacin DHCP -// -// Devuelve: -// true: Si el mensaje se procesa correctamente -// false: En caso contrario -//_______________________________________________________________________________________________________________ -void dhcpREQUEST_PXE(struct TramaDhcpBootp* trmInfo) -{ - unsigned char * ptrOp,*ptrDhcp; - struct dhcp_opcion; - int lon,ret; - char modulo[]="dhcpREQUEST_PXE()"; - - ptrDhcp=(unsigned char*)&trmInfo->pckDchp; // Se toma el puntero al principio del mensage - ptrOp=(unsigned char*)&trmInfo->pckDchp.options[0]; // Se toma el puntero a las opciones - lon=ptrOp-ptrDhcp; //Longitud del mensaje sin las opciones ni la magic coockie - - RellenaIPCLiente(trmInfo); - RellenaIPServidor(trmInfo); - *ptrOp='\0'; //Borra opciones del mensaje recibido para colocar las nuevas - - AdjDHCPACK(&ptrOp,&lon); // Ge db.Close();nera opción de Mensaje (0x35) dhcp valor 5 - AdjSERVERIDENTIFIER(&ptrOp,&lon); // Genera opción de Mensaje (0x36) Dhcp - AdjLEASETIME(&ptrOp,&lon); // Genera opción de Mensaje (0x33) Dhcp - AdjSUBNETMASK(&ptrOp,&lon); // Genera opción de Mensaje (0x01) Dhcp - AdjROUTERS(&ptrOp,&lon); // Genera opción de Mensaje (0x03) Dhcp - AdjCLASSIDENTIFIER(&ptrOp,&lon); // Genera opción de Mensaje (0x3c) Dhcp - - *ptrOp=DHCP_END; - lon++; - - trmInfo->pckDchp.op=DHCPOFFER; - //MandaRespuesta(&trmInfo->pckDchp,htonl(INADDR_BROADCAST),lon,htons(PUERTODHCPDESTINO)); - trmInfo->cliente.sin_addr.s_addr=htonl(INADDR_BROADCAST); - ret=sendto(trmInfo->sck,(char*)&trmInfo->pckDchp,lon,0,(struct sockaddr*)&trmInfo->cliente,trmInfo->sockaddrsize); - if (ret == SOCKET_ERROR){ - errorLog(modulo,26, TRUE); - } -} -//_______________________________________________________________________________________________________________ -// -// Procesa un mensaje DHCPREQUEST (BOOTP) -// -// Parámetros: -// trmInfo: Puntero a la estructura de control para la conversacin BOOTP -// -// Devuelve: -// true: Si el mensaje se procesa correctamente -// false: En caso contrario -//_______________________________________________________________________________________________________________ -void bootpREQUEST_PXE(struct TramaDhcpBootp* trmInfo) -{ - unsigned char * ptrOp,*ptrDhcp; - struct dhcp_opcion; - int lon,ret; - unsigned long aux; - char modulo[]="bootpREQUEST_PXE()"; - - ptrDhcp=(unsigned char*)&trmInfo->pckDchp; // Se toma el puntero al principio del mensage - ptrOp=(unsigned char*)&trmInfo->pckDchp.options[0]; // Se toma el puntero a las opciones - lon=ptrOp-ptrDhcp; //Longitud del mensaje sin las opciones ni la magic coockie - - aux=inet_addr("0.0.0.0"); // Borra Ip del cliente ( No se porqu pero en la trama aparece as) - memcpy(&trmInfo->pckDchp.ciaddr,&aux,4); - RellenaNombreServidorBoot(trmInfo); - RellenaNombreFicheroBoot(trmInfo); - - *ptrOp='\0'; //Borra opciones del mensaje recibido para colocar las nuevas - - AdjDHCPACK(&ptrOp,&lon); // Genera opción de Mensaje (0x35) dhcp valor 5 - AdjSERVERIDENTIFIER(&ptrOp,&lon); // Genera opción de Mensaje (0x36) Dhcp - AdjBOOTSIZE(&ptrOp,&lon); // Genera opción de Mensaje (0x0D) Dhcp - AdjCLASSIDENTIFIER(&ptrOp,&lon); // Genera opción de Mensaje (0x3c) Dhcp - - *ptrOp=DHCP_END; - lon++; - - trmInfo->pckDchp.op=DHCPOFFER; - //ret=connect(trmInfo->sck,(struct sockaddr*)&trmInfo->cliente,trmInfo->sockaddrsize); - //if (ret == SOCKET_ERROR){ - // RegistraLog("***connect() fallo:",true); - // return; - //} - //ret=send(trmInfo->sck,(char*)&trmInfo->pckDchp,lon,0); - ret=sendto(trmInfo->sck,(char*)&trmInfo->pckDchp,lon,0,(struct sockaddr*)&trmInfo->cliente,trmInfo->sockaddrsize); - if (ret == SOCKET_ERROR){ - errorLog(modulo,26,TRUE); - return; - } -} -//_______________________________________________________________________________________________________________ -// -// Genera una opción del tipo 0x35(53) con el valor "Dhcp Offer" valor 2 -// -// Devuelve: -// Una estructura de opciones de dhcp(codigo,longitud,dato) con la opciones de Mensaje dhcp Offer -//_______________________________________________________________________________________________________________ -void AdjDHCPOFFER(unsigned char* *ptrOp,int*lon) -{ - **ptrOp=DHCP_MESSAGE_TYPE; - *ptrOp+=1; - **ptrOp=1; - *ptrOp+=1; - **ptrOp=DHCPOFFER; - *ptrOp+=1; - *lon+=3; -} -//_______________________________________________________________________________________________________________ -// -// Genera una opción del tipo 0x35(53) con el valor "Dhcp Ack" valor 5 -// -// Devuelve: -// Una estructura de opciones de dhcp(codigo,longitud,dato) con la opciones de Mensaje dhcp Ack -//_______________________________________________________________________________________________________________ -void AdjDHCPACK(unsigned char** ptrOp,int*lon) - -{ - **ptrOp=DHCP_MESSAGE_TYPE; - *ptrOp+=1; - **ptrOp=1; - *ptrOp+=1; - **ptrOp=DHCPACK; - *ptrOp+=1; - *lon+=3; -} -//_______________________________________________________________________________________________________________ -// -// Genera una opción del tipo 0x03(3) con la IP del router -// -// Devuelve: -// Una estructura de opciones de dhcp(codigo,longitud,dato) con la opciones de Ip del Routers -//_______________________________________________________________________________________________________________ -void AdjROUTERS(unsigned char** ptrOp,int*lon) -{ - unsigned long aux; - aux=inet_addr(oProuter); // Router - - **ptrOp=DHCP_ROUTERS; - *ptrOp+=1; - **ptrOp=4; - *ptrOp+=1; - memcpy(*ptrOp,&aux,4); // Copia la Ip del router en la estructura - *ptrOp+=4; - *lon+=6; - -} -//_______________________________________________________________________________________________________________ -// -// Genera una opción del tipo 0x01(1) con la mascara de red -// -// Devuelve: -// Una estructura de opciones de dhcp(codigo,longitud,dato) con la opciones de mscara de red -//_______________________________________________________________________________________________________________ -void AdjSUBNETMASK(unsigned char** ptrOp,int*lon) -{ - unsigned long aux; - aux=inet_addr(oPmascara); // Mascara de red - - **ptrOp=DHCP_SUBNET_MASK; - *ptrOp+=1; - **ptrOp=4; - *ptrOp+=1; - memcpy(*ptrOp,&aux,4); // Copia la máscara de red - *ptrOp+=4; - *lon+=6; -} -//_______________________________________________________________________________________________________________ -// -// Genera una opción del tipo 0x3c(60) con el literal "PXECLient" para clientes PXE -// -// Devuelve: -// Una estructura de opciones de dhcp(codigo,longitud,dato) con la opciones de clase de cliente -//_______________________________________________________________________________________________________________ -void AdjCLASSIDENTIFIER(unsigned char** ptrOp,int*lon) -{ - **ptrOp=DHCP_CLASS_IDENTIFIER; - *ptrOp+=1; - **ptrOp=9; - *ptrOp+=1; - memcpy(*ptrOp,"PXEClient",9); // Copia el literal PXClient - *ptrOp+=9; - *lon+=11; -} -//_______________________________________________________________________________________________________________ -// -// Genera una opción del tipo 0x36(54) con la IP del servidor -// -// Devuelve: -// Una estructura de opciones de dhcp(codigo,longitud,dato) con la opciones de Ip del servidor -//_______________________________________________________________________________________________________________ -void AdjSERVERIDENTIFIER(unsigned char** ptrOp,int*lon) -{ - unsigned long aux; - aux=inet_addr(IPlocal); // Ip del servidor - - **ptrOp=DHCP_SERVER_IDENTIFIER; - *ptrOp+=1; - **ptrOp=4; - *ptrOp+=1; - memcpy(*ptrOp,&aux,4); // Copia la Ip del ervidor en la estructura - *ptrOp+=4; - *lon+=6; - -} -//_______________________________________________________________________________________________________________ -// -// Genera una opción del tipo 0x33(51) con el tiempo de "lease" de la IP -// -// Devuelve: -// Una estructura de opciones de dhcp(codigo,longitud,dato) con la opciones del "Lease Time" -//_______________________________________________________________________________________________________________ -void AdjLEASETIME(unsigned char** ptrOp,int*lon) -{ - unsigned long aux; - aux=0x00006054; // tiempo en segundos - - **ptrOp=DHCP_LEASE_TIME; - *ptrOp+=1; - **ptrOp=4; - *ptrOp+=1; - memcpy(*ptrOp,&aux,4); // Copia el lease time en la estructura - *ptrOp+=4; - *lon+=6; -} -//_______________________________________________________________________________________________________________ -// -// Genera una opción del tipo 0x0D(13) con el tiempo tamao del fichero boot -// -// Devuelve: -// Una estructura de opciones de dhcp(codigo,longitud,dato) con la opciones del "Lease Time" -//_______________________________________________________________________________________________________________ -void AdjBOOTSIZE(unsigned char** ptrOp,int*lon) -{ - unsigned short aux; - aux=0x0402; // Tamao en bytes - - **ptrOp=DHCP_BOOT_SIZE; - *ptrOp+=1; - **ptrOp=2; - *ptrOp+=1; - memcpy(*ptrOp,&aux,2); // Copia el tamao en la estructura - *ptrOp+=2; - *lon+=4; -} -//_______________________________________________________________________________________________________________ -// -// Crea un socket en un puerto determinado para la conversacin de las distintas hebras -// -//_______________________________________________________________________________________________________________ -SOCKET TomaSocketUser() -{ - SOCKET socket_c; // Socket para hebras (UDP) - struct sockaddr_in cliente; - int ret,puerto; - BOOLEAN bOpt; - char modulo[]="TomaSocketUser()"; - - socket_c = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // Crea socket para UDP - - if (socket_c == SOCKET_ERROR){ - errorLog(modulo,81,TRUE); - return(false); - } - cliente.sin_addr.s_addr = htonl(INADDR_ANY); // selecciona interface - cliente.sin_family = AF_INET; - puerto=PUERTOMINUSER; - while(puerto<PUERTOMAXUSER){ // Busca puerto libre - cliente.sin_port = htons(puerto); // Puerto asignado - if (bind(socket_c,(struct sockaddr *)&cliente,sizeof(cliente)) == SOCKET_ERROR) - puerto++; - else - break; - } - if(puerto>=PUERTOMAXUSER){ // No hay puertos libres - errorLog(modulo,63, TRUE); - return(INVALID_SOCKET); - } - - bOpt=TRUE; // Pone el socket en modo "soportar Broadcast" - ret=setsockopt(socket_c,SOL_SOCKET,SO_BROADCAST,(char *)&bOpt,sizeof(bOpt)); - if (ret == SOCKET_ERROR){ - errorLog(modulo,48, TRUE); - return(INVALID_SOCKET); - } - return(socket_c); -} -//_______________________________________________________________________________________________________________ -void Pinta(dhcp_packet* tdp) -{ - return; - printf("\nop = %d htype = %d hlen = %d hops = %d",tdp -> op, tdp -> htype, tdp -> hlen, tdp -> hops); - //printf ("\nxid = %x secs = %d flags = %x",tdp -> xid, tdp -> secs, tdp -> flags); - printf ("\nciaddr = %s", inet_ntoa (tdp -> ciaddr)); - printf ("\nyiaddr = %s", inet_ntoa (tdp -> yiaddr)); - printf ("\nsiaddr = %s", inet_ntoa (tdp -> siaddr)); - printf ("\ngiaddr = %s", inet_ntoa (tdp -> giaddr)); - printf ("\nchaddr = %x:%x:%x:%x:%x:%x",((unsigned char *)(tdp -> chaddr)) [0],((unsigned char *)(tdp -> chaddr)) [1],((unsigned char *)(tdp -> chaddr)) [2],((unsigned char *)(tdp -> chaddr)) [3],((unsigned char *)(tdp -> chaddr)) [4],((unsigned char *)(tdp -> chaddr)) [5]); - printf ("\nfilename = %s", tdp -> file); - printf ("\nserver_name = %s", tdp -> sname); - - printf ("\n\n"); -} -//*************************************************************************************************************** -// PROGRAMA PRINCIPAL -//*************************************************************************************************************** -int main(int argc, char **argv) -{ - pthread_t hThreadDHCP,hThreadBOOTP,hThreadTFTP; - int resul; - char modulo[] = "main()"; - - /*-------------------------------------------------------------------------------------------------------- - Validación de parámetros de ejecución y lectura del fichero de configuración del servicio - ---------------------------------------------------------------------------------------------------------*/ - if (!validacionParametros(argc, argv,4)) // Valida parámetros de ejecución - exit(EXIT_FAILURE); - - if (!tomaConfiguracion(szPathFileCfg)) { // Toma parametros de configuracion - exit(EXIT_FAILURE); - } - - infoLog(1); // Inicio de sesión - - // Hebra servicio DHCP --------------------------------- - resul=pthread_create(&hThreadDHCP,NULL,ServicioDHCP,(LPVOID)IPlocal); - if(resul!=0){ - errorLog(modulo, 58, TRUE); - exit(EXIT_FAILURE); - } - pthread_detach(hThreadDHCP); - - - // Hebra servicio BOOTP --------------------------------- - resul=pthread_create(&hThreadBOOTP,NULL,ServicioBOOTP,(LPVOID)IPlocal); - if(resul!=0){ - errorLog(modulo,59,TRUE); - exit(EXIT_FAILURE); - } - pthread_detach(hThreadBOOTP); - - // Hebra servicio TFTP ---------------------------------- - resul=pthread_create(&hThreadTFTP,NULL,ServicioTFTP,(LPVOID)IPlocal); - if(resul!=0){ - errorLog(modulo,60,TRUE); - exit(EXIT_FAILURE); - } - pthread_detach(hThreadTFTP); - - while (true) - sleep(1000); - -} diff --git a/admin/Sources/Services/ogAdmBoot/sources/ogAdmBoot.h b/admin/Sources/Services/ogAdmBoot/sources/ogAdmBoot.h deleted file mode 100644 index ec6db36a..00000000 --- a/admin/Sources/Services/ogAdmBoot/sources/ogAdmBoot.h +++ /dev/null @@ -1,262 +0,0 @@ -// ******************************************************************************************************** -// Servicio: ogAdmBoot -// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla -// Fecha Creación: Julio-2010 -// Fecha Última modificación: Julio-2010 -// Nombre del fichero: ogAdmBoot.cpp -// Descripción :Este fichero implementa el servicio dhcp y tftp propios 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 <netinet/in.h> -#include <arpa/inet.h> -#include </usr/include/mysql/mysql.h> -#include <pthread.h> -#include "Database.h" -#include "ogAdmLib.h" -// _____________________________________________________________________________________________________________ - -#define PUERTODHCPORIGEN 67 -#define PUERTODHCPDESTINO 68 - -#define PUERTOBOOTPORIGEN 4011 -#define PUERTOBOOTPDESTINO 68 - -#define PUERTOTFTPORIGEN 69 - -#define PUERTOMINUSER 20000 -#define PUERTOMAXUSER 60000 - -#define MAX_INTERFACE_LIST 20 -#define MAX_NUM_CSADDRS 20 -// _____________________________________________________________________________________________________________ -#define DHCP_UDP_OVERHEAD (20 + 8 ) // IP header + UDP header -#define DHCP_SNAME_LEN 64 -#define DHCP_FILE_LEN 128 -#define DHCP_FIXED_NON_UDP 236 -#define DHCP_FIXED_LEN (DHCP_FIXED_NON_UDP + DHCP_UDP_OVERHEAD) // Longitud de la trama sin las opciones -#define DHCP_MTU_MAX 1500 -#define DHCP_OPTION_LEN (DHCP_MTU_MAX - DHCP_FIXED_LEN) - -#define BOOTP_MIN_LEN 300 -#define DHCP_MIN_LEN 548 - -struct dhcp_packet { - unsigned char op; // Message opcode - unsigned char htype; // Hardware addr type - unsigned char hlen; // Hardware addr length - unsigned char hops; // Number of relay agent hops from client - unsigned long xid; // Transaction ID - unsigned short secs; // Seconds since client started looking - unsigned short flags; // Flag bits - struct in_addr ciaddr; // Client IP address - struct in_addr yiaddr; // Client IP address - struct in_addr siaddr; // IP address of next server - struct in_addr giaddr; // DHCP relay agent IP address - unsigned char chaddr [16];// Client hardware address - char sname[DHCP_SNAME_LEN]; // Server name - char file[DHCP_FILE_LEN]; // Boot filename - unsigned char magiccookie[4]; - unsigned char options [DHCP_OPTION_LEN-4]; // Optional parameters. -}; - -// Estructura genrica de una opcin DHCP -struct dhcp_opcion { - unsigned char codop; - unsigned char tam; - unsigned char dato; -}; - -// Cdigo de las distintas opciones DHCP -#define DHCP_PAD 0 -#define DHCP_SUBNET_MASK 1 -#define DHCP_TIME_OFFSET 2 -#define DHCP_ROUTERS 3 -#define DHCP_TIME_SERVERS 4 -#define DHCP_NAME_SERVERS 5 -#define DHCP_DOMAIN_NAME_SERVERS 6 -#define DHCP_LOG_SERVERS 7 -#define DHCP_COOKIE_SERVERS 8 -#define DHCP_LPR_SERVERS 9 -#define DHCP_IMPRESS_SERVERS 10 -#define DHCP_RESOURCE_LOCATION_SERVERS 11 -#define DHCP_HOST_NAME 12 -#define DHCP_BOOT_SIZE 13 -#define DHCP_MERIT_DUMP 14 -#define DHCP_DOMAIN_NAME 15 -#define DHCP_SWAP_SERVER 16 -#define DHCP_ROOT_PATH 17 -#define DHCP_EXTENSIONS_PATH 18 -#define DHCP_IP_FORWARDING 19 -#define DHCP_NON_LOCAL_SOURCE_ROUTING 20 -#define DHCP_POLICY_FILTER 21 -#define DHCP_MAX_DGRAM_REASSEMBLY 22 -#define DHCP_DEFAULT_IP_TTL 23 -#define DHCP_PATH_MTU_AGING_TIMEOUT 24 -#define DHCP_PATH_MTU_PLATEAU_TABLE 25 -#define DHCP_INTERFACE_MTU 26 -#define DHCP_ALL_SUBNETS_LOCAL 27 -#define DHCP_BROADCAST_ADDRESS 28 -#define DHCP_PERFORM_MASK_DISCOVERY 29 -#define DHCP_MASK_SUPPLIER 30 -#define DHCP_ROUTER_DISCOVERY 31 -#define DHCP_ROUTER_SOLICITATION_ADDRESS 32 -#define DHCP_STATIC_ROUTES 33 -#define DHCP_TRAILER_ENCAPSULATION 34 -#define DHCP_ARP_CACHE_TIMEOUT 35 -#define DHCP_IEEE802_3_ENCAPSULATION 36 -#define DHCP_DEFAULT_TCP_TTL 37 -#define DHCP_TCP_KEEPALIVE_INTERVAL 38 -#define DHCP_TCP_KEEPALIVE_GARBAGE 39 -#define DHCP_NIS_DOMAIN 40 -#define DHCP_NIS_SERVERS 41 -#define DHCP_NTP_SERVERS 42 -#define DHCP_VENDOR_ENCAPSULATED_OPTIONS 43 -#define DHCP_NETBIOS_NAME_SERVERS 44 -#define DHCP_NETBIOS_DD_SERVER 45 -#define DHCP_NETBIOS_NODE_TYPE 46 -#define DHCP_NETBIOS_SCOPE 47 -#define DHCP_FONT_SERVERS 48 -#define DHCP_X_DISPLAY_MANAGER 49 -#define DHCP_REQUESTED_ADDRESS 50 -#define DHCP_LEASE_TIME 51 -#define DHCP_OPTION_OVERLOAD 52 -#define DHCP_MESSAGE_TYPE 53 -#define DHCP_SERVER_IDENTIFIER 54 -#define DHCP_PARAMETER_REQUEST_LIST 55 -#define DHCP_MESSAGE 56 -#define DHCP_MAX_MESSAGE_SIZE 57 -#define DHCP_RENEWAL_TIME 58 -#define DHCP_REBINDING_TIME 59 -#define DHCP_CLASS_IDENTIFIER 60 -#define DHCP_CLIENT_IDENTIFIER 61 -#define DHCP_USER_CLASS_ID 77 -#define DHCP_END 255 - -// DHCP message types. -#define DHCPDISCOVER 1 -#define DHCPOFFER 2 -#define DHCPREQUEST 3 -#define DHCPDECLINE 4 -#define DHCPACK 5 -#define DHCPNAK 6 -#define DHCPRELEASE 7 -#define DHCPINFORM 8 - -// Estructura para trabajar en cada hebra con el cliente en cuestion -struct TramaDhcpBootp{ - SOCKET sck; - struct sockaddr_in cliente; - socklen_t sockaddrsize; - struct dhcp_packet pckDchp; - char bdIP[16]; -}; -// _____________________________________________________________________________________________________________ - -#define MAXBLOCK 4096 - - -// TFTP Cdigos de operacin. -#define TFTPRRQ 1 // Read request. -#define TFTPWRQ 2 // Write request -#define TFTPDATA 3 // Read or write the next block of data. -#define TFTPACK 4 // Confirnacin de bloque procesado -#define TFTPERROR 5 // Error message -#define TFTPOACK 6 // Option acknowledgment - -// Paquete TFTP genrico -struct tftp_packet -{ - WORD opcode; - char buffer[MAXBLOCK+2]; -}; -// Paquete TFTP tipo ACK -struct tftppacket_ack -{ - WORD opcode; - WORD block; - char buffer[MAXBLOCK]; -}; -// Paquete TFTP tipo ERROR packet -struct tftppacket_error -{ - WORD opcode; - WORD errorcode; - char errormessage[508]; -}; -// Estructura para trabajar en cada hebra con el cliente en cuestion -struct TramaTftp{ - SOCKET sck; - struct sockaddr_in cliente; - socklen_t sockaddrsize; - struct tftp_packet pckTftp; - FILE * fileboot; - int bloquesize; - int tsize; - int interval; - int numblock; - unsigned short currentopCode; -}; -//______________________________________________________ -static pthread_mutex_t guardia; // Controla acceso exclusivo de hebras -//______________________________________________________ -char IPlocal[LONPRM]; -char usuario[LONPRM]; -char pasguor[LONPRM]; -char datasource[LONPRM]; -char catalog[LONPRM]; -char router[LONPRM]; -char mascara[LONPRM]; - -char oProuter[LONPRM]; -char oPmascara[LONPRM]; - -// Prototipo de funciones -void RegistraLog(char *,int); -int TomaParametrosReg(); - -LPVOID ServicioDHCP(LPVOID); -LPVOID ServicioBOOTP(LPVOID); -LPVOID ServicioTFTP(LPVOID); -LPVOID GestionaServicioDHCP(LPVOID); -LPVOID GestionaServicioBOOTP(LPVOID); -LPVOID GestionaServicioTFTP(LPVOID); - -int ClienteExistente(struct TramaDhcpBootp *,char*,int); -int OpcionesPresentes(unsigned char *); -unsigned char * BuscaOpcion(dhcp_packet* ,unsigned char ); - -int OpcionPXEClient(dhcp_packet* ); -void ProcesaTramaClientePXE(struct TramaDhcpBootp* trmInfo); -void ProcesaTramaClienteDHCP(struct TramaDhcpBootp* trmInfo); -void ProcesaTramaClienteBOOTP(struct TramaDhcpBootp* trmInfo); -void ProcesaTramaClienteTFTP(struct TramaTftp * trmInfo); - -void RellenaIPCLiente(struct TramaDhcpBootp*); -void RellenaIPServidor(struct TramaDhcpBootp*); -void dhcpDISCOVER_PXE(struct TramaDhcpBootp*); -void dhcpREQUEST_PXE(struct TramaDhcpBootp*); -void bootpREQUEST_PXE(struct TramaDhcpBootp*); - -int PeticionFichero(struct TramaTftp*); - -void AdjDHCPOFFER(unsigned char**,int*); -void AdjDHCPACK(unsigned char**,int*); -void AdjROUTERS(unsigned char** ,int*); -void AdjSUBNETMASK(unsigned char**,int*); -void AdjCLASSIDENTIFIER(unsigned char** ,int*); -void AdjSERVERIDENTIFIER(unsigned char** ,int*); -void AdjLEASETIME(unsigned char** ,int*); -void AdjBOOTSIZE(unsigned char** ,int*); - -SOCKET TomaSocketUser(); -struct tm * TomaHora(); -int split_parametros(char **,char *, char *); -void duerme(unsigned int ); diff --git a/admin/Sources/Services/ogAdmServer/Makefile b/admin/Sources/Services/ogAdmServer/Makefile index cfd06d4d..bffa4dca 100644 --- a/admin/Sources/Services/ogAdmServer/Makefile +++ b/admin/Sources/Services/ogAdmServer/Makefile @@ -8,12 +8,11 @@ INSTALL_DIR := /opt/opengnsys # Opciones de compilacion CFLAGS := $(shell mysql_config --cflags) -CFLAGS += -O0 -g -Wall -I../../Includes # Depuracion -#CFLAGS += -O3 -I../../Includes # Optimizacion +CFLAGS += -g -Wall -I../../Includes CPPFLAGS := $(CFLAGS) # Opciones de linkado -LDFLAGS := -Wl,--no-as-needed $(shell mysql_config --libs) -lpthread +LDFLAGS := -Wl,--no-as-needed $(shell mysql_config --libs) -lev -ljansson # Ficheros objetos OBJS := ../../Includes/Database.o sources/ogAdmServer.o @@ -23,7 +22,6 @@ all: $(PROYECTO) $(PROYECTO): $(OBJS) g++ $(LDFLAGS) $(OBJS) -o $(PROYECTO) -# strip $(PROYECTO) # Optimizacion install: $(PROYECTO) cp $(PROYECTO) $(INSTALL_DIR)/sbin diff --git a/admin/Sources/Services/ogAdmServer/ogAdmServer.cfg b/admin/Sources/Services/ogAdmServer/ogAdmServer.cfg index 9273952f..790b2336 100644 --- a/admin/Sources/Services/ogAdmServer/ogAdmServer.cfg +++ b/admin/Sources/Services/ogAdmServer/ogAdmServer.cfg @@ -4,3 +4,5 @@ USUARIO=DBUSER PASSWORD=DBPASSWORD datasource=localhost CATALOG=DATABASE +INTERFACE=eth0 +APITOKEN=REPOKEY diff --git a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp index 4aa68441..1b806a91 100644 --- a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp +++ b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp @@ -8,6 +8,22 @@ // ******************************************************************************************************* #include "ogAdmServer.h" #include "ogAdmLib.c" +#include <ev.h> +#include <syslog.h> +#include <sys/ioctl.h> +#include <ifaddrs.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <jansson.h> + +static char usuario[LONPRM]; // Usuario de acceso a la base de datos +static char pasguor[LONPRM]; // Password del usuario +static char datasource[LONPRM]; // Dirección IP del gestor de base de datos +static char catalog[LONPRM]; // Nombre de la base de datos +static char interface[LONPRM]; // Interface name +static char auth_token[LONPRM]; // API token + //________________________________________________________________________________________________________ // Función: tomaConfiguracion // @@ -16,361 +32,120 @@ // 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error //________________________________________________________________________________________________________ -BOOLEAN tomaConfiguracion(char* filecfg) { - char modulo[] = "tomaConfiguracion()"; +static bool tomaConfiguracion(const char *filecfg) +{ + char buf[1024], *line; + char *key, *value; + FILE *fcfg; if (filecfg == NULL || strlen(filecfg) == 0) { - errorLog(modulo, 1, FALSE); // Fichero de configuración del servicio vacío - return (FALSE); + syslog(LOG_ERR, "No configuration file has been specified\n"); + return false; } - FILE *fcfg; - long lSize; - char * buffer, *lineas[MAXPRM], *dualparametro[2]; - int i, numlin, resul; fcfg = fopen(filecfg, "rt"); if (fcfg == NULL) { - errorLog(modulo, 2, FALSE); // No existe fichero de configuración del servicio - return (FALSE); + syslog(LOG_ERR, "Cannot open configuration file `%s'\n", + filecfg); + return false; } - fseek(fcfg, 0, SEEK_END); - lSize = ftell(fcfg); // Obtiene tamaño del fichero. - rewind(fcfg); - buffer = (char*) reservaMemoria(lSize + 1); // Toma memoria para el buffer de lectura. - if (buffer == NULL) { // No hay memoria suficiente para el buffer - errorLog(modulo, 3, FALSE); - return (FALSE); - } - fread(buffer, 1, lSize, fcfg); // Lee contenido del fichero - buffer[lSize] = (char) NULL; - fclose(fcfg); - servidoradm[0] = (char) NULL; //inicializar variables globales - usuario[0] = (char) NULL; - pasguor[0] = (char) NULL; - datasource[0] = (char) NULL; - catalog[0] = (char) NULL; - aulaup[0] = (char) NULL; - - numlin = splitCadena(lineas, buffer, '\n'); - for (i = 0; i < numlin; i++) { - splitCadena(dualparametro, lineas[i], '='); - resul = strcmp(StrToUpper(dualparametro[0]), "SERVIDORADM"); - if (resul == 0) - strcpy(servidoradm, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "PUERTO"); - if (resul == 0) - strcpy(puerto, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "USUARIO"); - if (resul == 0) - strcpy(usuario, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "PASSWORD"); - if (resul == 0) - strcpy(pasguor, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "DATASOURCE"); - if (resul == 0) - strcpy(datasource, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "CATALOG"); - if (resul == 0) - strcpy(catalog, dualparametro[1]); - resul = strcmp(StrToUpper(dualparametro[0]), "AULAUP"); - if (resul == 0) - strcpy(catalog, dualparametro[1]); - } - if (servidoradm[0] == (char) NULL) { - liberaMemoria(buffer); - errorLog(modulo, 4, FALSE); // Falta parámetro SERVIDORADM - return (FALSE); - } - if (puerto[0] == (char) NULL) { - liberaMemoria(buffer); - errorLog(modulo, 5, FALSE); // Falta parámetro PUERTO - return (FALSE); - } - if (usuario[0] == (char) NULL) { - liberaMemoria(buffer); - errorLog(modulo, 6, FALSE); // Falta parámetro USUARIO - return (FALSE); - } - if (pasguor[0] == (char) NULL) { - liberaMemoria(buffer); - errorLog(modulo, 7, FALSE); // Falta parámetro PASSWORD - return (FALSE); - } - if (datasource[0] == (char) NULL) { - liberaMemoria(buffer); - errorLog(modulo, 8, FALSE); // Falta parámetro DATASOURCE - return (FALSE); - } - if (catalog[0] == (char) NULL) { - liberaMemoria(buffer); - errorLog(modulo, 9, FALSE); // Falta parámetro CATALOG - return (FALSE); - } - if (aulaup[0] == (char) NULL) { - strcpy(aulaup, "0"); // Por defecto el conmutador de registro automático esta en off - - } - liberaMemoria(buffer); - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: gestionaTrama -// -// Descripción: -// Procesa las tramas recibidas . -// Parametros: -// - s : Socket usado para comunicaciones -// Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error -// ________________________________________________________________________________________________________ -BOOLEAN gestionaTrama(SOCKET *socket_c) -{ - TRAMA* ptrTrama; - int i, res; - char *nfn; - char modulo[] = "gestionaTrama()"; - ptrTrama=recibeTrama(socket_c); - - if (ptrTrama){ - INTROaFINCAD(ptrTrama); - nfn = copiaParametro("nfn",ptrTrama); // Toma nombre de la función + line = fgets(buf, sizeof(buf), fcfg); + while (line != NULL) { + const char *delim = "="; - for (i = 0; i < MAXIMAS_FUNCIONES; i++) { // Recorre funciones que procesan las tramas - res = strcmp(tbfuncionesServer[i].nf, nfn); - if (res == 0) { // Encontrada la función que procesa el mensaje - liberaMemoria(nfn); - res=tbfuncionesServer[i].fptr(socket_c, ptrTrama); // Invoca la función - liberaMemoria(ptrTrama->parametros); - liberaMemoria(ptrTrama); - return(res); - } - } - liberaMemoria(nfn); - liberaMemoria(ptrTrama->parametros); - liberaMemoria(ptrTrama); - /* - Sólo puede ser un comando personalizado o su notificación - if (ptrTrama->tipo == MSG_COMANDO) - return (Comando(socket_c, ptrTrama)); - else { - if (ptrTrama->tipo == MSG_NOTIFICACION) - return (RESPUESTA_Comando(socket_c, ptrTrama)); - else - errorLog(modulo, 18, FALSE); // No se reconoce el mensaje - } - */ - } - else - errorLog(modulo, 17, FALSE); // Error en la recepción - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: Sondeo -// -// Descripción: -// Solicita a los clientes su disponibiliad para recibir comandos interactivos -// Parámetros: -// - socket_c: Socket del cliente que envió el mensaje -// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros del mensaje -// Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error -// ________________________________________________________________________________________________________ -BOOLEAN Sondeo(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "Sondeo()"; + line[strlen(line) - 1] = '\0'; - if (!enviaComando(ptrTrama, CLIENTE_APAGADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); - } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: respuestaSondeo -// -// Descripción: -// Recupera el estatus de los ordenadores solicitados leyendo la tabla de sockets -// Parámetros: -// - socket_c: Socket del cliente que envió el mensaje -// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros del mensaje -// Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error -// ________________________________________________________________________________________________________ -BOOLEAN respuestaSondeo(SOCKET *socket_c, TRAMA* ptrTrama) { - int i; - long lSize; - char *iph, *Ipes; - char modulo[] = "respuestaSondeo()"; + key = strtok(line, delim); + value = strtok(NULL, delim); - iph = copiaParametro("iph",ptrTrama); // Toma dirección/es IP - lSize = strlen(iph); // Calcula longitud de la cadena de direccion/es IPE/S - Ipes = (char*) reservaMemoria(lSize + 1); - if (Ipes == NULL) { - liberaMemoria(iph); - errorLog(modulo, 3, FALSE); - return (FALSE); + if (!strcmp(StrToUpper(key), "SERVIDORADM")) + snprintf(servidoradm, sizeof(servidoradm), "%s", value); + else if (!strcmp(StrToUpper(key), "PUERTO")) + snprintf(puerto, sizeof(puerto), "%s", value); + else if (!strcmp(StrToUpper(key), "USUARIO")) + snprintf(usuario, sizeof(usuario), "%s", value); + else if (!strcmp(StrToUpper(key), "PASSWORD")) + snprintf(pasguor, sizeof(pasguor), "%s", value); + else if (!strcmp(StrToUpper(key), "DATASOURCE")) + snprintf(datasource, sizeof(datasource), "%s", value); + else if (!strcmp(StrToUpper(key), "CATALOG")) + snprintf(catalog, sizeof(catalog), "%s", value); + else if (!strcmp(StrToUpper(key), "INTERFACE")) + snprintf(interface, sizeof(interface), "%s", value); + else if (!strcmp(StrToUpper(key), "APITOKEN")) + snprintf(auth_token, sizeof(auth_token), "%s", value); + + line = fgets(buf, sizeof(buf), fcfg); } - strcpy(Ipes, iph); // Copia cadena de IPES - liberaMemoria(iph); - initParametros(ptrTrama,0); - strcpy(ptrTrama->parametros, "tso="); // Compone retorno tso (sistemas operativos de los clientes ) - for (i = 0; i < MAXIMOS_CLIENTES; i++) { - if (strncmp(tbsockets[i].ip, "\0", 1) != 0) { // Si es un cliente activo - if (contieneIP(Ipes, tbsockets[i].ip)) { // Si existe la IP en la cadena - strcat(ptrTrama->parametros, tbsockets[i].ip); // Compone retorno - strcat(ptrTrama->parametros, "/"); // "ip/sistema operativo;" - strcat(ptrTrama->parametros, tbsockets[i].estado); - strcat(ptrTrama->parametros, ";"); - } - } + + fclose(fcfg); + + if (!servidoradm[0]) { + syslog(LOG_ERR, "Missing SERVIDORADM in configuration file\n"); + return false; } - strcat(ptrTrama->parametros, "\r"); - liberaMemoria(Ipes); - if (!mandaTrama(socket_c, ptrTrama)) { - errorLog(modulo, 26, FALSE); - return (FALSE); + if (!puerto[0]) { + syslog(LOG_ERR, "Missing PUERTO in configuration file\n"); + return false; } - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: Actualizar -// -// Descripción: -// Obliga a los clientes a iniciar sesión en el sistema -// Parámetros: -// - socket_c: Socket del cliente que envió el mensaje -// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros del mensaje -// Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error -// ________________________________________________________________________________________________________ -BOOLEAN Actualizar(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "Actualizar()"; - - if (!enviaComando(ptrTrama, CLIENTE_APAGADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - return (FALSE); + if (!usuario[0]) { + syslog(LOG_ERR, "Missing USUARIO in configuration file\n"); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: Purgar -// -// Descripción: -// Detiene la ejecución del browser en el cliente -// Parámetros: -// - socket_c: Socket del cliente que envió el mensaje -// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros del mensaje -// Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error -// ________________________________________________________________________________________________________ -BOOLEAN Purgar(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "Purgar()"; - - if (!enviaComando(ptrTrama, CLIENTE_APAGADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - return (FALSE); + if (!pasguor[0]) { + syslog(LOG_ERR, "Missing PASSWORD in configuration file\n"); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: ConsolaRemota -// -// Descripción: -// Envia un script al cliente, éste lo ejecuta y manda el archivo que genera la salida por pantalla -// Parámetros: -// - socket_c: Socket del cliente que envió el mensaje -// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros del mensaje -// Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error -// ________________________________________________________________________________________________________ -BOOLEAN ConsolaRemota(SOCKET *socket_c, TRAMA* ptrTrama) -{ - char *iph,fileco[LONPRM],msglog[LONSTD],*ptrIpes[MAXIMOS_CLIENTES];; - FILE* f; - int i,lon; - char modulo[] = "ConsolaRemota()"; - - if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + if (!datasource[0]) { + syslog(LOG_ERR, "Missing DATASOURCE in configuration file\n"); + return false; } - INTROaFINCAD(ptrTrama); - /* Destruye contenido del fichero de eco anterior */ - iph = copiaParametro("iph",ptrTrama); // Toma dirección ip del cliente - lon = splitCadena(ptrIpes,iph,';'); - for (i = 0; i < lon; i++) { - sprintf(fileco,"/tmp/_Seconsola_%s",ptrIpes[i]); // Nombre que tendra el archivo en el Servidor - f = fopen(fileco, "wt"); - fclose(f); + if (!catalog[0]) { + syslog(LOG_ERR, "Missing CATALOG in configuration file\n"); + return false; } - liberaMemoria(iph); - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + if (!interface[0]) + syslog(LOG_ERR, "Missing INTERFACE in configuration file\n"); + + return true; } -// ________________________________________________________________________________________________________ -// Función: EcoConsola -// -// Descripción: -// Solicita el eco de una consola remota almacenado en un archivo de eco -// Parámetros: -// - socket_c: Socket del cliente que envió el mensaje -// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros del mensaje -// Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error -// ________________________________________________________________________________________________________ -BOOLEAN EcoConsola(SOCKET *socket_c, TRAMA* ptrTrama) -{ - char *iph,fileco[LONPRM],*buffer; - int lSize; - char modulo[] = "EcoConsola()"; - INTROaFINCAD(ptrTrama); - // Lee archivo de eco de consola - iph = copiaParametro("iph",ptrTrama); // Toma dirección ip del cliente - sprintf(fileco,"/tmp/_Seconsola_%s",iph); // Nombre del archivo en el Servidor - liberaMemoria(iph); - lSize=lonArchivo(fileco); - if(lSize>0){ // Si el fichero tiene contenido... - initParametros(ptrTrama,lSize+LONGITUD_PARAMETROS); - buffer=leeArchivo(fileco); - sprintf(ptrTrama->parametros,"res=%s\r",buffer); - liberaMemoria(buffer); - } - else{ - initParametros(ptrTrama,0); - sprintf(ptrTrama->parametros,"res=\r"); - } - ptrTrama->tipo=MSG_RESPUESTA; // Tipo de mensaje - if (!mandaTrama(socket_c, ptrTrama)) { - errorLog(modulo, 26, FALSE); - return (FALSE); - } - return (TRUE); +enum og_client_state { + OG_CLIENT_RECEIVING_HEADER = 0, + OG_CLIENT_RECEIVING_PAYLOAD, + OG_CLIENT_PROCESSING_REQUEST, +}; + +#define OG_MSG_REQUEST_MAXLEN 4096 + +/* Shut down connection if there is no complete message after 10 seconds. */ +#define OG_CLIENT_TIMEOUT 10 + +struct og_client { + struct ev_io io; + struct ev_timer timer; + struct sockaddr_in addr; + enum og_client_state state; + char buf[OG_MSG_REQUEST_MAXLEN]; + unsigned int buf_len; + unsigned int msg_len; + int keepalive_idx; + bool rest; + int content_length; + char auth_token[64]; +}; + +static inline int og_client_socket(const struct og_client *cli) +{ + return cli->io.fd; } + // ________________________________________________________________________________________________________ // Función: clienteDisponible // @@ -380,28 +155,29 @@ BOOLEAN EcoConsola(SOCKET *socket_c, TRAMA* ptrTrama) // - ip : La ip del cliente a buscar // - idx: (Salida) Indice que ocupa el cliente, de estar ya registrado // Devuelve: -// TRUE: Si el cliente está disponible -// FALSE: En caso contrario +// true: Si el cliente está disponible +// false: En caso contrario // ________________________________________________________________________________________________________ -BOOLEAN clienteDisponible(char *ip, int* idx) { +bool clienteDisponible(char *ip, int* idx) +{ int estado; if (clienteExistente(ip, idx)) { estado = strcmp(tbsockets[*idx].estado, CLIENTE_OCUPADO); // Cliente ocupado if (estado == 0) - return (FALSE); + return false; estado = strcmp(tbsockets[*idx].estado, CLIENTE_APAGADO); // Cliente apagado if (estado == 0) - return (FALSE); + return false; estado = strcmp(tbsockets[*idx].estado, CLIENTE_INICIANDO); // Cliente en proceso de inclusión if (estado == 0) - return (FALSE); + return false; - return (TRUE); // En caso contrario el cliente está disponible + return true; // En caso contrario el cliente está disponible } - return (FALSE); // Cliente no está registrado en el sistema + return false; // Cliente no está registrado en el sistema } // ________________________________________________________________________________________________________ // Función: clienteExistente @@ -412,40 +188,42 @@ BOOLEAN clienteDisponible(char *ip, int* idx) { // - ip : La ip del cliente a buscar // - idx:(Salida) Indice que ocupa el cliente, de estar ya registrado // Devuelve: -// TRUE: Si el cliente está registrado -// FALSE: En caso contrario +// true: Si el cliente está registrado +// false: En caso contrario // ________________________________________________________________________________________________________ -BOOLEAN clienteExistente(char *ip, int* idx) { +bool clienteExistente(char *ip, int* idx) +{ int i; for (i = 0; i < MAXIMOS_CLIENTES; i++) { if (contieneIP(ip, tbsockets[i].ip)) { // Si existe la IP en la cadena *idx = i; - return (TRUE); + return true; } } - return (FALSE); + return false; } // ________________________________________________________________________________________________________ // Función: hayHueco // // Descripción: -// Esta función devuelve TRUE o FALSE dependiendo de que haya hueco en la tabla de sockets para un nuevo cliente. +// Esta función devuelve true o false dependiendo de que haya hueco en la tabla de sockets para un nuevo cliente. // Parametros: // - idx: Primer indice libre que se podrn utilizar // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN hayHueco(int *idx) { +static bool hayHueco(int *idx) +{ int i; for (i = 0; i < MAXIMOS_CLIENTES; i++) { if (strncmp(tbsockets[i].ip, "\0", 1) == 0) { // Hay un hueco *idx = i; - return (TRUE); + return true; } } - return (FALSE); + return false; } // ________________________________________________________________________________________________________ // Función: InclusionClienteWin @@ -456,17 +234,18 @@ BOOLEAN hayHueco(int *idx) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN InclusionClienteWinLnx(SOCKET *socket_c, TRAMA *ptrTrama) - { - char modulo[] = "InclusionClienteWinLnx()"; +static bool InclusionClienteWinLnx(TRAMA *ptrTrama, struct og_client *cli) +{ + int socket_c = og_client_socket(cli); int res,idordenador,lon; char nombreordenador[LONFIL]; - - res=procesoInclusionClienteWinLnx(socket_c, ptrTrama,&idordenador,nombreordenador); - + + res = procesoInclusionClienteWinLnx(socket_c, ptrTrama, &idordenador, + nombreordenador); + // Prepara la trama de respuesta initParametros(ptrTrama,0); @@ -475,12 +254,14 @@ BOOLEAN InclusionClienteWinLnx(SOCKET *socket_c, TRAMA *ptrTrama) 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); + + if (!mandaTrama(&socket_c, ptrTrama)) { + syslog(LOG_ERR, "failed to send response to %s:%hu reason=%s\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port), + strerror(errno)); + return false; } - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: procesoInclusionClienteWinLnx @@ -496,24 +277,22 @@ BOOLEAN InclusionClienteWinLnx(SOCKET *socket_c, TRAMA *ptrTrama) // 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) +bool procesoInclusionClienteWinLnx(int 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 + if (!db.Open(usuario, pasguor, datasource, catalog)) { liberaMemoria(iph); - errorLog(modulo, 20, FALSE); db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (20); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } // Recupera los datos del cliente @@ -521,53 +300,52 @@ BOOLEAN procesoInclusionClienteWinLnx(SOCKET *socket_c, TRAMA *ptrTrama,int *ido "SELECT idordenador,nombreordenador FROM ordenadores " " WHERE ordenadores.ip = '%s'", iph); - if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos + if (!db.Execute(sqlstr, tbl)) { liberaMemoria(iph); - errorLog(modulo, 21, FALSE); db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); db.Close(); - return (21); + return false; } - if (tbl.ISEOF()) { // Si no existe el cliente + if (tbl.ISEOF()) { liberaMemoria(iph); - errorLog(modulo, 22, FALSE); + syslog(LOG_ERR, "client does not exist in database (%s:%d)\n", + __func__, __LINE__); db.liberaResult(tbl); db.Close(); - return (22); + return false; } - if (ndebug == DEBUG_ALTO) { - sprintf(msglog, "%s IP:%s", tbMensajes[2], iph); - infoDebug(msglog); - } + syslog(LOG_DEBUG, "Client %s requesting inclusion\n", iph); + if (!tbl.Get("idordenador", *idordenador)) { liberaMemoria(iph); db.liberaResult(tbl); tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); db.Close(); - return (FALSE); + return false; } if (!tbl.Get("nombreordenador", nombreordenador)) { liberaMemoria(iph); db.liberaResult(tbl); tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); db.Close(); - return (FALSE); + return false; } db.liberaResult(tbl); db.Close(); - + if (!registraCliente(iph)) { // Incluyendo al cliente en la tabla de sokets liberaMemoria(iph); - errorLog(modulo, 25, FALSE); - return (25); + syslog(LOG_ERR, "client table is full\n"); + return false; } liberaMemoria(iph); - return(0); + return true; } // ________________________________________________________________________________________________________ // Función: InclusionCliente @@ -579,22 +357,25 @@ BOOLEAN procesoInclusionClienteWinLnx(SOCKET *socket_c, TRAMA *ptrTrama,int *ido // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN InclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) { - char modulo[] = "InclusionCliente()"; +static bool InclusionCliente(TRAMA *ptrTrama, struct og_client *cli) +{ + int socket_c = og_client_socket(cli); - if (!procesoInclusionCliente(socket_c, ptrTrama)) { // Ha habido algún error... + if (!procesoInclusionCliente(cli, ptrTrama)) { initParametros(ptrTrama,0); strcpy(ptrTrama->parametros, "nfn=RESPUESTA_InclusionCliente\rres=0\r"); - if (!mandaTrama(socket_c, ptrTrama)) { - errorLog(modulo, 26, FALSE); - return (FALSE); + if (!mandaTrama(&socket_c, ptrTrama)) { + syslog(LOG_ERR, "failed to send response to %s:%hu reason=%s\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port), + strerror(errno)); + return false; } } - return (TRUE); -} + return true; +} // ________________________________________________________________________________________________________ // Función: procesoInclusionCliente // @@ -604,10 +385,12 @@ BOOLEAN InclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) { +bool procesoInclusionCliente(struct og_client *cli, TRAMA *ptrTrama) +{ + int socket_c = og_client_socket(cli); char msglog[LONSTD], sqlstr[LONSQL]; Database db; Table tbl; @@ -615,19 +398,18 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) { char *iph, *cfg; char nombreordenador[LONFIL]; int lon, resul, idordenador, idmenu, cache, idproautoexec, idaula, idcentro; - char modulo[] = "procesoInclusionCliente()"; // Toma parámetros iph = copiaParametro("iph",ptrTrama); // Toma ip cfg = copiaParametro("cfg",ptrTrama); // Toma configuracion - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexión con la BD + if (!db.Open(usuario, pasguor, datasource, catalog)) { liberaMemoria(iph); liberaMemoria(cfg); - errorLog(modulo, 20, FALSE); db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } // Recupera los datos del cliente @@ -637,56 +419,55 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) { " INNER JOIN centros ON centros.idcentro=aulas.idcentro" " WHERE ordenadores.ip = '%s'", iph); - if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } - if (tbl.ISEOF()) { // Si no existe el cliente - errorLog(modulo, 22, FALSE); - return (FALSE); + if (tbl.ISEOF()) { + syslog(LOG_ERR, "client does not exist in database (%s:%d)\n", + __func__, __LINE__); + return false; } - if (ndebug == DEBUG_ALTO) { - sprintf(msglog, "%s IP:%s", tbMensajes[2], iph); - infoDebug(msglog); - } + syslog(LOG_DEBUG, "Client %s requesting inclusion\n", iph); + if (!tbl.Get("idordenador", idordenador)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (!tbl.Get("nombreordenador", nombreordenador)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (!tbl.Get("idmenu", idmenu)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (!tbl.Get("cache", cache)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (!tbl.Get("idproautoexec", idproautoexec)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (!tbl.Get("idaula", idaula)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (!tbl.Get("idcentro", idcentro)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } resul = actualizaConfiguracion(db, tbl, cfg, idordenador); // Actualiza la configuración del ordenador @@ -695,14 +476,14 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) { if (!resul) { liberaMemoria(iph); - errorLog(modulo, 29, FALSE); - return (FALSE); + syslog(LOG_ERR, "Cannot add client to database\n"); + return false; } if (!registraCliente(iph)) { // Incluyendo al cliente en la tabla de sokets liberaMemoria(iph); - errorLog(modulo, 25, FALSE); - return (FALSE); + syslog(LOG_ERR, "client table is full\n"); + return false; } /*------------------------------------------------------------------------------------------------------------------------------ @@ -719,12 +500,14 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) { lon += sprintf(ptrTrama->parametros + lon, "idc=%d\r", idcentro); lon += sprintf(ptrTrama->parametros + lon, "res=%d\r", 1); // Confirmación proceso correcto - if (!mandaTrama(socket_c, ptrTrama)) { - errorLog(modulo, 26, FALSE); - return (FALSE); + if (!mandaTrama(&socket_c, ptrTrama)) { + syslog(LOG_ERR, "failed to send response to %s:%hu reason=%s\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port), + strerror(errno)); + return false; } liberaMemoria(iph); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: actualizaConfiguracion @@ -737,8 +520,8 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) { // - cfg: cadena con una Configuración // - ido: Identificador del ordenador cliente // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // Especificaciones: // Los parametros de la configuración son: // par= Número de partición @@ -747,13 +530,12 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) { // soi= Nombre del sistema de ficheros instalado en la partición // tam= Tamaño de la partición // ________________________________________________________________________________________________________ -BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido) +bool 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[6], *ptrDual[2], tbPar[LONSTD]; + char *ptrPar[MAXPAR], *ptrCfg[7], *ptrDual[2], tbPar[LONSTD]; char *ser, *disk, *par, *cpt, *sfi, *soi, *tam, *uso; // Parametros de configuración. - char modulo[] = "actualizaConfiguracion()"; lon = 0; p = splitCadena(ptrPar, cfg, '\n'); @@ -771,8 +553,8 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido) ser, ido); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } } continue; @@ -826,11 +608,11 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido) ido, disk, par); - if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } if (tbl.ISEOF()) { // Si no existe el registro sprintf(sqlstr, "INSERT INTO ordenadores_particiones(idordenador,numdisk,numpar,codpar,tamano,uso,idsistemafichero,idnombreso,idimagen)" @@ -840,36 +622,36 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido) if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } } else { // Existe el registro - swu = TRUE; // Se supone que algún dato ha cambiado + swu = true; // Se supone que algún dato ha cambiado if (!tbl.Get("codpar", dato)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (strtol(cpt, NULL, 16) == dato) {// Parámetro tipo de partición (hexadecimal) igual al almacenado (decimal) if (!tbl.Get("tamano", dato)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (atoi(tam) == dato) {// Parámetro tamaño igual al almacenado if (!tbl.Get("idsistemafichero", dato)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (idsfi == dato) {// Parámetro sistema de fichero igual al almacenado if (!tbl.Get("idnombreso", dato)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (idsoi == dato) {// Parámetro sistema de fichero distinto al almacenado - swu = FALSE; // Todos los parámetros de la partición son iguales, no se actualiza + swu = false; // Todos los parámetros de la partición son iguales, no se actualiza } } } @@ -892,11 +674,11 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido) " WHERE idordenador=%d AND numdisk=%s AND numpar=%s", uso, ido, disk, par); } - if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } } } @@ -904,13 +686,13 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido) // Eliminar particiones almacenadas que ya no existen sprintf(sqlstr, "DELETE FROM ordenadores_particiones WHERE idordenador=%d AND (numdisk, numpar) NOT IN (%s)", ido, tbPar); - if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: checkDato @@ -932,10 +714,10 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido) // En caso de producirse algún error se devuelve el valor 0 // ________________________________________________________________________________________________________ -int checkDato(Database db, Table tbl, char *dato, const char*tabla, - const char* nomdato, const char *nomidentificador) { +int checkDato(Database db, Table tbl, char *dato, const char *tabla, + const char *nomdato, const char *nomidentificador) +{ char msglog[LONSTD], sqlstr[LONSQL]; - char modulo[] = "checkDato()"; int identificador; if (strlen(dato) == 0) @@ -944,37 +726,37 @@ int checkDato(Database db, Table tbl, char *dato, const char*tabla, tabla, nomdato, dato); // Ejecuta consulta - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); return (0); } if (tbl.ISEOF()) { // Software NO existente sprintf(sqlstr, "INSERT INTO %s (%s) VALUES('%s')", tabla, nomdato, dato); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); + og_info(msglog); return (0); } // Recupera el identificador del software sprintf(sqlstr, "SELECT LAST_INSERT_ID() as identificador"); if (!db.Execute(sqlstr, tbl)) { // Error al leer db.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); + og_info(msglog); return (0); } if (!tbl.ISEOF()) { // Si existe registro if (!tbl.Get("identificador", identificador)) { tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); + og_info(msglog); return (0); } } } else { if (!tbl.Get(nomidentificador, identificador)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); + og_info(msglog); return (0); } } @@ -988,20 +770,21 @@ int checkDato(Database db, Table tbl, char *dato, const char*tabla, // Parámetros: // - iph: Dirección ip del cliente // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN registraCliente(char *iph) { +bool registraCliente(char *iph) +{ int idx; if (!clienteExistente(iph, &idx)) { // Si no existe la IP ... if (!hayHueco(&idx)) { // Busca hueco para el nuevo cliente - return (FALSE); // No hay huecos + return false; // No hay huecos } } strcpy(tbsockets[idx].ip, iph); // Copia IP strcpy(tbsockets[idx].estado, CLIENTE_INICIANDO); // Actualiza el estado del cliente - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: AutoexecCliente @@ -1012,17 +795,18 @@ BOOLEAN registraCliente(char *iph) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN AutoexecCliente(SOCKET *socket_c, TRAMA *ptrTrama) { +static bool AutoexecCliente(TRAMA *ptrTrama, struct og_client *cli) +{ + int socket_c = og_client_socket(cli); int lon; char *iph, *exe, msglog[LONSTD]; Database db; FILE *fileexe; char fileautoexec[LONPRM]; char parametros[LONGITUD_PARAMETROS]; - char modulo[] = "AutoexecCliente()"; iph = copiaParametro("iph",ptrTrama); // Toma dirección IP del cliente exe = copiaParametro("exe",ptrTrama); // Toma identificador del procedimiento inicial @@ -1031,15 +815,15 @@ BOOLEAN AutoexecCliente(SOCKET *socket_c, TRAMA *ptrTrama) { liberaMemoria(iph); fileexe = fopen(fileautoexec, "wb"); // Abre fichero de script if (fileexe == NULL) { - errorLog(modulo, 52, FALSE); - return (FALSE); + syslog(LOG_ERR, "cannot create temporary file\n"); + return false; } - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexión con la BD - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } initParametros(ptrTrama,0); if (recorreProcedimientos(db, parametros, fileexe, exe)) { @@ -1054,13 +838,15 @@ BOOLEAN AutoexecCliente(SOCKET *socket_c, TRAMA *ptrTrama) { db.Close(); fclose(fileexe); - if (!mandaTrama(socket_c, ptrTrama)) { + if (!mandaTrama(&socket_c, ptrTrama)) { liberaMemoria(exe); - errorLog(modulo, 26, FALSE); - return (FALSE); + syslog(LOG_ERR, "failed to send response to %s:%hu reason=%s\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port), + strerror(errno)); + return false; } liberaMemoria(exe); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: recorreProcedimientos @@ -1070,43 +856,42 @@ BOOLEAN AutoexecCliente(SOCKET *socket_c, TRAMA *ptrTrama) { // Parámetros: // Database db,char* parametros,FILE* fileexe,char* idp // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN recorreProcedimientos(Database db, char* parametros, FILE* fileexe, - char* idp) { +bool recorreProcedimientos(Database db, char *parametros, FILE *fileexe, char *idp) +{ int procedimientoid, lsize; char idprocedimiento[LONPRM], msglog[LONSTD], sqlstr[LONSQL]; Table tbl; - char modulo[] = "recorreProcedimientos()"; /* Busca procedimiento */ sprintf(sqlstr, "SELECT procedimientoid,parametros FROM procedimientos_acciones" " WHERE idprocedimiento=%s ORDER BY orden", idp); // Ejecuta consulta - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } while (!tbl.ISEOF()) { // Recorre procedimientos if (!tbl.Get("procedimientoid", procedimientoid)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (procedimientoid > 0) { // Procedimiento recursivo sprintf(idprocedimiento, "%d", procedimientoid); if (!recorreProcedimientos(db, parametros, fileexe, idprocedimiento)) { - return (FALSE); + return false; } } else { if (!tbl.Get("parametros", parametros)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } strcat(parametros, "@"); lsize = strlen(parametros); @@ -1114,7 +899,7 @@ BOOLEAN recorreProcedimientos(Database db, char* parametros, FILE* fileexe, } tbl.MoveNext(); } - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: ComandosPendientes @@ -1125,14 +910,14 @@ BOOLEAN recorreProcedimientos(Database db, char* parametros, FILE* fileexe, // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN ComandosPendientes(SOCKET *socket_c, TRAMA *ptrTrama) +static bool ComandosPendientes(TRAMA *ptrTrama, struct og_client *cli) { + int socket_c = og_client_socket(cli); char *ido,*iph,pids[LONPRM]; int ids, idx; - char modulo[] = "ComandosPendientes()"; iph = copiaParametro("iph",ptrTrama); // Toma dirección IP ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador @@ -1140,8 +925,8 @@ BOOLEAN ComandosPendientes(SOCKET *socket_c, TRAMA *ptrTrama) if (!clienteExistente(iph, &idx)) { // Busca índice del cliente liberaMemoria(iph); liberaMemoria(ido); - errorLog(modulo, 47, FALSE); - return (FALSE); + syslog(LOG_ERR, "client does not exist\n"); + return false; } if (buscaComandos(ido, ptrTrama, &ids)) { // Existen comandos pendientes ptrTrama->tipo = MSG_COMANDO; @@ -1152,15 +937,17 @@ BOOLEAN ComandosPendientes(SOCKET *socket_c, TRAMA *ptrTrama) initParametros(ptrTrama,0); strcpy(ptrTrama->parametros, "nfn=NoComandosPtes\r"); } - if (!mandaTrama(socket_c, ptrTrama)) { + if (!mandaTrama(&socket_c, ptrTrama)) { liberaMemoria(iph); - liberaMemoria(ido); - errorLog(modulo, 26, FALSE); - return (FALSE); + liberaMemoria(ido); + syslog(LOG_ERR, "failed to send response to %s:%hu reason=%s\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port), + strerror(errno)); + return false; } liberaMemoria(iph); liberaMemoria(ido); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: buscaComandos @@ -1172,59 +959,57 @@ BOOLEAN ComandosPendientes(SOCKET *socket_c, TRAMA *ptrTrama) // - cmd: Parámetros del comando (Salida) // - ids: Identificador de la sesion(Salida) // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids) +bool buscaComandos(char *ido, TRAMA *ptrTrama, int *ids) { char msglog[LONSTD], sqlstr[LONSQL]; Database db; Table tbl; int lonprm; - char modulo[] = "buscaComandos()"; - - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexión con la BD - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } sprintf(sqlstr,"SELECT sesion,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); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } if (tbl.ISEOF()) { db.Close(); - return (FALSE); // No hay comandos pendientes + return false; // No hay comandos pendientes } else { // Busca entre todas las acciones de diversos ambitos if (!tbl.Get("sesion", *ids)) { // Toma identificador de la sesion tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (!tbl.Get("lonprm", lonprm)) { // Toma parámetros del comando tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if(!initParametros(ptrTrama,lonprm+LONGITUD_PARAMETROS)){ db.Close(); - errorLog(modulo, 3, FALSE); - return (FALSE); + syslog(LOG_ERR, "%s:%d OOM\n", __FILE__, __LINE__); + return false; } if (!tbl.Get("parametros", ptrTrama->parametros)) { // Toma parámetros del comando tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } } db.Close(); - return (TRUE); // Hay comandos pendientes, se toma el primero de la cola + return true; // Hay comandos pendientes, se toma el primero de la cola } // ________________________________________________________________________________________________________ // Función: DisponibilidadComandos @@ -1235,41 +1020,27 @@ BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids) // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ // -BOOLEAN DisponibilidadComandos(SOCKET *socket_c, TRAMA *ptrTrama) +static bool DisponibilidadComandos(TRAMA *ptrTrama, struct og_client *cli) { char *iph, *tpc; - int idx,port_old=0,port_new; - char modulo[] = "DisponibilidadComandos()"; - - + int idx; iph = copiaParametro("iph",ptrTrama); // Toma ip if (!clienteExistente(iph, &idx)) { // Busca índice del cliente liberaMemoria(iph); - errorLog(modulo, 47, FALSE); - return (FALSE); + syslog(LOG_ERR, "client does not exist\n"); + return false; } tpc = copiaParametro("tpc",ptrTrama); // Tipo de cliente (Plataforma y S.O.) strcpy(tbsockets[idx].estado, tpc); - - port_new=tomaPuerto(*socket_c); - - if(tbsockets[idx].sock!=INVALID_SOCKET){ - port_old=tomaPuerto(tbsockets[idx].sock); - if(port_old!=port_new){ - close(tbsockets[idx].sock); // Cierra el socket si ya existia uno - } - } - - tbsockets[idx].sock = *socket_c; - swcSocket = TRUE; // El socket permanece abierto para recibir comandos desde el servidor + cli->keepalive_idx = idx; liberaMemoria(iph); liberaMemoria(tpc); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: respuestaEstandar @@ -1285,26 +1056,26 @@ BOOLEAN DisponibilidadComandos(SOCKET *socket_c, TRAMA *ptrTrama) // - db: Objeto base de datos (operativo) // - tbl: Objeto tabla // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db, - Table tbl) { +static bool respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db, + Table tbl) +{ char msglog[LONSTD], sqlstr[LONSQL]; char *res, *ids, *der; char fechafin[LONPRM]; struct tm* st; int idaccion; - char modulo[] = "respuestaEstandar()"; ids = copiaParametro("ids",ptrTrama); // Toma identificador de la sesión if (ids == NULL) // No existe seguimiento de la acción - return (TRUE); - + return true; + if (atoi(ids) == 0){ // No existe seguimiento de la acción liberaMemoria(ids); - return (TRUE); + return true; } sprintf(sqlstr, @@ -1313,20 +1084,20 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db, liberaMemoria(ids); - if (!db.Execute(sqlstr, tbl)) { // Error al consultar - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } - if (tbl.ISEOF()) { // No existe registro de acciones - errorLog(modulo, 31, FALSE); - return (TRUE); + if (tbl.ISEOF()) { + syslog(LOG_ERR, "no actions available\n"); + return true; } if (!tbl.Get("idaccion", idaccion)) { // Toma identificador de la accion tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } st = tomaHora(); sprintf(fechafin, "%d/%d/%d %d:%d:%d", st->tm_year + 1900, st->tm_mon + 1, @@ -1345,20 +1116,40 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db, liberaMemoria(res); liberaMemoria(der); db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } liberaMemoria(der); if (atoi(res) == ACCION_FALLIDA) { liberaMemoria(res); - return (FALSE); // Error en la ejecución del comando + return false; // Error en la ejecución del comando } liberaMemoria(res); - return (TRUE); + return true; } + +static bool og_send_cmd(char *ips_array[], int ips_array_len, + const char *state, TRAMA *ptrTrama) +{ + int i, idx; + + for (i = 0; i < ips_array_len; i++) { + if (clienteDisponible(ips_array[i], &idx)) { // Si el cliente puede recibir comandos + int sock = tbsockets[idx].cli ? tbsockets[idx].cli->io.fd : -1; + + strcpy(tbsockets[idx].estado, state); // Actualiza el estado del cliente + if (sock >= 0 && !mandaTrama(&sock, ptrTrama)) { + syslog(LOG_ERR, "failed to send response to %s:%s\n", + ips_array[i], strerror(errno)); + } + } + } + return true; +} + // ________________________________________________________________________________________________________ // Función: enviaComando // @@ -1368,21 +1159,20 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db, // - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros // - estado: Estado en el se deja al cliente mientras se ejecuta el comando // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN enviaComando(TRAMA* ptrTrama, const char *estado) - { +bool enviaComando(TRAMA* ptrTrama, const char *estado) +{ char *iph, *Ipes, *ptrIpes[MAXIMOS_CLIENTES]; - int i, idx, lon; - char modulo[] = "enviaComando()"; + int lon; iph = copiaParametro("iph",ptrTrama); // Toma dirección/es IP lon = strlen(iph); // Calcula longitud de la cadena de direccion/es IPE/S Ipes = (char*) reservaMemoria(lon + 1); if (Ipes == NULL) { - errorLog(modulo, 3, FALSE); - return (FALSE); + syslog(LOG_ERR, "%s:%d OOM\n", __FILE__, __LINE__); + return false; } strcpy(Ipes, iph); // Copia cadena de IPES @@ -1390,18 +1180,12 @@ BOOLEAN enviaComando(TRAMA* ptrTrama, const char *estado) lon = splitCadena(ptrIpes, Ipes, ';'); FINCADaINTRO(ptrTrama); - for (i = 0; i < lon; i++) { - if (clienteDisponible(ptrIpes[i], &idx)) { // Si el cliente puede recibir comandos - strcpy(tbsockets[idx].estado, estado); // Actualiza el estado del cliente - if (!mandaTrama(&tbsockets[idx].sock, ptrTrama)) { - errorLog(modulo, 26, FALSE); - return (FALSE); - } - //close(tbsockets[idx].sock); // Cierra el socket del cliente hasta nueva disponibilidad - } - } + + if (!og_send_cmd(ptrIpes, lon, estado, ptrTrama)) + return false; + liberaMemoria(Ipes); - return (TRUE); + return true; } //______________________________________________________________________________________________________ // Función: respuestaConsola @@ -1412,61 +1196,19 @@ BOOLEAN enviaComando(TRAMA* ptrTrama, const char *estado) // - socket_c: (Salida) Socket utilizado para el envío // - res: Resultado del envío del comando // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN respuestaConsola(SOCKET *socket_c, TRAMA *ptrTrama, int res) { - char modulo[] = "respuestaConsola()"; +bool respuestaConsola(int socket_c, TRAMA *ptrTrama, int res) +{ initParametros(ptrTrama,0); sprintf(ptrTrama->parametros, "res=%d\r", res); - if (!mandaTrama(socket_c, ptrTrama)) { - errorLog(modulo, 26, FALSE); - return (FALSE); + if (!mandaTrama(&socket_c, ptrTrama)) { + syslog(LOG_ERR, "%s:%d failed to send response: %s\n", + __func__, __LINE__, strerror(errno)); + return false; } - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: Arrancar -// -// Descripción: -// Procesa el comando Arrancar -// Parámetros: -// - socket_c: Socket de la consola al 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 Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) { - char *iph,*mac,*mar, msglog[LONSTD]; - BOOLEAN res; - char modulo[] = "Arrancar()"; - - iph = copiaParametro("iph",ptrTrama); // Toma dirección/es IP - mac = copiaParametro("mac",ptrTrama); // Toma dirección/es MAC - mar = copiaParametro("mar",ptrTrama); // Método de arranque (Broadcast o Unicast) - - res=Levanta(iph,mac,mar); - - liberaMemoria(iph); - liberaMemoria(mac); - liberaMemoria(mar); - - if(!res){ - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); - } - - if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); - } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: Levanta @@ -1478,50 +1220,114 @@ BOOLEAN Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) { // - mac: Cadena de direcciones mac separadas por ";" // - mar: Método de arranque (1=Broadcast, 2=Unicast) // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN Levanta(char* iph,char *mac, char* mar) + +bool Levanta(char *ptrIP[], char *ptrMacs[], int lon, char *mar) { - char *ptrIP[MAXIMOS_CLIENTES],*ptrMacs[MAXIMOS_CLIENTES]; - int i, lon, res; - SOCKET s; - BOOLEAN bOpt; + unsigned int on = 1; sockaddr_in local; - char modulo[] = "Levanta()"; + int i, res; + int s; /* Creación de socket para envío de magig packet */ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); - if (s == SOCKET_ERROR) { // Error al crear el socket del servicio - errorLog(modulo, 13, TRUE); - return (FALSE); + if (s < 0) { + syslog(LOG_ERR, "cannot create socket for magic packet\n"); + return false; } - bOpt = TRUE; // Pone el socket en modo Broadcast - res = setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *) &bOpt, sizeof(bOpt)); - if (res == SOCKET_ERROR) { - errorLog(modulo, 48, TRUE); - return (FALSE); + res = setsockopt(s, SOL_SOCKET, SO_BROADCAST, (unsigned int *) &on, + sizeof(on)); + if (res < 0) { + syslog(LOG_ERR, "cannot set broadcast socket\n"); + return false; } + memset(&local, 0, sizeof(local)); local.sin_family = AF_INET; - local.sin_port = htons((short) PUERTO_WAKEUP); - local.sin_addr.s_addr = htonl(INADDR_ANY); // cualquier interface - if (bind(s, (sockaddr *) &local, sizeof(local)) == SOCKET_ERROR) { - errorLog(modulo, 14, TRUE); - exit(EXIT_FAILURE); - } - /* fin creación de socket */ - lon = splitCadena(ptrIP, iph, ';'); - lon = splitCadena(ptrMacs, mac, ';'); + local.sin_port = htons(PUERTO_WAKEUP); + local.sin_addr.s_addr = htonl(INADDR_ANY); + for (i = 0; i < lon; i++) { - if (!WakeUp(&s,ptrIP[i],ptrMacs[i],mar)) { - errorLog(modulo, 49, TRUE); + if (!WakeUp(s, ptrIP[i], ptrMacs[i], mar)) { + syslog(LOG_ERR, "problem sending magic packet\n"); close(s); - return (FALSE); + return false; } } close(s); - return (TRUE); + return true; } + +#define OG_WOL_SEQUENCE 6 +#define OG_WOL_MACADDR_LEN 6 +#define OG_WOL_REPEAT 16 + +struct wol_msg { + char secuencia_FF[OG_WOL_SEQUENCE]; + char macbin[OG_WOL_REPEAT][OG_WOL_MACADDR_LEN]; +}; + +static bool wake_up_broadcast(int sd, struct sockaddr_in *client, + const struct wol_msg *msg) +{ + struct sockaddr_in *broadcast_addr; + struct ifaddrs *ifaddr, *ifa; + int ret; + + if (getifaddrs(&ifaddr) < 0) { + syslog(LOG_ERR, "cannot get list of addresses\n"); + return false; + } + + client->sin_addr.s_addr = htonl(INADDR_BROADCAST); + + for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == NULL || + ifa->ifa_addr->sa_family != AF_INET || + strcmp(ifa->ifa_name, interface) != 0) + continue; + + broadcast_addr = + (struct sockaddr_in *)ifa->ifa_ifu.ifu_broadaddr; + client->sin_addr.s_addr = broadcast_addr->sin_addr.s_addr; + break; + } + freeifaddrs(ifaddr); + + ret = sendto(sd, msg, sizeof(*msg), 0, + (sockaddr *)client, sizeof(*client)); + if (ret < 0) { + syslog(LOG_ERR, "failed to send broadcast wol\n"); + return false; + } + + return true; +} + +static bool wake_up_unicast(int sd, struct sockaddr_in *client, + const struct wol_msg *msg, + const struct in_addr *addr) +{ + int ret; + + client->sin_addr.s_addr = addr->s_addr; + + ret = sendto(sd, msg, sizeof(*msg), 0, + (sockaddr *)client, sizeof(*client)); + if (ret < 0) { + syslog(LOG_ERR, "failed to send unicast wol\n"); + return false; + } + + return true; +} + +enum wol_delivery_type { + OG_WOL_BROADCAST = 1, + OG_WOL_UNICAST = 2 +}; + //_____________________________________________________________________________________________________________ // Función: WakeUp // @@ -1533,25 +1339,29 @@ BOOLEAN Levanta(char* iph,char *mac, char* mar) // - mac : Cadena con la dirección mac en formato XXXXXXXXXXXX // - mar: Método de arranque (1=Broadcast, 2=Unicast) // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error //_____________________________________________________________________________________________________________ // -BOOLEAN WakeUp(SOCKET *s, char* iph,char *mac,char* mar) +bool WakeUp(int s, char* iph, char *mac, char *mar) { - int i, res; - char HDaddress_bin[6]; - struct { - BYTE secuencia_FF[6]; - char macbin[16][6]; - } Trama_WakeUp; - sockaddr_in WakeUpCliente; - char modulo[] = "WakeUp()"; + unsigned int macaddr[OG_WOL_MACADDR_LEN]; + char HDaddress_bin[OG_WOL_MACADDR_LEN]; + struct sockaddr_in WakeUpCliente; + struct wol_msg Trama_WakeUp; + struct in_addr addr; + bool ret; + int i; for (i = 0; i < 6; i++) // Primera secuencia de la trama Wake Up (0xFFFFFFFFFFFF) Trama_WakeUp.secuencia_FF[i] = 0xFF; - PasaHexBin(mac, HDaddress_bin); // Pasa a binario la MAC + sscanf(mac, "%02x%02x%02x%02x%02x%02x", + &macaddr[0], &macaddr[1], &macaddr[2], + &macaddr[3], &macaddr[4], &macaddr[5]); + + for (i = 0; i < 6; i++) + HDaddress_bin[i] = (uint8_t)macaddr[i]; for (i = 0; i < 16; i++) // Segunda secuencia de la trama Wake Up , repetir 16 veces su la MAC memcpy(&Trama_WakeUp.macbin[i][0], &HDaddress_bin, 6); @@ -1559,52 +1369,25 @@ BOOLEAN WakeUp(SOCKET *s, char* iph,char *mac,char* mar) /* Creación de socket del cliente que recibe la trama magic packet */ WakeUpCliente.sin_family = AF_INET; WakeUpCliente.sin_port = htons((short) PUERTO_WAKEUP); - if(atoi(mar)==2) - WakeUpCliente.sin_addr.s_addr = inet_addr(iph); // Para hacerlo con IP - else - WakeUpCliente.sin_addr.s_addr = htonl(INADDR_BROADCAST); // Para hacerlo con broadcast - res = sendto(*s, (char *) &Trama_WakeUp, sizeof(Trama_WakeUp), 0, - (sockaddr *) &WakeUpCliente, sizeof(WakeUpCliente)); - if (res == SOCKET_ERROR) { - errorLog(modulo, 26, FALSE); - return (FALSE); - } - return (TRUE); -} -//_____________________________________________________________________________________________________________ -// Función: PasaHexBin -// -// Descripción: -// Convierte a binario una dirección mac desde una cadena con formato XXXXXXXXXXXX -// -// Parámetros de entrada: -// - cadena : Cadena con el contenido de la mac -// - numero : la dirección mac convertida a binario (6 bytes) -//_____________________________________________________________________________________________________________ -void PasaHexBin(char *cadena, char *numero) { - int i, j, p; - char matrizHex[] = "0123456789ABCDEF"; - char Ucadena[12], aux; - - for (i = 0; i < 12; i++) - Ucadena[i] = toupper(cadena[i]); - p = 0; - for (i = 0; i < 12; i++) { - for (j = 0; j < 16; j++) { - if (Ucadena[i] == matrizHex[j]) { - if (i % 2) { - aux = numero[p]; - aux = (aux << 4); - numero[p] = j; - numero[p] = numero[p] | aux; - p++; - } else - numero[p] = j; - break; - } + switch (atoi(mar)) { + case OG_WOL_BROADCAST: + ret = wake_up_broadcast(s, &WakeUpCliente, &Trama_WakeUp); + break; + case OG_WOL_UNICAST: + if (inet_aton(iph, &addr) < 0) { + syslog(LOG_ERR, "bad IP address for unicast wol\n"); + ret = false; + break; } - } + ret = wake_up_unicast(s, &WakeUpCliente, &Trama_WakeUp, &addr); + break; + default: + syslog(LOG_ERR, "unknown wol type\n"); + ret = false; + break; + } + return ret; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_Arrancar @@ -1615,23 +1398,23 @@ void PasaHexBin(char *cadena, char *numero) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) { +static bool RESPUESTA_Arrancar(TRAMA* ptrTrama, struct og_client *cli) +{ char msglog[LONSTD]; Database db; Table tbl; int i; char *iph, *ido; char *tpc; - char modulo[] = "RESPUESTA_Arrancar()"; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip @@ -1640,8 +1423,8 @@ BOOLEAN RESPUESTA_Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) { if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + syslog(LOG_ERR, "failed to register notification\n"); + return false; } tpc = copiaParametro("tpc",ptrTrama); // Tipo de cliente (Plataforma y S.O.) @@ -1653,73 +1436,7 @@ BOOLEAN RESPUESTA_Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) { liberaMemoria(tpc); db.Close(); // Cierra conexión - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: Comando -// -// Descripción: -// Procesa un comando personalizado -// Parámetros: -// - socket_c: Socket de la consola al 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 Comando(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "Comando()"; - - if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); - } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: RESPUESTA_Comando -// -// Descripción: -// Respuesta del cliente al un comando personalizado -// 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 RESPUESTA_Comando(SOCKET *socket_c, TRAMA* ptrTrama) - { - char msglog[LONSTD]; - Database db; - Table tbl; - char *iph, *ido; - char modulo[] = "RESPUESTA_Comando()"; - - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); - db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); - } - - iph = copiaParametro("iph",ptrTrama); // Toma dirección ip - ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador - - if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { - liberaMemoria(iph); - liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion - } - liberaMemoria(iph); - liberaMemoria(ido); - db.Close(); // Cierra conexión - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: Apagar @@ -1730,21 +1447,17 @@ BOOLEAN RESPUESTA_Comando(SOCKET *socket_c, TRAMA* ptrTrama) // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN Apagar(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "Apagar()"; - +static bool Apagar(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_Apagar @@ -1755,22 +1468,22 @@ BOOLEAN Apagar(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_Apagar(SOCKET *socket_c, TRAMA* ptrTrama) { +static bool RESPUESTA_Apagar(TRAMA* ptrTrama, struct og_client *cli) +{ char msglog[LONSTD]; Database db; Table tbl; int i; char *iph, *ido; - char modulo[] = "RESPUESTA_Apagar()"; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip @@ -1779,8 +1492,8 @@ BOOLEAN RESPUESTA_Apagar(SOCKET *socket_c, TRAMA* ptrTrama) { if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + syslog(LOG_ERR, "failed to register notification\n"); + return false; // Error al registrar notificacion } if (clienteExistente(iph, &i)) // Actualiza estado @@ -1790,32 +1503,7 @@ BOOLEAN RESPUESTA_Apagar(SOCKET *socket_c, TRAMA* ptrTrama) { liberaMemoria(ido); db.Close(); // Cierra conexión - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: Reiniciar -// -// Descripción: -// Procesa el comando Reiniciar -// Parámetros: -// - socket_c: Socket de la consola al 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 Reiniciar(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "Reiniciar()"; - - if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); - } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_Reiniciar @@ -1826,22 +1514,22 @@ BOOLEAN Reiniciar(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_Reiniciar(SOCKET *socket_c, TRAMA* ptrTrama) { +static bool RESPUESTA_Reiniciar(TRAMA* ptrTrama, struct og_client *cli) +{ char msglog[LONSTD]; Database db; Table tbl; int i; char *iph, *ido; - char modulo[] = "RESPUESTA_Reiniciar()"; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip @@ -1850,8 +1538,8 @@ BOOLEAN RESPUESTA_Reiniciar(SOCKET *socket_c, TRAMA* ptrTrama) { if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + syslog(LOG_ERR, "failed to register notification\n"); + return false; // Error al registrar notificacion } if (clienteExistente(iph, &i)) // Actualiza estado @@ -1861,32 +1549,7 @@ BOOLEAN RESPUESTA_Reiniciar(SOCKET *socket_c, TRAMA* ptrTrama) { liberaMemoria(ido); db.Close(); // Cierra conexión - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: IniciarSesion -// -// Descripción: -// Procesa el comando Iniciar Sesión -// Parámetros: -// - socket_c: Socket de la consola al 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 IniciarSesion(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "IniciarSesion()"; - - if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); - } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_IniciarSesion @@ -1897,22 +1560,22 @@ BOOLEAN IniciarSesion(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_IniciarSesion(SOCKET *socket_c, TRAMA* ptrTrama) { +static bool RESPUESTA_IniciarSesion(TRAMA* ptrTrama, struct og_client *cli) +{ char msglog[LONSTD]; Database db; Table tbl; int i; char *iph, *ido; - char modulo[] = "RESPUESTA_IniciarSesion()"; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip @@ -1921,8 +1584,8 @@ BOOLEAN RESPUESTA_IniciarSesion(SOCKET *socket_c, TRAMA* ptrTrama) { if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + syslog(LOG_ERR, "failed to register notification\n"); + return false; // Error al registrar notificacion } if (clienteExistente(iph, &i)) // Actualiza estado @@ -1932,7 +1595,7 @@ BOOLEAN RESPUESTA_IniciarSesion(SOCKET *socket_c, TRAMA* ptrTrama) { liberaMemoria(ido); db.Close(); // Cierra conexión - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: CrearImagen @@ -1943,21 +1606,17 @@ BOOLEAN RESPUESTA_IniciarSesion(SOCKET *socket_c, TRAMA* ptrTrama) { // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "CrearImagen()"; - +static bool CrearImagen(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_CrearImagen @@ -1968,24 +1627,23 @@ BOOLEAN CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) +static bool RESPUESTA_CrearImagen(TRAMA* ptrTrama, struct og_client *cli) { char msglog[LONSTD]; Database db; Table tbl; char *iph, *dsk, *par, *cpt, *ipr, *ido; char *idi; - BOOLEAN res; - char modulo[] = "RESPUESTA_CrearImagen()"; + bool res; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip @@ -1994,8 +1652,8 @@ BOOLEAN RESPUESTA_CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + syslog(LOG_ERR, "failed to register notification\n"); + return false; // Error al registrar notificacion } // Acciones posteriores @@ -2011,15 +1669,15 @@ BOOLEAN RESPUESTA_CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) liberaMemoria(par); liberaMemoria(cpt); liberaMemoria(ipr); - + if(!res){ - errorLog(modulo, 94, FALSE); - db.Close(); // Cierra conexión - return (FALSE); + syslog(LOG_ERR, "Problem processing update\n"); + db.Close(); + return false; } db.Close(); // Cierra conexión - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: actualizaCreacionImagen @@ -2036,13 +1694,13 @@ BOOLEAN RESPUESTA_CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) // - ipr: Ip del repositorio // - ido: Identificador del ordenador modelo // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN actualizaCreacionImagen(Database db, Table tbl, char* idi, char* dsk, - char* par, char* cpt, char* ipr, char *ido) { +bool actualizaCreacionImagen(Database db, Table tbl, char *idi, char *dsk, + char *par, char *cpt, char *ipr, char *ido) +{ char msglog[LONSTD], sqlstr[LONSQL]; - char modulo[] = "actualizaCreacionImagen()"; int idr,ifs; /* Toma identificador del repositorio correspondiente al ordenador modelo */ @@ -2052,16 +1710,16 @@ BOOLEAN actualizaCreacionImagen(Database db, Table tbl, char* idi, char* dsk, " LEFT JOIN ordenadores USING (idrepositorio)" " WHERE repositorios.ip='%s' AND ordenadores.idordenador=%s", ipr, ido); - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } if (!tbl.Get("idrepositorio", idr)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } /* Toma identificador del perfilsoftware */ @@ -2070,16 +1728,16 @@ BOOLEAN actualizaCreacionImagen(Database db, Table tbl, char* idi, char* dsk, " FROM ordenadores_particiones" " WHERE idordenador=%s AND numdisk=%s AND numpar=%s", ido, dsk, par); - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } if (!tbl.Get("idperfilsoft", ifs)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } /* Actualizar los datos de la imagen */ @@ -2090,11 +1748,11 @@ BOOLEAN actualizaCreacionImagen(Database db, Table tbl, char* idi, char* dsk, " fechacreacion=NOW(), revision=revision+1" " WHERE idimagen=%s", ido, dsk, par, cpt, ifs, idr, idi); - if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } /* Actualizar los datos en el cliente */ snprintf(sqlstr, LONSQL, @@ -2103,13 +1761,13 @@ BOOLEAN actualizaCreacionImagen(Database db, Table tbl, char* idi, char* dsk, " fechadespliegue=NOW()" " WHERE idordenador=%s AND numdisk=%s AND numpar=%s", idi, idi, ido, dsk, par); - if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: CrearImagenBasica @@ -2120,21 +1778,17 @@ BOOLEAN actualizaCreacionImagen(Database db, Table tbl, char* idi, char* dsk, // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN CrearImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "CrearImagenBasica()"; - +static bool CrearImagenBasica(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_CrearImagenBasica @@ -2145,11 +1799,13 @@ BOOLEAN CrearImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_CrearImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) { - return(RESPUESTA_CrearImagen(socket_c,ptrTrama)); // La misma respuesta que la creación de imagen monolítica +static bool RESPUESTA_CrearImagenBasica(TRAMA* ptrTrama, struct og_client *cli) +{ + // La misma respuesta que la creación de imagen monolítica + return RESPUESTA_CrearImagen(ptrTrama, cli); } // ________________________________________________________________________________________________________ // Función: CrearSoftIncremental @@ -2161,21 +1817,17 @@ BOOLEAN RESPUESTA_CrearImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) { // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN CrearSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "CrearSoftIncremental()"; - +static bool CrearSoftIncremental(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_CrearSoftIncremental @@ -2186,23 +1838,22 @@ BOOLEAN CrearSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_CrearSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) +static bool RESPUESTA_CrearSoftIncremental(TRAMA* ptrTrama, struct og_client *cli) { Database db; Table tbl; char *iph,*par,*ido,*idf; int ifs; char msglog[LONSTD],sqlstr[LONSQL]; - char modulo[] = "RESPUESTA_CrearSoftIncremental()"; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip @@ -2210,9 +1861,9 @@ BOOLEAN RESPUESTA_CrearSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); - liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + liberaMemoria(ido); + syslog(LOG_ERR, "failed to register notification\n"); + return false; } par = copiaParametro("par",ptrTrama); @@ -2223,75 +1874,32 @@ BOOLEAN RESPUESTA_CrearSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) liberaMemoria(iph); liberaMemoria(ido); liberaMemoria(par); - - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } if (!tbl.Get("idperfilsoft", ifs)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } /* Actualizar los datos de la imagen */ idf = copiaParametro("idf",ptrTrama); sprintf(sqlstr,"UPDATE imagenes SET idperfilsoft=%d WHERE idimagen=%s",ifs,idf); liberaMemoria(idf); - - if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos - errorLog(modulo, 21, FALSE); - db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); - } - db.Close(); // Cierra conexión - return (TRUE); -} -// ________________________________________________________________________________________________________ -// Función: actualizaCreacionSoftIncremental -// -// Descripción: -// Esta función actualiza la base de datos con el resultado de la creación de software incremental -// Parámetros: -// - db: Objeto base de datos (ya operativo) -// - tbl: Objeto tabla -// - idi: Identificador de la imagen -// - idf: Identificador del software incremental -// Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error -// ________________________________________________________________________________________________________ -BOOLEAN actualizaCreacionSoftIncremental(Database db, Table tbl, char* idi,char* idf) -{ - char msglog[LONSTD], sqlstr[LONSQL]; - char modulo[] = "actualizaCreacionSoftIncremental()"; - - /* Comprueba si existe ya relación entre la imagen y el software incremental */ - sprintf(sqlstr, "SELECT * FROM imagenes_softincremental" - " WHERE idimagen=%s AND idsoftincremental=%s", idi,idf); - - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); - db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); - } - if (!tbl.ISEOF()) - return (TRUE); // Ya existe relación - - // Crea relación entre la imagen y el software incremental - sprintf(sqlstr,"INSERT INTO imagenes_softincremental (idimagen,idsoftincremental) VALUES (%s,%s)",idi,idf); - if (!db.Execute(sqlstr, tbl)) { // Error al ejecutar la sentencia - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } - return (TRUE); + db.Close(); // Cierra conexión + return true; } // ________________________________________________________________________________________________________ // Función: RestaurarImagen @@ -2302,21 +1910,17 @@ BOOLEAN actualizaCreacionSoftIncremental(Database db, Table tbl, char* idi,char* // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "RestaurarImagen()"; - +static bool RestaurarImagen(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RestaurarImagenBasica @@ -2327,21 +1931,17 @@ BOOLEAN RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) { // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RestaurarImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "RestaurarImagenBasica()"; - +static bool RestaurarImagenBasica(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RestaurarSoftIncremental @@ -2352,21 +1952,17 @@ BOOLEAN RestaurarImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) { // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RestaurarSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "RestaurarSoftIncremental()"; - +static bool RestaurarSoftIncremental(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_RestaurarImagen @@ -2377,24 +1973,23 @@ BOOLEAN RestaurarSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ // -BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) +static bool RESPUESTA_RestaurarImagen(TRAMA* ptrTrama, struct og_client *cli) { char msglog[LONSTD]; Database db; Table tbl; - BOOLEAN res; + bool res; char *iph, *ido, *idi, *dsk, *par, *ifs, *cfg; - char modulo[] = "RESPUESTA_RestaurarImagen()"; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip @@ -2402,9 +1997,9 @@ BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); - liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + liberaMemoria(ido); + syslog(LOG_ERR, "failed to register notification\n"); + return false; } // Acciones posteriores @@ -2426,13 +2021,13 @@ BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) liberaMemoria(ifs); if(!res){ - errorLog(modulo, 95, FALSE); - db.Close(); // Cierra conexión - return (FALSE); + syslog(LOG_ERR, "Problem after restoring image\n"); + db.Close(); + return false; } db.Close(); // Cierra conexión - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // @@ -2444,12 +2039,13 @@ BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ // -BOOLEAN RESPUESTA_RestaurarImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) { - return(RESPUESTA_RestaurarImagen(socket_c,ptrTrama)); +static bool RESPUESTA_RestaurarImagenBasica(TRAMA* ptrTrama, struct og_client *cli) +{ + return RESPUESTA_RestaurarImagen(ptrTrama, cli); } // ________________________________________________________________________________________________________ // Función: RESPUESTA_RestaurarSoftIncremental @@ -2460,11 +2056,12 @@ BOOLEAN RESPUESTA_RestaurarImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_RestaurarSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) { - return(RESPUESTA_RestaurarImagen(socket_c,ptrTrama)); +static bool RESPUESTA_RestaurarSoftIncremental(TRAMA* ptrTrama, struct og_client *cli) +{ + return RESPUESTA_RestaurarImagen(ptrTrama, cli); } // ________________________________________________________________________________________________________ // Función: actualizaRestauracionImagen @@ -2480,13 +2077,13 @@ BOOLEAN RESPUESTA_RestaurarSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) { // - ido: Identificador del cliente donde se restauró // - ifs: Identificador del perfil software contenido en la imagen // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN actualizaRestauracionImagen(Database db, Table tbl, char* idi, - char* dsk, char* par, char* ido, char* ifs) { +bool actualizaRestauracionImagen(Database db, Table tbl, char *idi, + char *dsk, char *par, char *ido, char *ifs) +{ char msglog[LONSTD], sqlstr[LONSQL]; - char modulo[] = "actualizaRestauracionImagen()"; /* Actualizar los datos de la imagen */ snprintf(sqlstr, LONSQL, @@ -2496,13 +2093,13 @@ BOOLEAN actualizaRestauracionImagen(Database db, Table tbl, char* idi, " idnombreso=IFNULL((SELECT idnombreso FROM perfilessoft WHERE idperfilsoft=%s),0)" " WHERE idordenador=%s AND numdisk=%s AND numpar=%s", idi, ifs, idi, ifs, ido, dsk, par); - if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: Configurar @@ -2513,21 +2110,17 @@ BOOLEAN actualizaRestauracionImagen(Database db, Table tbl, char* idi, // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN Configurar(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "Configurar()"; - +static bool Configurar(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_Configurar @@ -2538,24 +2131,23 @@ BOOLEAN Configurar(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ // -BOOLEAN RESPUESTA_Configurar(SOCKET *socket_c, TRAMA* ptrTrama) +static bool RESPUESTA_Configurar(TRAMA* ptrTrama, struct og_client *ci) { char msglog[LONSTD]; Database db; Table tbl; - BOOLEAN res; + bool res; char *iph, *ido,*cfg; - char modulo[] = "RESPUESTA_Configurar()"; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip @@ -2563,9 +2155,9 @@ BOOLEAN RESPUESTA_Configurar(SOCKET *socket_c, TRAMA* ptrTrama) if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); - liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + liberaMemoria(ido); + syslog(LOG_ERR, "failed to register notification\n"); + return false; } cfg = copiaParametro("cfg",ptrTrama); // Toma configuración de particiones @@ -2574,14 +2166,14 @@ BOOLEAN RESPUESTA_Configurar(SOCKET *socket_c, TRAMA* ptrTrama) liberaMemoria(iph); liberaMemoria(ido); liberaMemoria(cfg); - - if(!res){ - errorLog(modulo, 24, FALSE); - return (FALSE); // Error al registrar notificacion + + if(!res){ + syslog(LOG_ERR, "Problem updating client configuration\n"); + return false; } - + db.Close(); // Cierra conexión - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: EjecutarScript @@ -2592,21 +2184,17 @@ BOOLEAN RESPUESTA_Configurar(SOCKET *socket_c, TRAMA* ptrTrama) // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN EjecutarScript(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "EjecutarScript()"; - +static bool EjecutarScript(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_EjecutarScript @@ -2617,23 +2205,21 @@ BOOLEAN EjecutarScript(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_EjecutarScript(SOCKET *socket_c, TRAMA* ptrTrama) +static bool RESPUESTA_EjecutarScript(TRAMA* ptrTrama, struct og_client *cli) { char msglog[LONSTD]; Database db; Table tbl; char *iph, *ido,*cfg; - char modulo[] = "RESPUESTA_EjecutarScript()"; - - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip @@ -2641,9 +2227,9 @@ BOOLEAN RESPUESTA_EjecutarScript(SOCKET *socket_c, TRAMA* ptrTrama) if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); - liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + liberaMemoria(ido); + syslog(LOG_ERR, "failed to register notification\n"); + return false; } cfg = copiaParametro("cfg",ptrTrama); // Toma configuración de particiones @@ -2657,7 +2243,7 @@ BOOLEAN RESPUESTA_EjecutarScript(SOCKET *socket_c, TRAMA* ptrTrama) db.Close(); // Cierra conexión - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: InventarioHardware @@ -2668,21 +2254,17 @@ BOOLEAN RESPUESTA_EjecutarScript(SOCKET *socket_c, TRAMA* ptrTrama) // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN InventarioHardware(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "InventarioHardware()"; - +static bool InventarioHardware(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_InventarioHardware @@ -2693,22 +2275,22 @@ BOOLEAN InventarioHardware(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_InventarioHardware(SOCKET *socket_c, TRAMA* ptrTrama) { +static bool RESPUESTA_InventarioHardware(TRAMA* ptrTrama, struct og_client *cli) +{ char msglog[LONSTD]; Database db; Table tbl; - BOOLEAN res; + bool res; char *iph, *ido, *idc, *npc, *hrd, *buffer; - char modulo[] = "RESPUESTA_InventarioHardware()"; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip del cliente @@ -2716,9 +2298,9 @@ BOOLEAN RESPUESTA_InventarioHardware(SOCKET *socket_c, TRAMA* ptrTrama) { if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); - liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + liberaMemoria(ido); + syslog(LOG_ERR, "failed to register notification\n"); + return false; } // Lee archivo de inventario enviado anteriormente hrd = copiaParametro("hrd",ptrTrama); @@ -2737,12 +2319,12 @@ BOOLEAN RESPUESTA_InventarioHardware(SOCKET *socket_c, TRAMA* ptrTrama) { liberaMemoria(buffer); if(!res){ - errorLog(modulo, 53, FALSE); - return (FALSE); + syslog(LOG_ERR, "Problem updating client configuration\n"); + return false; } db.Close(); // Cierra conexión - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: actualizaHardware @@ -2758,7 +2340,8 @@ BOOLEAN RESPUESTA_InventarioHardware(SOCKET *socket_c, TRAMA* ptrTrama) { // - idc: Identificador del centro o Unidad organizativa // ________________________________________________________________________________________________________ // -BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,char* npc, char *idc) +bool actualizaHardware(Database db, Table tbl, char *hrd, char *ido, char *npc, + char *idc) { char msglog[LONSTD], sqlstr[LONSQL]; int idtipohardware, idperfilhard; @@ -2767,25 +2350,24 @@ BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,char* npc, char *whard; int tbidhardware[MAXHARDWARE]; char *tbHardware[MAXHARDWARE],*dualHardware[2], descripcion[250], strInt[LONINT], *idhardwares; - char modulo[] = "actualizaHardware()"; /* Toma Centro (Unidad Organizativa) */ sprintf(sqlstr, "SELECT * FROM ordenadores WHERE idordenador=%s", ido); - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } if (!tbl.Get("idperfilhard", idperfilhard)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } whard=escaparCadena(hrd); // Codificar comillas simples if(!whard) - return (FALSE); + return false; /* Recorre componentes hardware*/ lon = splitCadena(tbHardware, whard, '\n'); if (lon > MAXHARDWARE) @@ -2793,49 +2375,48 @@ BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,char* npc, /* for (i=0;i<lon;i++){ sprintf(msglog,"Linea de inventario: %s",tbHardware[i]); - RegistraLog(msglog,FALSE); + RegistraLog(msglog,false); } */ for (i = 0; i < lon; i++) { splitCadena(dualHardware, rTrim(tbHardware[i]), '='); //sprintf(msglog,"nemonico: %s",dualHardware[0]); - //RegistraLog(msglog,FALSE); + //RegistraLog(msglog,false); //sprintf(msglog,"valor: %s",dualHardware[1]); - //RegistraLog(msglog,FALSE); + //RegistraLog(msglog,false); sprintf(sqlstr, "SELECT idtipohardware,descripcion FROM tipohardwares " " WHERE nemonico='%s'", dualHardware[0]); - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } if (tbl.ISEOF()) { // Tipo de Hardware NO existente sprintf(msglog, "%s: %s)", tbErrores[54], dualHardware[0]); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } else { // Tipo de Hardware Existe if (!tbl.Get("idtipohardware", idtipohardware)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (!tbl.Get("descripcion", descripcion)) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } sprintf(sqlstr, "SELECT idhardware FROM hardwares " " WHERE idtipohardware=%d AND descripcion='%s'", idtipohardware, dualHardware[1]); - // Ejecuta consulta - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } if (tbl.ISEOF()) { // Hardware NO existente @@ -2844,29 +2425,29 @@ BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,char* npc, dualHardware[1], idc); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } // Recupera el identificador del hardware sprintf(sqlstr, "SELECT LAST_INSERT_ID() as identificador"); - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } if (!tbl.ISEOF()) { // Si existe registro if (!tbl.Get("identificador", tbidhardware[i])) { tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } } } else { if (!tbl.Get("idhardware", tbidhardware[i])) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } } } @@ -2887,8 +2468,8 @@ BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,char* npc, aux = strlen(strInt); // Calcula longitud de cadena para reservar espacio a todos los perfiles idhardwares = reservaMemoria(sizeof(aux) * lon + lon); if (idhardwares == NULL) { - errorLog(modulo, 3, FALSE); - return (FALSE); + syslog(LOG_ERR, "%s:%d OOM\n", __FILE__, __LINE__); + return false; } aux = sprintf(idhardwares, "%d", tbidhardware[0]); for (i = 1; i < lon; i++) @@ -2896,12 +2477,11 @@ BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,char* npc, if (!cuestionPerfilHardware(db, tbl, idc, ido, idperfilhard, idhardwares, npc, tbidhardware, lon)) { - errorLog(modulo, 55, FALSE); - errorInfo(modulo, msglog); - retval=FALSE; + syslog(LOG_ERR, "Problem updating client hardware\n"); + retval=false; } else { - retval=TRUE; + retval=true; } liberaMemoria(whard); liberaMemoria(idhardwares); @@ -2921,19 +2501,18 @@ BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,char* npc, // - con: Número de componentes detectados para configurar un el perfil hardware // - npc: Nombre del cliente // ________________________________________________________________________________________________________ -BOOLEAN cuestionPerfilHardware(Database db, Table tbl, char* idc, char* ido, - int idperfilhardware, char*idhardwares, char *npc, int *tbidhardware, +bool cuestionPerfilHardware(Database db, Table tbl, char *idc, char *ido, + int idperfilhardware, char *idhardwares, char *npc, int *tbidhardware, int lon) { char msglog[LONSTD], *sqlstr; int i; int nwidperfilhard; - char modulo[] = "cuestionPerfilHardware()"; sqlstr = reservaMemoria(strlen(idhardwares)+LONSQL); // Reserva para escribir sentencia SQL if (sqlstr == NULL) { - errorLog(modulo, 3, FALSE); - return (FALSE); + syslog(LOG_ERR, "%s:%d OOM\n", __FILE__, __LINE__); + return false; } // Busca perfil hard del ordenador que contenga todos los componentes hardware encontrados sprintf(sqlstr, "SELECT idperfilhard FROM" @@ -2943,37 +2522,37 @@ BOOLEAN cuestionPerfilHardware(Database db, Table tbl, char* idc, char* ido, " FROM perfileshard_hardwares" " GROUP BY perfileshard_hardwares.idperfilhard) AS temp" " WHERE idhardwares LIKE '%s'", idhardwares); - // Ejecuta consulta - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); liberaMemoria(sqlstr); - return (false); + return false; } if (tbl.ISEOF()) { // No existe un perfil hardware con esos componentes de componentes hardware, lo crea sprintf(sqlstr, "INSERT perfileshard (descripcion,idcentro,grupoid)" " VALUES('Perfil hardware (%s) ',%s,0)", npc, idc); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } // Recupera el identificador del nuevo perfil hardware sprintf(sqlstr, "SELECT LAST_INSERT_ID() as identificador"); if (!db.Execute(sqlstr, tbl)) { // Error al leer db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } if (!tbl.ISEOF()) { // Si existe registro if (!tbl.Get("identificador", nwidperfilhard)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } } // Crea la relación entre perfiles y componenetes hardware @@ -2982,17 +2561,17 @@ BOOLEAN cuestionPerfilHardware(Database db, Table tbl, char* idc, char* ido, " VALUES(%d,%d)", nwidperfilhard, tbidhardware[i]); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } } } else { // Existe un perfil con todos esos componentes if (!tbl.Get("idperfilhard", nwidperfilhard)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } } if (idperfilhardware != nwidperfilhard) { // No coinciden los perfiles @@ -3001,9 +2580,9 @@ BOOLEAN cuestionPerfilHardware(Database db, Table tbl, char* idc, char* ido, " WHERE idordenador=%s", nwidperfilhard, ido); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } } /* Eliminar Relación de hardwares con Perfiles hardware que quedan húerfanos */ @@ -3012,9 +2591,9 @@ BOOLEAN cuestionPerfilHardware(Database db, Table tbl, char* idc, char* ido, " (SELECT DISTINCT idperfilhard from ordenadores))"); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } /* Eliminar Perfiles hardware que quedan húerfanos */ @@ -3022,21 +2601,21 @@ BOOLEAN cuestionPerfilHardware(Database db, Table tbl, char* idc, char* ido, " (SELECT DISTINCT idperfilhard FROM ordenadores)"); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } /* Eliminar Relación de hardwares con Perfiles hardware que quedan húerfanos */ sprintf(sqlstr, "DELETE FROM perfileshard_hardwares WHERE idperfilhard NOT IN" " (SELECT idperfilhard FROM perfileshard)"); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } liberaMemoria(sqlstr); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: InventarioSoftware @@ -3047,21 +2626,17 @@ BOOLEAN cuestionPerfilHardware(Database db, Table tbl, char* idc, char* ido, // - socket_c: Socket de la consola al 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN InventarioSoftware(SOCKET *socket_c, TRAMA* ptrTrama) { - char msglog[LONSTD]; - char modulo[] = "InventarioSoftware()"; - +static bool InventarioSoftware(TRAMA* ptrTrama, struct og_client *cli) +{ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - respuestaConsola(socket_c, ptrTrama, FALSE); - return (FALSE); + respuestaConsola(og_client_socket(cli), ptrTrama, false); + return false; } - respuestaConsola(socket_c, ptrTrama, TRUE); - return (TRUE); + respuestaConsola(og_client_socket(cli), ptrTrama, true); + return true; } // ________________________________________________________________________________________________________ // Función: RESPUESTA_InventarioSoftware @@ -3072,22 +2647,22 @@ BOOLEAN InventarioSoftware(SOCKET *socket_c, TRAMA* ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN RESPUESTA_InventarioSoftware(SOCKET *socket_c, TRAMA* ptrTrama) { +static bool RESPUESTA_InventarioSoftware(TRAMA* ptrTrama, struct og_client *cli) +{ char msglog[LONSTD]; Database db; Table tbl; - BOOLEAN res; + bool res; char *iph, *ido, *npc, *idc, *par, *sft, *buffer; - char modulo[] = "RESPUESTA_InventarioSoftware()"; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } iph = copiaParametro("iph",ptrTrama); // Toma dirección ip @@ -3095,11 +2670,11 @@ BOOLEAN RESPUESTA_InventarioSoftware(SOCKET *socket_c, TRAMA* ptrTrama) { if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) { liberaMemoria(iph); - liberaMemoria(ido); - errorLog(modulo, 30, FALSE); - return (FALSE); // Error al registrar notificacion + liberaMemoria(ido); + syslog(LOG_ERR, "failed to register notification\n"); + return false; } - + npc = copiaParametro("npc",ptrTrama); idc = copiaParametro("idc",ptrTrama); // Toma identificador del Centro par = copiaParametro("par",ptrTrama); @@ -3117,12 +2692,12 @@ BOOLEAN RESPUESTA_InventarioSoftware(SOCKET *socket_c, TRAMA* ptrTrama) { liberaMemoria(sft); if(!res){ - errorLog(modulo, 82, FALSE); - return (FALSE); - } - + syslog(LOG_ERR, "cannot update software\n"); + return false; + } + db.Close(); // Cierra conexión - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: actualizaSoftware @@ -3138,43 +2713,43 @@ BOOLEAN RESPUESTA_InventarioSoftware(SOCKET *socket_c, TRAMA* ptrTrama) { // - npc: Nombre del ordenador // - idc: Identificador del centro o Unidad organizativa // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // // Versión 1.1.0: Se incluye el sistema operativo. Autora: Irina Gómez - ETSII Universidad Sevilla // ________________________________________________________________________________________________________ -BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,char* ido, char* npc, char* idc) +bool actualizaSoftware(Database db, Table tbl, char *sft, char *par,char *ido, + char *npc, char *idc) { int i, j, lon, aux, idperfilsoft, idnombreso; bool retval; char *wsft; int tbidsoftware[MAXSOFTWARE]; char *tbSoftware[MAXSOFTWARE],msglog[LONSTD], sqlstr[LONSQL], strInt[LONINT], *idsoftwares; - char modulo[] = "actualizaSoftware()"; /* Toma Centro (Unidad Organizativa) y perfil software */ sprintf(sqlstr, "SELECT idperfilsoft,numpar" " FROM ordenadores_particiones" " WHERE idordenador=%s", ido); - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } idperfilsoft = 0; // Por defecto se supone que el ordenador no tiene aún detectado el perfil software while (!tbl.ISEOF()) { // Recorre particiones if (!tbl.Get("numpar", aux)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (aux == atoi(par)) { // Se encuentra la partición if (!tbl.Get("idperfilsoft", idperfilsoft)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } break; } @@ -3182,13 +2757,13 @@ BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,char* ido } wsft=escaparCadena(sft); // Codificar comillas simples if(!wsft) - return (FALSE); + return false; /* Recorre componentes software*/ lon = splitCadena(tbSoftware, wsft, '\n'); if (lon == 0) - return (true); // No hay lineas que procesar + return true; // No hay lineas que procesar if (lon > MAXSOFTWARE) lon = MAXSOFTWARE; // Limita el número de componentes software @@ -3203,12 +2778,11 @@ BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,char* ido "SELECT idsoftware FROM softwares WHERE descripcion ='%s'", rTrim(tbSoftware[i])); - // Ejecuta consulta - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } if (tbl.ISEOF()) { // Software NO existente @@ -3217,28 +2791,28 @@ BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,char* ido if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } // Recupera el identificador del software sprintf(sqlstr, "SELECT LAST_INSERT_ID() as identificador"); if (!db.Execute(sqlstr, tbl)) { // Error al leer db.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } if (!tbl.ISEOF()) { // Si existe registro if (!tbl.Get("identificador", tbidsoftware[i])) { tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } } } else { if (!tbl.Get("idsoftware", tbidsoftware[i])) { // Toma dato tbl.GetErrorErrStr(msglog); // Error al acceder al registro - errorInfo(modulo, msglog); - return (FALSE); + og_info(msglog); + return false; } } } @@ -3259,8 +2833,8 @@ BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,char* ido aux = strlen(strInt); // Calcula longitud de cadena para reservar espacio a todos los perfiles idsoftwares = reservaMemoria((sizeof(aux)+1) * lon + lon); if (idsoftwares == NULL) { - errorLog(modulo, 3, FALSE); - return (FALSE); + syslog(LOG_ERR, "%s:%d OOM\n", __FILE__, __LINE__); + return false; } aux = sprintf(idsoftwares, "%d", tbidsoftware[0]); for (i = 1; i < lon; i++) @@ -3269,12 +2843,12 @@ BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,char* ido // Comprueba existencia de perfil software y actualización de éste para el ordenador if (!cuestionPerfilSoftware(db, tbl, idc, ido, idperfilsoft, idnombreso, idsoftwares, npc, par, tbidsoftware, lon)) { - errorLog(modulo, 83, FALSE); - errorInfo(modulo, msglog); - retval=FALSE; + syslog(LOG_ERR, "cannot update software\n"); + og_info(msglog); + retval=false; } else { - retval=TRUE; + retval=true; } liberaMemoria(wsft); liberaMemoria(idsoftwares); @@ -3295,22 +2869,23 @@ BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,char* ido // - tbidsoftware: Array con los identificadores de componentes software // - lon: Número de componentes // Devuelve: -// TRUE: Si el proceso es correcto -// FALSE: En caso de ocurrir algún error +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // // Versión 1.1.0: Se incluye el sistema operativo. Autora: Irina Gómez - ETSII Universidad Sevilla //_________________________________________________________________________________________________________ -BOOLEAN cuestionPerfilSoftware(Database db, Table tbl, char* idc, char* ido, - int idperfilsoftware, int idnombreso, char *idsoftwares, char *npc, char *par, - int *tbidsoftware, int lon) { +bool cuestionPerfilSoftware(Database db, Table tbl, char *idc, char *ido, + int idperfilsoftware, int idnombreso, + char *idsoftwares, char *npc, char *par, + int *tbidsoftware, int lon) +{ char *sqlstr, msglog[LONSTD]; int i, nwidperfilsoft; - char modulo[] = "cuestionPerfilSoftware()"; sqlstr = reservaMemoria(strlen(idsoftwares)+LONSQL); // Reserva para escribir sentencia SQL if (sqlstr == NULL) { - errorLog(modulo, 3, FALSE); - return (FALSE); + syslog(LOG_ERR, "%s:%d OOM\n", __FILE__, __LINE__); + return false; } // Busca perfil soft del ordenador que contenga todos los componentes software encontrados sprintf(sqlstr, "SELECT idperfilsoft FROM" @@ -3320,36 +2895,36 @@ BOOLEAN cuestionPerfilSoftware(Database db, Table tbl, char* idc, char* ido, " FROM perfilessoft_softwares" " GROUP BY perfilessoft_softwares.idperfilsoft) AS temp" " WHERE idsoftwares LIKE '%s'", idsoftwares); - // Ejecuta consulta - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); liberaMemoria(sqlstr); - return (false); + return false; } if (tbl.ISEOF()) { // No existe un perfil software con esos componentes de componentes software, lo crea sprintf(sqlstr, "INSERT perfilessoft (descripcion, idcentro, grupoid, idnombreso)" " VALUES('Perfil Software (%s, Part:%s) ',%s,0,%i)", npc, par, idc,idnombreso); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (false); + og_info(msglog); + return false; } // Recupera el identificador del nuevo perfil software sprintf(sqlstr, "SELECT LAST_INSERT_ID() as identificador"); if (!db.Execute(sqlstr, tbl)) { // Error al leer tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } if (!tbl.ISEOF()) { // Si existe registro if (!tbl.Get("identificador", nwidperfilsoft)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } } // Crea la relación entre perfiles y componenetes software @@ -3358,17 +2933,17 @@ BOOLEAN cuestionPerfilSoftware(Database db, Table tbl, char* idc, char* ido, " VALUES(%d,%d)", nwidperfilsoft, tbidsoftware[i]); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } } } else { // Existe un perfil con todos esos componentes if (!tbl.Get("idperfilsoft", nwidperfilsoft)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } } @@ -3378,9 +2953,9 @@ BOOLEAN cuestionPerfilSoftware(Database db, Table tbl, char* idc, char* ido, " WHERE idordenador=%s AND numpar=%s", nwidperfilsoft, ido, par); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } } @@ -3393,9 +2968,9 @@ BOOLEAN cuestionPerfilSoftware(Database db, Table tbl, char* idc, char* ido, " (SELECT DISTINCT idperfilsoft from imagenes))"); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } /* Eliminar Perfiles software que quedan húerfanos */ sprintf(sqlstr, "DELETE FROM perfilessoft WHERE idperfilsoft NOT IN" @@ -3404,21 +2979,21 @@ BOOLEAN cuestionPerfilSoftware(Database db, Table tbl, char* idc, char* ido, " (SELECT DISTINCT idperfilsoft from imagenes)"); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } /* Eliminar Relación de softwares con Perfiles software que quedan húerfanos */ sprintf(sqlstr, "DELETE FROM perfilessoft_softwares WHERE idperfilsoft NOT IN" " (SELECT idperfilsoft from perfilessoft)"); if (!db.Execute(sqlstr, tbl)) { // Error al insertar db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); + og_info(msglog); liberaMemoria(sqlstr); - return (false); + return false; } liberaMemoria(sqlstr); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: enviaArchivo @@ -3429,22 +3004,23 @@ BOOLEAN cuestionPerfilSoftware(Database db, Table tbl, char* idc, char* ido, // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN enviaArchivo(SOCKET *socket_c, TRAMA *ptrTrama) { +static bool enviaArchivo(TRAMA *ptrTrama, struct og_client *cli) +{ + int socket_c = og_client_socket(cli); char *nfl; - char modulo[] = "enviaArchivo()"; // Toma parámetros nfl = copiaParametro("nfl",ptrTrama); // Toma nombre completo del archivo - if (!sendArchivo(socket_c, nfl)) { + if (!sendArchivo(&socket_c, nfl)) { liberaMemoria(nfl); - errorLog(modulo, 57, FALSE); - return (FALSE); + syslog(LOG_ERR, "Problem sending file\n"); + return false; } liberaMemoria(nfl); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: enviaArchivo @@ -3455,24 +3031,25 @@ BOOLEAN enviaArchivo(SOCKET *socket_c, TRAMA *ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN recibeArchivo(SOCKET *socket_c, TRAMA *ptrTrama) { +static bool recibeArchivo(TRAMA *ptrTrama, struct og_client *cli) +{ + int socket_c = og_client_socket(cli); char *nfl; - char modulo[] = "recibeArchivo()"; // Toma parámetros nfl = copiaParametro("nfl",ptrTrama); // Toma nombre completo del archivo ptrTrama->tipo = MSG_NOTIFICACION; - enviaFlag(socket_c, ptrTrama); - if (!recArchivo(socket_c, nfl)) { + enviaFlag(&socket_c, ptrTrama); + if (!recArchivo(&socket_c, nfl)) { liberaMemoria(nfl); - errorLog(modulo, 58, FALSE); - return (FALSE); + syslog(LOG_ERR, "Problem receiving file\n"); + return false; } liberaMemoria(nfl); - return (TRUE); + return true; } // ________________________________________________________________________________________________________ // Función: envioProgramacion @@ -3484,23 +3061,23 @@ BOOLEAN recibeArchivo(SOCKET *socket_c, TRAMA *ptrTrama) { // - 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 +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error // ________________________________________________________________________________________________________ -BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama) +static bool envioProgramacion(TRAMA *ptrTrama, struct og_client *cli) { + char *ptrIP[MAXIMOS_CLIENTES],*ptrMacs[MAXIMOS_CLIENTES]; char sqlstr[LONSQL], msglog[LONSTD]; char *idp,iph[LONIP],mac[LONMAC]; Database db; Table tbl; - int idx,idcomando; - char modulo[] = "envioProgramacion()"; + int idx,idcomando,lon; - if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion - errorLog(modulo, 20, FALSE); + if (!db.Open(usuario, pasguor, datasource, catalog)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } idp = copiaParametro("idp",ptrTrama); // Toma identificador de la programación de la tabla acciones @@ -3510,16 +3087,16 @@ BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama) " WHERE acciones.idprogramacion=%s",idp); liberaMemoria(idp); - - if (!db.Execute(sqlstr, tbl)) { // Error al leer - errorLog(modulo, 21, FALSE); + + if (!db.Execute(sqlstr, tbl)) { db.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", + __func__, __LINE__, msglog); + return false; } db.Close(); if(tbl.ISEOF()) - return (TRUE); // No existen registros + return true; // No existen registros /* Prepara la trama de actualizacion */ @@ -3530,235 +3107,1319 @@ BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama) while (!tbl.ISEOF()) { // Recorre particiones if (!tbl.Get("ip", iph)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot find ip column in table: %s\n", + msglog); + return false; } if (!tbl.Get("idcomando", idcomando)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot find idcomando column in table: %s\n", + msglog); + return false; } if(idcomando==1){ // Arrancar if (!tbl.Get("mac", mac)) { tbl.GetErrorErrStr(msglog); - errorInfo(modulo, msglog); - return (FALSE); + syslog(LOG_ERR, "cannot find mac column in table: %s\n", + msglog); + return false; } + lon = splitCadena(ptrIP, iph, ';'); + lon = splitCadena(ptrMacs, mac, ';'); + // Se manda por broadcast y por unicast - if (!Levanta(iph, mac, (char*)"1")) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - return (FALSE); - } + if (!Levanta(ptrIP, ptrMacs, lon, (char*)"1")) + return false; - if (!Levanta(iph, mac, (char*)"2")) { - sprintf(msglog, "%s:%s", tbErrores[32], modulo); - errorInfo(modulo, msglog); - return (FALSE); - } + if (!Levanta(ptrIP, ptrMacs, lon, (char*)"2")) + return false; } if (clienteDisponible(iph, &idx)) { // Si el cliente puede recibir comandos + int sock = tbsockets[idx].cli ? tbsockets[idx].cli->io.fd : -1; + strcpy(tbsockets[idx].estado, CLIENTE_OCUPADO); // Actualiza el estado del cliente - if (!mandaTrama(&tbsockets[idx].sock, ptrTrama)) { - errorLog(modulo, 26, FALSE); - return (FALSE); + if (sock >= 0 && !mandaTrama(&sock, ptrTrama)) { + syslog(LOG_ERR, "failed to send response: %s\n", + strerror(errno)); } //close(tbsockets[idx].sock); // Cierra el socket del cliente hasta nueva disponibilidad } tbl.MoveNext(); } - return (TRUE); // No existen registros + return true; // No existen registros +} + +// This object stores function handler for messages +static struct { + const char *nf; // Nombre de la función + bool (*fcn)(TRAMA *, struct og_client *cli); +} tbfuncionesServer[] = { + { "InclusionCliente", InclusionCliente, }, + { "InclusionClienteWinLnx", InclusionClienteWinLnx, }, + { "AutoexecCliente", AutoexecCliente, }, + { "ComandosPendientes", ComandosPendientes, }, + { "DisponibilidadComandos", DisponibilidadComandos, }, + { "RESPUESTA_Arrancar", RESPUESTA_Arrancar, }, + { "Apagar", Apagar, }, + { "RESPUESTA_Apagar", RESPUESTA_Apagar, }, + { "RESPUESTA_Reiniciar", RESPUESTA_Reiniciar, }, + { "RESPUESTA_IniciarSesion", RESPUESTA_IniciarSesion, }, + { "CrearImagen", CrearImagen, }, + { "RESPUESTA_CrearImagen", RESPUESTA_CrearImagen, }, + { "CrearImagenBasica", CrearImagenBasica, }, + { "RESPUESTA_CrearImagenBasica", RESPUESTA_CrearImagenBasica, }, + { "CrearSoftIncremental", CrearSoftIncremental, }, + { "RESPUESTA_CrearSoftIncremental", RESPUESTA_CrearSoftIncremental, }, + { "RestaurarImagen", RestaurarImagen, }, + { "RESPUESTA_RestaurarImagen", RESPUESTA_RestaurarImagen }, + { "RestaurarImagenBasica", RestaurarImagenBasica, }, + { "RESPUESTA_RestaurarImagenBasica", RESPUESTA_RestaurarImagenBasica, }, + { "RestaurarSoftIncremental", RestaurarSoftIncremental, }, + { "RESPUESTA_RestaurarSoftIncremental", RESPUESTA_RestaurarSoftIncremental, }, + { "Configurar", Configurar, }, + { "RESPUESTA_Configurar", RESPUESTA_Configurar, }, + { "EjecutarScript", EjecutarScript, }, + { "RESPUESTA_EjecutarScript", RESPUESTA_EjecutarScript, }, + { "InventarioHardware", InventarioHardware, }, + { "RESPUESTA_InventarioHardware", RESPUESTA_InventarioHardware, }, + { "InventarioSoftware", InventarioSoftware }, + { "RESPUESTA_InventarioSoftware", RESPUESTA_InventarioSoftware, }, + { "enviaArchivo", enviaArchivo, }, + { "recibeArchivo", recibeArchivo, }, + { "envioProgramacion", envioProgramacion, }, + { NULL, NULL, }, +}; + +// ________________________________________________________________________________________________________ +// Función: gestionaTrama +// +// Descripción: +// Procesa las tramas recibidas . +// Parametros: +// - s : Socket usado para comunicaciones +// Devuelve: +// true: Si el proceso es correcto +// false: En caso de ocurrir algún error +// ________________________________________________________________________________________________________ +static void gestionaTrama(TRAMA *ptrTrama, struct og_client *cli) +{ + int i, res; + char *nfn; + + if (ptrTrama){ + INTROaFINCAD(ptrTrama); + nfn = copiaParametro("nfn",ptrTrama); // Toma nombre de la función + + for (i = 0; tbfuncionesServer[i].fcn; i++) { + if (!strncmp(tbfuncionesServer[i].nf, nfn, + strlen(tbfuncionesServer[i].nf))) { + res = tbfuncionesServer[i].fcn(ptrTrama, cli); + if (!res) { + syslog(LOG_ERR, "Failed handling of %s for client %s:%hu\n", + tbfuncionesServer[i].nf, + inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port)); + } else { + syslog(LOG_DEBUG, "Successful handling of %s for client %s:%hu\n", + tbfuncionesServer[i].nf, + inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port)); + } + break; + } + } + if (!tbfuncionesServer[i].fcn) + syslog(LOG_ERR, "unknown request %s from client %s:%hu\n", + nfn, inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port)); + + liberaMemoria(nfn); + } +} + +static void og_client_release(struct ev_loop *loop, struct og_client *cli) +{ + if (cli->keepalive_idx >= 0) { + syslog(LOG_DEBUG, "closing keepalive connection for %s:%hu in slot %d\n", + inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port), cli->keepalive_idx); + tbsockets[cli->keepalive_idx].cli = NULL; + } + + ev_io_stop(loop, &cli->io); + close(cli->io.fd); + free(cli); +} + +static void og_client_keepalive(struct ev_loop *loop, struct og_client *cli) +{ + struct og_client *old_cli; + + old_cli = tbsockets[cli->keepalive_idx].cli; + if (old_cli && old_cli != cli) { + syslog(LOG_DEBUG, "closing old keepalive connection for %s:%hu\n", + inet_ntoa(old_cli->addr.sin_addr), + ntohs(old_cli->addr.sin_port)); + + og_client_release(loop, old_cli); + } + tbsockets[cli->keepalive_idx].cli = cli; +} + +static void og_client_reset_state(struct og_client *cli) +{ + cli->state = OG_CLIENT_RECEIVING_HEADER; + cli->buf_len = 0; +} + +static int og_client_state_recv_hdr(struct og_client *cli) +{ + char hdrlen[LONHEXPRM]; + + /* Still too short to validate protocol fingerprint and message + * length. + */ + if (cli->buf_len < 15 + LONHEXPRM) + return 0; + + if (strncmp(cli->buf, "@JMMLCAMDJ_MCDJ", 15)) { + syslog(LOG_ERR, "bad fingerprint from client %s:%hu, closing\n", + inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port)); + return -1; + } + + memcpy(hdrlen, &cli->buf[LONGITUD_CABECERATRAMA], LONHEXPRM); + cli->msg_len = strtol(hdrlen, NULL, 16); + + /* Header announces more that we can fit into buffer. */ + if (cli->msg_len >= sizeof(cli->buf)) { + syslog(LOG_ERR, "too large message %u bytes from %s:%hu\n", + cli->msg_len, inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port)); + return -1; + } + + return 1; +} + +static TRAMA *og_msg_alloc(char *data, unsigned int len) +{ + TRAMA *ptrTrama; + + ptrTrama = (TRAMA *)reservaMemoria(sizeof(TRAMA)); + if (!ptrTrama) { + syslog(LOG_ERR, "OOM\n"); + return NULL; + } + + initParametros(ptrTrama, len); + memcpy(ptrTrama, "@JMMLCAMDJ_MCDJ", LONGITUD_CABECERATRAMA); + memcpy(ptrTrama->parametros, data, len); + ptrTrama->lonprm = len; + + return ptrTrama; +} + +static void og_msg_free(TRAMA *ptrTrama) +{ + liberaMemoria(ptrTrama->parametros); + liberaMemoria(ptrTrama); +} + +static int og_client_state_process_payload(struct og_client *cli) +{ + TRAMA *ptrTrama; + char *data; + int len; + + len = cli->msg_len - (LONGITUD_CABECERATRAMA + LONHEXPRM); + data = &cli->buf[LONGITUD_CABECERATRAMA + LONHEXPRM]; + + ptrTrama = og_msg_alloc(data, len); + if (!ptrTrama) + return -1; + + gestionaTrama(ptrTrama, cli); + + og_msg_free(ptrTrama); + + return 1; +} + +#define OG_CLIENTS_MAX 4096 + +struct og_msg_params { + const char *ips_array[OG_CLIENTS_MAX]; + const char *mac_array[OG_CLIENTS_MAX]; + unsigned int ips_array_len; + const char *wol_type; + char run_cmd[4096]; + const char *disk; + const char *partition; +}; + +static int og_json_parse_clients(json_t *element, struct og_msg_params *params) +{ + unsigned int i; + json_t *k; + + if (json_typeof(element) != JSON_ARRAY) + return -1; + + for (i = 0; i < json_array_size(element); i++) { + k = json_array_get(element, i); + if (json_typeof(k) != JSON_STRING) + return -1; + + params->ips_array[params->ips_array_len++] = + json_string_value(k); + } + return 0; +} + +static int og_cmd_legacy_send(struct og_msg_params *params, const char *cmd, + const char *state) +{ + char buf[4096] = {}; + int len, err = 0; + TRAMA *msg; + + len = snprintf(buf, sizeof(buf), "nfn=%s\r", cmd); + + msg = og_msg_alloc(buf, len); + if (!msg) + return -1; + + if (!og_send_cmd((char **)params->ips_array, params->ips_array_len, + state, msg)) + err = -1; + + og_msg_free(msg); + + return err; +} + +static int og_cmd_post_clients(json_t *element, struct og_msg_params *params) +{ + const char *key; + json_t *value; + int err = 0; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) + err = og_json_parse_clients(value, params); + + if (err < 0) + break; + } + + return og_cmd_legacy_send(params, "Sondeo", CLIENTE_APAGADO); +} + +struct og_buffer { + char *data; + int len; +}; + +static int og_json_dump_clients(const char *buffer, size_t size, void *data) +{ + struct og_buffer *og_buffer = (struct og_buffer *)data; + + memcpy(og_buffer->data + og_buffer->len, buffer, size); + og_buffer->len += size; + + return 0; } -// ******************************************************************************************************** -// PROGRAMA PRINCIPAL (SERVICIO) -// ******************************************************************************************************** -int main(int argc, char *argv[]) { + +static int og_cmd_get_clients(json_t *element, struct og_msg_params *params, + char *buffer_reply) +{ + json_t *root, *array, *addr, *state, *object; + struct og_buffer og_buffer = { + .data = buffer_reply, + }; int i; - SOCKET socket_s; // Socket donde escucha el servidor - SOCKET socket_c; // Socket de los clientes que se conectan - socklen_t iAddrSize; - struct sockaddr_in local, cliente; - char modulo[] = "main()"; - int activo=1; - /*-------------------------------------------------------------------------------------------------------- - Validación de parámetros de ejecución y lectura del fichero de configuración del servicio - ---------------------------------------------------------------------------------------------------------*/ - if (!validacionParametros(argc, argv, 1)) // Valida parámetros de ejecución - exit(EXIT_FAILURE); + array = json_array(); + if (!array) + return -1; - if (!tomaConfiguracion(szPathFileCfg)) { // Toma parametros de configuracion - exit(EXIT_FAILURE); + for (i = 0; i < MAXIMOS_CLIENTES; i++) { + if (tbsockets[i].ip[0] == '\0') + continue; + + object = json_object(); + if (!object) { + json_decref(array); + return -1; + } + addr = json_string(tbsockets[i].ip); + if (!addr) { + json_decref(object); + json_decref(array); + return -1; + } + json_object_set_new(object, "addr", addr); + + state = json_string(tbsockets[i].estado); + if (!state) { + json_decref(object); + json_decref(array); + return -1; + } + json_object_set_new(object, "state", state); + + json_array_append_new(array, object); } - /*-------------------------------------------------------------------------------------------------------- - Carga del catálogo de funciones que procesan las tramas (referencia directa por puntero a función) - ---------------------------------------------------------------------------------------------------------*/ - int cf = 0; - - strcpy(tbfuncionesServer[cf].nf, "Sondeo"); - tbfuncionesServer[cf++].fptr = &Sondeo; - strcpy(tbfuncionesServer[cf].nf, "respuestaSondeo"); - tbfuncionesServer[cf++].fptr = &respuestaSondeo; + root = json_pack("{s:o}", "clients", array); + if (!root) { + json_decref(array); + return -1; + } + + json_dump_callback(root, og_json_dump_clients, &og_buffer, 0); + json_decref(root); + + return 0; +} + +static int og_json_parse_target(json_t *element, struct og_msg_params *params) +{ + const char *key; + json_t *value; + + if (json_typeof(element) != JSON_OBJECT) { + return -1; + } + + json_object_foreach(element, key, value) { + if (!strcmp(key, "addr")) { + if (json_typeof(value) != JSON_STRING) + return -1; + + params->ips_array[params->ips_array_len] = + json_string_value(value); + } else if (!strcmp(key, "mac")) { + if (json_typeof(value) != JSON_STRING) + return -1; + + params->mac_array[params->ips_array_len] = + json_string_value(value); + } + } + + return 0; +} + +static int og_json_parse_targets(json_t *element, struct og_msg_params *params) +{ + unsigned int i; + json_t *k; + int err; + + if (json_typeof(element) != JSON_ARRAY) + return -1; + + for (i = 0; i < json_array_size(element); i++) { + k = json_array_get(element, i); + + if (json_typeof(k) != JSON_OBJECT) + return -1; + + err = og_json_parse_target(k, params); + if (err < 0) + return err; + + params->ips_array_len++; + } + return 0; +} + +static int og_json_parse_type(json_t *element, struct og_msg_params *params) +{ + const char *type; + + if (json_typeof(element) != JSON_STRING) + return -1; + + params->wol_type = json_string_value(element); + + type = json_string_value(element); + if (!strcmp(type, "unicast")) + params->wol_type = "2"; + else if (!strcmp(type, "broadcast")) + params->wol_type = "1"; + + return 0; +} + +static int og_cmd_wol(json_t *element, struct og_msg_params *params) +{ + const char *key; + json_t *value; + int err = 0; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) { + err = og_json_parse_targets(value, params); + } else if (!strcmp(key, "type")) { + err = og_json_parse_type(value, params); + } + + if (err < 0) + break; + } + + if (!Levanta((char **)params->ips_array, (char **)params->mac_array, + params->ips_array_len, (char *)params->wol_type)) + return -1; + + return 0; +} + +static int og_json_parse_run(json_t *element, struct og_msg_params *params) +{ + if (json_typeof(element) != JSON_STRING) + return -1; + + snprintf(params->run_cmd, sizeof(params->run_cmd), "%s", + json_string_value(element)); + + return 0; +} + +static int og_cmd_run_post(json_t *element, struct og_msg_params *params) +{ + char buf[4096] = {}, iph[4096] = {}; + int err = 0, len; + const char *key; + unsigned int i; + json_t *value; + TRAMA *msg; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) + err = og_json_parse_clients(value, params); + if (!strcmp(key, "run")) + err = og_json_parse_run(value, params); + + if (err < 0) + break; + } + + for (i = 0; i < params->ips_array_len; i++) { + len = snprintf(iph + strlen(iph), sizeof(iph), "%s;", + params->ips_array[i]); + } + len = snprintf(buf, sizeof(buf), "nfn=ConsolaRemota\riph=%s\rscp=%s\r", + iph, params->run_cmd); + + msg = og_msg_alloc(buf, len); + if (!msg) + return -1; + + if (!og_send_cmd((char **)params->ips_array, params->ips_array_len, + CLIENTE_OCUPADO, msg)) + err = -1; + + og_msg_free(msg); + + if (err < 0) + return err; + + for (i = 0; i < params->ips_array_len; i++) { + char filename[4096]; + FILE *f; + + sprintf(filename, "/tmp/_Seconsola_%s", params->ips_array[i]); + f = fopen(filename, "wt"); + fclose(f); + } + + return 0; +} + +static int og_cmd_run_get(json_t *element, struct og_msg_params *params, + char *buffer_reply) +{ + struct og_buffer og_buffer = { + .data = buffer_reply, + }; + json_t *root, *value, *array; + const char *key; + unsigned int i; + int err = 0; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) + err = og_json_parse_clients(value, params); + + if (err < 0) + return err; + } + + array = json_array(); + if (!array) + return -1; + + for (i = 0; i < params->ips_array_len; i++) { + json_t *object, *output, *addr; + char data[4096] = {}; + char filename[4096]; + int fd, numbytes; + + sprintf(filename, "/tmp/_Seconsola_%s", params->ips_array[i]); + + fd = open(filename, O_RDONLY); + if (!fd) + return -1; + + numbytes = read(fd, data, sizeof(data)); + if (numbytes < 0) { + close(fd); + return -1; + } + data[sizeof(data) - 1] = '\0'; + close(fd); + + object = json_object(); + if (!object) { + json_decref(array); + return -1; + } + addr = json_string(params->ips_array[i]); + if (!addr) { + json_decref(object); + json_decref(array); + return -1; + } + json_object_set_new(object, "addr", addr); + + output = json_string(data); + if (!output) { + json_decref(object); + json_decref(array); + return -1; + } + json_object_set_new(object, "output", output); + + json_array_append_new(array, object); + } + + root = json_pack("{s:o}", "clients", array); + if (!root) + return -1; + + json_dump_callback(root, og_json_dump_clients, &og_buffer, 0); + json_decref(root); + + return 0; +} - strcpy(tbfuncionesServer[cf].nf, "ConsolaRemota"); - tbfuncionesServer[cf++].fptr = &ConsolaRemota; +static int og_json_parse_disk(json_t *element, struct og_msg_params *params) +{ + if (json_typeof(element) != JSON_STRING) + return -1; + + params->disk = json_string_value(element); + + return 0; +} + +static int og_json_parse_partition(json_t *element, + struct og_msg_params *params) +{ + if (json_typeof(element) != JSON_STRING) + return -1; + + params->partition = json_string_value(element); + + return 0; +} + +static int og_cmd_session(json_t *element, struct og_msg_params *params) +{ + char buf[4096], iph[4096]; + int err = 0, len; + const char *key; + unsigned int i; + json_t *value; + TRAMA *msg; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) { + err = og_json_parse_clients(value, params); + } else if (!strcmp(key, "disk")) { + err = og_json_parse_disk(value, params); + } else if (!strcmp(key, "partition")) { + err = og_json_parse_partition(value, params); + } + + if (err < 0) + return err; + } + + for (i = 0; i < params->ips_array_len; i++) { + snprintf(iph + strlen(iph), sizeof(iph), "%s;", + params->ips_array[i]); + } + len = snprintf(buf, sizeof(buf), + "nfn=IniciarSesion\riph=%s\rdsk=%s\rpar=%s\r", + iph, params->disk, params->partition); + + msg = og_msg_alloc(buf, len); + if (!msg) + return -1; + + if (!og_send_cmd((char **)params->ips_array, params->ips_array_len, + CLIENTE_APAGADO, msg)) + err = -1; + + og_msg_free(msg); + + return 0; +} + +static int og_cmd_poweroff(json_t *element, struct og_msg_params *params) +{ + const char *key; + json_t *value; + int err = 0; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) + err = og_json_parse_clients(value, params); + + if (err < 0) + break; + } + + return og_cmd_legacy_send(params, "Apagar", CLIENTE_OCUPADO); +} + +static int og_cmd_refresh(json_t *element, struct og_msg_params *params) +{ + const char *key; + json_t *value; + int err = 0; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) + err = og_json_parse_clients(value, params); + + if (err < 0) + break; + } + + return og_cmd_legacy_send(params, "Actualizar", CLIENTE_APAGADO); +} + +static int og_cmd_reboot(json_t *element, struct og_msg_params *params) +{ + const char *key; + json_t *value; + int err = 0; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) + err = og_json_parse_clients(value, params); + + if (err < 0) + break; + } + + return og_cmd_legacy_send(params, "Reiniciar", CLIENTE_OCUPADO); +} + +static int og_cmd_stop(json_t *element, struct og_msg_params *params) +{ + const char *key; + json_t *value; + int err = 0; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) + err = og_json_parse_clients(value, params); + + if (err < 0) + break; + } + + return og_cmd_legacy_send(params, "Purgar", CLIENTE_APAGADO); +} + +static int og_cmd_hardware(json_t *element, struct og_msg_params *params) +{ + const char *key; + json_t *value; + int err = 0; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) + err = og_json_parse_clients(value, params); + + if (err < 0) + break; + } + + return og_cmd_legacy_send(params, "InventarioHardware", + CLIENTE_OCUPADO); +} + +static int og_cmd_software(json_t *element, struct og_msg_params *params) +{ + const char *key; + json_t *value; + int err = 0; + + if (json_typeof(element) != JSON_OBJECT) + return -1; + + json_object_foreach(element, key, value) { + if (!strcmp(key, "clients")) + err = og_json_parse_clients(value, params); + + if (err < 0) + break; + } + + return og_cmd_legacy_send(params, "InventarioSoftware", + CLIENTE_OCUPADO); +} + +static int og_client_method_not_found(struct og_client *cli) +{ + /* To meet RFC 7231, this function MUST generate an Allow header field + * containing the correct methods. For example: "Allow: POST\r\n" + */ + char buf[] = "HTTP/1.1 405 Method Not Allowed\r\n" + "Content-Length: 0\r\n\r\n"; + + send(og_client_socket(cli), buf, strlen(buf), 0); + + return -1; +} + +static int og_client_bad_request(struct og_client *cli) +{ + char buf[] = "HTTP/1.1 400 Bad Request\r\nContent-Length: 0\r\n\r\n"; + + send(og_client_socket(cli), buf, strlen(buf), 0); + + return -1; +} + +static int og_client_not_found(struct og_client *cli) +{ + char buf[] = "HTTP/1.1 404 Not Found\r\nContent-Length: 0\r\n\r\n"; + + send(og_client_socket(cli), buf, strlen(buf), 0); + + return -1; +} + +static int og_client_not_authorized(struct og_client *cli) +{ + char buf[] = "HTTP/1.1 401 Unauthorized\r\n" + "WWW-Authenticate: Basic\r\n" + "Content-Length: 0\r\n\r\n"; + + send(og_client_socket(cli), buf, strlen(buf), 0); + + return -1; +} + +static int og_server_internal_error(struct og_client *cli) +{ + char buf[] = "HTTP/1.1 500 Internal Server Error\r\n" + "Content-Length: 0\r\n\r\n"; + + send(og_client_socket(cli), buf, strlen(buf), 0); + + return -1; +} + +#define OG_MSG_RESPONSE_MAXLEN 65536 + +static int og_client_ok(struct og_client *cli, char *buf_reply) +{ + char buf[OG_MSG_RESPONSE_MAXLEN] = {}; + int err = 0, len; + + len = snprintf(buf, sizeof(buf), + "HTTP/1.1 200 OK\r\nContent-Length: %ld\r\n\r\n%s", + strlen(buf_reply), buf_reply); + if (len >= (int)sizeof(buf)) + err = og_server_internal_error(cli); + + send(og_client_socket(cli), buf, strlen(buf), 0); + + return err; +} + +enum og_rest_method { + OG_METHOD_GET = 0, + OG_METHOD_POST, +}; + +static int og_client_state_process_payload_rest(struct og_client *cli) +{ + char buf_reply[OG_MSG_RESPONSE_MAXLEN] = {}; + struct og_msg_params params = {}; + enum og_rest_method method; + const char *cmd, *body; + json_error_t json_err; + json_t *root = NULL; + int err = 0; + + syslog(LOG_DEBUG, "%s:%hu %.32s ...\n", + inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port), cli->buf); + + if (!strncmp(cli->buf, "GET", strlen("GET"))) { + method = OG_METHOD_GET; + cmd = cli->buf + strlen("GET") + 2; + } else if (!strncmp(cli->buf, "POST", strlen("POST"))) { + method = OG_METHOD_POST; + cmd = cli->buf + strlen("POST") + 2; + } else + return og_client_method_not_found(cli); + + body = strstr(cli->buf, "\r\n\r\n") + 4; + + if (strcmp(cli->auth_token, auth_token)) { + syslog(LOG_ERR, "wrong Authentication key\n"); + return og_client_not_authorized(cli); + } + + if (cli->content_length) { + root = json_loads(body, 0, &json_err); + if (!root) { + syslog(LOG_ERR, "malformed json line %d: %s\n", + json_err.line, json_err.text); + return og_client_not_found(cli); + } + } + + if (!strncmp(cmd, "clients", strlen("clients"))) { + if (method != OG_METHOD_POST && + method != OG_METHOD_GET) + return og_client_method_not_found(cli); + + if (method == OG_METHOD_POST && !root) { + syslog(LOG_ERR, "command clients with no payload\n"); + return og_client_bad_request(cli); + } + switch (method) { + case OG_METHOD_POST: + err = og_cmd_post_clients(root, ¶ms); + break; + case OG_METHOD_GET: + err = og_cmd_get_clients(root, ¶ms, buf_reply); + break; + } + } else if (!strncmp(cmd, "wol", strlen("wol"))) { + if (method != OG_METHOD_POST) + return og_client_method_not_found(cli); + + if (!root) { + syslog(LOG_ERR, "command wol with no payload\n"); + return og_client_bad_request(cli); + } + err = og_cmd_wol(root, ¶ms); + } else if (!strncmp(cmd, "shell/run", strlen("shell/run"))) { + if (method != OG_METHOD_POST) + return og_client_method_not_found(cli); + + if (!root) { + syslog(LOG_ERR, "command run with no payload\n"); + return og_client_bad_request(cli); + } + err = og_cmd_run_post(root, ¶ms); + } else if (!strncmp(cmd, "shell/output", strlen("shell/output"))) { + if (method != OG_METHOD_POST) + return og_client_method_not_found(cli); + + if (!root) { + syslog(LOG_ERR, "command output with no payload\n"); + return og_client_bad_request(cli); + } - strcpy(tbfuncionesServer[cf].nf, "EcoConsola"); - tbfuncionesServer[cf++].fptr = &EcoConsola; + err = og_cmd_run_get(root, ¶ms, buf_reply); + } else if (!strncmp(cmd, "session", strlen("session"))) { + if (method != OG_METHOD_POST) + return og_client_method_not_found(cli); + + if (!root) { + syslog(LOG_ERR, "command session with no payload\n"); + return og_client_bad_request(cli); + } + err = og_cmd_session(root, ¶ms); + } else if (!strncmp(cmd, "poweroff", strlen("poweroff"))) { + if (method != OG_METHOD_POST) + return og_client_method_not_found(cli); + + if (!root) { + syslog(LOG_ERR, "command poweroff with no payload\n"); + return og_client_bad_request(cli); + } + err = og_cmd_poweroff(root, ¶ms); + } else if (!strncmp(cmd, "reboot", strlen("reboot"))) { + if (method != OG_METHOD_POST) + return og_client_method_not_found(cli); + + if (!root) { + syslog(LOG_ERR, "command reboot with no payload\n"); + return og_client_bad_request(cli); + } + err = og_cmd_reboot(root, ¶ms); + } else if (!strncmp(cmd, "stop", strlen("stop"))) { + if (method != OG_METHOD_POST) + return og_client_method_not_found(cli); + + if (!root) { + syslog(LOG_ERR, "command stop with no payload\n"); + return og_client_bad_request(cli); + } + err = og_cmd_stop(root, ¶ms); + } else if (!strncmp(cmd, "refresh", strlen("refresh"))) { + if (method != OG_METHOD_POST) + return og_client_method_not_found(cli); + + if (!root) { + syslog(LOG_ERR, "command refresh with no payload\n"); + return og_client_bad_request(cli); + } + err = og_cmd_refresh(root, ¶ms); + } else if (!strncmp(cmd, "hardware", strlen("hardware"))) { + if (method != OG_METHOD_POST) + return og_client_method_not_found(cli); + + if (!root) { + syslog(LOG_ERR, "command hardware with no payload\n"); + return og_client_bad_request(cli); + } + err = og_cmd_hardware(root, ¶ms); + } else if (!strncmp(cmd, "software", strlen("software"))) { + if (method != OG_METHOD_POST) + return og_client_method_not_found(cli); + + if (!root) { + syslog(LOG_ERR, "command software with no payload\n"); + return og_client_bad_request(cli); + } + err = og_cmd_software(root, ¶ms); + } else { + syslog(LOG_ERR, "unknown command: %.32s ...\n", cmd); + err = og_client_not_found(cli); + } - strcpy(tbfuncionesServer[cf].nf, "Actualizar"); - tbfuncionesServer[cf++].fptr = &Actualizar; + if (root) + json_decref(root); - strcpy(tbfuncionesServer[cf].nf, "Purgar"); - tbfuncionesServer[cf++].fptr = &Purgar; + if (err < 0) + return err; - strcpy(tbfuncionesServer[cf].nf, "InclusionCliente"); - tbfuncionesServer[cf++].fptr = &InclusionCliente; + err = og_client_ok(cli, buf_reply); + if (err < 0) { + syslog(LOG_ERR, "HTTP response to %s:%hu is too large\n", + inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port)); + } - strcpy(tbfuncionesServer[cf].nf, "InclusionClienteWinLnx"); - tbfuncionesServer[cf++].fptr = &InclusionClienteWinLnx; + return err; +} - strcpy(tbfuncionesServer[cf].nf, "AutoexecCliente"); - tbfuncionesServer[cf++].fptr = &AutoexecCliente; +static int og_client_state_recv_hdr_rest(struct og_client *cli) +{ + char *ptr; - strcpy(tbfuncionesServer[cf].nf, "ComandosPendientes"); - tbfuncionesServer[cf++].fptr = &ComandosPendientes; + ptr = strstr(cli->buf, "\r\n\r\n"); + if (!ptr) + return 0; - strcpy(tbfuncionesServer[cf].nf, "DisponibilidadComandos"); - tbfuncionesServer[cf++].fptr = &DisponibilidadComandos; + cli->msg_len = ptr - cli->buf + 4; - strcpy(tbfuncionesServer[cf].nf, "Arrancar"); - tbfuncionesServer[cf++].fptr = &Arrancar; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_Arrancar"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_Arrancar; + ptr = strstr(cli->buf, "Content-Length: "); + if (ptr) { + sscanf(ptr, "Content-Length: %i[^\r\n]", &cli->content_length); + if (cli->content_length < 0) + return -1; + cli->msg_len += cli->content_length; + } - strcpy(tbfuncionesServer[cf].nf, "Apagar"); - tbfuncionesServer[cf++].fptr = &Apagar; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_Apagar"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_Apagar; + ptr = strstr(cli->buf, "Authorization: "); + if (ptr) + sscanf(ptr, "Authorization: %63[^\r\n]", cli->auth_token); - strcpy(tbfuncionesServer[cf].nf, "Reiniciar"); - tbfuncionesServer[cf++].fptr = &Reiniciar; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_Reiniciar"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_Reiniciar; + return 1; +} - strcpy(tbfuncionesServer[cf].nf, "IniciarSesion"); - tbfuncionesServer[cf++].fptr = &IniciarSesion; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_IniciarSesion"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_IniciarSesion; +static void og_client_read_cb(struct ev_loop *loop, struct ev_io *io, int events) +{ + struct og_client *cli; + int ret; - strcpy(tbfuncionesServer[cf].nf, "CrearImagen"); - tbfuncionesServer[cf++].fptr = &CrearImagen; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_CrearImagen"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_CrearImagen; + cli = container_of(io, struct og_client, io); - strcpy(tbfuncionesServer[cf].nf, "CrearImagenBasica"); - tbfuncionesServer[cf++].fptr = &CrearImagenBasica; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_CrearImagenBasica"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_CrearImagenBasica; + if (events & EV_ERROR) { + syslog(LOG_ERR, "unexpected error event from client %s:%hu\n", + inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port)); + goto close; + } - strcpy(tbfuncionesServer[cf].nf, "CrearSoftIncremental"); - tbfuncionesServer[cf++].fptr = &CrearSoftIncremental; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_CrearSoftIncremental"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_CrearSoftIncremental; + ret = recv(io->fd, cli->buf + cli->buf_len, + sizeof(cli->buf) - cli->buf_len, 0); + if (ret <= 0) { + if (ret < 0) { + syslog(LOG_ERR, "error reading from client %s:%hu (%s)\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port), + strerror(errno)); + } else { + syslog(LOG_DEBUG, "closed connection by %s:%hu\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port)); + } + goto close; + } - strcpy(tbfuncionesServer[cf].nf, "RestaurarImagen"); - tbfuncionesServer[cf++].fptr = &RestaurarImagen; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_RestaurarImagen"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_RestaurarImagen; + if (cli->keepalive_idx >= 0) + return; - strcpy(tbfuncionesServer[cf].nf, "RestaurarImagenBasica"); - tbfuncionesServer[cf++].fptr = &RestaurarImagenBasica; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_RestaurarImagenBasica"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_RestaurarImagenBasica; + ev_timer_again(loop, &cli->timer); - strcpy(tbfuncionesServer[cf].nf, "RestaurarSoftIncremental"); - tbfuncionesServer[cf++].fptr = &RestaurarSoftIncremental; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_RestaurarSoftIncremental"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_RestaurarSoftIncremental; + cli->buf_len += ret; + if (cli->buf_len >= sizeof(cli->buf)) { + syslog(LOG_ERR, "client request from %s:%hu is too long\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port)); + goto close; + } - strcpy(tbfuncionesServer[cf].nf, "Configurar"); - tbfuncionesServer[cf++].fptr = &Configurar; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_Configurar"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_Configurar; + switch (cli->state) { + case OG_CLIENT_RECEIVING_HEADER: + if (cli->rest) + ret = og_client_state_recv_hdr_rest(cli); + else + ret = og_client_state_recv_hdr(cli); + + if (ret < 0) + goto close; + if (!ret) + return; + + cli->state = OG_CLIENT_RECEIVING_PAYLOAD; + /* Fall through. */ + case OG_CLIENT_RECEIVING_PAYLOAD: + /* Still not enough data to process request. */ + if (cli->buf_len < cli->msg_len) + return; + + cli->state = OG_CLIENT_PROCESSING_REQUEST; + /* fall through. */ + case OG_CLIENT_PROCESSING_REQUEST: + if (cli->rest) { + ret = og_client_state_process_payload_rest(cli); + if (ret < 0) { + syslog(LOG_ERR, "Failed to process HTTP request from %s:%hu\n", + inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port)); + } + } else { + ret = og_client_state_process_payload(cli); + } + if (ret < 0) + goto close; - strcpy(tbfuncionesServer[cf].nf, "EjecutarScript"); - tbfuncionesServer[cf++].fptr = &EjecutarScript; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_EjecutarScript"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_EjecutarScript; + if (cli->keepalive_idx < 0) { + syslog(LOG_DEBUG, "server closing connection to %s:%hu\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port)); + goto close; + } else { + syslog(LOG_DEBUG, "leaving client %s:%hu in keepalive mode\n", + inet_ntoa(cli->addr.sin_addr), + ntohs(cli->addr.sin_port)); + og_client_keepalive(loop, cli); + og_client_reset_state(cli); + } + break; + default: + syslog(LOG_ERR, "unknown state, critical internal error\n"); + goto close; + } + return; +close: + ev_timer_stop(loop, &cli->timer); + og_client_release(loop, cli); +} - strcpy(tbfuncionesServer[cf].nf, "InventarioHardware"); - tbfuncionesServer[cf++].fptr = &InventarioHardware; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_InventarioHardware"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_InventarioHardware; +static void og_client_timer_cb(struct ev_loop *loop, ev_timer *timer, int events) +{ + struct og_client *cli; - strcpy(tbfuncionesServer[cf].nf, "InventarioSoftware"); - tbfuncionesServer[cf++].fptr = &InventarioSoftware; - strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_InventarioSoftware"); - tbfuncionesServer[cf++].fptr = &RESPUESTA_InventarioSoftware; + cli = container_of(timer, struct og_client, timer); + if (cli->keepalive_idx >= 0) { + ev_timer_again(loop, &cli->timer); + return; + } + syslog(LOG_ERR, "timeout request for client %s:%hu\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port)); - strcpy(tbfuncionesServer[cf].nf, "enviaArchivo"); - tbfuncionesServer[cf++].fptr = &enviaArchivo; + og_client_release(loop, cli); +} - strcpy(tbfuncionesServer[cf].nf, "recibeArchivo"); - tbfuncionesServer[cf++].fptr = &recibeArchivo; +static int socket_s, socket_rest; - strcpy(tbfuncionesServer[cf].nf, "envioProgramacion"); - tbfuncionesServer[cf++].fptr = &envioProgramacion; +static void og_server_accept_cb(struct ev_loop *loop, struct ev_io *io, + int events) +{ + struct sockaddr_in client_addr; + socklen_t addrlen = sizeof(client_addr); + struct og_client *cli; + int client_sd; + + if (events & EV_ERROR) + return; + + client_sd = accept(io->fd, (struct sockaddr *)&client_addr, &addrlen); + if (client_sd < 0) { + syslog(LOG_ERR, "cannot accept client connection\n"); + return; + } + + cli = (struct og_client *)calloc(1, sizeof(struct og_client)); + if (!cli) { + close(client_sd); + return; + } + memcpy(&cli->addr, &client_addr, sizeof(client_addr)); + cli->keepalive_idx = -1; + + if (io->fd == socket_rest) + cli->rest = true; + + syslog(LOG_DEBUG, "connection from client %s:%hu\n", + inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port)); + + ev_io_init(&cli->io, og_client_read_cb, client_sd, EV_READ); + ev_io_start(loop, &cli->io); + ev_timer_init(&cli->timer, og_client_timer_cb, OG_CLIENT_TIMEOUT, 0.); + ev_timer_start(loop, &cli->timer); +} + +static int og_socket_server_init(const char *port) +{ + struct sockaddr_in local; + int sd, on = 1; + + sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sd < 0) { + syslog(LOG_ERR, "cannot create main socket\n"); + return -1; + } + setsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(int)); + + local.sin_addr.s_addr = htonl(INADDR_ANY); + local.sin_family = AF_INET; + local.sin_port = htons(atoi(port)); + + if (bind(sd, (struct sockaddr *) &local, sizeof(local)) < 0) { + close(sd); + syslog(LOG_ERR, "cannot bind socket\n"); + return -1; + } + + listen(sd, 250); + + return sd; +} + +int main(int argc, char *argv[]) +{ + struct ev_io ev_io_server, ev_io_server_rest; + struct ev_loop *loop = ev_default_loop(0); + int i; + + if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) + exit(EXIT_FAILURE); + + openlog("ogAdmServer", LOG_PID, LOG_DAEMON); + + /*-------------------------------------------------------------------------------------------------------- + Validación de parámetros de ejecución y lectura del fichero de configuración del servicio + ---------------------------------------------------------------------------------------------------------*/ + if (!validacionParametros(argc, argv, 1)) // Valida parámetros de ejecución + exit(EXIT_FAILURE); + + if (!tomaConfiguracion(szPathFileCfg)) { // Toma parametros de configuracion + exit(EXIT_FAILURE); + } /*-------------------------------------------------------------------------------------------------------- // Inicializa array de información de los clientes ---------------------------------------------------------------------------------------------------------*/ for (i = 0; i < MAXIMOS_CLIENTES; i++) { tbsockets[i].ip[0] = '\0'; - tbsockets[i].sock = INVALID_SOCKET; + tbsockets[i].cli = NULL; } /*-------------------------------------------------------------------------------------------------------- Creación y configuración del socket del servicio ---------------------------------------------------------------------------------------------------------*/ - socket_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Crea socket del servicio - setsockopt(socket_s, SOL_SOCKET, SO_REUSEPORT, &activo, sizeof(int)); - if (socket_s == SOCKET_ERROR) { // Error al crear el socket del servicio - errorLog(modulo, 13, TRUE); + socket_s = og_socket_server_init(puerto); + if (socket_s < 0) exit(EXIT_FAILURE); - } - local.sin_addr.s_addr = htonl(INADDR_ANY); // Configura el socket del servicio - local.sin_family = AF_INET; - local.sin_port = htons(atoi(puerto)); + ev_io_init(&ev_io_server, og_server_accept_cb, socket_s, EV_READ); + ev_io_start(loop, &ev_io_server); - if (bind(socket_s, (struct sockaddr *) &local, sizeof(local)) - == SOCKET_ERROR) { // Enlaza socket - errorLog(modulo, 14, TRUE); + socket_rest = og_socket_server_init("8888"); + if (socket_rest < 0) exit(EXIT_FAILURE); - } - listen(socket_s, 250); // Pone a escuchar al socket - iAddrSize = sizeof(cliente); - /*-------------------------------------------------------------------------------------------------------- - Bucle para acceptar conexiones - ---------------------------------------------------------------------------------------------------------*/ + ev_io_init(&ev_io_server_rest, og_server_accept_cb, socket_rest, EV_READ); + ev_io_start(loop, &ev_io_server_rest); + infoLog(1); // Inicio de sesión - while (TRUE) { - socket_c = accept(socket_s, (struct sockaddr *) &cliente, &iAddrSize); - if (socket_c == INVALID_SOCKET) { - errorLog(modulo, 15, TRUE); - exit(EXIT_FAILURE); - } - swcSocket = FALSE; // Por defecto se cerrara el socket de cliente después del anális de la trama - if (!gestionaTrama(&socket_c)) { - errorLog(modulo, 39, TRUE); - //close(socket_c);/tmp/ - //break; - } - if (!swcSocket) // Sólo se cierra cuando el cliente NO espera comandos ineractivos - close(socket_c); - } - /*-------------------------------------------------------------------------------------------------------- - Fin del servicio - ---------------------------------------------------------------------------------------------------------*/ - close(socket_s); + + /* old log file has been deprecated. */ + og_log(97, false); + + syslog(LOG_INFO, "Waiting for connections\n"); + + while (1) + ev_loop(loop, 0); + exit(EXIT_SUCCESS); } diff --git a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h index 48f0be3a..22ffd30b 100644 --- a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h +++ b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h @@ -17,6 +17,7 @@ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> +#include <stdbool.h> #include </usr/include/mysql/mysql.h> #include "Database.h" #include "ogAdmLib.h" @@ -25,105 +26,34 @@ // ________________________________________________________________________________________________________ char servidoradm[LONPRM]; // Dirección IP del servidor de administración char puerto[LONPRM]; // Puerto de comunicación -char usuario[LONPRM]; // Usuario de acceso a la base de datos -char pasguor[LONPRM]; // Password del usuario -char datasource[LONPRM]; // Dirección IP del gestor de base de datos -char catalog[LONPRM]; // Nombre de la base de datos -char aulaup[LONPRM]; // Conmutador para registro automático de clientes + +struct og_client; typedef struct{ // Estructura usada para guardar información de los clientes char ip[LONIP]; // IP del cliente char estado[4]; // Tipo de Sistema Operativo en que se encuentra el cliente - SOCKET sock; // Socket por el que se comunica + struct og_client *cli; }SOCKETCL; SOCKETCL tbsockets[MAXIMOS_CLIENTES]; -BOOLEAN swcSocket; // Switch para indicar si se debe cerrar el socket del cliente - -typedef struct{ // Estructura usada para referenciar las funciones que procesan las tramas - char nf[LONFUN]; // Nombre de la función - BOOLEAN (*fptr)(SOCKET*,TRAMA*); // Puntero a la función que procesa la trama -}MSGFUN; -MSGFUN tbfuncionesServer[MAXIMAS_FUNCIONES]; -// ________________________________________________________________________________________________________ -// Prototipo de funciones -// ________________________________________________________________________________________________________ - -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 *); -BOOLEAN hayHueco(int *); -BOOLEAN actualizaConfiguracion(Database , Table ,char* ,int); -BOOLEAN AutoexecCliente(SOCKET *, TRAMA *); -BOOLEAN recorreProcedimientos(Database ,char* ,FILE*,char*); - -BOOLEAN tomaRepositorio(Database ,Table ,char*,int*); -BOOLEAN buscaComandos(char *,TRAMA *,int *); -BOOLEAN DisponibilidadComandos(SOCKET*,TRAMA*); -BOOLEAN respuestaEstandar(TRAMA *,char **,char **,char ** ,Database *,Table *); -BOOLEAN respuestaConsola(SOCKET *,TRAMA *,int); -BOOLEAN enviaComando(TRAMA *ptrTrama,const char*); - -BOOLEAN Actualizar(SOCKET *, TRAMA* ); -BOOLEAN Purgar(SOCKET *, TRAMA* ); - -BOOLEAN ConsolaRemota(SOCKET *,TRAMA*); -BOOLEAN RESPUESTA_ConsolaRemota(SOCKET *,TRAMA*); -BOOLEAN EcoConsola(SOCKET *,TRAMA*); - -BOOLEAN Comando(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_Comando(SOCKET *,TRAMA *); - -BOOLEAN Arrancar(SOCKET *,TRAMA *); -BOOLEAN Levanta(char*,char*,char*); -BOOLEAN WakeUp(SOCKET *,char*,char*,char*); +bool registraCliente(char *); +bool procesoInclusionClienteWinLnx(int socket, TRAMA*,int*,char*); +bool procesoInclusionCliente(struct og_client *, TRAMA*); +bool clienteExistente(char *,int *); +bool clienteDisponible(char *,int *); +bool actualizaConfiguracion(Database , Table ,char* ,int); +bool recorreProcedimientos(Database ,char* ,FILE*,char*); +bool buscaComandos(char *,TRAMA *,int *); +bool respuestaConsola(int socket, TRAMA *,int); +bool enviaComando(TRAMA *ptrTrama,const char*); +bool Levanta(char**, char**, int, char*); +bool WakeUp(int,char*,char*,char*); void PasaHexBin(char *,char *); -BOOLEAN RESPUESTA_Arrancar(SOCKET *,TRAMA*); -BOOLEAN Apagar(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_Apagar(SOCKET *,TRAMA *); -BOOLEAN Reiniciar(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_Reiniciar(SOCKET *,TRAMA *); -BOOLEAN IniciarSesion(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_IniciarSesion(SOCKET *,TRAMA *); -BOOLEAN CrearImagen(SOCKET *,TRAMA *); -BOOLEAN CrearImagenBasica(SOCKET *,TRAMA *); -BOOLEAN CrearSoftIncremental(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_CrearImagen(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_CrearImagenBasica(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_CrearSoftIncremental(SOCKET *,TRAMA *); -BOOLEAN actualizaCreacionImagen(Database,Table,char*,char*,char*,char*,char*,char*); -BOOLEAN actualizaCreacionSoftIncremental(Database,Table,char*,char*); -BOOLEAN RestaurarImagen(SOCKET *,TRAMA *); -BOOLEAN RestaurarImagenBasica(SOCKET *,TRAMA *); -BOOLEAN RestaurarSoftIncremental(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_RestaurarImagenBasica(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_RestaurarSoftIncremental(SOCKET *,TRAMA *); -BOOLEAN actualizaRestauracionImagen(Database,Table,char*,char*,char*,char*,char*); -BOOLEAN Configurar(SOCKET *,TRAMA* ); -BOOLEAN RESPUESTA_Configurar(SOCKET *,TRAMA* ); -BOOLEAN actualizaConfigurar(Database , Table , char* ); -BOOLEAN InventarioHardware(SOCKET *,TRAMA *); -BOOLEAN RESPUESTA_InventarioHardware(SOCKET *,TRAMA *); -BOOLEAN actualizaHardware(Database, Table,char* ,char*,char*,char*); -BOOLEAN cuestionPerfilHardware(Database,Table,char*,char*,int,char*,char*,int *,int); -BOOLEAN actualizaSoftware(Database , Table , char* , char* , char*,char*,char*); -BOOLEAN cuestionPerfilSoftware(Database, Table, char*, char*,int,int,char*,char*,char*,int *,int); - -BOOLEAN enviaArchivo(SOCKET *, TRAMA *); -BOOLEAN recibeArchivo(SOCKET *, TRAMA *); -BOOLEAN envioProgramacion(SOCKET *, TRAMA *); +bool actualizaCreacionImagen(Database,Table,char*,char*,char*,char*,char*,char*); +bool actualizaRestauracionImagen(Database,Table,char*,char*,char*,char*,char*); +bool actualizaHardware(Database, Table,char* ,char*,char*,char*); +bool cuestionPerfilHardware(Database,Table,char*,char*,int,char*,char*,int *,int); +bool actualizaSoftware(Database , Table , char* , char* , char*,char*,char*); +bool cuestionPerfilSoftware(Database, Table, char*, char*,int,int,char*,char*,char*,int *,int); int checkDato(Database,Table,char*,const char*,const char*,const char*); - - - diff --git a/admin/Sources/Services/ogAdmServer/tests/clients.json b/admin/Sources/Services/ogAdmServer/tests/clients.json new file mode 100644 index 00000000..01672ed3 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/clients.json @@ -0,0 +1 @@ +curl -X GET http://127.0.0.1:8888/clients diff --git a/admin/Sources/Services/ogAdmServer/tests/config/ogAdmServer.cfg b/admin/Sources/Services/ogAdmServer/tests/config/ogAdmServer.cfg new file mode 100644 index 00000000..41d812b6 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/config/ogAdmServer.cfg @@ -0,0 +1,8 @@ +ServidorAdm=localhost +PUERTO=2008 +USUARIO=test-db +PASSWORD=test-db +datasource=localhost +CATALOG=test-db +INTERFACE=eth1 +APITOKEN=07b3bfe728954619b58f0107ad73acc1 diff --git a/admin/Sources/Services/ogAdmServer/tests/post_clients.json b/admin/Sources/Services/ogAdmServer/tests/post_clients.json new file mode 100644 index 00000000..4667303d --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/post_clients.json @@ -0,0 +1 @@ +{ "clients" : [ "192.168.2.1", "192.168.2.2" ] } diff --git a/admin/Sources/Services/ogAdmServer/tests/post_shell_output.json b/admin/Sources/Services/ogAdmServer/tests/post_shell_output.json new file mode 100644 index 00000000..1badfed0 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/post_shell_output.json @@ -0,0 +1 @@ +{ "clients" : [ "192.168.2.1", "192.168.2.2" ]} diff --git a/admin/Sources/Services/ogAdmServer/tests/post_shell_run.json b/admin/Sources/Services/ogAdmServer/tests/post_shell_run.json new file mode 100644 index 00000000..1449d055 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/post_shell_run.json @@ -0,0 +1 @@ +{ "clients" : [ "192.168.2.1", "192.168.2.2" ], "run" : "ls" } diff --git a/admin/Sources/Services/ogAdmServer/tests/poweroff.json b/admin/Sources/Services/ogAdmServer/tests/poweroff.json new file mode 100644 index 00000000..4667303d --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/poweroff.json @@ -0,0 +1 @@ +{ "clients" : [ "192.168.2.1", "192.168.2.2" ] } diff --git a/admin/Sources/Services/ogAdmServer/tests/reboot.json b/admin/Sources/Services/ogAdmServer/tests/reboot.json new file mode 100644 index 00000000..4667303d --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/reboot.json @@ -0,0 +1 @@ +{ "clients" : [ "192.168.2.1", "192.168.2.2" ] } diff --git a/admin/Sources/Services/ogAdmServer/tests/run-tests.py b/admin/Sources/Services/ogAdmServer/tests/run-tests.py new file mode 100755 index 00000000..1a59a348 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/run-tests.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 + +import subprocess, glob, os + +sql_data = "INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, ntp, dns, proxy, modp2p, timep2p) VALUES ('Aula virtual', 1, 'aula.jpg', 0, 'Despliegue virtual con Vagrant.', 5, 2, '239.194.2.11', 9000, 70, '192.168.56.1', '255.255.255.0', '', '', '', 'peer', 30); INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES ('pc2', '192.168.2.1', '0800270E6501', 1, 1, 0, 0, 0, 0, '192.168.56.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif'), ('pc2', '192.168.2.2', '0800270E6502', 1, 1, 0, 0, 0, 0, '192.168.56.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif');" + +sql_create_user = "CREATE USER 'test-db'@'hostname'; GRANT ALL PRIVILEGES ON *.* To 'test-db'@'hostname' IDENTIFIED BY 'test-db';" + +sql_delete_user = "DROP USER 'test-db'@'hostname';" + +def start_mysql(): + + subprocess.run(['mysqladmin', 'drop', '-f', 'test-db'], + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + subprocess.run(['mysqladmin', 'create', 'test-db']) + subprocess.run('mysql --default-character-set=utf8 test-db < ../../../../Database/ogAdmBD.sql', shell=True) + subprocess.run(['mysql', '-D', 'test-db', '-e', sql_data]) + subprocess.run(['mysql', '-D', 'test-db', '-e', sql_create_user]) + +def stop_mysql(): + + subprocess.run(['mysql', '-D', 'test-db', '-e', sql_delete_user]) + subprocess.run(['mysqladmin', 'drop', '-f', 'test-db']) + +if os.getuid() is not 0: + print('You need to be root to run these tests :-)') + exit() + +if os.path.isfile('../ogAdmServer') is not True: + print('You need to build the ogAdmServer binary to run these tests :-)') + exit() + +start_mysql(); + +subprocess.Popen(['../ogAdmServer', '-f', 'config/ogAdmServer.cfg']) + +subprocess.run('python3 -m unittest discover -s units -v', shell=True) + +stop_mysql(); + +subprocess.run(['pkill', 'ogAdmServer']) diff --git a/admin/Sources/Services/ogAdmServer/tests/run-tests.sh b/admin/Sources/Services/ogAdmServer/tests/run-tests.sh new file mode 100755 index 00000000..f22df02a --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/run-tests.sh @@ -0,0 +1,14 @@ +API_KEY="07b3bfe728954619b58f0107ad73acc1" + +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/clients -d @post_clients.json +curl -X GET -H "Authorization: $API_KEY" http://127.0.0.1:8888/clients +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/wol -d @wol.json +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/shell/run -d @post_shell_run.json +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/shell/output -d @post_shell_output.json +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/session -d @session.json +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/poweroff -d @poweroff.json +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/reboot -d @reboot.json +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/stop -d @stop.json +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/refresh -d @refresh.json +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/hardware -d @post_clients.json +curl -X POST -H "Authorization: $API_KEY" http://127.0.0.1:8888/software -d @post_clients.json diff --git a/admin/Sources/Services/ogAdmServer/tests/session.json b/admin/Sources/Services/ogAdmServer/tests/session.json new file mode 100644 index 00000000..1b473c4c --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/session.json @@ -0,0 +1 @@ +{ "clients" : [ "192.168.2.1", "192.168.2.2" ], "disk" : "0", "partition" : "1"} diff --git a/admin/Sources/Services/ogAdmServer/tests/stop.json b/admin/Sources/Services/ogAdmServer/tests/stop.json new file mode 100644 index 00000000..4667303d --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/stop.json @@ -0,0 +1 @@ +{ "clients" : [ "192.168.2.1", "192.168.2.2" ] } diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0001_get_clients.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0001_get_clients.py new file mode 100644 index 00000000..218b41aa --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0001_get_clients.py @@ -0,0 +1,19 @@ +import requests +import unittest + +class TestGetClientsMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/clients' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 200) + + def test_post_without_data(self): + returned = requests.post(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 400) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0002_post_clients.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0002_post_clients.py new file mode 100644 index 00000000..1aae349e --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0002_post_clients.py @@ -0,0 +1,16 @@ +import requests +import unittest + +class TestPostClientsMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/clients' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ] } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0003_post_wol.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0003_post_wol.py new file mode 100644 index 00000000..e997aff6 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0003_post_wol.py @@ -0,0 +1,21 @@ +import requests +import unittest + +class TestPostWolMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/wol' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'type' : 'broadcast', 'clients' : [ { 'addr' : '192.168.2.1', + 'mac' : '00AABBCCDD01' } ] } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 405) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0004_post_shell_run.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0004_post_shell_run.py new file mode 100644 index 00000000..2a330be9 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0004_post_shell_run.py @@ -0,0 +1,20 @@ +import requests +import unittest + +class TestPostShellRunMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/shell/run' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ], 'run' : 'ls' } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 405) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0005_post_shell_output.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0005_post_shell_output.py new file mode 100644 index 00000000..1c6f7a3a --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0005_post_shell_output.py @@ -0,0 +1,20 @@ +import requests +import unittest + +class TestPostShellOutputMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/shell/output' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ] } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 405) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0006_post_session.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0006_post_session.py new file mode 100644 index 00000000..544ae2ab --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0006_post_session.py @@ -0,0 +1,21 @@ +import requests +import unittest + +class TestPostSessionMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/session' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ], + 'disk' : '0', 'partition' : '1'} + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 405) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0007_post_poweroff.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0007_post_poweroff.py new file mode 100644 index 00000000..d2d5b15d --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0007_post_poweroff.py @@ -0,0 +1,20 @@ +import requests +import unittest + +class TestPostPoweroffMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/poweroff' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ] } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 405) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0008_post_reboot.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0008_post_reboot.py new file mode 100644 index 00000000..5ac4dc24 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0008_post_reboot.py @@ -0,0 +1,20 @@ +import requests +import unittest + +class TestPostRebootMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/reboot' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ] } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 405) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0009_post_stop.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0009_post_stop.py new file mode 100644 index 00000000..7aa96ff8 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0009_post_stop.py @@ -0,0 +1,20 @@ +import requests +import unittest + +class TestPostStopMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/stop' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ] } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 405) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0010_post_refresh.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0010_post_refresh.py new file mode 100644 index 00000000..745bdbe5 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0010_post_refresh.py @@ -0,0 +1,20 @@ +import requests +import unittest + +class TestPostRefreshMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/refresh' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ] } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 405) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0011_post_hardware.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0011_post_hardware.py new file mode 100644 index 00000000..6d9c16a9 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0011_post_hardware.py @@ -0,0 +1,20 @@ +import requests +import unittest + +class TestPostHardwareMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/hardware' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ] } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 405) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0012_post_software.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0012_post_software.py new file mode 100644 index 00000000..049a3ec8 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0012_post_software.py @@ -0,0 +1,20 @@ +import requests +import unittest + +class TestPostSoftwareMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/software' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ] } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 200) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 405) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0013_nonexistent.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0013_nonexistent.py new file mode 100644 index 00000000..b2e908ce --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0013_nonexistent.py @@ -0,0 +1,30 @@ +import requests +import unittest + +class TestPostNonexistentMethods(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/nonexistent' + self.headers = {'Authorization' : '07b3bfe728954619b58f0107ad73acc1'} + self.wrong_headers = {'Authorization' : + 'WrongWrongWrongWrongWrongWrongWr'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ] } + + def test_post(self): + returned = requests.post(self.url, headers=self.headers, json=self.json) + self.assertEqual(returned.status_code, 404) + + def test_get(self): + returned = requests.get(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 404) + + def test_post_unauthenticated(self): + returned = requests.post(self.url, headers=self.wrong_headers) + self.assertEqual(returned.status_code, 401) + + def test_post_without_json(self): + returned = requests.post(self.url, headers=self.headers) + self.assertEqual(returned.status_code, 404) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0014_big_request.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0014_big_request.py new file mode 100644 index 00000000..5e5e2d71 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0014_big_request.py @@ -0,0 +1,19 @@ +import requests +import unittest + +MAX_REQ_SIZE = 4096 + +class TestBigRequest(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/clients' + self.data = 'X' * MAX_REQ_SIZE + + def test_post(self): + with self.assertRaises(requests.exceptions.ConnectionError) as context: + requests.post(self.url, data=self.data) + + self.assertTrue('Connection reset by peer' in str(context.exception)) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/units/test_0015_wrong_headers.py b/admin/Sources/Services/ogAdmServer/tests/units/test_0015_wrong_headers.py new file mode 100644 index 00000000..8a353217 --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/units/test_0015_wrong_headers.py @@ -0,0 +1,29 @@ +import requests +import unittest + +class TestPostWrongHeaders(unittest.TestCase): + + def setUp(self): + self.url = 'http://localhost:8888/clients' + self.too_large_content_length_headers = {'Authorization' : + '07b3bfe728954619b58f0107ad73acc1', 'Content-Length' : + '999999999999999999999999999999999999999999999999999999999'} + self.too_large_auth_headers = {'Authorization' : + 'TooLongoTooLongTooLongTooLongTooLongTooLongTooLongTooLong' + 'TooLongoTooLongTooLongTooLongTooLongTooLongTooLongTooLong' + 'TooLongoTooLongTooLongTooLongTooLongTooLongTooLongTooLong'} + self.json = { 'clients' : [ '192.168.2.1', '192.168.2.2' ] } + + def test_post_too_large_content(self): + with self.assertRaises(requests.exceptions.ConnectionError) as context: + returned = requests.post(self.url, + headers=self.too_large_content_length_headers) + + self.assertTrue('Connection aborted' in str(context.exception)) + + def test_post_too_large_auth(self): + returned = requests.post(self.url, headers=self.too_large_auth_headers) + self.assertEqual(returned.status_code, 401) + +if __name__ == '__main__': + unittest.main() diff --git a/admin/Sources/Services/ogAdmServer/tests/wol.json b/admin/Sources/Services/ogAdmServer/tests/wol.json new file mode 100644 index 00000000..2a2f799f --- /dev/null +++ b/admin/Sources/Services/ogAdmServer/tests/wol.json @@ -0,0 +1 @@ +{ "type" : "unicast", "clients" : [ { "addr" : "192.168.2.1", "mac" : "00AABBCCDD01" } ] } diff --git a/admin/Sources/Services/opengnsys.default b/admin/Sources/Services/opengnsys.default index 9af83e29..c0196537 100644 --- a/admin/Sources/Services/opengnsys.default +++ b/admin/Sources/Services/opengnsys.default @@ -1,12 +1,17 @@ # RUN_OGADMSERVER defined as OpenGnsys Admin Server # RUN_OGADMREPO defined as OpenGnsys Repository Manager -# RUN_OGADMAGENT run task scheduler service -# RUN_BTTRACKER run Bittorrent Tracker -# RUN_BTSEEDER start seeding of selected torrent files +# RUN_OGADMAGENT run task scheduler service, only if Admin Server is enabled +# RUN_BTTRACKER run Bittorrent Tracker, only if Repository is enabled +# RUN_BTSEEDER start seeding of selected torrent files, only if Repository is enabled +# BTSEEDER_PRIORITY nice priority to seed torrent files; recommended values: +# 8 for Admin Server or Repo without Torrent +# 0 for Admin Server and Repo with Torrent +# -8 for Repo with Torrent # RUN_CRON run Cron script to check started processes RUN_OGADMSERVER="yes" RUN_OGADMREPO="yes" RUN_OGADMAGENT="yes" RUN_BTTRACKER="yes" RUN_BTSEEDER="yes" +BTSEEDER_PRIORITY=0 RUN_CRONJOB="yes" diff --git a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php index 9947dcf7..c803a6bb 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php +++ b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php @@ -458,4 +458,4 @@ function pintaParticionesAsistenteDeployImage($cmd,$configuraciones,$idordenador echo '<TR height=5><TD colspan='.$colums.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;"> </TD></TR>';
}
-?>
+
diff --git a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php index 0b0282b9..4caff0ae 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php @@ -4,7 +4,7 @@ <tr> <td class="op_basic"> <?php echo $TbMsg["WCRP32"] ?> - <select name="ipMaster" id="ipMaster" style="width:220" onChange="ListarOrigenesMaster(this.value);"> + <select name="ipMaster" id="ipMaster" style="width:220px" onChange="ListarOrigenesMaster(this.value);"> <option value=""> -- <?php echo $TbMsg["WCRP32"] ?> -- </option> <?php echo ''.htmlOPTION_equipos($cmd,$ambito,$idambito).''; ?> </select> @@ -14,7 +14,7 @@ <div id="ajaxDiv"></div> <br /> <?php echo $TbMsg["WCRP34"] ?> - <select name="targetpart" id="targetpart" style="width:220;"> + <select name="targetpart" id="targetpart" style="width:220px;"> <option value="1 1"> 1er disco - 1ª particion </option> <option value="1 2"> 1er disco - 2ª particion </option> <option value="1 3"> 1er disco - 3ª particion </option> @@ -22,19 +22,19 @@ </select> <br /> <?php echo $TbMsg["WCRP35"] ?> - <select name="idmetodo" id="idmetodo" style="width:220;"> + <select name="idmetodo" id="idmetodo" style="width:220px;"> <option value="MULTICAST"> MULTICAST </option> <option value="UNICAST"> UNICAST </option> </select> <br /> <?php echo $TbMsg["WCRP36"] ?> - <select name="tool" id="tool" style="width:220;"> + <select name="tool" id="tool" style="width:220px;"> <option value="partclone"> partclone </option> <!-- <option value="partimage"> partimage </option> --> </select> <br /> <?php echo $TbMsg["WCRP37"] ?> - <select name="compresor" id="compresor" style="width:220;"> + <select name="compresor" id="compresor" style="width:220px;"> <option value="lzop"> lzop </option> <option value="gzip"> gzip </option> </select> diff --git a/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php b/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php index 4aece176..c75c9abd 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php @@ -8,7 +8,7 @@ $diskPartIndex = 0; for($cfgIndex = 0; $cfgIndex < $conKeys; $cfgIndex++){ if($tbKeys[$cfgIndex]["numpar"] != 0 && $tbKeys[$cfgIndex]["clonable"] == 1){ $disksPartitions[$diskPartIndex]["text"] = "Disco ".$tbKeys[$cfgIndex]["numdisk"]." - Part ".$tbKeys[$cfgIndex]["numpar"]; - $disksPartitions[$diskPartIndex]["value"] = $tbKeys[$cfgIndex]["numdisk"].";".$tbKeys[$cfgIndex]["numpar"]; + $disksPartitions[$diskPartIndex]["value"] = $tbKeys[$cfgIndex]["numdisk"].";".$tbKeys[$cfgIndex]["numpar"].";".$tbKeys[$cfgIndex]["tipopar"]; $diskPartIndex++; } } @@ -25,21 +25,16 @@ for($cfgIndex = 0; $cfgIndex < $conKeys; $cfgIndex++){ <td class="op_basic"> <?php echo $TbMsg["WDI20"] ?> - <select name="idparticion" id="idparticion" style="WIDTH:220"> + <select name="idparticion" id="idparticion" style="width:220px"> <?php foreach($disksPartitions as $diskPartition){ echo "<option value='".$diskPartition["value"]."'>".$diskPartition["text"]." </option>"; } ?> - <!-- - <option value="1"> 1 </option> - <option value="2"> 2 </option> - <option value="3"> 3 </option> - --> </select> <br /> <?php echo $TbMsg["WDI21"] ?> - <select name="idimagen" id="idimagen" style="WIDTH:220"> + <select name="idimagen" id="idimagen" style="width:220px"> <option value=""> <?php echo $TbMsg["WDI22"] ?></option> <?php echo ''. htmlOPTION_images($cmd,$ambito,$idambito) .''; ?> </select> @@ -47,7 +42,7 @@ for($cfgIndex = 0; $cfgIndex < $conKeys; $cfgIndex++){ <?php echo $TbMsg["WDI23"] ?> <br /> - <select name="idmetodo" id="idmetodo" style="WIDTH:220;"> + <select name="idmetodo" id="idmetodo" style="width:220px;"> <option value="TORRENT"> TORRENT </option> <option value="MULTICAST"> MULTICAST </option> <option value="MULTICAST-DIRECT"> MULTICAST-DIRECT </option> diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php index 9069815f..43f1d4e7 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php @@ -15,7 +15,7 @@ for ($p=1; $p<4; $p++) { <td> <input type="checkbox" id="checkGPT'.$p.'" 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=" +<select name="partGPT'.$p.'" id="partGPT'.$p.'" style="width:220px" 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; @@ -24,10 +24,10 @@ for ($p=1; $p<4; $p++) { }">'.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> +<select name="partGPT'.$p.'custom" id="partGPT'.$p.'custom" style="width:220px" disabled="true" >'. htmlForm_typepartnotcacheGPT($p) .'</select> </td> <td> -<select name="sizeGPT'.$p.'" id="sizeGPT'.$p.'" style="width:220" disabled="true" onclick=" +<select name="sizeGPT'.$p.'" id="sizeGPT'.$p.'" style="width:220px" disabled="true" onclick=" if (this.form.sizeGPT'.$p.'.options[this.form.sizeGPT'.$p.'.selectedIndex].value == \'CUSTOM\') { this.form.sizeGPT'.$p.'custom.disabled=false; } else { @@ -37,7 +37,7 @@ for ($p=1; $p<4; $p++) { <option value="CUSTOM"> '.$TbMsg[39].'</option> </select> <br /> -<input type="text" style="width:100" id="sizeGPT'.$p.'custom" name="sizeGPT'.$p.'custom" value="0" disabled="true" onchange="calculateFreeDisk(this.form);" /> +<input type="text" style="width:100px" id="sizeGPT'.$p.'custom" name="sizeGPT'.$p.'custom" value="0" disabled="true" onchange="calculateFreeDisk(this.form);" /> </td> </tr> '; @@ -47,15 +47,15 @@ for ($p=1; $p<4; $p++) { <tr id="trPartition4"> <td><input type="checkbox" name="checkGPT4" value="checkGPT4" onclick="clickPartitionCheckbox(this.form, 4,true);" /> <?php echo $TbMsg[20].' '.$p;?> </td> <td> -<select name="partGPT4" id="partGPT4" style="width:220" disabled="true" onchange="checkExtendedPartition(form);"><?php echo htmlForm_typepartnotcacheGPT(4) ?></select> +<select name="partGPT4" id="partGPT4" style="width:220px" disabled="disabled" onchange="checkExtendedPartition(form);"><?php echo htmlForm_typepartnotcacheGPT(4) ?></select> </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);" /> +<td><select name="sizeGPT4" id="sizeGPT4" style="width:220px" disabled="disabled" 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> +<input type="text" style="width:100px" name="sizeGPT4custom" value="0" disabled="disabled" onchange="calculateFreeGPTDisk(this.form);" /></td> </tr> </table> </td> @@ -76,5 +76,3 @@ for ($p=1; $p<4; $p++) { </th> </tr> -</td> - diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php index b1d6b079..08162326 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php @@ -59,15 +59,15 @@ for ($p=1; $p<4; $p++) { </select> <br /> --> -<select name="part4" id="part4" style="width:220" disabled="true" onchange="checkExtendedPartition(form);"><?php echo htmlForm_typepartnotcacheEngine10(4) ?></select> +<select name="part4" id="part4" style="width:220px" disabled="disabled" onchange="checkExtendedPartition(form);"><?php echo htmlForm_typepartnotcacheEngine10(4) ?></select> </td> -<td><select name="size4" id="size4" style="width:220" disabled="true" onclick="if (this.form.size4.options[this.form.size4.selectedIndex].value == 'CUSTOM') { this.form.size4custom.disabled=false } else { this.form.size4custom.disabled=true }" onchange="calculateFreeDisk(this.form);" /> +<td><select name="size4" id="size4" style="width:220px" disabled="disabled" onclick="if (this.form.size4.options[this.form.size4.selectedIndex].value == 'CUSTOM') { this.form.size4custom.disabled=false } else { this.form.size4custom.disabled=true }" onchange="calculateFreeDisk(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="size4custom" value="0" disabled="true" onchange="calculateFreeDisk(this.form);" /></td> +<input type="text" style="width:100px" name="size4custom" value="0" disabled="disabled" onchange="calculateFreeDisk(this.form);" /></td> </tr> </table> @@ -132,5 +132,3 @@ for ($p=5; $p<=9; $p++) { <?php echo $TbMsg[38];?>: <input type="text" id="freedisk" width="15" disabled="true" /> </th> </tr> - - diff --git a/admin/WebConsole/asistentes/includes/capturaacciones.php b/admin/WebConsole/asistentes/includes/capturaacciones.php index a6fa089d..3c24bce0 100644 --- a/admin/WebConsole/asistentes/includes/capturaacciones.php +++ b/admin/WebConsole/asistentes/includes/capturaacciones.php @@ -27,5 +27,5 @@ 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"]; -?> + diff --git a/admin/WebConsole/asistentes/includes/opcionesacciones.php b/admin/WebConsole/asistentes/includes/opcionesacciones.php index a598b090..31601278 100644 --- a/admin/WebConsole/asistentes/includes/opcionesacciones.php +++ b/admin/WebConsole/asistentes/includes/opcionesacciones.php @@ -63,9 +63,9 @@ <TD> </TD> <TD> </TD> <TD><?php echo $TbMsgAux[8] ?> </TD> - <TD><INPUT maxlength=3 style="FONT-FAMILY:Arial, Helvetica, sans-serif;FONT-SIZE: 11px;WIDTH:30" name=ordprocedimiento type=text value=""></TD></TR> + <TD><INPUT maxlength=3 style="FONT-FAMILY:Arial, Helvetica, sans-serif;FONT-SIZE: 11px;WIDTH:30px" name=ordprocedimiento type=text value=""></TD></TR> <!--------------------------------------------------------------------------------------------------------------------------------> - <TR HEIGHT=10><TD colspan=4> <HR></TD></TR> + <TR><TD colspan=4 height="10px"> <HR></TD></TR> <!--------------------------------------------------------------------------------------------------------------------------------> <TR> <TD><INPUT onclick="clic_mktarea(this)" name=sw_mktarea type=checkbox></TD> @@ -87,7 +87,7 @@ <TD> </TD> <TD> </TD> <TD><?php echo $TbMsgAux[12] ?> </TD> - <TD><INPUT maxlength=3 style="FONT-FAMILY:Arial, Helvetica, sans-serif;FONT-SIZE: 11px;WIDTH:30" name=ordtarea type=text value=""></TD></TR> + <TD><INPUT maxlength=3 style="FONT-FAMILY:Arial, Helvetica, sans-serif;FONT-SIZE: 11px;WIDTH:30px" name=ordtarea type=text value=""></TD></TR> <!--------------------------------------------------------------------------------------------------------------------------------> </TABLE> </FORM> diff --git a/admin/WebConsole/asistentes/jscripts/asistentes.js b/admin/WebConsole/asistentes/jscripts/asistentes.js index 59446868..b26eef01 100644 --- a/admin/WebConsole/asistentes/jscripts/asistentes.js +++ b/admin/WebConsole/asistentes/jscripts/asistentes.js @@ -18,7 +18,7 @@ // *********************************************************************************************************** function codeCloneRemotePartition(form){ -var command ; +var protocol; switch (form.idmetodo.value) { case "MULTICAST": @@ -29,7 +29,7 @@ switch (form.idmetodo.value) break; } //form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value; -command="cloneRemoteFromMaster " + form.ipMaster.value + " " + form.source.value + " " + protocol + " " + form.targetpart.value + " " + form.tool.value + " " + form.compresor.value; +var command="cloneRemoteFromMaster " + form.ipMaster.value + " " + form.source.value + " " + protocol + " " + form.targetpart.value + " " + form.tool.value + " " + form.compresor.value; form.codigo.value="\ ogEcho log session \"[0] $MSG_SCRIPTS_TASK_START " + command + "\"\n \ ogExecAndLog command " + command + " \n "; @@ -52,6 +52,10 @@ function enableDirect(form){ function codeDeployImage(form){ +var diskPart; +var imagen; +var command; + switch (form.idmetodo.value) { case "MULTICAST": @@ -72,14 +76,14 @@ switch (form.idmetodo.value) } // Datos imagen -var imagen = form.idimagen.value.split("_"); +imagen = form.idimagen.value.split("_"); //form.codigo.value="deployImage REPO /"; if (form.modo[0].checked) { // UHU - Distinguimos entre disco y particion, el valor de idparticion sera disco;particion. eje. 1;1 - var diskPart = form.idparticion.value.split(";"); - var imagen = form.idimagen.value.split("_"); + diskPart = form.idparticion.value.split(";"); + imagen = form.idimagen.value.split("_"); command="deployImage " + imagen[0] + " /" + imagen[1] + " "+diskPart[0]+" " + diskPart[1] + " " + protocol ; form.codigo.value="\ ogEcho log session \"[0] $MSG_SCRIPTS_TASK_START " + command + "\"\n \ " + @@ -89,10 +93,12 @@ command + " \n"; form.atrib_restore.value = "dsk=" + diskPart[0] + "@par="+ diskPart[1] +"@idi=" +imagen[2] + "@nci="+imagen[1] + "@ipr="+ imagen[0] +"@ifs=" +imagen[3] + "@ptc="+protocol +"@"; + // Si la partición es EFI mostramos un aviso. + if (diskPart[2] == "EFI") alert (TbMsg['EFIPART']); } else { - command="updateCache REPO /" + imagen[1] + ".img" + " " + protocol ; + command="updateCache " + imagen[0] + " /" + imagen[1] + ".img" + " " + protocol ; form.codigo.value="\ ogEcho log session \"[0] $MSG_SCRIPTS_TASK_START " + command +"\"\n \ " + command + " \n"; @@ -109,9 +115,11 @@ function modificarCodigo() { function codeParticionado(form){ var n_disk = form.n_disk.value; var tipo_part_table = form.tipo_part_table.value; + var freedisk; + var freediskGPT; // Comprobamos si la opcion elejida es GPT o MSDOS para llamar a una funcion u otra - if(tipo_part_table == "GPT"){ - var freediskGPT = parseInt(document.getElementById("freediskGPT").value); + if(tipo_part_table === "GPT"){ + freediskGPT = parseInt(document.getElementById("freediskGPT").value); // Comprobamos que el espacio libre en el disco no sea negativo, si lo es, dar aviso if(freediskGPT < 0){ alert(TbMsg['NODISKSIZE']); @@ -124,7 +132,7 @@ function codeParticionado(form){ } } else{ - var freedisk = parseInt(document.getElementById("freedisk").value); + freedisk = parseInt(document.getElementById("freedisk").value); // Comprobamos que el espacio libre en el disco no sea negativo, si lo es, dar aviso if(freedisk < 0){ alert(TbMsg['NODISKSIZE']); @@ -136,7 +144,6 @@ function codeParticionado(form){ codeParticionadoMSDOS(form); } } - } @@ -150,19 +157,23 @@ function codeParticionadoMSDOS (form) { var n_disk = form.n_disk.value; var tipo_part_table = form.tipo_part_table.value; var maxParts = 4; - var swapPart = new Array(); + var swapPart = []; var swapCode = ""; - + var partCheck; + var partType; + var partTypeCustom; + var partSize; + var partSizeCustom; // Comprobamos si esta seleccionada la cuarta particion y no es CACHE - if(form.check4.checked && form.part4.value != "CACHE") - maxParts = 5; + if(form.check4.checked && form.part4.value !== "CACHE") + maxParts = 5; for (var nPart=1; nPart<maxParts; nPart++) { - var partCheck=eval("form.check"+nPart); + partCheck=eval("form.check"+nPart); if (partCheck.checked) { - var partType=eval("form.part"+nPart); - if (partType.value == "CUSTOM" ) { - var partTypeCustom=eval("form.part"+nPart+"custom"); + partType=eval("form.part"+nPart); + if (partType.value === "CUSTOM" ) { + partTypeCustom=eval("form.part"+nPart+"custom"); partCode += " " + partTypeCustom.value; switch(partTypeCustom.value) { case "EXTENDED": @@ -184,9 +195,9 @@ function codeParticionadoMSDOS (form) { break; } } - var partSize=eval("form.size"+nPart); - if (partSize.value == "CUSTOM" ) { - var partSizeCustom=eval("form.size"+nPart+"custom"); + partSize=eval("form.size"+nPart); + if (partSize.value === "CUSTOM" ) { + partSizeCustom=eval("form.size"+nPart+"custom"); partCode += ":" + partSizeCustom.value; } else { partCode += ":" + partSize.value; @@ -195,19 +206,18 @@ function codeParticionadoMSDOS (form) { partCode += " EMPTY:0"; } } - var cacheCode=""; // Si se selecciono la particion 4 y es CACHE - if(form.part4.value == "CACHE"){ + if(form.part4.value === "CACHE"){ if (form.check4.checked) { - if (form.size4.value == "0") { + if (form.size4.value === "0") { sizecacheCode="\ ogEcho session \"[20] $MSG_HELP_ogGetCacheSize\"\n \ -sizecache=`ogGetCacheSize` "; +sizecache=`ogGetCacheSize` \n "; cacheCode="\ initCache "+n_disk+" $sizecache NOMOUNT &>/dev/null \n "; } else { - if (form.size4.value == "CUSTOM") { + if (form.size4.value === "CUSTOM") { cacheSize = form.size4custom.value; } else { cacheSize = form.size4.value; @@ -215,40 +225,40 @@ initCache "+n_disk+" $sizecache NOMOUNT &>/dev/null \n "; cacheCode="\ initCache " + n_disk + " " + cacheSize + " NOMOUNT &>/dev/null \n "; } - cacheCode += "ogEcho session \"[60] $MSG_HELP_ogListPartitions "+n_disk+"\" \n "; - cacheCode += "ogExecAndLog command session ogListPartitions "+n_disk+" \n "; + cacheCode += "ogEcho session \"[60] $MSG_HELP_ogListPartitions "+n_disk+"\" \n "; + cacheCode += "ogExecAndLog command session ogListPartitions "+n_disk+" \n "; } else { -partCode += " EMPTY:0"; + partCode += " EMPTY:0"; } } if (extended) { var lastLogical=5; - for (var nPart=9; nPart>5; nPart--) { + for (nPart=9; nPart>5; nPart--) { if (eval ("form.check"+nPart+".checked")) { lastLogical = nPart; break; } } - for (var nPart=5; nPart<=lastLogical; nPart++) { - var partCheck=eval("form.check"+nPart); + for (nPart=5; nPart<=lastLogical; nPart++) { + partCheck=eval("form.check"+nPart); if (partCheck.checked) { - var partType=eval("form.part"+nPart); - if (partType.value == "CUSTOM" ) { - var partTypeCustom=eval("form.part"+nPart+"custom"); + partType=eval("form.part"+nPart); + if (partType.value === "CUSTOM" ) { + partTypeCustom=eval("form.part"+nPart+"custom"); logicalCode += " " + partTypeCustom.value; // Partición swap - if (partTypeCustom.value == "LINUX-SWAP") + if (partTypeCustom.value === "LINUX-SWAP") swapPart.push(nPart); } else { logicalCode += " " + partType.value; // Partición swap - if (partType.value == "LINUX-SWAP") + if (partType.value === "LINUX-SWAP") swapPart.push(nPart); } - var partSize=eval("form.size"+nPart); - if (partSize.value == "CUSTOM" ) { - var partSizeCustom=eval("form.size"+nPart+"custom"); + partSize=eval("form.size"+nPart); + if (partSize.value === "CUSTOM" ) { + partSizeCustom=eval("form.size"+nPart+"custom"); logicalCode += ":" + partSizeCustom.value; } else { logicalCode += ":" + partSize.value; @@ -270,17 +280,20 @@ partCode += " EMPTY:0"; } form.codigo.value="\ -" + sizecacheCode + " \n \ +ogEcho log session \"[0] $MSG_HELP_ogCreatePartitions "+n_disk+"\"\n \ ogEcho session \"[10] $MSG_HELP_ogUnmountAll "+n_disk+"\"\n \ ogUnmountAll "+n_disk+" 2>/dev/null \n \ ogUnmountCache \n \ +" + sizecacheCode + "\ ogEcho session \"[30] $MSG_HELP_ogUpdatePartitionTable "+n_disk+"\"\n \ ogCreatePartitionTable "+n_disk+" "+tipo_part_table +" \n \ ogDeletePartitionTable "+n_disk+" \n \ ogUpdatePartitionTable "+n_disk+" \n \ " + cacheCode + "\ ogEcho session \"[70] $MSG_HELP_ogCreatePartitions " + partCode + "\"\n \ -if ogExecAndLog command ogCreatePartitions "+n_disk+" " + partCode + "; then \n \ +ogExecAndLog command ogCreatePartitions "+n_disk+" " + partCode + " \n \ +EVAL=$? \n \ +if [ $EVAL -eq 0 ]; then \n \ ogEcho session \"[80] $MSG_HELP_ogSetPartitionActive "+n_disk+" 1\"\n \ ogSetPartitionActive "+n_disk+" 1 \n \ ogEcho log session \"[90] $MSG_HELP_ogListPartitions "+n_disk+"\"\n \ @@ -290,7 +303,7 @@ if ogExecAndLog command ogCreatePartitions "+n_disk+" " + partCode + "; then \n "+ swapCode +"\ else \n \ ogEcho session log \"[100] ERROR: $MSG_HELP_ogCreatePartitions\" \n \ - sleep 5 \n \ + return $EVAL \n \ fi"; } @@ -304,26 +317,25 @@ function codeParticionadoGPT (form) { var extended=false; var n_disk = form.n_disk.value; var tipo_part_table = form.tipo_part_table.value; - var swapPart = new Array(); + var swapPart = []; var swapCode = ""; - - numParts=document.getElementById("numGPTpartitions").value; + var 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 // Solo tratamos la particion 4 como cache, si se selecciono este tipo - if(nPart == 4 && form.partGPT4.value == "CACHE") { - if (form.sizeGPT4.value == "0") { + if(nPart === 4 && form.partGPT4.value === "CACHE") { + if (form.sizeGPT4.value === "0") { sizecacheCode="\ -ogEcho session \"[20] $MSG_HELP_ogGetCacheSize\"\n \ -sizecache=`ogGetCacheSize` "; +ogEcho session \"[20] $MSG_HELP_ogGetCacheSize\" \n \ +sizecache=`ogGetCacheSize` \n "; cacheCode="\ ogEcho session \"[50] $MSG_HELP_ogCreateCache\"\n \ initCache "+ n_disk +" $sizecache NOMOUNT &>/dev/null \n "; } else { - if (form.sizeGPT4.value == "CUSTOM") { + if (form.sizeGPT4.value === "CUSTOM") { cacheSize = form.sizeGPT4custom.value; } else { cacheSize = form.sizeGPT4.value; @@ -336,20 +348,20 @@ initCache " + n_disk +" "+ cacheSize + " NOMOUNT &>/dev/null \n "; cacheCode += "ogExecAndLog command session ogListPartitions "+n_disk+" \n "; } else{ var partType=eval("form.partGPT"+nPart); - if (partType.value == "CUSTOM" ) { + if (partType.value === "CUSTOM" ) { var partTypeCustom=eval("form.partGPT"+nPart+"custom"); partCode += " " + partTypeCustom.value; // Partición swap - if (partTypeCustom.value == "LINUX-SWAP") - swapPart.push(nPart); + if (partTypeCustom.value === "LINUX-SWAP") + swapPart.push(nPart); } else { partCode += " " + partType.value; // Partición swap - if (partType.value == "LINUX-SWAP") - swapPart.push(nPart); + if (partType.value === "LINUX-SWAP") + swapPart.push(nPart); } var partSize=eval("form.sizeGPT"+nPart); - if (partSize.value == "CUSTOM" ) { + if (partSize.value === "CUSTOM" ) { var partSizeCustom=eval("form.sizeGPT"+nPart+"custom"); partCode += ":" + partSizeCustom.value; } else { @@ -369,24 +381,30 @@ initCache " + n_disk +" "+ cacheSize + " NOMOUNT &>/dev/null \n "; } form.codigo.value="\ -" + sizecacheCode + " \n \ -ogCreatePartitionTable "+n_disk+" "+tipo_part_table +" \n \ ogEcho log session \"[0] $MSG_HELP_ogCreatePartitions "+n_disk+"\"\n \ ogEcho session \"[10] $MSG_HELP_ogUnmountAll "+n_disk+"\"\n \ ogUnmountAll "+n_disk+" \n \ ogUnmountCache \n \ +" + sizecacheCode + "\ ogEcho session \"[30] $MSG_HELP_ogUpdatePartitionTable "+n_disk+"\"\n \ +ogCreatePartitionTable "+n_disk+" "+tipo_part_table +" \n \ ogDeletePartitionTable "+n_disk+" \n \ ogUpdatePartitionTable "+n_disk+" \n \ " + cacheCode + "\ ogEcho session \"[70] $MSG_HELP_ogCreatePartitions " + partCode + "\"\n \ -ogExecAndLog command ogCreatePartitions "+n_disk+" " + partCode + " \n \ -ogEcho session \"[80] $MSG_HELP_ogSetPartitionActive "+n_disk+" 1\"\n \ -ogSetPartitionActive "+n_disk+" 1 \n \ -ogEcho log session \"[90] $MSG_HELP_ogListPartitions "+n_disk+"\"\n \ -ogUpdatePartitionTable "+n_disk+" \n \ -ms-sys /dev/sda | grep unknow && ms-sys /dev/sda \n \ -ogExecAndLog command session log ogListPartitions "+n_disk+" \n"; +ogExecAndLog command ogCreatePartitions "+n_disk+" " + partCode + "\n \ +EVAL=$? \n \ +if [ $EVAL -eq 0 ]; then \n \ + ogEcho session \"[80] $MSG_HELP_ogSetPartitionActive "+n_disk+" 1\"\n \ + ogSetPartitionActive "+n_disk+" 1 \n \ + ogEcho log session \"[90] $MSG_HELP_ogListPartitions "+n_disk+"\"\n \ + ogUpdatePartitionTable "+n_disk+" \n \ + ms-sys /dev/sda | grep unknow && ms-sys /dev/sda \n \ + ogExecAndLog command session log ogListPartitions "+n_disk+" \n \ +else \n \ + ogEcho session log \"[100] ERROR: $MSG_HELP_ogCreatePartitions\" \n \ + return $EVAL \n \ +fi \n "; // Formateo de la swap form.codigo.value += swapCode; @@ -395,7 +413,7 @@ form.codigo.value += swapCode; function showPartitionForm (tipo_table_part) { document.getElementById("form"+tipo_table_part).style.display="inline"; - if(tipo_table_part == "MSDOS"){ + if(tipo_table_part === "MSDOS"){ // De los dos tipos, se oculta el otro document.getElementById("formGPT").style.display="none"; document.getElementById("warngpt").style.display="none"; @@ -419,10 +437,9 @@ function showPartitionForm (tipo_table_part) { function clickPartitionCheckbox (form, npart, isGPT) { // Si el parametro no esta definido, se toma como false isGPT = (isGPT)?isGPT:"false"; - if(isGPT == true){ + var prefix=""; + if(isGPT === true){ prefix="GPT"; - } else { - prefix=""; } var partCheck=eval("form.check"+prefix+npart); var partType=eval("form.part"+prefix+npart); @@ -434,27 +451,23 @@ function clickPartitionCheckbox (form, npart, isGPT) { if (partCheck.checked) { partType.disabled=false; partSize.disabled=false; - if(npart != 4){ - if (partType.options[partType.selectedIndex].value == "CUSTOM") { + if(npart !== 4){ + if (partType.options[partType.selectedIndex].value === "CUSTOM") { partTypeCustom.disabled=false; } } - if (partSize.options[partSize.selectedIndex].value == "CUSTOM") { - partSizeCustom.disabled=false; - } else { - partSizeCustom.disabled=true; - } + partSizeCustom.disabled = partSize.options[partSize.selectedIndex].value !== "CUSTOM"; } else { partType.disabled=true; partSize.disabled=true; // El campo TypeCustom no existe para la particion 4 - if(npart != 4) + if(npart !== 4) partTypeCustom.disabled=true; partSizeCustom.disabled=true; } if (npart <= 4) { // Si el formulario es GPT no hay extendidas - if(isGPT != true){ + if(isGPT !== true){ checkExtendedPartition(form); } calculateFreeDisk(form); @@ -479,12 +492,17 @@ function getMinDiskSize(disk){ // Calcula el tamaño de la mayor cache y lo guarda en un campo oculto function getMaxCacheSize() { var cacheSizeArray = document.getElementsByName("cachesize"); - var maxSize = cacheSizeArray[0].value; - for(var i= 1; i < cacheSizeArray.length; i++){ + // Si no existe cache el valor es cero. + if (cacheSizeArray[0]) { + var maxSize = cacheSizeArray[0].value; + for(var i= 1; i < cacheSizeArray.length; i++){ if(maxSize < cacheSizeArray[i].value) maxSize = cacheSizeArray[i].value; - } - document.getElementById("maxcachesize").value = maxSize; + } + document.getElementById("maxcachesize").value = maxSize; + } else { + document.getElementById("maxcachesize").value = 0; + } } @@ -492,7 +510,7 @@ function getMaxCacheSize() { function validaCache (freedisk) { var form = document.fdatos; var maxcachesize = parseInt(document.getElementById("maxcachesize").value); - if(form.part4.value === "CACHE" && form.check4.checked && form.size4.value == 0 ){ + if(form.part4.value === "CACHE" && form.check4.checked && form.size4.value === 0 ){ return ((freedisk - maxcachesize) > 0); } return true; @@ -501,7 +519,7 @@ function validaCache (freedisk) { // 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"){ + if(document.getElementById("tipo_part_table").value === "GPT"){ calculateFreeGPTDisk(form); } // Capturamos el disco seleccionado @@ -517,7 +535,7 @@ function calculateFreeDisk(form) { var partSize=eval("form.size"+npart); var partSizeCustom=eval("form.size"+npart+"custom"); if (partCheck.checked) { - if (partSize.options[partSize.selectedIndex].value == "CUSTOM") { + if (partSize.options[partSize.selectedIndex].value === "CUSTOM") { freeDisk.value -= parseInt(partSizeCustom.value); } else { freeDisk.value -= parseInt(partSize.options[partSize.selectedIndex].value); @@ -531,7 +549,7 @@ function calculateFreeDisk(form) { freeDisk.style.fontWeight = "normal"; freeDisk.style.fontStyle = "normal"; } - if (form.size4.value == 0) { + if (form.size4.value === 0) { freeDisk.value += " (- cache)"; // Aviso de caché sin modificar. } } @@ -539,7 +557,7 @@ 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"){ + if(document.getElementById("tipo_part_table").value === "MSDOS"){ calculateFreeDisk(form); } // Capturamos el disco seleccionado @@ -549,13 +567,13 @@ function calculateFreeGPTDisk(form) { var freeDisk=document.getElementById("freediskGPT"); // Capturamos el numero de particiones que hay hechas - numParts=document.getElementById("numGPTpartitions").value; - for (npart=1; npart<=numParts; npart++) { + var numParts=document.getElementById("numGPTpartitions").value; + for (var 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") { + if (partSize.options[partSize.selectedIndex].value === "CUSTOM") { freeDisk.value -= parseInt(partSizeCustom.value); } else { freeDisk.value -= parseInt(partSize.options[partSize.selectedIndex].value); @@ -569,7 +587,7 @@ function calculateFreeGPTDisk(form) { freeDisk.style.fontWeight = "normal"; freeDisk.style.fontStyle = "normal"; } - if (form.size4.value == 0) { + if (form.size4.value === 0) { freeDisk.value += " (- cache)"; // Aviso de caché sin modificar. } } @@ -603,28 +621,28 @@ function addGPTPartition(){ partitionTypes+='<OPTION value="BIOS-BOOT"> BIOS Boot </OPTION>'; - table = document.getElementById("particionesGPT"); + var 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); + var numPart=document.getElementById("numGPTpartitions").value; + var 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\') { \ + 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> \ +<select name='partGPT"+numPart+"custom' id='partGPT"+numPart+"custom' style='width:220px' 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\') { \ +<select name='sizeGPT"+numPart+"' id='sizeGPT"+numPart+"' style='width:220px' 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; \ @@ -632,19 +650,19 @@ function addGPTPartition(){ ' 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);' /> \ +<input type='text' style='width:100px' 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"); + var table = document.getElementById("particionesGPT"); // Capturamos el numero de particiones - numPart=document.getElementById("numGPTpartitions").value; + var 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); + var partitionRow = document.getElementById("trPartition"+numPart); table.deleteRow(partitionRow.rowIndex); // Decrementamos el numero de particiones document.getElementById("numGPTpartitions").value = parseInt(document.getElementById("numGPTpartitions").value)-1; @@ -655,21 +673,21 @@ function deleteGPTPartition(){ function checkExtendedPartition(form) { var logical=document.getElementById("logicas"); var visible=false; - for (npart=1; npart<=4; npart++) { + for (var npart=1; npart<=4; npart++) { var partCheck=eval("form.check"+npart); var partType=eval("form.part"+npart); var partTypeCustom=eval("form.part"+npart+"custom"); if (partCheck.checked) { partType.style.fontWeight = "normal"; - if (partType.value == "EXTENDED") { + if (partType.value === "EXTENDED") { visible=true; partType.style.fontWeight = "bold"; } // La particion 4 no tiene partTypeCustom - if(npart != 4){ - partTypeCustom.style.fontWeight = "normal"; - if (partType.value == "CUSTOM" && partTypeCustom.value == "EXTENDED") { + if(npart !== 4){ + partTypeCustom.style.fontWeight = "normal"; + if (partType.value === "CUSTOM" && partTypeCustom.value === "EXTENDED") { visible=true; partTypeCustom.style.fontWeight = "bold"; } diff --git a/admin/WebConsole/barramenu.php b/admin/WebConsole/barramenu.php index 7584c0d3..881c4d7f 100644 --- a/admin/WebConsole/barramenu.php +++ b/admin/WebConsole/barramenu.php @@ -276,20 +276,14 @@ for ($i=0;$i<count($numidcentro);$i++) </select> <TD width=4 align=middle><IMG src="./images/iconos/separitem.gif"></TD> -<TD width=4 align=middle><input name="submit" type="submit" value="Cambiar" ></input></TD> +<TD width=4 align=middle><input name="submit" type="submit" value="Cambiar"></TD> </form> <TD width=0 align=middle><IMG src="./images/iconos/separitem.gif"></TD> <TD><?php echo "Usuario.:.".ucwords($_SESSION["wusuario"]); ?></TD> -</TD> <?php } }?> - - - - - </TR> </TABLE> </TR> diff --git a/admin/WebConsole/clases/AdoPhp.php b/admin/WebConsole/clases/AdoPhp.php index 4265911c..b0dd5574 100644 --- a/admin/WebConsole/clases/AdoPhp.php +++ b/admin/WebConsole/clases/AdoPhp.php @@ -18,13 +18,13 @@ class Conexion{ var $controlador; // Controlador var $estado; // Estado de la conexion var $proveedor; // Proveedor de BD - var $error; // Colecci� de errores ocurridos durante el proceso (C�igo de error) - var $ultimoerror; // Ultimo error detectado - var $inderror; // Nmero de errores ocurridos durante el proceso + var $error; // Colección de errores ocurridos durante el proceso (Código de error) + var $ultimoerror; // Último error detectado + var $inderror; // Número de errores ocurridos durante el proceso var $msgerrores=array( "No se ha producido ningn error", - "001 : conexiónError - La conexion no se pudo establecer", - "002 : conexiónError - Se estableció la conexióncon el servidor pero la base de datos no responde", + "001 : conexiónError - La conexión no se pudo establecer", + "002 : conexiónError - Se estableció la conexión con el servidor pero la base de datos no responde", "003 : conexiónError - No se ha podido cerrar la actual conexión", "004 : conexiónError - El objeto está ocupado intentando establecer una conexiónanterior", "005 : conexiónError - La conexiónya está cerrada", @@ -653,7 +653,6 @@ class Recordset{ $this->campos=mysqli_fetch_array($this->filas); } } -} /* ------------------------------------------------------------------------------------------- Esta función devuelve una matriz asociativa con el nombre de los campos del recordset ---------------------------------------------------------------------------------------------*/ @@ -676,4 +675,5 @@ class Recordset{ } return($infocampos); } +} diff --git a/admin/WebConsole/clases/ArbolVistaXML.php b/admin/WebConsole/clases/ArbolVistaXML.php index 27ab3e1d..e83d448c 100644 --- a/admin/WebConsole/clases/ArbolVistaXML.php +++ b/admin/WebConsole/clases/ArbolVistaXML.php @@ -183,11 +183,9 @@ class ArbolVistaXML{ else $arbol='<TABLE style="BORDER-BOTTOM:#000000 1px solid;" border=0 cellspacing=0 cellpadding=0>'; $arbol.='<TR height="16px">'; - $atributosHTML=" "; $atributosHTML=$this->gXML->Atributos($nodo); $colornodo=""; $fondonodo=""; - $estilo=""; $atributosHTML=$this->gXML->TomaAtributoEspecial("colornodo",$colornodo,$atributosHTML); $atributosHTML=$this->gXML->TomaAtributoEspecial("fondonodo",$fondonodo,$atributosHTML); if ($colornodo!="" ) $colornodo=' COLOR:'.$colornodo.";"; @@ -196,7 +194,7 @@ class ArbolVistaXML{ if ($estilo!="" ) $estilo='style="'.$colornodo.$fondonodo.'"'; for ($i=0;$i<$nivel;$i++){ // Niveles previos - $arbol.='<TD '.$estilo.'width="3px"></TD>'; + $arbol.='<TD '.$estilo.' width="3px"></TD>'; $arbol.='<TD '.$estilo.' width="16px"><IMG src="'.$this->c_imgnivel[$i].'" width="16px" height="16px" ></TD>'; } $arbol.='<TD '.$estilo.' width="3px"></TD>'; // Desplazamiento de la imagen diff --git a/admin/WebConsole/clases/EncripDescrip.php b/admin/WebConsole/clases/EncripDescrip.php index c65c30a7..4752c8ad 100644 --- a/admin/WebConsole/clases/EncripDescrip.php +++ b/admin/WebConsole/clases/EncripDescrip.php @@ -52,4 +52,3 @@ class EncripDescrip{ return( $this->cadena); } } -?>
\ No newline at end of file diff --git a/admin/WebConsole/clases/MenuContextual.php b/admin/WebConsole/clases/MenuContextual.php index 7c49f5f2..1b108a4e 100644 --- a/admin/WebConsole/clases/MenuContextual.php +++ b/admin/WebConsole/clases/MenuContextual.php @@ -161,4 +161,3 @@ class MenuContextual{ return($layer); } } -?>
\ No newline at end of file diff --git a/admin/WebConsole/clases/SockHidra.php b/admin/WebConsole/clases/SockHidra.php index f3151b0f..4f49abba 100644 --- a/admin/WebConsole/clases/SockHidra.php +++ b/admin/WebConsole/clases/SockHidra.php @@ -3,18 +3,18 @@ include_once("EncripDescrip.php"); /*================================================================================ - Clase para conectarse con el servidor hidra y enviar comandos - Cualquier error producido en los procesos se puede recuperar con los m�odos + Clase para conectarse con el Servidor OpenGnsys y enviar comandos + Cualquier error producido en los procesos se puede recuperar con los métodos ================================================================================*/ class SockHidra{ - var $ultimoerror; // Ultimo error detectado - var $descripultimoerror; // Descripción del ltimo error detectado - var $socket; // Stream socket - var $servidor; // El servidor hidra - var $puerto; // El puerto odnde se conectar� - var $timeout; // El tiempo de espera para la conexi� - var $encripdescrip; // El encriptador - var $LONGITUD_TRAMA; // M�ima longitud de la trama + var $ultimoerror; // Ultimo error detectado + var $descripultimoerror; // Descripción del último error detectado + var $socket; // Stream socket + var $servidor; // El Servidor OpenGnsys + var $puerto; // El puerto donde se conectará + var $timeout; // El tiempo de espera para la conexión + var $encripdescrip; // El encriptador + var $LONGITUD_TRAMA; // Máxima longitud de la trama //________________________________________________________________________________________ // @@ -22,7 +22,7 @@ class SockHidra{ // Parámetros: // - servidor: El nombre o la IP del servidor // - puerto: El puerto usado para las comunicaciones - // - timeout: El tiempo de espera para la conexi� + // - timeout: El tiempo de espera para la conexión //________________________________________________________________________________________ function __construct($servidor, $puerto, $timeout=30){ $this->servidor=$servidor; @@ -36,7 +36,7 @@ class SockHidra{ } //________________________________________________________________________________________ // - // Averigua si el parametro pasado es una IP. devuelve true en caso afirmativo + // Averigua si el parámetro pasado es una IP. devuelve true en caso afirmativo //________________________________________________________________________________________ function _esIP(){ return(false); @@ -45,13 +45,13 @@ class SockHidra{ // // Conecta con el servidor // Devuelve: - // - false: Si falla la conexi� + // - false: Si falla la conexión // - true: En caso contrario //________________________________________________________________________________________ function conectar(){ $this->socket = socket_create (AF_INET, SOCK_STREAM, 0); if ($this->socket < 0) { - $this->ultimoerror=socket_strerror($socket); + $this->ultimoerror=socket_strerror($this->socket); $this->descripultimoerror="socket_create() fallo"; return(false); } @@ -65,9 +65,9 @@ class SockHidra{ } //________________________________________________________________________________________ // - // Cerrar la conexióncon el servidor + // Cierra la conexión con el servidor // Devuelve: - // - false: Si falla la conexi� + // - false: Si falla la conexión // - true: En caso contrario //________________________________________________________________________________________ function desconectar(){ @@ -75,21 +75,21 @@ class SockHidra{ } //________________________________________________________________________________________ // - // Devuelve el c�igo del ltimo error ocurrido durante el proceso anterior. + // Devuelve el código del último error ocurrido durante el proceso anterior. //________________________________________________________________________________________ function UltimoError(){ return($this->ultimoerror); } //________________________________________________________________________________________ // - // Devuelve una cadena con el mensage del ltimo error ocurrido durante el proceso anterior. + // Devuelve una cadena con el mensage del último error ocurrido durante el proceso anterior. //________________________________________________________________________________________ function DescripUltimoError(){ return($this->descripultimoerror); } //________________________________________________________________________________________ // - // Envia una petición de comando al servidor + // Envía una petición de comando al servidor // Parámetros: // - Parámetros: Parámetros del mensaje //________________________________________________________________________________________ @@ -102,7 +102,7 @@ class SockHidra{ } //________________________________________________________________________________________ // - // Envia una petición de información al servidor + // Envía una petición de información al servidor // Parámetros: // - Parámetros: Parámetros del mensaje //________________________________________________________________________________________ @@ -115,7 +115,7 @@ class SockHidra{ } //________________________________________________________________________________________ // - // Envia un mensaje al servidor + // Envía un mensaje al servidor // Parámetros: // - trama: Trama a enviar // - tipo: Tipo de mensaje @@ -157,7 +157,7 @@ class SockHidra{ global $LONCABECERA; global $LONBLK; - $lon=$lSize=0; + $lon=$hlonprm=$lSize=0; $buffer=""; $cadenaret=""; do{ @@ -168,16 +168,16 @@ class SockHidra{ if (substr($buffer,0,15)!="@JMMLCAMDJ_MCDJ") return($cadenaret); // No se reconoce la trama $hlonprm=hexdec(substr($buffer,$LONCABECERA,$LONHEXPRM)); - $lSize=$hlonprm; // Longitud total de la trama con los parametros encriptados + $lSize=$hlonprm; // Longitud total de la trama con los parámetros encriptados } }while($lon<$lSize); - $lon=$lSize-($LONCABECERA+$LONHEXPRM); // Longitud de los parametros aún encriptados - $parametros=substr($buffer,$LONCABECERA+$LONHEXPRM,$lon); // Parametros encriptados - $parametros=$this->encripdescrip->Desencriptar($parametros,$hlonprm); // Parametros sin encriptar + $lon=$lSize-($LONCABECERA+$LONHEXPRM); // Longitud de los parámetros aún encriptados + $parametros=substr($buffer,$LONCABECERA+$LONHEXPRM,$lon); // Parámetros encriptados + $parametros=$this->encripdescrip->Desencriptar($parametros,$hlonprm); // Parámetros sin encriptar $hlonprm=str_pad(dechex($lon),$LONHEXPRM,"0",STR_PAD_LEFT); // Rellena con ceros $cadenaret=substr($buffer,0,$LONCABECERA).$hlonprm.$parametros; return($cadenaret); } } -?> + diff --git a/admin/WebConsole/clases/XmlPhp.php b/admin/WebConsole/clases/XmlPhp.php index 55def93e..38711c02 100644 --- a/admin/WebConsole/clases/XmlPhp.php +++ b/admin/WebConsole/clases/XmlPhp.php @@ -282,4 +282,4 @@ class XmlPhp{ return($info); } } // Fin de la clase -?> + diff --git a/admin/WebConsole/comandos/Apagar.php b/admin/WebConsole/comandos/Apagar.php index 284b9cd0..ac316a2c 100644 --- a/admin/WebConsole/comandos/Apagar.php +++ b/admin/WebConsole/comandos/Apagar.php @@ -27,8 +27,8 @@ if (!$cmd) //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/Apagar.js"></SCRIPT> diff --git a/admin/WebConsole/comandos/Arrancar.php b/admin/WebConsole/comandos/Arrancar.php index a73e2d7f..21ff0b9d 100644 --- a/admin/WebConsole/comandos/Arrancar.php +++ b/admin/WebConsole/comandos/Arrancar.php @@ -27,8 +27,8 @@ if (!$cmd) //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/Arrancar.js"></SCRIPT> @@ -43,8 +43,7 @@ if (!$cmd) // include_once("./includes/FiltradoAmbito.php"); ?> - <P align=center><SPAN align=center class=subcabeceras><?php echo $TbMsg[7] ?></SPAN></p> - </BR> + <P align=center><SPAN class=subcabeceras><?php echo $TbMsg[7] ?></SPAN></p> <TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <TR> <TH align=center> </Th> diff --git a/admin/WebConsole/comandos/Comando.php b/admin/WebConsole/comandos/Comando.php index d4e7eff8..ccece6e6 100644 --- a/admin/WebConsole/comandos/Comando.php +++ b/admin/WebConsole/comandos/Comando.php @@ -27,8 +27,8 @@ if (!$cmd) //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/Comando.js"></SCRIPT> diff --git a/admin/WebConsole/comandos/Configurar.php b/admin/WebConsole/comandos/Configurar.php index 6ce89cfa..89e34713 100644 --- a/admin/WebConsole/comandos/Configurar.php +++ b/admin/WebConsole/comandos/Configurar.php @@ -53,9 +53,9 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<TITLE>Administración web de aulas</TITLE> <LINK rel="stylesheet" type="text/css" href="../estilos.css"> <STYLE TYPE="text/css"></STYLE> <SCRIPT language="javascript" src="./jscripts/Configurar.js"></SCRIPT> @@ -126,7 +126,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; echo '<TD align=center>'.HTMLSELECT_particiones(0).'</TD>'; echo '<TD align=center>'.HTMLSELECT_tipospar($cmd,"").'</TD>'; echo '<TD align=center>'.HTMLSELECT_sistemasficheros($cmd,"").'</TD>'; - echo '<TD align=center><INPUT type="text" style="width:100" value="0"></TD>'; + echo '<TD align=center><INPUT type="text" style="width:100px" value="0"></TD>'; echo '<TD align=center> </TD>'; echo '<TD align=center>'.opeFormatear().'</TD></TR></TABlE>'; //________________________________________________________________________________________________________ diff --git a/admin/WebConsole/comandos/CrearImagen.php b/admin/WebConsole/comandos/CrearImagen.php index bab18e16..1944872a 100644 --- a/admin/WebConsole/comandos/CrearImagen.php +++ b/admin/WebConsole/comandos/CrearImagen.php @@ -38,7 +38,7 @@ if (!$resul){ <HTML> <HEAD> <TITLE>Administración web de aulas</TITLE> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<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/CrearImagen.js"></SCRIPT> <SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT> @@ -51,11 +51,11 @@ if (!$resul){ $urlimg='../images/iconos/ordenador.gif'; $textambito=$TbMsg[15]; - echo '<p align=center><span class=cabeceras>'.$TbMsg[0].' </span><br>'; - echo '<IMG src="'.$urlimg.'"> <span align=center class=subcabeceras> - <U>'.$TbMsg[14].': '.$textambito.','.$nombreambito.'</U></span> </span></p>'; + echo '<p align="center"><span class="cabeceras">'.$TbMsg[0].' </span><br>'; + echo '<img src="'.$urlimg.'" alt="*"> <span align=center class=subcabeceras> + <u>'.$TbMsg[14].': '.$textambito.','.$nombreambito.'</u></span> </p>'; - echo '<P align=center><SPAN align=center class=subcabeceras><?php echo $TbMsg[6] ?></SPAN></P>'."\n"; + echo '<p align="center"><SPAN class="subcabeceras">'.$TbMsg[6].'</span></p>'."\n"; if (tiene_repo($idambito)) { echo '<FORM align=center name="fdatos">'."\n". @@ -68,9 +68,8 @@ if (!$resul){ ' <TH align=center>'.$TbMsg["CREATE_NOREPO"].'</TH>'."\n". ' </TR>'."\n". '</TABLE>'."\n"; - } ?> + } -<?php //________________________________________________________________________________________________________ include_once("./includes/formularioacciones.php"); //________________________________________________________________________________________________________ @@ -83,8 +82,8 @@ if (!$resul){ <?php /************************************************************************************************************************************************** Recupera los datos de un ordenador - Parametros: - - cmd: Una comando ya operativo (con conexiónabierta) + Parámetros: + - cmd: Una comando ya operativo (con conexiónabierta) - ido: El identificador del ordenador ________________________________________________________________________________________________________*/ function tomaPropiedades($cmd,$ido){ @@ -93,11 +92,11 @@ function tomaPropiedades($cmd,$ido){ global $mac; global $idperfilhard; global $idrepositorio; - $rs=new Recordset; + $rs=new Recordset; $cmd->texto="SELECT nombreordenador,ip,mac,idperfilhard,idrepositorio FROM ordenadores WHERE idordenador='".$ido."'"; - $rs->Comando=&$cmd; + $rs->Comando=&$cmd; if (!$rs->Abrir()) return(false); // Error al abrir recordset - $rs->Primero(); + $rs->Primero(); if (!$rs->EOF){ $nombreordenador=$rs->campos["nombreordenador"]; $ip=$rs->campos["ip"]; @@ -123,15 +122,16 @@ function HTMLSELECT_imagenes($cmd,$idrepositorio,$idperfilsoft,$disk,$particion, $cmd->texto="SELECT DISTINCT imagenes.idimagen,imagenes.descripcion,imagenes.nombreca, imagenes.idperfilsoft, repositorios.nombrerepositorio, repositorios.ip FROM imagenes INNER JOIN repositorios USING (idrepositorio) - WHERE repositorios.idrepositorio = (SELECT idrepositorio FROM ordenadores WHERE ordenadores.ip='".$masterip."') + WHERE imagenes.tipo=".$IMAGENES_MONOLITICAS." + AND repositorios.idrepositorio IN (SELECT idrepositorio FROM ordenadores WHERE ordenadores.ip='".$masterip."') OR repositorios.ip='".$masterip."' ORDER BY imagenes.descripcion"; - $rs=new Recordset; - $rs->Comando=&$cmd; + $rs=new Recordset; + $rs->Comando=&$cmd; $SelectHtml.= '<SELECT class="formulariodatos" id="despleimagen_'.$disk."_".$particion.'" style="WIDTH: 300">'; $SelectHtml.= ' <OPTION value="0"></OPTION>'; if ($rs->Abrir()){ - $rs->Primero(); + $rs->Primero(); while (!$rs->EOF){ $SelectHtml.='<OPTION value="'.$rs->campos["idimagen"]."_".$rs->campos["nombreca"]."_".$rs->campos["ip"].'"'; if($idperfilsoft==$rs->campos["idperfilsoft"]) $SelectHtml.=" selected "; diff --git a/admin/WebConsole/comandos/CrearImagenBasica.php b/admin/WebConsole/comandos/CrearImagenBasica.php index 875aeb40..d3d048ef 100644 --- a/admin/WebConsole/comandos/CrearImagenBasica.php +++ b/admin/WebConsole/comandos/CrearImagenBasica.php @@ -1,12 +1,12 @@ <?php // ************************************************************************************************************************************************* -// Aplicaci�n WEB: ogAdmWebCon -// Autor: Jos� Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla -// Fecha Creaci�n: A�o 2012 -// Fecha �ltima modificaci�n: Noviembre-2012 +// Aplicación WEB: ogAdmWebCon +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: Año 2012 +// Fecha última modificación: Noviembre-2012 // Nombre del fichero: CrearImagenBas.php -// Descripci�n : -// Implementaci�n del comando "CrearImagenBas.php" +// Descripción : +// Implementación del comando "CrearImagenBas.php" // ************************************************************************************************************************************************* include_once("../includes/ctrlacc.php"); include_once("../clases/AdoPhp.php"); @@ -35,9 +35,9 @@ if (!$resul){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administraci�n web de aulas</TITLE> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<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/CrearImagenBasica.js"></SCRIPT> <SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT> @@ -50,29 +50,27 @@ if (!$resul){ Cabecera -------------------------------------------------------------------------------------------> <P align=center class=cabeceras><?php echo $TbMsg[0] ?><P> - <P align=center> - <SPAN align=center class=subcabeceras><?php echo $TbMsg[1] ?></SPAN> - </BR> + <P align=center><SPAN class=subcabeceras><?php echo $TbMsg[1] ?></SPAN></P> + <BR> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <TR> - <TH align=center> <?php echo $TbMsg[2] ?> </TD> + <TH align=center> <?php echo $TbMsg[2] ?> </TH> <?php echo '<TD>'.$nombreordenador.'</TD>';?> <TD colspan=2 valign=top align=left rowspan=3><IMG border=2 style="border-color:#63676b" src="../images/fotoordenador.gif"></TD> </TR> <TR> - <TH align=center> <?php echo $TbMsg[3] ?> </TD> + <TH align=center> <?php echo $TbMsg[3] ?> </TH> <?php echo '<TD>'.$ip.'</TD>';?> </TR> <TR> - <TH align=center> <?php echo $TbMsg[4] ?> </TD> + <TH align=center> <?php echo $TbMsg[4] ?> </TH> <?php echo '<TD>'.$mac.'</TD>';?> </TR> </TABLE> - </P> <!------------------------------------------------------------------------------------------ Subcabecera -------------------------------------------------------------------------------------------> - <P align=center><SPAN align=center class=subcabeceras><?php echo $TbMsg[6] ?></SPAN></p> + <P align=center><SPAN class=subcabeceras><?php echo $TbMsg[6] ?></SPAN></p> <FORM align=center name="fdatos"> <TABLE width=90% align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <TR> @@ -114,7 +112,7 @@ if (!$resul){ /*---------------------------------------------------------------------------------------------- Recupera los datos de un ordenador - Parametros: + Parámetros: - ido: El identificador del ordenador ----------------------------------------------------------------------------------------------*/ function tomaPropiedades($cmd,$ido) @@ -126,8 +124,8 @@ function tomaPropiedades($cmd,$ido) $rs=new Recordset; $cmd->texto="SELECT nombreordenador,ip,mac,idperfilhard,idrepositorio - FROM ordenadores - WHERE idordenador='".$ido."'"; + FROM ordenadores + WHERE idordenador='".$ido."'"; $rs->Comando=&$cmd; if (!$rs->Abrir()) return(false); // Error al abrir recordset $rs->Primero(); @@ -184,13 +182,11 @@ function HTMLSELECT_imagenes($idimagen) $SelectHtml=""; $cmd->texto="SELECT imagenes.idimagen,imagenes.descripcion,imagenes.nombreca,imagenes.ruta, - repositorios.ip,repositorios.nombrerepositorio - FROM imagenes - INNER JOIN repositorios on imagenes.idrepositorio = repositorios.idrepositorio - WHERE tipo=".$IMAGENES_BASICAS." - AND imagenes.idcentro=".$idcentro; - - //echo $cmd->texto; + repositorios.ip,repositorios.nombrerepositorio + FROM imagenes + INNER JOIN repositorios on imagenes.idrepositorio = repositorios.idrepositorio + WHERE tipo=".$IMAGENES_BASICAS." + AND imagenes.idcentro=".$idcentro; $rs=new Recordset; $rs->Comando=&$cmd; if (!$rs->Abrir()) return(""); @@ -209,5 +205,4 @@ function HTMLSELECT_imagenes($idimagen) $SelectHtml.= '</SELECT>'; return($SelectHtml); } -?> diff --git a/admin/WebConsole/comandos/CrearSoftIncremental.php b/admin/WebConsole/comandos/CrearSoftIncremental.php index 87c3cb69..0381e4c6 100644 --- a/admin/WebConsole/comandos/CrearSoftIncremental.php +++ b/admin/WebConsole/comandos/CrearSoftIncremental.php @@ -1,12 +1,12 @@ <?php // ************************************************************************************************************************************************* -// Aplicaci�n WEB: ogAdmWebCon -// Autor: Jos� Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla -// Fecha Creaci�n: A�o 2012 -// Fecha �ltima modificaci�n: Noviembre-2012 +// Aplicación WEB: ogAdmWebCon +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: Año 2012 +// Fecha última modificación: Noviembre-2012 // Nombre del fichero: CrearImagenBas.php -// Descripci�n : -// Implementaci�n del comando "CrearImagenBas.php" +// Descripción: +// Implementación del comando "CrearImagenBas.php" // ************************************************************************************************************************************************* include_once("../includes/ctrlacc.php"); include_once("../clases/AdoPhp.php"); @@ -26,19 +26,19 @@ include_once("./includes/capturaacciones.php"); // $cmd=CreaComando($cadenaconexion); if (!$cmd) - Header('Location: '.$pagerror.'?herror=2'); // Error de conexi�n con servidor B.D. + Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D. //________________________________________________________________________________________________________ // $resul=tomaPropiedades($cmd,$idambito); if (!$resul){ - Header('Location: '.$pagerror.'?herror=3'); // Error de recuperaci�n de datos. + Header('Location: '.$pagerror.'?herror=3'); // Error de recuperación de datos. } //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administraci�n web de aulas</TITLE> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<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/CrearSoftIncremental.js"></SCRIPT> <SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT> @@ -50,30 +50,29 @@ if (!$resul){ <!------------------------------------------------------------------------------------------ Cabecera -------------------------------------------------------------------------------------------> - <P align=center class=cabeceras><?php echo $TbMsg[0] ?><P> + <P align=center class=cabeceras><?php echo $TbMsg[0] ?></P> <P align=center> - <SPAN align=center class=subcabeceras><?php echo $TbMsg[1] ?></SPAN> - </BR> + <SPAN class=subcabeceras><?php echo $TbMsg[1] ?></SPAN> + <BR> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <TR> - <TH align=center> <?php echo $TbMsg[2] ?> </TD> + <TH align=center> <?php echo $TbMsg[2] ?> </TH> <?php echo '<TD>'.$nombreordenador.'</TD>';?> <TD colspan=2 valign=top align=left rowspan=3><IMG border=2 style="border-color:#63676b" src="../images/fotoordenador.gif"></TD> </TR> <TR> - <TH align=center> <?php echo $TbMsg[3] ?> </TD> + <TH align=center> <?php echo $TbMsg[3] ?> </TH> <?php echo '<TD>'.$ip.'</TD>';?> </TR> <TR> - <TH align=center> <?php echo $TbMsg[4] ?> </TD> + <TH align=center> <?php echo $TbMsg[4] ?> </TH> <?php echo '<TD>'.$mac.'</TD>';?> </TR> </TABLE> - </P> <!------------------------------------------------------------------------------------------ Subcabecera -------------------------------------------------------------------------------------------> - <P align=center><SPAN align=center class=subcabeceras><?php echo $TbMsg[6] ?></SPAN></p> + <P align=center><SPAN class=subcabeceras><?php echo $TbMsg[6] ?></SPAN></p> <FORM align=center name="fdatos"> <TABLE width=90% align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <TR> @@ -115,7 +114,7 @@ if (!$resul){ /*---------------------------------------------------------------------------------------------- Recupera los datos de un ordenador - Parametros: + Parámetros: - ido: El identificador del ordenador ----------------------------------------------------------------------------------------------*/ function tomaPropiedades($cmd,$ido) @@ -154,13 +153,13 @@ function opcionesAdicionales() $tablaHtml.='<tr><th colspan=8 align=center><b> '.$TbMsg[11].' </b></th></tr>'; $tablaHtml.='<tr id="trOpc"> <td align=right>'.$TbMsg[13].'</td> - <td ><input type=checkbox name="bpi"></td>'; // Borrar imagen del servidor o borrar partici�n previamente + <td ><input type=checkbox name="bpi"></td>'; // Borrar imagen del servidor o borrar partición previamente $tablaHtml.=' <td align=right>'.$TbMsg[14].'</td> - <td><input type=checkbox name="cpc"></td>'; // Copiar adem�s la imagen a la cach� + <td><input type=checkbox name="cpc"></td>'; // Copiar además la imagen a la caché $tablaHtml.=' <td align=right>'.$TbMsg[15].'</td> - <td><input type=checkbox name="bpc"></td>'; // Borrar imagen de la cach� previamente antes de copiarla + <td><input type=checkbox name="bpc"></td>'; // Borrar imagen de la caché previamente antes de copiarla $tablaHtml.=' <td align=right>'.$TbMsg[16].'</td> <td><input type=checkbox name="nba"></td>'; // No borrar archivos en destino @@ -206,5 +205,4 @@ function HTMLSELECT_imagenes($idimagen) $SelectHtml.= '</SELECT>'; return($SelectHtml); } -?> diff --git a/admin/WebConsole/comandos/EjecutarScripts.php b/admin/WebConsole/comandos/EjecutarScripts.php index 539e78c4..d5c31b6a 100644 --- a/admin/WebConsole/comandos/EjecutarScripts.php +++ b/admin/WebConsole/comandos/EjecutarScripts.php @@ -26,8 +26,8 @@ if (!$cmd) //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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> @@ -45,8 +45,8 @@ if (!$cmd) //________________________________________________________________________________________________________ ?> <P align=center> - <SPAN align=center class=subcabeceras><?php echo $TbMsg[10] ?></SPAN> - <form align=center name="fdatos"> + <SPAN class=subcabeceras><?php echo $TbMsg[10] ?></SPAN> + <form name="fdatos"> <table align=center class=tabla_datos border="0" cellpadding="0" cellspacing="1"> <tr> <th><?php echo $TbMsg[12] ?></th> diff --git a/admin/WebConsole/comandos/EliminarImagenCache.php b/admin/WebConsole/comandos/EliminarImagenCache.php index a49f6eac..4fb0088a 100644 --- a/admin/WebConsole/comandos/EliminarImagenCache.php +++ b/admin/WebConsole/comandos/EliminarImagenCache.php @@ -28,9 +28,9 @@ if (!$cmd) //___________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administraci??n web de aulas</TITLE> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<TITLE>Administración web de aulas</TITLE> <LINK rel="stylesheet" type="text/css" href="../estilos.css"> <SCRIPT language="javascript" src="./jscripts/EliminarImagenCache.js"></SCRIPT> <SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT> @@ -159,9 +159,7 @@ switch($ambito){ <?php }?> <!-- //#agp--> - <P align=center> - <SPAN align=center class=subcabeceras><?php echo $TbMsg[7] ?></SPAN> - </P> + <P align=center><SPAN class=subcabeceras><?php echo $TbMsg[7] ?></SPAN></P> <form align=center name="fdatos"> <?php echo tabla_configuraciones($cmd,$idambito); ?> @@ -330,8 +328,7 @@ switch($ambito){ $tablaHtml=""; - $rs->Comando=&$cmd; - $rs=new Recordset; + $rs=new Recordset; $rs->Comando=&$cmd; if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset $rs->Primero(); @@ -415,9 +412,9 @@ switch($ambito){ if ($esdir[$numdir] == "d"){$ruta[$numdir]='rm%20-r%20/opt/opengnsys/cache/opt/opengnsys/images/'.$value;}else{$ruta[$numdir]='rm%20-r%20/opt/opengnsys/cache/opt/opengnsys/images/'.$value.$todo;} echo '<TR>'.chr(13); echo '<TD align=center> '.$contar.' </TD>'.chr(13); - if ($esdir[$numdir]=="d"){echo '<TD align=center><font color=blue> D </font></TD>'.chr(13);}else{echo '<TD align=center> F </TD>'.chr(13);} + if ($esdir[$numdir]=="d"){echo '<TD align=center><div style="color: blue"> D </div></TD>'.chr(13);}else{echo '<TD align=center> F </TD>'.chr(13);} echo '<TD align=center ><input type="radio" name="codigo" value='.$ruta[$numdir].'></TD>'.chr(13); - if ($esdir[$numdir]=="d"){echo '<TD align=center><font color=blue> '.$value.' </font></TD>'.chr(13);}else{echo '<TD align=center> '.$value.' </TD>'.chr(13);} + if ($esdir[$numdir]=="d"){echo '<TD align=center><div style="color: blue"> '.$value.' </div></TD>'.chr(13);}else{echo '<TD align=center> '.$value.' </TD>'.chr(13);} if ($cuentarepos==1){echo '<TD align=center> '.$tamanofich[0].'</TD>'.chr(13);} echo '</TR>'.chr(13); $contar++;$numdir++; diff --git a/admin/WebConsole/comandos/EliminarImagenRepositorio.php b/admin/WebConsole/comandos/EliminarImagenRepositorio.php index 7fbb046a..5708679c 100644 --- a/admin/WebConsole/comandos/EliminarImagenRepositorio.php +++ b/admin/WebConsole/comandos/EliminarImagenRepositorio.php @@ -16,12 +16,9 @@ include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".p include_once("../gestores/relaciones/imagenes_eliminacion.php"); -if (isset($_POST["opcion"])) {$opcion=$_POST["opcion"];}else{$opcion;} // Recoge parametros -//$opcion=$_POST["opcion"]; // Recoge parametros -if (isset($_POST["idrepositorio"])) {$idrepositorio=$_POST["idrepositorio"];}else{$idrepositorio;} -//$idrepositorio=$_POST["idrepositorio"]; +if (isset($_POST["opcion"])) {$opcion=$_POST["opcion"];}else{$opcion='';} // Recoge parametros +if (isset($_POST["idrepositorio"])) {$idrepositorio=$_POST["idrepositorio"];}else{$idrepositorio=0;} if (isset($_POST["grupoid"])) {$grupoid=$_POST["grupoid"];}else{$grupoid='';} -//$grupoid=$_POST["grupoid"]; $idcentro=$_SESSION["widcentro"]; if (isset($_GET["opcion"])) $opcion=$_GET["opcion"]; // Recoge parametros if (isset($_GET["idrepositorio"])) $idrepositorio=$_GET["idrepositorio"]; @@ -32,13 +29,12 @@ if (isset($_POST["modov"])) {$modov=$_POST["modov"];}else{$modov=0;} //________________________________________________________________________________________________________ $idcomando=10; $descricomando="Ejecutar Script"; -//echo $ambito."<br>"; -//echo $idambito."<br>"; $funcion="EjecutarScript"; -//echo $atributos."<br>"; -//echo $gestor; $gestor="../comandos/gestores/gestor_Comandos.php"; //$gestor="./ElimininarImagenRepositorio.php"; +$espaciorepos=array(); +$separarogunit=0; +$iprepositorio=''; //________________________________________________________________________________________________________ $cmd=CreaComando($cadenaconexion); if (!$cmd) @@ -145,8 +141,7 @@ $repolocal="si"; sort($imarepo); // Ordenamos el Array - if (isset($_POST["contar"])) {$cuantos=$_POST["contar"];}else{$cuantos=0;$contar;} - //$cuantos=$_POST["contar"]; + if (isset($_POST["contar"])) {$cuantos=$_POST["contar"];}else{$cuantos=0;} for ($i=1;$i<=$cuantos;$i++) { //######################################################################### @@ -242,8 +237,8 @@ $repolocal="no"; ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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="../clases/jscripts/HttpLib.js"></SCRIPT> @@ -268,10 +263,10 @@ function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(me <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <?php if ($espaciorepo != ""){?> <TR> - <TH align=center> <?php echo $TbMsg[18]?> </TD> - <TH align=center> <?php echo $TbMsg[19]?> </TD> - <TH align=center> <?php echo $TbMsg[20]?> </TD> - <TH align=center> <?php echo $TbMsg[21]?> </TD> + <TH align=center> <?php echo $TbMsg[18]?> </TH> + <TH align=center> <?php echo $TbMsg[19]?> </TH> + <TH align=center> <?php echo $TbMsg[20]?> </TH> + <TH align=center> <?php echo $TbMsg[21]?> </TH> </TR> <TR> <TD align=center width=110> <?php echo $totalrepo?> </TD> @@ -281,7 +276,7 @@ function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(me </TR> <?php }else {?> <TR> - <TH align=center width=485> <?php echo $TbMsg[22]?> </TD> + <TH align=center width=485> <?php echo $TbMsg[22]?> </TH> </TR> <?php } ?> @@ -292,7 +287,7 @@ function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(me <div align=center class=subcabeceras><?php echo $TbMsg[7] ?> - <form align="center" name="modoadmin" action="./EliminarImagenRepositorio.php" method="post"> + <form name="modoadmin" action="./EliminarImagenRepositorio.php" method="post"> <INPUT type="hidden" name="opcion" value="<?php echo $opcion?>"> <INPUT type="hidden" name="idrepositorio" value="<?php echo $idrepositorio?>"> <INPUT type="hidden" name="grupoid" value="<?php echo $grupoid ?>"> @@ -517,11 +512,11 @@ function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(me if ($bustor<>"") { - echo '<TD align=center><font color=red><strong> '.$TbMsg[14].'</strong></TD>'.chr(13); + echo '<TD align=center><div style="color: red; font-weight: bold;"> '.$TbMsg[14].'</div></TD>'.chr(13); } elseif (file_exists($ficherodelete)) { - echo '<TD align=center><font color=red><strong> '.$TbMsg[15].'</strong></TD>'.chr(13);} + echo '<TD align=center><div style="color: red; font-weight: bold;"><div> '.$TbMsg[15].'</div></TD>'.chr(13);} else { echo '<TD align=center ><input type="checkbox" name="checkbox'.$contar.'" value="si"></TD>'.chr(13); @@ -530,11 +525,11 @@ function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(me // ########## Tipo #################################################################### if ($tipo[$contandotipo]=="D") { - echo '<TD align=center ><font color=blue>'.$tipo[$contandotipo].'</TD>'.chr(13); + echo '<TD align=center ><div style="color: blue;">'.$tipo[$contandotipo].'</div></TD>'.chr(13); } elseif ($tipo[$contandotipo]=="B") { - echo '<TD align=center><font color=red> '.$tipo[$contandotipo].' </TD>'.chr(13); + echo '<TD align=center><div style="color: red;"> '.$tipo[$contandotipo].' </div></TD>'.chr(13); }else{ echo '<TD align=center >'.$tipo[$contandotipo].'</TD>'.chr(13); } @@ -548,8 +543,8 @@ function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(me // ########## Aviso si directorio distinto al del centro - en vista repositorio ########## $aviso=''; if ($separarogunit == 1) { - if ( $nombrecaidcentro != 0 and "/".$imgdir != $dircentros[$nombrecaidcentro]){ - $aviso="<font color=red> * </font>"; + if ( $nombrecaidcentro != 0 and "/".$imgdir != $dircentros[$nombrecaidcentro]){ + $aviso="<style=\"color: red;\"> * </div>"; $textoaviso="<tr>\n <th colspan='7' align='center'>". " <sup>*</sup> $TbMsg[33] </th>\n". "</tr>\n"; @@ -559,7 +554,7 @@ function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(me // ########## Nombre de Imagen ######################################################## if ($tipo[$contandotipo]=="D") { - echo '<TD align=center><font color=blue> '.str_replace(":"," / ",$value).' '.$aviso.' </TD>'.chr(13); + echo '<TD align=center><div style="color: blue;"> '.str_replace(":"," / ",$value).' '.$aviso.' </div></TD>'.chr(13); } else { @@ -579,9 +574,9 @@ function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(me } elseif (preg_match("/.ant/",$nombrefichero)) { - echo '<TD align=center><font color=red> ------</strong></TD>'.chr(13); + echo '<TD align=center><div style="color: red;"> ------</div></TD>'.chr(13); }else{ - echo '<TD align=center><font color=red> '.$TbMsg[25].'</strong></TD>'.chr(13); + echo '<TD align=center><div style="color: red;"> '.$TbMsg[25].'</div></TD>'.chr(13); } // VISTA REPOSITORIO COMPLETO if ($modov == 1){ @@ -609,7 +604,7 @@ function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(me <INPUT type="hidden" name="grupoid" value="<?php echo $grupoid ?>"> <INPUT type="hidden" name="modov" value="<?php echo $modov; ?>"> - </TABLE><BR/> + </TABLE><P> <TABLE align=center> <TR> <TD></TD> @@ -627,4 +622,3 @@ function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(me </HTML> <?php } ?> - diff --git a/admin/WebConsole/comandos/EnviarMensaje.php b/admin/WebConsole/comandos/EnviarMensaje.php index 15e9237a..9f2f97a6 100644 --- a/admin/WebConsole/comandos/EnviarMensaje.php +++ b/admin/WebConsole/comandos/EnviarMensaje.php @@ -5,7 +5,7 @@ // Fecha Creación: Año 2009-2010 // Fecha Última modificación: Agosto-2010 // Nombre del fichero: Comando.php -// Descripción : +// Descripción: // Implementación del comando "EjecutarScripts" // ************************************************************************************************************************************************* include_once("../includes/ctrlacc.php"); @@ -26,8 +26,8 @@ if (!$cmd) //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/EnviarMensaje.js"></SCRIPT> @@ -45,10 +45,8 @@ if (!$cmd) include_once("./includes/FiltradoAmbito.php"); //________________________________________________________________________________________________________ ?> - <P align=center> - <SPAN align=center class=subcabeceras><?php echo $TbMsg[10] ?></SPAN> - <form align=center name="fdatos"> - + <P align=center><SPAN class=subcabeceras><?php echo $TbMsg[10] ?></SPAN></P> + <form name="fdatos"> <table align=center class=tabla_datos border="0" cellpadding="0" cellspacing="1"> <tr> <th> <?php echo $TbMsg[7]?> </th> @@ -67,7 +65,7 @@ if (!$cmd) // Sólo permite ejecutar inmediantemente como opción de ejecución // include_once("./includes/opcionesacciones.php") ?> - <P align=center><span align=center class=subcabeceras>Opciones de Ejecución</span></P> + <P align=center><span class=subcabeceras>Opciones de Ejecución</span></P> <table align=center> <tr> <td><img border=0 style="cursor:pointer" src="../images/boton_aceptar_esp.gif" onclick="confirmar()" ></td> @@ -89,7 +87,7 @@ if (!$cmd) </tr> </table> - </FORM> + </form> <SCRIPT language="javascript"> Sondeo(); </SCRIPT> diff --git a/admin/WebConsole/comandos/IniciarSesion.php b/admin/WebConsole/comandos/IniciarSesion.php index 404a004d..5bcf5b9f 100644 --- a/admin/WebConsole/comandos/IniciarSesion.php +++ b/admin/WebConsole/comandos/IniciarSesion.php @@ -6,7 +6,7 @@ // Fecha Última modificación: Agosto-2010 // Nombre del fichero: IniciarSesion.php // Descripción : -// Implementación� del comando "Iniciar Sesión" +// Implementación del comando "Iniciar Sesión" // Version 0.1 - En ambito distinto a ordenador muestra los equipos agrupados en configuraciones iguales. // Fecha: 2014-10-23 // Autora: Irina Gomez, ETSII Universidad de Sevilla @@ -32,9 +32,9 @@ if (!$cmd) //___________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<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/IniciarSesion.js"></SCRIPT> <SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT> @@ -56,11 +56,10 @@ if (!$cmd) $cadenaip=""; $cadenamac=""; RecopilaIpesMacs($cmd,$ambito,$idambito); - + ?> - <P align=center> - <SPAN align=center class=subcabeceras><?php echo $TbMsg[7] ?></SPAN> - </BR> + <P align=center><SPAN class=subcabeceras><?php echo $TbMsg[7] ?></SPAN></P> + <BR> <form align=center name="fdatos" method="POST"> <INPUT type="hidden" name="idambito" value="<?php echo $idambito?>"> <INPUT type="hidden" name="ambito" value="<?php echo $ambito?>"> @@ -84,7 +83,7 @@ if (!$cmd) <?php /************************************************************************************************************************************************** Recupera los datos de un ordenador - Parametros: + Parámetros: - cmd: Una comando ya operativo (con conexiónabierta) - ido: El identificador del ordenador ________________________________________________________________________________________________________*/ @@ -134,9 +133,7 @@ function tabla_configuraciones($cmd,$idordenador){ AND tipospar.clonable=1 AND nombresos.nombreso!='DATA' ORDER BY ordenadores_particiones.numpar"; - - $rs->Comando=&$cmd; - $rs=new Recordset; + $rs=new Recordset; $rs->Comando=&$cmd; if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset $rs->Primero(); @@ -153,5 +150,3 @@ function tabla_configuraciones($cmd,$idordenador){ $rs->Cerrar(); return($tablaHtml); } -?> - diff --git a/admin/WebConsole/comandos/InventarioHardware.php b/admin/WebConsole/comandos/InventarioHardware.php index afba8f2d..b722f6d2 100644 --- a/admin/WebConsole/comandos/InventarioHardware.php +++ b/admin/WebConsole/comandos/InventarioHardware.php @@ -27,8 +27,8 @@ if (!$cmd) //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/InventarioHardware.js"></SCRIPT> diff --git a/admin/WebConsole/comandos/InventarioSoftware.php b/admin/WebConsole/comandos/InventarioSoftware.php index b8756ec9..e0d98da4 100644 --- a/admin/WebConsole/comandos/InventarioSoftware.php +++ b/admin/WebConsole/comandos/InventarioSoftware.php @@ -26,8 +26,8 @@ if (!$cmd) //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/InventarioSoftware.js"></SCRIPT> @@ -64,12 +64,11 @@ switch($ambito){ echo '<IMG src="'.$urlimg.'"> <span align=center class=subcabeceras><U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span> </span></p>'; ?> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> - <P align=center> - <SPAN align=center class=subcabeceras><?php echo $TbMsg[7] ?></SPAN> - </p> + <P align=center><SPAN class=subcabeceras><?php echo $TbMsg[7] ?></SPAN></p> + <?php echo tablaConfiguracionesInventarioSoftware($cmd,$idambito); ?> - </BR> + <BR> <?php //________________________________________________________________________________________________________ include_once("./includes/formularioacciones.php"); diff --git a/admin/WebConsole/comandos/Reiniciar.php b/admin/WebConsole/comandos/Reiniciar.php index 0f759e20..ea8817cc 100644 --- a/admin/WebConsole/comandos/Reiniciar.php +++ b/admin/WebConsole/comandos/Reiniciar.php @@ -27,8 +27,8 @@ if (!$cmd) //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/Reiniciar.js"></SCRIPT> diff --git a/admin/WebConsole/comandos/RestaurarImagen.php b/admin/WebConsole/comandos/RestaurarImagen.php index 047f6174..e052feb9 100644 --- a/admin/WebConsole/comandos/RestaurarImagen.php +++ b/admin/WebConsole/comandos/RestaurarImagen.php @@ -58,9 +58,9 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<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"> <STYLE TYPE="text/css"></STYLE> <SCRIPT language="javascript" src="./jscripts/RestaurarImagen.js"></SCRIPT> diff --git a/admin/WebConsole/comandos/RestaurarImagenBasica.php b/admin/WebConsole/comandos/RestaurarImagenBasica.php index d7be1eec..77faeb4d 100644 --- a/admin/WebConsole/comandos/RestaurarImagenBasica.php +++ b/admin/WebConsole/comandos/RestaurarImagenBasica.php @@ -1,12 +1,12 @@ <?php // ******************************************************************************************************** -// Aplicaci�n WEB: ogAdmWebCon -// Autor: Jos� Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla -// Fecha Creaci�n: A�o 2012 -// Fecha �ltima modificaci�n: Noviembre-2012 +// Aplicación WEB: ogAdmWebCon +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: Año 2012 +// Fecha última modificación: Noviembre-2012 // Nombre del fichero: RestaurarImagenBasica.php -// Descripci�n : -// Implementaci�n del comando "RestaurarImagenB�sica" +// Descripción: +// Implementación del comando "RestaurarImagenBasica" // ******************************************************************************************************** include_once("../includes/ctrlacc.php"); include_once("../clases/AdoPhp.php"); @@ -27,11 +27,11 @@ include_once("../includes/ConfiguracionesParticiones.php"); // $cmd=CreaComando($cadenaconexion); if (!$cmd) - Header('Location: '.$pagerror.'?herror=2'); // Error de conexi�n con servidor B.D. + Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D. //________________________________________________________________________________________________________ // // -// Captura par�metros +// Captura parámetros //________________________________________________________________________________________________________ // @@ -44,23 +44,23 @@ $fk_sysFi=0; $fk_tamano=0; $fk_nombreSO=0; -if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; -if (isset($_GET["ambito"])) $ambito=$_GET["ambito"]; +if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; +if (isset($_GET["ambito"])) $ambito=$_GET["ambito"]; -if (isset($_POST["idambito"])) $idambito=$_POST["idambito"]; -if (isset($_POST["ambito"])) $ambito=$_POST["ambito"]; +if (isset($_POST["idambito"])) $idambito=$_POST["idambito"]; +if (isset($_POST["ambito"])) $ambito=$_POST["ambito"]; -if (isset($_POST["fk_sysFi"])) $fk_sysFi=$_POST["fk_sysFi"]; -if (isset($_POST["fk_tamano"])) $fk_tamano=$_POST["fk_tamano"]; -if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; +if (isset($_POST["fk_sysFi"])) $fk_sysFi=$_POST["fk_sysFi"]; +if (isset($_POST["fk_tamano"])) $fk_tamano=$_POST["fk_tamano"]; +if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; //________________________________________________________________________________________________________ // ?> <HTML> -<TITLE>Administraci�n web de aulas</TITLE> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<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"> <STYLE TYPE="text/css"></STYLE> <SCRIPT language="javascript" src="./jscripts/RestaurarImagenBasica.js"></SCRIPT> @@ -142,7 +142,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; /*________________________________________________________________________________________________________ - Crea la etiqueta html <SELECT> de las im�genes + Crea la etiqueta html <SELECT> de las imágenes ________________________________________________________________________________________________________*/ function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw,$idordenadores,$ambito) { @@ -216,5 +216,3 @@ function opcionesAdicionales() echo $tablaHtml; } -?> - diff --git a/admin/WebConsole/comandos/RestaurarSoftIncremental.php b/admin/WebConsole/comandos/RestaurarSoftIncremental.php index 3075819d..a2e03d15 100644 --- a/admin/WebConsole/comandos/RestaurarSoftIncremental.php +++ b/admin/WebConsole/comandos/RestaurarSoftIncremental.php @@ -1,12 +1,12 @@ <?php // ******************************************************************************************************** -// Aplicaci�n WEB: ogAdmWebCon -// Autor: Jos� Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla -// Fecha Creaci�n: A�o 2012 -// Fecha �ltima modificaci�n: Noviembre-2012 +// Aplicación WEB: ogAdmWebCon +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: Año 2012 +// Fecha última modificación: Noviembre-2012 // Nombre del fichero: RestaurarSoftIncremental.php -// Descripci�n : -// Implementaci�n del comando "RestaurarSoftIncremental" +// Descripción: +// Implementación del comando "RestaurarSoftIncremental" // ******************************************************************************************************** include_once("../includes/ctrlacc.php"); include_once("../clases/AdoPhp.php"); @@ -27,11 +27,11 @@ include_once("../includes/ConfiguracionesParticiones.php"); // $cmd=CreaComando($cadenaconexion); if (!$cmd) - Header('Location: '.$pagerror.'?herror=2'); // Error de conexi�n con servidor B.D. + Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D. //________________________________________________________________________________________________________ // // -// Captura par�metros +// Captura parámetros //________________________________________________________________________________________________________ // @@ -58,9 +58,9 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; // ?> <HTML> -<TITLE>Administraci�n web de aulas</TITLE> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<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"> <STYLE TYPE="text/css"></STYLE> <SCRIPT language="javascript" src="./jscripts/RestaurarSoftIncremental.js"></SCRIPT> @@ -139,7 +139,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; /*________________________________________________________________________________________________________ - Crea la etiqueta html <SELECT> de las im�genes + Crea la etiqueta html <SELECT> de las imágenes ________________________________________________________________________________________________________*/ function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw,$idordenadores,$ambito) { @@ -192,29 +192,24 @@ function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw,$idordenado ----------------------------------------------------------------------------------------------*/ function opcionesAdicionales() { - global $TbMsg; - + global $TbMsg; + $tablaHtml='<table style="display:none" width="95%" align=center border=0 cellPadding=0 cellSpacing=0 class="tabla_accesos">'; $tablaHtml.='<tr><th colspan=8 align=center><b> '.$TbMsg[11].' </b></th></tr>'; $tablaHtml.='<tr id="trOpc"> <td align=right>'.$TbMsg[35].'</td> - <td><input type=checkbox name="bpi"></td>'; // Borrar imagen previamente del servidor - $tablaHtml.=' + <td><input type=checkbox name="bpi"></td>'; // Borrar imagen previamente del servidor + $tablaHtml.=' <td align=right>'.$TbMsg[36].'</td> - <td><input type=checkbox name="cpc"></td>'; // Copiar adem�s la imagen a la cach� - $tablaHtml.=' + <td><input type=checkbox name="cpc"></td>'; // Copiar además la imagen a la caché + $tablaHtml.=' <td align=right>'.$TbMsg[37].'</td> - <td><input type=checkbox name="bpc"></td>'; // Borrar imagen de la cach� previamente antes de copiarla - $tablaHtml.=' + <td><input type=checkbox name="bpc"></td>'; // Borrar imagen de la caché previamente antes de copiarla + $tablaHtml.=' <td align=right>'.$TbMsg[39].'</td> - <td><input type=checkbox name="nba"></td>'; // No borrar archivos en destino + <td><input type=checkbox name="nba"></td>'; // No borrar archivos en destino $tablaHtml.='</tr>'; $tablaHtml.=' </table>'; echo $tablaHtml; } - -?> - - - diff --git a/admin/WebConsole/comandos/gestores/gestor_Comandos.php b/admin/WebConsole/comandos/gestores/gestor_Comandos.php index b2a81b79..943fdac7 100644 --- a/admin/WebConsole/comandos/gestores/gestor_Comandos.php +++ b/admin/WebConsole/comandos/gestores/gestor_Comandos.php @@ -20,6 +20,16 @@ include_once("../../includes/RecopilaIpesMacs.php"); //________________________________________________________________________________________________________ include_once("../includes/capturaacciones.php"); //________________________________________________________________________________________________________ + +define('OG_CMD_ID_WAKEUP', 1); +define('OG_CMD_ID_POWEROFF', 2); +define('OG_CMD_ID_REBOOT', 5); +define('OG_CMD_ID_HARDWARE', 6); +define('OG_CMD_ID_SOFTWARE', 7); +define("OG_CMD_ID_SCRIPT", 8); +define('OG_CMD_ID_SESSION', 9); +define('OG_CMD_ID_SENDMESSAGE', 16); + // Recoge parametros de seguimiento $sw_ejya=""; $sw_seguimiento=""; @@ -73,7 +83,6 @@ $atributos=str_replace('$',chr(9),$atributos); <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> -<BODY> <SCRIPT language="javascript" src="../jscripts/comunescomandos.js"></SCRIPT> <?php echo '<SCRIPT language="javascript" src="../../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?> @@ -116,9 +125,25 @@ $cmd->CreaParametro("@ordprocedimiento",0,1); $cmd->CreaParametro("@ordtarea",0,1); /* PARCHE UHU heredado de la version 1.1.0: Si la accion a realizar es Arrancar incluimos una pagina para arrancar desde el repo */ -if($funcion == "nfn=Arrancar".chr(13)) - include("wakeonlan_repo.php"); -/**/ +switch ($idcomando) { + case OG_CMD_ID_WAKEUP: + include("wakeonlan_repo.php"); + break; + case OG_CMD_ID_SESSION: + session($cadenaip, $atributos); + break; + case OG_CMD_ID_POWEROFF: + poweroff($cadenaip); + break; + case OG_CMD_ID_REBOOT: + reboot($cadenaip); + break; + case OG_CMD_ID_HARDWARE: + hardware($cadenaip); + break; + case OG_CMD_ID_SOFTWARE: + software($cadenaip); +} if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc) $cmd->ParamSetValor("@restrambito",$idambito); @@ -174,9 +199,14 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){ $ValorParametros=extrae_parametros($parametros,chr(13),'='); $script=@urldecode($ValorParametros["scp"]); if($sw_ejya=='on'){ - // comando 16 sólo agente nuevo - if ($idcomando != 16){ - // Envio al servidor + if ($idcomando != OG_CMD_ID_SENDMESSAGE && + $idcomando != OG_CMD_ID_WAKEUP && + $idcomando != OG_CMD_ID_SESSION && + $idcomando != OG_CMD_ID_POWEROFF && + $idcomando != OG_CMD_ID_HARDWARE && + $idcomando != OG_CMD_ID_SOFTWARE && + $idcomando != OG_CMD_ID_REBOOT) { + // Envío al servidor $shidra=new SockHidra($servidorhidra,$hidraport); if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra $parametros.=$aplicacion; @@ -199,28 +229,28 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){ $resulhidra = 1; } - // Comprobamos si el comando es soportado por el nuevo ogAgent + // Comprobamos si el comando es soportado por el nuevo OGAgent $numip=0; $ogAgentNuevo = false; switch ($idcomando) { - case 2: + case OG_CMD_ID_POWEROFF: // Apagar $urlcomando = 'poweroff'; $ogAgentNuevo = true; break; - case 5: + case OG_CMD_ID_REBOOT: // Reiniciar $urlcomando = 'reboot'; $ogAgentNuevo = true; break; - case 8: + case OG_CMD_ID_SCRIPT: // Ejecutar script $urlcomando = 'script'; $ogAgentNuevo = true; $client = (isset ($_POST['modoejecucion']) && $_POST['modoejecucion'] != '' ) ? $_POST['modoejecucion'] : 'true'; $paramsPost = '{"script":"'.base64_encode($script).'","client":"'.$client.'"}'; break; - case 16: + case OG_CMD_ID_SENDMESSAGE: // Enviar mensaje $urlcomando = 'popup'; $ogAgentNuevo = true; @@ -228,7 +258,7 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){ break; } - // Se envía acción al nuevo ogAgent + // Se envía acción al nuevo ogAgent if ( $ogAgentNuevo ) { // Send REST requests to new OGAgent clients. $urls = array(); @@ -241,7 +271,6 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){ $urls[$ip]['url'] = "https://$ip:8000/opengnsys/$urlcomando"; if (isset($auxKey[$i])) $urls[$ip]['header'] = Array("Authorization: ".$auxKey[$i]); if (isset($paramsPost)) $urls[$ip]['post'] = $paramsPost; - $i++; } // Launch concurrent requests. @@ -384,6 +413,8 @@ if ($resul){ } } ?> +</HEAD> +<BODY> </BODY> </HTML> diff --git a/admin/WebConsole/comandos/gestores/wakeonlan_repo.php b/admin/WebConsole/comandos/gestores/wakeonlan_repo.php index b2929d48..c1c5394f 100644 --- a/admin/WebConsole/comandos/gestores/wakeonlan_repo.php +++ b/admin/WebConsole/comandos/gestores/wakeonlan_repo.php @@ -9,9 +9,17 @@ include_once("../../includes/restfunctions.php"); $cadenaip $cadenamac -*/ + */ + +//Multicast or Unicast +preg_match_all('!\d{1}!', $atributos, $matches); + // Capturamos todas las ids $macs = explode(";",$cadenamac); +$ips = explode(';',$cadenaip); + +wol($matches[0][0], $macs, $ips); + // Recorremos las ids y vemos cual es la ip del repositorio $repos = array(); $reposAndMacs = array(); @@ -43,19 +51,21 @@ foreach($macs as $mac){ } $rs->Cerrar(); } + // En este punto tenemos un array con todos los repos y cada uno de ellos con una lista de todas las macs que deben arrancar // Recorremos cada uno de ellos foreach($reposAndMacs as $repo => $macs){ // En el array de $macs tenemos la clave "apikey" - if($macs["apikey"] !== ""){ + if($macs["apikey"] !== "") { $apiKeyRepo = $macs["apikey"]; unset($macs["apikey"]); // Componer datos de conexión para el repositorio. $urls[$repo]['url'] = "https://$repo/opengnsys/rest/repository/poweron"; $urls[$repo]['header'] = array('Authorization: '. $apiKeyRepo); - $urls[$repo]['post'] = '{"macs": ["' . implode('","', $macs) . '"]}'; + $urls[$repo]['post'] = '{"macs": ["' . implode('","', $macs) . '"], "ips": ["' . str_replace(';', '","', $cadenaip) . + '"], "mar": "' . $matches[0][0] . '"}'; } - else{ + else { $avisoRepo = true; } } @@ -76,10 +86,11 @@ function existREPO($repo, $repos){ $index = 0; while(!$found && $index < count($repos)){ $r = $repos[$index]; + $index++; if($r == $repo) $found=true; } return $found; } -?> + diff --git a/admin/WebConsole/comandos/includes/FiltradoAmbito.php b/admin/WebConsole/comandos/includes/FiltradoAmbito.php index 490969f7..42ca61e7 100644 --- a/admin/WebConsole/comandos/includes/FiltradoAmbito.php +++ b/admin/WebConsole/comandos/includes/FiltradoAmbito.php @@ -1,400 +1,399 @@ -<?php
-// ******************************************************************************************************************
-// Aplicación WEB: ogAdmWebCon
-// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
-// Fecha Creación: Año 2012
-// Fecha última modificación: Febrero-2012
-// Nombre del fichero: FiltradoAmbito.php
-// Descripción :
-// Colección de funciones en php y javascript que implementan la posibilidad de aplicar filtro de selección
-// 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>
-</TR>
-
-<TR>
-<TD align="center">'.$TbMsg["STATUS_WIN"].'</TD>
-<TD><INPUT type="checkbox" checked onclick="selector(this,4,'.$cid.')"></TD>
-
-<TD align="center">'.$TbMsg["STATUS_WINS"].'</TD>
-<TD><INPUT type="checkbox" checked onclick="selector(this,5,'.$cid.')"></TD>
-
-<TD align="center">'.$TbMsg["STATUS_LNX"].'</TD>
-<TD><INPUT type="checkbox" checked onclick="selector(this,6,'.$cid.')"></TD>
-
-<TD align="center">'.$TbMsg["STATUS_LNXS"].'</TD>
-<TD><INPUT type="checkbox" checked onclick="selector(this,7,'.$cid.')"></TD>
-
-<TD align="center">'.$TbMsg["STATUS_OSX"].'</TD>
-<TD><INPUT type="checkbox" checked onclick="selector(this,8,'.$cid.')"></TD>
-
-</TR>
-</TABLE>';
-
- $htmlCode.='<BR>';
- $htmlCode.='<TABLE id="tbo-'.$cid.'" border=0 align=center>';
- $htmlCode.='<TR>';
-
- while (!$rs->EOF){
- $htmlCode.= '<TD style="border: 1px solid #999999;">';
- $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.png" id="img-'.$ip.'" width=24 src="../images/ordenador_OFF.png"></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=<?php echo $ambito?>;
- var idambito=<?php 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=<?php echo $ambito?>;
- var idambito=<?php 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=""; // Dirección 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.png"; // Cliente iniciando
- break;
- case 'BSY':
- MimgOrdenador="ordenador_BSY.png"; // Cliente ocupado
- break;
- case 'OPG':
- MimgOrdenador="ordenador_OPG.png"; // Cliente OpenGnsys
- break;
- case 'WIN':
- case 'WXP':
- MimgOrdenador="ordenador_WIN.png"; // Windows
- break;
- case 'WINS':
- MimgOrdenador="ordenador_WINS.png"; // Sesión Windows
- break;
- case 'LNX':
- MimgOrdenador="ordenador_LNX.png"; // Linux
- break;
- case 'LNXS':
- MimgOrdenador="ordenador_LNXS.png"; // Sesión Linux
- break;
- case 'OSX':
- MimgOrdenador="ordenador_OSX.png"; // macOS
- break;
- default:
- MimgOrdenador="ordenador_OFF.png"; // 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.png")
- oCHK.checked=sw;
- break;
- case 2: // Ocupados
- if(estado=="ordenador_BSY.png")
- oCHK.checked=sw;
- break;
- case 3: // OpenGnsys
- if(estado=="ordenador_OPG.png")
- oCHK.checked=sw;
- break;
- case 4: // Windows
- if(estado=="ordenador_WIN.png")
- oCHK.checked=sw;
- break;
- case 5: // Sesión Windows
- if(estado=="ordenador_WINS.png")
- oCHK.checked=sw;
- break;
- case 6: // Linux
- if(estado=="ordenador_LNX.png")
- oCHK.checked=sw;
- break;
- case 7: // Sesión Linux
- if(estado=="ordenador_LNXS.png")
- oCHK.checked=sw;
- break;
- case 8: // macOS
- if(estado=="ordenador_OSX.png")
- 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>
-
+<?php +// ****************************************************************************************************************** +// Aplicación WEB: ogAdmWebCon +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: Año 2012 +// Fecha última modificación: Febrero-2012 +// Nombre del fichero: FiltradoAmbito.php +// Descripción: +// Colección de funciones en php y javascript que implementan la posibilidad de aplicar filtro de selección +// 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 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 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 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 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> +</TR> + +<TR> +<TD align="center">'.$TbMsg["STATUS_WIN"].'</TD> +<TD><INPUT type="checkbox" checked onclick="selector(this,4,'.$cid.')"></TD> + +<TD align="center">'.$TbMsg["STATUS_WINS"].'</TD> +<TD><INPUT type="checkbox" checked onclick="selector(this,5,'.$cid.')"></TD> + +<TD align="center">'.$TbMsg["STATUS_LNX"].'</TD> +<TD><INPUT type="checkbox" checked onclick="selector(this,6,'.$cid.')"></TD> + +<TD align="center">'.$TbMsg["STATUS_LNXS"].'</TD> +<TD><INPUT type="checkbox" checked onclick="selector(this,7,'.$cid.')"></TD> + +<TD align="center">'.$TbMsg["STATUS_OSX"].'</TD> +<TD><INPUT type="checkbox" checked onclick="selector(this,8,'.$cid.')"></TD> + +</TR> +</TABLE>'; + + $htmlCode.='<BR>'; + $htmlCode.='<TABLE id="tbo-'.$cid.'" border=0 align=center>'; + $htmlCode.='<TR>'; + + while (!$rs->EOF){ + $htmlCode.= '<TD style="border: 1px solid #999999;">'; + $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.png" id="img-'.$ip.'" width=24 src="../images/ordenador_OFF.png"></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=<?php echo $ambito?>; + var idambito=<?php 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=<?php echo $ambito?>; + var idambito=<?php 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=""; // Dirección 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.png"; // Cliente iniciando + break; + case 'BSY': + MimgOrdenador="ordenador_BSY.png"; // Cliente ocupado + break; + case 'OPG': + MimgOrdenador="ordenador_OPG.png"; // Cliente OpenGnsys + break; + case 'WIN': + case 'WXP': + MimgOrdenador="ordenador_WIN.png"; // Windows + break; + case 'WINS': + MimgOrdenador="ordenador_WINS.png"; // Sesión Windows + break; + case 'LNX': + MimgOrdenador="ordenador_LNX.png"; // Linux + break; + case 'LNXS': + MimgOrdenador="ordenador_LNXS.png"; // Sesión Linux + break; + case 'OSX': + MimgOrdenador="ordenador_OSX.png"; // macOS + break; + default: + MimgOrdenador="ordenador_OFF.png"; // 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.png") + oCHK.checked=sw; + break; + case 2: // Ocupados + if(estado=="ordenador_BSY.png") + oCHK.checked=sw; + break; + case 3: // OpenGnsys + if(estado=="ordenador_OPG.png") + oCHK.checked=sw; + break; + case 4: // Windows + if(estado=="ordenador_WIN.png") + oCHK.checked=sw; + break; + case 5: // Sesión Windows + if(estado=="ordenador_WINS.png") + oCHK.checked=sw; + break; + case 6: // Linux + if(estado=="ordenador_LNX.png") + oCHK.checked=sw; + break; + case 7: // Sesión Linux + if(estado=="ordenador_LNXS.png") + oCHK.checked=sw; + break; + case 8: // macOS + if(estado=="ordenador_OSX.png") + oCHK.checked=sw; + break; + } + } + } +} + +//______________________________________________________________________________________________________ +// +function filtrado() +{ + var ipes=""; + for(var 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 1941b428..7e793f96 100644 --- a/admin/WebConsole/comandos/includes/capturaacciones.php +++ b/admin/WebConsole/comandos/includes/capturaacciones.php @@ -29,5 +29,5 @@ 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 90c5de3c..fadc915c 100644 --- a/admin/WebConsole/comandos/includes/formularioacciones.php +++ b/admin/WebConsole/comandos/includes/formularioacciones.php @@ -9,7 +9,7 @@ // Formulario para paso de parametros comunes para la ejecución de comandos // ************************************************************************************************************************************************* ?> -<FORM align=center name="fdatosejecucion" action="<?php echo $gestor?>" method="post"> +<FORM name="fdatosejecucion" action="<?php echo $gestor?>" method="post"> <INPUT type="hidden" name="idcomando" value="<?php echo $idcomando?>"> <INPUT type="hidden" name="descricomando" value="<?php echo $descricomando?>"> <INPUT type="hidden" name="ambito" value="<?php echo $ambito?>"> diff --git a/admin/WebConsole/comandos/includes/opcionesacciones.php b/admin/WebConsole/comandos/includes/opcionesacciones.php index c8f9ea6a..7842d3a3 100644 --- a/admin/WebConsole/comandos/includes/opcionesacciones.php +++ b/admin/WebConsole/comandos/includes/opcionesacciones.php @@ -64,9 +64,9 @@ <TD> </TD> <TD> </TD> <TD><?php echo $TbMsgAux[8] ?> </TD> - <TD><INPUT maxlength=3 style="FONT-FAMILY:Arial, Helvetica, sans-serif;FONT-SIZE: 11px;WIDTH:30" name=ordprocedimiento type=text value=""></TD></TR> + <TD><INPUT maxlength=3 style="FONT-FAMILY:Arial, Helvetica, sans-serif;FONT-SIZE: 11px;WIDTH:30px" name=ordprocedimiento type=text value=""></TD></TR> <!--------------------------------------------------------------------------------------------------------------------------------> - <TR HEIGHT=10><TD colspan=4> <HR></TD></TR> + <TR><TD colspan=4 HEIGHT="10px"> <HR></TD></TR> <!--------------------------------------------------------------------------------------------------------------------------------> <TR> <TD><INPUT onclick="clic_mktarea(this)" name=sw_mktarea type=checkbox></TD> @@ -88,8 +88,9 @@ <TD> </TD> <TD> </TD> <TD><?php echo $TbMsgAux[12] ?> </TD> - <TD><INPUT maxlength=3 style="FONT-FAMILY:Arial, Helvetica, sans-serif;FONT-SIZE: 11px;WIDTH:30" name=ordtarea type=text value=""></TD></TR> + <TD><INPUT maxlength=3 style="FONT-FAMILY:Arial, Helvetica, sans-serif;FONT-SIZE: 11px;WIDTH:30px" name=ordtarea type=text value=""></TD></TR> <!--------------------------------------------------------------------------------------------------------------------------------> </TABLE> </FORM> + diff --git a/admin/WebConsole/comandos/jscripts/Configurar.js b/admin/WebConsole/comandos/jscripts/Configurar.js index 38f17a15..8e11615b 100644 --- a/admin/WebConsole/comandos/jscripts/Configurar.js +++ b/admin/WebConsole/comandos/jscripts/Configurar.js @@ -15,7 +15,7 @@ var swe=false; // Switch para detectar partición extendida //________________________________________________________________________________________________________ // // Elimina una fila de una tabla de configuraciones perteneciente a las propiedades de una partición -// Parametros: +// Parámetros: // icp: Identificador de la configuración-partición // o: Objeto checkbox que invoca la función //________________________________________________________________________________________________________ @@ -31,8 +31,8 @@ function eliminaParticion(o,icp) // Toma desplegable de tipo de partición var desplepar=o.parentNode.nextSibling.nextSibling.childNodes[0]; var tipar=tomavalorDesple(desplepar); // Partición - if(tipar=="CACHE") swc=false; // Si es la caché se pone a false su switch - if(tipar=="EXTENDED") swe=false; // Si es la EXTENDED se pone a false su switch + if(tipar==="CACHE") swc=false; // Si es la caché se pone a false su switch + if(tipar==="EXTENDED") swe=false; // Si es la EXTENDED se pone a false su switch var tbCfg = document.getElementById("tabla_conf"); // Recupera objeto <TABLE> var trCfg = document.getElementById("TR_"+icp); // Recupera <TR> de la fila a eliminar @@ -69,7 +69,7 @@ function addParticion(objImg,cc) //________________________________________________________________________________________________________ // // Confirma un bloque de configuración de particiones -// Parametros: +// Parámetros: // idordenadores: Identificadores de los ordenadores a los que se aplicará el comando // cc: Identificador de la configuración (bloque de particiones) // Especificaciones: @@ -85,7 +85,7 @@ function Confirmar(cc) var tbOrd= document.getElementById("tbOrd_"+cc); // Recupera tabla de ordenadores de la configuración var idordenadores=tbOrd.getAttribute('value'); // Toma identificadores de los ordenadores var cadenaid=document.fdatos.cadenaid.value; // Cadena de identificadores de todos los ordenadores del ámbito - if(idordenadores!=cadenaid){ // Si no son iguales es que el ámbito de aplicación es restringido + if(idordenadores!==cadenaid){ // Si no son iguales es que el ámbito de aplicación es restringido document.fdatosejecucion.ambito.value=0; // Ambito de aplicación restringido document.fdatosejecucion.idambito.value=idordenadores; } @@ -116,8 +116,8 @@ function comprobarDatos(cc) var SL="%"; var TB="*"; var maxpar=0; - var tbpar=new Array(); // Para control de particiones duplicadas - var tbparam=new Array(); // Para control de configuración + var tbpar=[]; // Para control de particiones duplicadas + var tbparam=[]; // Para control de configuración var npar; // Partición en formato integer var tch=0; // Tamaño de la caché @@ -129,27 +129,33 @@ function comprobarDatos(cc) var trCfg = document.getElementById("TR_"+cc); // Recupera primer <TR> de la configuración trCfg=trCfg.nextSibling; // Primera fila de particiones - while(trCfg.id!="TRIMG_"+cc){ + while(trCfg.id!=="TRIMG_"+cc){ var tama=trCfg.childNodes[itama].childNodes[0].value; // Tamaño de partición + // Comprobar tamaño negativo. + if (tama < 0) { + alert(TbMsg[8]); + trCfg.childNodes[ipar].childNodes[0].focus(); + return(false); + } var par=tomavalorDesple(trCfg.childNodes[ipar].childNodes[0]); // Partición npar=parseInt(par); if(maxpar<npar) maxpar=npar; // Guarda partición de mayor orden - if (npar==4){ + if (npar===4){ swc=true; // Se especifica partición caché tch=tama; } - if(npar==0){ + if(npar===0){ alert(TbMsg[1]); trCfg.childNodes[ipar].childNodes[0].focus(); return(false); } - if(tbpar[npar]==1){ // Existe ya una partición con ese número + if(tbpar[npar]===1){ // Existe ya una partición con ese número alert(TbMsg[0]); trCfg.childNodes[ipar].childNodes[0].focus(); return(false); @@ -157,13 +163,13 @@ function comprobarDatos(cc) tbpar[npar]=1; var codpar=tomavalorDesple(trCfg.childNodes[icodpar].childNodes[0]); // Tipo de partición - if(codpar==""){ + if(codpar===""){ alert(TbMsg[2]); trCfg.childNodes[icodpar].childNodes[0].focus(); return(false); } - if(codpar=="EXTENDED") { + if(codpar==="EXTENDED") { swe=true; extsize=tama; } else { @@ -174,7 +180,7 @@ function comprobarDatos(cc) } } - if(codpar=="CACHE" && npar!=4){ + if(codpar==="CACHE" && npar!==4){ alert(TbMsg[6]); trCfg.childNodes[icodpar].childNodes[0].focus(); return(false); @@ -183,8 +189,8 @@ function comprobarDatos(cc) var ope=tomavalorCheck(trCfg.childNodes[iope].childNodes[0]); // Formatar a realizar var sysfi=tomatextDesple(trCfg.childNodes[isysfi].childNodes[0]); // Sistema de ficheros - if(sysfi=="" || sysfi=="EMPTY" ){ // Si el sistema de fichero es vacio o empty... - if(ope==1){ // Si se quiere formatear... + if(sysfi==="" || sysfi==="EMPTY" ){ // Si el sistema de fichero es vacio o empty... + if(ope===1){ // Si se quiere formatear... alert(TbMsg[5]); trCfg.childNodes[isysfi].childNodes[0].focus(); return(false); @@ -193,7 +199,7 @@ function comprobarDatos(cc) sysfi="EMPTY"; } - if(tama==0 && codpar!="EXTENDED") { + if(tama===0 && codpar!=="EXTENDED") { alert(TbMsg[3]); trCfg.childNodes[itama].childNodes[0].focus(); return(false); @@ -220,13 +226,12 @@ function comprobarDatos(cc) alert(TbMsg["EXTSIZE"]); return(false); } - allpartsize+=parseInt(extsize); + allpartsize+=extsize; } // Alerta si tamaño del disco menor que las particiones if (hdsize<allpartsize) { alert(TbMsg["HDSIZE"]); return(false); - } /* Compone cadena de particiones (Deja fuera la cache, @@ -260,7 +265,7 @@ function comprobarDatos(cc) if(maxpar<4){ var up=4; if(swc) up=3; - for(var i=maxpar+1;i<=up;i++) + for(i=maxpar+1;i<=up;i++) atributos+="par="+i+TB+"cpt=EMPTY"+TB+"sfi=EMPTY"+TB+"tam=0"+TB+"ope=0"+SL; } diff --git a/admin/WebConsole/comandos/jscripts/CrearImagen.js b/admin/WebConsole/comandos/jscripts/CrearImagen.js index 384661b3..17b3c2cf 100644 --- a/admin/WebConsole/comandos/jscripts/CrearImagen.js +++ b/admin/WebConsole/comandos/jscripts/CrearImagen.js @@ -45,7 +45,7 @@ //________________________________________________________________________________________________________ function comprobar_datos() { - tb_conf=document.getElementById("tabla_conf"); + var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); var op=0; for(var i=0;i<ochecks.length;i++){ @@ -55,16 +55,16 @@ var disco=ochecks[i].value.split("_")[0]; var particion=ochecks[i].value.split("_")[1]; // El desplegable de imagen ahora indica disco y particion en su nombre - despleimagen=document.getElementById("despleimagen_"+disco+"_"+particion); - var p=despleimagen.selectedIndex; - if (p==0){ + var despleimagen=document.getElementById("despleimagen_"+disco+"_"+particion); + var p=despleimagen.selectedIndex; + if (p===0){ alert(TbMsg[0]); despleimagen.focus(); return(false) } } } - if(op==0){ + if(op===0){ alert(TbMsg[1]); return(false); } diff --git a/admin/WebConsole/comandos/jscripts/CrearImagenBasica.js b/admin/WebConsole/comandos/jscripts/CrearImagenBasica.js index affb0f77..68751f25 100644 --- a/admin/WebConsole/comandos/jscripts/CrearImagenBasica.js +++ b/admin/WebConsole/comandos/jscripts/CrearImagenBasica.js @@ -1,10 +1,10 @@ // ************************************************************************************************************************************************* // Libreria de scripts de Javascript -// Copyright 2003-2005 Jos� Manuel Alonso. Todos los derechos reservados. -// Fecha Creaci�n:2003-2004 -// Fecha �ltima modificaci�n: Marzo-2005 +// Copyright 2003-2005 José Manuel Alonso. Todos los derechos reservados. +// Fecha Creación:2003-2004 +// Fecha última modificación: Marzo-2005 // Nombre del fichero: CrearImagenBasica.js -// Descripci�n : +// Descripción: // Este fichero implementa las funciones javascript del fichero CrearImagenBasica.php (Comandos) // ************************************************************************************************************************************************* var RC="@"; @@ -12,7 +12,7 @@ function confirmar() { var prm=comprobar_datos(); - if(prm=="") return; // Ha habido alg�n error + if(prm==="") return; // Ha habido algún error var disco=1; // Siempre disco 1 document.fdatosejecucion.atributos.value="dsk="+disco+RC+prm; @@ -21,7 +21,7 @@ } //________________________________________________________________________________________________________ // -// Cancela la edici�n +// Cancela la edición //________________________________________________________________________________________________________ function cancelar(){ @@ -35,75 +35,72 @@ function cancelar(){ function comprobar_datos() { - var prm=""; // Retorno par�metros + var prm=""; // Retorno parámetros var cadPar=document.getElementById("cadPar").getAttribute("value"); var tbPar=cadPar.split(";"); for(var i=0;i<tbPar.length;i++){ - var par=tbPar[i]; // Numero de partici�n + var par=tbPar[i]; // Numero de partición if(par>0){ var trObj=document.getElementById('trPar-'+par); // Recupera objeto fila var obRDO=trObj.childNodes[0].childNodes[0]; // Recupera Radio buton de la fila - if(obRDO.checked){ // Si est� seleccionado ... + if(obRDO.checked){ // Si está seleccionado ... var cpt=obRDO.getAttribute("value"); - var obSel=trObj.childNodes[3].childNodes[0]; // Recupera objeto select de la Imagen + var obSel=trObj.childNodes[3].childNodes[0]; // Recupera objeto select de la Imagen var idx=obSel.selectedIndex; - if(idx==0){ // No ha seleccionado indice en el desplegable imagen + if(idx===0){ // No ha seleccionado indice en el desplegable imagen alert(TbMsg[1]); - return(false); - } - // Compone parametros + return(false); + } + // Compone parametros var tbIMG=obSel.options[idx].value.split(";"); var idi=tbIMG[0]; // Identificador de la imagen - var nci=tbIMG[1]; // Nombre can�nico de la imagen - var ipr=tbIMG[2]; // Ip del repositorio de la imagen - var rti=tbIMG[3]; // Ruta de origen de la imagen + var nci=tbIMG[1]; // Nombre canónico de la imagen + var ipr=tbIMG[2]; // Ip del repositorio de la imagen + var rti=tbIMG[3]; // Ruta de origen de la imagen prm+="par="+par+RC; - prm+="cpt="+cpt+RC; + prm+="cpt="+cpt+RC; prm+="idi="+idi+RC; prm+="nci="+nci+RC; - prm+="ipr="+ipr+RC; - prm+="rti="+rti+RC; + prm+="ipr="+ipr+RC; + prm+="rti="+rti+RC; + + var desplemet=document.getElementById("desplesync_"+par); // Desplegable metodo de syncronización + var p=desplemet.selectedIndex; // Toma índice seleccionado - - var desplemet=document.getElementById("desplesync_"+par); // Desplegable metodo de syncronizaci�n - var p=desplemet.selectedIndex; // Toma �ndice seleccionado - - // No ha elegido ninguna partici�n - if(p==0){ + // No ha elegido ninguna partición + if(p===0){ alert(TbMsg[3]); return(""); } - prm+="msy="+p+RC; // M�todo de syncronizaci�n 1=Sincronizaci�n1 2=Sincronizacion2 - - + prm+="msy="+p+RC; // Método de syncronización 1=Sincronización1 2=Sincronización2 + var chrChk=document.getElementById('whl-'+par); // Recupera objeto fila de la tabla opciones adicionales if(chrChk.checked) prm+="whl=1"+RC; else prm+="whl=0"+RC; chrChk=document.getElementById('eli-'+par); // Recupera objeto fila de la tabla opciones adicionales if(chrChk.checked) prm+="eli=1"+RC; else prm+="eli=0"+RC; chrChk=document.getElementById('cmp-'+par); // Recupera objeto fila de la tabla opciones adicionales if(chrChk.checked) prm+="cmp=1"+RC; else prm+="cmp=0"+RC; - - var trObj=document.getElementById('trOpc'); // Recupera objeto fila de la tabla opciones adicionales - var obChk=trObj.childNodes[3].childNodes[0]; // Recupera objeto checkbox borrar de la Imagen + + trObj=document.getElementById('trOpc'); // Recupera objeto fila de la tabla opciones adicionales + var obChk=trObj.childNodes[3].childNodes[0]; // Recupera objeto checkbox borrar de la Imagen if(obChk.checked) prm+="bpi=1"+RC; else prm+="bpi=0"+RC; - var obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache + obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en caché if(obChk.checked) prm+="cpc=1"+RC; else prm+="cpc=0"+RC; - var obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache + obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la caché if(obChk.checked) prm+="bpc=1"+RC; else prm+="bpc=0"+RC; - var obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino + obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino if(obChk.checked) prm+="nba=1"+RC; else prm+="nba=0"+RC; - if(comprobar_datosejecucion()) // Comprueba opciones de ejecuci�n + if(comprobar_datosejecucion()) // Comprueba opciones de ejecución return(prm); else return(""); } } } - // No ha elegido ninguna partici�n + // No ha elegido ninguna partición alert(TbMsg[2]); return(""); } - diff --git a/admin/WebConsole/comandos/jscripts/CrearSoftIncremental.js b/admin/WebConsole/comandos/jscripts/CrearSoftIncremental.js index b4a827d1..250c85e7 100644 --- a/admin/WebConsole/comandos/jscripts/CrearSoftIncremental.js +++ b/admin/WebConsole/comandos/jscripts/CrearSoftIncremental.js @@ -1,10 +1,10 @@ // ************************************************************************************************************** // Libreria de scripts de Javascript -// Copyright 2003-2005 Jos� Manuel Alonso. Todos los derechos reservados. -// Fecha Creaci�n:2003-2004 -// Fecha �ltima modificaci�n: Marzo-2005 +// Copyright 2003-2005 José Manuel Alonso. Todos los derechos reservados. +// Fecha Creación:2003-2004 +// Fecha última modificación: Marzo-2005 // Nombre del fichero: CrearSoftIncremental.js -// Descripci�n : +// Descripción: // Este fichero implementa las funciones javascript del fichero CrearSoftIncremental.php (Comandos) // ************************************************************************************************************** @@ -13,16 +13,15 @@ function confirmar() { var prm=comprobar_datos(); - if(prm=="") return; // Ha habido alg�n error + if(prm==="") return; // Ha habido algún error var disco=1; // Siempre disco 1 document.fdatosejecucion.atributos.value="dsk="+disco+RC+prm; - //alert(document.fdatosejecucion.atributos.value); document.fdatosejecucion.submit(); } //________________________________________________________________________________________________________ // -// Cancela la edici�n +// Cancela la edición //________________________________________________________________________________________________________ function cancelar(){ @@ -36,47 +35,47 @@ function cancelar(){ function comprobar_datos() { - var prm=""; // Retorno par�metros + var prm=""; // Retorno parámetros var cadPar=document.getElementById("cadPar").getAttribute("value"); var tbPar=cadPar.split(";"); for(var i=0;i<tbPar.length;i++){ - var par=tbPar[i]; // Numero de partici�n + var par=tbPar[i]; // Numero de partición if(par>0){ var trObj=document.getElementById('trPar-'+par); // Recupera objeto fila var obRDO=trObj.childNodes[0].childNodes[0]; // Recupera Radio buton de la fila - if(obRDO.checked){ // Si est� seleccionado ... - var obSel=trObj.childNodes[3].childNodes[0]; // Recupera objeto select de la Imagen + if(obRDO.checked){ // Si está seleccionado ... + var obSel=trObj.childNodes[3].childNodes[0]; // Recupera objeto select de la Imagen var idx=obSel.selectedIndex; - if(idx==0){ // No ha seleccionado indice en el desplegable imagen + if(idx===0){ // No ha seleccionado indice en el desplegable imagen alert(TbMsg[3]); return(false); } var tbIMG=obSel.options[idx].value.split(";"); - var idi=tbIMG[0]; // Identificador de la imagen b�sica - var nci=tbIMG[1]; // Nombre can�nico de la imagen b�sica + var idi=tbIMG[0]; // Identificador de la imagen básica + var nci=tbIMG[1]; // Nombre canónico de la imagen básica var ipr=tbIMG[2]; // Ip del repositorio de la imagen var idf=tbIMG[3]; // NIdentificador de la imagen incremental - var ncf=tbIMG[4]; // Nombre can�nico de la imagen incremental + var ncf=tbIMG[4]; // Nombre canónico de la imagen incremental var rti=tbIMG[5]; // Ruta de origen de la imagen - // Compone parametros + // Compone parametros prm+="par="+par+RC; prm+="idi="+idi+RC; prm+="nci="+nci+RC; - prm+="ipr="+ipr+RC; + prm+="ipr="+ipr+RC; prm+="idf="+idf+RC; - prm+="ncf="+ncf+RC; - prm+="rti="+rti+RC; + prm+="ncf="+ncf+RC; + prm+="rti="+rti+RC; - var desplemet=document.getElementById("desplesync_"+par); // Desplegable metodo de syncronizaci�n - var p=desplemet.selectedIndex; // Toma �ndice seleccionado - - // No ha elegido ninguna partici�n - if(p==0){ + var desplemet=document.getElementById("desplesync_"+par); // Desplegable metodo de syncronización + var p=desplemet.selectedIndex; // Toma índice seleccionado + + // No ha elegido ninguna partición + if(p===0){ alert(TbMsg[4]); return(""); } - prm+="msy="+p+RC; // M�todo de syncronizaci�n 1=Sincronizaci�n1 2=Sincronizacion2 + prm+="msy="+p+RC; // Método de syncronización 1=Sincronización1 2=Sincronización2 var chrChk=document.getElementById('whl-'+par); // Recupera objeto fila de la tabla opciones adicionales if(chrChk.checked) prm+="whl=1"+RC; else prm+="whl=0"+RC; @@ -86,24 +85,24 @@ function comprobar_datos() if(chrChk.checked) prm+="cmp=1"+RC; else prm+="cmp=0"+RC; - var trObj=document.getElementById('trOpc'); // Recupera objeto fila de la tabla opciones adicionales + trObj=document.getElementById('trOpc'); // Recupera objeto fila de la tabla opciones adicionales var obChk=trObj.childNodes[3].childNodes[0]; // Recupera objeto checkbox borrar de la Imagen if(obChk.checked) prm+="bpi=1"+RC; else prm+="bpi=0"+RC; - var obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache + obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache if(obChk.checked) prm+="cpc=1"+RC; else prm+="cpc=0"+RC; - var obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache + obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache if(obChk.checked) prm+="bpc=1"+RC; else prm+="bpc=0"+RC; - var obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino - if(obChk.checked) prm+="nba=1"+RC; else prm+="nba=0"+RC; + obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino + if(obChk.checked) prm+="nba=1"+RC; else prm+="nba=0"+RC; - if(comprobar_datosejecucion()) // Comprueba opciones de ejecuci�n + if(comprobar_datosejecucion()) // Comprueba opciones de ejecución return(prm); else return(""); } } } - // No ha elegido ninguna partici�n + // No ha elegido ninguna partición alert(TbMsg[2]); return(""); } diff --git a/admin/WebConsole/comandos/jscripts/EjecutarScripts.js b/admin/WebConsole/comandos/jscripts/EjecutarScripts.js index 878ea770..e97e6f2a 100644 --- a/admin/WebConsole/comandos/jscripts/EjecutarScripts.js +++ b/admin/WebConsole/comandos/jscripts/EjecutarScripts.js @@ -33,7 +33,7 @@ function comprobar_datos() { - if (document.fdatos.codigo.value=="") { + if (document.fdatos.codigo.value==="") { alert(TbMsg[1]); document.fdatos.codigo.focus(); return(false); diff --git a/admin/WebConsole/comandos/jscripts/EliminarImagenCache.js b/admin/WebConsole/comandos/jscripts/EliminarImagenCache.js index 2e74c9a0..62ff72fd 100644 --- a/admin/WebConsole/comandos/jscripts/EliminarImagenCache.js +++ b/admin/WebConsole/comandos/jscripts/EliminarImagenCache.js @@ -7,7 +7,7 @@ function confirmar(){ if (comprobar_datos()){ // Compone atributos del comando - tb_conf=document.getElementById("tabla_conf"); + var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); var atributos; for(var i=0;i<ochecks.length;i++){ @@ -29,13 +29,13 @@ function confirmar(){ //________________________________________________________________________________________________________ function comprobar_datos() { - tb_conf=document.getElementById("tabla_conf"); + var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); var op=0; for(var i=0;i<ochecks.length;i++){ if(ochecks[i].checked) op++; } - if(op==0){ + if(op===0){ alert(TbMsg[1]); return(false); } diff --git a/admin/WebConsole/comandos/jscripts/IniciarSesion.js b/admin/WebConsole/comandos/jscripts/IniciarSesion.js index cbd1cf69..9fe4d525 100644 --- a/admin/WebConsole/comandos/jscripts/IniciarSesion.js +++ b/admin/WebConsole/comandos/jscripts/IniciarSesion.js @@ -20,13 +20,13 @@ function confirmar(){ filtrado(); var ipfiltro=document.fdatosejecucion.filtro.value; // Compone atributos del comando - tb_conf=document.getElementById("tabla_conf"); + var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); for(var i=0;i<ochecks.length;i++){ if(ochecks[i].checked){ var diskPart = ochecks[i].value.split(";"); var disco = diskPart[0]; - var numpar= diskPart[1]; + var numpar= diskPart[1]; atributos+="dsk="+disco+RC; atributos+="par="+numpar+RC; // Datos bloque de configuracion: ip equipos. @@ -35,12 +35,12 @@ function confirmar(){ var iptabla=tbOrd.getAttribute('value'); // Elimino los ordenadores del filtro que no estén en la tabla. - if (ipfiltro!=''){ + if (ipfiltro!==''){ var arraytabla = iptabla.split(","); var arrayfiltro =ipfiltro.split(";"); arrayfiltro = array_interset (arrayfiltro.sort(), arraytabla.sort()); ipfiltro = arrayfiltro.join(";"); - if (ipfiltro ==''){ + if (ipfiltro===''){ alert(TbMsg["FILTER"]); return(false); } @@ -68,13 +68,13 @@ function confirmar(){ //________________________________________________________________________________________________________ function comprobar_datos() { - tb_conf=document.getElementById("tabla_conf"); + var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); var op=0; for(var i=0;i<ochecks.length;i++){ if(ochecks[i].checked) op++; } - if(op==0){ + if(op===0){ alert(TbMsg[1]); return(false); } diff --git a/admin/WebConsole/comandos/jscripts/InventarioSoftware.js b/admin/WebConsole/comandos/jscripts/InventarioSoftware.js index 4910d047..ad6a42c1 100644 --- a/admin/WebConsole/comandos/jscripts/InventarioSoftware.js +++ b/admin/WebConsole/comandos/jscripts/InventarioSoftware.js @@ -8,10 +8,10 @@ // Este fichero implementa las funciones javascript del fichero InventarioHardware.php (Comandos) // ************************************************************************************************************************************************* function confirmar(){ + var diskPart=[]; if (comprobar_datos()){ - tb_conf=document.getElementById("tabla_conf"); + var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); - var particion; for(var i=0;i<ochecks.length;i++){ if(ochecks[i].checked){ diskPart=ochecks[i].value.split(";"); @@ -32,14 +32,14 @@ } //________________________________________________________________________________________________________ function comprobar_datos(){ - tb_conf=document.getElementById("tabla_conf"); + var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); var op=0; for(var i=0;i<ochecks.length;i++){ if(ochecks[i].checked) op++; } - if(op==0){ + if(op===0){ alert(TbMsg[1]); return(false); } diff --git a/admin/WebConsole/comandos/jscripts/RestaurarImagen.js b/admin/WebConsole/comandos/jscripts/RestaurarImagen.js index 778e6de1..36705236 100644 --- a/admin/WebConsole/comandos/jscripts/RestaurarImagen.js +++ b/admin/WebConsole/comandos/jscripts/RestaurarImagen.js @@ -12,6 +12,7 @@ var RC="@"; // UHU - Ahora puede ser cualquier disco var disco; + var numequipos; var atributos=""; var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); @@ -46,12 +47,12 @@ var ipfiltro=document.fdatosejecucion.filtro.value; // Elimino los ordenadores del filtro que no estén en la tabla. - if (ipfiltro!=''){ + if (ipfiltro!==''){ var arraytabla = iptabla.split(","); var arrayfiltro =ipfiltro.split(";"); arrayfiltro = array_interset (arrayfiltro.sort(), arraytabla.sort()); ipfiltro = arrayfiltro.join(";"); - if (ipfiltro ==''){ + if (ipfiltro===''){ alert(TbMsg["FILTER"]); return(false); } @@ -63,8 +64,8 @@ } // Mensaje de aviso si protocolo UNICAST y más de un ordenador - if ( ( protoclonacion.value=="UNICAST" || protoclonacion.value=="UNICAST-DIRECT") && numequipos > 1 ) { - if (confirm(TbMsg["UNICAST"]) != true) { + if ( ( protoclonacion.value==="UNICAST" || protoclonacion.value==="UNICAST-DIRECT") && numequipos > 1 ) { + if (confirm(TbMsg["UNICAST"]) !== true) { cancelar(); return(false); } @@ -84,32 +85,32 @@ //________________________________________________________________________________________________________ function comprobar_datos() { - tb_conf=document.getElementById("tabla_conf"); + var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); var op=0; for(var i=0;i<ochecks.length;i++){ if(ochecks[i].checked){ op++; var idradio=ochecks[i].id; // Toma idemtificador del desplegable de imagenes - despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1"); // Desplegable izda. - despleimagendcha=document.getElementById("despleimagen_"+idradio+"_0"); // Desplegable derecha. + var despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1"); // Desplegable izda. + var despleimagendcha=document.getElementById("despleimagen_"+idradio+"_0"); // Desplegable derecha. var p1=despleimagenizda.selectedIndex; // Toma índice seleccionado var p2=despleimagendcha.selectedIndex; // Toma índice seleccionado - if (p1==0 && p2==0){ + if (p1===0 && p2===0){ alert(TbMsg[0]); despleimagenizda.focus(); return(false) } - if (p1==p2){ + if (p1===p2){ alert(TbMsg[6]); despleimagenizda.focus(); return(false) } } } - if(op==0){ + if(op===0){ alert(TbMsg[1]); return(false); } diff --git a/admin/WebConsole/comandos/jscripts/RestaurarImagenBasica.js b/admin/WebConsole/comandos/jscripts/RestaurarImagenBasica.js index 99b91a19..960cd8ce 100644 --- a/admin/WebConsole/comandos/jscripts/RestaurarImagenBasica.js +++ b/admin/WebConsole/comandos/jscripts/RestaurarImagenBasica.js @@ -16,7 +16,7 @@ var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); for(var i=0;i<ochecks.length;i++){ - if(ochecks[i].checked && ochecks[i].name=="particion"){ + if(ochecks[i].checked && ochecks[i].name==="particion"){ var idradio=ochecks[i].id; var diskPart = ochecks[i].value.split(";"); disco =diskPart[0]; @@ -36,15 +36,15 @@ atributos+="rti="+imgcanrepo[4]+RC; // Ruta de origen de la imagen var desplemet=document.getElementById("desplemet_"+idradio); // Desplegable metodo de restauración - var p=desplemet.selectedIndex; // Toma índice seleccionado + var p=desplemet.selectedIndex; // Toma índice seleccionado atributos+="met="+p+RC; // Método de clonación 0=caché 1=repositorio - var desplemet=document.getElementById("desplesync_"+idradio); // Desplegable metodo de syncronización - var p=desplemet.selectedIndex; // Toma índice seleccionado + desplemet=document.getElementById("desplesync_"+idradio); // Desplegable metodo de syncronización + p=desplemet.selectedIndex; // Toma índice seleccionado atributos+="msy="+p+RC; // Método de clonación - var desplemet=document.getElementById("despletpt_"+idradio); // Desplegable metodo de syncronización - var p=desplemet.value; // Toma índice seleccionado + desplemet=document.getElementById("despletpt_"+idradio); // Desplegable metodo de syncronización + p=desplemet.value; // Toma índice seleccionado atributos+="tpt="+p+RC; // Método de clonación var chrChk=document.getElementById('whl-'+idradio); // Recupera objeto fila de la tabla opciones adicionales @@ -55,12 +55,12 @@ if(chrChk.checked) atributos+="cmp=1"+RC; else atributos+="cmp=0"+RC; var cc=ochecks[i].getAttribute('idcfg'); // Toma identificador del bloque de configuración - if(document.fdatosejecucion.ambito.value!=AMBITO_ORDENADORES){ + if(document.fdatosejecucion.ambito.value!=AMBITO_ORDENADORES){ var tbOrd=document.getElementById("tbOrd_"+cc); var idordenadores=tbOrd.getAttribute('value'); // Toma identificadores de los ordenadores var cadenaid=document.fdatos.cadenaid.value; // Cadena de identificadores de todos los ordenadores del ámbito - if(idordenadores!=cadenaid){ - document.fdatosejecucion.ambito.value=0; // Ambito de aplicación restringido + if(idordenadores!==cadenaid){ + document.fdatosejecucion.ambito.value=0; // Ámbito de aplicación restringido document.fdatosejecucion.idambito.value=idordenadores; } } @@ -68,11 +68,11 @@ var trObj=document.getElementById('trOpc'); // Recupera objeto fila de la tabla opciones adicionales var obChk=trObj.childNodes[3].childNodes[0]; // Recupera objeto checkbox borrar de la Imagen if(obChk.checked) atributos+="bpi=1"+RC; else atributos+="bpi=0"+RC; - var obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache + obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache if(obChk.checked) atributos+="cpc=1"+RC; else atributos+="cpc=0"+RC; - var obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache + obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache if(obChk.checked) atributos+="bpc=1"+RC; else atributos+="bpc=0"+RC; - var obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino + obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino if(obChk.checked) atributos+="nba=1"+RC; else atributos+="nba=0"+RC; document.fdatosejecucion.atributos.value=atributos; @@ -92,31 +92,31 @@ //________________________________________________________________________________________________________ function comprobar_datos() { - tb_conf=document.getElementById("tabla_conf"); + var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); var op=0; for(var i=0;i<ochecks.length;i++){ - if(ochecks[i].checked && ochecks[i].name=="particion"){ + if(ochecks[i].checked && ochecks[i].name==="particion"){ op++; var idradio=ochecks[i].id; // Toma idemtificador del desplegable de imagenes - despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1"); // Desplegable izda. - var p1=despleimagenizda.selectedIndex; // Toma índice seleccionado - if (p1==0){ + var despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1"); // Desplegable izda. + var p1=despleimagenizda.selectedIndex; // Toma índice seleccionado + if (p1===0){ alert(TbMsg[0]); despleimagenizda.focus(); return(false) } // Comprobamos tipo de sincronizacion. var desplemet=document.getElementById("desplesync_"+idradio); // Desplegable metodo de syncronización - var p1=desplemet.selectedIndex; // Toma índice seleccionado - if (p1==0){ + p1=desplemet.selectedIndex; // Toma índice seleccionado + if (p1===0){ alert(TbMsg[7]); desplemet.focus(); return(false) } } } - if(op==0){ + if(op===0){ alert(TbMsg[1]); return(false); } diff --git a/admin/WebConsole/comandos/jscripts/RestaurarSoftIncremental.js b/admin/WebConsole/comandos/jscripts/RestaurarSoftIncremental.js index 756b3ba9..88ecd6e1 100644 --- a/admin/WebConsole/comandos/jscripts/RestaurarSoftIncremental.js +++ b/admin/WebConsole/comandos/jscripts/RestaurarSoftIncremental.js @@ -16,7 +16,7 @@ var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); for(var i=0;i<ochecks.length;i++){ - if(ochecks[i].checked && ochecks[i].name=="particion"){ + if(ochecks[i].checked && ochecks[i].name==="particion"){ var idradio=ochecks[i].id; var diskPart = ochecks[i].value.split(";"); disco =diskPart[0]; @@ -39,15 +39,15 @@ atributos+="rti="+imgcanrepo[6]+RC; // Ruta de origen de la imagen var desplemet=document.getElementById("desplemet_"+idradio); // Desplegable metodo de restauración - var p=desplemet.selectedIndex; // Toma índice seleccionado + var p=desplemet.selectedIndex; // Toma índice seleccionado atributos+="met="+p+RC; // Método de clonación 0=caché 1=repositorio - var desplemet=document.getElementById("desplesync_"+idradio); // Desplegable metodo de syncronización - var p=desplemet.selectedIndex; // Toma índice seleccionado + desplemet=document.getElementById("desplesync_"+idradio); // Desplegable metodo de syncronización + p=desplemet.selectedIndex; // Toma índice seleccionado atributos+="msy="+p+RC; // Método de clonación - var desplemet=document.getElementById("despletpt_"+idradio); // Desplegable metodo de syncronización - var p=desplemet.value; // Toma índice seleccionado + desplemet=document.getElementById("despletpt_"+idradio); // Desplegable metodo de syncronización + p=desplemet.value; // Toma índice seleccionado atributos+="tpt="+p+RC; // Método de transmision var chrChk=document.getElementById('whl-'+idradio); // Recupera objeto fila de la tabla opciones adicionales @@ -58,11 +58,11 @@ if(chrChk.checked) atributos+="cmp=1"+RC; else atributos+="cmp=0"+RC; var cc=ochecks[i].getAttribute('idcfg'); // Toma identificador del bloque de configuración - if(document.fdatosejecucion.ambito.value!=AMBITO_ORDENADORES){ + if(document.fdatosejecucion.ambito.value!=AMBITO_ORDENADORES){ var tbOrd=document.getElementById("tbOrd_"+cc); var idordenadores=tbOrd.getAttribute('value'); // Toma identificadores de los ordenadores var cadenaid=document.fdatos.cadenaid.value; // Cadena de identificadores de todos los ordenadores del ámbito - if(idordenadores!=cadenaid){ + if(idordenadores!==cadenaid){ document.fdatosejecucion.ambito.value=0; // Ambito de aplicación restringido document.fdatosejecucion.idambito.value=idordenadores; } @@ -71,11 +71,11 @@ var trObj=document.getElementById('trOpc'); // Recupera objeto fila de la tabla opciones adicionales var obChk=trObj.childNodes[3].childNodes[0]; // Recupera objeto checkbox borrar de la Imagen if(obChk.checked) atributos+="bpi=1"+RC; else atributos+="bpi=0"+RC; - var obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache + obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache if(obChk.checked) atributos+="cpc=1"+RC; else atributos+="cpc=0"+RC; - var obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache + obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache if(obChk.checked) atributos+="bpc=1"+RC; else atributos+="bpc=0"+RC; - var obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino + obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino if(obChk.checked) atributos+="nba=1"+RC; else atributos+="nba=0"+RC; document.fdatosejecucion.atributos.value=atributos; @@ -95,30 +95,30 @@ //________________________________________________________________________________________________________ function comprobar_datos() { - tb_conf=document.getElementById("tabla_conf"); + var tb_conf=document.getElementById("tabla_conf"); var ochecks=tb_conf.getElementsByTagName('INPUT'); var op=0; for(var i=0;i<ochecks.length;i++){ - if(ochecks[i].checked && ochecks[i].name=="particion"){ + if(ochecks[i].checked && ochecks[i].name==="particion"){ op++; var idradio=ochecks[i].id; // Toma idemtificador del desplegable de imagenes - despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1"); // Desplegable imagenes. - var p1=despleimagenizda.selectedIndex; // Toma índice seleccionado - if (p1==0){ + var despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1"); // Desplegable imagenes. + var p1=despleimagenizda.selectedIndex; // Toma índice seleccionado + if (p1===0){ alert(TbMsg[0]); despleimagenizda.focus(); return(false) } var desplemet=document.getElementById("desplesync_"+idradio); // Desplegable metodo de syncronización - var p1=desplemet.selectedIndex; // Toma índice seleccionado - if (p1==0){ + p1=desplemet.selectedIndex; // Toma índice seleccionado + if (p1===0){ alert(TbMsg[7]); desplemet.focus(); return(false) } } } - if(op==0){ + if(op===0){ alert(TbMsg[1]); return(false); } diff --git a/admin/WebConsole/controlacceso.php b/admin/WebConsole/controlacceso.php index 3e2f74ce..cfae986b 100644 --- a/admin/WebConsole/controlacceso.php +++ b/admin/WebConsole/controlacceso.php @@ -16,4 +16,4 @@ $wac="OPENGNSYSURL/"; // Página de login de la aplicación $idi="esp"; // Idioma por defecto //======================================================================================================== -?> + diff --git a/admin/WebConsole/controlpostacceso.php b/admin/WebConsole/controlpostacceso.php index 01f840d2..e3ecd0d9 100644 --- a/admin/WebConsole/controlpostacceso.php +++ b/admin/WebConsole/controlpostacceso.php @@ -16,7 +16,8 @@ include_once("./clases/AdoPhp.php"); $pss=""; $ident=""; $idc=0; - $iph=""; // Switch menu cliente + $iph=""; // Switch menu cliente + $adminetboot=""; if (isset($_GET["iph"])) $iph=$_GET["iph"]; //________________________________________________________________________________________________________ @@ -32,7 +33,6 @@ include_once("./clases/AdoPhp.php"); if ($idc != 0) { $rs=new Recordset; -// $cmd->texto="SELECT * FROM centros WHERE idcentro='$idc'"; $cmd->texto="SELECT * FROM centros WHERE idcentro=".$idc; $rs->Comando=&$cmd; if (!$rs->Abrir()) return(false); // Error al abrir recordset @@ -91,7 +91,7 @@ if ($idc != 0) //________________________________________________________________________________________________________ // Busca datos del usuario que intenta acceder a la aplicación - // Parametros: + // Parámetros: // - cmd:Una comando ya operativo (con conexión abierta) // - usuario: Nombre del usuario // - pasguor: Password del uuario @@ -122,7 +122,7 @@ if ($idc != 0) AND usuarios.pasguor=SHA2('".$pasguor."', 224)"; } $rs->Comando=&$cmd; - if (!$rs->Abrir()) return($false); // Error al abrir recordset + if (!$rs->Abrir()) return(false); // Error al abrir recordset if(!$rs->EOF){ $adminetboot=$rs->campos["idtipousuario"]; $idtipousuario=$rs->campos["idtipousuario"]; @@ -144,7 +144,7 @@ if ($idc != 0) } //________________________________________________________________________________________________________ // Busca datos de configuración del sistema - // Parametros: + // Paráametros: // - cmd:Una comando ya operativo (con conexión abierta) // - ips: Dirección IP del servidor de administración // - prt: Puerto de comunicaciones @@ -157,8 +157,7 @@ if ($idc != 0) $rs=new Recordset; $cmd->texto="SELECT * FROM entornos"; $rs->Comando=&$cmd; - //echo $cmd->texto; - if (!$rs->Abrir()) return($false); // Error al abrir recordset + if (!$rs->Abrir()) return(false); // Error al abrir recordset if(!$rs->EOF){ $ips=$rs->campos["ipserveradm"]; $prt=$rs->campos["portserveradm"]; @@ -169,7 +168,7 @@ if ($idc != 0) } //_______________________________________________________________________________________________________ // Muestra mensaje de alerta si no existe repositorio en la unidad organizativa - // Parametros: + // Parámetros: // - cmd:Una comando ya operativo (con conexión abierta) // - idcentro: identificador de la unidad organizativa //_______________________________________________________________________________________________________ @@ -202,17 +201,17 @@ if ($idc != 0) </head> <body> -<div id="mensaje" style="position:absolute;TOP:250;LEFT:330; visibility:visible"> - <span align="center" class="subcabeceras"><?php echo $TbMsg["ACCESS_ALLOWED"] ?></span> +<div id="mensaje" style="position:absolute;TOP:250px;LEFT:330px; visibility:visible; text-align: center"> + <span class="subcabeceras"><?php echo $TbMsg["ACCESS_ALLOWED"] ?></span> </div> <script language="javascript"> var vez=0; setTimeout("acceso();",300); function acceso(){ - o=document.getElementById("mensaje"); + var o=document.getElementById("mensaje"); var s=o.style.visibility; - if(s=="hidden") + if(s==="hidden") o.style.visibility="visible"; else o.style.visibility="hidden"; diff --git a/admin/WebConsole/descargas/README.es.html b/admin/WebConsole/descargas/README.es.html index 65560da7..bc548e02 100644 --- a/admin/WebConsole/descargas/README.es.html +++ b/admin/WebConsole/descargas/README.es.html @@ -7,53 +7,52 @@ <h1>OGAgent: agentes OpenGnsys para sistemas operativos</h1> <p>Ficheros disponibles para descarga de agente OGAgent:</p> -<dl> - <li><code>ogagent_<em>Version</em>_all.deb</code>: OGAgent para sistemas Ubuntu, Debian y derivados - <li><code>ogagent-<em>Version</em>.noarch.rpm</code>: OGAgent para sistemas Red Hat, Fedora y derivados - <li><code>ogagent-opensuse-<em>Version</em>.noarch.rpm</code>: OGAgent para sistemas SuSE y OpenSuSE - <li><code>OGAgentInstaller-<em>Version</em>.pkg</code>: OGAgent para sistemas macOS X - <li><code>OGAgentSetup-<em>Version</em>.exe</code>: OGAgent para sistemas Windows -</dl> +<ul> + <li><code>ogagent_<em>Version</em>_all.deb</code>: OGAgent para sistemas Ubuntu, Debian y derivados</li> + <li><code>ogagent-<em>Version</em>.noarch.rpm</code>: OGAgent para sistemas Red Hat, Fedora y derivados</li> + <li><code>ogagent-opensuse-<em>Version</em>.noarch.rpm</code>: OGAgent para sistemas SuSE y OpenSuSE</li> + <li><code>OGAgentInstaller-<em>Version</em>.pkg</code>: OGAgent para sistemas macOS X</li> + <li><code>OGAgentSetup-<em>Version</em>.exe</code>: OGAgent para sistemas Windows</li> +</ul> <h2>Instalar los agentes</h2> <h3>Ubuntu, Debian y derivados:</h3> -<dl> +<ul> <li>Ejecutar los comandos desde una terminal.</li> <li>Descargar el fichero e instalar el agente con sus dependencias: <pre> - sudo dpkg -i ogagent_<em>Version</em>_all.deb - sudo apt-get update - sudo apt-get install -fy</pre></li> + sudo apt update + sudo apt install <em>DirectorioDescarga</em>/ogagent_<em>Version</em>_all.deb</pre></li> <li>Configurar el agente: <pre> sudo sed -i "0,/remote=/ s,remote=.*,remote=https://<em>IPServidorOpenGnsys</em>/opengnsys/rest/," /usr/share/OGAgent/cfg/ogagent.cfg</pre></li> <li>Reiniciar el equipo o ejecutar el servicio <em>(se iniciará automáticamente en el proceso de arranque)</em>: <pre> sudo service ogagent start</pre></li> -</dl> +</ul> <h3>Red Hat, Fedora y derivados (como root):</h3> -<dl> +<ul> <li>Ejecutar los comandos desde una terminal.</li> <li>Descargar el fichero e instalar el agente con sus dependencias: <pre> yum install ogagent-<em>Version</em>.noarch.rpm</pre></li> <li>Configurar el agente: <pre> sed -i "0,/remote=/ s,remote=.*,remote=https://<em>IPServidorOpenGnsys</em>/opengnsys/rest/," /usr/share/OGAgent/cfg/ogagent.cfg</pre></li> - <li>Puede ser necesario corregir permisos antes de iniciar el servicio:</li> + <li>Puede ser necesario corregir permisos antes de iniciar el servicio: <pre> chmod +x /etc/init.d/ogagent</pre></li> <li>Reiniciar el equipo o ejecutar el servicio <em>(se iniciará automáticamente en el proceso de arranque)</em>: <pre> service ogagent start</pre></li> -</dl> +</ul> <h3>OpenSuSE:</h3> <p><em>(en preparación)</em></p> <h3>macOS X:</h3> -<dl> +<ul> <li>Ejecutar los comandos desde una terminal.</li> <li>Instalar dependencias <em>(la instalación puebe realizar estas operaciones)</em>: <pre> sudo easy_install pip - sudo pip install netifaces requests six</pre></li> + sudo pip install -U --ignore-installed netifaces requests six</pre></li> <li>Descargar el fichero e instalar el agente: <pre> sudo installer -pkg OGAgentInstaller-<em>Version</em>.pkg -target /</pre></li> <li>Configurar el agente: @@ -62,16 +61,16 @@ sudo mv /tmp/ogagent.cfg /Applications/OGAgent.app/cfg/ogagent.cfg</pre></li> <li>Reiniciar el equipo o ejecutar el servicio <em>(se iniciará automáticamente en el proceso de arranque)</em>: <pre> sudo ogagent start</pre></li> -</dl> +</ul> <h3>Windows (como usuario administrador):</h3> -<dl> - <li>Descargar el fichero e instalar el agente ejecutando el fichero <code>OGAgentSetup-<em>Version</em>.exe</code></li> +<ul> + <li>Descargar el fichero e instalar el agente ejecutando <code>OGAgentSetup-<em>Version</em>.exe</code></li> <li>Seguir las instrucciones del instalador.</li> <li>Editar el fichero de configuación <code>C:\Program Files\OGAgent\cfg\ogagent.cfg</code> (o <code>C:\Archivos de programa\OGAgent\cfg\ogagent.cfg</code>) y modificar el valor de la cláusula <code>remote</code> de la sección <code>[OGAgent]</code> inclyendo la dirección IP del servidor OpenGnsys.</li> <li>Reiniciar el equipo o ejecutar el servicio <em>(se iniciará automáticamente en el proceso de arranque)</em>: <pre> NET START OGAgent</pre></li> -</dl> +</ul> <h2>Desinstalar los agentes</h2> diff --git a/admin/WebConsole/descargas/index.php b/admin/WebConsole/descargas/index.php index bb434bee..b5caae13 100644 --- a/admin/WebConsole/descargas/index.php +++ b/admin/WebConsole/descargas/index.php @@ -65,4 +65,4 @@ function sendFile($file) { } // Warning: Don't left any character outside PHP code. -?> + diff --git a/admin/WebConsole/dirphp.php b/admin/WebConsole/dirphp.php index 26e3f8c4..7d706544 100644 --- a/admin/WebConsole/dirphp.php +++ b/admin/WebConsole/dirphp.php @@ -6,8 +6,8 @@ function listar_directorios_ruta($ruta){ if ($dh = opendir($ruta)) { while (($file = readdir($dh)) !== false) { if($file !=".svn" && $file!="." && $file!=".."){ - //esta lnea la utilizaramos si queremos listar todo lo que hay en el directorio - //mostrara tanto archivos como directorios + //esta línea la utilizaríamos si queremos listar todo lo que hay en el directorio + //mostraría tanto archivos como directorios //echo "<br>Nombre de archivo: $file : Es un: " . filetype($ruta . $file); if (is_dir($ruta . $file) && $file!="." && $file!=".."){ //solo si el archivo es un directorio, distinto que "." y ".." @@ -53,4 +53,4 @@ function listar_directorios_ruta($ruta){ fwrite($fp, $buffer,strlen($buffer)); fclose($fp); } -?> + diff --git a/admin/WebConsole/estilos.css b/admin/WebConsole/estilos.css index d80d00fe..c53747c2 100644 --- a/admin/WebConsole/estilos.css +++ b/admin/WebConsole/estilos.css @@ -244,7 +244,7 @@ BACKGROUND-COLOR: #EEEECC; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, sans-serif; - FONT-SIZE: 11; + FONT-SIZE: 11px; } A.tabla_listados_sin:visited{ COLOR: #000000; @@ -438,3 +438,13 @@ A.tabla_listados_sin:link{ color: #6b6363; font-weight: bold; } +/* consejo del día */ +.consejo { + margin: 0 auto; + text-align: justify; + padding: 0 2em 0 2em; + max-width: 50em; +} +.consejo > div { + text-align: center; +} diff --git a/admin/WebConsole/gestores/gestor_accionmenu.php b/admin/WebConsole/gestores/gestor_accionmenu.php index c205c795..abeabef9 100644 --- a/admin/WebConsole/gestores/gestor_accionmenu.php +++ b/admin/WebConsole/gestores/gestor_accionmenu.php @@ -142,4 +142,4 @@ function Gestiona() } return(true); } -?> + diff --git a/admin/WebConsole/gestores/gestor_administradores_centros.php b/admin/WebConsole/gestores/gestor_administradores_centros.php index b6588752..0a33a645 100644 --- a/admin/WebConsole/gestores/gestor_administradores_centros.php +++ b/admin/WebConsole/gestores/gestor_administradores_centros.php @@ -74,4 +74,4 @@ function Gestiona(){ } return($resul); } -?> + diff --git a/admin/WebConsole/gestores/gestor_administradores_usuarios.php b/admin/WebConsole/gestores/gestor_administradores_usuarios.php index 14de0c41..b62e8e44 100644 --- a/admin/WebConsole/gestores/gestor_administradores_usuarios.php +++ b/admin/WebConsole/gestores/gestor_administradores_usuarios.php @@ -77,4 +77,4 @@ function Gestiona(){ } return($resul); } -?> + diff --git a/admin/WebConsole/gestores/gestor_colasacciones.php b/admin/WebConsole/gestores/gestor_colasacciones.php index dcb7a3a6..a8212f33 100644 --- a/admin/WebConsole/gestores/gestor_colasacciones.php +++ b/admin/WebConsole/gestores/gestor_colasacciones.php @@ -175,4 +175,4 @@ function enviaComandoActualizar($aplicacion) if($trama_notificacion==1) return(true); // Devuelve respuesta return(false); // Error de actualización } -?> + diff --git a/admin/WebConsole/gestores/gestor_componentehardwares.php b/admin/WebConsole/gestores/gestor_componentehardwares.php index 00fec28c..9a759b0b 100644 --- a/admin/WebConsole/gestores/gestor_componentehardwares.php +++ b/admin/WebConsole/gestores/gestor_componentehardwares.php @@ -166,4 +166,4 @@ function SubarbolXML_ComponenteHardwares($cmd,$idhardware,$descripcion,$idtipoha $cadenaXML.='</COMPONENTEHARDWARES>'; return($cadenaXML); } -?> + diff --git a/admin/WebConsole/gestores/gestor_componentesoftwares.php b/admin/WebConsole/gestores/gestor_componentesoftwares.php index 03483715..f437934b 100644 --- a/admin/WebConsole/gestores/gestor_componentesoftwares.php +++ b/admin/WebConsole/gestores/gestor_componentesoftwares.php @@ -170,4 +170,4 @@ function SubarbolXML_Componentesoftwares($cmd,$idsoftware,$descripcion,$idtiposo $cadenaXML.='</COMPONENTESOFTWARES>'; return($cadenaXML); } -?> + diff --git a/admin/WebConsole/gestores/gestor_ejecutaracciones.php b/admin/WebConsole/gestores/gestor_ejecutaracciones.php index 40672678..8e27d1be 100644 --- a/admin/WebConsole/gestores/gestor_ejecutaracciones.php +++ b/admin/WebConsole/gestores/gestor_ejecutaracciones.php @@ -306,5 +306,5 @@ function enviaComando($parametros,$sesion) } return(true); } -?> + diff --git a/admin/WebConsole/gestores/gestor_entidades.php b/admin/WebConsole/gestores/gestor_entidades.php index d37f41e0..7c89d30b 100644 --- a/admin/WebConsole/gestores/gestor_entidades.php +++ b/admin/WebConsole/gestores/gestor_entidades.php @@ -164,4 +164,4 @@ function SubarbolXML_entidades($identidad,$nombreentidad){ $cadenaXML.='></ENTIDAD>'; return($cadenaXML); } -?> + diff --git a/admin/WebConsole/gestores/gestor_imagenes.php b/admin/WebConsole/gestores/gestor_imagenes.php index a0706725..a412f20b 100644 --- a/admin/WebConsole/gestores/gestor_imagenes.php +++ b/admin/WebConsole/gestores/gestor_imagenes.php @@ -207,4 +207,4 @@ function SubarbolXML_imagenes($idimagen,$descripcion) $cadenaXML.='</IMAGEN>'; return($cadenaXML); } -?> + diff --git a/admin/WebConsole/gestores/gestor_inclusionacciones.php b/admin/WebConsole/gestores/gestor_inclusionacciones.php index f9337942..e20dad5d 100644 --- a/admin/WebConsole/gestores/gestor_inclusionacciones.php +++ b/admin/WebConsole/gestores/gestor_inclusionacciones.php @@ -172,4 +172,4 @@ function Gestiona() } return(true); } -?> + diff --git a/admin/WebConsole/gestores/gestor_menus.php b/admin/WebConsole/gestores/gestor_menus.php index e024100c..7545d079 100644 --- a/admin/WebConsole/gestores/gestor_menus.php +++ b/admin/WebConsole/gestores/gestor_menus.php @@ -184,7 +184,7 @@ function Gestiona(){ ________________________________________________________________________________________________________*/ function SubarbolXML_menus($idmenu,$descripcion){ global $LITAMBITO_MENUS; - $cadenaXML.='<MENU'; + $cadenaXML='<MENU'; // Atributos $cadenaXML.=' imagenodo="../images/iconos/menu.gif"'; $cadenaXML.=' infonodo="' .$descripcion.'"'; @@ -194,4 +194,4 @@ function SubarbolXML_menus($idmenu,$descripcion){ $cadenaXML.='</MENU>'; return($cadenaXML); } -?> + diff --git a/admin/WebConsole/gestores/gestor_ordenadores.php b/admin/WebConsole/gestores/gestor_ordenadores.php index 2b517abd..e0123d6d 100644 --- a/admin/WebConsole/gestores/gestor_ordenadores.php +++ b/admin/WebConsole/gestores/gestor_ordenadores.php @@ -147,13 +147,19 @@ if($opcion!=$op_movida){ break; } if ($resul){ - if ($opcion==$op_alta ) { + if ($opcion == $op_alta) { if ( $datosduplicados != '') { echo $literal."(0,'".$TbMsg["DUPLICADO"].$datosduplicados." ',".$idordenador.",o.innerHTML);".chr(13); - } else { + } else { echo $literal."(1,'".$cmd->DescripUltimoError()." ',".$idordenador.",o.innerHTML);".chr(13); } - } + } elseif ($opcion == $op_modificacion) { + if ( $datosduplicados != '') { + echo $literal."(0,'".$TbMsg["DUPLICADO"].$datosduplicados." ','".$nombreordenador."');".chr(13); + } else { + echo $literal."(1,'".$cmd->DescripUltimoError()." ','".$nombreordenador."');".chr(13); + } + } else echo $literal."(1,'".$cmd->DescripUltimoError()." ','".$nombreordenador."');".chr(13); } @@ -253,38 +259,18 @@ function Gestiona(){ switch($opcion){ case $op_alta : - // Comprueba que no existan duplicados - $ipduplicada='no'; - $nombreduplicado='no'; - $macduplicada='no'; - $cmd->texto="SELECT nombreordenador,ip,mac FROM ordenadores - WHERE nombreordenador=@nombreordenador OR ip=@ip OR mac=@mac"; - $rs=new Recordset; - $rs->Comando=&$cmd; - if (!$rs->Abrir()) return(0); // Error al abrir recordset - $rs->Primero(); - while (!$rs->EOF){ - if ( $nombreordenador == $rs->campos["nombreordenador"]) $datosduplicados ="nombre: $nombreordenador,"; - if ( $ip == $rs->campos["ip"]) $datosduplicados .=" ip: $ip,"; - if ( $mac == $rs->campos["mac"]) $datosduplicados .=" mac: $mac,"; - $rs->Siguiente(); - } - $rs->Cerrar(); - // quitamos última coma - $datosduplicados = trim($datosduplicados, ','); - - // Si no hay datos duplicados insertamos el ordenador; - if ( $datosduplicados == "" ) { - //Insertar fotoord con Values @fotoordenador - $cmd->texto="INSERT INTO ordenadores(nombreordenador,numserie,ip,mac,idperfilhard,idrepositorio,oglivedir, - idmenu,idproautoexec,idaula,grupoid,netiface,netdriver,fotoord,validacion,paginalogin,paginavalidacion) VALUES (@nombreordenador,@numserie,@ip,@mac,@idperfilhard,@idrepositorio,@oglivedir, - @idmenu,@idprocedimiento,@idaula,@grupoid,@netiface,@netdriver,@fotoordenador,@validacion,@paginalogin,@paginavalidacion)"; - } - $resul=$cmd->Ejecutar(); + $duplicates = checkDuplicates($cmd, $datosduplicados, $idordenador, $nombreordenador, $ip, $mac); + // Si no hay datos duplicados insertamos el ordenador; + if (!$duplicates) { + $cmd->texto="INSERT INTO ordenadores(nombreordenador,numserie,ip,mac,idperfilhard,idrepositorio,oglivedir, + idmenu,idproautoexec,idaula,grupoid,netiface,netdriver,fotoord,validacion,paginalogin,paginavalidacion) VALUES (@nombreordenador,@numserie,@ip,@mac,@idperfilhard,@idrepositorio,@oglivedir, + @idmenu,@idprocedimiento,@idaula,@grupoid,@netiface,@netdriver,@fotoordenador,@validacion,@paginalogin,@paginavalidacion)"; + } + $resul=$cmd->Ejecutar(); if ($resul){ // Crea una tabla nodo para devolver a la página que llamó ésta $idordenador=$cmd->Autonumerico(); // Crear fichero TFTP/PXE por defecto para el nuevo ordenador. - createBootMode ($cmd, "", $idordenador, $idioma); + createBootMode ($cmd, "", $nombreordenador, $idioma); // Insertar datos en el árbol de configuración. $arbolXML=SubarbolXML_ordenadores($idordenador,$nombreordenador); $baseurlimg="../images/signos"; // Url de las imagenes de signo @@ -293,13 +279,16 @@ function Gestiona(){ $tablanodo=$arbol->CreaArbolVistaXML(); } break; - case $op_modificacion: - $cmd->texto="UPDATE ordenadores SET nombreordenador=@nombreordenador,numserie=@numserie,ip=@ip,mac=@mac,idperfilhard=@idperfilhard, - idrepositorio=@idrepositorio,oglivedir=@oglivedir,idmenu=@idmenu,idproautoexec=@idprocedimiento,netiface=@netiface,netdriver=@netdriver,fotoord=@fotoordenador,validacion=@validacion,paginalogin=@paginalogin,paginavalidacion=@paginavalidacion - WHERE idordenador=@idordenador"; + case $op_modificacion: + $duplicates = checkDuplicates($cmd, $datosduplicados, $idordenador, $nombreordenador, $ip, $mac); + if (!$duplicates) { + $cmd->texto="UPDATE ordenadores SET nombreordenador=@nombreordenador,numserie=@numserie,ip=@ip,mac=@mac,idperfilhard=@idperfilhard, + idrepositorio=@idrepositorio,oglivedir=@oglivedir,idmenu=@idmenu,idproautoexec=@idprocedimiento,netiface=@netiface,netdriver=@netdriver,fotoord=@fotoordenador,validacion=@validacion,paginalogin=@paginalogin,paginavalidacion=@paginavalidacion + WHERE idordenador=@idordenador"; + } $resul=$cmd->Ejecutar(); // Actualizar fichero TFTP/PXE a partir de la plantilla asociada. - createBootMode ($cmd, $arranque, $idordenador, $idioma); + createBootMode ($cmd, $arranque, $nombreordenador, $idioma); break; case $op_eliminacion : $resul=EliminaOrdenadores($cmd,$idordenador,"idordenador");// Eliminación en cascada @@ -310,13 +299,38 @@ function Gestiona(){ $cmd->texto="UPDATE ordenadores SET idaula=@idaula, grupoid=@grupoid WHERE idordenador=@idordenador"; $resul=$cmd->Ejecutar(); // Actualizar fichero TFTP/PXE a partir de la plantilla asociada. - createBootMode ($cmd, $arranque, $idordenador, $idioma); + createBootMode ($cmd, $arranque, $nombreordenador, $idioma); break; default: break; } return($resul); } + +function checkDuplicates(&$cmd, &$duplicate_data, $computer_id, $computer_name, $ip, $mac){ + $cmd->texto="SELECT idordenador,nombreordenador,ip,mac FROM ordenadores + WHERE nombreordenador=@nombreordenador OR ip=@ip OR mac=@mac"; + $rs = new Recordset; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) return(0); + $rs->Primero(); + while (!$rs->EOF) { + if ($computer_id != $rs->campos["idordenador"]) { + if ( $computer_name == $rs->campos["nombreordenador"]) + $duplicate_data ="nombre: $computer_name,"; + if ( $ip == $rs->campos["ip"]) + $duplicate_data .=" ip: $ip,"; + if (strtoupper($mac) == strtoupper($rs->campos["mac"])) + $duplicate_data .=" mac: $mac,"; + } + $rs->Siguiente(); + } + $rs->Cerrar(); + $duplicate_data = trim($duplicate_data, ','); + $ret = !empty($duplicate_data); + return($ret); +} + /*________________________________________________________________________________________________________ Crea un arbol XML para el nuevo nodo insertado ________________________________________________________________________________________________________*/ diff --git a/admin/WebConsole/gestores/gestor_perfilcomponente_hard.php b/admin/WebConsole/gestores/gestor_perfilcomponente_hard.php index 6682b748..a5822567 100644 --- a/admin/WebConsole/gestores/gestor_perfilcomponente_hard.php +++ b/admin/WebConsole/gestores/gestor_perfilcomponente_hard.php @@ -74,4 +74,4 @@ function Gestiona(){ } return($resul); } -?> + diff --git a/admin/WebConsole/gestores/gestor_perfilcomponente_soft.php b/admin/WebConsole/gestores/gestor_perfilcomponente_soft.php index baef269a..90c78314 100644 --- a/admin/WebConsole/gestores/gestor_perfilcomponente_soft.php +++ b/admin/WebConsole/gestores/gestor_perfilcomponente_soft.php @@ -74,4 +74,4 @@ function Gestiona(){ } return($resul); } -?> + diff --git a/admin/WebConsole/gestores/gestor_perfilhardwares.php b/admin/WebConsole/gestores/gestor_perfilhardwares.php index 43f50a28..6a238854 100644 --- a/admin/WebConsole/gestores/gestor_perfilhardwares.php +++ b/admin/WebConsole/gestores/gestor_perfilhardwares.php @@ -166,5 +166,5 @@ function SubarbolXML_perfileshard($idperfilhard,$descripcion){ $cadenaXML.='</PERFILESHARDWARES>'; return($cadenaXML); } -?> + diff --git a/admin/WebConsole/gestores/gestor_perfilsoftwares.php b/admin/WebConsole/gestores/gestor_perfilsoftwares.php index b50b4252..2185d2d7 100644 --- a/admin/WebConsole/gestores/gestor_perfilsoftwares.php +++ b/admin/WebConsole/gestores/gestor_perfilsoftwares.php @@ -156,4 +156,4 @@ function SubarbolXML_perfilessoft($idperfilsoft,$descripcion){ $cadenaXML.='</PERFILESSOFTWARES>'; return($cadenaXML); } -?> + diff --git a/admin/WebConsole/gestores/gestor_procedimientos.php b/admin/WebConsole/gestores/gestor_procedimientos.php index 449c5120..39f99514 100644 --- a/admin/WebConsole/gestores/gestor_procedimientos.php +++ b/admin/WebConsole/gestores/gestor_procedimientos.php @@ -156,4 +156,4 @@ function SubarbolXML_procedimientos($idprocedimiento,$descripcion){ $cadenaXML.='</PROCEDIMIENTO>'; return($cadenaXML); } -?> + diff --git a/admin/WebConsole/gestores/gestor_procedimientoscomandos.php b/admin/WebConsole/gestores/gestor_procedimientoscomandos.php index f89f6f2e..dd5af444 100644 --- a/admin/WebConsole/gestores/gestor_procedimientoscomandos.php +++ b/admin/WebConsole/gestores/gestor_procedimientoscomandos.php @@ -68,4 +68,4 @@ function Gestiona(){ } return($resul); } -?> + diff --git a/admin/WebConsole/gestores/gestor_programaciones.php b/admin/WebConsole/gestores/gestor_programaciones.php index bd9e0ba7..599427e5 100644 --- a/admin/WebConsole/gestores/gestor_programaciones.php +++ b/admin/WebConsole/gestores/gestor_programaciones.php @@ -205,6 +205,6 @@ function Gestiona() } return($resul); } -?> + diff --git a/admin/WebConsole/gestores/gestor_pxe.php b/admin/WebConsole/gestores/gestor_pxe.php index 331b6902..ee3bb751 100644 --- a/admin/WebConsole/gestores/gestor_pxe.php +++ b/admin/WebConsole/gestores/gestor_pxe.php @@ -214,4 +214,4 @@ function cleanString ($cadena) { } -?> + diff --git a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php index 4992e1e2..fc21bbdc 100644 --- a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php +++ b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php @@ -1,49 +1,30 @@ <?php +// Version 1.1.1 - Se utiliza createBootMode para crear los archivos PXE (ticket #802 #888) +// Autor: Irina Gomez - ETSII Universidad de Sevilla +// Fecha: 2019/02/12 + include_once("../includes/ctrlacc.php"); -include_once("../clases/AdoPhp.php"); -include_once("../clases/XmlPhp.php"); -include_once("../clases/MenuContextual.php"); -include_once("../clases/SockHidra.php"); -include_once("../includes/constantes.php"); -include_once("../includes/comunes.php"); include_once("../includes/CreaComando.php"); include_once("../includes/tftputils.php"); -include_once("../idiomas/php/".$idioma."/aulas_".$idioma.".php"); - -$cmd=CreaComando($cadenaconexion); -if (!$cmd) - Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D. -//________________________________________________________________________________________________________ +// Recogemos los parametros +$litambito=(isset($_REQUEST["litambito"])) ? $_REQUEST["litambito"] : ""; +$idambito=(isset($_REQUEST["idambito"])) ? $_REQUEST["idambito"] : ""; +$nombreambito=(isset($_REQUEST["nombreambito"])) ? $_REQUEST["nombreambito"] : ""; +$lista=(isset($_POST['listOfItems'])) ? explode(";",$_POST['listOfItems']) : ""; -echo "<html>"; -echo "<head>"; -echo "<meta http-equiv='Refresh' content='1;URL=../principal/boot.php?idambito=". $_GET['idaula'] ."&nombreambito=" . $_GET['nombreambito'] . "&litambito=" . $_GET['litambito'] . "'>"; -echo "<title> gestion de equipos </title>"; -echo "<base target='principal'>"; -echo "</head>"; -echo "<body>"; +// Crea objeto comando +$cmd=CreaComando($cadenaconexion); -$lista = explode(";",$_POST['listOfItems']); foreach ($lista as $sublista) { - if (! empty ($sublista)) { - $elementos = explode("|",$sublista); - $hostname=$elementos[1]; - $optboot=$elementos[0]; - createBootMode ($cmd, $optboot, $hostname, $idioma); - } -} -echo " </body>"; -echo " </html> "; - + if (! empty ($sublista)) { + $elementos = explode("|",$sublista); + $hostname=$elementos[1]; + $optboot=$elementos[0]; -function netmask2cidr($netmask) { - $cidr = 0; - foreach (explode('.', $netmask) as $number) { - for (;$number> 0; $number = ($number <<1) % 256) { - $cidr++; - } - } - return $cidr; + createBootMode ($cmd, $optboot, $hostname, $idioma); + } } +header("Location: ../principal/boot.php?idambito=". $idambito ."&nombreambito=" . $nombreambito . "&litambito=" . $litambito); +exit(); diff --git a/admin/WebConsole/gestores/gestor_reservas.php b/admin/WebConsole/gestores/gestor_reservas.php index b983ecee..dbcb5f85 100644 --- a/admin/WebConsole/gestores/gestor_reservas.php +++ b/admin/WebConsole/gestores/gestor_reservas.php @@ -197,4 +197,4 @@ function SubarbolXML_reservas($idreserva,$descripcion,$estado){ $cadenaXML.='</RESERVA>'; return($cadenaXML); } -?> + diff --git a/admin/WebConsole/gestores/gestor_tareas.php b/admin/WebConsole/gestores/gestor_tareas.php index b96805dd..47928c92 100644 --- a/admin/WebConsole/gestores/gestor_tareas.php +++ b/admin/WebConsole/gestores/gestor_tareas.php @@ -141,8 +141,8 @@ function Gestiona(){ global $op_eliminacion; global $op_movida; global $op_ejecucion; - global $tablanodo; + $resul=false; $cmd->CreaParametro("@idcentro",$idcentro,1); $cmd->CreaParametro("@idtarea",$idtarea,1); @@ -171,7 +171,6 @@ function Gestiona(){ ambito=@ambito,idambito=@idambito WHERE idtarea=@idtarea"; $resul=$cmd->Ejecutar(); - //echo $cmd->texto; break; case $op_eliminacion : $resul=EliminaTareas($cmd,$idtarea,"idtarea"); @@ -181,7 +180,7 @@ function Gestiona(){ $resul=$cmd->Ejecutar(); break; case $op_ejecucion : - $resul=EjecutandoTareas(); + $resul=EjecutandoTareas(); break; default: break; @@ -213,7 +212,7 @@ function EjecutandoTareas(){ global $EJECUCION_TAREA; global $PROCESOS; global $ACCION_INICIADA; - global $ACCION_SINERRORES; + global $ACCION_SINRESULTADO; global $idcentro; global $servidorhidra; global $hidraport; @@ -309,4 +308,4 @@ function EjecutandoTareas(){ } return(true); } -?> + diff --git a/admin/WebConsole/gestores/gestor_tareascomandos.php b/admin/WebConsole/gestores/gestor_tareascomandos.php index c7f88ccd..ceffb695 100644 --- a/admin/WebConsole/gestores/gestor_tareascomandos.php +++ b/admin/WebConsole/gestores/gestor_tareascomandos.php @@ -59,12 +59,14 @@ function Gestiona(){ global $EJECUCION_COMANDO; global $PROCESOS; global $ACCION_INICIADA; - global $ACCION_SINERRORES; + global $ACCION_SINERRORES; + global $ACCION_SINRESULTADO; global $servidorhidra; global $hidraport; global $idcentro; global $idtareacomando; global $orden; + $resul=true; $cmd->CreaParametro("@orden",$orden,1); @@ -90,8 +92,6 @@ function Gestiona(){ $idambito=$Datos["idambito"]; $parametros=$Datos["parametros"]; - $resul=true; - $cmd->CreaParametro("@tipoaccion",$EJECUCION_COMANDO,1); $cmd->CreaParametro("@idtipoaccion",$idtipoaccion,1); $cmd->CreaParametro("@cateaccion",$PROCESOS,1); @@ -119,4 +119,4 @@ function Gestiona(){ } return($resul); } -?> + diff --git a/admin/WebConsole/gestores/gestor_tipohardwares.php b/admin/WebConsole/gestores/gestor_tipohardwares.php index 81e1f992..439de424 100644 --- a/admin/WebConsole/gestores/gestor_tipohardwares.php +++ b/admin/WebConsole/gestores/gestor_tipohardwares.php @@ -147,4 +147,4 @@ function SubarbolXML_tipohardwares($idtipohardware,$descripcion,$urlimg){ $cadenaXML.='</TIPOHARDWARES>'; return($cadenaXML); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/aulas_eliminacion.php b/admin/WebConsole/gestores/relaciones/aulas_eliminacion.php index f42c6744..0f8ebefd 100644 --- a/admin/WebConsole/gestores/relaciones/aulas_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/aulas_eliminacion.php @@ -40,4 +40,4 @@ function EliminaAulas($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/centros_eliminacion.php b/admin/WebConsole/gestores/relaciones/centros_eliminacion.php index 10ec2a06..af75ef1f 100644 --- a/admin/WebConsole/gestores/relaciones/centros_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/centros_eliminacion.php @@ -38,4 +38,4 @@ function EliminaCentros($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/entidades_eliminacion.php b/admin/WebConsole/gestores/relaciones/entidades_eliminacion.php index 8444f0ba..706ed66d 100644 --- a/admin/WebConsole/gestores/relaciones/entidades_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/entidades_eliminacion.php @@ -38,4 +38,4 @@ function EliminaEntidad($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/gruposordenadores_eliminacion.php b/admin/WebConsole/gestores/relaciones/gruposordenadores_eliminacion.php index d28be296..1b11b2e8 100644 --- a/admin/WebConsole/gestores/relaciones/gruposordenadores_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/gruposordenadores_eliminacion.php @@ -41,4 +41,4 @@ function EliminaGruposOrdenadores($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/hardwares_eliminacion.php b/admin/WebConsole/gestores/relaciones/hardwares_eliminacion.php index a1c2a29e..bf0b7f65 100644 --- a/admin/WebConsole/gestores/relaciones/hardwares_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/hardwares_eliminacion.php @@ -39,4 +39,4 @@ function EliminaHardwares($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/imagenes_eliminacion.php b/admin/WebConsole/gestores/relaciones/imagenes_eliminacion.php index 7b17500d..c0fea566 100644 --- a/admin/WebConsole/gestores/relaciones/imagenes_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/imagenes_eliminacion.php @@ -40,4 +40,4 @@ function EliminaImagenes($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/incrementales_eliminacion.php b/admin/WebConsole/gestores/relaciones/incrementales_eliminacion.php index b2c33cd0..6aa25fa1 100644 --- a/admin/WebConsole/gestores/relaciones/incrementales_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/incrementales_eliminacion.php @@ -43,4 +43,4 @@ function EliminaSoftincremental($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/menus_eliminacion.php b/admin/WebConsole/gestores/relaciones/menus_eliminacion.php index 4ffcfe06..0d369da2 100644 --- a/admin/WebConsole/gestores/relaciones/menus_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/menus_eliminacion.php @@ -40,4 +40,4 @@ function EliminaMenus($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/ordenadores_eliminacion.php b/admin/WebConsole/gestores/relaciones/ordenadores_eliminacion.php index dd008dee..ed540da4 100644 --- a/admin/WebConsole/gestores/relaciones/ordenadores_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/ordenadores_eliminacion.php @@ -48,5 +48,5 @@ function EliminaOrdenadores($cmd,$identificador,$nombreid,$swid=1) $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/perfileshard_eliminacion.php b/admin/WebConsole/gestores/relaciones/perfileshard_eliminacion.php index f3c251c0..6d0391b4 100644 --- a/admin/WebConsole/gestores/relaciones/perfileshard_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/perfileshard_eliminacion.php @@ -44,4 +44,4 @@ function EliminaPerfileshard($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/perfilessoft_eliminacion.php b/admin/WebConsole/gestores/relaciones/perfilessoft_eliminacion.php index ef7c4fc4..4f5d73de 100644 --- a/admin/WebConsole/gestores/relaciones/perfilessoft_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/perfilessoft_eliminacion.php @@ -43,4 +43,4 @@ function EliminaPerfilessoft($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/procedimientos_eliminacion.php b/admin/WebConsole/gestores/relaciones/procedimientos_eliminacion.php index 8351ade0..292f397d 100644 --- a/admin/WebConsole/gestores/relaciones/procedimientos_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/procedimientos_eliminacion.php @@ -48,4 +48,4 @@ function EliminaProcedimientos($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/repositorios_eliminacion.php b/admin/WebConsole/gestores/relaciones/repositorios_eliminacion.php index 005f8a96..539b2776 100644 --- a/admin/WebConsole/gestores/relaciones/repositorios_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/repositorios_eliminacion.php @@ -40,4 +40,4 @@ function Eliminarepositorios($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/reservas_eliminacion.php b/admin/WebConsole/gestores/relaciones/reservas_eliminacion.php index 48ff5a76..3a33701a 100644 --- a/admin/WebConsole/gestores/relaciones/reservas_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/reservas_eliminacion.php @@ -40,4 +40,4 @@ function EliminaReservas($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/softwares_eliminacion.php b/admin/WebConsole/gestores/relaciones/softwares_eliminacion.php index cb20db38..883403f1 100644 --- a/admin/WebConsole/gestores/relaciones/softwares_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/softwares_eliminacion.php @@ -39,4 +39,4 @@ function EliminaSoftwares($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/tareas_eliminacion.php b/admin/WebConsole/gestores/relaciones/tareas_eliminacion.php index a0401116..06564e63 100644 --- a/admin/WebConsole/gestores/relaciones/tareas_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/tareas_eliminacion.php @@ -49,4 +49,4 @@ function EliminaTareas($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/trabajos_eliminacion.php b/admin/WebConsole/gestores/relaciones/trabajos_eliminacion.php index d88452c7..5a5da48b 100644 --- a/admin/WebConsole/gestores/relaciones/trabajos_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/trabajos_eliminacion.php @@ -48,4 +48,4 @@ function EliminaTrabajos($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/gestores/relaciones/usuarios_eliminacion.php b/admin/WebConsole/gestores/relaciones/usuarios_eliminacion.php index 39160026..d3f1ea2b 100644 --- a/admin/WebConsole/gestores/relaciones/usuarios_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/usuarios_eliminacion.php @@ -41,4 +41,4 @@ function EliminaUsuarios($cmd,$identificador,$nombreid,$swid=1){ $resul=$cmd->Ejecutar(); return($resul); } -?> + diff --git a/admin/WebConsole/idiomas/javascripts/cat/asistentes_cat.js b/admin/WebConsole/idiomas/javascripts/cat/asistentes_cat.js index 06ab60db..44d3b073 100644 --- a/admin/WebConsole/idiomas/javascripts/cat/asistentes_cat.js +++ b/admin/WebConsole/idiomas/javascripts/cat/asistentes_cat.js @@ -8,3 +8,5 @@ TbMsg=new Array; TbMsg["NOCACHESIZE"] = "¡El espacio libre en disco es menor que la cache!"; TbMsg["NODISKSIZE"] = "¡El espacio libre en disco no puede ser menor que 0!"; TbMsg["NOSUPPORT"] = "Este navegador no soporta la operación."; +// Asistente DeployImage +TbMsg["EFIPART"] = "No es conveniente restaurar particiones EFI. \nEn la postconfiguración de la partición de sistema OpenGnsys copia los cargadores de arranque a esta partición. Si existen otros sistemas restaurados dejarán de funcionar."; diff --git a/admin/WebConsole/idiomas/javascripts/cat/comandos/configurar_cat.js b/admin/WebConsole/idiomas/javascripts/cat/comandos/configurar_cat.js index 0a049236..8e97dcef 100644 --- a/admin/WebConsole/idiomas/javascripts/cat/comandos/configurar_cat.js +++ b/admin/WebConsole/idiomas/javascripts/cat/comandos/configurar_cat.js @@ -1,7 +1,7 @@ //________________________________________________________________________________________________________ // -// Fichero de idiomas javascripts: configurar_esp.js -// Idioma: Español +// Fichero de idiomas javascripts: configurar_cat.js +// Idioma: Catalán //________________________________________________________________________________________________________ TbMsg=new Array; TbMsg[0]="ATENCIÓN: Partición duplicada, ya existe una partición con ese número"; @@ -12,5 +12,6 @@ TbMsg[4]="ATENCIÓN: Se va a eliminar esta partición ¿ Está seguro ?"; TbMsg[5]="Debe especificar el tipo de sistema de fichero si desea formatear la partición"; TbMsg[6]="La CACHE sólo puede definirse en la partición 4"; TbMsg[7]="El número máximo de particiones es 4"; +TbMsg[8]="El tamaño de la partición no puede ser negativo"; TbMsg["EXTSIZE"]="El tamaño de las particiones lógicas es mayor que el de la partición extendida"; TbMsg["HDSIZE"]="El tamaño de las particiones es mayor el tamaño del disco"; diff --git a/admin/WebConsole/idiomas/javascripts/eng/asistentes_eng.js b/admin/WebConsole/idiomas/javascripts/eng/asistentes_eng.js index 01753ce3..39070e88 100644 --- a/admin/WebConsole/idiomas/javascripts/eng/asistentes_eng.js +++ b/admin/WebConsole/idiomas/javascripts/eng/asistentes_eng.js @@ -8,3 +8,5 @@ TbMsg=new Array; TbMsg["NOCACHESIZE"] = "Free disk space is smaller than cache!"; TbMsg["NODISKSIZE"] = "Free disk space cannot be lower than zero!"; TbMsg["NOSUPPORT"] = "This browser does not support this operation."; +// Asistente DeployImage +TbMsg["EFIPART"] = "Restore EFI partitions is not convenient. In postconfiguration of the system partition OpenGnsys copy bootloader in this partition. If there are other restored systems will not work."; diff --git a/admin/WebConsole/idiomas/javascripts/eng/comandos/configurar_eng.js b/admin/WebConsole/idiomas/javascripts/eng/comandos/configurar_eng.js index 38eef74f..eeaea040 100644 --- a/admin/WebConsole/idiomas/javascripts/eng/comandos/configurar_eng.js +++ b/admin/WebConsole/idiomas/javascripts/eng/comandos/configurar_eng.js @@ -12,5 +12,6 @@ TbMsg[4]="WARNING: This partition will be deleted. Are you sure?"; TbMsg[5]="If you want to format this partition, you must specify file-system type"; TbMsg[6]="CACHE can only be at partition 4"; TbMsg[7]="Maximum number of partitions is 4"; +TbMsg[8]="Partition size cannot be negative"; TbMsg["EXTSIZE"]="Logic partitions size is greater than extended partition size"; TbMsg["HDSIZE"]="Partitions size is greater than disk size"; diff --git a/admin/WebConsole/idiomas/javascripts/eng/tareascomandos_eng.js b/admin/WebConsole/idiomas/javascripts/eng/tareascomandos_eng.js index 7b9c146a..5e075b18 100644 --- a/admin/WebConsole/idiomas/javascripts/eng/tareascomandos_eng.js +++ b/admin/WebConsole/idiomas/javascripts/eng/tareascomandos_eng.js @@ -1,9 +1,9 @@ //____________________________________________________________________________ // // Fichero de idiomas javascript: tareascomandos_eng.js -// Idioma: Ingls +// Idioma: Inglés //____________________________________________________________________________ -TbMsg=new Array; +TbMsg=[]; TbMsg[0]="WARNING: This command will be excluded from this task. Are you sure?"; TbMsg[1]="WARNING: You must enter a sequence number"; TbMsg[2]="This command has been excluded successfully from this task"; diff --git a/admin/WebConsole/idiomas/javascripts/esp/asistentes_esp.js b/admin/WebConsole/idiomas/javascripts/esp/asistentes_esp.js index 5e8948ac..981c3246 100644 --- a/admin/WebConsole/idiomas/javascripts/esp/asistentes_esp.js +++ b/admin/WebConsole/idiomas/javascripts/esp/asistentes_esp.js @@ -8,3 +8,5 @@ TbMsg=new Array; TbMsg["NOCACHESIZE"] = "¡El espacio libre en disco es menor que la cache!"; TbMsg["NODISKSIZE"] = "¡El espacio libre en disco no puede ser menor que 0!"; TbMsg["NOSUPPORT"] = "Este navegador no soporta la operación."; +// Asistente DeployImage +TbMsg["EFIPART"] = "No es conveniente restaurar particiones EFI. \nEn la postconfiguración de la partición de sistema OpenGnsys copia los cargadores de arranque a esta partición. Si existen otros sistemas restaurados dejarán de funcionar."; diff --git a/admin/WebConsole/idiomas/javascripts/esp/comandos/configurar_esp.js b/admin/WebConsole/idiomas/javascripts/esp/comandos/configurar_esp.js index df708800..8019e20b 100644 --- a/admin/WebConsole/idiomas/javascripts/esp/comandos/configurar_esp.js +++ b/admin/WebConsole/idiomas/javascripts/esp/comandos/configurar_esp.js @@ -12,5 +12,6 @@ TbMsg[4]="ATENCIÓN: Se va a eliminar esta partición ¿ Está seguro ?"; TbMsg[5]="Debe especificar el tipo de sistema de ficheros si desea formatear la partición"; TbMsg[6]="La CACHE sólo puede definirse en la partición 4"; TbMsg[7]="El número máximo de particiones es 4"; +TbMsg[8]="El tamaño de la partición no puede ser negativo"; TbMsg["EXTSIZE"]="El tamaño de las particiones lógicas es mayor que el de la partición extendida"; TbMsg["HDSIZE"]="El tamaño de las particiones es mayor el tamaño del disco"; diff --git a/admin/WebConsole/idiomas/php/cat/acciones_cat.php b/admin/WebConsole/idiomas/php/cat/acciones_cat.php index 07ce21dc..2c28449c 100644 --- a/admin/WebConsole/idiomas/php/cat/acciones_cat.php +++ b/admin/WebConsole/idiomas/php/cat/acciones_cat.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: accions_cat.php -// Idioma: Catal +// Idioma: Català //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='"Nou grup de procediments"'; @@ -10,19 +10,19 @@ $TbMsg[2]='"Col.locar procediment"'; $TbMsg[3]='"Renombrar"'; $TbMsg[4]='"Eliminar grup de procediments"'; - $TbMsg[5]='"Gesti d\'ordres"'; - $TbMsg[6]='"Informaci Procediment"'; + $TbMsg[5]='"Gestió d\'ordres"'; + $TbMsg[6]='"Informació Procediment"'; $TbMsg[7]='"Moure procediment"'; $TbMsg[8]='"Propietats"'; $TbMsg[9]='"Eliminar procediment"'; - $TbMsg[10]='"Gesti de Mens"'; + $TbMsg[10]='"Gestió de Menús"'; $TbMsg[11]='"Nou grup de tasques"'; $TbMsg[12]='"Definir nova tasca"'; $TbMsg[13]='"Col.locar tasca"'; $TbMsg[14]='"Eliminar grup de tasca"'; $TbMsg[15]='"Executar tasca"'; $TbMsg[16]='"Programacions"'; - $TbMsg[17]='"Informaci Tasca"'; + $TbMsg[17]='"Informació Tasca"'; $TbMsg[18]='"Moure tasca"'; $TbMsg[19]='"Eliminar tasca"'; $TbMsg[20]='"Nou grup de treballs"'; @@ -30,12 +30,11 @@ $TbMsg[22]='"Col.locar treball"'; $TbMsg[23]='"Eliminar grup de treballs"'; $TbMsg[24]='"Executar treball"'; - $TbMsg[25]='"Gesti de tasques"'; - $TbMsg[26]='"Informaci Treball"'; + $TbMsg[25]='"Gestió de tasques"'; + $TbMsg[26]='"Informació Treball"'; $TbMsg[27]='"Moure treball"'; $TbMsg[28]='"Eliminar treball"'; $TbMsg[29]='Procediments'; $TbMsg[30]='Ordres'; $TbMsg[31]='Tasques'; $TbMsg[32]='Treballs'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/accionmenu_cat.php b/admin/WebConsole/idiomas/php/cat/accionmenu_cat.php index b5123a0c..9fe1c2b9 100644 --- a/admin/WebConsole/idiomas/php/cat/accionmenu_cat.php +++ b/admin/WebConsole/idiomas/php/cat/accionmenu_cat.php @@ -2,22 +2,21 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: accionmenu_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='Items'; - $TbMsg[1]='Gesti Items Men'; + $TbMsg[1]='Gesti� Items Men�'; $TbMsg[2]='Procediment'; $TbMsg[3]='Tasca'; $TbMsg[4]='Treballs'; - $TbMsg[5]='Pblic'; + $TbMsg[5]='P�blic'; $TbMsg[6]='Privat'; - $TbMsg[7]='Items pblics '; + $TbMsg[7]='Items p�blics '; $TbMsg[8]='Items privats '; - $TbMsg[9]='Nom del Men'; + $TbMsg[9]='Nom del Men�'; $TbMsg[10]='Tipus item'; $TbMsg[11]='Imatge del item'; $TbMsg[12]='Literal item'; $TbMsg[13]='Ord'; - $TbMsg[14]='(*)Per a incloure alguna acci en aquest men ha de fer click sobre la casella de verificaci corresponent. Per a actualitzar faci click sobre la imatge.'; -?>
\ No newline at end of file + $TbMsg[14]='(*)Per a incloure alguna acci� en aquest men� ha de fer click sobre la casella de verificaci� corresponent. Per a actualitzar faci click sobre la imatge.'; diff --git a/admin/WebConsole/idiomas/php/cat/acercade_cat.php b/admin/WebConsole/idiomas/php/cat/acercade_cat.php index 7c731a31..50ffe6b0 100644 --- a/admin/WebConsole/idiomas/php/cat/acercade_cat.php +++ b/admin/WebConsole/idiomas/php/cat/acercade_cat.php @@ -17,5 +17,5 @@ $TbMsg["CHANGE"]='Canvis en: '; $TbMsg["MANUAL"]='Manual OpenGnsys '; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/actualizar_cat.php b/admin/WebConsole/idiomas/php/cat/actualizar_cat.php index 40365eb0..941840c7 100644 --- a/admin/WebConsole/idiomas/php/cat/actualizar_cat.php +++ b/admin/WebConsole/idiomas/php/cat/actualizar_cat.php @@ -2,9 +2,8 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: actualitzar_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='Aquest mbit s\'ha actualitzat correctament'; - $TbMsg[1]='ATENCI: Hi ha hagut un problema al actualitzar l\'mbit'; -?>
\ No newline at end of file + $TbMsg[0]='Aquest �mbit s\'ha actualitzat correctament'; + $TbMsg[1]='ATENCI�: Hi ha hagut un problema al actualitzar l\'�mbit'; diff --git a/admin/WebConsole/idiomas/php/cat/administracion_cat.php b/admin/WebConsole/idiomas/php/cat/administracion_cat.php index 4889107d..9717510c 100644 --- a/admin/WebConsole/idiomas/php/cat/administracion_cat.php +++ b/admin/WebConsole/idiomas/php/cat/administracion_cat.php @@ -1,11 +1,11 @@ <?php //________________________________________________________________________________________________________ // -// Fitxer d'idiomes php: administraci_cat.php -// Idioma: Catal +// Fitxer d'idiomes php: administraci�_cat.php +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='"Administraci"'; + $TbMsg[0]='"Administraci�"'; $TbMsg[1]='"Nou grup d\'Entitats"'; $TbMsg[2]='"Nova Entitat"'; $TbMsg[3]='"Nou Superadministrador"'; @@ -16,4 +16,3 @@ $TbMsg[8]='"Nova unitat organitzativa"'; $TbMsg[9]='"Nou Administrador"'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/administradores_centros_cat.php b/admin/WebConsole/idiomas/php/cat/administradores_centros_cat.php index 40ff7341..910a51e4 100644 --- a/admin/WebConsole/idiomas/php/cat/administradores_centros_cat.php +++ b/admin/WebConsole/idiomas/php/cat/administradores_centros_cat.php @@ -11,4 +11,4 @@ $TbMsg[3]='Nom de l\'administrador'; $TbMsg[4]='(*)Per incluir algun administrador en aquesta Unitat Organitzativa ha de fer click sobre la casella de verificació corresponent.'; $TbMsg[5]='Administradors disponibles'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/administradores_usuarios_cat.php b/admin/WebConsole/idiomas/php/cat/administradores_usuarios_cat.php index 5ce0a954..f210b76b 100644 --- a/admin/WebConsole/idiomas/php/cat/administradores_usuarios_cat.php +++ b/admin/WebConsole/idiomas/php/cat/administradores_usuarios_cat.php @@ -11,4 +11,4 @@ $TbMsg[3]='Nom del centre'; $TbMsg[4]='(*)Per assignar algun centre a un administrador ha de fer click sobre la casella de verificació corresponent.'; $TbMsg[5]='Centres disponibles'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/aulas_cat.php b/admin/WebConsole/idiomas/php/cat/aulas_cat.php index 75d55af7..8e5b9dae 100644 --- a/admin/WebConsole/idiomas/php/cat/aulas_cat.php +++ b/admin/WebConsole/idiomas/php/cat/aulas_cat.php @@ -56,5 +56,5 @@ $TbMsg[48]='"Log en temps real"'; $TbMsg[49]='"Sincronización"'; $TbMsg[50]='"Sincronización 2"'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/avisos_cat.php b/admin/WebConsole/idiomas/php/cat/avisos_cat.php index 97eb5f15..65522458 100644 --- a/admin/WebConsole/idiomas/php/cat/avisos_cat.php +++ b/admin/WebConsole/idiomas/php/cat/avisos_cat.php @@ -14,5 +14,5 @@ $TbMsg["WARN_NOTESOFMENU"]='NOTAS: Los menús personalizados tienen mayor $TbMsg["WARN_GPT"]='AVISO: Para tabla de particiones GPT es necesario que la primera partición sea tipo EFI <br>y se recomienda un tamaño en torno a 512Mb.'; $TbMsg["WARN_SCHEDULER"]='AVISO: activar calendario de eventos de la BD para habilitar esta propiedad.'; $TbMsg["WARN_SOURCE_PATH"]='AVISO: La ruta de origen sólo se utiliza en las sincronizadas tipo directorio.'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/ayuda_cat.php b/admin/WebConsole/idiomas/php/cat/ayuda_cat.php index 40607de3..ee47be1d 100644 --- a/admin/WebConsole/idiomas/php/cat/ayuda_cat.php +++ b/admin/WebConsole/idiomas/php/cat/ayuda_cat.php @@ -5,11 +5,12 @@ // Idioma: Catalán // __________________________________________________ // Mensajes. -$TbMsg=array(); +if (empty ($TbMsg)) $TbMsg=array(); $TbMsg["HELP_TITLE"]='Ayuda'; $TbMsg["MANUAL"]='Manual de usuario'; -$TbMsg["API"]='Documentación de la API'; +$TbMsg["API"]='Documentación de la API del Motor de Clonación'; $TbMsg["CFG"]='Configuración de los clientes'; +$TbMsg["REST"]='Documentación de la API REST'; $TbMsg["CHANGELOG"]='Cambios en la versión:'; $TbMsg["USERMAIL"]='Lista de correos de usuarios'; $TbMsg["WEB"]='Web del proyecto: opengnsys.es'; diff --git a/admin/WebConsole/idiomas/php/cat/boot_grub4dos_cat.php b/admin/WebConsole/idiomas/php/cat/boot_grub4dos_cat.php index 674bd3b5..7d36a212 100644 --- a/admin/WebConsole/idiomas/php/cat/boot_grub4dos_cat.php +++ b/admin/WebConsole/idiomas/php/cat/boot_grub4dos_cat.php @@ -1,53 +1,55 @@ -<?php
-//____________________________________________________________
-//
-// Fichero de idiomas php: aulas_cat.php
-// Idioma: Catal
-//_____________________________________________________________
- $TbMsg=array();
- $TbMsg[0]='Nou';
- $TbMsg[1]='Modificar';
- $TbMsg[2]='Eliminar';
- $TbMsg[3]='Nova Columna d\'Arrancada';
- $TbMsg[4]='Modificar Columna d\'Arrancada';
- $TbMsg[5]='Eliminar Columna d\'Arrancada';
- $TbMsg[6]='Arrancada Creada Correctament';
- $TbMsg[7]='Arrancada Modificada Correctament';
- $TbMsg[8]='Arrancada Eliminada Correctament';
- $TbMsg[9]='Selecciona Columna Arrancada';
- $TbMsg[10]='"Mode Usuari"';
- $TbMsg[11]='"Mode Administraci"';
- $TbMsg[12]='Nom';
- $TbMsg[13]='Acceptar';
- $TbMsg[14]='Introdueixi un Nom de Columna';
- $TbMsg[15]='"Renombrar"';
- $TbMsg[16]='Cancellar';
- $TbMsg[17]='Plantilla';
- $TbMsg[18]='Sense Plantilla';
- $TbMsg[19]='Comandes';
- $TbMsg[20]='Descripci';
- $TbMsg[21]='Fitxer';
- $TbMsg[22]='##NO-TOCAR-ESTA-LINEA ';
- $TbMsg[23]='NO HI HA COLUMNA NOVA';
- $TbMsg[24]='mbit: Centros';
- $TbMsg[25]='mbit: Grup d\'aulas';
- $TbMsg[26]='mbit: Grup d\'ordinadors';
- $TbMsg[27]='"Incorporar ordinadors"';
- $TbMsg[28]='"Procediments"';
- $TbMsg[29]='"Reserves d\'aulas"';
- $TbMsg[30]='"Confirmades"';
- $TbMsg[31]='"Pendents"';
- $TbMsg[32]='"Denegades"';
- $TbMsg[33]='"Consola remota"';
- $TbMsg[34]='"Programaci reserves"';
- $TbMsg[35]='"Operadors"';
- $TbMsg[36]='"Eliminar Operador"';
- $TbMsg[37]='"Afegir nou Operador"';
- $TbMsg[38]='"Assistents"';
- $TbMsg[39]='"Eco de Consola"';
- $TbMsg[40]='"NetBoot avanat"';
- $TbMsg[41]='"Reubicar ordinadors"';
- $TbMsg[42]='Gesti Arrancada Avanada';
- $TbMsg[43]='"Guardar"';
- $TbMsg[44]='Ubicador Ordinadors';
- $TbMsg[45]='Nom mbit';
+<?php +//____________________________________________________________ +// +// Fichero de idiomas php: aulas_cat.php +// Idioma: Català +//_____________________________________________________________ + $TbMsg=array(); + $TbMsg[0]='Nou'; + $TbMsg[1]='Modificar'; + $TbMsg[2]='Eliminar'; + $TbMsg[3]='Nova Columna d\'Arrancada'; + $TbMsg[4]='Modificar Columna d\'Arrancada'; + $TbMsg[5]='Eliminar Columna d\'Arrancada'; + $TbMsg[6]='Arrancada Creada Correctament'; + $TbMsg[7]='Arrancada Modificada Correctament'; + $TbMsg[8]='Arrancada Eliminada Correctament'; + $TbMsg[9]='Selecciona Columna Arrancada'; + $TbMsg[10]='"Mode Usuari"'; + $TbMsg[11]='"Mode Administració"'; + $TbMsg[12]='Nom'; + $TbMsg[13]='Acceptar'; + $TbMsg[14]='Introdueixi un Nom de Columna'; + $TbMsg[15]='"Renombrar"'; + $TbMsg[16]='Cancel·lar'; + $TbMsg[17]='Plantilla'; + $TbMsg[18]='Sense Plantilla'; + $TbMsg[19]='Comandes'; + $TbMsg[20]='Descripció'; + $TbMsg[21]='Fitxer'; + $TbMsg[22]='##NO-TOCAR-ESTA-LINEA '; + $TbMsg[23]='NO HI HA COLUMNA NOVA'; + $TbMsg[24]='Àmbit: Centros'; + $TbMsg[25]='Àmbit: Grup d\'aulas'; + $TbMsg[26]='Àmbit: Grup d\'ordinadors'; + $TbMsg[27]='"Incorporar ordinadors"'; + $TbMsg[28]='"Procediments"'; + $TbMsg[29]='"Reserves d\'aulas"'; + $TbMsg[30]='"Confirmades"'; + $TbMsg[31]='"Pendents"'; + $TbMsg[32]='"Denegades"'; + $TbMsg[33]='"Consola remota"'; + $TbMsg[34]='"Programació reserves"'; + $TbMsg[35]='"Operadors"'; + $TbMsg[36]='"Eliminar Operador"'; + $TbMsg[37]='"Afegir nou Operador"'; + $TbMsg[38]='"Assistents"'; + $TbMsg[39]='"Eco de Consola"'; + $TbMsg[40]='"NetBoot avançat"'; + $TbMsg[41]='"Reubicar ordinadors"'; + $TbMsg[42]='Gestió Arrancada Avançada'; + $TbMsg[43]='"Guardar"'; + $TbMsg[44]='Ubicador Ordinadors'; + $TbMsg[45]='Nom àmbit'; + $TbMsg["UEFI"]='AVISO: Hay plantillas PXE que sólo son compatibles con un tipo de firmware, uefi o bios.<br>Al elegir estas plantillas la otra opción quedará configurada por defecto'; + $TbMsg["ERR_DUPLICADO"]='ERROR: El nombre o la descripción de la plantilla están duplicados'; diff --git a/admin/WebConsole/idiomas/php/cat/buscar_cat.php b/admin/WebConsole/idiomas/php/cat/buscar_cat.php index 5c7ff062..494cd99a 100644 --- a/admin/WebConsole/idiomas/php/cat/buscar_cat.php +++ b/admin/WebConsole/idiomas/php/cat/buscar_cat.php @@ -17,5 +17,5 @@ $TbMsg["SEARCH_NOMATCHES"]="No es troben resultats"; $TbMsg["SEARCH_NOVALUE"]="Ha d\'introduir un valor pel criteri de cerca"; $TbMsg["SEARCH_PROFESSOR"]="Ordenadores de profesor"; $TbMsg["SEARCH_NOREPO"]="Ordenadores sin repositorio"; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/colasacciones_cat.php b/admin/WebConsole/idiomas/php/cat/colasacciones_cat.php index 1af27c3c..a130cc69 100644 --- a/admin/WebConsole/idiomas/php/cat/colasacciones_cat.php +++ b/admin/WebConsole/idiomas/php/cat/colasacciones_cat.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: colasacciones_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ // Literals dels tipus d'accions @@ -13,14 +13,14 @@ $LITEJECUCION_TRABAJO="Treballs"; $LITACCION_EXITOSA='Finalitzada correctament'; // Literal Finalitzada exitosament $LITACCION_FALLIDA='Finalitzada amb errors'; // Literal Finalitzada amb errors -$LITACCION_TERMINADA='Finalitzada manualment'; //Literal Finalitzada manualment amb indicaci d'exit -$LITACCION_ABORTADA='Cancellada manualment'; // Literal Finalitzada manualment amb indicaci d'errors +$LITACCION_TERMINADA='Finalitzada manualment'; //Literal Finalitzada manualment amb indicaci� d'exit +$LITACCION_ABORTADA='Cancel�lada manualment'; // Literal Finalitzada manualment amb indicaci� d'errors $LITACCION_SINERRORES='Activa sense errors'; // Literal Activa i sense cap error -$LITACCION_CONERRORES='Activa amb errors'; // Literal Activa i amb algn error +$LITACCION_CONERRORES='Activa amb errors'; // Literal Activa i amb alg�n error -$LITACCION_DETENIDA='Parada'; // Literal acci momentniament parada -$LITACCION_INICIADA='Activa'; // Literal acci activa -$LITACCION_FINALIZADA='Finalitzada'; // Literal acci finalitzada +$LITACCION_DETENIDA='Parada'; // Literal acci� moment�niament parada +$LITACCION_INICIADA='Activa'; // Literal acci� activa +$LITACCION_FINALIZADA='Finalitzada'; // Literal acci� finalitzada $TbMsg=array(); $TbMsg[0]='Cua d\'accions'; @@ -34,15 +34,15 @@ $TbMsg=array(); $TbMsg[8]='Data final'; $TbMsg[9]='Hora inici'; $TbMsg[10]='Hora final'; - $TbMsg[11]='mbit'; + $TbMsg[11]='�mbit'; $TbMsg[12]='Eliminar'; $TbMsg[13]='Reiniciar'; $TbMsg[14]='Parar'; $TbMsg[15]='Continuar'; - $TbMsg[16]='Cancellar'; + $TbMsg[16]='Cancel�lar'; $TbMsg[17]='Finalitzar'; - $TbMsg[18]='Acci'; + $TbMsg[18]='Acci�'; $TbMsg[19]='Data final'; $TbMsg[20]='Hora final'; $TbMsg[21]='Data inici'; @@ -59,10 +59,10 @@ $TbMsg=array(); $TbMsg[31]='Tasques'; $TbMsg[32]='Treballs'; - $TbMsg[41]='"Filtre Acci"'; - $TbMsg[42]='"Filtre mbit"'; + $TbMsg[41]='"Filtre Acci�"'; + $TbMsg[42]='"Filtre �mbit"'; $TbMsg[43]='"Eliminar filtre"'; - $TbMsg[44]='"Modificar Acci"'; + $TbMsg[44]='"Modificar Acci�"'; $TbMsg[45]='"Reiniciar"'; $TbMsg[46]='"Eliminar"'; $TbMsg[47]='"Tasca pare"'; @@ -71,9 +71,8 @@ $TbMsg=array(); $TbMsg[50]='"Veure tasques"'; $TbMsg[51]='"Parar"'; $TbMsg[52]='"Continuar"'; - $TbMsg[53]='"Cancellar"'; + $TbMsg[53]='"Cancel�lar"'; $TbMsg[54]='"Finalitzar"'; $TbMsg[55]='"Finalitzar sense errors"'; $TbMsg[56]='"Finalitzar amb errors"'; - $TbMsg[57]='Informaci'; -?>
\ No newline at end of file + $TbMsg[57]='Informaci�'; diff --git a/admin/WebConsole/idiomas/php/cat/colasreservas_cat.php b/admin/WebConsole/idiomas/php/cat/colasreservas_cat.php index 834b6ce1..7575f0ac 100644 --- a/admin/WebConsole/idiomas/php/cat/colasreservas_cat.php +++ b/admin/WebConsole/idiomas/php/cat/colasreservas_cat.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: colasreservas_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ // Literals dels tipus de reserves @@ -10,14 +10,14 @@ $LITRESERVA_PENDENT="Pendents"; $LITRESERVA_CONFIRMADA="Confirmades"; $LITRESERVA_DENEGADA="Denegades"; -$RESERVA_PARADA=1; // reserva momentniament aturada +$RESERVA_PARADA=1; // reserva moment�niament aturada $RESERVA_ACTIVA=0; // Reserva activa -$LITRESERVA_PARADA='Suspesa'; // Literal reserva momentniament aturada +$LITRESERVA_PARADA='Suspesa'; // Literal reserva moment�niament aturada $LITRESERVA_ACTIVA='Activa'; // Literal reserva activa $TbMsg=array(); $TbMsg[0]='Reserves d\'aules'; - $TbMsg[1]='Opcions de bsqueda'; + $TbMsg[1]='Opcions de b�squeda'; $TbMsg[2]='Tipus'; $TbMsg[3]=''; $TbMsg[4]='Estats'; @@ -27,7 +27,7 @@ $TbMsg=array(); $TbMsg[8]='Data final'; $TbMsg[9]='Hora inici'; $TbMsg[10]='Hora final'; - $TbMsg[11]='mbit'; + $TbMsg[11]='�mbit'; $TbMsg[12]='Centres'; $TbMsg[13]='Grup d\'aules'; @@ -35,19 +35,18 @@ $TbMsg=array(); $TbMsg[15]='Any'; $TbMsg[16]='Mes'; - $TbMsg[17]='Da'; + $TbMsg[17]='D�a'; $TbMsg[18]='Aula'; - $TbMsg[19]='Ocupaci'; + $TbMsg[19]='Ocupaci�'; $TbMsg[20]='Imatge associada'; - $TbMsg[21]='Descripci'; + $TbMsg[21]='Descripci�'; - $TbMsg[22]='Programaci reserves'; + $TbMsg[22]='Programaci� reserves'; $TbMsg[23]='(Sense especificar)'; $TbMsg[24]='Aula'; - $TbMsg[25]='Sollicitant'; - $TbMsg[26]="Anticipaci previa"; - $TbMsg[27]="(Sense acci previa)"; + $TbMsg[25]='Sol�licitant'; + $TbMsg[26]="Anticipaci� previa"; + $TbMsg[27]="(Sense acci� previa)"; $TbMsg[28]="Tasca previa"; $TbMsg[29]="Treball previ"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/comandos/apagar_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/apagar_cat.php index b47ebe1f..30e73236 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/apagar_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/apagar_cat.php @@ -13,4 +13,3 @@ $TbMsg[5]='Apagar ordinadors'; $TbMsg[6]='Àmbit'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/comandos/arrancar_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/arrancar_cat.php index 7423433d..547f21aa 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/arrancar_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/arrancar_cat.php @@ -17,4 +17,4 @@ $TbMsg[9]='Unicast'; $TbMsg[10]='Método de arranque'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/comando_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/comando_cat.php index 3f9f49eb..07612ae8 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/comando_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/comando_cat.php @@ -13,4 +13,4 @@ $TbMsg[5]='Apagar ordinadors'; $TbMsg[6]='Àmbit'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/configurar_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/configurar_cat.php index ee1f434d..1b6102a3 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/configurar_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/configurar_cat.php @@ -46,4 +46,4 @@ $TbMsg[34]='Perfil Software'; $TbMsg["HD"]='Disco'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/conmutar_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/conmutar_cat.php index 9c171e04..5b0efb7d 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/conmutar_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/conmutar_cat.php @@ -13,4 +13,3 @@ $TbMsg[5]='Commutar ordinadors'; $TbMsg[6]='Àmbit'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/comandos/crearimagenbasica_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/crearimagenbasica_cat.php index 3e7cab90..819414c2 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/crearimagenbasica_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/crearimagenbasica_cat.php @@ -22,4 +22,4 @@ $TbMsg[14]='Copiar Imagen en cache'; $TbMsg[15]='Borrarla previamente de la cache'; $TbMsg[16]='No borrar archivos en destino'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/crearperfilsoftware_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/crearperfilsoftware_cat.php index 55205ecf..965703b7 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/crearperfilsoftware_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/crearperfilsoftware_cat.php @@ -18,4 +18,4 @@ $TbMsg[10]='Descripció de la Imatge '; $TbMsg[11]='Repositori de destí'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/crearsoftincremental_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/crearsoftincremental_cat.php index 5322f7a3..32d01b3c 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/crearsoftincremental_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/crearsoftincremental_cat.php @@ -16,4 +16,4 @@ $TbMsg[8]='Par'; $TbMsg[9]='Nom Perfil'; $TbMsg[10]='Software incremental disponible'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php index d2c193ad..f0035057 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php @@ -58,5 +58,5 @@ $TbMsg["WCRP35"]='Escull el mètode de transferència'; $TbMsg["WCRP36"]='Escull eina de clonació:'; $TbMsg["WCRP37"]='Escull compressor per l\'eina de clonació:'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagencache_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagencache_cat.php index 68e70272..603f8b40 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagencache_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagencache_cat.php @@ -26,4 +26,4 @@ $TbMsg[18]='Grand�ria de la imatge disponible si Repositori i Servidor Web allotjats al mateix Servidor'; $TbMsg[19]='Tipus'; $TbMsg["CONFIG_NOCONFIG"]='Sense configuraci�: client no connectat al servidor.'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagenrepo_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagenrepo_cat.php index a46d95cc..d1ca169f 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagenrepo_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagenrepo_cat.php @@ -39,4 +39,4 @@ $TbMsg[31]='Arxiu'; $TbMsg[32]='Directori'; $TbMsg[33]='AVISO: La imagen está situada en un directorio que no corresponde a la unidad organizativa.'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/enviarmensaje_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/enviarmensaje_cat.php index b6f3d68d..09cbd259 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/enviarmensaje_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/enviarmensaje_cat.php @@ -19,5 +19,5 @@ $TbMsg["OGAGENT"]="AVISO: Sólo se puede utilizar en los equipos que se haya iniciado la sesión <br>y tengan instalado en nuevo agente de OpenGnsys."; $TbMsg["OPTION"]="AVISO: El nuevo agente, en esta versión, no permite utilizar la cola de acciones."; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/gestor_ejecutarscripts_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/gestor_ejecutarscripts_cat.php index 372a2d47..959c322a 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/gestor_ejecutarscripts_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/gestor_ejecutarscripts_cat.php @@ -10,4 +10,3 @@ $TbMsg[3]='"ATENCIÓ: El fitxer no te la extensió .rbc"'; $TbMsg[4]='"ATENCIÓ: El fitxer no conté codi Rembo-C per executar"'; $TbMsg[5]='"ATENCIÓ: Hi ha algun problema per salvar el fitxer de script"'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/comandos/iniciarsesion_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/iniciarsesion_cat.php index 827108af..28533d42 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/iniciarsesion_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/iniciarsesion_cat.php @@ -18,4 +18,4 @@ $TbMsg[10]='Nom de la Imatge '; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/inventariohardware_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/inventariohardware_cat.php index 80a6e8e1..28a271f3 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/inventariohardware_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/inventariohardware_cat.php @@ -13,4 +13,4 @@ $TbMsg[5]='Inventari Hardware'; $TbMsg[6]='Àmbit'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/inventariosoftware_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/inventariosoftware_cat.php index a638c406..e1802d16 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/inventariosoftware_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/inventariosoftware_cat.php @@ -15,4 +15,4 @@ $TbMsg[7]='Dades a subministrar'; $TbMsg[8]='Par'; $TbMsg[9]='Nom S.O.'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/mensajes_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/mensajes_cat.php index 408728dc..6cb41194 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/mensajes_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/mensajes_cat.php @@ -25,5 +25,5 @@ $TbMsg["COMMAND_RestaurarSoftIncremental"]="Restaurar Software Incremental"; $TbMsg["WIZARD_Asistente Particionado"]="Assistent de particionat"; $TbMsg["WIZARD_Asistente Clonacion Particiones Remotas"]="Clonar particions remotes"; $TbMsg["WIZARD_Asistente Deploy de Imagenes"]="Deploy d\'imatges"; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/opcionesacciones_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/opcionesacciones_cat.php index 3a268d86..6bc85e0d 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/opcionesacciones_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/opcionesacciones_cat.php @@ -18,4 +18,3 @@ $TbMsgAux[10]='Guardar como a tasca nova' ; $TbMsgAux[11]='Incluir-ho en una tasca existent' ; $TbMsgAux[12]='Ordre d\'execució'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/comandos/particionaryformatear_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/particionaryformatear_cat.php index 10efdeb5..0ff8ded9 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/particionaryformatear_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/particionaryformatear_cat.php @@ -23,4 +23,3 @@ $TbMsg[15]='Ocultar'; $TbMsg[16]='Mostrar'; $TbMsg[17]='¡¡ Espai liure !!'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/comandos/reiniciar_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/reiniciar_cat.php index b968c455..d72b056b 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/reiniciar_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/reiniciar_cat.php @@ -13,4 +13,3 @@ $TbMsg[5]='Reiniciar ordinadors'; $TbMsg[6]='Àmbit'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/comandos/rembooffline_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/rembooffline_cat.php index 6bc79236..61bd14f4 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/rembooffline_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/rembooffline_cat.php @@ -13,4 +13,3 @@ $TbMsg[5]='Activar rembo Offline'; $TbMsg[6]='Àmbit'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagen_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagen_cat.php index 7be92108..c5d0cb5d 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagen_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagen_cat.php @@ -42,4 +42,4 @@ $TbMsg[32]='Grandària de partició'; $TbMsg[33]='Nom de la Imatge '; $TbMsg[34]='Perfil software'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagenbasica_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagenbasica_cat.php index d5aa2825..5afcc534 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagenbasica_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagenbasica_cat.php @@ -50,4 +50,4 @@ $TbMsg[39]='Método'; $TbMsg[40]='Unicast'; $TbMsg[41]='Multicast'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/restaurarsoftincremental_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/restaurarsoftincremental_cat.php index 6712c25c..93b3b652 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/restaurarsoftincremental_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/restaurarsoftincremental_cat.php @@ -48,4 +48,4 @@ $TbMsg[37]='Borrarla previamente de la cache'; $TbMsg[38]='Software Incremental'; $TbMsg[39]='No borrar archivos en destino'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/comandos/tomaconfiguracion_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/tomaconfiguracion_cat.php index 31be40d2..c0061c28 100644 --- a/admin/WebConsole/idiomas/php/cat/comandos/tomaconfiguracion_cat.php +++ b/admin/WebConsole/idiomas/php/cat/comandos/tomaconfiguracion_cat.php @@ -13,4 +13,3 @@ $TbMsg[5]='Agafar configuració'; $TbMsg[6]='Àmbit'; -?>
\ 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 e93b584f..6eaf723a 100644 --- a/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php +++ b/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php @@ -60,5 +60,5 @@ $TbMsg[44]='Equip sense Perfil de Hardware'; $TbMsg[45]='Afegeixi Perfil per obtenir dades'; $TbMsg[495]='Data/Caché'; $TbMsg[4951]='Caché lliure'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/conmutar_cat.php b/admin/WebConsole/idiomas/php/cat/conmutar_cat.php index 146576ec..181c3b59 100644 --- a/admin/WebConsole/idiomas/php/cat/conmutar_cat.php +++ b/admin/WebConsole/idiomas/php/cat/conmutar_cat.php @@ -2,9 +2,8 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: conmutar_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='Aquest mbit ha commutat correctament'; - $TbMsg[1]='ATENCI: Ha hagut algun problema al conmutar l\'mbit'; -?>
\ No newline at end of file + $TbMsg[0]='Aquest �mbit ha commutat correctament'; + $TbMsg[1]='ATENCI�: Ha hagut algun problema al conmutar l\'�mbit'; diff --git a/admin/WebConsole/idiomas/php/cat/consolaremota_cat.php b/admin/WebConsole/idiomas/php/cat/consolaremota_cat.php index 8b652bd1..319f69ef 100644 --- a/admin/WebConsole/idiomas/php/cat/consolaremota_cat.php +++ b/admin/WebConsole/idiomas/php/cat/consolaremota_cat.php @@ -21,4 +21,4 @@ $TbMsg[13]='ATENCIÓ: Ha escollit un àmbit d\'aplicació per la consola remota diferent al "d\'ordinador". <BR>Per visualitzar l\'eco de qualsevol client premi sobre ell amb el botón secundari i seleccioni "Eco de consola"; <BR>S\'obrirà una finestra que es refrescarà automàticament on podrà fer un seguiment de la/el comanda/script introduït'; $TbMsg[14]='...Esperi si us plau, enviant el codi del script'; $TbMsg[15]='...El codi del script s\'ha enviat, per veure la sortida de qualsevol ordinador seleccioni "Eco de Consola"'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/descargas_cat.php b/admin/WebConsole/idiomas/php/cat/descargas_cat.php index 08152fa6..e1936f6a 100644 --- a/admin/WebConsole/idiomas/php/cat/descargas_cat.php +++ b/admin/WebConsole/idiomas/php/cat/descargas_cat.php @@ -10,4 +10,4 @@ $TbMsg['DOWNLOADS']="Descàrregues disponibles"; $TbMsg['NOFILES']="No hi ha fitxers disponibles"; // Avís: no hi ha cap deixar caràcter fora del codi PHP. -?> + diff --git a/admin/WebConsole/idiomas/php/cat/ecoremoto_cat.php b/admin/WebConsole/idiomas/php/cat/ecoremoto_cat.php index bf04e179..2b3da729 100644 --- a/admin/WebConsole/idiomas/php/cat/ecoremoto_cat.php +++ b/admin/WebConsole/idiomas/php/cat/ecoremoto_cat.php @@ -18,4 +18,4 @@ $TbMsg[10]='ATENCIÓ: Ha ocorregut algun problema al enviar una petició de eco de consola remota a aquest àmbit'; $TbMsg[11]='... esperi si us plau.'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/ejecutaracciones_cat.php b/admin/WebConsole/idiomas/php/cat/ejecutaracciones_cat.php index 077ba621..a54e981a 100644 --- a/admin/WebConsole/idiomas/php/cat/ejecutaracciones_cat.php +++ b/admin/WebConsole/idiomas/php/cat/ejecutaracciones_cat.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: acciones_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='Centres'; @@ -10,10 +10,9 @@ $TbMsg[2]='Aules'; $TbMsg[3]='Grup d\'ordinadors'; $TbMsg[4]='Ordinadors'; - $TbMsg[5]='Execuci de procediments'; - $TbMsg[6]='mbit'; + $TbMsg[5]='Execuci� de procediments'; + $TbMsg[6]='�mbit'; $TbMsg[7]='Procediments'; $TbMsg[8]='Procediments'; $TbMsg[9]='"Executar procediment"'; $TbMsg[10]='"Afegir com autoexec"'; - ?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/estados_cat.php b/admin/WebConsole/idiomas/php/cat/estados_cat.php index 77b35205..40a37436 100644 --- a/admin/WebConsole/idiomas/php/cat/estados_cat.php +++ b/admin/WebConsole/idiomas/php/cat/estados_cat.php @@ -17,5 +17,5 @@ $TbMsg["STATUS_LNXS"]="Sessió GNU/Linux"; $TbMsg["STATUS_OSX"]="macOS"; $TbMsg["STATUS_WIN"]="Windows"; $TbMsg["STATUS_WINS"]="Sessió Windows"; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/gestor_ordenadores_cat.php b/admin/WebConsole/idiomas/php/cat/gestor_ordenadores_cat.php index 3eebd1a9..7c1d0665 100644 --- a/admin/WebConsole/idiomas/php/cat/gestor_ordenadores_cat.php +++ b/admin/WebConsole/idiomas/php/cat/gestor_ordenadores_cat.php @@ -6,5 +6,5 @@ //______________________________________________________________ $TbMsg=array(); $TbMsg["DUPLICADO"]="Error al insertar el ordenador, se han encontrado datos duplicados: "; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/hardwares_cat.php b/admin/WebConsole/idiomas/php/cat/hardwares_cat.php index d52d7a82..f2dad48d 100644 --- a/admin/WebConsole/idiomas/php/cat/hardwares_cat.php +++ b/admin/WebConsole/idiomas/php/cat/hardwares_cat.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: hardwares_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='"Definir nou tipus de hardware"'; @@ -17,14 +17,14 @@ $TbMsg[9]='"Eliminar component"'; $TbMsg[10]='"Nou grup de perfils"'; $TbMsg[11]='"Definir nou perfil"'; - $TbMsg[12]='"Collocar perfil"'; + $TbMsg[12]='"Col�locar perfil"'; $TbMsg[13]='"Eliminar grup de perfils"'; - $TbMsg[14]='"Gesti Components"'; - $TbMsg[15]='"Informaci Perfil"'; + $TbMsg[14]='"Gesti� Components"'; + $TbMsg[15]='"Informaci� Perfil"'; $TbMsg[16]='"Moure perfil"'; $TbMsg[17]='"Eliminar perfil hardware"'; $TbMsg[18]='"Tipus de hardware"'; $TbMsg[19]='"Components hardware"'; $TbMsg[20]='"Perfils hardware"'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/iconos_cat.php b/admin/WebConsole/idiomas/php/cat/iconos_cat.php index 20bdbb42..9879a953 100644 --- a/admin/WebConsole/idiomas/php/cat/iconos_cat.php +++ b/admin/WebConsole/idiomas/php/cat/iconos_cat.php @@ -55,5 +55,5 @@ $TbMsg["Particionar"]='Particionar'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/imagenincremental_cat.php b/admin/WebConsole/idiomas/php/cat/imagenincremental_cat.php index 70eb19da..bc5e4c4b 100644 --- a/admin/WebConsole/idiomas/php/cat/imagenincremental_cat.php +++ b/admin/WebConsole/idiomas/php/cat/imagenincremental_cat.php @@ -2,12 +2,11 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: imagenincremental_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='Imatges'; - $TbMsg[1]='Gesti de software incremental'; + $TbMsg[1]='Gesti� de software incremental'; $TbMsg[2]='Imatge'; $TbMsg[3]='Nom del software incremental'; - $TbMsg[4]='(*)Per a incloure algun software incremental en aquesta imatge ha de fer click sobre la casella de verificaci corresponent.'; -?>
\ No newline at end of file + $TbMsg[4]='(*)Per a incloure algun software incremental en aquesta imatge ha de fer click sobre la casella de verificaci� corresponent.'; diff --git a/admin/WebConsole/idiomas/php/cat/inclusionacciones_cat.php b/admin/WebConsole/idiomas/php/cat/inclusionacciones_cat.php index 47def840..e360b45c 100644 --- a/admin/WebConsole/idiomas/php/cat/inclusionacciones_cat.php +++ b/admin/WebConsole/idiomas/php/cat/inclusionacciones_cat.php @@ -18,4 +18,4 @@ $TbMsg[8]='Procediments disponibles'; $TbMsg[9]='Tasques disponibles'; $TbMsg[10]='Paràmetres'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/incorporaordenadores_cat.php b/admin/WebConsole/idiomas/php/cat/incorporaordenadores_cat.php index 42ffe53f..f6ecef16 100644 --- a/admin/WebConsole/idiomas/php/cat/incorporaordenadores_cat.php +++ b/admin/WebConsole/idiomas/php/cat/incorporaordenadores_cat.php @@ -2,17 +2,17 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: incorporaordenadores_cat.php (Comandos) -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='Incorporaci d\'Ordinadors'; + $TbMsg[0]='Incorporaci� d\'Ordinadors'; $TbMsg[1]='Aula'; $TbMsg["MSG_DHCPCODE"]='Codi DHCP'; $TbMsg["MSG_DHCPHOST"]='(declaracions "host")'; - $TbMsg[3]='ATENCI: Hi ha hagut algn problema al incorporar ordinadors des del fitxer'; - $TbMsg[4]='ATENCI: El fitxer est buit'; - $TbMsg[5]='ATENCI: El fitxer no cont informaci amb el format necesari per incorporar ordinadors'; - $TbMsg[6]='ATENCI: Hi ha algn problema per a salvar el fitxer'; + $TbMsg[3]='ATENCI�: Hi ha hagut alg�n problema al incorporar ordinadors des del fitxer'; + $TbMsg[4]='ATENCI�: El fitxer est� buit'; + $TbMsg[5]='ATENCI�: El fitxer no cont� informaci� amb el format necesari per incorporar ordinadors'; + $TbMsg[6]='ATENCI�: Hi ha alg�n problema per a salvar el fitxer'; $TbMsg[7]='S\'han incorporat correctament ordinadors desde fitxer'; $TbMsg[8]='Contingut'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/incrementalcomponente_soft_cat.php b/admin/WebConsole/idiomas/php/cat/incrementalcomponente_soft_cat.php index 16a48e39..3e9826c2 100644 --- a/admin/WebConsole/idiomas/php/cat/incrementalcomponente_soft_cat.php +++ b/admin/WebConsole/idiomas/php/cat/incrementalcomponente_soft_cat.php @@ -2,12 +2,11 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: incrementalcomponente_soft_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='Softwares Incrementals'; - $TbMsg[1]='Gesti de components software'; + $TbMsg[1]='Gesti� de components software'; $TbMsg[2]='Software incremental'; $TbMsg[3]='Nombre del component'; - $TbMsg[4]='(*)Per a incloure algun component en aquest software incremental ha de fer click sobre la casella de verificaci corresponent.'; -?>
\ No newline at end of file + $TbMsg[4]='(*)Per a incloure algun component en aquest software incremental ha de fer click sobre la casella de verificaci� corresponent.'; diff --git a/admin/WebConsole/idiomas/php/cat/informacion_acciones_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_acciones_cat.php index 5da6e260..0f5e6359 100644 --- a/admin/WebConsole/idiomas/php/cat/informacion_acciones_cat.php +++ b/admin/WebConsole/idiomas/php/cat/informacion_acciones_cat.php @@ -12,4 +12,4 @@ $TbMsg[4]='Informació sobre Tasques'; $TbMsg[5]='Informació'; $TbMsg[6]='Sense paràmetres'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/informacion_imagenes_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_imagenes_cat.php index d417d4a4..641120e9 100644 --- a/admin/WebConsole/idiomas/php/cat/informacion_imagenes_cat.php +++ b/admin/WebConsole/idiomas/php/cat/informacion_imagenes_cat.php @@ -2,17 +2,16 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: informacion_imagenes_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='Imatges'; - $TbMsg[1]='Informaci sobre imatges'; + $TbMsg[1]='Informaci� sobre imatges'; $TbMsg[2]='Imatge'; - $TbMsg[3]='Informaci de la Imatge'; + $TbMsg[3]='Informaci� de la Imatge'; $TbMsg[4]='Components software'; $TbMsg[5]='Software incremental'; $TbMsg[6]='Perfil Software'; $TbMsg[7]='Ordinadors amb aquesta imatge'; - $TbMsg[8]='Partici'; + $TbMsg[8]='Partici�'; $TbMsg[9]='Comentaris'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/informacion_incrementales_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_incrementales_cat.php index a6cdb3ba..399ea6d2 100644 --- a/admin/WebConsole/idiomas/php/cat/informacion_incrementales_cat.php +++ b/admin/WebConsole/idiomas/php/cat/informacion_incrementales_cat.php @@ -2,14 +2,13 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: informacion_incrementales_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='Software Incremental'; - $TbMsg[1]='Informaci sobre software incremental'; + $TbMsg[1]='Informaci� sobre software incremental'; $TbMsg[2]='Software Incremental'; - $TbMsg[3]='Informaci software incremental'; + $TbMsg[3]='Informaci� software incremental'; $TbMsg[4]='Components software'; $TbMsg[5]='Perfils Combinables'; $TbMsg[6]='Perfils Hardware soportats'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/informacion_menus_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_menus_cat.php index f1fba417..d8caaf7e 100644 --- a/admin/WebConsole/idiomas/php/cat/informacion_menus_cat.php +++ b/admin/WebConsole/idiomas/php/cat/informacion_menus_cat.php @@ -2,28 +2,27 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: informacion_menus_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='tems del Men'; - $TbMsg[1]='Informaci del Men'; - $TbMsg[2]='Men'; - $TbMsg[3]='Informaci Men'; - $TbMsg[4]='Propietats dels tems'; + $TbMsg[0]='�tems del Men�'; + $TbMsg[1]='Informaci� del Men�'; + $TbMsg[2]='Men�'; + $TbMsg[3]='Informaci� Men�'; + $TbMsg[4]='Propietats dels �tems'; $TbMsg[5]='Propietats'; - $TbMsg[6]='Eliminar tem'; - $TbMsg[7]='Ttol'; - $TbMsg[8]='Propietats dels tems pblics del Men'; + $TbMsg[6]='Eliminar �tem'; + $TbMsg[7]='T�tol'; + $TbMsg[8]='Propietats dels �tems p�blics del Men�'; $TbMsg[9]='Coordenada x'; $TbMsg[10]='Coordenada y'; $TbMsg[11]='Modalitat'; - $TbMsg[12]='Propietats de los tems privats del Men'; - $TbMsg[13]='tems pblics '; - $TbMsg[14]='tems privats'; - $TbMsg[15]='Ordre del tem'; - $TbMsg[16]='Literal del tem'; + $TbMsg[12]='Propietats de los �tems privats del Men�'; + $TbMsg[13]='�tems p�blics '; + $TbMsg[14]='�tems privats'; + $TbMsg[15]='Ordre del �tem'; + $TbMsg[16]='Literal del �tem'; $TbMsg[17]='Nombre de la Imatge'; - $TbMsg[18]='Men simple'; - $TbMsg[19]='Men doble'; - $TbMsg[20]='Codi del tem'; -?>
\ No newline at end of file + $TbMsg[18]='Men� simple'; + $TbMsg[19]='Men� doble'; + $TbMsg[20]='Codi del �tem'; diff --git a/admin/WebConsole/idiomas/php/cat/informacion_perfileshard_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_perfileshard_cat.php index ee5c44a3..86aa10c5 100644 --- a/admin/WebConsole/idiomas/php/cat/informacion_perfileshard_cat.php +++ b/admin/WebConsole/idiomas/php/cat/informacion_perfileshard_cat.php @@ -2,16 +2,15 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: informacion_perfileshard_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='Perfils hardware'; - $TbMsg[1]='Informaci sobre Perfils hardware'; + $TbMsg[1]='Informaci� sobre Perfils hardware'; $TbMsg[2]='Perfil hardware'; - $TbMsg[3]='Informaci Perfil hardware'; + $TbMsg[3]='Informaci� Perfil hardware'; $TbMsg[4]='Perfils software disponibles'; $TbMsg[5]='Components software'; $TbMsg[6]='Components hardware '; $TbMsg[7]='Software Incremental'; $TbMsg[8]='Comentaris'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/informacion_perfilessoft_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_perfilessoft_cat.php index 3cb41f19..beb43490 100644 --- a/admin/WebConsole/idiomas/php/cat/informacion_perfilessoft_cat.php +++ b/admin/WebConsole/idiomas/php/cat/informacion_perfilessoft_cat.php @@ -2,16 +2,15 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: informacion_perfilessoft_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='Perfils software'; - $TbMsg[1]='Informaci sobre perfils software'; + $TbMsg[1]='Informaci� sobre perfils software'; $TbMsg[2]='Perfil software'; - $TbMsg[3]='Informaci perfils software'; + $TbMsg[3]='Informaci� perfils software'; $TbMsg[4]='Perfils Hardware soportats'; $TbMsg[5]='Components hardware'; $TbMsg[6]='Components software'; $TbMsg[7]='Software Incremental'; $TbMsg[8]='Comentaris'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/informacion_procedimientos_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_procedimientos_cat.php index 50e2d796..2d965288 100644 --- a/admin/WebConsole/idiomas/php/cat/informacion_procedimientos_cat.php +++ b/admin/WebConsole/idiomas/php/cat/informacion_procedimientos_cat.php @@ -2,10 +2,9 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: informacion_procedimientos_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='Parmetres dels comandaments del Procedment'; - $TbMsg[1]='Parmetre'; + $TbMsg[0]='Par�metres dels comandaments del Procedment'; + $TbMsg[1]='Par�metre'; $TbMsg[2]='Valor'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/informacion_repositorio_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_repositorio_cat.php index 0501064a..b0728f2e 100644 --- a/admin/WebConsole/idiomas/php/cat/informacion_repositorio_cat.php +++ b/admin/WebConsole/idiomas/php/cat/informacion_repositorio_cat.php @@ -15,5 +15,5 @@ $TbMsg["IMGTYPE2"]='sincronizada bísica'; $TbMsg["IMGTYPE3"]='sincronizada incremental'; $TbMsg[6]='Ordinadors assignats'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/informacion_tareas_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_tareas_cat.php index e58418e6..73f3bfc5 100644 --- a/admin/WebConsole/idiomas/php/cat/informacion_tareas_cat.php +++ b/admin/WebConsole/idiomas/php/cat/informacion_tareas_cat.php @@ -2,12 +2,11 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: informacion_tareas_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='Parmetres de les Comandes de la Tasca'; - $TbMsg[1]='Parmetre'; + $TbMsg[0]='Par�metres de les Comandes de la Tasca'; + $TbMsg[1]='Par�metre'; $TbMsg[2]='Valor'; - $TbMsg[3]='mbit'; + $TbMsg[3]='�mbit'; $TbMsg[4]='Nom'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/menucliente_cat.php b/admin/WebConsole/idiomas/php/cat/menucliente_cat.php index cc324849..93aaa9e2 100644 --- a/admin/WebConsole/idiomas/php/cat/menucliente_cat.php +++ b/admin/WebConsole/idiomas/php/cat/menucliente_cat.php @@ -9,4 +9,4 @@ $TbMsg[1]='"Direcció IP"'; $TbMsg[2]='NO S\'HA DETECTAT CAP MENÚ PER AQUEST CLIENT'; $TbMsg[3]='Apagar l\'equip'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/menus_cat.php b/admin/WebConsole/idiomas/php/cat/menus_cat.php index 96d745e9..82ca4639 100644 --- a/admin/WebConsole/idiomas/php/cat/menus_cat.php +++ b/admin/WebConsole/idiomas/php/cat/menus_cat.php @@ -2,19 +2,19 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: menus_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='"Nou grup de mens"'; - $TbMsg[1]='"Definir nou men"'; - $TbMsg[2]='"Collocar men"'; + $TbMsg[0]='"Nou grup de men�s"'; + $TbMsg[1]='"Definir nou men�"'; + $TbMsg[2]='"Col�locar men�"'; $TbMsg[3]='"Renombrar"'; - $TbMsg[4]='"Eliminar grup de mens"'; - $TbMsg[5]='"Informaci Men"'; - $TbMsg[6]='"Moure men"'; + $TbMsg[4]='"Eliminar grup de men�s"'; + $TbMsg[5]='"Informaci� Men�"'; + $TbMsg[6]='"Moure men�"'; $TbMsg[7]='"Propietats"'; - $TbMsg[8]='"Eliminar men"'; - $TbMsg[9]='"Mens"'; + $TbMsg[8]='"Eliminar men�"'; + $TbMsg[9]='"Men�s"'; $TbMsg[10]='"Gestionar Items"'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/msgbrowser_cat.php b/admin/WebConsole/idiomas/php/cat/msgbrowser_cat.php index 48f42677..690abe34 100644 --- a/admin/WebConsole/idiomas/php/cat/msgbrowser_cat.php +++ b/admin/WebConsole/idiomas/php/cat/msgbrowser_cat.php @@ -35,4 +35,4 @@ $TbMsg=array(); -?> + diff --git a/admin/WebConsole/idiomas/php/cat/nada_cat.php b/admin/WebConsole/idiomas/php/cat/nada_cat.php index 85d9a1ff..dd13b722 100644 --- a/admin/WebConsole/idiomas/php/cat/nada_cat.php +++ b/admin/WebConsole/idiomas/php/cat/nada_cat.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fichero de idiomas php: nada_esp.php -// Idioma: Español +// Idioma: Catalán //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]="DISPOSITIU UTILITZAT PER ACCEDIR A OPENGNSYS"; @@ -12,5 +12,23 @@ $TbMsg[4]="Versió Sistema"; $TbMsg[5]="Navegador"; $TbMsg[6]="Versió Navegador"; + $TbMsg["TIP"]="Consejo del día"; -?>
\ No newline at end of file + // Los mensajes pueden tener imágenes asociadas llamadas images/tipOfDay_N.png + $TipOfDay=Array(); + $TipOfDay[0]="El cliente de OpenGnsys puede restaurar y crear imágenes en todos los repositorios definidos en la unidad organizativa."; + $TipOfDay[1]="OpenGnsys permite gestionar equipos UEFI desde la versión 1.1.1 (Espeto)."; + $TipOfDay[2]="<a href='https://opengnsys.es' class='help_menu' target='blank'>Nueva web de OpenGnsys</a> dirigida a los usuarios, donde encontrarán fácilmente: \n". + "<ul>\n". + " <li>Descarga de la última versión de Opengnsys</li>\n". + " <li>Manual de usuario</li>\n". + " <li>Documentación de la instalación</li>\n". + " <li>Casos de éxito</li>\n". + "</ul>\n<br>\n"; + $TipOfDay[3]="OpenGnsys permite instalar varios ogLive, pudiendo seleccionar en cada equipo el que mejor reconozca su hardware."; + $TipOfDay[4]="OpenGnsys permite independizar el alojamiento de las imágenes de distintas unidades organizativas dentro de un mismo repositorio."; + $TipOfDay[5]="Para facilitar la migración de un servidor existen scripts para exportar e importar los datos de OpenGnsys."; + $TipOfDay[6]="RemotePC conjuga OpenGnsys con UDS para ofrecer acceso remoto a los equipos de las aulas fuera del horario de docencia."; + $TipOfDay[7]="<b>Curso Online</b><p>Todos los miembros de organizaciones que estén federadas en el Servicio de Identidad de RedIRIS pueden acceder al curso 'Curso Básico de OpenGnsys 1.1.0' en la <a href='https://docencia-net.cv.uma.es' class='help_menu' target='blank'>Plataforma de Formación del Grupo Docencia-Net.</p>"; + $TipOfDay[8]="El nuevo agente de OpenGnsys para el sistema operativo permite mandar mensajes a los usuarios y ejecutar comandos sobre el equipo."; + $TipOfDay[9]="En la web de OpenGnsys puedes encontrar <a href='https://opengnsys.es/trac/wiki/EjemploPracticos' class='help_menu' target='blank'>ejemplos prácticos y recetas</a>, como por ejemplo la postconfiguración necesario para la activación de Windows con KMS."; diff --git a/admin/WebConsole/idiomas/php/cat/perfilcomponente_hard_cat.php b/admin/WebConsole/idiomas/php/cat/perfilcomponente_hard_cat.php index a3aacff9..501e5669 100644 --- a/admin/WebConsole/idiomas/php/cat/perfilcomponente_hard_cat.php +++ b/admin/WebConsole/idiomas/php/cat/perfilcomponente_hard_cat.php @@ -2,12 +2,11 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: perfilcomponente_hard_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='Perfils hardware'; - $TbMsg[1]='Gesti Components hardware'; + $TbMsg[1]='Gesti� Components hardware'; $TbMsg[2]='Perfil hardware'; $TbMsg[3]='Nom del component'; - $TbMsg[4]='(*)Per incloure algun component en aquest perfil ha de fer click sobre la casella de verificaci corresponent.'; -?>
\ No newline at end of file + $TbMsg[4]='(*)Per incloure algun component en aquest perfil ha de fer click sobre la casella de verificaci� corresponent.'; diff --git a/admin/WebConsole/idiomas/php/cat/perfilcomponente_soft_cat.php b/admin/WebConsole/idiomas/php/cat/perfilcomponente_soft_cat.php index 7be75b8f..0d6b732f 100644 --- a/admin/WebConsole/idiomas/php/cat/perfilcomponente_soft_cat.php +++ b/admin/WebConsole/idiomas/php/cat/perfilcomponente_soft_cat.php @@ -2,12 +2,11 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: perfilcomponente_soft_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='Perfils software'; - $TbMsg[1]='Gesti de components software'; + $TbMsg[1]='Gesti� de components software'; $TbMsg[2]='Perfil software'; $TbMsg[3]='Nom del component'; - $TbMsg[4]='(*)Per incloure algun component en aquest perfil ha de fer click sobre la casella de verificaci corresponent.'; -?>
\ No newline at end of file + $TbMsg[4]='(*)Per incloure algun component en aquest perfil ha de fer click sobre la casella de verificaci� corresponent.'; diff --git a/admin/WebConsole/idiomas/php/cat/pintaParticiones_cat.php b/admin/WebConsole/idiomas/php/cat/pintaParticiones_cat.php index c2cf710c..916f30a4 100644 --- a/admin/WebConsole/idiomas/php/cat/pintaParticiones_cat.php +++ b/admin/WebConsole/idiomas/php/cat/pintaParticiones_cat.php @@ -58,5 +58,5 @@ $TbMsg["SEND"]='Protocolo'; $TbMsg["WARN_PROTOCOL"]='La opción "protocolo" sólo se utiliza en las sincronizadas tipo archivo la primera vez que se envía la imagen a caché. <br>En otro caso el protocolo es RSYNC.'; $TbMsg["WARN_DIFFIMAGE"]='Hay una nueva versió de la imagen (se muestra la diferencia de revisiones).'; $TbMsg["WARN_DIFFDISKSIZE"]='ATENCIÓN: no se pueden particionar grupos de ordenadores con distinto tamaño de disco.<br>Marcar la opción de "Desagrupar por tamaño de partición" y pulsar "Aceptar" en el menú superior para aplicar esta operación adecuadamente.'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/procedimientoscomandos_cat.php b/admin/WebConsole/idiomas/php/cat/procedimientoscomandos_cat.php index fff32291..821c2c73 100644 --- a/admin/WebConsole/idiomas/php/cat/procedimientoscomandos_cat.php +++ b/admin/WebConsole/idiomas/php/cat/procedimientoscomandos_cat.php @@ -2,15 +2,14 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: procedimientoscomandos_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='Gesti Comandes del Procediment'; + $TbMsg[0]='Gesti� Comandes del Procediment'; $TbMsg[1]='Comandes incloses'; $TbMsg[2]='Procediment'; $TbMsg[3]='Nom Comandes'; $TbMsg[4]='Ord.'; - $TbMsg[5]='Parmetre'; + $TbMsg[5]='Par�metre'; $TbMsg[6]='Valor'; - $TbMsg[7]='(*)Per excloure alguna comanda d\'aquest procediment ha de fer click sobre la casella de verificaci corresponent'; -?>
\ No newline at end of file + $TbMsg[7]='(*)Per excloure alguna comanda d\'aquest procediment ha de fer click sobre la casella de verificaci� corresponent'; diff --git a/admin/WebConsole/idiomas/php/cat/programaciones_cat.php b/admin/WebConsole/idiomas/php/cat/programaciones_cat.php index bf61fc4b..bb7a2da7 100644 --- a/admin/WebConsole/idiomas/php/cat/programaciones_cat.php +++ b/admin/WebConsole/idiomas/php/cat/programaciones_cat.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: programaciones_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ // Literals dels tipus d'accions $LITEJECUCION_COMANDO="Comandes"; @@ -15,5 +15,4 @@ $TbMsg=array(); $TbMsg[0]="Programacions"; $TbMsg[1]="Suspendre temporalment tots els blocs programats"; -$TbMsg[2]="Descripci del bloc"; -?>
\ No newline at end of file +$TbMsg[2]="Descripci� del bloc"; diff --git a/admin/WebConsole/idiomas/php/cat/programacionesaulas_cat.php b/admin/WebConsole/idiomas/php/cat/programacionesaulas_cat.php index 12db16c5..862f52bb 100644 --- a/admin/WebConsole/idiomas/php/cat/programacionesaulas_cat.php +++ b/admin/WebConsole/idiomas/php/cat/programacionesaulas_cat.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: colasreservas_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ // Literals dels tipus de reserves @@ -27,7 +27,7 @@ $TbMsg=array(); $TbMsg[8]='Data final'; $TbMsg[9]='Hora inici'; $TbMsg[10]='Hora final'; - $TbMsg[11]='mbit'; + $TbMsg[11]='�mbit'; $TbMsg[12]='Centres'; $TbMsg[13]='Grup d\'aules'; @@ -37,18 +37,17 @@ $TbMsg=array(); $TbMsg[16]='Mes'; $TbMsg[17]='Dia'; $TbMsg[18]='Aula'; - $TbMsg[19]='Ocupaci'; + $TbMsg[19]='Ocupaci�'; $TbMsg[20]='Imatge associada'; - $TbMsg[21]='Descripci'; + $TbMsg[21]='Descripci�'; - $TbMsg[22]='Programaci reserves'; + $TbMsg[22]='Programaci� reserves'; $TbMsg[23]='(Sense especificar)'; $TbMsg[24]='Aula'; - $TbMsg[25]='Sollicitant'; - $TbMsg[26]="Anticipaci prvia"; - $TbMsg[27]="(Sense acci prvia)"; - $TbMsg[28]="Tasca prvia"; + $TbMsg[25]='Sol�licitant'; + $TbMsg[26]="Anticipaci� pr�via"; + $TbMsg[27]="(Sense acci� pr�via)"; + $TbMsg[28]="Tasca pr�via"; $TbMsg[29]="Treball previ"; $TbMsg[30]='Grup de reserves'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/programacionesreservas_cat.php b/admin/WebConsole/idiomas/php/cat/programacionesreservas_cat.php index 4c9c4e1c..f7e278c6 100644 --- a/admin/WebConsole/idiomas/php/cat/programacionesreservas_cat.php +++ b/admin/WebConsole/idiomas/php/cat/programacionesreservas_cat.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: colasreservas_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ // Literals dels tipus de reserves @@ -27,7 +27,7 @@ $TbMsg=array(); $TbMsg[8]='Data final'; $TbMsg[9]='Hora inici'; $TbMsg[10]='Hora final'; - $TbMsg[11]='mbit'; + $TbMsg[11]='�mbit'; $TbMsg[12]='Reserves'; $TbMsg[13]='Grup de reserves'; @@ -36,18 +36,17 @@ $TbMsg=array(); $TbMsg[16]='Mes'; $TbMsg[17]='Dia'; $TbMsg[18]='Aula'; - $TbMsg[19]='Ocupaci'; + $TbMsg[19]='Ocupaci�'; $TbMsg[20]='Imatge associada'; - $TbMsg[21]='Descripci'; + $TbMsg[21]='Descripci�'; - $TbMsg[22]='Programaci reserves'; + $TbMsg[22]='Programaci� reserves'; $TbMsg[23]='(Sense especificar)'; $TbMsg[24]='Aula'; - $TbMsg[25]='Sollicitant'; - $TbMsg[26]="Anticipaci prvia"; - $TbMsg[27]="(Sense acci prvia)"; - $TbMsg[28]="Tasca prvia"; + $TbMsg[25]='Sol�licitant'; + $TbMsg[26]="Anticipaci� pr�via"; + $TbMsg[27]="(Sense acci� pr�via)"; + $TbMsg[28]="Tasca pr�via"; $TbMsg[29]="Treball previ"; $TbMsg[30]="Dades Reserva"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php index a8185a8d..02c8a984 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php @@ -59,4 +59,4 @@ $TbMsg['COMM_REMOTEACCESS']="permitir gestión de acceso remoto a los orde $TbMsg['COMM_DEFOGLIVE']="Assignat per l'administrador"; // Ticket-816 PCprofesor $TbMsg['PROP_PROFCOMPUTER']="Ordenador de profesor"; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_centros_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_centros_cat.php index 26d81b96..d35360c7 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_centros_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_centros_cat.php @@ -2,17 +2,17 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_ordenadores_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti d'Unitats Organitzatives"; +$TbMsg[4]="Gesti� d'Unitats Organitzatives"; $TbMsg[5]="Nom de la unitat"; $TbMsg[6]="Comentaris"; $TbMsg['DIR']="Directorio"; $TbMsg['MSG_OGUNIT']="Si se elige separar por unidades organizativas, el directorio <b>/opt/opengnsys/images</b><br> debe contener un subdirectorio llamado como el directorio indicado."; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_componentehardwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_componentehardwares_cat.php index d32b2e4c..b726ed66 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_componentehardwares_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_componentehardwares_cat.php @@ -2,14 +2,13 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_componentehardwares_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Components Hardware"; +$TbMsg[4]="Gesti� Components Hardware"; $TbMsg[5]="Nom"; $TbMsg[6]="Tipus de hardware"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_componentesoftwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_componentesoftwares_cat.php index fcbe82e2..b959b2a9 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_componentesoftwares_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_componentesoftwares_cat.php @@ -2,15 +2,14 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_componentesoftwares_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Components Software"; +$TbMsg[4]="Gesti� Components Software"; $TbMsg[5]="Nom"; $TbMsg[6]="Tipus de Software"; $TbMsg[7]="Tipus de S.O."; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_entidades_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_entidades_cat.php index 7798aea0..819e4f3b 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_entidades_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_entidades_cat.php @@ -2,16 +2,16 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_ordenadores_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Entitats"; +$TbMsg[4]="Gesti� Entitats"; $TbMsg[5]="Nom de l'Entitat"; $TbMsg[6]="Comentaris"; $TbMsg['OGUNIT']="Separar unidades organizativas"; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_entornos_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_entornos_cat.php index 42ae5d85..ac9361bb 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_entornos_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_entornos_cat.php @@ -21,4 +21,4 @@ $TbMsg[12]=""; $TbMsg[13]=""; $TbMsg[14]=""; $TbMsg[15]=""; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_grupos_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_grupos_cat.php index b2d56d0e..7c5f6afc 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_grupos_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_grupos_cat.php @@ -2,14 +2,14 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_tareas_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Grups"; +$TbMsg[4]="Gesti� Grups"; $TbMsg[5]="Nom Grup"; $TbMsg[6]="Comentaris"; $TbMsg[7]="Grups d'Aules"; @@ -24,8 +24,7 @@ $TbMsg[15]="Grups de Perfils Software"; $TbMsg[16]="Grups de Software Incremental"; $TbMsg[17]="Grups de Servidors Rembo"; $TbMsg[18]="Grups de Servidors Dhcp"; -$TbMsg[19]="Grups de Mens"; +$TbMsg[19]="Grups de Men�s"; $TbMsg[20]="Grups de Reserves"; $TbMsg[21]="Grups d'Entitats"; $TbMsg[22]="Grupo d'Ordinadors"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_imagenes_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_imagenes_cat.php index 423eee50..bada5225 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_imagenes_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_imagenes_cat.php @@ -32,4 +32,4 @@ $TbMsg[22]="Introduzca otra Descripción"; $TbMsg['PROP_OS']="Sistema operativo"; $TbMsg['PROP_REMOTEACCESS']="Acceso remoto"; $TbMsg['COMM_REMOTEACCESS']="permitir gestión de acceso remoto a los ordenadores"; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_menus_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_menus_cat.php index a6fbbb73..49dc3b7a 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_menus_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_menus_cat.php @@ -2,25 +2,25 @@ //________________________________________________________________________________________________________ // // Fitxer d'idioms php: propiedades_menus_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Menus"; -$TbMsg[5]="Nom del Men"; -$TbMsg[6]="Ttol"; +$TbMsg[4]="Gesti� Menus"; +$TbMsg[5]="Nom del Men�"; +$TbMsg[6]="T�tol"; $TbMsg[7]="Comentaris"; -$TbMsg[8]="Items de Men Pblico"; +$TbMsg[8]="Items de Men� P�blico"; $TbMsg[9]="Coordenada x"; $TbMsg[10]="Coordenada y"; -$TbMsg[11]="Columnas men automtico"; -$TbMsg[13]="Men simple"; -$TbMsg[14]="Men doble"; -$TbMsg[15]="URL men personalizado"; -$TbMsg[17]="Resoluci de pantalla"; +$TbMsg[11]="Columnas men� autom�tico"; +$TbMsg[13]="Men� simple"; +$TbMsg[14]="Men� doble"; +$TbMsg[15]="URL men� personalizado"; +$TbMsg[17]="Resoluci� de pantalla"; $TbMsg[18]="Imagen de fondo"; $TbMsg["PROP_DEFAULT"]="Detectada por defecto"; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_ordenadorestandar_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_ordenadorestandar_cat.php index 0883949f..5a9faa50 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_ordenadorestandar_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_ordenadorestandar_cat.php @@ -2,20 +2,20 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_ordenadorestandar_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]="Aula"; $TbMsg[1]="Ordinador plantilla"; $TbMsg[2]="Nom"; -$TbMsg[3]="Direcci IP"; -$TbMsg[4]="Direcci MAC"; +$TbMsg[3]="Direcci� IP"; +$TbMsg[4]="Direcci� MAC"; $TbMsg[5]="Perfil hardware"; $TbMsg[6]="Servidor Dhcp"; $TbMsg[7]="Servidor Rembo "; $TbMsg[8]="Ordinadors per a afegir"; $TbMsg[9]='(*) Per modificar un ordinador amb un certa dada, en aquesta aula, ha d\'introduir el valor corresponent i deixar el camp "Ordinadors a afegir" a zero.'; -$TbMsg[10]="(**) Si es tracta d\'ordinadors nous amb una configuraci per defecte, per no vol modificar els ordinadors ja existents ha d'\introduir un valor ms gran que zero."; -$TbMsg[11]="Grandria Cach"; +$TbMsg[10]="(**) Si es tracta d\'ordinadors nous amb una configuraci� per defecte, per� no vol modificar els ordinadors ja existents ha d'\introduir un valor m�s gran que zero."; +$TbMsg[11]="Grand�ria Cach�"; + -?> diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php index 1ce3ef22..40203751 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php @@ -16,5 +16,5 @@ $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/cat/propiedades_perfilsoftwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_perfilsoftwares_cat.php index da08d1ef..0494e826 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_perfilsoftwares_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_perfilsoftwares_cat.php @@ -2,14 +2,13 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_perfilsoftwares_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti de Perfils software"; +$TbMsg[4]="Gesti� de Perfils software"; $TbMsg[5]="Nom"; $TbMsg[6]="Comentaris"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_procedimientos_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_procedimientos_cat.php index eecd646b..e90cbdc9 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_procedimientos_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_procedimientos_cat.php @@ -2,14 +2,13 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_procedimientos_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Procediments"; +$TbMsg[4]="Gesti� Procediments"; $TbMsg[5]="Nom Procediment"; $TbMsg[6]="Comentaris"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_reservas_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_reservas_cat.php index 346d0b6c..c20a56e4 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_reservas_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_reservas_cat.php @@ -2,29 +2,28 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_reservas_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Reserves"; -$TbMsg[5]="Descripci"; -$TbMsg[6]="Nom sollicitant"; +$TbMsg[4]="Gesti� Reserves"; +$TbMsg[5]="Descripci�"; +$TbMsg[6]="Nom sol�licitant"; $TbMsg[7]="Comentaris"; $TbMsg[8]="E-mail"; $TbMsg[9]="Estatus universitari"; $TbMsg[10]="Aula"; $TbMsg[11]="Imatge associada"; -$TbMsg[12]="Anticipaci previa"; +$TbMsg[12]="Anticipaci� previa"; $TbMsg[13]="Confirmada"; $TbMsg[14]="Pendent"; $TbMsg[15]="Denegada"; $TbMsg[16]="Estat de la reserva"; -$TbMsg[17]="(En blanc o 0 minuts indica sense anticipaci)"; -$TbMsg[18]="(Sense acci anticipada)"; -$TbMsg[19]="Tasca prvia"; +$TbMsg[17]="(En blanc o 0 minuts indica sense anticipaci�)"; +$TbMsg[18]="(Sense acci� anticipada)"; +$TbMsg[19]="Tasca pr�via"; $TbMsg[20]="Treball previ"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_tareas_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_tareas_cat.php index b13e024c..e18e259a 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_tareas_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_tareas_cat.php @@ -2,22 +2,22 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_tareas_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Tasques"; +$TbMsg[4]="Gesti� Tasques"; $TbMsg[5]="Nom Tasca"; $TbMsg[6]="Comentaris"; -$TbMsg[7]="Tipus mbit"; -$TbMsg[8]="mbit d\'aplicaci"; +$TbMsg[7]="Tipus �mbit"; +$TbMsg[8]="�mbit d\'aplicaci�"; $TbMsg[9]=""; $TbMsg[10]="Centres"; $TbMsg[11]="Grups d\'Aules"; $TbMsg[12]="Aules"; $TbMsg[13]="Grups d\Ordinadors"; $TbMsg[14]="Ordinadors"; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_tipohardwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_tipohardwares_cat.php index 3323ca52..3ea773ca 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_tipohardwares_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_tipohardwares_cat.php @@ -2,14 +2,13 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_tipohardwares_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Tipus de Hardware"; +$TbMsg[4]="Gesti� Tipus de Hardware"; $TbMsg[5]="Nom"; $TbMsg[6]="Icona"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_universidades_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_universidades_cat.php index f1a18013..9a576b94 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_universidades_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_universidades_cat.php @@ -2,14 +2,13 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_aulas_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Universitats"; +$TbMsg[4]="Gesti� Universitats"; $TbMsg[5]="Nom"; $TbMsg[6]="Comentaris"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_usuarios_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_usuarios_cat.php index 16df7a25..71126a0b 100644 --- a/admin/WebConsole/idiomas/php/cat/propiedades_usuarios_cat.php +++ b/admin/WebConsole/idiomas/php/cat/propiedades_usuarios_cat.php @@ -2,14 +2,14 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_ordenadores_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opci�"; $TbMsg[1]="Afegir"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Usuaris"; +$TbMsg[4]="Gesti� Usuaris"; $TbMsg[5]="Usuari"; $TbMsg[6]="Password*"; $TbMsg[7]="Nom complet"; @@ -20,10 +20,10 @@ $TbMsg[11]="SuperAdministrador "; $TbMsg[12]="Administrador"; $TbMsg[13]="Operador"; $TbMsg[14]="Per realitzar canvis en aquest usuari<br>"; -$TbMsg[15]="creat en el procs d'installaci,<br><br>"; -$TbMsg[16]="premi aqu<br>"; +$TbMsg[15]="creat en el proc�s d'instal�laci�,<br><br>"; +$TbMsg[16]="premi aqu�<br>"; $TbMsg[17]="https://opengnsys.es/trac/wiki/ModificarUsuarios"; $TbMsg[18]="Confirmar password"; $TbMsg['APIKEY']="API key"; -$TbMsg['NEWAPIKEY']="La API key se generar automticamente al insertar el usuario."; -?> +$TbMsg['NEWAPIKEY']="La API key se generar� autom�ticamente al insertar el usuario."; + diff --git a/admin/WebConsole/idiomas/php/cat/purgar_cat.php b/admin/WebConsole/idiomas/php/cat/purgar_cat.php index 792d8700..9a06fe40 100644 --- a/admin/WebConsole/idiomas/php/cat/purgar_cat.php +++ b/admin/WebConsole/idiomas/php/cat/purgar_cat.php @@ -2,9 +2,8 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: actualizar_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='Aquest mbit ha estat purgat correctament'; - $TbMsg[1]='ATENCI: Ha ocorregut algn problema al purgar l\'mbit'; -?>
\ No newline at end of file + $TbMsg[0]='Aquest �mbit ha estat purgat correctament'; + $TbMsg[1]='ATENCI�: Ha ocorregut alg�n problema al purgar l\'�mbit'; diff --git a/admin/WebConsole/idiomas/php/cat/repositorios_cat.php b/admin/WebConsole/idiomas/php/cat/repositorios_cat.php index 30677a5b..11437225 100644 --- a/admin/WebConsole/idiomas/php/cat/repositorios_cat.php +++ b/admin/WebConsole/idiomas/php/cat/repositorios_cat.php @@ -21,4 +21,4 @@ $TbMsg[13]='""'; $TbMsg[14]='"Repositoris"'; $TbMsg[15]='"Icones"'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/reservas_cat.php b/admin/WebConsole/idiomas/php/cat/reservas_cat.php index f861ef05..cd89359f 100644 --- a/admin/WebConsole/idiomas/php/cat/reservas_cat.php +++ b/admin/WebConsole/idiomas/php/cat/reservas_cat.php @@ -2,19 +2,19 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: reservas_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='"Nou grup de reserves"'; $TbMsg[1]='"Definir nova reserva"'; - $TbMsg[2]='"Collocar reserva"'; + $TbMsg[2]='"Col�locar reserva"'; $TbMsg[3]='"Renombrar"'; $TbMsg[4]='"Eliminar grup de reserves"'; - $TbMsg[5]='"Informaci Reserva"'; + $TbMsg[5]='"Informaci� Reserva"'; $TbMsg[6]='"Moure reserva"'; $TbMsg[7]='"Propietats"'; $TbMsg[8]='"Eliminar Reserva"'; $TbMsg[9]='"Reserves"'; $TbMsg[10]='"Programacions"'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/softwares_cat.php b/admin/WebConsole/idiomas/php/cat/softwares_cat.php index cc41e8be..3e1924e4 100644 --- a/admin/WebConsole/idiomas/php/cat/softwares_cat.php +++ b/admin/WebConsole/idiomas/php/cat/softwares_cat.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: softwares_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]='""'; @@ -10,17 +10,17 @@ $TbMsg[2]='""'; $TbMsg[3]='"Nou grup de components"'; $TbMsg[4]='"Definir nou component"'; - $TbMsg[5]='"Collocar component"'; + $TbMsg[5]='"Col�locar component"'; $TbMsg[6]='"Renombrar"'; $TbMsg[7]='"Eliminar grup de components"'; $TbMsg[8]='"Moure component"'; $TbMsg[9]='"Eliminar component"'; $TbMsg[10]='"Nou grup de perfils"'; $TbMsg[11]='"Definir nou perfil"'; - $TbMsg[12]='"Collocar perfil"'; + $TbMsg[12]='"Col�locar perfil"'; $TbMsg[13]='"Eliminar grup de perfils"'; - $TbMsg[14]='"Gesti components"'; - $TbMsg[15]='"Informaci Perfil"'; + $TbMsg[14]='"Gesti� components"'; + $TbMsg[15]='"Informaci� Perfil"'; $TbMsg[16]='"Moure perfil"'; $TbMsg[17]='"Eliminar perfil software"'; $TbMsg[18]='"Tipus de software"'; @@ -29,9 +29,8 @@ $TbMsg[21]='"Software Incremental"'; $TbMsg[22]='"Nou grup d\'incrementals"'; $TbMsg[23]='"Definir nova incremental"'; - $TbMsg[24]='"Collocar incremental"'; + $TbMsg[24]='"Col�locar incremental"'; $TbMsg[25]='"Eliminar grup d\'incrementals"'; - $TbMsg[26]='"Informaci incremental"'; + $TbMsg[26]='"Informaci� incremental"'; $TbMsg[27]='"Moure incremental"'; $TbMsg[28]='"Eliminar incremental"'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/sondeo_cat.php b/admin/WebConsole/idiomas/php/cat/sondeo_cat.php index 5fb6c4e0..79e50362 100644 --- a/admin/WebConsole/idiomas/php/cat/sondeo_cat.php +++ b/admin/WebConsole/idiomas/php/cat/sondeo_cat.php @@ -7,4 +7,4 @@ $TbMsg=array(); $TbMsg[0]=''; $TbMsg[1]='ATENCIÓ: Ha ocorregut algun problema al consultar l\'estat del ordinadors'; -?> + diff --git a/admin/WebConsole/idiomas/php/cat/tareascomandos_cat.php b/admin/WebConsole/idiomas/php/cat/tareascomandos_cat.php index 484233b5..7f0406c3 100644 --- a/admin/WebConsole/idiomas/php/cat/tareascomandos_cat.php +++ b/admin/WebConsole/idiomas/php/cat/tareascomandos_cat.php @@ -2,15 +2,14 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: tareascomandos_cat.php -// Idioma: Catal +// Idioma: Catal� //________________________________________________________________________________________________________ $TbMsg=array(); - $TbMsg[0]='Gesti Comandes de la Tasca'; + $TbMsg[0]='Gesti� Comandes de la Tasca'; $TbMsg[1]='Comandes incloses'; $TbMsg[2]='Tasca'; $TbMsg[3]='Nom Comanda'; $TbMsg[4]='Ord.'; - $TbMsg[5]='Parmetre'; + $TbMsg[5]='Par�metre'; $TbMsg[6]='Valor'; - $TbMsg[7]='(*)Per excloure alguna comanda d\'aquesta tasca ha de fer click sobre la casella de verificaci corresponent'; -?>
\ No newline at end of file + $TbMsg[7]='(*)Per excloure alguna comanda d\'aquesta tasca ha de fer click sobre la casella de verificaci� corresponent'; diff --git a/admin/WebConsole/idiomas/php/cat/tiposhardwares_cat.php b/admin/WebConsole/idiomas/php/cat/tiposhardwares_cat.php index 06474d90..06d6772d 100644 --- a/admin/WebConsole/idiomas/php/cat/tiposhardwares_cat.php +++ b/admin/WebConsole/idiomas/php/cat/tiposhardwares_cat.php @@ -23,5 +23,5 @@ $TbMsg["HARDWARE_net"]="Tarjetas de red"; $TbMsg["HARDWARE_sto"]="Controladores de almacenamiento"; $TbMsg["HARDWARE_usb"]="Controladores USB"; $TbMsg["HARDWARE_vga"]="Tarjetas gráficas"; -?> + diff --git a/admin/WebConsole/idiomas/php/eng/ayuda_eng.php b/admin/WebConsole/idiomas/php/eng/ayuda_eng.php index f0da7af5..eaf1d084 100644 --- a/admin/WebConsole/idiomas/php/eng/ayuda_eng.php +++ b/admin/WebConsole/idiomas/php/eng/ayuda_eng.php @@ -5,11 +5,12 @@ // Idioma: Inglés // __________________________________________________ // Mensajes. -$TbMsg=array(); +if (empty ($TbMsg)) $TbMsg=array(); $TbMsg["HELP_TITLE"]='Help'; $TbMsg["MANUAL"]='User Manual'; -$TbMsg["API"]='API documentation'; +$TbMsg["API"]='Engine API documentation'; $TbMsg["CFG"]='Client configuration'; +$TbMsg["REST"]='REST API documentation'; $TbMsg["CHANGELOG"]='Changes in the version:'; $TbMsg["USERMAIL"]=' User email list'; $TbMsg["WEB"]='Web of the project: opengnsys.es'; diff --git a/admin/WebConsole/idiomas/php/eng/boot_grub4dos_eng.php b/admin/WebConsole/idiomas/php/eng/boot_grub4dos_eng.php index cc2e827c..7f58a353 100644 --- a/admin/WebConsole/idiomas/php/eng/boot_grub4dos_eng.php +++ b/admin/WebConsole/idiomas/php/eng/boot_grub4dos_eng.php @@ -51,3 +51,5 @@ $TbMsg[43]='"Save"'; $TbMsg[44]='Computer locator'; $TbMsg[45]='Scope name'; + $TbMsg["UEFI"]='AVISO: Hay plantillas PXE que sólo son compatibles con un tipo de firmware, uefi o bios.<br>Al elegir estas plantillas la otra opción quedará configurada por defecto'; + $TbMsg["ERR_DUPLICADO"]='ERROR: The name or description of template are duplicated'; diff --git a/admin/WebConsole/idiomas/php/eng/comandos/configurar_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/configurar_eng.php index 16d1d06a..60085635 100644 --- a/admin/WebConsole/idiomas/php/eng/comandos/configurar_eng.php +++ b/admin/WebConsole/idiomas/php/eng/comandos/configurar_eng.php @@ -22,6 +22,6 @@ $TbMsg[14]='Format'; $TbMsg[15]='Hide'; $TbMsg[16]='Show'; - $TbMsg[17]=' Free space !!'; + $TbMsg[17]='Free space !!'; $TbMsg["HD"]='Disk'; diff --git a/admin/WebConsole/idiomas/php/eng/comandos/crearimagenbasica_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/crearimagenbasica_eng.php index 6f1d3545..e20b703f 100644 --- a/admin/WebConsole/idiomas/php/eng/comandos/crearimagenbasica_eng.php +++ b/admin/WebConsole/idiomas/php/eng/comandos/crearimagenbasica_eng.php @@ -4,13 +4,13 @@ // Php image file: crearimagenbasica_eng.php (Comandos) // Language: English //________________________________________________________________________________________________________ - $TbMsg=array(); + if (empty($TbMsg)) $TbMsg=array(); $TbMsg[0]='Generation of base image <br> (experimental)' ; $TbMsg[1]='Computer features'; - $TbMsg[2]='Name'; - $TbMsg[3]='IP Address'; - $TbMsg[4]='MAC Address'; - $TbMsg[5]='Hardware profile'; + $TbMsg[2]='Name'; + $TbMsg[3]='IP Address'; + $TbMsg[4]='MAC Address'; + $TbMsg[5]='Hardware profile'; $TbMsg[6]='Data to supply'; $TbMsg[7]='Disk'; $TbMsg[8]='Par'; @@ -20,5 +20,5 @@ $TbMsg[12]='Additional Options'; $TbMsg[13]='Delete image previously'; $TbMsg[14]='Copy image to cache'; - $TbMsg[15]='Delete image previously from cache'; + $TbMsg[15]='Deleting image previously from cache'; $TbMsg[16]='Do not delete files from target'; diff --git a/admin/WebConsole/idiomas/php/eng/comandos/crearsoftincremental_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/crearsoftincremental_eng.php index a26a34f4..d9a3ccce 100644 --- a/admin/WebConsole/idiomas/php/eng/comandos/crearsoftincremental_eng.php +++ b/admin/WebConsole/idiomas/php/eng/comandos/crearsoftincremental_eng.php @@ -4,15 +4,15 @@ // Php language file: crearsoftincremental_eng.php (Comandos) // Language: English //________________________________________________________________________________________________________ - $TbMsg=array(); - $TbMsg[0]='Generation of incremental image <br> (experimental)'; + if (empty($TbMsg)) $TbMsg=array(); + $TbMsg[0]='Generation of incremental image <br> (experimental)'; $TbMsg[1]='Computer features'; $TbMsg[2]='Name'; $TbMsg[3]='IP Address'; $TbMsg[4]='MAC Address'; $TbMsg[5]='Hardware profile'; $TbMsg[6]='Data to supply'; - $TbMsg[7]='Disco'; + $TbMsg[7]='Disk'; $TbMsg[8]='Par'; $TbMsg[9]='OS name'; $TbMsg[10]='Incremental image / Repository'; @@ -20,5 +20,5 @@ $TbMsg[12]='Incremental software'; $TbMsg[13]='Delete Incremental previously'; $TbMsg[14]='Copy Incremental to cache'; - $TbMsg[15]='Delete Incremental previously from cache'; - $TbMsg[16]='Do not delete files from target'; + $TbMsg[15]='Deleting Incremental previously from cache'; + $TbMsg[16]='Do not delete files from target'; diff --git a/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php index 38e217ca..fa00a89f 100644 --- a/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php +++ b/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php @@ -54,7 +54,7 @@ $TbMsg["WCRP31"]='Remote partitions cloning Wizard'; $TbMsg["WCRP32"]='Select MASTER PC:'; - $TbMsg["WCRP33"]='Select the image or partition to send from Master PC'; + $TbMsg["WCRP33"]='Choose the image or partition to send from Master PC'; $TbMsg["WCRP34"]='Select the client target partition'; $TbMsg["WCRP35"]='Select the transfer mode'; $TbMsg["WCRP36"]='Select cloning tool'; diff --git a/admin/WebConsole/idiomas/php/eng/comandos/eliminarimagenrepo_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/eliminarimagenrepo_eng.php index 8582fc92..3259b608 100644 --- a/admin/WebConsole/idiomas/php/eng/comandos/eliminarimagenrepo_eng.php +++ b/admin/WebConsole/idiomas/php/eng/comandos/eliminarimagenrepo_eng.php @@ -4,19 +4,19 @@ // Php language file: eliminarimagenrepositorio_eng.php (Comandos) // Language: English //________________________________________________________________________________________________________ - $TbMsg=array(); + if (empty($TbMsg)) $TbMsg=array(); $TbMsg[0]='Image creation'; $TbMsg[1]='Computer features'; $TbMsg[2]='Name'; $TbMsg[3]='IP Address'; $TbMsg[4]='MAC Address'; - $TbMsg[5]='Delete Image from Repository'; + $TbMsg[5]='Deleting Image from Repository'; $TbMsg[6]='Data to supply'; $TbMsg[7]='Available Images'; $TbMsg[8]='Par'; $TbMsg[9]='OS name'; $TbMsg[10]='----------- Image name -----------'; - $TbMsg[11]='Nº'; + $TbMsg[11]='No.'; $TbMsg[12]='Mark'; $TbMsg[13]='Size'; $TbMsg[14]='Locked Image'; @@ -31,11 +31,11 @@ $TbMsg[23]='Version Limitations 1.5'; $TbMsg[24]='Deleting Image is allowed if Repository and Web server are hosted on the same server'; $TbMsg[25]='NOT Created'; - $TbMsg[26]='Delete Image object'; + $TbMsg[26]='Deleting Image object'; $TbMsg[27]='Type'; $TbMsg[28]='View Full Repository'; $TbMsg[29]='View Organizational Unit'; $TbMsg[30]='Organizational Unit'; $TbMsg[31]='Archive'; $TbMsg[32]='Directory'; - $TbMsg[33]='WARNING: Image is hosted in a directory that does not match with the organizational unit.' + $TbMsg[33]='WARNING: Image is hosted in a directory that does not match with the organizational unit.'; diff --git a/admin/WebConsole/idiomas/php/eng/comandos/particionaryformatear_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/particionaryformatear_eng.php index 47003e15..d5c979e5 100644 --- a/admin/WebConsole/idiomas/php/eng/comandos/particionaryformatear_eng.php +++ b/admin/WebConsole/idiomas/php/eng/comandos/particionaryformatear_eng.php @@ -4,7 +4,7 @@ // Php language file: particionaryformatear_eng.php (Comandos) // Language: English //________________________________________________________________________________________________________ - $TbMsg=array(); + if(empty($TbMsg)) $TbMsg=array(); $TbMsg[0]='Centers'; $TbMsg[1]='Group of labs'; $TbMsg[2]='Labs'; @@ -22,4 +22,4 @@ $TbMsg[14]='Format'; $TbMsg[15]='Hide'; $TbMsg[16]='Show'; - $TbMsg[17]=' Free space !!'; + $TbMsg[17]='Free space !!'; diff --git a/admin/WebConsole/idiomas/php/eng/nada_eng.php b/admin/WebConsole/idiomas/php/eng/nada_eng.php index ac5e504a..b998688d 100644 --- a/admin/WebConsole/idiomas/php/eng/nada_eng.php +++ b/admin/WebConsole/idiomas/php/eng/nada_eng.php @@ -12,3 +12,23 @@ $TbMsg[4]="System Version"; $TbMsg[5]="Browser"; $TbMsg[6]="Browser Version"; + $TbMsg["TIP"]="Consejo del día"; + + // Los mensajes pueden tener imágenes asociadas llamadas images/tipOfDay_N.png + $TipOfDay=Array(); + $TipOfDay[0]="OpenGnsys client can create and restore images from all repositories in organization unit." + $TipOfDay[1]="OpenGnsys can manage UEFI computers form version 1.1.1 (Espeto)." + $TipOfDay[2]="<a href='https://opengnsys.es' class='help_menu' target='blank'>New OpenGnsys website</a> aimed at the user, where you will easily find: \n". + "<ul>\n". + " <li>Download OpenGnsys last version.</li>\n". + " <li>User Manual</li>\n". + " <li>Installation documentation</li>\n". + " <li>Success stories</li>\n". + "</ul>\n<br>\n"; + $TipOfDay[3]="OpenGnsys allows users to install several ogLive, being able to select on each computer the one that best recognizes your hardware."; + $TipOfDay[4]="OpenGnsys allows independent hosting of images from different organizational units within the same repository."; + $TipOfDay[5]="For facilitate OpenGnsys migration, there are scripts to export and import data." + $TipOfDay[6]="RemotePC combines OpenGnsys with UDS to offer remote access to classroom computers outside teaching hours."; + $TipOfDay[7]="<b>Course Online</b><p>All members of organizations that are federated in the RedIRIS Identity Service can access the course 'OpenGnsys Basic Course 1.1.0' in the <a href='https://docencia-net.cv.uma.es' class='help_menu' target='blank'>Training Platform of the Docencia-Net group.</p>"; + $TipOfDay[8]="The new OpenGnsys agent for the operating system allows users to send messages and execute commands on the computer." + $TipOfDay[9]="On the OpenGnsys web project you can find <a href='https://opengnsys.es/trac/wiki/EjemploPracticos' class='help_menu' target='blank'>practical examples and recipes</a>, such as the postconfiguration required for Windows activation with KMS."; diff --git a/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php b/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php index f308484e..9191b82d 100644 --- a/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php +++ b/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php @@ -4,7 +4,7 @@ // Php language file: propiedades_aulas_eng.php // Language: English //________________________________________________________ -$TbMsg=array(); +if (empty($TbMsg)) $TbMsg=array(); $TbMsg[0]="No Option"; $TbMsg[1]="Insert"; $TbMsg[2]="Modify"; @@ -58,4 +58,4 @@ $TbMsg['PROP_REMOTEACCESS']="Remote access"; $TbMsg['COMM_REMOTEACCESS']="allow remote access management to computers"; $TbMsg['COMM_DEFOGLIVE']="Assigned by administrator"; // Ticket-816 PCprofesor -$TbMsg['PROP_PROFCOMPUTER']="Teacher‘s computer", +$TbMsg['PROP_PROFCOMPUTER']="Teacher‘s computer"; diff --git a/admin/WebConsole/idiomas/php/eng/reservas_eng.php b/admin/WebConsole/idiomas/php/eng/reservas_eng.php index ae1b8d82..ebcd2902 100644 --- a/admin/WebConsole/idiomas/php/eng/reservas_eng.php +++ b/admin/WebConsole/idiomas/php/eng/reservas_eng.php @@ -4,9 +4,9 @@ // Pph language file: reserves_eng.php // Language: English //________________________________________________________________________________________________________ - $TbMsg=array(); + if (empty($TbMsg)) $TbMsg=array(); $TbMsg[0]='"New reservations group"'; - $TbMsg[1]='"Define new reservation"; + $TbMsg[1]='"Define new reservation"'; $TbMsg[2]='"Set reserve"'; $TbMsg[3]='"Rename"'; $TbMsg[4]='"Delete reservations group"'; diff --git a/admin/WebConsole/idiomas/php/esp/acciones_esp.php b/admin/WebConsole/idiomas/php/esp/acciones_esp.php index aa80a687..d918988e 100644 --- a/admin/WebConsole/idiomas/php/esp/acciones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/acciones_esp.php @@ -39,4 +39,4 @@ $TbMsg[31]='Tareas'; $TbMsg[32]=''; $TbMsg[33]='Acciones'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/accionmenu_esp.php b/admin/WebConsole/idiomas/php/esp/accionmenu_esp.php index 176e57ea..a74091e8 100644 --- a/admin/WebConsole/idiomas/php/esp/accionmenu_esp.php +++ b/admin/WebConsole/idiomas/php/esp/accionmenu_esp.php @@ -21,4 +21,4 @@ $TbMsg[13]='Ord.'; $TbMsg[14]='(*)Para incluir o excluir alguna acción en este menú debe hacer click sobre la casilla de verificación correspondiente'; $TbMsg[15]='A'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/acercade_esp.php b/admin/WebConsole/idiomas/php/esp/acercade_esp.php index 836fe0a4..e08f4806 100644 --- a/admin/WebConsole/idiomas/php/esp/acercade_esp.php +++ b/admin/WebConsole/idiomas/php/esp/acercade_esp.php @@ -17,5 +17,5 @@ $TbMsg["CHANGE"]='Cambios en: '; $TbMsg["MANUAL"]='Manual OpenGnsys '; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/actualizar_esp.php b/admin/WebConsole/idiomas/php/esp/actualizar_esp.php index 4c60f353..1d8b75d1 100644 --- a/admin/WebConsole/idiomas/php/esp/actualizar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/actualizar_esp.php @@ -7,4 +7,3 @@ $TbMsg=array(); $TbMsg[0]='Este ámbito se ha refrescado correctamente'; $TbMsg[1]='ATENCIÓN: Ha habido algún problema al refrescar el ámbito'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/administracion_esp.php b/admin/WebConsole/idiomas/php/esp/administracion_esp.php index 41e23b0a..3aba0a93 100644 --- a/admin/WebConsole/idiomas/php/esp/administracion_esp.php +++ b/admin/WebConsole/idiomas/php/esp/administracion_esp.php @@ -19,4 +19,4 @@ $TbMsg[11]='"Usuarios"'; $TbMsg[12]='"Asignar Adminstradores"'; $TbMsg[13]='"Asignar Unidades Organizativas"'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/administradores_centros_esp.php b/admin/WebConsole/idiomas/php/esp/administradores_centros_esp.php index b6fc3620..230e4772 100644 --- a/admin/WebConsole/idiomas/php/esp/administradores_centros_esp.php +++ b/admin/WebConsole/idiomas/php/esp/administradores_centros_esp.php @@ -11,4 +11,4 @@ $TbMsg[3]='Nombre del adminsitrador'; $TbMsg[4]='(*)Para incluir algún adminsitrador en esta Unidad Organizativa debe hacer click sobre la casilla de verificación correspondiente.'; $TbMsg[5]='Administradores disponibles'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/administradores_usuarios_esp.php b/admin/WebConsole/idiomas/php/esp/administradores_usuarios_esp.php index 3b802356..620e95ab 100644 --- a/admin/WebConsole/idiomas/php/esp/administradores_usuarios_esp.php +++ b/admin/WebConsole/idiomas/php/esp/administradores_usuarios_esp.php @@ -11,4 +11,4 @@ $TbMsg[3]='Nombre del centro'; $TbMsg[4]='(*)Para asignar algún centro a un administrador determinado debe hacer click sobre la casilla de verificación correspondiente.'; $TbMsg[5]='Centros disponibles'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/avisos_esp.php b/admin/WebConsole/idiomas/php/esp/avisos_esp.php index f54b994f..cfefbee2 100644 --- a/admin/WebConsole/idiomas/php/esp/avisos_esp.php +++ b/admin/WebConsole/idiomas/php/esp/avisos_esp.php @@ -14,5 +14,5 @@ $TbMsg["WARN_NOTESOFMENU"]='NOTAS: Los menús personalizados tienen mayor $TbMsg["WARN_GPT"]='AVISO: Para tabla de particiones GPT es necesario que la primera partición sea tipo EFI <br>y se recomienda un tamaño en torno a 512Mb.'; $TbMsg["WARN_SCHEDULER"]='AVISO: activar calendario de eventos de la BD para habilitar esta propiedad'; $TbMsg["WARN_SOURCE_PATH"]='AVISO: La ruta de origen sólo se utiliza en las sincronizadas tipo directorio.'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/ayuda_esp.php b/admin/WebConsole/idiomas/php/esp/ayuda_esp.php index b45d1da7..bd211813 100644 --- a/admin/WebConsole/idiomas/php/esp/ayuda_esp.php +++ b/admin/WebConsole/idiomas/php/esp/ayuda_esp.php @@ -5,11 +5,12 @@ // Idioma: Español // __________________________________________________ // Mensajes. -$TbMsg=array(); +if (empty ($TbMsg)) $TbMsg=array(); $TbMsg["HELP_TITLE"]='Ayuda'; $TbMsg["MANUAL"]='Manual de usuario'; -$TbMsg["API"]='Documentación de la API'; +$TbMsg["API"]='Documentación de la API del Motor de Clonación'; $TbMsg["CFG"]='Configuración de los clientes'; +$TbMsg["REST"]='Documentación de la API REST'; $TbMsg["CHANGELOG"]='Cambios en la versión:'; $TbMsg["USERMAIL"]='Lista de correos de usuarios'; $TbMsg["WEB"]='Web del proyecto: opengnsys.es'; diff --git a/admin/WebConsole/idiomas/php/esp/barramenu_esp.php b/admin/WebConsole/idiomas/php/esp/barramenu_esp.php index 6d863015..782a60fd 100644 --- a/admin/WebConsole/idiomas/php/esp/barramenu_esp.php +++ b/admin/WebConsole/idiomas/php/esp/barramenu_esp.php @@ -21,5 +21,5 @@ $TbMsg[14]='Buscar'; $TbMsg[15]='Netboot Avanzado'; $TbMsg[16]='Unidad Organizativa'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/boot_grub4dos_esp.php b/admin/WebConsole/idiomas/php/esp/boot_grub4dos_esp.php index 60ac8877..d7d6247c 100644 --- a/admin/WebConsole/idiomas/php/esp/boot_grub4dos_esp.php +++ b/admin/WebConsole/idiomas/php/esp/boot_grub4dos_esp.php @@ -1,53 +1,55 @@ -<?php
-//____________________________________________________________
-//
-// Fichero de idiomas php: aulas_esp.php
-// Idioma: Espaol
-//_____________________________________________________________
- $TbMsg=array();
- $TbMsg[0]='Nuevo';
- $TbMsg[1]='Modificar';
- $TbMsg[2]='Eliminar';
- $TbMsg[3]='Nueva Columna de Arranque';
- $TbMsg[4]='Modificar Columna de Arranque';
- $TbMsg[5]='Eliminar Columna de Arranque';
- $TbMsg[6]='Arranque Creado Correctamente';
- $TbMsg[7]='Arranque Modificado Correctamente';
- $TbMsg[8]='Arranque Eliminado Correctamente';
- $TbMsg[9]='Selecciona Columna Arranque';
- $TbMsg[10]='"Modo Usuario"';
- $TbMsg[11]='"Modo Administracion"';
- $TbMsg[12]='Nombre';
- $TbMsg[13]='Aceptar';
- $TbMsg[14]='Introduzca un Nombre de Columna';
- $TbMsg[15]='"Renombrar"';
- $TbMsg[16]='Cancelar';
- $TbMsg[17]='Plantilla';
- $TbMsg[18]='Sin Plantilla';
- $TbMsg[19]='Comandos';
- $TbMsg[20]='Descripcion';
- $TbMsg[21]='Fichero';
- $TbMsg[22]='##NO-TOCAR-ESTA-LINEA ';
- $TbMsg[23]='NO HAY COLUMNA NUEVA';
- $TbMsg[24]='mbito: Centros';
- $TbMsg[25]='mbito: Grupo de aulas';
- $TbMsg[26]='mbito: Grupo de ordenadores';
- $TbMsg[27]='"Incorporar ordenadores"';
- $TbMsg[28]='"Procedimientos"';
- $TbMsg[29]='"Reservas de aulas"';
- $TbMsg[30]='"Confirmadas"';
- $TbMsg[31]='"Pendientes"';
- $TbMsg[32]='"Denegadas"';
- $TbMsg[33]='"Consola remota"';
- $TbMsg[34]='"Programacin reservas"';
- $TbMsg[35]='"Operadores"';
- $TbMsg[36]='"Eliminar Operador"';
- $TbMsg[37]='"Aadir nuevo Operador"';
- $TbMsg[38]='"Asistentes"';
- $TbMsg[39]='"Eco de Consola"';
- $TbMsg[40]='"NetBoot avanzado"';
- $TbMsg[41]='"Reubicar ordenadores"';
- $TbMsg[42]='Gestión Arranque Avanzado';
- $TbMsg[43]='"Guardar"';
- $TbMsg[44]='Ubicador Ordenadores';
- $TbMsg[45]='Nombre mbito';
+<?php +//____________________________________________________________ +// +// Fichero de idiomas php: boot_grub4dos_esp.php +// Idioma: Español +//_____________________________________________________________ + if (!empty($TbMsg)) $TbMsg=array(); + $TbMsg[0]='Nuevo'; + $TbMsg[1]='Modificar'; + $TbMsg[2]='Eliminar'; + $TbMsg[3]='Nueva Columna de Arranque'; + $TbMsg[4]='Modificar Columna de Arranque'; + $TbMsg[5]='Eliminar Columna de Arranque'; + $TbMsg[6]='Arranque Creado Correctamente'; + $TbMsg[7]='Arranque Modificado Correctamente'; + $TbMsg[8]='Arranque Eliminado Correctamente'; + $TbMsg[9]='Selecciona Columna Arranque'; + $TbMsg[10]='"Modo Usuario"'; + $TbMsg[11]='"Modo Administracion"'; + $TbMsg[12]='Nombre'; + $TbMsg[13]='Aceptar'; + $TbMsg[14]='Introduzca un Nombre de Columna'; + $TbMsg[15]='"Renombrar"'; + $TbMsg[16]='Cancelar'; + $TbMsg[17]='Plantilla'; + $TbMsg[18]='Sin Plantilla'; + $TbMsg[19]='Comandos'; + $TbMsg[20]='Descripcion'; + $TbMsg[21]='Fichero'; + $TbMsg[22]='##NO-TOCAR-ESTA-LINEA '; + $TbMsg[23]='NO HAY COLUMNA NUEVA'; + $TbMsg[24]='Ámbito: Centros'; + $TbMsg[25]='Ámbito: Grupo de aulas'; + $TbMsg[26]='Ámbito: Grupo de ordenadores'; + $TbMsg[27]='"Incorporar ordenadores"'; + $TbMsg[28]='"Procedimientos"'; + $TbMsg[29]='"Reservas de aulas"'; + $TbMsg[30]='"Confirmadas"'; + $TbMsg[31]='"Pendientes"'; + $TbMsg[32]='"Denegadas"'; + $TbMsg[33]='"Consola remota"'; + $TbMsg[34]='"Programación reservas"'; + $TbMsg[35]='"Operadores"'; + $TbMsg[36]='"Eliminar Operador"'; + $TbMsg[37]='"Añadir nuevo Operador"'; + $TbMsg[38]='"Asistentes"'; + $TbMsg[39]='"Eco de Consola"'; + $TbMsg[40]='"NetBoot avanzado"'; + $TbMsg[41]='"Reubicar ordenadores"'; + $TbMsg[42]='Gestión Arranque Avanzado'; + $TbMsg[43]='"Guardar"'; + $TbMsg[44]='Ubicador Ordenadores'; + $TbMsg[45]='Nombre ámbito'; + $TbMsg["UEFI"]='AVISO: Hay plantillas PXE que sólo son compatibles con un tipo de firmware, uefi o bios.<br>Al elegir estas plantillas la otra opción quedará configurada por defecto'; + $TbMsg["ERR_DUPLICADO"]='ERROR: El nombre o la descripción de la plantilla están duplicados'; diff --git a/admin/WebConsole/idiomas/php/esp/buscar_esp.php b/admin/WebConsole/idiomas/php/esp/buscar_esp.php index 82281b92..a7855fde 100644 --- a/admin/WebConsole/idiomas/php/esp/buscar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/buscar_esp.php @@ -17,5 +17,5 @@ $TbMsg["SEARCH_NOMATCHES"]="No se encuentran resultados"; $TbMsg["SEARCH_NOVALUE"]="Debe introducir un valor para el criterio de búsqueda"; $TbMsg["SEARCH_PROFESSOR"]="Ordenadores de profesor"; $TbMsg["SEARCH_NOREPO"]="Ordenadores sin repositorio"; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/colasacciones_esp.php b/admin/WebConsole/idiomas/php/esp/colasacciones_esp.php index 61d30f59..2872a44a 100644 --- a/admin/WebConsole/idiomas/php/esp/colasacciones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/colasacciones_esp.php @@ -83,4 +83,4 @@ $TbMsg=array(); $TbMsg[59]='Ámbito:'; $TbMsg[60]='Todos'; $TbMsg[61]='Todas'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/colasreservas_esp.php b/admin/WebConsole/idiomas/php/esp/colasreservas_esp.php index 47cc462e..8cc63c31 100644 --- a/admin/WebConsole/idiomas/php/esp/colasreservas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/colasreservas_esp.php @@ -50,4 +50,3 @@ $TbMsg=array(); $TbMsg[28]="Tarea previa"; $TbMsg[29]="Trabajo previo"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/comandos/apagar_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/apagar_esp.php index ed52489e..8cd1519c 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/apagar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/apagar_esp.php @@ -13,4 +13,3 @@ $TbMsg[5]='Apagar ordenadores'; $TbMsg[6]='Ámbito'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/comandos/arrancar_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/arrancar_esp.php index 0fdae000..017f0a38 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/arrancar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/arrancar_esp.php @@ -17,4 +17,3 @@ $TbMsg[9]='Unicast'; $TbMsg[10]='Método de arranque'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/comandos/comando_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/comando_esp.php index 80adc851..dfe93134 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/comando_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/comando_esp.php @@ -13,4 +13,4 @@ $TbMsg[5]='Apagar ordenadores'; $TbMsg[6]='Ámbito'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/configurar_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/configurar_esp.php index 49bfc20b..a0f93e72 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/configurar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/configurar_esp.php @@ -46,4 +46,4 @@ $TbMsg[34]='Perfil software'; $TbMsg["HD"]='Disco'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/conmutar_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/conmutar_esp.php index 67ab7a7c..2bf01b26 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/conmutar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/conmutar_esp.php @@ -13,4 +13,3 @@ $TbMsg[5]='Conmutar ordenadores'; $TbMsg[6]='Ámbito'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/comandos/crearimagenbasica_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/crearimagenbasica_esp.php index 5ee1bc70..4ed4cfb2 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/crearimagenbasica_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/crearimagenbasica_esp.php @@ -22,4 +22,4 @@ $TbMsg[14]='Copiar Imagen en cache'; $TbMsg[15]='Borrarla previamente de la cache'; $TbMsg[16]='No borrar archivos en destino'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/crearperfilsoftware_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/crearperfilsoftware_esp.php index fa67edff..82b51ed4 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/crearperfilsoftware_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/crearperfilsoftware_esp.php @@ -17,4 +17,4 @@ $TbMsg[9]='Nombre S.O.'; $TbMsg[10]='Descripción de la Imagen '; $TbMsg[11]='Repositorio de destino'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/crearsoftincremental_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/crearsoftincremental_esp.php index d5778d84..8a286109 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/crearsoftincremental_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/crearsoftincremental_esp.php @@ -22,4 +22,4 @@ $TbMsg[14]='Copiar Incremental en cache'; $TbMsg[15]='Borrarla previamente de la cache'; $TbMsg[16]='No borrar archivos en destino'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php index 5f823ab2..ad4db994 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php @@ -58,5 +58,5 @@ $TbMsg["WCRP35"]='Elige el metodo de transferencia'; $TbMsg["WCRP36"]='Elige herramienta de clonación:'; $TbMsg["WCRP37"]='Elige compresor para la herramienta de clonación:'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagencache_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagencache_esp.php index 2107a4f8..557785c2 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagencache_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagencache_esp.php @@ -26,4 +26,4 @@ $TbMsg[18]='Tamaño de la imagen disponible si Repositorio y Servidor Web alojados en el mismo Servidor'; $TbMsg[19]='Tipo'; $TbMsg["CONFIG_NOCONFIG"]='Sin configuración: cliente no conectado al servidor.'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagenrepo_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagenrepo_esp.php index d63711a9..e9b9950f 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagenrepo_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagenrepo_esp.php @@ -39,4 +39,4 @@ $TbMsg[31]='Archivo'; $TbMsg[32]='Directorio'; $TbMsg[33]='AVISO: La imagen está situada en un directorio que no corresponde a la unidad organizativa.'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/enviarmensaje_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/enviarmensaje_esp.php index 1e24f37f..1bb76fad 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/enviarmensaje_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/enviarmensaje_esp.php @@ -20,5 +20,5 @@ $TbMsg["OGAGENT"]="AVISO: Sólo se puede utilizar en los equipos que se haya iniciado la sesión <br>y tengan instalado en nuevo agente de OpenGnsys."; $TbMsg["OPTION"]="AVISO: El nuevo agente, en esta versión, no permite utilizar la cola de acciones."; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/gestor_ejecutarscripts_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/gestor_ejecutarscripts_esp.php index 1b8386e5..f33d2e1f 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/gestor_ejecutarscripts_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/gestor_ejecutarscripts_esp.php @@ -10,4 +10,3 @@ $TbMsg[3]='"ATENCIÓN: El fichero no tiene la extensión .rbc"'; $TbMsg[4]='"ATENCIÓN: El fichero no contiene código Rembo-C para ejecutar"'; $TbMsg[5]='"ATENCIÓN: Hay algún problema para salvar el fichero de script"'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/comandos/iniciarsesion_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/iniciarsesion_esp.php index e0ddaf0e..10e664bc 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/iniciarsesion_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/iniciarsesion_esp.php @@ -16,4 +16,4 @@ $TbMsg[8]='Par'; $TbMsg[9]='Nombre S.O.'; $TbMsg[10]='Nombre de la Imagen '; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/inventariohardware_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/inventariohardware_esp.php index ee14ae66..6d2394c0 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/inventariohardware_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/inventariohardware_esp.php @@ -13,4 +13,4 @@ $TbMsg[5]='Inventario Hardware'; $TbMsg[6]='Ámbito'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/inventariosoftware_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/inventariosoftware_esp.php index b26bada7..574bf332 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/inventariosoftware_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/inventariosoftware_esp.php @@ -15,4 +15,4 @@ $TbMsg[7]='Datos a suministrar'; $TbMsg[8]='Par'; $TbMsg[9]='Nombre S.O.'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php index 391a39e4..3ab35fe2 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php @@ -25,5 +25,5 @@ $TbMsg["COMMAND_RestaurarSoftIncremental"]="Restaurar Imagen Incremental"; $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/comandos/opcionesacciones_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/opcionesacciones_esp.php index 469b7bbc..d2f123ed 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/opcionesacciones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/opcionesacciones_esp.php @@ -18,4 +18,3 @@ $TbMsgAux[10]='Guardar como una tarea nueva' ; $TbMsgAux[11]='Incluir en una tarea existente' ; $TbMsgAux[12]='Orden de ejecución'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/comandos/particionaryformatear_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/particionaryformatear_esp.php index 55d0e2f6..71a4acce 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/particionaryformatear_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/particionaryformatear_esp.php @@ -23,4 +23,3 @@ $TbMsg[15]='Ocultar'; $TbMsg[16]='Mostrar'; $TbMsg[17]='¡¡ Espacio libre !!'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/comandos/reiniciar_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/reiniciar_esp.php index f523fa5f..8acb26c1 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/reiniciar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/reiniciar_esp.php @@ -13,4 +13,3 @@ $TbMsg[5]='Reiniciar ordenadores'; $TbMsg[6]='Ámbito'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/comandos/rembooffline_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/rembooffline_esp.php index 1c437219..1caefb80 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/rembooffline_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/rembooffline_esp.php @@ -13,4 +13,3 @@ $TbMsg[5]='Activar Rembo OffLine'; $TbMsg[6]='Ámbito'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagen_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagen_esp.php index 7c05b974..d0cd16c7 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagen_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagen_esp.php @@ -42,4 +42,4 @@ $TbMsg[32]='Tamaño de partición'; $TbMsg[33]='Nombre de la Imagen '; $TbMsg[34]='Perfil software'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagenbasica_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagenbasica_esp.php index 598351fe..d34adfd5 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagenbasica_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagenbasica_esp.php @@ -50,4 +50,4 @@ $TbMsg[39]='Método'; $TbMsg[40]='Unicast'; $TbMsg[41]='Multicast'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/restaurarsoftincremental_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/restaurarsoftincremental_esp.php index e7b63c0a..fb2f9999 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/restaurarsoftincremental_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/restaurarsoftincremental_esp.php @@ -48,4 +48,4 @@ $TbMsg[37]='Borrarla previamente de la cache'; $TbMsg[38]='Software Incremental'; $TbMsg[39]='No borrar archivos en destino'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/comandos/tomaconfiguracion_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/tomaconfiguracion_esp.php index a11a381a..2316c610 100644 --- a/admin/WebConsole/idiomas/php/esp/comandos/tomaconfiguracion_esp.php +++ b/admin/WebConsole/idiomas/php/esp/comandos/tomaconfiguracion_esp.php @@ -13,4 +13,3 @@ $TbMsg[5]='Tomar configuración'; $TbMsg[6]='Ámbito'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php b/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php index 4571d8ee..ac830a8d 100644 --- a/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php @@ -60,5 +60,5 @@ $TbMsg[44]='Equipo sin perfil de hardware'; $TbMsg[45]='Agregue perfil para obtener datos'; $TbMsg[495]='Fecha/Caché'; $TbMsg[4951]='Caché libre'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/conmutar_esp.php b/admin/WebConsole/idiomas/php/esp/conmutar_esp.php index cdb455e9..3aab0b93 100644 --- a/admin/WebConsole/idiomas/php/esp/conmutar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/conmutar_esp.php @@ -7,4 +7,3 @@ $TbMsg=array(); $TbMsg[0]='Este ámbito ha conmutado correctamente'; $TbMsg[1]='ATENCIÓN: Ha habido algún problema al conmutar el ámbito'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/consolaremota_esp.php b/admin/WebConsole/idiomas/php/esp/consolaremota_esp.php index c8f54c24..5e42f928 100644 --- a/admin/WebConsole/idiomas/php/esp/consolaremota_esp.php +++ b/admin/WebConsole/idiomas/php/esp/consolaremota_esp.php @@ -21,4 +21,4 @@ $TbMsg[13]='ATENCIÓN.- Ha elegido un ámbito de aplicación para la consola remota distinto al de "ordenador". <BR>Para visulizar el eco de cualquier cliente pulse sobre él con el botón secundario y elija "Eco de consola"; <BR>Se abrirá una ventana que se referescará automáticamente donde podrá hacer un seguiento del comando/script introducido'; $TbMsg[14]='...Espere por favor, se está enviando el código del script'; $TbMsg[15]='...El código del script se ha enviado, para ver la salida de cualquier ordenador elija "Eco de Consola"'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/descargas_esp.php b/admin/WebConsole/idiomas/php/esp/descargas_esp.php index fa4898ff..0c210427 100644 --- a/admin/WebConsole/idiomas/php/esp/descargas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/descargas_esp.php @@ -10,4 +10,4 @@ $TbMsg['DOWNLOADS']="Descargas disponibles"; $TbMsg['NOFILES']="No hay ficheros disponibles"; // Aviso: no dejar ningún carácter fuera del código PHP. -?> + diff --git a/admin/WebConsole/idiomas/php/esp/ecoremoto_esp.php b/admin/WebConsole/idiomas/php/esp/ecoremoto_esp.php index d291a1ec..70529a47 100644 --- a/admin/WebConsole/idiomas/php/esp/ecoremoto_esp.php +++ b/admin/WebConsole/idiomas/php/esp/ecoremoto_esp.php @@ -18,4 +18,4 @@ $TbMsg[10]='ATENCIÓN: Ha habido algún problema al enviar una petición de eco consola remota a este ámbito'; $TbMsg[11]='... espere por favor.'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/ejecutaracciones_esp.php b/admin/WebConsole/idiomas/php/esp/ejecutaracciones_esp.php index 7007ecd0..c76d7773 100644 --- a/admin/WebConsole/idiomas/php/esp/ejecutaracciones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/ejecutaracciones_esp.php @@ -16,4 +16,4 @@ $TbMsg[8]='Procedimientos'; $TbMsg[9]='"Ejecutar procedimiento"'; $TbMsg[10]='"Incluir como autoexec"'; - ?> + diff --git a/admin/WebConsole/idiomas/php/esp/estados_esp.php b/admin/WebConsole/idiomas/php/esp/estados_esp.php index 75adfdf4..cf911251 100644 --- a/admin/WebConsole/idiomas/php/esp/estados_esp.php +++ b/admin/WebConsole/idiomas/php/esp/estados_esp.php @@ -17,5 +17,5 @@ $TbMsg["STATUS_LNXS"]="Sesión GNU/Linux"; $TbMsg["STATUS_OSX"]="macOS"; $TbMsg["STATUS_WIN"]="Windows"; $TbMsg["STATUS_WINS"]="Sesión Windows"; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/gestor_ordenadores_esp.php b/admin/WebConsole/idiomas/php/esp/gestor_ordenadores_esp.php index 2946a0c4..95330ca5 100644 --- a/admin/WebConsole/idiomas/php/esp/gestor_ordenadores_esp.php +++ b/admin/WebConsole/idiomas/php/esp/gestor_ordenadores_esp.php @@ -6,5 +6,5 @@ //______________________________________________________________ $TbMsg=array(); $TbMsg["DUPLICADO"]="Error al insertar el ordenador, se han encontrado datos duplicados: "; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/hardwares_esp.php b/admin/WebConsole/idiomas/php/esp/hardwares_esp.php index 070cbe82..fca4ae44 100644 --- a/admin/WebConsole/idiomas/php/esp/hardwares_esp.php +++ b/admin/WebConsole/idiomas/php/esp/hardwares_esp.php @@ -26,5 +26,5 @@ $TbMsg[18]='"Tipos de hardware"'; $TbMsg[19]='"Componentes hardware"'; $TbMsg[20]='"Perfiles hardware"'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/iconos_esp.php b/admin/WebConsole/idiomas/php/esp/iconos_esp.php index ef11d99c..d25dfe9d 100644 --- a/admin/WebConsole/idiomas/php/esp/iconos_esp.php +++ b/admin/WebConsole/idiomas/php/esp/iconos_esp.php @@ -55,5 +55,5 @@ $TbMsg["Particionar"]='Particionar'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/imagenincremental_esp.php b/admin/WebConsole/idiomas/php/esp/imagenincremental_esp.php index 8e934497..c0ae8e77 100644 --- a/admin/WebConsole/idiomas/php/esp/imagenincremental_esp.php +++ b/admin/WebConsole/idiomas/php/esp/imagenincremental_esp.php @@ -10,4 +10,3 @@ $TbMsg[2]='Imagen'; $TbMsg[3]='Nombre del software incremental'; $TbMsg[4]='(*)Para incluir algún software incremental en esta imagen debe hacer click sobre la casilla de verificación correspondiente.'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/inclusionacciones_esp.php b/admin/WebConsole/idiomas/php/esp/inclusionacciones_esp.php index fd834a03..c46969e0 100644 --- a/admin/WebConsole/idiomas/php/esp/inclusionacciones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/inclusionacciones_esp.php @@ -18,4 +18,4 @@ $TbMsg[8]='Procedimientos disponibles'; $TbMsg[9]='Tareas disponibles'; $TbMsg[10]='Parámetros'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/incorporaordenadores_esp.php b/admin/WebConsole/idiomas/php/esp/incorporaordenadores_esp.php index 533490ae..c339f990 100644 --- a/admin/WebConsole/idiomas/php/esp/incorporaordenadores_esp.php +++ b/admin/WebConsole/idiomas/php/esp/incorporaordenadores_esp.php @@ -13,4 +13,4 @@ $TbMsg[4]='ATENCIÓN: Ha ocurrido alǵun problema en el proceso de incorporación de ordenadores'; $TbMsg[5]='ATENCIÓN: Se han intentado incorporar ordenadores que ya existen'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/incrementalcomponente_soft_esp.php b/admin/WebConsole/idiomas/php/esp/incrementalcomponente_soft_esp.php index ae73e175..6ddce12b 100644 --- a/admin/WebConsole/idiomas/php/esp/incrementalcomponente_soft_esp.php +++ b/admin/WebConsole/idiomas/php/esp/incrementalcomponente_soft_esp.php @@ -10,4 +10,3 @@ $TbMsg[2]='Software incremental'; $TbMsg[3]='Nombre del componente'; $TbMsg[4]='(*)Para incluir algún componente en este software incremental debe hacer click sobre la casilla de verificación correspondiente.'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/informacion_acciones_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_acciones_esp.php index 00d0b0b0..4f1c52f1 100644 --- a/admin/WebConsole/idiomas/php/esp/informacion_acciones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/informacion_acciones_esp.php @@ -12,4 +12,4 @@ $TbMsg[4]='Información sobre Tareas'; $TbMsg[5]='Información'; $TbMsg[6]='Sin parámetros'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/informacion_imagenes_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_imagenes_esp.php index 2ff8c16d..4618a19a 100644 --- a/admin/WebConsole/idiomas/php/esp/informacion_imagenes_esp.php +++ b/admin/WebConsole/idiomas/php/esp/informacion_imagenes_esp.php @@ -15,4 +15,4 @@ $TbMsg[6]='Perfil Software'; $TbMsg[7]='Ordenadores con esta imagen'; $TbMsg[8]='Partición'; $TbMsg[9]='Comentarios'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/informacion_incrementales_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_incrementales_esp.php index e72f55ea..4f01f74b 100644 --- a/admin/WebConsole/idiomas/php/esp/informacion_incrementales_esp.php +++ b/admin/WebConsole/idiomas/php/esp/informacion_incrementales_esp.php @@ -12,4 +12,3 @@ $TbMsg[4]='Componentes software'; $TbMsg[5]='Perfiles Combinables'; $TbMsg[6]='Perfiles Hardware soportados'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/informacion_menus_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_menus_esp.php index 1c51b61d..ca723efc 100644 --- a/admin/WebConsole/idiomas/php/esp/informacion_menus_esp.php +++ b/admin/WebConsole/idiomas/php/esp/informacion_menus_esp.php @@ -28,4 +28,4 @@ $TbMsg[20]='Código del item'; $TbMsg[21]='Ordenadores con este menú'; $TbMsg[22]='Items'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/informacion_perfileshard_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_perfileshard_esp.php index c5f034cb..1e3c435b 100644 --- a/admin/WebConsole/idiomas/php/esp/informacion_perfileshard_esp.php +++ b/admin/WebConsole/idiomas/php/esp/informacion_perfileshard_esp.php @@ -16,4 +16,4 @@ $TbMsg[8]='Comentarios'; $TbMsg[9]='Partición'; $TbMsg[10]='Comentarios'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/informacion_perfilessoft_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_perfilessoft_esp.php index 48ff637c..332f7cb0 100644 --- a/admin/WebConsole/idiomas/php/esp/informacion_perfilessoft_esp.php +++ b/admin/WebConsole/idiomas/php/esp/informacion_perfilessoft_esp.php @@ -14,4 +14,4 @@ $TbMsg[6]='Componentes software'; $TbMsg[7]='Ordenades con este perfil'; $TbMsg[8]='Comentarios'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/informacion_procedimientos_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_procedimientos_esp.php index 52774eaa..13c112a1 100644 --- a/admin/WebConsole/idiomas/php/esp/informacion_procedimientos_esp.php +++ b/admin/WebConsole/idiomas/php/esp/informacion_procedimientos_esp.php @@ -8,4 +8,3 @@ $TbMsg[0]='Parámetros de los Comandos del Procedimiento'; $TbMsg[1]='Parámetro'; $TbMsg[2]='Valor'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/informacion_repositorio_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_repositorio_esp.php index ccfd489d..0d8601bb 100644 --- a/admin/WebConsole/idiomas/php/esp/informacion_repositorio_esp.php +++ b/admin/WebConsole/idiomas/php/esp/informacion_repositorio_esp.php @@ -15,5 +15,5 @@ $TbMsg["IMGTYPE2"]='sincronizada bísica'; $TbMsg["IMGTYPE3"]='sincronizada incremental'; $TbMsg[6]='Ordenadores asigandos'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/informacion_tareas_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_tareas_esp.php index 2e27a880..7651deb4 100644 --- a/admin/WebConsole/idiomas/php/esp/informacion_tareas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/informacion_tareas_esp.php @@ -10,4 +10,3 @@ $TbMsg[2]='Valor'; $TbMsg[3]='Ámbito'; $TbMsg[4]='Nombre'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/menucliente_esp.php b/admin/WebConsole/idiomas/php/esp/menucliente_esp.php index 8a532162..5248ca80 100644 --- a/admin/WebConsole/idiomas/php/esp/menucliente_esp.php +++ b/admin/WebConsole/idiomas/php/esp/menucliente_esp.php @@ -9,4 +9,4 @@ $TbMsg[1]='"Dirección IP"'; $TbMsg[2]='NO SE HA DETECTADO NINGÚN MENÚ PARA ESTE CLIENTE'; $TbMsg[3]='Apagar el equipo'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/menus_esp.php b/admin/WebConsole/idiomas/php/esp/menus_esp.php index 5f7acc40..4b45117b 100644 --- a/admin/WebConsole/idiomas/php/esp/menus_esp.php +++ b/admin/WebConsole/idiomas/php/esp/menus_esp.php @@ -16,4 +16,4 @@ $TbMsg[8]='"Eliminar menú"'; $TbMsg[9]='"Menús"'; $TbMsg[10]='"Gestionar Items"'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php b/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php index 7d3d8625..0ffdb4da 100644 --- a/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php +++ b/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php @@ -44,4 +44,4 @@ $TbMsg=array(); $TbMsg[34]='El proceso de restauración de imagen básica ha terminado correctamente'; $TbMsg[35]='ATENCIÓN, ha habido algún error en el proceso de restauración de imagen básica'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/nada_esp.php b/admin/WebConsole/idiomas/php/esp/nada_esp.php index 24ffedbe..fd77e246 100644 --- a/admin/WebConsole/idiomas/php/esp/nada_esp.php +++ b/admin/WebConsole/idiomas/php/esp/nada_esp.php @@ -12,5 +12,23 @@ $TbMsg[4]="Versión Sistema"; $TbMsg[5]="Navegador"; $TbMsg[6]="Versión Navegador"; + $TbMsg["TIP"]="Consejo del día"; -?>
\ No newline at end of file + // Los mensajes pueden tener imágenes asociadas llamadas images/tipOfDay_N.png + $TipOfDay=Array(); + $TipOfDay[0]="El cliente de OpenGnsys puede restaurar y crear imágenes en todos los repositorios definidos en la unidad organizativa."; + $TipOfDay[1]="OpenGnsys permite gestionar equipos UEFI desde la versión 1.1.1 (Espeto)."; + $TipOfDay[2]="<a href='https://opengnsys.es' class='help_menu' target='blank'>Nueva web de OpenGnsys</a> dirigida a los usuarios, donde encontrarán fácilmente: \n". + "<ul>\n". + " <li>Descarga de la última versión de Opengnsys</li>\n". + " <li>Manual de usuario</li>\n". + " <li>Documentación de la instalación</li>\n". + " <li>Casos de éxito</li>\n". + "</ul>\n<br>\n"; + $TipOfDay[3]="OpenGnsys permite instalar varios ogLive, pudiendo seleccionar en cada equipo el que mejor reconozca su hardware."; + $TipOfDay[4]="OpenGnsys permite independizar el alojamiento de las imágenes de distintas unidades organizativas dentro de un mismo repositorio."; + $TipOfDay[5]="Para facilitar la migración de un servidor existen scripts para exportar e importar los datos de OpenGnsys."; + $TipOfDay[6]="RemotePC conjuga OpenGnsys con UDS para ofrecer acceso remoto a los equipos de las aulas fuera del horario de docencia."; + $TipOfDay[7]="<b>Curso Online</b><p>Todos los miembros de organizaciones que estén federadas en el Servicio de Identidad de RedIRIS pueden acceder al curso 'Curso Básico de OpenGnsys 1.1.0' en la <a href='https://docencia-net.cv.uma.es' class='help_menu' target='blank'>Plataforma de Formación del Grupo Docencia-Net.</p>"; + $TipOfDay[8]="El nuevo agente de OpenGnsys para el sistema operativo permite mandar mensajes a los usuarios y ejecutar comandos sobre el equipo."; + $TipOfDay[9]="En la web de OpenGnsys puedes encontrar <a href='https://opengnsys.es/trac/wiki/EjemploPracticos' class='help_menu' target='blank'>ejemplos prácticos y recetas</a>, como por ejemplo la postconfiguración necesario para la activación de Windows con KMS."; diff --git a/admin/WebConsole/idiomas/php/esp/perfilcomponente_hard_esp.php b/admin/WebConsole/idiomas/php/esp/perfilcomponente_hard_esp.php index e40db5fa..28841d57 100644 --- a/admin/WebConsole/idiomas/php/esp/perfilcomponente_hard_esp.php +++ b/admin/WebConsole/idiomas/php/esp/perfilcomponente_hard_esp.php @@ -10,4 +10,3 @@ $TbMsg[2]='Perfil hardware'; $TbMsg[3]='Nombre del component e'; $TbMsg[4]='(*)Para incluir algún componente en este perfil debe hacer click sobre la casilla de verificación correspondiente.'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/perfilcomponente_soft_esp.php b/admin/WebConsole/idiomas/php/esp/perfilcomponente_soft_esp.php index d70a6dfd..24ee8b01 100644 --- a/admin/WebConsole/idiomas/php/esp/perfilcomponente_soft_esp.php +++ b/admin/WebConsole/idiomas/php/esp/perfilcomponente_soft_esp.php @@ -10,4 +10,3 @@ $TbMsg[2]='Perfil software'; $TbMsg[3]='Nombre del componente'; $TbMsg[4]='(*)Para incluir algún componente en este perfil debe hacer click sobre la casilla de verificación correspondiente.'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/pintaParticiones_esp.php b/admin/WebConsole/idiomas/php/esp/pintaParticiones_esp.php index 889eef9b..3fc9a6a7 100644 --- a/admin/WebConsole/idiomas/php/esp/pintaParticiones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/pintaParticiones_esp.php @@ -58,5 +58,5 @@ $TbMsg["SEND"]='Protocolo'; $TbMsg["WARN_PROTOCOL"]='La opción "protocolo" sólo se utiliza en las sincronizadas tipo archivo la primera vez que se envía la imagen a caché. <br>En otro caso el protocolo es RSYNC.'; $TbMsg["WARN_DIFFIMAGE"]='Hay una nueva versión de la imagen (se muestra la diferencia de revisiones).'; $TbMsg["WARN_DIFFDISKSIZE"]='ATENCIÓN: no se pueden particionar grupos de ordenadores con distinto tamaño de disco.<br>Marcar la opción de "Desagrupar por tamaño de partición" y pulsar "Aceptar" en el menú superior para aplicar esta operación adecuadamente.'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/procedimientoscomandos_esp.php b/admin/WebConsole/idiomas/php/esp/procedimientoscomandos_esp.php index ec630b99..2f60230f 100644 --- a/admin/WebConsole/idiomas/php/esp/procedimientoscomandos_esp.php +++ b/admin/WebConsole/idiomas/php/esp/procedimientoscomandos_esp.php @@ -13,4 +13,3 @@ $TbMsg[5]='Parámetro'; $TbMsg[6]='Valor'; $TbMsg[7]='(*)Para excluir algún comando de este procedimiento debe hacer click sobre la casilla de verificación correspondiente'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/programaciones_esp.php b/admin/WebConsole/idiomas/php/esp/programaciones_esp.php index 3447d1e8..0033ec3f 100644 --- a/admin/WebConsole/idiomas/php/esp/programaciones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/programaciones_esp.php @@ -15,4 +15,3 @@ $TbMsg=array(); $TbMsg[0]="Programaciones"; $TbMsg[1]="Suspender temporalmente todos los bloques programados"; $TbMsg[2]="Descripción del bloque"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/programacionesaulas_esp.php b/admin/WebConsole/idiomas/php/esp/programacionesaulas_esp.php index fe53ba81..527f590c 100644 --- a/admin/WebConsole/idiomas/php/esp/programacionesaulas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/programacionesaulas_esp.php @@ -51,4 +51,3 @@ $TbMsg=array(); $TbMsg[29]="Trabajo previo"; $TbMsg[30]='Grupo de reservas'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/programacionesreservas_esp.php b/admin/WebConsole/idiomas/php/esp/programacionesreservas_esp.php index 483472a0..d09e295a 100644 --- a/admin/WebConsole/idiomas/php/esp/programacionesreservas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/programacionesreservas_esp.php @@ -50,4 +50,3 @@ $TbMsg=array(); $TbMsg[29]="Trabajo previo"; $TbMsg[30]="Datos Reserva"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php index 1685d60f..d811f04b 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php @@ -59,5 +59,5 @@ $TbMsg['COMM_REMOTEACCESS']="permitir gestión de acceso remoto a los orde $TbMsg['COMM_DEFOGLIVE']="Asignado por el administrador"; // Ticket-816 PCprofesor $TbMsg['PROP_PROFCOMPUTER']="Ordenador de profesor"; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_centros_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_centros_esp.php index 9ae392d5..348ffe1e 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_centros_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_centros_esp.php @@ -14,4 +14,4 @@ $TbMsg[5]="Nombre de la unidad"; $TbMsg[6]="Comentarios"; $TbMsg['DIR']="Directorio"; $TbMsg['MSG_OGUNIT']="Si se elige separar por unidades organizativas, el directorio <b>/opt/opengnsys/images</b><br> debe contener un subdirectorio llamado como el directorio indicado."; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_componentehardwares_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_componentehardwares_esp.php index e567637a..5ab7ad36 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_componentehardwares_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_componentehardwares_esp.php @@ -12,4 +12,3 @@ $TbMsg[3]="Eliminar"; $TbMsg[4]="Gestión Componentes Hardware"; $TbMsg[5]="Nombre"; $TbMsg[6]="Tipo de hardware"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_componentesoftwares_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_componentesoftwares_esp.php index 7c03d6e8..20ce10a5 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_componentesoftwares_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_componentesoftwares_esp.php @@ -13,4 +13,3 @@ $TbMsg[4]="Gestión Componentes Software"; $TbMsg[5]="Nombre"; $TbMsg[6]="Tipo de Software"; $TbMsg[7]="Tipo de S.O."; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_entidades_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_entidades_esp.php index 2136aa78..b292525b 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_entidades_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_entidades_esp.php @@ -13,4 +13,4 @@ $TbMsg[4]="Gestión Entidades"; $TbMsg[5]="Nombre de la Entidad"; $TbMsg[6]="Comentarios"; $TbMsg['OGUNIT']="Separar unidades organizativas"; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_entornos_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_entornos_esp.php index 3366d1b1..fec58009 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_entornos_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_entornos_esp.php @@ -21,4 +21,4 @@ $TbMsg[12]=""; $TbMsg[13]=""; $TbMsg[14]=""; $TbMsg[15]=""; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_grupos_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_grupos_esp.php index 0cb12716..45a580e4 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_grupos_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_grupos_esp.php @@ -31,4 +31,3 @@ $TbMsg[22]="Grupos de Ordenadores"; $TbMsg[23]="Grupos de Imágenes Monolíticas"; $TbMsg[24]="Grupos de Imágenes Básicas"; $TbMsg[25]="Grupos de Imágenes Incrementales"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_imagenes_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_imagenes_esp.php index 058f7512..b9e4972d 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_imagenes_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_imagenes_esp.php @@ -32,4 +32,4 @@ $TbMsg[22]="Introduzca otra Descripción"; $TbMsg['PROP_OS']="Sistema operativo"; $TbMsg['PROP_REMOTEACCESS']="Acceso remoto"; $TbMsg['COMM_REMOTEACCESS']="permitir gestión de acceso remoto a los ordenadores"; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_menus_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_menus_esp.php index 7435bb5a..6bf04065 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_menus_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_menus_esp.php @@ -22,4 +22,4 @@ $TbMsg[15]="URL menú personalizado"; $TbMsg[17]="Resolución de pantalla"; $TbMsg[18]="Imagen de fondo"; $TbMsg["PROP_DEFAULT"]="Detectada por defecto"; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_ordenadorestandar_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_ordenadorestandar_esp.php index a46a21f5..ec6c58e7 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_ordenadorestandar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_ordenadorestandar_esp.php @@ -18,4 +18,4 @@ $TbMsg[9]='(*) Para modificar un ordenador con cierto dato, en esta aula, debe i $TbMsg[10]="(**)Si se trata de ordenadores nuevos con una configuración por defecto, pero no quiere modificar los ordenadores ya existentes debe introducir un valor mayor que cero."; $TbMsg[11]="Tamaño Caché"; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_perfilhardwares_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_perfilhardwares_esp.php index 933b2c7f..ebb319a4 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_perfilhardwares_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_perfilhardwares_esp.php @@ -16,5 +16,5 @@ $TbMsg["HARD_COMPUTERS"]="Ordenadores"; $TbMsg["HARD_WINBOOT"]="Arranque Windows"; $TbMsg["HARD_REBOOT"]="Reinicio (reboot)"; $TbMsg["HARD_KEXEC"]="Directo (kexec)"; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_perfilsoftwares_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_perfilsoftwares_esp.php index b46fcc9d..63a6112c 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_perfilsoftwares_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_perfilsoftwares_esp.php @@ -12,4 +12,3 @@ $TbMsg[3]="Eliminar"; $TbMsg[4]="Gestión de Perfiles software"; $TbMsg[5]="Nombre"; $TbMsg[6]="Comentarios"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_procedimientos_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_procedimientos_esp.php index f0ffdfc8..e14bcfdc 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_procedimientos_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_procedimientos_esp.php @@ -12,4 +12,3 @@ $TbMsg[3]="Eliminar"; $TbMsg[4]="Gestión Procedimientos"; $TbMsg[5]="Nombre Procedimiento"; $TbMsg[6]="Comentarios"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_reservas_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_reservas_esp.php index 49abddd6..5214903b 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_reservas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_reservas_esp.php @@ -27,4 +27,3 @@ $TbMsg[18]="(Sin acción anticipada)"; $TbMsg[19]="Tarea previa"; $TbMsg[20]="Trabajo previo"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_tareas_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_tareas_esp.php index cb62e5c8..ecd1309c 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_tareas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_tareas_esp.php @@ -20,4 +20,3 @@ $TbMsg[11]="Grupos de Aulas"; $TbMsg[12]="Aulas"; $TbMsg[13]="Grupos de Ordenadores"; $TbMsg[14]="Ordenadores"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_tipohardwares_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_tipohardwares_esp.php index aa1a5668..999f058d 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_tipohardwares_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_tipohardwares_esp.php @@ -12,4 +12,3 @@ $TbMsg[3]="Eliminar"; $TbMsg[4]="Gestión Tipos de Hardware"; $TbMsg[5]="Nombre"; $TbMsg[6]="icono"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_universidades_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_universidades_esp.php index e96e4d53..52e4ff31 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_universidades_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_universidades_esp.php @@ -12,4 +12,3 @@ $TbMsg[3]="Eliminar"; $TbMsg[4]="Gestión Universidades"; $TbMsg[5]="Nombre"; $TbMsg[6]="Comentarios"; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_usuarios_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_usuarios_esp.php index 2014eaa9..90ec0572 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_usuarios_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_usuarios_esp.php @@ -26,4 +26,4 @@ $TbMsg[17]="https://opengnsys.es/trac/wiki/ModificarUsuarios"; $TbMsg[18]="Confirmar password"; $TbMsg['APIKEY']="API key"; $TbMsg['NEWAPIKEY']="La API key se generará automáticamente al insertar el usuario."; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/purgar_esp.php b/admin/WebConsole/idiomas/php/esp/purgar_esp.php index db6c41f8..8927ef40 100644 --- a/admin/WebConsole/idiomas/php/esp/purgar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/purgar_esp.php @@ -7,4 +7,3 @@ $TbMsg=array(); $TbMsg[0]='Este ámbito se ha purgado correctamente'; $TbMsg[1]='ATENCIÓN: Ha habido algún problema al purgar el ámbito'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/repositorios_esp.php b/admin/WebConsole/idiomas/php/esp/repositorios_esp.php index e5d9919b..49008a1c 100644 --- a/admin/WebConsole/idiomas/php/esp/repositorios_esp.php +++ b/admin/WebConsole/idiomas/php/esp/repositorios_esp.php @@ -21,4 +21,4 @@ $TbMsg[13]='""'; $TbMsg[14]='"Repositorios"'; $TbMsg[15]='"Iconos"'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/reservas_esp.php b/admin/WebConsole/idiomas/php/esp/reservas_esp.php index 2fdc7fb7..f40c4786 100644 --- a/admin/WebConsole/idiomas/php/esp/reservas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/reservas_esp.php @@ -17,4 +17,4 @@ $TbMsg[9]='"Reservas"'; $TbMsg[10]='"Programaciones"'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/softwares_esp.php b/admin/WebConsole/idiomas/php/esp/softwares_esp.php index 43a759cf..f876f20e 100644 --- a/admin/WebConsole/idiomas/php/esp/softwares_esp.php +++ b/admin/WebConsole/idiomas/php/esp/softwares_esp.php @@ -34,4 +34,3 @@ $TbMsg[26]='"Información Incremental"'; $TbMsg[27]='"Mover incremental"'; $TbMsg[28]='"Eliminar incremental"'; -?>
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/sondeo_esp.php b/admin/WebConsole/idiomas/php/esp/sondeo_esp.php index 78bf8d37..0eff15f2 100644 --- a/admin/WebConsole/idiomas/php/esp/sondeo_esp.php +++ b/admin/WebConsole/idiomas/php/esp/sondeo_esp.php @@ -7,4 +7,4 @@ $TbMsg=array(); $TbMsg[0]=''; $TbMsg[1]='ATENCIÓN: Ha habido algún problema al consultar el estado de los ordenadore'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/tareascomandos_esp.php b/admin/WebConsole/idiomas/php/esp/tareascomandos_esp.php index 9e2b1fe7..500ec245 100644 --- a/admin/WebConsole/idiomas/php/esp/tareascomandos_esp.php +++ b/admin/WebConsole/idiomas/php/esp/tareascomandos_esp.php @@ -15,4 +15,4 @@ $TbMsg[7]='(*)Para excluir algún comando de esta tarea debe hacer click sobre la casilla de verificación correspondiente'; $TbMsg[8]='Ámbito'; $TbMsg[9]='Nombre'; -?> + diff --git a/admin/WebConsole/idiomas/php/esp/tiposhardwares_esp.php b/admin/WebConsole/idiomas/php/esp/tiposhardwares_esp.php index 764cdf56..f3ec436e 100644 --- a/admin/WebConsole/idiomas/php/esp/tiposhardwares_esp.php +++ b/admin/WebConsole/idiomas/php/esp/tiposhardwares_esp.php @@ -23,5 +23,5 @@ $TbMsg["HARDWARE_net"]="Tarjetas de red"; $TbMsg["HARDWARE_sto"]="Controladores de almacenamiento"; $TbMsg["HARDWARE_usb"]="Controladores USB"; $TbMsg["HARDWARE_vga"]="Tarjetas gráficas"; -?> + diff --git a/admin/WebConsole/images/tipOfDay_0.png b/admin/WebConsole/images/tipOfDay_0.png Binary files differnew file mode 100644 index 00000000..7c9b26dc --- /dev/null +++ b/admin/WebConsole/images/tipOfDay_0.png diff --git a/admin/WebConsole/images/tipOfDay_1.png b/admin/WebConsole/images/tipOfDay_1.png Binary files differnew file mode 100644 index 00000000..6f56199a --- /dev/null +++ b/admin/WebConsole/images/tipOfDay_1.png diff --git a/admin/WebConsole/images/tipOfDay_2.png b/admin/WebConsole/images/tipOfDay_2.png Binary files differnew file mode 100644 index 00000000..5ae273f0 --- /dev/null +++ b/admin/WebConsole/images/tipOfDay_2.png diff --git a/admin/WebConsole/images/tipOfDay_3.png b/admin/WebConsole/images/tipOfDay_3.png Binary files differnew file mode 100644 index 00000000..4f651526 --- /dev/null +++ b/admin/WebConsole/images/tipOfDay_3.png diff --git a/admin/WebConsole/images/tipOfDay_4.png b/admin/WebConsole/images/tipOfDay_4.png Binary files differnew file mode 100644 index 00000000..54581a9a --- /dev/null +++ b/admin/WebConsole/images/tipOfDay_4.png diff --git a/admin/WebConsole/images/tipOfDay_5.png b/admin/WebConsole/images/tipOfDay_5.png Binary files differnew file mode 100644 index 00000000..21c7597f --- /dev/null +++ b/admin/WebConsole/images/tipOfDay_5.png diff --git a/admin/WebConsole/images/tipOfDay_6.png b/admin/WebConsole/images/tipOfDay_6.png Binary files differnew file mode 100644 index 00000000..cd1a81e3 --- /dev/null +++ b/admin/WebConsole/images/tipOfDay_6.png diff --git a/admin/WebConsole/images/tipOfDay_7.png b/admin/WebConsole/images/tipOfDay_7.png Binary files differnew file mode 100644 index 00000000..882709cd --- /dev/null +++ b/admin/WebConsole/images/tipOfDay_7.png diff --git a/admin/WebConsole/images/ver.php b/admin/WebConsole/images/ver.php index edfae853..fbbeae63 100644 --- a/admin/WebConsole/images/ver.php +++ b/admin/WebConsole/images/ver.php @@ -44,4 +44,4 @@ echo '<TABLE width="100%" border="0"><TR>'; echo '</TR></TABLE>';
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
-?>
+
diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php index 816843b5..9cbd6fcf 100644 --- a/admin/WebConsole/includes/ConfiguracionesParticiones.php +++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php @@ -833,5 +833,5 @@ function tomaCache($numpar,$ordenadores,$numdisk = 1) } } } -?> + diff --git a/admin/WebConsole/includes/CreaComando.php b/admin/WebConsole/includes/CreaComando.php index 056ac3ae..156ff225 100644 --- a/admin/WebConsole/includes/CreaComando.php +++ b/admin/WebConsole/includes/CreaComando.php @@ -21,4 +21,4 @@ function CreaComando($cadenaconexion){ $cmd->Conexion=&$cn; return($cmd); } -?> + diff --git a/admin/WebConsole/includes/CreaTablaParametros.php b/admin/WebConsole/includes/CreaTablaParametros.php index 9d5468f4..a395c849 100644 --- a/admin/WebConsole/includes/CreaTablaParametros.php +++ b/admin/WebConsole/includes/CreaTablaParametros.php @@ -1,51 +1,51 @@ -<?php
-// *************************************************************************************************************************************************
-// Aplicación WEB: ogAdmWebCon.
-// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
-// Fecha Creación: 2009-2010
-// Fecha Última modificación: Agosto-2010
-// Nombre del fichero: CreaTablaParametros.php
-// Descripción :
-// Crea una tabla en memoria con especificaciones sobre los parámetros de cada comando
-// Parametros:
-// - cmd: Un comando ya operativo (con conexión abierta)
-// - tabla_parametros: Referencia a la tabla donde se guardarán las especificaciones
-// - cont_parametros: Referencia a la variable que contendrá el número de elementos totales de la tabla
-// *************************************************************************************************************************************************
-function CreaTablaParametros($cmd,$tabla_parametros,$cont_parametros){
- $rs=new Recordset;
- $cmd->texto="SELECT * FROM parametros";
- $rs->Comando=&$cmd;
- if (!$rs->Abrir()) return; // Error al abrir recordset
- $rs->Primero();
- $cont=0;
- while (!$rs->EOF){
-echo "<br>".$rs->campos["nemonico"];
- $auxtabla_parametros="";
- $auxtabla_parametros["nemonico"]=$rs->campos["nemonico"];
- $auxtabla_parametros["descripcion"]=$rs->campos["descripcion"];
- $auxtabla_parametros["nomidentificador"]=$rs->campos["nomidentificador"];
- $auxtabla_parametros["nomtabla"]=$rs->campos["nomtabla"];
- $auxtabla_parametros["nomliteral"]=$rs->campos["nomliteral"];
- $tabla_parametros[$cont][0]=$auxtabla_parametros["nemonico"];
- $tabla_parametros[$cont][1]=$auxtabla_parametros;
- $cont++;
- $rs->Siguiente();
- }
- $auxnemonico="";
- // Ordena según el nemonico
- for ($i=0;$i<$cont-1;$i++){
- for ($j=$i+1;$j<$cont;$j++){
- if($tabla_parametros[$i][0]>$tabla_parametros[$j][0]){
- $auxnemonico=$tabla_parametros[$i][0];
- $tabla_parametros[$i][0]=$tabla_parametros[$j][0];
- $tabla_parametros[$j][0]=$auxnemonico;
- $auxtabla_parametros=$tabla_parametros[$i][1];
- $tabla_parametros[$i][1]=$tabla_parametros[$j][1];
- $tabla_parametros[$j][1]=$auxtabla_parametros;
- }
- }
- }
- $cont_parametros=$cont;
-}
-?>
+<?php +// ************************************************************************************************************************************************* +// Aplicación WEB: ogAdmWebCon. +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: 2009-2010 +// Fecha Última modificación: Agosto-2010 +// Nombre del fichero: CreaTablaParametros.php +// Descripción : +// Crea una tabla en memoria con especificaciones sobre los parámetros de cada comando +// Parametros: +// - cmd: Un comando ya operativo (con conexión abierta) +// - tabla_parametros: Referencia a la tabla donde se guardarán las especificaciones +// - cont_parametros: Referencia a la variable que contendrá el número de elementos totales de la tabla +// ************************************************************************************************************************************************* +function CreaTablaParametros($cmd,$tabla_parametros,$cont_parametros){ + $rs=new Recordset; + $cmd->texto="SELECT * FROM parametros"; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) return; // Error al abrir recordset + $rs->Primero(); + $cont=0; + while (!$rs->EOF){ +echo "<br>".$rs->campos["nemonico"]; + $auxtabla_parametros=array(); + $auxtabla_parametros["nemonico"]=$rs->campos["nemonico"]; + $auxtabla_parametros["descripcion"]=$rs->campos["descripcion"]; + $auxtabla_parametros["nomidentificador"]=$rs->campos["nomidentificador"]; + $auxtabla_parametros["nomtabla"]=$rs->campos["nomtabla"]; + $auxtabla_parametros["nomliteral"]=$rs->campos["nomliteral"]; + $tabla_parametros[$cont][0]=$auxtabla_parametros["nemonico"]; + $tabla_parametros[$cont][1]=$auxtabla_parametros; + $cont++; + $rs->Siguiente(); + } + $auxnemonico=""; + // Ordena según el nemonico + for ($i=0;$i<$cont-1;$i++){ + for ($j=$i+1;$j<$cont;$j++){ + if($tabla_parametros[$i][0]>$tabla_parametros[$j][0]){ + $auxnemonico=$tabla_parametros[$i][0]; + $tabla_parametros[$i][0]=$tabla_parametros[$j][0]; + $tabla_parametros[$j][0]=$auxnemonico; + $auxtabla_parametros=$tabla_parametros[$i][1]; + $tabla_parametros[$i][1]=$tabla_parametros[$j][1]; + $tabla_parametros[$j][1]=$auxtabla_parametros; + } + } + } + $cont_parametros=$cont; +} + diff --git a/admin/WebConsole/includes/FicherosPost.php b/admin/WebConsole/includes/FicherosPost.php index 10f38b0e..6791b3fd 100644 --- a/admin/WebConsole/includes/FicherosPost.php +++ b/admin/WebConsole/includes/FicherosPost.php @@ -48,5 +48,5 @@ function TomaPathFisico($UrlPagina,$NombreFichero){ $PathFisicoFichero=$PathFisicoCarpetaPagina."/iconos/".$NombreFichero; return($PathFisicoFichero); } -?> + diff --git a/admin/WebConsole/includes/InvFecha.php b/admin/WebConsole/includes/InvFecha.php index e4de8b83..3a82faff 100644 --- a/admin/WebConsole/includes/InvFecha.php +++ b/admin/WebConsole/includes/InvFecha.php @@ -9,7 +9,7 @@ function InvFecha($fecha){ if ($fecha=="1970-01-01")return(""); $auxexplode=explode(" ",$fecha); - list($anno_p,$mes_p,$dia_p)=explode("[/-]",$auxexplode[0]); + list($anno_p,$mes_p,$dia_p)=explode("-",str_replace("/","-",$auxexplode[0])); $fecha_p=$dia_p.'-'.$mes_p.'-'.$anno_p; return($fecha_p); } @@ -34,4 +34,4 @@ function metefechaDB($fecha){ function HoraValida($hora){ if ($hora=="00:00:00")return(""); } -?> + diff --git a/admin/WebConsole/includes/RecopilaIpesMacs.php b/admin/WebConsole/includes/RecopilaIpesMacs.php index 70a7f8e3..2ded1775 100644 --- a/admin/WebConsole/includes/RecopilaIpesMacs.php +++ b/admin/WebConsole/includes/RecopilaIpesMacs.php @@ -165,5 +165,5 @@ function RecorreOrdenadores($cmd){ } $rs->Cerrar(); } -?> + diff --git a/admin/WebConsole/includes/RedireccionaError.php b/admin/WebConsole/includes/RedireccionaError.php index 420f47a4..ded595ad 100644 --- a/admin/WebConsole/includes/RedireccionaError.php +++ b/admin/WebConsole/includes/RedireccionaError.php @@ -10,4 +10,3 @@ function RedireccionaError($herror){ $wurl="../seguridad/logerror.php?herror=".$urlerror; Header('Location: '.$wurl); } -?>
\ No newline at end of file diff --git a/admin/WebConsole/includes/comunes.php b/admin/WebConsole/includes/comunes.php index b89701ac..7f326fd5 100644 --- a/admin/WebConsole/includes/comunes.php +++ b/admin/WebConsole/includes/comunes.php @@ -5,10 +5,10 @@ // Parámetros: // - trama: La trama // Devuelve: - // Una matriz con las parejas de paramertos "nombre=valor" + // Una matriz con las parejas de parámertos "nombre=valor" //________________________________________________________________________________________ function extrae_parametros($parametros,$chsep,$chval){ - $ParametrosCadena=""; + $ParametrosCadena=array(); $auxP=explode($chsep,$parametros); for ($i=0;$i<sizeof($auxP);$i++){ $dualparam=explode($chval,$auxP[$i]); @@ -121,7 +121,7 @@ $cont=0; while (!$rs->EOF){ $nemo=$rs->campos["nemonico"]; - $auxtabla_parametros=""; + $auxtabla_parametros=array(); $auxtabla_parametros["nemonico"]=$nemo; $auxtabla_parametros["descripcion"]=$rs->campos["descripcion"]; $auxtabla_parametros["nomidentificador"]=$rs->campos["nomidentificador"]; @@ -300,7 +300,7 @@ Devuelve la descripción de un ambito Parametros: - - cmd: Objeto comando (Operativo) + - cmd: Objeto comando (Operativo) - ambito: tipo de ambito - idambito: Identificador del ambito - textambito: Por referencia. Es donde se devuelve la descripción @@ -309,7 +309,7 @@ - Los dos parámetros pasados por referencia ________________________________________________________________________*/ - function tomaDescriAmbito($cmd,$ambito,$idambito,$textambito) + function tomaDescriAmbito($cmd,$ambito,$idambito,&$textambito) { global $AMBITO_CENTROS; global $AMBITO_GRUPOSAULAS; @@ -334,7 +334,7 @@ $textambito=TomaDato($cmd,0,'ordenadores',$idambito,'idordenador','nombreordenador'); break; default: - $textambito; + $textambito=""; } } /*______________________________________________________________________ diff --git a/admin/WebConsole/includes/constantes.php b/admin/WebConsole/includes/constantes.php index d37d8a7b..a46296d7 100644 --- a/admin/WebConsole/includes/constantes.php +++ b/admin/WebConsole/includes/constantes.php @@ -174,6 +174,3 @@ $msk_cache=0x12; $IMAGENES_MONOLITICAS=0x01; $IMAGENES_BASICAS=0x02; $IMAGENES_INCREMENTALES=0x03; - -/* AVISO: no crear salto de línea ni líneas en blanco tras el fin del código PHP. */ -?> diff --git a/admin/WebConsole/includes/ctrlacc.php b/admin/WebConsole/includes/ctrlacc.php index 9e09b9b7..c6988027 100644 --- a/admin/WebConsole/includes/ctrlacc.php +++ b/admin/WebConsole/includes/ctrlacc.php @@ -45,4 +45,4 @@ if ($swacc){ // Error en alguna variable de sesión die("***Error de acceso"); } //=============================================================================================== -?> + diff --git a/admin/WebConsole/includes/cuestionacciones.php b/admin/WebConsole/includes/cuestionacciones.php index 1f027adc..9c79894d 100644 --- a/admin/WebConsole/includes/cuestionacciones.php +++ b/admin/WebConsole/includes/cuestionacciones.php @@ -76,4 +76,4 @@ function CuestionAcciones($cmd,$shidra,$parametros){ } return(true); } - ?> + diff --git a/admin/WebConsole/includes/cuestionaccionescab.php b/admin/WebConsole/includes/cuestionaccionescab.php index d41d0324..0d0647db 100644 --- a/admin/WebConsole/includes/cuestionaccionescab.php +++ b/admin/WebConsole/includes/cuestionaccionescab.php @@ -20,4 +20,4 @@ if (isset($_POST["nwdescritarea"])) $nwdescritarea=$_POST["nwdescritarea"]; if (isset($_POST["sw_mkprocedimiento"])) $sw_mkprocedimiento=$_POST["sw_mkprocedimiento"]; if (isset($_POST["nwidprocedimiento"])) $nwidprocedimiento=$_POST["nwidprocedimiento"]; if (isset($_POST["nwdescriprocedimiento"])) $nwdescriprocedimiento=$_POST["nwdescriprocedimiento"]; -?> + diff --git a/admin/WebConsole/includes/opciones.php b/admin/WebConsole/includes/opciones.php index 4e8c1033..9cc12c8d 100644 --- a/admin/WebConsole/includes/opciones.php +++ b/admin/WebConsole/includes/opciones.php @@ -13,4 +13,3 @@ $op_modificacion=2; $op_eliminacion=3; $op_movida=4; $op_ejecucion=5; -?>
\ No newline at end of file diff --git a/admin/WebConsole/includes/opcionesbotonesop.php b/admin/WebConsole/includes/opcionesbotonesop.php index 85138063..da89b776 100644 --- a/admin/WebConsole/includes/opcionesbotonesop.php +++ b/admin/WebConsole/includes/opcionesbotonesop.php @@ -6,4 +6,4 @@ echo '<TD width=20></TD>'; echo '<TD><A href=#><IMG border=0 src="../images/boton_confirmar.gif" onclick="confirmar('.$opcion.')" ></A></TD>'; echo '</TR>'; echo '</TABLE>'; -?> + diff --git a/admin/WebConsole/includes/opcionesprotocolos.php b/admin/WebConsole/includes/opcionesprotocolos.php index 29a845bd..aaafab5d 100644 --- a/admin/WebConsole/includes/opcionesprotocolos.php +++ b/admin/WebConsole/includes/opcionesprotocolos.php @@ -105,5 +105,5 @@ return($torrentsyntax); -?> + diff --git a/admin/WebConsole/includes/pintaParticiones.php b/admin/WebConsole/includes/pintaParticiones.php index 44c3f10c..3db46818 100644 --- a/admin/WebConsole/includes/pintaParticiones.php +++ b/admin/WebConsole/includes/pintaParticiones.php @@ -34,7 +34,7 @@ function splitConfigurationsByDisk($configuraciones){ // Descripción: // Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador, // grupo de ordenadores o aula -// Parametros: +// Parámetros: // $configuraciones: Cadena con las configuraciones de particioners del ámbito. El formato // sería una secuencia de cadenas del tipo "clave de configuración" separados por "@" // Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0 @@ -137,13 +137,11 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) for ($x=0;$x<count($ima); $x++) { if(substr($ima[$x],-3)==".MB") { if ( $ima[$x] == "0.MB" ){ - echo '<font color=red><strong>'.$TbMsg["CACHE_COMPLETE"].': '.$ima[$x].'</strong></font>'; + echo '<span style="color: red"><strong>'.$TbMsg["CACHE_COMPLETE"].': '.$ima[$x].'</strong></span>'; }else{ echo '<strong>'.$TbMsg["CACHE_FREESPACE"].': '.$ima[$x].'</strong>'; } }elseif (! empty($ima[1])){ - // $dir=is_dir('$ima');echo $dir; - // if ($ima == "directorio"){$dir="si";} // Esto para la informacion de la imagen if (substr($ima[$x],-5)==".diff"){$info="F";}elseif(substr($ima[$x],-4)==".img"){$info="F";}else{$info="D";} // Esto para numerarla @@ -152,7 +150,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) } elseif(preg_match("/.sum/",$ima[$x]) or preg_match("/.torrent/",$ima[$x]) or preg_match("/.full.sum/",$ima[$x])) { echo '<br /> '.$ima[$x]; }else{ - echo '<br /><font color=blue>('.$info.') </font>'.$numero++.'.-<font color=blue>'.$ima[$x]."</font>"; + echo '<br /><span style="color: blue">('.$info.') </span>'.$numero++.'.-<span style="color: blue">'.$ima[$x]."</span>"; } } } @@ -193,7 +191,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) if (!empty($aviso)) { echo '<tr><th colspan="'.$columns.'"> * '.$aviso.' </th></tr>'."\n"; } - echo '<tr height="5"><td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;"> </td></tr>'; + echo '<tr><td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF; height: 5px;"> </td></tr>'; } @@ -203,7 +201,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) // (Esta función es llamada por pintaConfiguraciones que está incluida en ConfiguracionesParticiones.php) // Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador, // grupo de ordenadores o aula -// Parametros: +// Parámetros: // $configuraciones: Cadena con las configuraciones de particioners del ámbito. El formato // sería una secuencia de cadenas del tipo "clave de configuración" separados por "@" // Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0 @@ -248,40 +246,47 @@ function pintaParticionesRestaurarImagen($cmd,$configuraciones,$idordenadores,$c $auxCfg=explode("@",$diskConfig); // Crea lista de particiones for($i=0;$i<sizeof($auxCfg);$i++){ $auxKey=explode(";",$auxCfg[$i]); // Toma clave de configuracion + // Para particiones EFI desabilitamos el selector + $disabled=''; for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partición if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas if($tbKeys[$k]["numpar"]!=0){ // No es info. del disco (part. 0) $swcc=$tbKeys[$k]["clonable"]; if($swcc){ + if ($tbKeys[$k]["tipopar"] == 'EFI') $disabled='disabled'; echo '<TR>'.chr(13); echo '<TD align=center> </TD>'; $icp=$cc."_".$tbKeys[$k]["numdisk"]."_".$tbKeys[$k]["numpar"]; // Identificador de la configuración-partición - echo '<TD ><input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numdisk"].";".$tbKeys[$k]["numpar"].'></TD>'.chr(13); + echo '<TD ><input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numdisk"].";".$tbKeys[$k]["numpar"].' '.$disabled.'></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 align=center> '.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).' </TD>'.chr(13); echo'<TD align=center> '.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,false,$tbKeys[$k]["numdisk"]).' </TD>'.chr(13); echo'<TD align=center> '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).' </TD>'.chr(13); - echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idambito,$ambito).'</TD>'; - echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,false,$idambito,$ambito).'</TD>'; + if ($tbKeys[$k]["tipopar"] == 'EFI') { + echo "<TD></TD>\n<TD></TD>\n<TD></TD>\n"; + } else { + echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idambito,$ambito).'</TD>'; + echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,false,$idambito,$ambito).'</TD>'; - //Clonación - $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.="MULTICAST-DIRECT " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-DIRECT".chr(13); - $metodos.="TORRENT " . torrent_syntax($cmd,$ambito,$idambito) . "=TORRENT-CACHE"; + //Clonación + $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.="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["MULTICAST-DIRECT"]=4; - $TBmetodos["TORRENT-CACHE"]=5; - $idxc=$_SESSION["protclonacion"]; - if ($idxc == "UNICAST") { - $idxc = "UNICAST-DIRECT"; + $TBmetodos["UNICAST-CACHE"]=1; + $TBmetodos["UNICAST-DIRECT"]=2; + $TBmetodos["MULTICAST-CACHE"]=3; + $TBmetodos["MULTICAST-DIRECT"]=4; + $TBmetodos["TORRENT-CACHE"]=5; + $idxc=$_SESSION["protclonacion"]; + if ($idxc == "UNICAST") { + $idxc = "UNICAST-DIRECT"; + } + echo '<TD>'.HTMLCTESELECT($metodos,"protoclonacion_".$icp,"estilodesple","",$TBmetodos[$idxc],100).'</TD>'; } - echo '<TD>'.HTMLCTESELECT($metodos,"protoclonacion_".$icp,"estilodesple","",$TBmetodos[$idxc],100).'</TD>'; echo '</TR>'.chr(13); } } @@ -289,7 +294,7 @@ function pintaParticionesRestaurarImagen($cmd,$configuraciones,$idordenadores,$c } } } - echo '<TR height=5><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;"> </TD></TR>'; + echo '<TR><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF; height:5px;"> </TD></TR>'; } /*________________________________________________________________________________________________________ @@ -298,7 +303,7 @@ function pintaParticionesRestaurarImagen($cmd,$configuraciones,$idordenadores,$c (Esta función es llamada por pintaConfiguraciones que está incluida en ConfiguracionesParticiones.php) Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador, grupo de ordenadores o aula - Parametros: + Parámetros: $configuraciones: Cadena con las configuraciones de particioners del ámbito. El formato sería una secuencia de cadenas del tipo "clave de configuración" separados por "@" Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0 @@ -342,7 +347,7 @@ function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc) $sf=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,true); echo '<td>'.HTMLSELECT_sistemasficheros($cmd,$sf).'</td>'; $tm=tomaTamano($tbKeys[$k]["numpar"],$idordenadores); - echo '<td><input type="text" style="width:100" value="'.$tm.'"></td>'; + echo '<td><input type="text" style="width:100px" value="'.$tm.'"></td>'; echo '<td>'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'</td>'; echo '<td>'.opeFormatear().'</td>'; echo '</tr>'; @@ -361,8 +366,8 @@ function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc) // Datos del disco $tm=tomaTamano(0,$idordenadores); echo '<tr id="TRIMG_'.$cc.'" align="center">'. - "\n<td></td>\n<td></td>\n<td".' style="font-size: 1em; padding: 1px 0px; "'.">".$TbMsg["DISK"]."</td>". - "\n<td></td>\n<td".' style="font-size: 1em; padding: 1px 0px; "> '.(isset($tm)?$tm:("<em>".$TbMsg["VARIABLE"]."</em>"))." <input type='hidden' id='hdsize$cc' name='hdsize$cc' style='width:100' value='".$tm."'></td>". + "\n<td></td>\n<td></td>\n<td".' style="font-size: 1em; padding: 1px 0; "'.">".$TbMsg["DISK"]."</td>". + "\n<td></td>\n<td".' style="font-size: 1em; padding: 1px 0; "> '.(isset($tm)?$tm:("<em>".$TbMsg["VARIABLE"]."</em>"))." <input type='hidden' id='hdsize$cc' name='hdsize$cc' style='width:100px' value='".$tm."'></td>". "\n<td></td>\n<td></td>\n</tr>"; echo '<tr><th colspan="'.$colums.'"> '.$TbMsg["WARN_DISKSIZE"].'</th></tr>'; // Mostrar aviso: solo disco 1 con tabla MSDOS. @@ -371,14 +376,14 @@ function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc) } // Botones de añadir y confirmar. if (isset($tm)) { - echo '<TR height=30><TD style="BACKGROUND-COLOR: #FFFFFF;" colspan='.$colums.' align=center>'; - echo ' <A href="#add" style="text-decoration:none"> - <IMG id="IMG_'.$icp.'" border=0 src="../images/boton_insertar.gif" - value="'.$k.'" onclick="addParticion(this,'.$cc.')"></A> - - <A href="#add" style="text-decoration:none"> - <IMG border=0 src="../images/boton_aceptar.gif" onclick="Confirmar('.$cc.')"></A></TD> - </TR>'; + echo '<tr><td style="background-color: #FFFFFF; height: 30px;" colspan="'.$colums.'" align="center">'; + echo ' <a href="#add" style="text-decoration:none"> + <img id="IMG_'.$icp.'" border=0 src="../images/boton_insertar.gif" + value="'.$k.'" onclick="addParticion(this,'.$cc.')"></a> + + <a href="#add" style="text-decoration:none"> + <img border=0 src="../images/boton_aceptar.gif" onclick="Confirmar('.$cc.')"></a></td> + </tr>'; } else { echo '<tr><th colspan="'.$colums.'">'.$TbMsg["WARN_DIFFDISKSIZE"].'</th></tr>'."\n"; } @@ -386,24 +391,24 @@ function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc) /* // -// Descripcion: -// (Esta funci�n es llamada por pintaConfiguraciones que est� incluida en ConfiguracionesParticiones.php) +// Descripcián: +// (Esta función es llamada por pintaConfiguraciones que está incluida en ConfiguracionesParticiones.php) // Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador, // grupo de ordenadores o aula -// Parametros: -// $configuraciones: Cadena con las configuraciones de particioners del �mbito. El formato -// ser�a una secuencia de cadenas del tipo "clave de configuraci�n" separados por "@" +// Parámetros: +// $configuraciones: Cadena con las configuraciones de particioners del ámbito. El formato +// sería una secuencia de cadenas del tipo "clave de configuración" separados por "@" // Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0 // Devuelve: -// El c�digo html de la tabla +// El código html de la tabla //________________________________________________________________________________________________________ // // */ function pintaParticionesRestaurarImagenSincronizacion1($cmd,$configuraciones,$idordenadores,$cc,$ambito,$idambito) { - global $tbKeys; // Tabla contenedora de claves de configuraci�n - global $conKeys; // Contador de claves de configuraci�n + global $tbKeys; // Tabla contenedora de claves de configuración + global $conKeys; // Contador de claves de configuración global $TbMsg; global $_SESSION; @@ -445,7 +450,7 @@ function pintaParticionesRestaurarImagenSincronizacion1($cmd,$configuraciones,$i echo '<TR>'.chr(13); echo '<TD align=center> </TD>'; if($swcc){ - $icp=$cc."_".$tbKeys[$k]["numdisk"]."_".$tbKeys[$k]["numpar"]; // Identificador de la configuraci�n-partici�n + $icp=$cc."_".$tbKeys[$k]["numdisk"]."_".$tbKeys[$k]["numpar"]; // Identificador de la configuración-partición echo '<TD align=center><input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numdisk"].";".$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); @@ -479,169 +484,6 @@ function pintaParticionesRestaurarImagenSincronizacion1($cmd,$configuraciones,$i } } - echo '<TR height=5><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;"> </TD></TR>'; + echo '<TR><TD colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF; height: 5px;"> </TD></TR>'; echo '<tr><th colspan="14">'.$TbMsg["WARN_PROTOCOL"].'</th></tr>'; } -/** - * Las funcion pintaParticionesRestaurarImagenSincronizacion1 sustituye a las funciones - * pintaParticionesRestaurarSoftIncremental y pintaParticionesRestaurarImagenBasica - * para volver a usarlas tan sólo hay que ir al fichero comandos/RestaurarImagenBasica o comandos/RestaurarSoftIncremental y cambiar la - * llamada a la función que queramos en el parametro de pintaConfiguraciones. - * Actualmente en ambos ficheros llaman a la función pintaParticionesRestaurarImagenSincronizacion1 ya que pintan - * exactamente lo mismo. - * - -//********************************************************************************************* -// FUNCIONES -//********************************************************************************************* -// -// Descripci�n: -// (Esta funci�n es llamada por pintaConfiguraciones que est� incluida en ConfiguracionesParticiones.php) -// Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador, -// grupo de ordenadores o aula -// Parametros: -// $configuraciones: Cadena con las configuraciones de particioners del �mbito. El formato -// ser�a una secuencia de cadenas del tipo "clave de configuraci�n" separados por "@" -// Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0 -// Devuelve: -// El c�digo html de la tabla -//________________________________________________________________________________________________________ -// -// -function pintaParticionesRestaurarSoftIncremental($cmd,$configuraciones,$idordenadores,$cc,$ambito,$idambito) -{ - global $tbKeys; // Tabla contenedora de claves de configuraci�n - global $conKeys; // Contador de claves de configuraci�n - global $TbMsg; - global $_SESSION; - - // Separamos las configuraciones segun el disco al que pertenezcan - $diskConfigs = splitConfigurationsByDisk($configuraciones); - - $columns=9; - echo '<TR>'; - echo '<TH align=center> </TH>'; - echo '<th align="center"> '.$TbMsg["DISK"].' </th>'; // Número de disco - echo '<TH align=center> '.$TbMsg["PARTITION"].' </TH>'; - echo '<th align="center"> '.$TbMsg["PARTITION_TYPE"].' </th>'; // Tipo de partición - echo '<th align="center"> '.$TbMsg["INST_SO"].' </th>'; // Sistema Operativo Instalado - echo '<th align="center"> '.$TbMsg["FILESYSTEM_SHORT"].' </th>'; // Sistema de ficheros - echo '<th align="center"> '.$TbMsg["SIZE_KB"].' </th>'; // Tamaño - echo '<TH align=center> '.$TbMsg[10].' </TH>'; - echo '<TH align=center> '.$TbMsg[16].' </TH>'; - echo '</TR>'; - - - // Recorremos todas las configuraciones encontradas para cada disco - - foreach($diskConfigs as $disk => $diskConfig){ - $disk = (int)$disk; - echo'<tr height="16">'.chr(13); - echo '<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;"> '.$TbMsg["DISK"].' '.$disk.'</td>'.chr(13); - - $auxCfg=explode("@",$diskConfig); // Crea lista de particiones - for($i=0;$i<sizeof($auxCfg);$i++){ - $auxKey=explode(";",$auxCfg[$i]); // Toma clave de configuracion - for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partici�n - if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas - $swcc=$tbKeys[$k]["clonable"]; - echo '<TR>'.chr(13); - echo '<TD align=center> </TD>'; - if($swcc){ - $icp=$cc."_".$tbKeys[$k]["numpar"]; // Identificador de la configuraci�n-partici�n - echo '<TD align=center><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 align=center> '.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).' </TD>'.chr(13); - echo'<TD align=center> '.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).' </TD>'.chr(13); - echo'<TD align=center> '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).' </TD>'.chr(13); - echo '<TD align=center>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idordenadores,$ambito).'</TD>'; - $metodos="CACHE=".$TbMsg[13].chr(13); - $metodos.="REPO=".$TbMsg[9]; - echo '<TD align=center>'.HTMLCTESELECT($metodos,"desplemet_".$icp,"estilodesple","",1,100).'</TD>'; - - } - echo '</TR>'.chr(13); - } - } - } - } - echo '<TR height=5><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;"> </TD></TR>'; -} - -//********************************************************************************************* -// FUNCIONES -//********************************************************************************************* -// -// Descripci�n: -// (Esta funci�n es llamada por pintaConfiguraciones que est� incluida en ConfiguracionesParticiones.php) -// Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador, -// grupo de ordenadores o aula -// Parametros: -// $configuraciones: Cadena con las configuraciones de particioners del �mbito. El formato -// ser�a una secuencia de cadenas del tipo "clave de configuraci�n" separados por "@" -// Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0 -// Devuelve: -// El c�digo html de la tabla -//________________________________________________________________________________________________________ -// -// -function pintaParticionesRestaurarImagenBasica($cmd,$configuraciones,$idordenadores,$cc,$ambito,$idambito) -{ - global $tbKeys; // Tabla contenedora de claves de configuraci�n - global $conKeys; // Contador de claves de configuraci�n - global $TbMsg; - global $_SESSION; - - // Separamos las configuraciones segun el disco al que pertenezcan - $diskConfigs = splitConfigurationsByDisk($configuraciones); - - $columns=9; - echo '<TR>'; - echo '<TH align=center> </TH>'; - echo '<th align="center"> '.$TbMsg["DISK"].' </th>'; // Número de disco - echo '<TH align=center> '.$TbMsg["PARTITION"].' </TH>'; - echo '<th align="center"> '.$TbMsg["PARTITION_TYPE"].' </th>'; // Tipo de partición - echo '<th align="center"> '.$TbMsg["INST_SO"].' </th>'; // Sistema Operativo Instalado - echo '<th align="center"> '.$TbMsg["FILESYSTEM_SHORT"].' </th>'; // Sistema de ficheros - echo '<th align="center"> '.$TbMsg["SIZE_KB"].' </th>'; // Tamaño - echo '<TH align=center> '.$TbMsg[10].' </TH>'; - echo '<TH align=center> '.$TbMsg[16].' </TH>'; - echo '</TR>'; - - // Recorremos todas las configuraciones encontradas para cada disco - - foreach($diskConfigs as $disk => $diskConfig){ - $disk = (int)$disk; - echo'<tr height="16">'.chr(13); - echo '<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;"> '.$TbMsg["DISK"].' '.$disk.'</td>'.chr(13); - - $auxCfg=explode("@",$diskConfig); // Crea lista de particiones - for($i=0;$i<sizeof($auxCfg);$i++){ - $auxKey=explode(";",$auxCfg[$i]); // Toma clave de configuracion - for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partici�n - if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas - $swcc=$tbKeys[$k]["clonable"]; - if($swcc){ - echo '<TR>'.chr(13); - echo '<TD align=center> </TD>'; - $icp=$cc."_".$tbKeys[$k]["numpar"]; // Identificador de la configuraci�n-partici�n - echo '<TD align=center><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 align=center> '.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).' </TD>'.chr(13); - echo'<TD align=center> '.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).' </TD>'.chr(13); - echo'<TD align=center> '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).' </TD>'.chr(13); - echo '<TD align=center>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idordenadores,$ambito).'</TD>'; - $metodos="CACHE=".$TbMsg[13].chr(13); - $metodos.="REPO=".$TbMsg[9]; - echo '<TD align=center>'.HTMLCTESELECT($metodos,"desplemet_".$icp,"estilodesple","",1,100).'</TD>'; - } - } - } - } - } - echo '<TR height=5><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;"> </TD></TR>'; -} -**/ - diff --git a/admin/WebConsole/includes/pintaTablaConfiguraciones.php b/admin/WebConsole/includes/pintaTablaConfiguraciones.php index ecf69574..5a0b72ae 100644 --- a/admin/WebConsole/includes/pintaTablaConfiguraciones.php +++ b/admin/WebConsole/includes/pintaTablaConfiguraciones.php @@ -38,10 +38,10 @@ function tablaConfiguracionesIniciarSesion($cmd,$idambito,$ambito){ // CONSULTA BD: grupo de equipos con iguales sistemas operativos: idordenadores,configuracion $cmd->texto=""; // agrupamos equipos con igual conf de disco. - $cmd->texto="select GROUP_CONCAT(pcconf.idordenador SEPARATOR ',') AS idordenadores, pcconf.configuraciones FROM ("; + $cmd->texto="SELECT GROUP_CONCAT(pcconf.idordenador SEPARATOR ',') AS idordenadores, pcconf.configuraciones FROM ("; // partconf agrupa la configuracion de todas las part: idordenador | configuracionTodasPart - $cmd->texto.=" select partconf.idordenador , GROUP_CONCAT(partconf.configuracion ORDER BY partconf.configuracion ASC SEPARATOR '@' ) AS configuraciones FROM ("; + $cmd->texto.=" SELECT partconf.idordenador, GROUP_CONCAT(partconf.configuracion ORDER BY partconf.configuracion ASC SEPARATOR '@') AS configuraciones FROM ("; // particion conf: idordenador, numdisk, configuracion (numdisk;numpar;idnombreso) $cmd->texto.="SELECT ordenadores_particiones.idordenador,ordenadores_particiones.numdisk, CONCAT_WS(';',ordenadores_particiones.numdisk, ordenadores_particiones.numpar, ordenadores_particiones.idnombreso) AS configuracion FROM ordenadores_particiones "; @@ -138,9 +138,7 @@ function tablaConfiguracionesInventarioSoftware($cmd,$idordenador){ WHERE ordenadores.idordenador=".$idordenador." AND nombresos.nombreso!='DATA' ORDER BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar"; - - $rs->Comando=&$cmd; - $rs=new Recordset; + $rs=new Recordset; $rs->Comando=&$cmd; if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset diff --git a/admin/WebConsole/includes/restfunctions.php b/admin/WebConsole/includes/restfunctions.php index 3f91f7f5..14cace17 100644 --- a/admin/WebConsole/includes/restfunctions.php +++ b/admin/WebConsole/includes/restfunctions.php @@ -1,5 +1,212 @@ <?php - + +define('OG_REST_URL', 'http://127.0.0.1:8888/'); + +define('GET', 1); +define('POST', 2); +define('CUSTOM', 3); + +define('OG_REST_CMD_CLIENTS', 'clients'); +define('OG_REST_CMD_WOL', 'wol'); +define('OG_REST_CMD_SESSION', 'session'); +define('OG_REST_CMD_RUN', 'shell/run'); +define('OG_REST_CMD_OUTPUT', 'shell/output'); +define('OG_REST_CMD_POWEROFF', 'poweroff'); +define('OG_REST_CMD_REBOOT', 'reboot'); +define('OG_REST_CMD_STOP', 'stop'); +define('OG_REST_CMD_REFRESH', 'refresh'); +define('OG_REST_CMD_HARDWARE', 'hardware'); +define('OG_REST_CMD_SOFTWARE', 'software'); + +define('OG_REST_PARAM_CLIENTS', 'clients'); +define('OG_REST_PARAM_ADDR', 'addr'); +define('OG_REST_PARAM_MAC', 'mac'); +define('OG_REST_PARAM_DISK', 'disk'); +define('OG_REST_PARAM_PART', 'partition'); +define('OG_REST_PARAM_RUN', 'run'); +define('OG_REST_PARAM_TYPE', 'type'); +define('OG_REST_PARAM_STATE', 'state'); + +$conf_file = parse_ini_file(__DIR__ . '/../../etc/ogAdmRepo.cfg'); +define('OG_REST_API_TOKEN', 'Authorization: ' . $conf_file['ApiToken']); + +function common_request($command, $type, $data = null) { + + $json = json_encode($data); + + $service_url = OG_REST_URL.$command; + + $curl = curl_init($service_url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_HTTPHEADER, array( + OG_REST_API_TOKEN, + )); + + switch ($type) { + default: + case GET: + break; + case POST: + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_POSTFIELDS, $json); + } + + $curl_response = curl_exec($curl); + $info = curl_getinfo($curl); + + if ($curl_response === false || $info['http_code'] != 200) { + syslog(LOG_ERR, 'error occured during curl exec. Additioanl info: ' . print_r($info, TRUE)); + return 0; + } + + curl_close($curl); + + syslog(LOG_INFO, 'response '.$command.' ok!'); + + return json_decode($curl_response, true); +} + + +function shell($case, $string_ips, $command) { + + $ips = explode(';',$string_ips); + + switch ($case) { + case 1: + $data = array(OG_REST_PARAM_CLIENTS => $ips, + OG_REST_PARAM_RUN => $command); + $command = OG_REST_CMD_RUN; + break; + default: + case 2: + $data = array(OG_REST_PARAM_CLIENTS => $ips); + $command = OG_REST_CMD_OUTPUT; + } + + $result = common_request($command, POST, + $data)[OG_REST_PARAM_CLIENTS][0]['output']; + + return (is_null($result) ? '1' : $result); +} + +function clients($case, $ips) { + + switch ($case) { + case 1: + $type = POST; + $data = array(OG_REST_PARAM_CLIENTS => $ips); + break; + case 2: + $type = GET; + $data = null; + break; + } + + $result = common_request(OG_REST_CMD_CLIENTS, $type, $data); + + $trama_notificacion = ""; + if (isset($result[OG_REST_PARAM_CLIENTS])) { + foreach ($result[OG_REST_PARAM_CLIENTS] as $client) { + $trama_notificacion .= $client[OG_REST_PARAM_ADDR].'/'. + $client[OG_REST_PARAM_STATE].';'; + } + } + + return $trama_notificacion; +} + +function wol($type_wol, $macs, $ips) { + + switch ($type_wol) { + default: + case 1: + $wol = 'broadcast'; + break; + case 2: + $wol = 'unicast'; + } + + $clients = array(); + + for($i=0; $i<count($macs); $i++) { + $clients[] = array(OG_REST_PARAM_ADDR => $ips[$i], + OG_REST_PARAM_MAC => $macs[$i]); + } + + $data = array(OG_REST_PARAM_TYPE => $wol, + OG_REST_PARAM_CLIENTS => $clients); + + common_request(OG_REST_CMD_WOL, POST, $data); +} + +function session($string_ips, $params) { + + preg_match_all('!\d{1}!', $params, $matches); + + $ips = explode(';',$string_ips); + $disk = $matches[0][0]; + $part = $matches[0][1]; + + $data = array(OG_REST_PARAM_CLIENTS => $ips, + OG_REST_PARAM_DISK => $disk, OG_REST_PARAM_PART => $part); + + common_request(OG_REST_CMD_SESSION, POST, $data); +} + +function poweroff($string_ips) { + + $ips = explode(';',$string_ips); + + $data = array(OG_REST_PARAM_CLIENTS => $ips); + + common_request(OG_REST_CMD_POWEROFF, POST, $data); +} + +function reboot($string_ips) { + + $ips = explode(';',$string_ips); + + $data = array(OG_REST_PARAM_CLIENTS => $ips); + + common_request(OG_REST_CMD_REBOOT, POST, $data); +} + +function stop($string_ips) { + + $ips = explode(';',$string_ips); + + $data = array(OG_REST_PARAM_CLIENTS => $ips); + + common_request(OG_REST_CMD_STOP, POST, $data); +} + +function refresh($string_ips) { + + $ips = explode(';',$string_ips); + + $data = array(OG_REST_PARAM_CLIENTS => $ips); + + common_request(OG_REST_CMD_REFRESH, POST, $data); +} + +function hardware($string_ips) { + + $ips = explode(';',$string_ips); + + $data = array(OG_REST_PARAM_CLIENTS => $ips); + + common_request(OG_REST_CMD_HARDWARE, POST, $data); +} + +function software($string_ips) { + + $ips = explode(';',$string_ips); + + $data = array(OG_REST_PARAM_CLIENTS => $ips); + + common_request(OG_REST_CMD_SOFTWARE, POST, $data); +} + /* * @function multiRequest. * @param URLs array (may include header and POST data), cURL options array. @@ -69,4 +276,4 @@ function multiRequest($data, $options=array(CURLOPT_SSL_VERIFYHOST => false, CUR return $result; } -?> + diff --git a/admin/WebConsole/includes/tftputils.php b/admin/WebConsole/includes/tftputils.php index 5cf2da88..aca054a5 100644 --- a/admin/WebConsole/includes/tftputils.php +++ b/admin/WebConsole/includes/tftputils.php @@ -12,12 +12,13 @@ include_once("../includes/ctrlacc.php"); include_once("../clases/AdoPhp.php"); // Directorio de ficheros PXE. -define("PXEDIR", "/opt/opengnsys/tftpboot/menu.lst"); +define("PXEDIRBIOS", "/opt/opengnsys/tftpboot/menu.lst"); +define("PXEDIRUEFI", "/opt/opengnsys/tftpboot/grub"); /** * @brief Sustituye espacio por "_" y quita acentos y tildes. - * @param cadena Cadena a modificar. + * @param string Cadena a modificar. * @return string Cadena modificada. * @versión 1.0.5 - Primera versión, adaptada de NetBoot Avanzado. * @author @@ -47,13 +48,13 @@ function clientKernelVersion () { /** - * createBootMode ($cmd, $bootopt, $hostid, $lang) + * createBootMode ($cmd, $bootopt, $hostname, $lang) * @brief Crea un fichero PXE para el ordenador basado en la plantilla indicada y usando * los datos almacenados en la BD. - * @param {Object} cmd Objeto de conexión a la base de datos. - * @param {String} bootopt Plantilla de arranque PXE. - * @param {Number} hostid Id. del ordenador. - * @param {String} lang Idioma de arranque. + * @param Object cmd Objeto de conexión a la base de datos. + * @param String bootopt Plantilla de arranque PXE. + * @param String hostname Nombre del ordenador. + * @param String lang Idioma de arranque. * @version 1.0.5 - Primera versión, adaptada de NetBoot Avanzado (Antonio J. Doblas Viso - Universidad de Málaga) * @author Ramón Gómez - ETSII Universidad de Sevilla * @date 2013-04-25 @@ -63,68 +64,23 @@ function clientKernelVersion () { * @version 1.1.0 - La segunda fase de carga del ogLive se define en el SERVER para evitar erores de sincronismo entre versiones (ticket #787). * @author Antonio J. Doblas Viso - Universidad de Malaga * @date 2017-06-01 - * @version 1.1.0 - Se incluye el nombre del perfil hardware y se elimina el winboot (ticket #828). + * @version 1.1.0 - Se incluye el nombre del perfil hardware y se elimina el winboot (ticket #828). * @author Antonio J. Doblas Viso - Universidad de Malaga * @date 2018-01-21 + * @version 1.1.1 - Se utiliza setclientmode. Gestiona plantilla bios y uefi (ticket #802 #888) + * @author Irina Gómez - ETSII Universidad de Sevilla + * @date 2019-03-14 */ -function createBootMode ($cmd, $bootopt, $hostid, $lang) { +function createBootMode ($cmd, $bootopt, $hostname, $lang) { + global $cadenaconexion; + + // Datos para el acceso a mysql + $strcn=explode(";",$cadenaconexion); + $acceso="USUARIO=".$strcn[1]." PASSWORD=".$strcn[2]." CATALOG=".$strcn[3]; // Plantilla con las opciones por defecto. if (empty ($bootopt)) $bootopt = "00unknown"; - // Actualizar opción de arranque para el equipo. - $cmd->CreaParametro("@arranque",$bootopt,0); - $cmd->CreaParametro("@idordenador",$hostid,1); - $cmd->texto="UPDATE ordenadores SET arranque=@arranque WHERE idordenador=@idordenador"; - $cmd->Ejecutar(); - - // Obtener información de la base de datos. - $cmd->texto="SELECT ordenadores.nombreordenador AS hostname, ordenadores.ip AS ip, - ordenadores.mac AS mac, ordenadores.netiface AS netiface, - ordenadores.oglivedir AS oglivedir, - aulas.netmask AS netmask, aulas.router AS router, - aulas.ntp AS ntp, aulas.dns AS dns, aulas.proxy AS proxy, - aulas.nombreaula AS grupo, IFNULL(repositorios.ip, '') AS iprepo, - (SELECT ipserveradm FROM entornos LIMIT 1) AS ipserveradm, - menus.resolucion AS vga, perfileshard.descripcion AS hardprofile, - centros.directorio, entidades.ogunit - FROM ordenadores - JOIN aulas USING (idaula) - JOIN centros USING (idcentro) - JOIN entidades USING (identidad) - LEFT JOIN repositorios USING (idrepositorio) - LEFT JOIN menus USING (idmenu) - LEFT JOIN perfileshard USING (idperfilhard) - WHERE ordenadores.idordenador='$hostid'"; - - $rs=new Recordset; - $rs->Comando=&$cmd; - if (!$rs->Abrir()) return; - $rs->Primero(); - $hostname=$rs->campos["hostname"]; - $ip=$rs->campos["ip"]; - $mac=$rs->campos["mac"]; - $netiface=$rs->campos["netiface"]; - $netmask=$rs->campos["netmask"]; - $router=$rs->campos["router"]; - $ntp=$rs->campos["ntp"]; - $dns=$rs->campos["dns"]; - $proxy=$rs->campos["proxy"]; - $group=cleanString($rs->campos["grupo"]); - $repo=$rs->campos["iprepo"]; - $server=$rs->campos["ipserveradm"]; - $vga=$rs->campos["vga"]; - $hardprofile=cleanString($rs->campos["hardprofile"]); - $oglivedir=$rs->campos["oglivedir"]; - $ogunit=$rs->campos["ogunit"]; - if ($ogunit == 0 or $rs->campos["directorio"] == null) { - $directorio="" ; - } else { - $directorio=$rs->campos["directorio"]; - } - - $rs->Cerrar(); - // Componer código de idioma para el parámetro de arranque. switch ($lang) { case "eng": @@ -138,49 +94,18 @@ function createBootMode ($cmd, $bootopt, $hostid, $lang) { break; } - // Componer parámetros del kernel. - $infohost=" LANG=$lang". - " ip=$ip:$server:$router:$netmask:$hostname:$netiface:none" . - " group=$group" . - " ogrepo=$repo" . - " oglive=$server" . - " oglog=$server" . - " ogshare=$server"; - // Añadir parámetros opcionales. - if (! empty ($ntp)) { $infohost.=" ogntp=$ntp"; } - if (! empty ($dns)) { $infohost.=" ogdns=$dns"; } - if (! empty ($proxy)) { $infohost.=" ogproxy=$proxy"; } - if (! empty ($hardprofile)) { $infohost.=" hardprofile=$hardprofile"; } - // Comprobar si se usa el parámetro "vga" (número de 3 cifras) o "video" (cadena). - if (! empty ($vga)) { - // UHU - Se sustituye la función is_int por is_numeric, ya que al ser un string no funciona bien con is_int - if (is_numeric($vga) && strlen($vga) == 3) { - $infohost.=" vga=$vga"; - } else { - $infohost.=" video=$vga"; - } - } - if (! empty ($directorio)) { $infohost.=" ogunit=$directorio"; } - - $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)); - - // Crear fichero de arranque a partir de la plantilla y los datos del cliente. - // UHU - si el parametro vga no existe, no se quita. - if (! empty ($vga)) { - exec("sed -e 's|vga=...||g; s|INFOHOST|$infohost|g; s|set ISODIR=.*|set ISODIR=$oglivedir|g' " . PXEDIR . "/templates/$bootopt > $macfile"); - } - else{ - exec("sed -e 's|INFOHOST|$infohost|g; s|set ISODIR=.*|set ISODIR=$oglivedir|g; s|set ISODIR=.*|set ISODIR=$oglivedir|g' " . PXEDIR . "/templates/$bootopt > $macfile"); - } - chmod($macfile, 0777); + // Descripción plantilla PXE + $description=exec("awk 'NR==1 {print $2}' ".PXEDIRBIOS."/templates/".$bootopt); + if ($description === "") $description=exec("awk 'NR==1 {print $2}' ".PXEDIRUEFI."/templates/".$bootopt); + // Llamamos al script setclientmode + shell_exec("export LANG=$lang $acceso; /opt/opengnsys/bin/setclientmode $description $hostname PERM"); } /** * deleteBootFile ($mac) * @brief Borra el fichero PXE del ordenador con la dirección MAC correspondiente. - * @param {String} mac Dirección MAC del ordenador (sin caracteres ":"). + * @param String mac Dirección MAC del ordenador (sin caracteres ":"). * @versión 1.0.5 - Primera versión, adaptada de NetBoot Avanzado. * @authors Ramón Gómez - ETSII Universidad de Sevilla * @date 2013-04-25 @@ -189,19 +114,20 @@ function deleteBootFile ($mac) { // Obtener nombre de fichero a partir de dirección MAC. $mac = strtoupper($mac); - $macfile = PXEDIR . "/01-" . 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-" . substr($mac, 0, 2) . "-" . substr($mac, 2, 2) . "-" . substr($mac, 4, 2) . "-" . substr($mac, 6, 2) . "-" . substr($mac, 8, 2) . "-" . substr($mac, 10, 2); // Eliminar el fichero. - @unlink($macfile); + @unlink(PXEDIRBIOS.$macfile); + @unlink(PXEDIRUEFI.$macfile); } /** * updateBootMode ($cmd, $idfield, $idvalue, $lang) * @brief Ejecuta la función para componer fichero PXE para todos los clientes que cumplan * con un determinado criterio de búsqueda basado en clave ejena. - * @param {Object} cmd Objeto de conexión con la base de datos. - * @param {String} idfield Campo identificador de la clave ajena para buscar ordenadores. - * @param {Number} idvalue Valor a buscar en el ídentificador de la clave ajena. - * @param {String} lang Idioma de arranque. + * @param Object cmd Objeto de conexión con la base de datos. + * @param String idfield Campo identificador de la clave ajena para buscar ordenadores. + * @param Integer idvalue Valor a buscar en el ídentificador de la clave ajena. + * @param String lang Idioma de arranque. * @versión 1.0.5 - Primera versión, adaptada de NetBoot Avanzado. * @authors Ramón Gómez - ETSII Universidad de Sevilla * @date 2013-04-25 @@ -216,7 +142,7 @@ function updateBootMode ($cmd, $idfield, $idvalue, $lang) { $idvalue = mysqli_real_escape_string ($cmd->Conexion->controlador, $idvalue); // Obtener los ordenadores asociados al aula y sus plantillas de arranque. - $cmd->texto = "SELECT idordenador AS hostid, arranque AS bootopt + $cmd->texto = "SELECT nombreordenador AS hostname, arranque AS bootopt FROM ordenadores WHERE $idfield=$idvalue"; $rs = new Recordset; @@ -224,11 +150,12 @@ function updateBootMode ($cmd, $idfield, $idvalue, $lang) { if ($rs->Abrir()) { $rs->Primero(); while (! $rs->EOF) { - $hostid=$rs->campos["hostid"]; - if (! empty ($hostid)) { + $hostname=$rs->campos["hostname"]; + if (! empty ($hostname)) { $bootopt=$rs->campos["bootopt"]; + // Volver a crear el fichero de arranque. - createBootMode ($cmd, $bootopt, $hostid, $lang); + createBootMode ($cmd, $bootopt, $hostname, $lang); } $rs->Siguiente(); } @@ -239,9 +166,9 @@ function updateBootMode ($cmd, $idfield, $idvalue, $lang) { /** * updateBootRepo ($cmd, $repoid) * @brief Actualiza la IP del repositorio en los ficheros PXE de todos sus equipos asociados. - * @param {Object} cmd Objeto de conexión con la base de datos - * @param {Integer} repoid Campo identificador del repositorio - * @return {Integer} 0, sin errores; -1, error acceso a BD; >0, ficheros no modificados + * @param Object cmd Objeto de conexión con la base de datos + * @param Integer repoid Campo identificador del repositorio + * @return Integer 0, sin errores; -1, error acceso a BD; >0, ficheros no modificados * @versión 1.1.0 - Primera versión. * @authors Ramón Gómez - ETSII Universidad de Sevilla * @date 2018-01-19 @@ -261,13 +188,15 @@ function updateBootRepo ($cmd, $repoid) { $mac = $rs->campos["mac"]; $repo = $rs->campos["iprepo"]; // Obtener nombre de fichero PXE a partir de la MAC del ordenador cliente. - $macfile = PXEDIR . "/01-" . 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-" . substr($mac, 0, 2) . "-" . substr($mac, 2, 2) . "-" . substr($mac, 4, 2) . "-" . substr($mac, 6, 2) . "-" . substr($mac, 8, 2) . "-" . substr($mac, 10, 2); // Actualizar parámetro "ogrepo" en el fichero PXE. - if ($pxecode = @file_get_contents($macfile)) { + foreach (array (PXEDIRBIOS,PXEDIRUEFI) as $bootdir) { + if ($pxecode = @file_get_contents($bootdir.$macfile)) { $pxecode = preg_replace("/ogrepo=[^ ]*/", "ogrepo=$repo", $pxecode); - if (! @file_put_contents($macfile, $pxecode)) { - $erros++; + if (! @file_put_contents($bootdir.$macfile, $pxecode)) { + $errors++; } + } } $rs->Siguiente(); } diff --git a/admin/WebConsole/jscripts/boot_grub4dos.js b/admin/WebConsole/jscripts/boot_grub4dos.js index 7deffdf4..e7cd8359 100644 --- a/admin/WebConsole/jscripts/boot_grub4dos.js +++ b/admin/WebConsole/jscripts/boot_grub4dos.js @@ -8,6 +8,8 @@ // Este fichero implementa las funciones javascript del fichero boot_grub4dos.php // ************************************************************************************************************************************************* //________________________________________________________________________________________________________ +// Se utiliza en los botones in y out de las columnas +// Permite mover los equipos seleccionados desde una columna a otra function move(fbox, tbox) { var arrFbox = new Array(); var arrTbox = new Array(); @@ -50,27 +52,25 @@ no.text = arrTbox[c]; tbox[c] = no; } } - +// Se utiliza al enviar el formulario +// Asigna como valor del campo listOfItems un listado +// con las correspodendencias nombre plantilla - nombre equipo. +// Version 1.1.1 - Se identifica plantilla y equipo como necesita la función createBootMode (#802 #888) function allSelect() { -var saveString = ""; -// seleccionamos cada uno de los select -var input = document.getElementsByTagName('select'); -//alert(input.length); -for(var i=0; i<input.length; i++){ -//if(inputs[i].getAttribute('type')=='button'){ -// your statements -patron = "L"; -parm = input[i].name; -//alert(parm); -parm = parm.replace(patron,''); -//alert(parm); -for (j=0;j<input[i].length;j++) - { - //List.options[i].selected = true; - saveString = saveString + parm + '|' + input[i].options[j].value + ';'; - //alert(saveString); - } + var saveString = ""; + // seleccionamos cada uno de los select + var input = document.getElementsByTagName('select'); + + for(var i=0; i<input.length; i++){ + // quitamos L inicial + patron = "L"; + parm = input[i].name; + parm = parm.replace(patron,''); + + for (j=0;j<input[i].length;j++) { + saveString = saveString + parm + '|' + input[i].options[j].text + ';'; + } + } + document.forms[0].listOfItems.value = saveString; } -document.forms['myForm'].listOfItems.value = saveString; -}
\ No newline at end of file diff --git a/admin/WebConsole/jscripts/consolaremota.js b/admin/WebConsole/jscripts/consolaremota.js index b5f78ba8..26c0e9c9 100644 --- a/admin/WebConsole/jscripts/consolaremota.js +++ b/admin/WebConsole/jscripts/consolaremota.js @@ -5,7 +5,7 @@ function confirmar() { ambito=document.fdatos.ambito.value; if(ambito==AMBITO_ORDENADORES){ - var diveco=document.getElementById("diveco"); // Contenedor de salida de cdigo + var diveco=document.getElementById("diveco"); // Contenedor de salida de código diveco.innerHTML=" "; // } var Obtcmd=document.getElementById("comando"); @@ -37,7 +37,7 @@ function enviaMsg(cmd) } //______________________________________________________________________________________________________ function resultadocmd(resul){ - if(resul==1){ // Si todo va bien se llama a la funcin que recupera elfichero de eco + if(resul==1){ // Si todo va bien se llama a la función que recupera elfichero de eco //alert(TbMsg[1]) if(ambito==AMBITO_ORDENADORES){ sw=2; diff --git a/admin/WebConsole/menus/examplemenu.php b/admin/WebConsole/menus/examplemenu.php index b04b3dd0..0738c797 100644 --- a/admin/WebConsole/menus/examplemenu.php +++ b/admin/WebConsole/menus/examplemenu.php @@ -58,19 +58,14 @@ <dl class="windows"> <dt><a href="command:bootOs 1 1" title="Init session Windows, accesskey: 1" 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: 2" accesskey="2">Install Windows.</a></dt> + <dt><a href="command+confirm:restoreImage REPO windows 1 1" title="Format the disk and install the Windows operating system, accesskey: 2" accesskey="2">Install Windows.</a></dt> <dd>The installation process takes a few minutes.</dd> </dl> - <!-- dl class="windows"> - <dt><a href="commandwithconfirmation:/opt/opengnsys/interfaceAdm/RestaurarImagenBasica 1 1 WINXPRD2 10.1.15.3 0000 0" title="Restore Windows Image, accesskey: 2" accesskey="2">Restore Windows Image.</a></dt> - <dd>Restore Windows Image using synchronization.</dd> - </dl --> - <dl class="linux"> - <dt><a href="command:bootOs 1 2" title="Init session GNU/Linux, accesskey: 3" accesskey="3">Init session GNU/Linux.</a></dt> + <dt><a href="command+output:bootOs 1 2" title="Init session GNU/Linux, accesskey: 3" accesskey="3">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" accesskey="4">Install GNU/Linux.</a></dt> + <dt><a href="command+output+confirm:restoreImage REPO linux 1 2" title="Format the disk and install the GNU/Linux operating system GNU/Linux, accesskey: 4" accesskey="4">Install GNU/Linux.</a></dt> <dd>The installation process takes a few minutes.</dd> </dl> diff --git a/admin/WebConsole/menus/menuejemplo.php b/admin/WebConsole/menus/menuejemplo.php index b3fcd175..7ceead9e 100644 --- a/admin/WebConsole/menus/menuejemplo.php +++ b/admin/WebConsole/menus/menuejemplo.php @@ -58,20 +58,15 @@ <dl class="windows"> <dt><a href="command:bootOs 1 1" title="Iniciar sesión de Windows, accesskey: 1" accesskey="1">[1] Arrancar Windows.</a></dt> <dd>Arranque normal de Windows sin modificaciones.</dd> - <dt><a href="commandwithconfirmation:restoreImage REPO windows 1 1" title="Formatear el disco e instalar el sistema operativo Windows, accesskey: 2" accesskey="2">[2] Instalar Windows. </a></dt> + <dt><a href="command+confirm:restoreImage REPO windows 1 1" title="Formatear el disco e instalar el sistema operativo Windows, accesskey: 2" accesskey="2">[2] Instalar Windows. </a></dt> <dd>El proceso de instalación tardará unos minutos.</dd> </dl> - <!-- dl class="windows"> - <dt><a href="commandwithconfirmation:/opt/opengnsys/interfaceAdm/RestaurarImagenBasica 1 1 WINXPRD2 10.1.15.3 0000 0" title="Sincronizar imagen de Windows, accesskey: 2" accesskey="2">Sincronizar Imagen Window.</a></dt> - <dd>Restaurar Imagen Windows con sincronización.</dd> - </dl --> - <dl class="linux"> - <dt><a href="command:bootOs 1 2" title="Iniciar sesión de Ubuntu 12, accesskey: 3" accesskey="3">[3] Arrancar GNU/Linux. </a></dt> + <dt><a href="command+output:bootOs 1 2" title="Iniciar sesión de Ubuntu 12, accesskey: 3" accesskey="3">[3] Arrancar GNU/Linux. </a></dt> <dd>Arranque normal de <acronym title="GNU's not Unix">GNU</acronym>/Linux sin modificaciones.</dd> - <dt><a href="commandwithconfirmation:restoreImage REPO linux 1 2" title="Formatear el disco e instalar el sistema operativo GNU/Linux, accesskey: 4" accesskey="4">[4] Instalar GNU/Linux. </a></dt> + <dt><a href="command+output+confirm:restoreImage REPO linux 1 2" title="Formatear el disco e instalar el sistema operativo GNU/Linux, accesskey: 4" accesskey="4">[4] Instalar GNU/Linux. </a></dt> <dd>El proceso de instalación tardará unos minutos.</dd> </dl> diff --git a/admin/WebConsole/nada.php b/admin/WebConsole/nada.php index 9e0aa255..4393b463 100644 --- a/admin/WebConsole/nada.php +++ b/admin/WebConsole/nada.php @@ -1,6 +1,32 @@ <?php +/** + * @file nada.php + * @brief Muestra el marco derecho "por defecto" cuando no se ejecuta un comando. + * @version 1.1.1 - Se incluyen consejos del día la primera vez que se entra. + * @date 2019-09-06 + */ + include_once("./includes/ctrlacc.php"); include_once("./idiomas/php/".$idioma."/nada_".$idioma.".php"); + +// ################### Consejo del día ################# // +// Sólo lo muestro al entrar en la consola +$consejo = ''; +if (basename($_SERVER['HTTP_REFERER']) == "frames.php") { + // Elijo el consejo de hoy aleatoriamente. + $numTip=rand(0,count($TipOfDay)-1); + $tipMessage=$TipOfDay[$numTip]; + $tipImage=is_file("images/tipOfDay_$numTip.png") ? '<img src="images/tipOfDay_'.$numTip.'.png">' : ''; + + $consejo = ' <div>'."\n". + ' <p align=center class=cabeceras><img border=0 nod="aulas-1" value="Sala Virtual" style="cursor:pointer" src="images/iconos/logocirculos.png" > '.$TbMsg["TIP"].'</p>'."\n". + ' <div class="consejo">'."\n". + ' <p class="subcabeceras help_menu">'.$tipMessage.'</p>'."\n". + ' <div>'.$tipImage.'</div>'."\n". + ' </div>'."\n". + ' </div>'."\n"; +} + // ########################################################################################################## // ############### PARA SABER QUE IP TIENE EL DISPOSITIVO QUE ESTA UTILIZANDO OPENGNSYS ################### // ########################################################################################################## @@ -229,9 +255,7 @@ if (empty($data->project)) { <link rel="stylesheet" type="text/css" href="./estilos.css"> </head> <body> - -"Here we will show our content" - + <?php echo $consejo; ?> </body> </html> diff --git a/admin/WebConsole/principal/actualizar.php b/admin/WebConsole/principal/actualizar.php index a67e3585..500b0b89 100644 --- a/admin/WebConsole/principal/actualizar.php +++ b/admin/WebConsole/principal/actualizar.php @@ -15,6 +15,7 @@ include_once("../includes/comunes.php"); include_once("../includes/CreaComando.php"); include_once("../includes/RecopilaIpesMacs.php"); + include_once('../includes/restfunctions.php'); //________________________________________________________________________________________________________ $ambito=0; $idambito=0; @@ -41,23 +42,5 @@ //________________________________________________________________________________________________________ // Envio al servidor de la petición //________________________________________________________________________________________________________ - $trama=""; - $shidra=new SockHidra($servidorhidra,$hidraport); - if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra - $parametros="nfn=".$funcion.chr(13); - $parametros.=$aplicacion; - $parametros.=$atributos; - $parametros.=$acciones; - $shidra->envia_comando($parametros); - $trama=$shidra->recibe_respuesta(); - $shidra->desconectar(); - $hlonprm=hexdec(substr($trama,$LONCABECERA,$LONHEXPRM)); - $parametros=substr($trama,$LONCABECERA+$LONHEXPRM,$hlonprm); - $ValorParametros=extrae_parametros($parametros,chr(13),'='); - $trama_notificacion=$ValorParametros["res"]; - echo $trama_notificacion; // Devuelve respuesta - } - else - echo "0"; // Error de conexión -?> + echo refresh($cadenaip) === 0 ? "0" : "1"; diff --git a/admin/WebConsole/principal/aula.php b/admin/WebConsole/principal/aula.php index f687c0b6..f300c508 100644 --- a/admin/WebConsole/principal/aula.php +++ b/admin/WebConsole/principal/aula.php @@ -187,7 +187,7 @@ function RecorreAulas($cmd){ while (!$rs->EOF){ $idaula=$rs->campos["idaula"]; $nombreaula=$rs->campos["nombreaula"]; - $idordprofesor=$rs->campos["idordprofesor"]; + $idordprofesor=(isset($rs->campos["idordprofesor"]) ? $rs->campos["idordprofesor"] : 0); $cmd->texto="SELECT idordenador,nombreordenador,ip,mac FROM ordenadores WHERE idaula=".$idaula; $k=0; $cadenaip=""; diff --git a/admin/WebConsole/principal/ayuda.php b/admin/WebConsole/principal/ayuda.php index b5380e5c..3bd8aeae 100644 --- a/admin/WebConsole/principal/ayuda.php +++ b/admin/WebConsole/principal/ayuda.php @@ -28,6 +28,7 @@ $version=(empty($data->project)) ? "OpenGnsys" : @$data->project.' '.@$data->ver <p class=subcabeceras><a class="help_menu" href="manual.php"> <?php echo $TbMsg["MANUAL"] ?> </a> </p> <p class=subcabeceras><a class="help_menu" href="../api/index.html"> <?php echo $TbMsg["API"] ?> </a></p> <p class=subcabeceras><a class="help_menu" href="engine.php"> <?php echo $TbMsg["CFG"] ?> </a> </p> + <p class=subcabeceras><a class="help_menu" href="../rest/"> <?php echo $TbMsg["REST"] ?> </a></p> <p> </p> <p class=subcabeceras><a class="help_menu" href="changelog.php"> <?php echo $TbMsg["CHANGELOG"]." ".$version ?> </a> </p> <p class=subcabeceras><a class="help_menu" href="https://listas.unizar.es/cgi-bin/mailman/listinfo/opengnsys-users" target="_blank"> <?php echo $TbMsg["USERMAIL"] ?> </a> </p> diff --git a/admin/WebConsole/principal/boot_grub4dos.php b/admin/WebConsole/principal/boot_grub4dos.php index e8a5a902..fbd7e171 100644 --- a/admin/WebConsole/principal/boot_grub4dos.php +++ b/admin/WebConsole/principal/boot_grub4dos.php @@ -1,11 +1,10 @@ <?php +// Version 1.1.1 - Muestra las plantillas tipo BIOS y UEFI. Se incluyen algunos id para pasar los datos necesarios a serclientmode (#802). +// Autor: Irina Gomez - ETSII Universidad de Sevilla. +// Fecha: 2019/02/12 + include_once("../includes/ctrlacc.php"); include_once("../clases/AdoPhp.php"); -include_once("../clases/XmlPhp.php"); -include_once("../clases/MenuContextual.php"); -include_once("../clases/SockHidra.php"); -include_once("../includes/constantes.php"); -include_once("../includes/comunes.php"); include_once("../includes/CreaComando.php"); include_once("../idiomas/php/".$idioma."/boot_grub4dos_".$idioma.".php"); @@ -19,16 +18,12 @@ $idambito=0; $nombreambito=""; $opcion=0; $modo=""; - - -if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; // Recoge parametros -if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; -if (isset($_GET["nombreambito"])) $nombreambito=$_GET["nombreambito"]; -if (isset($_POST["litambito"])) $litambito=$_POST["litambito"]; // Recoge parametros -if (isset($_POST["idambito"])) $idambito=$_POST["idambito"]; -if (isset($_POST["nombreambito"])) $nombreambito=$_POST["nombreambito"]; -if (isset($_POST["opcion"])) $opcion=$_POST["opcion"]; -if (isset($_POST["modo"])) $modo=$_POST["modo"]; +if (isset($_REQUEST["litambito"])) $litambito=$_REQUEST["litambito"]; // Recoge parametros +if (isset($_REQUEST["idambito"])) $idambito=$_REQUEST["idambito"]; +if (isset($_REQUEST["nombreambito"])) $nombreambito=$_REQUEST["nombreambito"]; +if (isset($_REQUEST["opcion"])) $opcion=$_REQUEST["opcion"]; +if (isset($_REQUEST["modo"])) $modo=$_REQUEST["modo"]; +if (empty($_SESSION["widcentro"])) $modo=1; switch($litambito){ case "aulas": @@ -36,81 +31,72 @@ switch($litambito){ break; case "gruposordenadores": $seleccion= "and grupoid=" . $idambito . ""; + default: + $seleccion=""; break; } + //######################################################################### // LEYENDO EL DIRECTORIO -// /var/lib/tftboot/menu.lst/templates +// /var/lib/tftboot/menu.lst/templates y /var/lib/tftpboot/grub/templates/ //######################################################################### -$dirtemplates="/var/lib/tftpboot/menu.lst/templates/"; -// Leer nombres de ficheros y quitar plantilla "pxe". -chdir($dirtemplates); -$pn=glob("*"); +// Leer nombres de ficheros plantillas bios +$dirtemplatesbios="/var/lib/tftpboot/menu.lst/templates/"; +chdir($dirtemplatesbios); +$pnbios=glob("*"); + +// Leer nombres de ficheros plantillas uefi +$dirtemplatesuefi="/var/lib/tftpboot/grub/templates/"; +chdir($dirtemplatesuefi); +$pnuefi=glob("*"); + +// Unimos las plantillas y eliminamos repetidos +$pn=array_unique(array_merge($pnbios,$pnuefi)); + +// Numero columnas +$column=count($pn); + +// Plantilla en los dos directorios +$pncomun=array_intersect($pnbios,$pnuefi); + +// quitar plantilla "pxe". unset($pn[array_search("pxe", $pn)]); sort($pn); chdir(__DIR__); -//Leemos el ultimo fichero y extraemos su numero -$ultimofichero=end($pn); -$ultimonumero=substr($ultimofichero,0,2); - -//Comprobamos que no se mayor que 99 (tendria 3 caracteres) -if ($ultimonumero==99) - {$ultimonumero=20; -}else{ - $ultimonumero++; -} -//Buscamos si el siguiente numero esta disponible -$encontrado=FALSE; -while($encontrado==FALSE) -{ - if (in_array($ultimonumero, $pn)) - { - $ultimonumero++; - }else{ - $encontrado=TRUE; - } -} ?> <html> -<TITLE>Administración web de aulas</TITLE> <head> +<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/propiedades_aulas.js"></SCRIPT> <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT> <SCRIPT language="javascript" src="../jscripts/boot_grub4dos.js"></SCRIPT> - <SCRIPT language="javascript" src="../idiomas/javascripts/esp/propiedades_aulas_esp.js"></SCRIPT></HEAD> + <SCRIPT language="javascript" src="../idiomas/javascripts/esp/propiedades_aulas_esp.js"></SCRIPT> </head> <body> -<TABLE align=center border=1 cellPadding=1 cellSpacing=1 class=tabla_datos > -<TR valign="bottom"><TD colspan="100%" align="left" nowrap> -<form name="modoadmin" id="modoadmin" method="post" action="./boot_grub4dos.php"> +<form name="modoadmin" id="modoadmin" method="post" action="../gestores/gestor_pxe_grub4dos.php"> <input type="hidden" name="litambito" value="<?php echo $litambito?>"> <input type="hidden" name="idambito" value="<?php echo $idambito?>"> <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> <input type="hidden" name="opcion" value="<?php echo $opcion?>"> -<?php - if (empty($_SESSION["widcentro"])) { - $modo=1; - } -?> -</form> - + <input type="hidden" name="listOfItems" value=""> + <!-- para la zona de administración --> + <input type="hidden" name="opcioncrear" value=""> + <P align=center class=cabeceras><?php echo $TbMsg[42]; ?><BR> + <span align=center class=subcabeceras> <?php echo $nombreambito; ?> </span> +<TABLE align=center border=1 cellPadding=1 cellSpacing=1 class=tabla_datos > +<TR valign="bottom"><TD colspan="100%" align="left" nowrap> </TD></TR> <tr> <?php -if (! empty($modo)) -{?> -<td valign="top"> -<?php include_once("./boot_grub4dos_tabla.php");?> -</td> -<?php }?> -<form name="myForm" method="post" action="../gestores/gestor_pxe_grub4dos.php?idaula=<?php echo $idambito ?>&nombreambito=<?php echo $nombreambito?>&litambito=<?php echo $litambito?>" > +// Si el modo no está vacio estamos en la parte de administración +// Incluyo un a primera columna con las opciones crear, modificar,... +if (! empty($modo)) include_once("./boot_grub4dos_tabla.php"); +?> - <P align=center class=cabeceras><?php echo $TbMsg[42]; ?><BR> - <span align=center class=subcabeceras> <?php echo $nombreambito; ?> </span> <?php ///////////////////////////////////////////////// if (!empty($_SESSION["widcentro"])){ ?> <input type="submit" value=<?php echo $TbMsg[43]; ?> name="saveButton" onclick="allSelect()"></P> @@ -118,15 +104,12 @@ if (! empty($modo)) } ?> -<input type="hidden" name="listOfItems" value=""> -<?php -?> <!-- primer file, nombre de las equipos por pxe hace falta <td> </td>--> -<td width="80"> +<td width="80" id='ogLive'> <!-- <a href="./muestramenu.php?labelmenu=pxe"> OGlive </a><br> pxe <br> --> <?php //Leer fichero pxe -$description=exec("awk 'NR==1 {print $2}' ".$dirtemplates."pxe");//$text=trim($text); +$description=exec("awk 'NR==1 {print $2}' ".$dirtemplatesbios."pxe"); ?> <br><?php echo $description;?> <br><br> <select multiple size="28" name="Lpxe" id="Lpxe"> @@ -151,15 +134,22 @@ if (!empty($_SESSION["widcentro"])) // //mostrar los datos -for($i=0; $i<count($pn); $i++) - {//for +for($i=0; $i<count($pn); $i++) { + $nocomun=""; + $description=exec("awk 'NR==1 {print $2}' ".$dirtemplatesbios.$pn[$i]); + // Si la plantilla no es comun, definimos si es bios o uefi + if ( ! in_array($pn[$i],$pncomun)) { + $nocomun= ($description === "") ? "(uefi)" : "(bios)"; + } + // Si la descripción está vacía consultamos las plantillas uefi + if ($description == "") $description=exec("awk 'NR==1 {print $2}' ".$dirtemplatesuefi.$pn[$i]); + if ($pn[$i]==$desconocido) {$listadopxe=listadesconocido($cmd,$desconocido,$seleccion); - if ($existe==""){}else{ - - $description=exec("awk 'NR==1 {print $2}' ".$dirtemplates.$pn[$i]); //$text=trim($text); + // Solo lo mostramos si existen aquipos no asignados. + if (isset($existe)){ echo "<td></td>"; - echo "<td> <font color=red>"; + echo "<td><font id='$description' color=red>"; echo $description; echo " <br>"; echo "<input type='button' onClick='move(this.form.L" . $pn[$i] . ",this.form.Lpxe)' value='OUT' style='height: 25px; width: 50px' >"; @@ -168,23 +158,16 @@ for($i=0; $i<count($pn); $i++) echo "<select multiple size='28' name='L" . $pn[$i] . "' >"; $listadopxe=""; $desconocido="00unknown"; - if ($pn[$i]==$desconocido) - { - $listadopxe=listaequipos($cmd,$desconocido,$seleccion); - echo $listadopxe; - }else{ - $listadopxe=listaequipos($cmd,$pn[$i],$seleccion); - echo $listadopxe; - } - echo "</select>"; - echo "</td>"; - } + $listadopxe=listaequipos($cmd,$pn[$i],$seleccion); + echo $listadopxe; + echo "</select>"; + echo "</td>"; + } - }else{ - $description=exec("awk 'NR==1 {print $2}' ".$dirtemplates.$pn[$i]); //$text=trim($text); - echo "<td></td>"; - echo "<td> "; - echo $description; + } else { + echo "<td></td>\n"; + echo "<td id='$description'> "; + echo $description ." ". $nocomun; echo " <br>"; echo "<input type='button' onClick='move(this.form.L" . $pn[$i] . ",this.form.Lpxe)' value='OUT' style='height: 25px; width: 50px' >"; echo "<input type='button' onClick='move(this.form.Lpxe,this.form.L" . $pn[$i] .")' value='IN' style='height: 25px; width: 35px' >"; @@ -192,25 +175,28 @@ for($i=0; $i<count($pn); $i++) echo "<select multiple size='28' name='L" . $pn[$i] . "' >"; $listadopxe=""; $desconocido="00unknown"; -/////////////////////////////////////////////////////////////// -if (!empty($_SESSION["widcentro"])) -{ - if ($pn[$i]==$desconocido) + /////////////////////////////////////////////////////////////// + if (!empty($_SESSION["widcentro"])) { - $listadopxe=listaequipos($cmd,$desconocido,$seleccion); - echo $listadopxe; - }else{ - $listadopxe=listaequipos($cmd,$pn[$i],$seleccion); - echo $listadopxe; - } -} -//////////////////////////////////////////////////////////////// + $listadopxe=listaequipos($cmd,$pn[$i],$seleccion); + echo $listadopxe; + } + //////////////////////////////////////////////////////////////// echo "</select>"; echo "</td>"; - }//Primer if - }//for + }//Primer if +}//for //##agp +?> +</tr> +<tr><th colspan="<?php echo (2*$column) ?>"><?php echo $TbMsg["UEFI"]; ?></th></tr> +</table> +</form> +</body> +</html> + +<?php // esta funcion genera los elementos de un select(formulario html) donde aparecen los nombres de los ordenadores, según su menu pxe function listaequipos($cmd,$menupxe,$seleccion) { @@ -245,16 +231,3 @@ $existe= $rs->campos["nombreordenador"]; } $rs->Cerrar(); } - - -?> -</form> -</tr> - - - -</table> - - -</body> -</html> diff --git a/admin/WebConsole/principal/boot_grub4dos_crear.php b/admin/WebConsole/principal/boot_grub4dos_crear.php index 26cc190d..747400c0 100644 --- a/admin/WebConsole/principal/boot_grub4dos_crear.php +++ b/admin/WebConsole/principal/boot_grub4dos_crear.php @@ -1,767 +1,472 @@ -<?php
-include_once("../includes/ctrlacc.php");
-include_once("../clases/AdoPhp.php");
-include_once("../clases/XmlPhp.php");
-include_once("../clases/MenuContextual.php");
-include_once("../clases/SockHidra.php");
-include_once("../includes/constantes.php");
-include_once("../includes/comunes.php");
-include_once("../includes/CreaComando.php");
-include_once("../idiomas/php/".$idioma."/boot_grub4dos_".$idioma.".php");
-
-$cmd=CreaComando($cadenaconexion);
-if (!$cmd)
- Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
-//________________________________________________________________________________________________________
-
-if (isset($_POST["litambito"])) $litambito=$_POST["litambito"]; // Recoge parametros
-if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
-if (isset($_POST["nombreambito"])) $nombreambito=$_POST["nombreambito"];
-if (isset($_POST["opcion"])) $opcion=$_POST["opcion"];
-if (isset($_POST["opcioncrear"])) $opcioncrear=$_POST["opcioncrear"];
-$ultimonumero = isset($_POST["ultimonumero"]) ? $_POST["ultimonumero"] : "";
-$boton = isset ($_REQUEST["boton"]) ? $_REQUEST["boton"] : "";
-$confirmado = ($boton == $TbMsg[13] && ($opcioncrear == 1 || $opcioncrear == 2)) ? "1" : "";
-$guarnomb = isset($_POST["nombrenuevoboot"]) ? ucfirst($_POST["nombrenuevoboot"]) : "";
-$admin = isset($_POST["modo"]) ? $_POST["modo"] : "";
-$selecdescripcion = isset($_POST["selecdescripcion"]) ? $_POST["selecdescripcion"] : "";
-$descripcion = "";
-$modo = "";
-$seleccion = "";
-
-switch($litambito){
- case "aulas":
- $seleccion="and idaula=" . $idambito ."";
- break;
- case "gruposordenadores":
- $seleccion= "and grupoid=" . $idambito . "";
- break;
-}
-?>
-<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_aulas.js"></SCRIPT>
- <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT>
- <SCRIPT language="javascript" src="../jscripts/boot_grub4dos.js"></SCRIPT>
- <SCRIPT language="javascript" src="../idiomas/javascripts/esp/propiedades_aulas_esp.js"></SCRIPT></HEAD>
-</head>
-
-<body>
-<P align=center class=cabeceras><?php echo $TbMsg[42]; ?><BR>
- <SPAN align=center class=subcabeceras> <?php echo $nombreambito; ?> </SPAN></P>
-<!-- <input type="submit" value=<?php echo $TbMsg[43]; ?> name="saveButton" onclick="allSelect()"> </P> -->
-<?php
-//##################################################################################################################################
-//########### NUEVO COLUMNA ARRANQUE #############################################################################################
-//##################################################################################################################################
-
-if ($opcioncrear == 1)
- {
- //$confirmado=$_POST["confirmado"];
- if ($confirmado == 1)
- {
- //$delcar=array(" "," /", "-", "@", "=");
- $descripfich=$guarnomb;$descripfich=preg_replace("/[^A-Za-z0-9]/", "-", $descripfich);//str_replace($delcar, "-", $descripfich);
- $guarnomb=preg_replace("/[^A-Za-z0-9]/", "", $descripfich);//str_replace($delcar, "", $guarnomb);
- $nombrenuevoboot=$ultimonumero.$guarnomb;
- $parametrosnuevoboot=$_POST["parametrosnuevoboot"];
- $nuevoboot = "/var/lib/tftpboot/menu.lst/templates/".$nombrenuevoboot;
- if($guarnomb != "") {
- $fp = fopen($nuevoboot, "w");
- $string = $TbMsg[22].$descripfich."\n".$parametrosnuevoboot;
- $write = fputs($fp, $string);
- fclose($fp);
- ?>
- <TABLE width="500" align=center border=1 >
- <TR><TD align="center"><br><?php if ($guarnomb != null) echo $TbMsg[6];?><br><br><SPAN align=center class=subcabeceras><?php echo $descripfich;?></span><br><br><br>
- <form name="crearranque" method="post" action="./boot_grub4dos.php">
- <input type="hidden" name="confirmado" value="1">
- <?php }else{ ?>
-
- <TABLE width="500" align=center border=1 >
- <TR><TD align="center"><br><br><br><SPAN align=center class=subcabeceras><?php echo $TbMsg[14];?></span><br><br><br>
- <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
- <input type="hidden" name="confirmado" value="">
- <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>">
- <?php }?>
-
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="opcioncrear" value="1">
- <input type="submit" value="Continuar" name="nuevoarran">
- </form>
- </TR></TD>
- </TABLE>
-<?php }else{
-?>
-
-<TABLE width="650" align=CENTER border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
-
-<TR align=center>
- <TD height="70" colspan="2" valign="middle">
- <SPAN align=center class=cabeceras> <?php echo $TbMsg[3]?> </SPAN>
- </TD>
- </TR>
-<TR align=right>
- <TD colspan="2" valign="middle">
-
-
-
- </TD>
- </TR>
-<TR>
-<form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
- <TD width="150" height="10" valign="middle">
- <SPAN align=center class=subcabeceras><?php echo $TbMsg[12]?></SPAN>
- </TD>
-
- <TD width="500" height="10" valign="middle">
- <input type="text" name="nombrenuevoboot" id="textfield" size="25" value="<?php echo $guarnomb ?>">
- </TD>
-
-</TR>
-<TR>
- <TD width="150" height="100" valign="middle">
-
-<SPAN align=center class=subcabeceras><?php echo $TbMsg[19]?><br></SPAN>
-<?php
-if ($boton == $TbMsg[17])
-{echo '<input name=boton type=submit value="'.$TbMsg[18].'">';}else{echo '<input name=boton type=submit value=Plantilla>';}
-?>
- </TD>
-
- <TD width="500" height="100" valign="middle">
-
-
- <textarea name="parametrosnuevoboot" id="parametrosnuevoboot" cols="60" rows="12">
-<?php
-if ($boton == $TbMsg[17])
-echo "timeout 3
-title FirstHardDisk-FirstPartition
-keeppxe
-root (hd0,0)
-chainloader (hd0,0)+1
-boot";
-?>
- </textarea>
- </TD>
-</TR>
-<TR>
- <TD width="150" valign="middle">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>">
- <input type="hidden" name="opcioncrear" value="1">
-
- <input type="submit" name="boton" value="<?php echo $TbMsg[13]?>">
- </form>
- </TD>
-
-<TD width="500" valign="middle"><br />
- <form name="crearranque" method="post" action="./boot_grub4dos.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="modo" value="1">
- <input type="submit" value="<?php echo $TbMsg[16]?>">
- </form>
- </TD>
-</TR>
-</TABLE>
-<?php
-//##################################################################################################################################
-//########### NUEVO COLUMNA ARRANQUE #############################################################################################
-//##################################################################################################################################
-}}?>
-
-
-<?php
-//##################################################################################################################################
-//########### MODIFICAR COLUMNA ARRANQUE #########################################################################################
-//##################################################################################################################################
-
-
-if ($opcioncrear == 2)
- {
- $confirmado=isset($_POST["confirmado"]) ? $_POST["confirmado"] : "";
- if ($confirmado == 1)
- {
- $modificadescripcion=ucfirst($_POST["modificadescripcion"]);
-// $modificadescripcion=str_replace(" ", "", $modificadescripcion);
- $descripfich=$modificadescripcion;$descripfich=preg_replace("/[^A-Za-z0-9]/", "-", $descripfich);
- $ficherow="/var/lib/tftpboot/menu.lst/templates/".$_POST["nombrefichero"];//echo $ficherow."<br>";
- $parametrosmodifica=$_POST["parametrosmodifica"];
-
- if(empty($_POST["modificadescripcion"]))
- {?>
-
- <TABLE width="500" align=center border=1 >
- <TR><TD align="center"><br><br><br><SPAN align=center class=subcabeceras><?php echo $TbMsg[14];?></span><br><br><br>
- <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="confirmado" value="0">
- <input type="hidden" name="opcioncrear" value="2">
- <input type="submit" value="Continuar" name="nuevoarran">
- </form>
- </TR></TD>
- </TABLE>
-
- <?php }else{
- //echo $_POST["nombrefichero"]." -- Descripcion -- ".$descripfich."<br>".$string;
- ///*
- $fp = fopen($ficherow, "w");
- $string = $TbMsg[22].$descripfich."\n".$_POST["parametrosmodifica"];
- $write = fputs($fp, $string);//Escribe la primera linea
- fclose($fp);
- //*/
-
-
- ?>
- <TABLE width="500" align=center border=1 >
- <TR><TD align="center"><br><br><br><SPAN align=center class=subcabeceras><?php echo $TbMsg[7];?></span><br><br><br>
- <form name="crearranque" method="post" action="./boot_grub4dos.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="confirmado" value="0">
- <input type="hidden" name="opcioncrear" value="2">
- <input type="hidden" name="modo" value="1">
- <input type="submit" value="Continuar" name="nuevoarran">
- </form>
- </TR></TD>
- </TABLE>
- <?php }?>
- <?php }else{
-?>
-<?php
-//#########################################################################
-// MODO USUARIO
-//#########################################################################
-if (empty($admin)){
-//#########################################################################
-// LEYENDO EL DIRECTORIO
-// /var/lib/tftboot/menu.lst/templates
-//#########################################################################
-$dirtemplates="/var/lib/tftpboot/menu.lst/templates/";
-$directorio=dir($dirtemplates);
-$pn= array();//pila de nombres
-//bucle para llenar las pilas :P
-while ($archivo = $directorio->read())
-{
- //no mostrar ni "." ni ".." ni "pxe"
- if(($archivo!="pxe")&&($archivo!=".")&&($archivo!=".."))
- {
- array_push($pn, $archivo);
- }
-}
-$directorio->close();
-
-//ordenar las pilas segun la pila de nombres
-array_multisort($pn);
-
-//Leyendo la Descripcion de los ficheros mayores que 20
-for ($b=0;$b<count($pn);$b++)
-{
-$numeros=substr($pn[$b],0,2);
-if ($numeros > 19)
- {
- $descripcion=exec("cat ".$dirtemplates.$pn[$b]." | awk 'NR==1 {print $2}'");//$text=trim($text);
- //Aqui busco el fichero, parametros y descripcion segun llega de $_POST["modificafichero"]
- if ($descripcion == $selecdescripcion)
- {
- $fichero=$pn[$b];
- $param=$dirtemplates.$fichero;
- $parametros=file($param);
- //echo $fichero." -- Descripcion -- ".$descripcion."<br>";
- }
-
- }
-}
-
-?>
-<TABLE width="850" align=CENTER border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
-<TR >
- <TD height="70" colspan="2" valign="middle">
- <p align=center><SPAN align=center class=cabeceras> <?php echo $TbMsg[4]?> </SPAN></p><p aling=left></p>
- <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>">
- <input type="hidden" name="opcioncrear" value="2">
- <input type="hidden" name="modo" value="1">
- <?php if ($_SESSION["wadminetboot"] == 1 ){ ?>
- <input type="submit" value=<?php echo $TbMsg[11]?> name="nuevoarran">
- <?php } ?>
-
- </form>
- </TD>
- </TR>
- <?php if ($numeros > 19){ ?>
-<TR>
-<form name="actualiza" method="post" action="./boot_grub4dos_crear.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>">
- <input type="hidden" name="opcioncrear" value="2">
-
- <TD height="10" colspan="2" valign="middle">
- <SPAN align=center class=subcabeceras><?php echo $TbMsg[9]." ------> ";?></SPAN>
- <select name="selecdescripcion" id="selecdescripcion" onChange="document.actualiza.submit()">
- <option value"" ></option>
- <?php
- for ($z=0;$z<count($pn);$z++)
- {
- if((substr($pn[$z],0,2)) > 19)
- {
- $descripcion=exec("cat ".$dirtemplates.$pn[$z]." | awk 'NR==1 {print $2}'");//$text=trim($text);
- echo '<option value='.$descripcion.'>'.$descripcion.'</option>';
- }
- }
- ?>
- </select>
- </TD>
- </form>
-</TR>
-<?php }else{?>
-<TR>
-<form name="actualiza" method="post" action="./boot_grub4dos.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>">
- <input type="hidden" name="modo" value="1">
-
- <TD height="10" colspan="2" valign="middle">
-<SPAN align=center class=subcabeceras><?php echo $TbMsg[23]." -------> ";?><input type="submit" value=<?php echo $TbMsg[16]?> name="nuevoarran"></SPAN>
- </TD>
- </form>
-</TR>
-
-<?php } ?>
-
-
-<?php if ($selecdescripcion != "") { ?>
-
-<form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
-<TR>
- <TD width="300" height="10" valign="middle" colspan="">
- <SPAN align=center class=subcabeceras><?php echo $TbMsg[12];?></SPAN>
- </TD>
-
- <TD width="500" height="10" valign="middle">
- <input type="hidden" name="nombrefichero" id="nombrefichero" value="<?php echo $fichero;?>">
- <input type="text" name="modificadescripcion" id="modificadescripcion" size="25" value="<?php echo $selecdescripcion;?>">
- </TD>
-</TR>
-
-<TR>
- <TD width="300" height="100" valign="middle">
- <SPAN align=center class=subcabeceras><?php echo $TbMsg[19]?></SPAN>
- </TD>
-
- <TD width="500" height="100" valign="middle">
- <textarea name="parametrosmodifica" id="parametrosmodifica" cols="80" rows="15"><?php //Leyendo las lineas del Array parametros
- for ($k=1;$k<count($parametros);$k++) {
- echo $parametros[$k];
-}?></textarea>
-
- </TD>
-</TR>
-<TR>
- <TD width="300" valign="middle">
- <SPAN align=center class=subcabeceras></SPAN>
-
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>">
- <input type="hidden" name="confirmado" value="1">
- <input type="hidden" name="opcioncrear" value="2">
- <input type="submit" value="<?php echo $TbMsg[13]?>" name="nuevoarran">
-
- </TD></form>
-
- <TD width="500" valign="middle"><br />
- <form name="crearranque" method="post" action="./boot_grub4dos.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="confirmado" value="1">
- <input type="hidden" name="opcioncrear" value="2">
- <input type="hidden" name="modo" value="1">
- <input type="submit" value="<?php echo $TbMsg[16]?>" name="nuevoarran">
- </form>
- </TD>
-</TR>
-<?php }?>
-
-</TABLE>
-<?php
-//##################################################################################################################################
-//########### MODIFICAR COLUMNA ARRANQUE #########################################################################################
-//##################################################################################################################################
-//#### FIN SI USUARIO
-}
-
-else{
-//##################################################################################################################################
-//########### MODIFICAR COLUMNA ARRANQUE #########################################################################################
-//##################################################################################################################################
-//#########################################################################
-// MODO ADMINISTRADOR
-//#########################################################################
-//#########################################################################
-// LEYENDO EL DIRECTORIO
-// /var/lib/tftboot/menu.lst/templates
-//#########################################################################
-$dirtemplates="/var/lib/tftpboot/menu.lst/templates/";
-$directorio=dir($dirtemplates);
-$pn= array();//pila de nombres
-//bucle para llenar las pilas :P
-while ($archivo = $directorio->read())
-{
- //no mostrar ni "." ni ".." ni "pxe"
- if(($archivo!=".")&&($archivo!=".."))
- {
- //$description=exec("cat ".$dirtemplates.$pn[$i]." | awk 'NR==1 {print $2}'");//$text=trim($text);
- array_push($pn, $archivo);
- }
-}
-$directorio->close();
-//ordenar las pilas segun la pila de nombres
-array_multisort($pn);
-
-
-for ($b=0;$b<count($pn);$b++)
-{
- if ($pn[$b] == "pxe")
- {
- $descripcion=exec("cat ".$dirtemplates.$pn[$b]." | awk 'NR==1 {print $2}'");//$text=trim($text);
- //Aqui busco el fichero, parametros y descripcion segun llega de $_POST["modificafichero"]
- if ($descripcion == $selecdescripcion)
- {
- $fichero=$pn[$b];
- $param=$dirtemplates.$fichero;
- $parametros=file($param);
- //echo $fichero." -- Descripcion -- ".$descripcion."<br>";
- }
- }
-}
-//Leyendo la Descripcion de los ficheros menores que 20
-for ($b=0;$b<count($pn);$b++)
-{
- $numeros=substr($pn[$b],0,2);
- if ($numeros > 19)
- break;
- {
- $descripcion=exec("cat ".$dirtemplates.$pn[$b]." | awk 'NR==1 {print $2}'");//$text=trim($text);
- //Aqui busco el fichero, parametros y descripcion segun llega de $_POST["modificafichero"]
- if ($descripcion == $selecdescripcion)
- {
- $fichero=$pn[$b];
- $param=$dirtemplates.$fichero;
- $parametros=file($param);
- //echo $fichero." -- Descripcion -- ".$descripcion."<br>";
- }
-
- }
-}
-
-?>
-<TABLE width="850" align=CENTER border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
-<TR >
- <TD height="70" colspan="4" valign="middle">
- <p align=center><SPAN align=center class=cabeceras> <?php echo $TbMsg[4]?> </SPAN></p><p align=left></p>
- <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>">
- <input type="hidden" name="opcioncrear" value="2">
- <?php echo $modo;
- if ($modo==1) {
- echo ' <input type="hidden" name="modo" value="1">';
- }else{
- echo ' <input type="hidden" name="modo" value="">';
- }
-
- ?>
- <input type="submit" value=<?php echo $TbMsg[10]?> name="nuevoarran">
- </form>
- </TD>
- </TR>
-<TR>
-<form name="actualiza" method="post" action="./boot_grub4dos_crear.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>">
- <input type="hidden" name="opcioncrear" value="2">
- <input type="hidden" name="modo" value="1">
-
-
- <TD height="10" colspan="3" valign="middle"><input type="hidden" name="nombreficheromodifica" id="nombreficheromodifica" value="<?php echo $fichero;?>">
- <SPAN align=center class=subcabeceras><?php echo $TbMsg[9]." -------------------- >";?></SPAN>
-
- </TD>
- <TD height="10" valign="middle" align="right">
- <select name="selecdescripcion" id="selecdescripcion" onChange="document.actualiza.submit()">
- <option value"" ></option>
- <?php
- for ($z=0;$z<count($pn);$z++)
- {
- if((substr($pn[$z],0,2)) < 20 )
- {
- $descripcion=exec("cat ".$dirtemplates.$pn[$z]." | awk 'NR==1 {print $2}'");//$text=trim($text);
- echo '<option value='.$descripcion.'>'.$descripcion.'</option>';
- }
- }
- ?>
- </select>
-
-
- </TD>
- </form>
-</TR>
-<?php if ($selecdescripcion != ""){ ?>
-<form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
-<TR>
- <TD width="600" height="10" valign="middle">
- <SPAN align=center class=subcabeceras><?php echo $TbMsg[21];?></SPAN>
- </TD>
-
- <TD width="249" height="10" valign="middle">
- <?php echo $fichero;?>
- </TD>
-
- <TD width="100" valign="middle" align="right">
- <input type="hidden" name="nombrefichero" id="nombrefichero" value="<?php echo $fichero;?>">
- <input type="text" name="modificadescripcion" id="modificadescripcion" size="25" value="<?php echo $selecdescripcion;?>">
- </TD>
-
- <TD width="500" valign="middle">
- <SPAN align=center class=subcabeceras><?php echo " <- ".$TbMsg[12];?></SPAN>
- </TD>
-</TR>
-<TR>
- <TD width="500" height="100" valign="middle">
- <SPAN align=center class=subcabeceras><?php echo $TbMsg[19]?></SPAN>
- </TD>
-
- <TD width="500" height="100" colspan="3" valign="middle">
- <textarea name="parametrosmodifica" id="parametrosmodifica" cols="95" rows="17"><?php //Leyendo las lineas del Array parametros
- for ($k=1;$k<count($parametros);$k++) {
- echo $parametros[$k];
- }?></textarea>
- </TD>
-</TR>
-<TR>
- <TD width="500" valign="middle">
- <SPAN align=center class=subcabeceras></SPAN>
-
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>">
- <input type="hidden" name="confirmado" value="1">
- <input type="hidden" name="opcioncrear" value="2">
- <input type="submit" value="<?php echo $TbMsg[13]?>" name="nuevoarran">
-
- </TD></form>
-
- <TD width="500" valign="middle"><br />
- <form name="crearranque" method="post" action="./boot_grub4dos.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="confirmado" value="1">
- <input type="hidden" name="opcioncrear" value="2">
- <input type="hidden" name="modo" value="1">
- <input type="submit" value="<?php echo $TbMsg[16]?>" name="nuevoarran">
- </form>
- </TD>
- <TD width="500" valign="middle"><br />
- </TD>
- <TD width="500" valign="middle"><br />
- </TD>
-
-</TR>
-<?php }?>
-</TABLE>
-<?php
-//#########################################################################
-// FIN MODO ADMINISTRADOR
-//#########################################################################
-//#### FIN SI USUARIO
-
-
-//#### FIN SINO USUARIO
-}
-//#### FIN SINO CONFIRMADO
-}
-//#### FIN SI OPCIONCREAR
-}
-//##################################################################################################################################
-//########### MODIFICAR COLUMNA ARRANQUE #########################################################################################
-//##################################################################################################################################
-?>
-
-
-<?php
-//##################################################################################################################################
-//########### ELIMINAR COLUMNA ARRANQUE ##########################################################################################
-//##################################################################################################################################
-
-if ($opcioncrear == 3)
- {
- $confirmado=isset($_POST["confirmado"]) ? $_POST["confirmado"] : "";
- if ($confirmado == 1)
- {
- $eliminafichero=$_POST["eliminafichero"];
-// esta funcion genera los elementos de un select(formulario html) donde aparecen los nombres de los ordenadores, según su menu pxe
-function listaequipos($cmd,$eliminafichero,$seleccion)
-{//Buscando idordenador de los arranque eliminafichero
-global $cambia;
-$cmd->texto="SELECT * FROM ordenadores where arranque='" . $eliminafichero ."' " . $seleccion;
-$rs=new Recordset;
-$rs->Comando=&$cmd;
-if (!$rs->Abrir()) echo "error";
-$rs->Primero();
-while (!$rs->EOF)
-{
- //$cmd->texto="UPDATE ordenadores SET arranque=unknown WHERE idordenador=60";
- //$resul=$cmd->Ejecutar();
- //echo $eliminafichero.' - '.$rs->campos["nombreordenador"].'<BR>';
- $cambia[]=$rs->campos["idordenador"];
- $rs->Siguiente();
-}
-$rs->Cerrar();
-
-for ($u=0;$u<count($cambia);$u++)
-{
- $nombrefich="00unknown";
- $cmd->CreaParametro("@arranque","00unknown","");
- $cmd->ParamSetValor("@arranque","00unknown");
-$cmd->texto="UPDATE ordenadores SET arranque=@arranque WHERE idordenador=".$cambia[$u];
-
-$rs=new Recordset;
-$rs->Comando=&$cmd;
-if (!$rs->Abrir()) echo "error";
-$rs->Primero();
-$resul=$cmd->Ejecutar();
-$rs->Cerrar();
-}
-}
-
-
- $listadopxe=listaequipos($cmd,$eliminafichero,$seleccion);
- echo $listadopxe;
- $fichero = "/var/lib/tftpboot/menu.lst/templates/".$eliminafichero;
- unlink($fichero);
-
- ?>
- <TABLE width="500" align=center border=1 >
- <TR><TD align="center"><br><?php if($eliminafichero != null) echo $TbMsg[8];?><br><br><SPAN align=center class=subcabeceras><?php echo substr($eliminafichero,2);?></span><br><br><br>
- <form name="crearranque" method="post" action="./boot_grub4dos.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="submit" value="Continuar" name="nuevoarran">
- </form>
- </TR></TD>
-</TABLE>
-
- <?php }else{
-?>
-<?php
-//#########################################################################
-// LEYENDO EL DIRECTORIO
-// /var/lib/tftboot/menu.lst/templates
-//#########################################################################
-$dirtemplates="/var/lib/tftpboot/menu.lst/templates/";
-$directorio=dir($dirtemplates);
-$pn= array();//pila de nombres
-//bucle para llenar las pilas :P
-while ($archivo = $directorio->read())
-{
- //no mostrar ni "." ni ".." ni "pxe"
- if(($archivo!="pxe")&&($archivo!=".")&&($archivo!=".."))
- {
- array_push($pn, $archivo);
- }
-}
-$directorio->close();
-//ordenar las pilas segun la pila de nombres
-array_multisort($pn);
-
-
-?>
-<TABLE width="650" align=CENTER border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
-<form name="eliminaarranque" method="post" action="./boot_grub4dos_crear.php">
-<TR align=center>
- <TD height="70" colspan="2" valign="middle">
- <SPAN align=center class=cabeceras> <?php echo $TbMsg[5]?> </SPAN>
- </TD>
- </TR>
-<TR>
- <TD width="150" height="10" valign="middle">
- <SPAN align=center class=subcabeceras><?php echo $TbMsg[12]?></SPAN>
- </TD>
-
- <TD width="500" height="10" valign="middle">
- <select name="eliminafichero" id="eliminafichero">
- <?php
- for ($z=0;$z<count($pn);$z++)
- {
- if((substr($pn[$z],0,2)) > 19)
- {
- $description=exec("cat ".$dirtemplates.$pn[$z]." | awk 'NR==1 {print $2}'");//$text=trim($text);
- echo '<option value='.$pn[$z].'>'.$description.'</option>';
- }
- }
- ?>
- </select></TD>
-</TR>
-
-<TR>
- <TD width="150" valign="middle">
- <SPAN align=center class=subcabeceras></SPAN>
-
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="confirmado" value="1">
- <input type="hidden" name="opcioncrear" value="3">
- <input type="submit" value="<?php echo $TbMsg[13]?>" name="nuevoarra">
-
- </TD></form>
-
- <TD width="500" valign="middle"><br />
- <form name="crearranque" method="post" action="./boot_grub4dos.php">
- <input type="hidden" name="litambito" value="<?php echo $litambito?>">
- <input type="hidden" name="idambito" value="<?php echo $idambito?>">
- <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>">
- <input type="hidden" name="modo" value="1">
- <input type="submit" value="<?php echo $TbMsg[16]?>" name="nuevoarran">
- </form>
- </TD>
-</TR>
-</TABLE>
-<?php
-//##################################################################################################################################
-//########### ELIMINAR COLUMNA ARRANQUE ##########################################################################################
-//##################################################################################################################################
-}}?>
-
-</body>
-</html>
+<?php +include_once("../includes/ctrlacc.php"); +include_once("../clases/AdoPhp.php"); +include_once("../includes/CreaComando.php"); +include_once("../idiomas/php/".$idioma."/boot_grub4dos_".$idioma.".php"); + +$cmd=CreaComando($cadenaconexion); +if (!$cmd) + Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D. +//________________________________________________________________________________________________________ + +if (isset($_POST["litambito"])) $litambito=$_POST["litambito"]; // Recoge parametros +if (isset($_POST["idambito"])) $idambito=$_POST["idambito"]; +if (isset($_POST["nombreambito"])) $nombreambito=$_POST["nombreambito"]; +if (isset($_POST["opcion"])) $opcion=$_POST["opcion"]; +if (isset($_POST["opcioncrear"])) $opcioncrear=$_POST["opcioncrear"]; +$boton = isset ($_REQUEST["boton"]) ? $_REQUEST["boton"] : ""; +$confirmado = ($boton == $TbMsg[13] && ($opcioncrear == "crear" || $opcioncrear == "modificar")) ? "1" : ""; +$guarnomb = isset($_POST["nombrenuevoboot"]) ? ucfirst($_POST["nombrenuevoboot"]) : ""; +$admin = isset($_POST["modo"]) ? $_POST["modo"] : ""; +$selectfile = isset($_POST["selectfile"]) ? $_POST["selectfile"] : ""; +$boottype = isset($_POST["boottype"]) ? $_POST["boottype"] : ""; +$dirtemplates= ( $boottype === "uefi" ) ? "/var/lib/tftpboot/grub/templates/" : "/var/lib/tftpboot/menu.lst/templates/"; +$otrodirtemplates= ( $boottype === "uefi" ) ? "/var/lib/tftpboot/menu.lst/templates/" : "/var/lib/tftpboot/grub/templates/"; +$descripcion = ""; +$modo = ""; +?> + +<html> +<head> +<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/propiedades_aulas.js"></SCRIPT> + <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT> + <SCRIPT language="javascript" src="../jscripts/boot_grub4dos.js"></SCRIPT> + <SCRIPT language="javascript" src="../idiomas/javascripts/esp/propiedades_aulas_esp.js"></SCRIPT> +</head> + +<body> +<P align=center class=cabeceras><?php echo $TbMsg[42]; ?><BR> + <SPAN align=center class=subcabeceras> <?php echo $nombreambito; ?> </SPAN></P> +<?php +//################################################################################################################################## +//########### NUEVO COLUMNA ARRANQUE ############################################################################################# +//################################################################################################################################## + +if ($opcioncrear == "crear") + { + if ($confirmado == 1) + { + $descripfich=preg_replace("/[^A-Za-z0-9]/", "-", $guarnomb); + $guarnomb=preg_replace("/[^A-Za-z0-9]/", "", $descripfich); + $action="./boot_grub4dos.php"; + + if($guarnomb === "") { + // Mensaje de error si no ha incluido descripción + $action="./boot_grub4dos_crear.php"; + $mensaje="<br><br><SPAN align=center class=subcabeceras>".$TbMsg[14]."</span>"; + + } else { + // Nombre archivo: Si para el otro tipo de plantillas existe un fichero con igual descripción uso el nombre. + $nombrenuevoboot=exec("grep -i -m 1 \"^##NO-TOCAR-ESTA-LINEA[[:blank:]]*$descripfich$\" $otrodirtemplates* |awk -F: '{print $1}'"); + if (isset($nombrenuevoboot) && $nombrenuevoboot != "") { + $nombrenuevoboot=basename($nombrenuevoboot); + } else { + // Nombre archivo: numDescripción + // número: a todos los números posibles le quito los ya usados y me quedo con el primero + chdir($dirtemplates); + $pn=array_map("principio",glob("*")); + $todos=range(21,99); + $ultimonumero=current(array_diff($todos,$pn)); + + $nombrenuevoboot=$ultimonumero.$guarnomb; + } + + $nuevoboot = $dirtemplates.$nombrenuevoboot; + + // Comprobamos que no exista + if ( file_exists($nuevoboot)) { + $mensaje=$TbMsg["ERR_DUPLICADO"]."<br><br><SPAN align=center class=subcabeceras>".$nombrenuevoboot." - '".$guarnomb."' ($boottype)</span>"; + } else { + // Creo plantilla + $parametrosnuevoboot=$_POST["parametrosnuevoboot"]; + + $fp = fopen($nuevoboot, "w"); + $string = $TbMsg[22].$descripfich."\n".$parametrosnuevoboot; + $write = fputs($fp, $string); + fclose($fp); + + $mensaje=$TbMsg[6]."<br><br><SPAN align=center class=subcabeceras>".$descripfich."</span>"; + } + } + ?> + <form name="crearranque" method="post" action="<?php echo $action ?>"> + <input type="hidden" name="confirmado" value=""> + <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>"> + <input type="hidden" name="litambito" value="<?php echo $litambito?>"> + <input type="hidden" name="idambito" value="<?php echo $idambito?>"> + <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> + <input type="hidden" name="opcioncrear" value="crear"> + <input type="hidden" name="boottype" value="<?php echo $boottype ?>"> + <TABLE width="500" align=center border=1 > + <TR><TD align="center"><br><?php echo $mensaje;?></span><br><br><br> + <input type="submit" value="Continuar" name="nuevoarran"> + </TD></TR> + </TABLE> + </form> +<?php }else{ +?> + +<form name="crearranque" method="post" action="./boot_grub4dos_crear.php"> +<input type="hidden" name="litambito" value="<?php echo $litambito?>"> +<input type="hidden" name="idambito" value="<?php echo $idambito?>"> +<input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> +<input type="hidden" name="boottype" value="<?php echo $boottype ?>"> +<input type="hidden" name="opcioncrear" value="crear"> +<input type="hidden" name="modo" value="1"> + +<TABLE width="650" align=CENTER border=1 cellPadding=1 cellSpacing=1 class=tabla_datos > + +<TR align=center> + <TD height="70" colspan="2" valign="middle"> + <SPAN align=center class=cabeceras> <?php echo $TbMsg[3]?> </SPAN> + </TD> + </TR> +<TR align=right> + <TD colspan="2" valign="middle"> + + + + </TD> + </TR> +<TR> + <TD width="150" height="10" valign="middle"> + <SPAN align=center class=subcabeceras><?php echo $TbMsg[12]." ($boottype)"?></SPAN> + </TD> + + <TD width="500" height="10" valign="middle"> + <input type="text" name="nombrenuevoboot" id="textfield" size="25" value="<?php echo $guarnomb ?>"> + </TD> + +</TR> +<TR> + <TD width="150" height="100" valign="middle"> + +<SPAN align=center class=subcabeceras><?php echo $TbMsg[19]?><br></SPAN> +<?php +// Boton utilizar plantilla o no. +if ($boton == $TbMsg[17]) { + echo '<input name=boton type=submit value="'.$TbMsg[18].'">'; +}else{ + echo '<input name=boton type=submit value="'.$TbMsg[17].'">'; +} +?> + </TD> + + <TD width="500" height="100" valign="middle"> + + + <textarea name="parametrosnuevoboot" id="parametrosnuevoboot" cols="60" rows="12"> +<?php +if ($boton == $TbMsg[17]) +echo "timeout 3 +title FirstHardDisk-FirstPartition +keeppxe +root (hd0,0) +chainloader (hd0,0)+1 +boot"; +?> + </textarea> + </TD> +</TR> +<TR> + <TD width="150" valign="middle"> + + <input type="submit" name="boton" value="<?php echo $TbMsg[13]?>"> + </TD> + +<TD width="500" valign="middle"> + <!-- Cancelar: vuelvo a página de netbootavanzado --> + <input type="submit" value="<?php echo $TbMsg[16]?>" onclick='document.forms[0].action="./boot_grub4dos.php";'> + </TD> +</TR> +</TABLE> +</form> +<?php +//################################################################################################################################## +//########### NUEVO COLUMNA ARRANQUE ############################################################################################# +//################################################################################################################################## +}}?> + + +<?php +//################################################################################################################################## +//########### MODIFICAR COLUMNA ARRANQUE ######################################################################################### +//################################################################################################################################## +if ($opcioncrear == "modificar") + { + $action="./boot_grub4dos_crear.php"; + $confirmado=isset($_POST["confirmado"]) ? $_POST["confirmado"] : ""; + // Realizamos los cambios en el fichero + if ($confirmado == 1) + { + $modificadescripcion=ucfirst($_POST["modificadescripcion"]); + $descripfich=$modificadescripcion;$descripfich=preg_replace("/[^A-Za-z0-9]/", "-", $descripfich); + $ficherow=$dirtemplates.$_POST["nombrefichero"];//echo $ficherow."<br>"; + $parametrosmodifica=$_POST["parametrosmodifica"]; + + if(empty($modificadescripcion)) { + $mensaje=$TbMsg[14]; + }else{ + + $fp = fopen($ficherow, "w"); + $string = $TbMsg[22].$descripfich."\n".$parametrosmodifica; + $write = fputs($fp, $string);//Escribe la primera linea + fclose($fp); + + $action="./boot_grub4dos.php"; + $mensaje=$TbMsg[7]; + } + ?> + <TABLE width="500" align=center border=1 > + <TR><TD align="center"><br><?php echo $mensaje;?><br><br><SPAN align=center class=subcabeceras><?php echo $modificadescripcion;?></span><br><br><br> + <form name="crearranque" method="post" action="<?php echo $action ?>"> + <input type="hidden" name="litambito" value="<?php echo $litambito?>"> + <input type="hidden" name="idambito" value="<?php echo $idambito?>"> + <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> + <input type="hidden" name="confirmado" value="0"> + <input type="hidden" name="opcioncrear" value="modificar"> + <input type="hidden" name="modo" value="0"> + <input type="submit" value="Continuar" name="nuevoarran"> + </form> + </TD></TR> + </TABLE> +<?php +//######################################################################### +// MODO USUARIO +//######################################################################### + // Mostramos las plantillas a modificar + } else { + $select=""; + $input=""; + $textoboton=""; + // No hay plantilla elegida + if ($selectfile === "") { + // LEYENDO EL DIRECTORIO + // /var/lib/tftboot/menu.lst/templates o /var/lib/tftboot/grub/templates + chdir($dirtemplates); + $pn=glob("*"); + // ordenamos + sort($pn); + + if (empty($admin)) { + // Si el modo es usuario eliminamos las plantillas de la instalación + unset ($pn[array_search("pxe", $pn)]); + foreach ($pn as $key => $valor) { + if (strnatcmp ( $valor , "20" ) > 0) break; + unset($pn[$key]); + + } + + // Botón cambio de modo + $textoboton = ' <input type="submit" value='.$TbMsg[11].' name="nuevoarran" onclick=\'document.forms[0].modo.value=1;\' >'."\n"; + } else { + $textoboton = ' <input type="submit" value='.$TbMsg[10].' name="nuevoarran" onclick=\'document.forms[0].modo.value=0;\'>'."\n"; + } + + // Opciones del select + $select = ' <select name="selectfile" id="selectfile" onChange="document.actualiza.submit()">'."\n". + ' <option value=""></option>'."\n"; + foreach ($pn as $valor) { + $descripcion=exec("awk 'NR==1 {print $2}' ".$dirtemplates.$valor); + $select.= ' <option value='.$valor.'>'.$descripcion.'</option>'."\n"; + } + $select.= ' </select>'."\n"; + + // Hay una plantilla seleccionada para modificar + } else { + $file=$dirtemplates.$selectfile; + $descripcion=exec("awk 'NR==1 {print $2}' ".$dirtemplates.$selectfile); + $parametros=file_get_contents ($file); + // Elimino cabecera anterior + $parametros=preg_replace ("/$TbMsg[22].*\n/",'', $parametros); + + // Campos de formulario especificos de esta opción + $input .= '<input type="hidden" name="nombrefichero" id="nombrefichero" value="'.$selectfile.'">'."\n". + '<input type="hidden" name="confirmado" value="1" >'."\n"; + } + +// Parte del formulario comun +?> +<form name="actualiza" method="post" action="<?php echo $action ?>"> + <input type="hidden" name="litambito" value="<?php echo $litambito ?>"> + <input type="hidden" name="idambito" value="<?php echo $idambito ?>"> + <input type="hidden" name="nombreambito" value="<?php echo $nombreambito ?>"> + <input type="hidden" name="opcioncrear" value="modificar"> + <input type="hidden" name="boottype" value="<?php echo $boottype ?>"> + <input type="hidden" name="modo" value="<?php echo $modo ?>"> + <?php echo $input; + + // Cabecera de la tabla ?> + <table width="850" align="center" border="1" cellPadding="1" cellSpacing="1" class="tabla_datos" > + <tr> + <td height="70" colspan="3" valign="middle"><p align=center class=cabeceras><?php echo $TbMsg[4] ?></p> + <?php echo $textoboton ?> + </tr> + + <?php // Lista de selección de plantillas + if ($selectfile === "") { ?> + + <tr> + <td height="10" colspan="2" valign="middle"><span align=center class=subcabeceras><?php echo $TbMsg[9]." (".$boottype.")" ?></span></td> + <td height="10" valign="middle" align="right"> + <?php echo $select ?> + </td> + </tr> + + <?php // Formulario con datos de la plantilla a cambiar + } else { ?> + + <tr> + <td height="10" valign="middle"> + <SPAN align=center class=subcabeceras><?php echo $TbMsg[21]." (".$boottype.")" ?></SPAN> + </td> + <td width="249" height="10" valign="middle"><?php echo $selectfile ?></td> + <td width="100" valign="middle" align="right"> + <span align=center class=subcabeceras><?php echo $TbMsg[12] ?></span> + <input type="text" name="modificadescripcion" id="modificadescripcion" size="25" value="<?php echo $descripcion ?>"> + </td> + </tr> + <tr> + <td width="500" height="100" valign="middle"> <span align=center class=subcabeceras><?php echo $TbMsg[19] ?></span></td> + <td width="500" height="100" colspan="2" valign="middle"> + <textarea name="parametrosmodifica" id="parametrosmodifica" cols="95" rows="17"><?php echo $parametros ?></textarea> + </td> + </tr> + <tr> + <td width="500" valign="middle"><input type="submit" value="<?php echo $TbMsg[13] ?>" name="nuevoarran"></td> + <td width="500" colspan="2" valign="middle"><input type="submit" value="<?php echo $TbMsg[16] ?>" name="nuevoarran" onclick='document.forms[0].action="./boot_grub4dos.php";'> + <tr> + + <?php } + // Final pagina ?> + </table> +</form> + + <?php + } +//################################################################################################################################## +//########### MODIFICAR COLUMNA ARRANQUE ######################################################################################### +//################################################################################################################################## +} + + +//################################################################################################################################## +//########### ELIMINAR COLUMNA ARRANQUE ########################################################################################## +//################################################################################################################################## + +if ($opcioncrear == "eliminar" ) + { + $confirmado=isset($_POST["confirmado"]) ? $_POST["confirmado"] : ""; + if ($confirmado == 1) + { + $eliminafichero=$_POST["eliminafichero"]; + $resul=actualizaequipos($cmd,$eliminafichero); + $fichero = $dirtemplates.$eliminafichero; + unlink($fichero); + + ?> + <TABLE width="500" align=center border=1 > + <TR><TD align="center"><br><?php if($eliminafichero != null) echo $TbMsg[8];?><br><br><SPAN align=center class=subcabeceras><?php echo substr($eliminafichero,2)." (".$boottype.")"; ?></span><br><br><br> + <form name="crearranque" method="post" action="./boot_grub4dos.php"> + <input type="hidden" name="litambito" value="<?php echo $litambito?>"> + <input type="hidden" name="idambito" value="<?php echo $idambito?>"> + <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> + <input type="submit" value="Continuar" name="nuevoarran"> + </form> + </TD></TR> +</TABLE> + + <?php }else{ +?> +<?php +//######################################################################### +// LEYENDO EL DIRECTORIO +// /var/lib/tftboot/menu.lst/templates o /var/lib/tftpboot/grub/templates/ +//######################################################################### +//$dirtemplates= "/var/lib/tftpboot/menu.lst/templates/"; +chdir($dirtemplates); + +$pn=glob("*");//pila de nombres +// No mostramos archivo pxe +unset($pn[array_search("pxe", $pn)]); +//ordenar las pilas segun la pila de nombres +sort($pn); +?> + +<form name="eliminaarranque" method="post" action="./boot_grub4dos_crear.php"> +<input type="hidden" name="litambito" value="<?php echo $litambito?>"> +<input type="hidden" name="idambito" value="<?php echo $idambito?>"> +<input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> +<input type="hidden" name="confirmado" value="1"> +<input type="hidden" name="opcioncrear" value="eliminar"> +<input type="hidden" name="boottype" value="<?php echo $boottype ?>"> +<TABLE width="650" align=CENTER border=1 cellPadding=1 cellSpacing=1 class=tabla_datos > +<TR align=center> + <TD height="70" colspan="2" valign="middle"> + <SPAN align=center class=cabeceras> <?php echo $TbMsg[5]?> </SPAN> + </TD> + </TR> +<TR> + <TD width="150" height="10" valign="middle"> + <SPAN align=center class=subcabeceras><?php echo $TbMsg[12]." (".$boottype.")" ?></SPAN> + </TD> + + <TD width="500" height="10" valign="middle"> + <select name="eliminafichero" id="eliminafichero"> + <?php + for ($z=0;$z<count($pn);$z++) + { + // Sólo se pueden borrar plantillas que empiecen >19 + if((substr($pn[$z],0,2)) > 19) + { + $description=exec("awk 'NR==1 {print $2}' ".$dirtemplates.$pn[$z]); + echo '<option value='.$pn[$z].'>'.$description.'</option>'; + } + } + ?> + </select> + </TD> +</TR> + +<TR> + <TD width="150" valign="middle"> + <input type="submit" value="<?php echo $TbMsg[13]?>" name="nuevoarra"> + + </TD> + + <TD width="500" valign="middle"> + <input type="submit" value="<?php echo $TbMsg[16]?>" name="nuevoarran" onclick='document.forms[0].action="./boot_grub4dos.php";'> + </TD> +</TR> +</TABLE> +</form> +<?php +//################################################################################################################################## +//########### ELIMINAR COLUMNA ARRANQUE ########################################################################################## +//################################################################################################################################## +}}?> + +</body> +</html> + +<?php +// Los equipos que tienen asignada la plantilla a eliminar se actualizan con el valor desconocido. +// cmd: manejador de la base de datos +// eliminafichero: plantilla a eliminar +function actualizaequipos($cmd,$eliminafichero) { + $nombrefich="00unknown"; + $cmd->texto="UPDATE ordenadores SET arranque='".$nombrefich."' WHERE arranque='".$eliminafichero."';"; + $resul=$cmd->Ejecutar(); + return $resul; +} + +// Extrae los dos primeros caracteres de una cadena +function principio($valor) { + return substr($valor,0,2); +} +?> + diff --git a/admin/WebConsole/principal/boot_grub4dos_tabla.php b/admin/WebConsole/principal/boot_grub4dos_tabla.php index 7baae042..e4d9e7c3 100644 --- a/admin/WebConsole/principal/boot_grub4dos_tabla.php +++ b/admin/WebConsole/principal/boot_grub4dos_tabla.php @@ -1,56 +1,37 @@ +<script> +function accion (opcion) { + document.forms[0].opcioncrear.value = opcion.name; + document.forms[0].action = "./boot_grub4dos_crear.php"; +} + +</script> + +<td valign="top"> <TABLE width="150" align=left border=1 cellPadding=1 cellSpacing=1 class=tabla_datos > <TR> <TD width="150" height="45" valign="middle"> - <form name="crearranque" method="post" action="./boot_grub4dos.php"> - <input type="hidden" name="litambito" value="<?php echo $litambito?>"> - <input type="hidden" name="idambito" value="<?php echo $idambito?>"> - <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> - <input type="hidden" name="opcioncrear" value=""> - </form> + <input type="radio" name="boottype" value="bios" checked>bios + <input type="radio" name="boottype" value="uefi">uefi + </TD> </TR> <TR> - <TD width="150" height="100" valign="middle"> <?php echo $TbMsg[3]?><br /> - <form name="crearranque" method="post" action="./boot_grub4dos_crear.php"> - <input type="hidden" name="litambito" value="<?php echo $litambito?>"> - <input type="hidden" name="idambito" value="<?php echo $idambito?>"> - <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> - <input type="hidden" name="opcioncrear" value="1"> - <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>"> - <input type="submit" value=<?php echo $TbMsg[0]?> name="nuevoarran"> - </form> + <TD id="crear" width="150" height="100" valign="middle"> <?php echo $TbMsg[3]?><br /> + <input type="submit" value=<?php echo $TbMsg[0]?> name="crear" onclick="accion(this)"> </TD> </TR> <TR> - <TD width="150" height="100" valign="middle"> <?php echo $TbMsg[4]?><br /> - <form name="crearranque" method="post" action="./boot_grub4dos_crear.php"> - <input type="hidden" name="litambito" value="<?php echo $litambito?>"> - <input type="hidden" name="idambito" value="<?php echo $idambito?>"> - <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> - <input type="hidden" name="opcioncrear" value="2"> - <input type="submit" value=<?php echo $TbMsg[1]?> name="nuevoarran"> - </form> + <TD id="modificar" width="150" height="100" valign="middle"> <?php echo $TbMsg[4]?><br /> + <input type="submit" value=<?php echo $TbMsg[1]?> name="modificar" onclick="accion(this)"> </TD> </TR> <TR> - <TD width="150" height="100" valign="middle"> <?php echo $TbMsg[5]?><br /> - <form name="crearranque" method="post" action="./boot_grub4dos_crear.php"> - <input type="hidden" name="litambito" value="<?php echo $litambito?>"> - <input type="hidden" name="idambito" value="<?php echo $idambito?>"> - <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> - <input type="hidden" name="opcioncrear" value="3"> - <input type="submit" value=<?php echo $TbMsg[2]?> name="nuevoarran"> - </form> + <TD id="eliminar" width="150" height="100" valign="middle"> <?php echo $TbMsg[5]?><br /> + <input type="submit" value=<?php echo $TbMsg[2]?> name="eliminar" onclick="accion(this)"> </TD> </TR> <TR> - <TD width="150" height="150" valign="middle"> - <form name="crearranque" method="post" action="./boot_grub4dos.php"> - <input type="hidden" name="litambito" value="<?php echo $litambito?>"> - <input type="hidden" name="idambito" value="<?php echo $idambito?>"> - <input type="hidden" name="nombreambito" value="<?php echo $nombreambito?>"> - <input type="hidden" name="opcion"crear value=""> - </form> - </TD> + <TD width="150" height="150" valign="middle"> </TD> </TR> -</TABLE>
\ No newline at end of file +</TABLE> +</td> diff --git a/admin/WebConsole/principal/changelog.php b/admin/WebConsole/principal/changelog.php index bf829826..ddfc8f9f 100644 --- a/admin/WebConsole/principal/changelog.php +++ b/admin/WebConsole/principal/changelog.php @@ -22,14 +22,12 @@ $changelog=(file_exists ($changelogfile)) ? file_get_contents($changelogfile, TR <body> - <div><p align=center class=cabeceras><img border=0 nod="aulas-1" value="Sala Virtual" style="cursor:pointer" src="../images/iconos/aula.gif" > <?php echo $TbMsg["CHANGELOG_TITLE"] ?><br> - <span id="aulas-1" class=subcabeceras><?php echo $version ?></span></p> + <div><p align="center" class="cabeceras"><img border="0" src="../images/iconos/aula.gif" > <?php echo $TbMsg["CHANGELOG_TITLE"] ?><br> + <span id="aulas-1" class="subcabeceras"><?php echo $version ?></span></p> </div> - <div style="margin: 0 3em 0 3em"> - <pre> - <?php echo $changelog; ?> - <pre> + <div style="margin: 3em"> + <pre><?php echo $changelog; ?><pre> </div> </body> </html> diff --git a/admin/WebConsole/principal/colasacciones.php b/admin/WebConsole/principal/colasacciones.php index 1c6558d7..ad927564 100644 --- a/admin/WebConsole/principal/colasacciones.php +++ b/admin/WebConsole/principal/colasacciones.php @@ -141,8 +141,8 @@ //________________________________________________________________________________________________________ ?> <HTML> - <TITLE>Administración web de aulas</TITLE> <HEAD> + <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="../clases/jscripts/MenuContextual.js"></SCRIPT> @@ -175,8 +175,8 @@ $HTMLCriterios=""; $HTMLCriterios.='<TABLE class=tabla_busquedas align=center border="0">'; // Filtro de búsquedas - $HTMLCriterios.=' <TR HEIGHT=30>'; - $HTMLCriterios.=' <TD style=" BORDER-BOTTOM:#5a86b5 1px solid;"colspan=2 align="center" >'; + $HTMLCriterios.=' <TR>'; + $HTMLCriterios.=' <TD HEIGHT="30px" style="BORDER-BOTTOM:#5a86b5 1px solid;" colspan=2 align="center">'; $HTMLCriterios.=' <SPAN style="FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; FONT-SIZE: 11px;COLOR:#5a86b5;FONT-WEIGHT: 700;">____ '.$TbMsg[1].'____</SPAN></TD></TR>'; @@ -861,11 +861,10 @@ function escribeResumen($oA) { global $cmd; global $TbMsg; - global $ACCION_EXITOSA; global $ACCION_FALLIDA; - global $ACCION_SINRESULTADO; - + global $ACCION_SINRESULTADO; + global $ACCION_DETENIDA; global $EJECUCION_TAREA; $html=""; @@ -1198,9 +1197,7 @@ function ContextualXMLComun() global $EJECUCION_TAREA; global $sesion; - $layerXML=""; - - $layerXML.='<ITEM'; + $layerXML ='<ITEM'; $layerXML.=' alpulsar="eleccion(1,document.facciones.localaccion)"'; $layerXML.=' imgitem="../images/iconos/eliminar.gif"'; $layerXML.=' textoitem='.$TbMsg[46]; @@ -1244,5 +1241,4 @@ function ContextualXMLComun() $layerXML.='</MENUCONTEXTUAL>'; return($layerXML); } -?> diff --git a/admin/WebConsole/principal/configuraciones.php b/admin/WebConsole/principal/configuraciones.php index 7c6e02aa..39093914 100644 --- a/admin/WebConsole/principal/configuraciones.php +++ b/admin/WebConsole/principal/configuraciones.php @@ -280,7 +280,7 @@ function datosGruposOrdenadores($cmd,$idgrupo) } $rs->Cerrar(); } - if ($numordenadores==0) + if ($ordenadores==0) { $cmd->texto="SELECT *, COUNT(*) AS numordenadores FROM gruposordenadores diff --git a/admin/WebConsole/principal/ecoconsola.php b/admin/WebConsole/principal/ecoconsola.php index cdd09205..26ea1b61 100644 --- a/admin/WebConsole/principal/ecoconsola.php +++ b/admin/WebConsole/principal/ecoconsola.php @@ -15,6 +15,7 @@ include_once("../includes/comunes.php"); include_once("../includes/CreaComando.php"); include_once("../includes/RecopilaIpesMacs.php"); + include_once('../includes/restfunctions.php'); //________________________________________________________________________________________________________ $ambito=0; $idambito=0; @@ -29,18 +30,6 @@ if (!$cmd) Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D. //________________________________________________________________________________________________________ - switch($sw){ - case 1: // Envío del código de scrip - $funcion="nfn=ConsolaRemota".chr(13); - $atributos="scp=".rawurlencode($comando).chr(13); - break; - case 2: // Recupera el archivo de eco - $funcion="nfn=EcoConsola".chr(13); // Nombre de la función que procesa la petición - $atributos=chr(13); - } - $aplicacion=""; // Ámbito de aplicación (cadena de ipes separadas por ";" y de identificadores de ordenadores por "," - $acciones=""; // Cadena de identificadores de acciones separadas por ";" para seguimiento - //________________________________________________________________________________________________________ // Ámbito de aplicación de la petición //________________________________________________________________________________________________________ $cadenaid=""; @@ -48,34 +37,12 @@ $cadenamac=""; RecopilaIpesMacs($cmd,$ambito,$idambito); // Ámbito de aplicación - $aplicacion="ido=".$cadenaid.chr(13)."iph=".$cadenaip.chr(13); //________________________________________________________________________________________________________ // Envio al servidor de la petición //________________________________________________________________________________________________________ - $resul=false; - $trama=""; - $shidra=new SockHidra($servidorhidra,$hidraport); - if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra - $parametros=$funcion.$aplicacion.$atributos.$acciones; - $resul=$shidra->envia_peticion($parametros); - if($resul) - $trama=$shidra->recibe_respuesta(); - $shidra->desconectar(); - } - if($resul){ - $hlonprm=hexdec(substr($trama,$LONCABECERA,$LONHEXPRM)); - $parametros=substr($trama,$LONCABECERA+$LONHEXPRM,$hlonprm); - $ValorParametros=extrae_parametros($parametros,chr(13),'='); - switch($sw){ - case 1: // Envío del código de scrip - $trama_notificacion=$ValorParametros["res"]; - echo $trama_notificacion; // Devuelve respuesta - break; - case 2: // Recupera el archivo de eco - $trama_notificacion=$ValorParametros["res"]; - echo $trama_notificacion; // Devuelve respuesta - } - - } -?> + $trama_notificacion = shell($sw, $cadenaip, $comando); + + echo $trama_notificacion; + + diff --git a/admin/WebConsole/principal/engine.php b/admin/WebConsole/principal/engine.php index 55004b8d..d7d10db1 100644 --- a/admin/WebConsole/principal/engine.php +++ b/admin/WebConsole/principal/engine.php @@ -18,14 +18,12 @@ $config=(file_exists ($cfgfile)) ? file_get_contents($cfgfile, TRUE) : "No hay a <body> - <div><p align=center class=cabeceras><img border=0 nod="aulas-1" value="Sala Virtual" style="cursor:pointer" src="../images/iconos/aula.gif" > <?php echo $TbMsg["ENGINE_TITLE"] ?><br> - <span id="aulas-1" class=subcabeceras><?php echo $TbMsg["ENGINE_SUBTITLE"] ?></span></p> + <div><p align="center" class="cabeceras"><img border="0" src="../images/iconos/aula.gif" > <?php echo $TbMsg["ENGINE_TITLE"] ?><br> + <span id="aulas-1" class="subcabeceras"><?php echo $TbMsg["ENGINE_SUBTITLE"] ?></span></p> </div> - <div style="margin: 0 3em 0 3em"> - <pre> - <?php echo $config; ?> - <pre> + <div style="margin: 3em"> + <pre><?php echo $config; ?><pre> </div> </body> </html> diff --git a/admin/WebConsole/principal/manual.php b/admin/WebConsole/principal/manual.php index ce9885cc..85921d75 100644 --- a/admin/WebConsole/principal/manual.php +++ b/admin/WebConsole/principal/manual.php @@ -37,7 +37,8 @@ foreach ($fichero as $ficheros) { </head> <body class='acercade'> -<div><p align=center class=cabeceras><img border=0 nod="aulas-1" value="Sala Virtual" style="cursor:pointer" src="../images/iconos/aula.gif" > <?php echo $TbMsg["MANUAL"] ?><br> +<p align=center class=cabeceras><img border=0 style="cursor: pointer;" src="../images/iconos/aula.gif" > <?php echo $TbMsg["MANUAL"] ?></p> +<br> <table width='100%' border='0'> <tr> diff --git a/admin/WebConsole/principal/purgar.php b/admin/WebConsole/principal/purgar.php index d3d0aaaa..aef8aebe 100644 --- a/admin/WebConsole/principal/purgar.php +++ b/admin/WebConsole/principal/purgar.php @@ -15,6 +15,7 @@ include_once("../includes/comunes.php"); include_once("../includes/CreaComando.php"); include_once("../includes/RecopilaIpesMacs.php"); + include_once('../includes/restfunctions.php'); //________________________________________________________________________________________________________ $ambito=0; $idambito=0; @@ -41,23 +42,5 @@ //________________________________________________________________________________________________________ // Envio al servidor de la petición //________________________________________________________________________________________________________ - $trama=""; - $shidra=new SockHidra($servidorhidra,$hidraport); - if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra - $parametros="nfn=".$funcion.chr(13); - $parametros.=$aplicacion; - $parametros.=$atributos; - $parametros.=$acciones; - $shidra->envia_comando($parametros); - $trama=$shidra->recibe_respuesta(); - $shidra->desconectar(); - $hlonprm=hexdec(substr($trama,$LONCABECERA,$LONHEXPRM)); - $parametros=substr($trama,$LONCABECERA+$LONHEXPRM,$hlonprm); - $ValorParametros=extrae_parametros($parametros,chr(13),'='); - $trama_notificacion=$ValorParametros["res"]; - echo $trama_notificacion; // Devuelve respuesta - } - else - echo "0"; // Error de conexión -?> + echo stop($cadenaip) === 0 ? "0" : "1"; diff --git a/admin/WebConsole/principal/repositorios.php b/admin/WebConsole/principal/repositorios.php index e2144b7f..5b273ed4 100644 --- a/admin/WebConsole/principal/repositorios.php +++ b/admin/WebConsole/principal/repositorios.php @@ -34,8 +34,8 @@ $XMLcontextual=ContextualXMLComandos($LITAMBITO_CENTROS,$AMBITO_CENTROS); //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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="../clases/jscripts/ArbolVistaXML.js"></SCRIPT> @@ -70,7 +70,7 @@ echo $flotante->CreaMenuContextual($XMLcontextual); $XMLcontextual=CreacontextualXMLRepositorio(); // Repositorio echo $flotante->CreaMenuContextual($XMLcontextual); ?> -</BODY OnContextMenu="return false;"> +</BODY> </HTML> <?php // ************************************************************************************************************************************************* @@ -325,7 +325,8 @@ function ContextualXMLComandos($litambito,$ambito){ global $cmd; global $TbMsg; $maxlongdescri=0; - $rs=new Recordset; + $descrip=""; + $rs=new Recordset; $cmd->texto="SELECT idcomando,descripcion,pagina,gestor,funcion FROM comandos WHERE activo=1 AND aplicambito & ".$ambito.">0 @@ -335,9 +336,10 @@ function ContextualXMLComandos($litambito,$ambito){ $layerXML=""; $rs->Primero(); while (!$rs->EOF){ - if (isset($TbMsg["COMMAND_".$rs->campos["funcion"]])) {$descrip=$TbMsg["COMMAND_".$rs->campos["funcion"]];}else{$descrip;} - //$descrip=$TbMsg["COMMAND_".$rs->campos["funcion"]]; - if (empty ($descrip)) { + if (isset($TbMsg["COMMAND_".$rs->campos["funcion"]])) { + $descrip=$TbMsg["COMMAND_".$rs->campos["funcion"]]; + } + if (empty($descrip)) { $descrip=$rs->campos["funcion"]; } $layerXML.='<ITEM'; diff --git a/admin/WebConsole/principal/shellconsola.php b/admin/WebConsole/principal/shellconsola.php index 64c44f79..a37276f0 100644 --- a/admin/WebConsole/principal/shellconsola.php +++ b/admin/WebConsole/principal/shellconsola.php @@ -189,4 +189,4 @@ function RecorreOrdenadores($cmd){ } $rs->Cerrar(); } -?> + diff --git a/admin/WebConsole/principal/sondeo.php b/admin/WebConsole/principal/sondeo.php index cc63ec60..90493d58 100644 --- a/admin/WebConsole/principal/sondeo.php +++ b/admin/WebConsole/principal/sondeo.php @@ -46,36 +46,14 @@ $cadenamac=""; RecopilaIpesMacs($cmd,$ambito,$idambito); // Ámbito de aplicación - $aplicacion="ido=".$cadenaid.chr(13)."iph=".$cadenaip.chr(13); - // Envio al servidor de la petición - //________________________________________________________________________________________________________ - $resul=false; - $trama=""; - $trama_notificacion=""; - $shidra=new SockHidra($servidorhidra,$hidraport); - if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra - $parametros="nfn=".$funcion.chr(13); - $parametros.=$aplicacion; - $parametros.=$atributos; - $parametros.=$acciones; - $resul=$shidra->envia_peticion($parametros); - if($resul) - $trama=$shidra->recibe_respuesta(); - $shidra->desconectar(); - } - if($resul){ - $hlonprm=hexdec(substr($trama,$LONCABECERA,$LONHEXPRM)); - $parametros=substr($trama,$LONCABECERA+$LONHEXPRM,$hlonprm); - $ValorParametros=extrae_parametros($parametros,chr(13),'='); - if (isset ($ValorParametros["tso"])) { - $trama_notificacion=$ValorParametros["tso"]; - } - } + $ips = explode (';', $cadenaip); + + $trama_notificacion = clients($sw, $ips); // Send REST requests to new OGAgent clients. $urls = array(); // Compose array of REST URLs. - foreach (explode (';', $cadenaip) as $ip) { + foreach ($ips as $ip) { $urls[$ip] = "https://$ip:8000/opengnsys/status"; } // Launch concurrent requests. @@ -95,5 +73,5 @@ } } echo $trama_notificacion; -?> + diff --git a/admin/WebConsole/propiedades/propiedades_aulas.php b/admin/WebConsole/propiedades/propiedades_aulas.php index cace8c5f..7042d5ca 100644 --- a/admin/WebConsole/propiedades/propiedades_aulas.php +++ b/admin/WebConsole/propiedades/propiedades_aulas.php @@ -81,8 +81,8 @@ if (!$resul) //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/validators.js"></SCRIPT> @@ -110,7 +110,7 @@ function abrir_ventana(URL){ <input type="hidden" name="oglive" value="<?php echo $oglive ?>"> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=5 cellPadding=1 cellSpacing=1 class=tabla_datos > <!-- AGP --> <!-------------------------------------------------- AGP -----------------------------------------------------------------> <TR> @@ -126,7 +126,7 @@ function abrir_ventana(URL){ <br />'.$TbMsg[21].': '. $ordenadores.'</td>'; } else{ - echo '<td><input class="formulariodatos" name=nombreaula style="width:215" type=text value="'. $nombreaula.'" /></td>'; + echo '<td><input class="formulariodatos" name=nombreaula style="width:215px" type=text value="'. $nombreaula.'" /></td>'; echo'<td rowspan="5" colspan="2" valign="top" align="left"><img border="3" style="border-color:#63676b" src="../images/fotos/'.$urlfoto.'" /><br />'.$TbMsg[21].': '. $ordenadores.'<br />(150X110)-(jpg - gif - png) ---- '.$TbMsg[5091].'<br /><input name="archivo" type="file" id="archivo" size="16" /></td>'; } ?> @@ -175,7 +175,7 @@ function abrir_ventana(URL){ <?php if ($opcion==$op_eliminacion) echo '<td>'.$puestos.'</td>'; else - echo '<td><input class="formulariodatos" name=puestos style="width:30" type=text value='.$puestos.'></td>'; + echo '<td><input class="formulariodatos" name=puestos style="width:30px" type=text value='.$puestos.'></td>'; ?> </tr> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> @@ -252,7 +252,7 @@ function abrir_ventana(URL){ if ($opcion==$op_eliminacion) echo '<TD colspan=3>'.$router.'</TD>'; else - echo '<TD colspan=3><INPUT class="formulariodatos" name=router style="width:100" type=text value='.$router.'></TD>'; + echo '<TD colspan=3><INPUT class="formulariodatos" name=router style="width:100px" type=text value='.$router.'></TD>'; ?> </TR> <!---- ADV --------------------------netmask-------------------------------------------------------------------------------------------------------------------------------------------> @@ -261,7 +261,7 @@ function abrir_ventana(URL){ <?php if ($opcion==$op_eliminacion) echo '<TD colspan=3>'.$netmask.'</TD>'; else - echo '<TD colspan=3><INPUT class="formulariodatos" name=netmask style="width:100" type=text value='.$netmask.'></TD>'; + echo '<TD colspan=3><INPUT class="formulariodatos" name=netmask style="width:100px" type=text value='.$netmask.'></TD>'; ?> </TR> <!---- Ramón ------------------------ntp-------------------------------------------------> @@ -270,7 +270,7 @@ function abrir_ventana(URL){ <?php if ($opcion==$op_eliminacion) { echo '<td colspan="3">'.$ntp.'</td>'; } else { - echo '<td colspan="3"><input class="formulariodatos" name="ntp" style="width:100" type="text" maxlength="15" value="'.$ntp.'" /> '; + echo '<td colspan="3"><input class="formulariodatos" name="ntp" style="width:100px" type="text" maxlength="15" value="'.$ntp.'" /> '; if (exec("timedatectl status | awk -F'[:()]' '/Time.*zone/ {print $2}'", $out, $err)) { echo '<em>('.$TbMsg['COMM_DEFTIMEZONE'].': '.$out[0].')</em>'; } @@ -284,7 +284,7 @@ function abrir_ventana(URL){ <?php if ($opcion==$op_eliminacion) echo '<td colspan="3">'.$dns.'</td>'; else - echo '<td colspan="3"><input class="formulariodatos" name="dns" style="width:100" type="text" maxlength="15" value="'.$dns.'" /></td>'; + echo '<td colspan="3"><input class="formulariodatos" name="dns" style="width:100px" type="text" maxlength="15" value="'.$dns.'" /></td>'; ?> </tr> <!---- Ramón ------------------------proxy-------------------------------------------------> @@ -293,7 +293,7 @@ function abrir_ventana(URL){ <?php if ($opcion==$op_eliminacion) echo '<td colspan="3">'.$proxy.'</td>'; else - echo '<td colspan="3"><input class="formulariodatos" name="proxy" style="width:200" type="text" maxlength="30" value="'.$proxy.'" /></td>'; + echo '<td colspan="3"><input class="formulariodatos" name="proxy" style="width:200px" type="text" maxlength="30" value="'.$proxy.'" /></td>'; ?> </tr> <!---- ADV --------------------------p2pmodo-------------------------------------------------------------------------------------------------------------------------------------------> @@ -318,7 +318,7 @@ function abrir_ventana(URL){ <?php if ($opcion==$op_eliminacion) echo '<TD colspan=3>'.$timep2p.'</TD>'; else - echo '<TD colspan=3><INPUT class="formulariodatos" name=timep2p style="width:100" type=text value='.$timep2p.'></TD>'; + echo '<TD colspan=3><INPUT class="formulariodatos" name=timep2p style="width:100px" type=text value='.$timep2p.'></TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> @@ -344,7 +344,7 @@ function abrir_ventana(URL){ <?php if ($opcion==$op_eliminacion) echo '<TD colspan=3>'.$ipmul.'</TD>'; else - echo '<TD colspan=3><INPUT class="formulariodatos" name=ipmul style="width:100" type=text value='.$ipmul.'></TD>'; + echo '<TD colspan=3><INPUT class="formulariodatos" name=ipmul style="width:100px" type=text value='.$ipmul.'></TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> @@ -354,10 +354,10 @@ function abrir_ventana(URL){ echo '<TD colspan=3>'.$pormul.'</TD>'; else { echo '<td colspan="3">'; - for ($i=9000; $i<9050; $i+=2) { + for ($i=9000; $i<9100; $i+=2) { $pormulmetodos.="$i=$i".chr(13); } - $pormulmetodos.="9050=9050"; + $pormulmetodos.="9100=9100"; echo HTMLCTESELECT($pormulmetodos,"pormul","estilodesple","",$pormul,100).'</td>'; } ?> @@ -368,11 +368,11 @@ function abrir_ventana(URL){ <?php if ($opcion==$op_eliminacion) echo '<TD colspan=3>'.$velmul.'</TD>'; else - echo '<TD colspan=3><INPUT class="formulariodatos" name=velmul style="width:100" type=text value='.$velmul.'></TD>'; + echo '<TD colspan=3><INPUT class="formulariodatos" name=velmul style="width:100px" type=text value='.$velmul.'></TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> -</TABLE></br> +</TABLE><p> <!-- ########################################### PROPIEDADES APLICABLES A TODOS LOS ORDENADORES #################################################################################--> <TABLE align=center border=7 cellPadding=3 cellSpacing=1 class=tabla_listados > @@ -412,7 +412,7 @@ function abrir_ventana(URL){ } echo HTMLCTESELECT($ogliveList,"oglive","estilodesple"," ",$cntDiff==0?$oglive:" ",200); if ($cntDiff > 0) { - echo ' <font color=red><strong>'.$TbMsg[34]." ==> $cntDiff</strong></font>\n"; + echo ' <div style="color: red; font-weight: bold;">'.$TbMsg[34]." ==> $cntDiff</div>\n"; } echo "</td>\n"; } @@ -454,7 +454,7 @@ function abrir_ventana(URL){ <?php if ($opcion==$op_eliminacion) echo '<td colspan="3">'.$paginalogin.'</td>'; else - echo '<td colspan="3"><input class="formulariodatos" name="paginalogin" style="width:200" type="text" value="'.$paginalogin.'"></td>'; + echo '<td colspan="3"><input class="formulariodatos" name="paginalogin" style="width:200px" type="text" value="'.$paginalogin.'"></td>'; ?> </tr> <tr> @@ -462,7 +462,7 @@ function abrir_ventana(URL){ <?php if ($opcion==$op_eliminacion) echo '<td colspan="3">'.$paginavalidacion.'</td>'; else - echo '<td colspan="3"><input class="formulariodatos" name="paginavalidacion" style="width:200" type="text" value="'.$paginavalidacion.'"></td>'; + echo '<td colspan="3"><input class="formulariodatos" name="paginavalidacion" style="width:200px" type="text" value="'.$paginavalidacion.'"></td>'; ?> </tr> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> @@ -675,5 +675,3 @@ function TomaConfiguracion($cmd) { } return(false); } -?> - diff --git a/admin/WebConsole/propiedades/propiedades_centros.php b/admin/WebConsole/propiedades/propiedades_centros.php index c4f89fb2..887cc5cd 100644 --- a/admin/WebConsole/propiedades/propiedades_centros.php +++ b/admin/WebConsole/propiedades/propiedades_centros.php @@ -50,7 +50,7 @@ if ($opcion!=$op_alta){ ?> <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/propiedades_centros.js"></SCRIPT> @@ -65,18 +65,18 @@ if ($opcion!=$op_alta){ <INPUT type=hidden name=idcentro value=<?php echo $idcentro?>> <INPUT type=hidden name=identidad value=<?php echo $identidad?>> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> -<!--------------------------------------------------------------------------------------------------------------------------------------------------> +<!-- -------------------------------------------------------------------------------------------------------------------------------------------- --> <TR> <TH> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion){?> <TD><?php echo $nombrecentro?></TD> <?php }else{?> - <TD><INPUT type=text class=cajatexto name="nombrecentro" style="width:350" value="<?php echo $nombrecentro?>"> + <TD><INPUT type=text class=cajatexto name="nombrecentro" style="width:350px" value="<?php echo $nombrecentro?>"> <?php }?> </TR> -<!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> +<!-- -------------------------------------------------------------------------------------------------------------------------------------------- --> <TR> <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) @@ -85,8 +85,7 @@ if ($opcion!=$op_alta){ echo '<TD><TEXTAREA class="formulariodatos" name=comentarios rows=3 cols=66>'.$comentarios.'</TEXTAREA></TD>'; ?> </TR> -<!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> -<!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> +<!-- -------------------------------------------------------------------------------------------------------------------------------------------- --> <?php if ($opcion!=$op_eliminacion) { echo " <TR>\n". " <TH align=center> ".$TbMsg['DIR']." </TH>\n". @@ -97,7 +96,7 @@ echo " <TR>\n". " </TR>\n"; } ?> -<!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> +<!-- -------------------------------------------------------------------------------------------------------------------------------------------- --> </TABLE> </FORM> <?php diff --git a/admin/WebConsole/propiedades/propiedades_componentehardwares.php b/admin/WebConsole/propiedades/propiedades_componentehardwares.php index 4cba86ad..7ccae62b 100644 --- a/admin/WebConsole/propiedades/propiedades_componentehardwares.php +++ b/admin/WebConsole/propiedades/propiedades_componentehardwares.php @@ -40,8 +40,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_componentehardwares.js"></SCRIPT> @@ -49,24 +49,25 @@ if ($opcion!=$op_alta){ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_componentehardwares_'.$idioma.'.js"></SCRIPT>'?> </HEAD> <BODY> -<FORM name="fdatos" action="../gestores/gestor_componentehardwares.php" method="post"> +<div align="center"> +<FORM name="fdatos" action="../gestores/gestor_componentehardwares.php" method="post"> <INPUT type=hidden name=opcion value="<?php echo $opcion?>"> - <INPUT type=hidden name=idhardware value=<?php echo $idhardware?>> - <INPUT type=hidden name=grupoid value=<?php echo $grupoid?>> - <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <INPUT type=hidden name=idhardware value="<?php echo $idhardware?>"> + <INPUT type=hidden name=grupoid value="<?php echo $grupoid?>"> + <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[5]?> </TD> + <TH align=center> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:215">'.$descripcion.'</TD>'; + echo '<TD style="width:215px">'.$descripcion.'</TD>'; else - echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:250" type=text value="'.$descripcion.'"></TD>';?> + echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:250px" type=text value="'.$descripcion.'"></TD>';?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[6]?> </TD> + <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.TomaDato($cmd,0,'tipohardwares',$idtipohardware,'idtipohardware','descripcion').'</TD>'; @@ -77,7 +78,7 @@ if ($opcion!=$op_alta){ <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> </TABLE> </FORM> -</DIV> +</div> <?php //________________________________________________________________________________________________________ include_once("../includes/opcionesbotonesop.php"); @@ -109,4 +110,3 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> diff --git a/admin/WebConsole/propiedades/propiedades_componentesoftwares.php b/admin/WebConsole/propiedades/propiedades_componentesoftwares.php index 381ee125..68f4e95b 100644 --- a/admin/WebConsole/propiedades/propiedades_componentesoftwares.php +++ b/admin/WebConsole/propiedades/propiedades_componentesoftwares.php @@ -41,8 +41,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_componentesoftwares.js"></SCRIPT> @@ -50,23 +50,24 @@ if ($opcion!=$op_alta){ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_componentesoftwares_'.$idioma.'.js"></SCRIPT>'?> </HEAD> <BODY> +<div align="center"> <FORM name="fdatos" action="../gestores/gestor_componentesoftwares.php" method="post"> <INPUT type=hidden name=opcion value="<?php echo $opcion?>"> <INPUT type=hidden name=idsoftware value=<?php echo $idsoftware?>> <INPUT type=hidden name=grupoid value=<?php echo $grupoid?>> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> - <TR width="100px" style="display:block"> + <TR style="display:block"> <TH width="100px" align=center> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:215">'.$descripcion.'</TD>'; + echo '<TD style="width:215px">'.$descripcion.'</TD>'; else - echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:250" type=text value="'.$descripcion.'"></TD>';?> + echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:250px" type=text value="'.$descripcion.'"></TD>';?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> - <TR width="100px" style="display:block" > + <TR style="display:block" > <TH width="100px" align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) @@ -77,22 +78,20 @@ if ($opcion!=$op_alta){ </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <?php if($idtiposoftware!=1) - echo '<TR width="100px" id="tridtiposo" style="display:none">'; - else - echo '<TR width="100px" id="tridtiposo" style="display:block">'; + echo '<tr id="tridtiposo" style="display:none">'; + else + echo '<tr id="tridtiposo" style="display:block">'; + echo ' <TH width="100px" align=center> <?php echo $TbMsg[7]?> </TH>'; + if ($opcion==$op_eliminacion) + echo '<TD>'.TomaDato($cmd,0,'tiposos',$idtiposo,'idtiposo','descripcion').'</TD>'; + else + echo '<TD>'.HTMLSELECT($cmd,0,'tiposos',$idtiposo,'idtiposo','descripcion',250).'</TD>'; + echo '</tr>'; ?> - <TH width="100px" align=center> <?php echo $TbMsg[7]?> </TH> - <?php - if ($opcion==$op_eliminacion) - echo '<TD>'.TomaDato($cmd,0,'tiposos',$idtiposo,'idtiposo','descripcion').'</TD>'; - else - echo '<TD>'.HTMLSELECT($cmd,0,'tiposos',$idtiposo,'idtiposo','descripcion',250).'</TD>'; - ?> - </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> </TABLE> </FORM> -</DIV> +</div> <?php //________________________________________________________________________________________________________ include_once("../includes/opcionesbotonesop.php"); @@ -126,4 +125,3 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> diff --git a/admin/WebConsole/propiedades/propiedades_entidades.php b/admin/WebConsole/propiedades/propiedades_entidades.php index 18b0abb2..e221d96a 100644 --- a/admin/WebConsole/propiedades/propiedades_entidades.php +++ b/admin/WebConsole/propiedades/propiedades_entidades.php @@ -51,7 +51,7 @@ if ($opcion!=$op_alta){ ?> <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/propiedades_entidades.js"></SCRIPT> @@ -60,45 +60,45 @@ if ($opcion!=$op_alta){ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_entidades_'.$idioma.'.js"></SCRIPT>'?> </HEAD> <BODY> +<div align="center"> <FORM name="fdatos" action="../gestores/gestor_entidades.php" method="post"> <INPUT type=hidden name=opcion value=<?php echo $opcion?>> <INPUT type=hidden name=identidad value=<?php echo $identidad?>> <INPUT type=hidden name=iduniversidad value=<?php echo $iduniversidad?>> <INPUT type=hidden name=grupoid value=<?php echo $grupoid?>> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> -<!--------------------------------------------------------------------------------------------------------------------------------------------------> - <TR> - <TH> <?php echo $TbMsg[5]?> </TH> - <?php if ($opcion==$op_eliminacion){?> - <TD><?php echo $nombreentidad?></TD> - <?php }else{?> - <TD><INPUT type=text class=cajatexto name="nombreentidad" style="width:350" value="<?php echo $nombreentidad?>"> - <?php }?> - </TR> -<!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> +<!-- -------------------------------------------------------------------------------------------------------------------------------------------- --> <TR> - <TH align=center> <?php echo $TbMsg[6]?> </TD> - <?php if ($opcion==$op_eliminacion) + <TH> <?php echo $TbMsg[5]?> </TH> + <?php if ($opcion==$op_eliminacion){ + echo '<TD>'.$nombreentidad.'</TD>'; + }else{ + echo '<TD><INPUT type=text class=cajatexto name="nombreentidad" style="width:350px" value="'.$nombreentidad.'">'; + } ?> + </TR> +<!-- -------------------------------------------------------------------------------------------------------------------------------------------- --> + <TR> + <TH align=center> <?php echo $TbMsg[6]?> </TH> + <?php if ($opcion==$op_eliminacion) echo '<TD>'.$comentarios.'</TD>'; else echo '<TD><TEXTAREA class="formulariodatos" name=comentarios rows=3 cols=66>'.$comentarios.'</TEXTAREA></TD>'; ?> </TR> -<!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> - <?php if ($opcion!=$op_eliminacion) { - ($ogunit == 1) ? $checked = "checked" : $checked = ""; -echo " <TR>\n". - " <TH align=center> ".$TbMsg['OGUNIT']." </TD>\n". +<!-- -------------------------------------------------------------------------------------------------------------------------------------------- --> + <?php if ($opcion!=$op_eliminacion) { + $checked = ($ogunit == 1) ? "checked" : ""; + echo " <TR>\n". + " <TH align=center> ".$TbMsg['OGUNIT']." </TH>\n". " <TD><input class='formulariodatos' name='ogunit' value='1' type='checkbox' $checked onchange='mensaje_ogunit()'> </TD>\n". " </TR>\n"; - } - ?> -<!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> + } ?> +<!-- -------------------------------------------------------------------------------------------------------------------------------------------- --> </TABLE> </FORM> -</DIV> +</div> <?php //________________________________________________________________________________________________________ include_once("../includes/opcionesbotonesop.php"); @@ -133,4 +133,4 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> + diff --git a/admin/WebConsole/propiedades/propiedades_entornos.php b/admin/WebConsole/propiedades/propiedades_entornos.php index 2d21fa30..dec84f96 100644 --- a/admin/WebConsole/propiedades/propiedades_entornos.php +++ b/admin/WebConsole/propiedades/propiedades_entornos.php @@ -49,8 +49,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_entornos.js"></SCRIPT> @@ -60,18 +60,18 @@ if ($opcion!=$op_alta){ </HEAD> <BODY> <DIV align=center> -<FORM name="fdatos" name="fdatos" action="../gestores/gestor_entornos.php" method="post"> +<FORM name="fdatos" action="../gestores/gestor_entornos.php" method="post"> <INPUT type=hidden name=identorno value="<?php echo $identorno?>"> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos > <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[5]?> </TD> + <TH align=center> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion){ echo '<TD>'. $ipserveradm.'</TD>'; @@ -84,7 +84,7 @@ if ($opcion!=$op_alta){ </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[6]?> </TD> + <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.$portserveradm.' </TD>'; else @@ -94,7 +94,7 @@ if ($opcion!=$op_alta){ <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[7]?> </TD> + <TH align=center> <?php echo $TbMsg[7]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.$protoclonacion.'</TD>'; @@ -149,4 +149,3 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> diff --git a/admin/WebConsole/propiedades/propiedades_grupos.php b/admin/WebConsole/propiedades/propiedades_grupos.php index 4a40470f..142f6d19 100644 --- a/admin/WebConsole/propiedades/propiedades_grupos.php +++ b/admin/WebConsole/propiedades/propiedades_grupos.php @@ -129,8 +129,8 @@ switch($literaltipo){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_grupos.js"></SCRIPT> @@ -149,19 +149,19 @@ switch($literaltipo){ <INPUT type=hidden name=iduniversidad value=<?php echo $iduniversidad?>> <INPUT type=hidden name=idaula value=<?php echo $idaula?>> <P align=center class=cabeceras><IMG src="<?php echo $urlimg?>"> <?php echo $textambito?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos > <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[5]?> </TD> + <TH align=center> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:300">'.$nombregrupo.'</TD>'; + echo '<TD style="width:300px">'.$nombregrupo.'</TD>'; else - echo '<TD><INPUT class="formulariodatos" name=nombregrupo style="width:320" type=text value="'.$nombregrupo.'"></TD>';?> + echo '<TD><INPUT class="formulariodatos" name=nombregrupo style="width:320px" type=text value="'.$nombregrupo.'"></TD>';?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[6]?> </TD> + <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.$comentarios.'</TD>'; else @@ -211,5 +211,3 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> - diff --git a/admin/WebConsole/propiedades/propiedades_imagenes.php b/admin/WebConsole/propiedades/propiedades_imagenes.php index 4f31f607..cc108c17 100644 --- a/admin/WebConsole/propiedades/propiedades_imagenes.php +++ b/admin/WebConsole/propiedades/propiedades_imagenes.php @@ -34,6 +34,7 @@ $modelo=""; $numdisk=0; $numpar=0; $codpar=0; +$tipopar=""; $idperfilsoft=0; $perfilsoft=""; $comentarios=""; @@ -45,6 +46,7 @@ $tipoimg=0; $idrepositorio=0; $repoip=""; $repokey=""; +$sistoperativo=""; $fechacreacion=""; $revision=0; $imagenid=0; @@ -116,8 +118,8 @@ if ($opcion!=$op_alta and isset($repokey)) { //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/validators.js"></SCRIPT> @@ -155,35 +157,37 @@ if ($opcion!=$op_alta and isset($repokey)) { ?> <P align=center class=cabeceras><?php echo $lit?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN> </P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> - <!--------------------------------------------------------------------------------------> + <!-- -------------------------------------------------------------------------------- --> <TR> - <TH align=center> <?php echo $TbMsg[11]?> </TD> + <TH align=center> <?php echo $TbMsg[11]?> </TH> <?php if ($opcion==$op_eliminacion || !empty($idperfilsoft) || $opcion == 2) - echo '<TD style="width:150">'.$nombreca.' + echo '<TD style="width:150px">'.$nombreca.' <INPUT type="hidden" name="nombreca" value="'.$nombreca.'"></TD>'; else - echo '<TD><INPUT class="formulariodatos" name=nombreca style="width:150" type=text value="'.$nombreca.'"></TH>';if ($validnombreca == 1){echo '<font color=red><strong> '.$TbMsg[18].'</strong>';}?> + echo '<TD><INPUT class="formulariodatos" name=nombreca style="width:150px" type=text value="'.$nombreca.'">'; + if ($validnombreca == 1){echo '<div style="color: red; font-weight: bold;"> '.$TbMsg[18].'</div>';} + echo '</TD>';?> </TR> - <!--------------------------------------------------------------------------------------> + <!-- -------------------------------------------------------------------------------- --> <TR> - <TH align=center> <?php echo $TbMsg[5]?> </TD> + <TH align=center> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion) { - echo '<TD style="width:300">'.$descripcion.' + echo '<TD style="width:300px">'.$descripcion.' <INPUT type="hidden" name="descripcion" value="'.$descripcion.'"></TD>'; } else { - echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:350" type=text value="'.$descripcion.'">'; - if ($validnombreca == 0 && $validdescripcion == 1){echo '<font color=red><strong> '.$TbMsg[22].'</strong>';} + echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:350px" type=text value="'.$descripcion.'">'; + if ($validnombreca == 0 && $validdescripcion == 1){echo '<div style="color: red; font-weight: bold;"> '.$TbMsg[22].'</div>';} echo '</TD>'; } ?> </TR> - <!--------------------------------------------------------------------------------------> + <!-- -------------------------------------------------------------------------------- --> <?php if($tipoimg==$IMAGENES_INCREMENTALES){?> <TR> - <TH align=center> <?php echo $TbMsg[14]?> </TD> + <TH align=center> <?php echo $TbMsg[14]?> </TH> <?php if ($opcion==$op_eliminacion || !empty($idperfilsoft)) echo '<TD>'.TomaDato($cmd,$idcentro,'imagenes',$imagenid,'imagenid','descripcion').' <INPUT type="hidden" name="imagenid" value="'.$imagenid.'"></TD>'; @@ -194,9 +198,9 @@ if ($opcion!=$op_alta and isset($repokey)) { </TR> <?php } ?> <?php if($tipoimg!=$IMAGENES_INCREMENTALES){?> - <!--------------------------------------------------------------------------------------> + <!-- -------------------------------------------------------------------------------- --> <TR> - <TH align=center> <?php echo $TbMsg[10]?> </TD> + <TH align=center> <?php echo $TbMsg[10]?> </TH> <?php if ($opcion==$op_eliminacion || !empty($idperfilsoft)) echo '<TD>'.$nombrerepositorio.' <INPUT type="hidden" name="idrepositorio" value="'.$idrepositorio.'"></TD>'; @@ -204,20 +208,20 @@ if ($opcion!=$op_alta and isset($repokey)) { echo '<TD>'.HTMLSELECT($cmd,$idcentro,'repositorios',$idrepositorio,'idrepositorio','nombrerepositorio',300).'</TD>'; ?> </TR> - <!--------------------------------------------------------------------------------------> + <!-- -------------------------------------------------------------------------------- --> <?php if($tipoimg==$IMAGENES_BASICAS){?> <TR> - <TH align=center> <?php echo $TbMsg[16]?> </TD> + <TH align=center> <?php echo $TbMsg[16]?> </TH> <?php if ($opcion==$op_eliminacion || !empty($idperfilsoft)) echo '<TD>'.$ruta.' <INPUT type="hidden" name="ruta" value="'.$ruta.'"></TD>'; else - echo '<TD><INPUT class="formulariodatos" name=ruta style="width:350" type=text value="'.$ruta.'"></TH>';?> + echo '<TD><INPUT class="formulariodatos" name=ruta style="width:350px" type=text value="'.$ruta.'"></TH>';?> </TR> <?php }?> - <!--------------------------------------------------------------------------------------> + <!-- -------------------------------------------------------------------------------- --> <TR> - <TH align=center> <?php echo $TbMsg[7]?> </TD> + <TH align=center> <?php echo $TbMsg[7]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.$comentarios.'</TD>'; else @@ -264,7 +268,7 @@ if ($opcion!=$op_alta and isset($repokey)) { </tr> <!-- Perfil de software --> <TR> - <TH align=center> <?php echo $TbMsg[6]?> </TD> + <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if (isset($modelo)) { echo '<TD> '.$perfilsoft.' @@ -319,7 +323,7 @@ EOT; echo '<tr><th colspan="14">'.$TbMsg["WARN_SOURCE_PATH"].'</th></tr>'; } }?> - <!--------------------------------------------------------------------------------------> + <!-- -------------------------------------------------------------------------------- --> </TABLE> </FORM> @@ -327,7 +331,7 @@ EOT; if (!empty($idperfilsoft)){ // Nota a pie de página indicando que cuando la imagen tiene perfilsoft no pueden modificarse ciertos campos echo ' <DIV id="Layer_nota" align=center > - <SPAN align=center class=notas><I>'.$TbMsg[15].'</I></SPAN> + <SPAN class=notas><em>'.$TbMsg[15].'</em></SPAN> </DIV><br>'; } //________________________________________________________________________________________________________ @@ -503,4 +507,3 @@ function ValidaDescripcion($cmd,$nombreca,$descripcion){ } $rs->Cerrar(); } -?> diff --git a/admin/WebConsole/propiedades/propiedades_menus.php b/admin/WebConsole/propiedades/propiedades_menus.php index 8e996841..66d44a84 100644 --- a/admin/WebConsole/propiedades/propiedades_menus.php +++ b/admin/WebConsole/propiedades/propiedades_menus.php @@ -50,8 +50,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_menus.js"></SCRIPT> @@ -59,28 +59,29 @@ if ($opcion!=$op_alta){ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_menus_'.$idioma.'.js"></SCRIPT>'?> </HEAD> <BODY> +<div align="center"> <FORM name="fdatos" action="../gestores/gestor_menus.php" method="post"> <INPUT type=hidden name=opcion value=<?php echo $opcion?>> <INPUT type=hidden name=idmenu value=<?php echo $idmenu?>> <INPUT type=hidden name=grupoid value=<?php echo $grupoid?>> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <table align="center" border="0" cellPadding="1" cellSpacing="1" class="tabla_datos"> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <tr> <th align="center"> <?php echo $TbMsg[5]?> </th> <?php if ($opcion==$op_eliminacion) - echo '<td style="width:300">'.$descripcion.'</td>'; + echo '<td style="width:300px">'.$descripcion.'</td>'; else - echo '<td><input class="formulariodatos" name="descripcion" style="width:300" type="text" value="'.$descripcion.'" /></td>';?> + echo '<td><input class="formulariodatos" name="descripcion" style="width:300px" type="text" value="'.$descripcion.'" /></td>';?> </tr> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <tr> <th align=center> <?php echo $TbMsg[6]?> </th> <?php if ($opcion==$op_eliminacion) - echo '<td style="width:300">'.$titulo.'</td>'; + echo '<td style="width:300px">'.$titulo.'</td>'; else - echo '<td ><input class="formulariodatos" name="titulo" style="width:300" type="text" value="'.$titulo.'" /></td>';?> + echo '<td ><input class="formulariodatos" name="titulo" style="width:300px" type="text" value="'.$titulo.'" /></td>';?> </tr> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <tr> @@ -177,7 +178,7 @@ if ($opcion!=$op_alta){ <?php if ($opcion==$op_eliminacion){ $tbmodalidad[1]=$TbMsg[13]; $tbmodalidad[2]=$TbMsg[14]; - echo '<TD style="width:100">'.$tbmodalidad[$modalidad].'</TD>'; + echo '<TD style="width:100px">'.$tbmodalidad[$modalidad].'</TD>'; } else{ $parametros="1=1".chr(13); @@ -195,7 +196,7 @@ if ($opcion!=$op_alta){ <?php if ($opcion==$op_eliminacion) echo '<TD colspan=5>'.$htmlmenupub.'</TD>'; else - echo '<TD colspan=5><INPUT class="formulariodatos" name=htmlmenupub style="width:350" type=text value="'.$htmlmenupub.'"></TD>'; + echo '<TD colspan=5><INPUT class="formulariodatos" name=htmlmenupub style="width:350px" type=text value="'.$htmlmenupub.'"></TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> @@ -208,7 +209,7 @@ if ($opcion!=$op_alta){ <?php if ($opcion==$op_eliminacion){ $tbmodalidad[1]=$TbMsg[13]; $tbmodalidad[2]=$TbMsg[14]; - echo '<TD style="width:100">'.$tbmodalidad[$smodalidad].'</TD>'; + echo '<TD style="width:100px">'.$tbmodalidad[$smodalidad].'</TD>'; } else{ $parametros="1=1".chr(13); @@ -225,7 +226,7 @@ if ($opcion!=$op_alta){ <?php if ($opcion==$op_eliminacion) echo '<TD colspan=5">'.$htmlmenupri.'</TD>'; else - echo '<TD colspan=5><INPUT class="formulariodatos" name=htmlmenupri style="width:350" type=text value="'.$htmlmenupri.'"></TD>'; + echo '<TD colspan=5><INPUT class="formulariodatos" name=htmlmenupri style="width:350px" type=text value="'.$htmlmenupri.'"></TD>'; ?> </TR> </TABLE> @@ -237,7 +238,7 @@ if ($opcion!=$op_alta){ ?> </table> </FORM> -</DIV> +</div> <?php //________________________________________________________________________________________________________ include_once("../includes/opcionesbotonesop.php"); @@ -284,4 +285,4 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> + diff --git a/admin/WebConsole/propiedades/propiedades_ordenadores.php b/admin/WebConsole/propiedades/propiedades_ordenadores.php index 887e87e0..e00f33ee 100644 --- a/admin/WebConsole/propiedades/propiedades_ordenadores.php +++ b/admin/WebConsole/propiedades/propiedades_ordenadores.php @@ -61,8 +61,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <html> -<title>Administración web de aulas</title> <head> + <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/validators.js"></SCRIPT> @@ -196,6 +196,7 @@ function abrir_ventana(URL){ <TR> <th align=center> <?php echo $TbMsg[18]?> </th> <?php +$bdogLive=""; $cmd->texto="SELECT * FROM ordenadores WHERE idordenador=".$idordenador; $rs=new Recordset; $rs->Comando=&$cmd; @@ -210,14 +211,14 @@ if ($opcion==$op_eliminacion){ echo '<td colspan="3">'.$bdogLive.'</td>'; }else{ exec("bash /opt/opengnsys/bin/oglivecli list", $listogcli); - echo '<TD colspan=3><select class="formulariodatos" name="seleoglive" style=width:250>'."\n"; + echo '<TD colspan=3><select class="formulariodatos" name="seleoglive" style=width:250px>'."\n"; echo '<option value="ogLive">'.$TbMsg['COMM_DEFOGLIVE'].'</option>'; foreach ($listogcli as $oglive) { if (preg_match("/ogLive/",$oglive)){ $oglive=substr($oglive,1); $oglive=trim($oglive); $Selectcli = '<option value="'.$oglive.'"'; - If ($bdogLive==$oglive) $Selectcli.= ' selected ' ; + if ($bdogLive==$oglive) $Selectcli.= ' selected ' ; $Selectcli.= '>'.$oglive.'</OPTION>'; echo $Selectcli; } diff --git a/admin/WebConsole/propiedades/propiedades_ordenadorestandar.php b/admin/WebConsole/propiedades/propiedades_ordenadorestandar.php index 6decd954..89292c9e 100644 --- a/admin/WebConsole/propiedades/propiedades_ordenadorestandar.php +++ b/admin/WebConsole/propiedades/propiedades_ordenadorestandar.php @@ -42,8 +42,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_ordenadorestandar.js"></SCRIPT> @@ -53,11 +53,11 @@ if ($opcion!=$op_alta){ <BODY> <FORM name="fdatos"> <P align=center class=cabeceras><IMG border=0 src="../images/iconos/aula.gif"> <?php echo $TbMsg[0]?>:<SPAN class=cabeceras><?php echo $nombreaula?></SPAN><BR> - <SPAN align=center class=subcabeceras><?php echo $TbMsg[1]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $TbMsg[1]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[2]?> </TD> + <TH align=center> <?php echo $TbMsg[2]?> </TH> <?php echo '<TD><INPUT class="formulariodatos" name=nombreordenador type=text value="'.$nombreordenador.'"></TD>'; ?> @@ -65,45 +65,45 @@ if ($opcion!=$op_alta){ </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[3]?> </TD> + <TH align=center> <?php echo $TbMsg[3]?> </TH> <?php echo '<TD><INPUT class="formulariodatos" name=ip type=text value="'.$ip.'"></TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[4]?> </TD> + <TH align=center> <?php echo $TbMsg[4]?> </TH> <?php echo '<TD><INPUT class="formulariodatos" name=mac type=text value="'. $mac.'"></TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[5]?> </TD> + <TH align=center> <?php echo $TbMsg[5]?> </TH> <?php echo '<TD colspan=3>'.HTMLSELECT($cmd,$idcentro,'perfileshard',$idperfilhard,'idperfilhard','descripcion',250).'</TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[7]?> </TD> + <TH align=center> <?php echo $TbMsg[7]?> </TH> <?php echo '<TD colspan=3>'.HTMLSELECT($cmd,$idcentro,'repositorios',$idrepositorio,'idrepositorio','nombrerepositorios',250).'</TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[11]?> </TD> + <TH align=center> <?php echo $TbMsg[11]?> </TH> <?php - echo '<TD colspan=3><INPUT style="width:250"class="formulariodatos" name=cache type=text value="'. $cache.'"></TD>'; + echo '<TD colspan=3><INPUT style="width:250px" class="formulariodatos" name=cache type=text value="'. $cache.'"></TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[8]?> </TD> + <TH align=center> <?php echo $TbMsg[8]?> </TH> <?php - echo '<TD colspan=3><INPUT class="formulariodatos" name=numorde type=text value=0 style="width:250"></TD>'; + echo '<TD colspan=3><INPUT class="formulariodatos" name=numorde type=text value=0 style="width:250px"></TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> diff --git a/admin/WebConsole/propiedades/propiedades_perfilhardwares.php b/admin/WebConsole/propiedades/propiedades_perfilhardwares.php index e9a1cadc..3edd2ef6 100644 --- a/admin/WebConsole/propiedades/propiedades_perfilhardwares.php +++ b/admin/WebConsole/propiedades/propiedades_perfilhardwares.php @@ -45,8 +45,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <html> -<title>Administración web de aulas</title> <head> + <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/propiedades_perfilhardwares.js"></script> @@ -62,16 +62,16 @@ if ($opcion!=$op_alta){ <input type="hidden" name="grupoid" value="<?php echo $grupoid?>" /> <input type="hidden" name="winboot" value="reboot" /> <p align="center" class="cabeceras"><?php echo $TbMsg["HARD_TITLE"]?><br /> - <span align="center" class="subcabeceras"><?php echo $opciones[$opcion]?></span></p> + <span class="subcabeceras"><?php echo $opciones[$opcion]?></span></p> <table align="center" border="0" cellPadding="1" cellSpacing="1" class="tabla_datos"> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <tr> <th align="center"> <?php echo $TbMsg["HARD_NAME"]?> </th> <?php if ($opcion==$op_eliminacion) - echo '<td style="width:215">'.$descripcion.'</td>'; + echo '<td style="width:215px">'.$descripcion.'</td>'; else - 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> + echo '<td><input class="formulariodatos" name="descripcion" style="width:215px" type="text" value="'.$descripcion.'" /></td>'; ?> + <td align="left" rowspan="3"><img border="3" style="border-color:#63676b" src="../images/aula.jpg" alt="*" /><br /> <?php echo $TbMsg["HARD_COMPUTERS"].": $ordenadores"?></td> </tr> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <tr> @@ -123,4 +123,4 @@ function TomaPropiedades($cmd,$id) $rs->Cerrar(); return(true); } -?> + diff --git a/admin/WebConsole/propiedades/propiedades_perfilsoftwares.php b/admin/WebConsole/propiedades/propiedades_perfilsoftwares.php index 64fadafc..2a6368b8 100644 --- a/admin/WebConsole/propiedades/propiedades_perfilsoftwares.php +++ b/admin/WebConsole/propiedades/propiedades_perfilsoftwares.php @@ -39,8 +39,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_perfilsoftwares.js"></SCRIPT> @@ -55,16 +55,16 @@ if ($opcion!=$op_alta){ <INPUT type=hidden name=imagenes value=<?php echo $imagenes?>> <INPUT type=hidden name=grupoid value=<?php echo $grupoid?>> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> <TH align=center> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:215">'.$descripcion.'</TD>'; + echo '<TD style="width:215px">'.$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> Images: <?php echo $imagenes?></center></TD> + echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:215px" type=text value="'.$descripcion.'"></TD>';?> + <TD align=left rowspan=2><IMG border=3 style="border-color:#63676b" src="../images/aula.jpg"><br><div align="center"> Images: <?php echo $imagenes?></div></TD> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> @@ -123,4 +123,4 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> + diff --git a/admin/WebConsole/propiedades/propiedades_procedimientos.php b/admin/WebConsole/propiedades/propiedades_procedimientos.php index d5e51816..c8003a4c 100644 --- a/admin/WebConsole/propiedades/propiedades_procedimientos.php +++ b/admin/WebConsole/propiedades/propiedades_procedimientos.php @@ -38,8 +38,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_procedimientos.js"></SCRIPT> @@ -53,19 +53,19 @@ if ($opcion!=$op_alta){ <INPUT type=hidden name=idprocedimiento value=<?php echo $idprocedimiento?>> <INPUT type=hidden name=grupoid value=<?php echo $grupoid?>> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[5]?> </TD> + <TH align=center> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:300">'.$descripcion.'</TD>'; + echo '<TD style="width:300px">'.$descripcion.'</TD>'; else - echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:300" type=text value="'.$descripcion.'"></TD>';?> + echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:300px" type=text value="'.$descripcion.'"></TD>';?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[6]?> </TD> + <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.$comentarios.'</TD>'; else @@ -107,4 +107,3 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> diff --git a/admin/WebConsole/propiedades/propiedades_repositorios.php b/admin/WebConsole/propiedades/propiedades_repositorios.php index b2407b8a..7bdb6713 100644 --- a/admin/WebConsole/propiedades/propiedades_repositorios.php +++ b/admin/WebConsole/propiedades/propiedades_repositorios.php @@ -74,8 +74,8 @@ if($apiKeyRepo != ""){ //######################################################################### ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/validators.js"></SCRIPT> @@ -92,44 +92,44 @@ if($apiKeyRepo != ""){ <INPUT type=hidden name=ordenadores value="<?php echo $ordenadores?>"> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos > <!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> <TR> - <TH align="center"> <?php echo $TbMsg[5]?> </TD> + <TH align="center"> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.$nombrerepositorio.'</TD>'; else - echo '<TD><INPUT class="formulariodatos" name="nombrerepositorio" style="width:200" type="text" value="'.$nombrerepositorio.'"></TD>'; + echo '<TD><INPUT class="formulariodatos" name="nombrerepositorio" style="width:200px" type="text" value="'.$nombrerepositorio.'"></TD>'; ?> - <TD valign="top" align="left" rowspan="4" ><CENTER> + <TD valign="top" align="center" rowspan="4"> <IMG border="3" style="border-color:#63676b" src="../images/aula.jpg"> - <BR> Ordenadores: <?php echo $ordenadores?></CENTER></TD> + <BR> Ordenadores: <?php echo $ordenadores?></TD> </TR> <!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> <TR> - <TH align=center> <?php echo $TbMsg[6]?> </TD> + <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.$ip.'</TD>'; else - echo'<TD><INPUT class="formulariodatos" name="ip" type="text" style="width:200" value="'.$ip.'"></TD>'; + echo'<TD><INPUT class="formulariodatos" name="ip" type="text" style="width:200px" value="'.$ip.'"></TD>'; ?> </TR> <!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> <TR> - <TH align=center> <?php echo $TbMsg[17]?> </TD> + <TH align=center> <?php echo $TbMsg[17]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>********</TD>'; else - echo'<TD><INPUT class="formulariodatos" name="apiKeyRepo" type="text" style="width:200" value="'.$apiKeyRepo.'"></TD>'; + echo'<TD><INPUT class="formulariodatos" name="apiKeyRepo" type="text" style="width:200px" value="'.$apiKeyRepo.'"></TD>'; ?> </TR> <!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> <TR> - <TH align=center> <?php echo $TbMsg[7]?> </TD> + <TH align=center> <?php echo $TbMsg[7]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD colspan="2">'.$comentarios.'</TD>'; @@ -148,10 +148,10 @@ if($apiKeyRepo != ""){ <?php if ($repoWithApi) { ?> <TR> - <TH align=center width=125> <?php echo $TbMsg[11]?> </TD> - <TH align=center width=120> <?php echo $TbMsg[12]?> </TD> - <TH align=center width=120> <?php echo $TbMsg[13]?> </TD> - <TH align=center width=101> <?php echo $TbMsg[14]?> </TD> + <TH align=center width=125> <?php echo $TbMsg[11]?> </TH> + <TH align=center width=120> <?php echo $TbMsg[12]?> </TH> + <TH align=center width=120> <?php echo $TbMsg[13]?> </TH> + <TH align=center width=101> <?php echo $TbMsg[14]?> </TH> </TR> <TR> <TD align=center width=125> <?php echo $totalrepo?> </TD> diff --git a/admin/WebConsole/propiedades/propiedades_reservas.php b/admin/WebConsole/propiedades/propiedades_reservas.php index 1cf4f79c..3c49cdde 100644 --- a/admin/WebConsole/propiedades/propiedades_reservas.php +++ b/admin/WebConsole/propiedades/propiedades_reservas.php @@ -49,8 +49,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/opciones.js"></SCRIPT> @@ -66,13 +66,13 @@ if ($opcion!=$op_alta){ <INPUT type=hidden name=grupoid value=<?php echo $grupoid?>> <INPUT type=hidden name=estado value=<?php echo $estado?>> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> <TH align=center> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:300">'.$descripcion.'</TD>'; + echo '<TD style="width:300px">'.$descripcion.'</TD>'; else echo '<TD><TEXTAREA class="formulariodatos" name=descripcion rows=3 cols=55">'.$descripcion.'</TEXTAREA></TD>';?> </TR> @@ -80,18 +80,18 @@ if ($opcion!=$op_alta){ <TR> <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:300">'.$solicitante.'</TD>'; + echo '<TD style="width:300px">'.$solicitante.'</TD>'; else - echo '<TD><INPUT class="formulariodatos" name=solicitante style="width:300" type=text value="'.$solicitante.'"></TD>'; + echo '<TD><INPUT class="formulariodatos" name=solicitante style="width:300px" type=text value="'.$solicitante.'"></TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> <TH align=center> <?php echo $TbMsg[8]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:300">'.$email.'</TD>'; + echo '<TD style="width:300px">'.$email.'</TD>'; else - echo '<TD><INPUT class="formulariodatos" name=email style="width:300" type=text value="'.$email.'"></TD>'; + echo '<TD><INPUT class="formulariodatos" name=email style="width:300px" type=text value="'.$email.'"></TD>'; ?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> @@ -153,7 +153,7 @@ if ($opcion!=$op_alta){ <TR> <TH align=center> <?php echo $TbMsg[16]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:300"><IMG src="'.$tbimg[$estado].'"> ('.$TbMsg[12+$estado].')</TD>'; + echo '<TD style="width:300px"><IMG src="'.$tbimg[$estado].'"> ('.$TbMsg[12+$estado].')</TD>'; else{ echo '<TD>'; echo '<INPUT name=xestado type=radio value="'.$RESERVA_CONFIRMADA.'"'; @@ -174,7 +174,7 @@ if ($opcion!=$op_alta){ </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[7]?> </TD> + <TH align=center> <?php echo $TbMsg[7]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.$comentarios.'</TD>'; else @@ -184,6 +184,7 @@ if ($opcion!=$op_alta){ <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> </TABLE> </FORM> +</DIV> <?php //________________________________________________________________________________________________________ include_once("../includes/opcionesbotonesop.php"); @@ -232,4 +233,3 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> diff --git a/admin/WebConsole/propiedades/propiedades_tareas.php b/admin/WebConsole/propiedades/propiedades_tareas.php index 8926e69c..c95b6e46 100644 --- a/admin/WebConsole/propiedades/propiedades_tareas.php +++ b/admin/WebConsole/propiedades/propiedades_tareas.php @@ -43,8 +43,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_tareas.js"></SCRIPT> @@ -60,19 +60,19 @@ if ($opcion!=$op_alta){ <INPUT type=hidden name=grupoid value=<?php echo $grupoid?>> <INPUT type=hidden name=idambito value=<?php echo $idambito?>> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos > <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[5]?> </TD> + <TH align=center> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:300">'.$descripcion.'</TD>'; + echo '<TD style="width:300px">'.$descripcion.'</TD>'; else - echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:300" type=text value="'.$descripcion.'"></TD>';?> + echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:300px" type=text value="'.$descripcion.'"></TD>';?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[6]?> </TD> + <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.$comentarios.'</TD>'; else @@ -81,7 +81,7 @@ if ($opcion!=$op_alta){ </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[7]?> </TD> + <TH align=center> <?php echo $TbMsg[7]?> </TH> <?php if ($opcion==$op_eliminacion){ $Mambitos[$AMBITO_CENTROS]=$TbMsg[10]; @@ -103,7 +103,7 @@ if ($opcion!=$op_alta){ </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[8]?> </TD> + <TH align=center> <?php echo $TbMsg[8]?> </TH> <?php if ($opcion==$op_eliminacion){ tomaDescriAmbito($cmd,$ambito,$idambito,$textambito); @@ -117,6 +117,7 @@ if ($opcion!=$op_alta){ <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> </TABLE> </FORM> +</DIV> <?php //________________________________________________________________________________________________________ include_once("../includes/opcionesbotonesop.php"); @@ -152,4 +153,3 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> diff --git a/admin/WebConsole/propiedades/propiedades_tipohardwares.php b/admin/WebConsole/propiedades/propiedades_tipohardwares.php index ede51000..d5b08f5a 100644 --- a/admin/WebConsole/propiedades/propiedades_tipohardwares.php +++ b/admin/WebConsole/propiedades/propiedades_tipohardwares.php @@ -40,8 +40,8 @@ if ($opcion!=$op_alta){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_tipohardwares.js"></SCRIPT> @@ -56,19 +56,19 @@ if ($opcion!=$op_alta){ <INPUT type=hidden name=idtipohardware value=<?php echo $idtipohardware?>> <INPUT type=hidden name=grupoid value=<?php echo $grupoid?>> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos > <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[5]?> </TD> + <TH align=center> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion) - echo '<TD style="width:300">'.$descripcion.'</TD>'; + echo '<TD style="width:30px">'.$descripcion.'</TD>'; else - echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:300" type=text value="'.$descripcion.'"></TD>';?> + echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:300px" type=text value="'.$descripcion.'"></TD>';?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[6]?> </TD> + <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD colspan=3>'.TomaDato($cmd,0,'iconos',basename($urlimg),'urlicono','urlicono',0).'</TD>'; @@ -76,10 +76,10 @@ if ($opcion!=$op_alta){ echo '<TD colspan=3>'.HTMLSELECT($cmd,0,'iconos',basename($urlimg),'urlicono','descripcion',250,"","","idtipoicono=1").'</TD>'; ?> </TR> - </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> </TABLE> </FORM> +</DIV> <?php //________________________________________________________________________________________________________ include_once("../includes/opcionesbotonesop.php"); @@ -111,4 +111,3 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> diff --git a/admin/WebConsole/propiedades/propiedades_universidades.php b/admin/WebConsole/propiedades/propiedades_universidades.php index 448f3cdc..07debf8d 100644 --- a/admin/WebConsole/propiedades/propiedades_universidades.php +++ b/admin/WebConsole/propiedades/propiedades_universidades.php @@ -41,8 +41,8 @@ else //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de universidades</TITLE> <HEAD> + <TITLE>Administración web de universidades</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/propiedades_universidades.js"></SCRIPT> @@ -55,16 +55,16 @@ else <INPUT type=hidden name=opcion value=<?php echo $opcion?>> <INPUT type=hidden name=iduniversidad value=<?php echo $iduniversidad?>> <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center ><?php echo $TbMsg[5]?> </TD> + <TH align=center ><?php echo $TbMsg[5]?> </TH> <?php echo '<TD colspan=3><INPUT class="formulariodatos" name=nombreuniversidad style="width:350" type=text value="'.$nombreuniversidad.'"></TD>';?> </TR> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> - <TH align=center> <?php echo $TbMsg[6]?> </TD> + <TH align=center> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion) echo '<TD>'.$comentarios.'</TD>'; else @@ -106,4 +106,3 @@ function TomaPropiedades($cmd,$id){ $rs->Cerrar(); return(true); } -?> diff --git a/admin/WebConsole/propiedades/propiedades_usuarios.php b/admin/WebConsole/propiedades/propiedades_usuarios.php index 05441502..8ea60d74 100644 --- a/admin/WebConsole/propiedades/propiedades_usuarios.php +++ b/admin/WebConsole/propiedades/propiedades_usuarios.php @@ -20,7 +20,8 @@ include_once("../idiomas/php/".$idioma."/propiedades_usuarios_".$idioma.".php"); $opcion=0; $opciones=array($TbMsg[0],$TbMsg[1],$TbMsg[2],$TbMsg[3]); //________________________________________________________________________________________________________ -$idusuario=0; +$litusu=""; +$idusuario=0; $usuario=""; $pasguor=""; $nombre=""; @@ -64,8 +65,8 @@ switch($idtipousuario){ //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/propiedades_usuarios.js"></SCRIPT> @@ -73,6 +74,7 @@ switch($idtipousuario){ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_usuarios_'.$idioma.'.js"></SCRIPT>'?> </HEAD> <BODY> +<div align="center"> <FORM name="fdatos" action="../gestores/gestor_usuarios.php" method="post"> <INPUT type=hidden name=opcion value=<?php echo $opcion?>> <INPUT type=hidden name=idusuario value=<?php echo $idusuario?>> @@ -80,15 +82,15 @@ switch($idtipousuario){ <INPUT type=hidden name=idambito value=<?php echo $idambito?>> <P align=center class=cabeceras><?php echo $TbMsg[4]." (".$litusu.")"?><BR> - <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> + <SPAN class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P> <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos> <!------------------------------------------------ NOMBRE USUARIO --------------------------------------------------------------------------------------------------> <TR> <TH> <?php echo $TbMsg[5]?> </TH> <?php if ($opcion==$op_eliminacion || $opcion==$op_modificacion && $idusuario==1){?> - <TD><INPUT type=hidden class=cajatexto name="usuario" style="width:100" value="<?php echo $usuario?>"></INPUT><?php echo $usuario?>  <IMG src="<?php echo $urlimg ?>"></TD> + <TD><INPUT type=hidden class=cajatexto name="usuario" style="width:100px" value="<?php echo $usuario?>"><?php echo $usuario?>  <IMG src="<?php echo $urlimg ?>"></TD> <?php }else{?> - <TD><INPUT type=text class=cajatexto name="usuario" style="width:100" value="<?php echo $usuario?>"> + <TD><INPUT type=text class=cajatexto name="usuario" style="width:100px" value="<?php echo $usuario?>"> <IMG src="<?php echo $urlimg ?>"> <?php }?> @@ -98,27 +100,27 @@ switch($idtipousuario){ <!-- disables autocomplete --><input type="password" style="display:none"> <TH> <?php echo $TbMsg[6]?> </TH> <?php if ($opcion==$op_eliminacion || $opcion==$op_modificacion && $idusuario==1){?> - <TD><INPUT type=hidden class=cajatexto name="pasguor" style="width:100" value=""></INPUT>****</TD> + <TD><INPUT type=hidden class=cajatexto name="pasguor" style="width:100px" value="">****</TD> <?php }else{?> - <TD><INPUT type=password class=cajatexto name="pasguor" style="width:100" value=""> + <TD><INPUT type=password class=cajatexto name="pasguor" style="width:100px" value=""> <?php }?> </TR> <!---------------------------------------------------- CONFIRMAR PASSWORD ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <TR> <TH> <?php echo $TbMsg[18]?> </TH> <?php if ($opcion==$op_eliminacion || $opcion==$op_modificacion && $idusuario==1){?> - <TD><INPUT type=hidden class=cajatexto name="confirmarpasguor" style="width:100" value=""></INPUT>****</TD> + <TD><INPUT type=hidden class=cajatexto name="confirmarpasguor" style="width:100px" value="">****</TD> <?php }else{?> - <TD><INPUT type=password class=cajatexto name="confirmarpasguor" style="width:100" value=""> + <TD><INPUT type=password class=cajatexto name="confirmarpasguor" style="width:100px" value=""> <?php }?> </TR> <!--------------------------------------------------- NOMBRE COMPLETO -----------------------------------------------------------------------------------------------> <TR> <TH> <?php echo $TbMsg[7]?> </TH> <?php if ($opcion==$op_eliminacion || ($opcion==$op_modificacion && $idusuario==1)){?> - <TD><INPUT type=hidden class=cajatexto name="nombre" style="width:250" value="<?php echo $nombre?>"></INPUT><?php echo $nombre?></TD> + <TD><INPUT type=hidden class=cajatexto name="nombre" style="width:250px" value="<?php echo $nombre?>"><?php echo $nombre?></TD> <?php }else{?> - <TD><INPUT type=text class=cajatexto name="nombre" style="width:250" value="<?php echo $nombre?>"> + <TD><INPUT type=text class=cajatexto name="nombre" style="width:250px" value="<?php echo $nombre?>"> <?php }?> </TR> <!--------------------------------------------------------------------------------------------------------------------------------------------------> @@ -127,7 +129,7 @@ switch($idtipousuario){ <?php if ($opcion==$op_eliminacion){?> <TD><?php echo $email?></TD> <?php }else{?> - <TD><INPUT type=text class=cajatexto name="email" style="width:250" value="<?php echo $email?>"> + <TD><INPUT type=text class=cajatexto name="email" style="width:250px" value="<?php echo $email?>"> <?php }?> </TR> <!---------------------------------------------------------------------------------------------------------------------------------------------------> @@ -157,8 +159,7 @@ switch($idtipousuario){ </TABLE> </FORM> -</DIV> - +</div> <?php if ($idusuario==1){ ///* @@ -216,4 +217,3 @@ function TomaPropiedades($cmd,$id){ else return(false); } -?> diff --git a/admin/WebConsole/rest/common.php b/admin/WebConsole/rest/common.php index bc39ced9..d26acc4b 100644 --- a/admin/WebConsole/rest/common.php +++ b/admin/WebConsole/rest/common.php @@ -248,6 +248,7 @@ $app->hook('slim.after', function() use ($app) { * @return JSON object with basic server information (version, services, etc.) */ $app->get('/info', function() { + $hasOglive = false; $response = new \stdClass; // Reading version file. $data = json_decode(@file_get_contents(VERSION_FILE)); @@ -293,4 +294,4 @@ $app->get('/status', function() { jsonResponse(200, $response); } ); -?> + diff --git a/admin/WebConsole/rest/index.php b/admin/WebConsole/rest/index.php index 46957ab6..aa7cd483 100644 --- a/admin/WebConsole/rest/index.php +++ b/admin/WebConsole/rest/index.php @@ -72,4 +72,4 @@ $app->get('/', // Execute REST using Slim. $app->run(); -?> + diff --git a/admin/WebConsole/rest/ogagent.php b/admin/WebConsole/rest/ogagent.php index 6b87b098..be62a8d0 100644 --- a/admin/WebConsole/rest/ogagent.php +++ b/admin/WebConsole/rest/ogagent.php @@ -32,6 +32,7 @@ function writeLog($message = "") { $app->post('/ogagent/started', function() use ($app) { global $cmd; + $secret = ""; $osType = $osVersion = "none"; try { // Reading POST parameters in JSON format. @@ -131,6 +132,7 @@ $app->post('/ogagent/stopped', $app->post('/ogagent/loggedin', function() use ($app) { global $cmd; + $osType = $osVersion = "none"; $redirto = Array(); $result = Array(); @@ -269,4 +271,4 @@ EOD; } ); -?> + diff --git a/admin/WebConsole/rest/remotepc.php b/admin/WebConsole/rest/remotepc.php index 4bf7b6b5..a0d4ea10 100644 --- a/admin/WebConsole/rest/remotepc.php +++ b/admin/WebConsole/rest/remotepc.php @@ -41,6 +41,7 @@ $app->post('/ous/:ouid/images/:imageid/reserve(/)', 'validateApiKey', global $userid; $response = Array(); $ogagent = Array(); + $repo = Array(); if ($app->settings['debug']) writeRemotepcLog($app->request()->getResourceUri(). ": Init."); @@ -83,14 +84,15 @@ $app->post('/ous/:ouid/images/:imageid/reserve(/)', 'validateApiKey', $cmd->texto = <<<EOD SELECT adm.idusuario, entornos.ipserveradm, entornos.portserveradm, ordenadores.idordenador, ordenadores.nombreordenador, ordenadores.ip, - ordenadores.mac, ordenadores.agentkey, ordenadores_particiones.numdisk, - ordenadores_particiones.numpar, aulas.idaula, aulas.idcentro + ordenadores.mac, ordenadores.agentkey, par.numdisk, par.numpar, + aulas.idaula, aulas.idcentro, repo.ip AS repoip, repo.apikey AS repokey FROM entornos, ordenadores JOIN aulas USING(idaula) RIGHT JOIN administradores_centros AS adm USING(idcentro) RIGHT JOIN usuarios USING(idusuario) - RIGHT JOIN ordenadores_particiones USING(idordenador) + RIGHT JOIN ordenadores_particiones AS par USING(idordenador) RIGHT JOIN imagenes USING(idimagen) + RIGHT JOIN repositorios AS repo ON repo.idrepositorio = ordenadores.idrepositorio LEFT JOIN remotepc ON remotepc.id=ordenadores.idordenador WHERE adm.idusuario = '$userid' AND aulas.idcentro = '$ouid' AND aulas.idaula LIKE '$labid' AND aulas.inremotepc = 1 @@ -116,6 +118,8 @@ EOD; $part = $rs->campos["numpar"]; $labid = $rs->campos["idaula"]; $ouid = $rs->campos["idcentro"]; + $repoip = $rs->campos["repoip"]; + $repokey = $rs->campos["repokey"]; // Check client's status. $ogagent[$clntip]['url'] = "https://$clntip:8000/opengnsys/status"; if ($app->settings['debug']) @@ -132,6 +136,16 @@ EOD; if ($app->settings['debug']) writeRemotepcLog($app->request()->getResourceUri(). "Send Boot command to ogAdmClient, ido=$clntid,iph=$clntip,mac=$clntmac."); sendCommand($serverip, $serverport, $reqframe, $values); + // Send WOL command to client repository. + $repo[$repoip]['url'] = "https://$repoip/opengnsys/rest/repository/poweron"; + $repo[$repoip]['header'] = Array("Authorization: ".$repokey); + $repo[$repoip]['post'] = '{"macs": ["'.$clntmac.'"], "ips": ["'.$clntip.'"]}'; + if ($app->settings['debug']) + writeRemotepcLog($app->request()->getResourceUri(). "Send Boot command to repo: repo=$repoip, ip=$clntip,mac=$clntmac."); + $result = multiRequest($repo); + // ... (check response) + //if ($result[$repoip]['code'] != 200) { + // ... } else { // Client is on, send a rieboot command to its OGAgent. $ogagent[$clntip]['url'] = "https://$clntip:8000/opengnsys/reboot"; @@ -551,4 +565,4 @@ EOD; } ); -?> + diff --git a/admin/WebConsole/rest/repository.php b/admin/WebConsole/rest/repository.php index 7ac6e88e..736cc1c2 100644 --- a/admin/WebConsole/rest/repository.php +++ b/admin/WebConsole/rest/repository.php @@ -10,6 +10,7 @@ * @date 2016-04-06 */ + // Auxiliar functions. /** * @brief Validate API key included in "Authorization" HTTP header. @@ -23,8 +24,8 @@ function validateRepositoryApiKey() { @$apikey = htmlspecialchars(function_exists('apache_request_headers') ? apache_request_headers()['Authorization'] : $_SERVER['HTTP_AUTHORIZATION']); if (isset($apikey)) { // fetch repository token from ogAdmRepo.cfg configuration file. - @$confFile = parse_ini_file('../../etc/ogAdmRepo.cfg', 'r'); - if ($confFile) { + @$confFile = parse_ini_file(__DIR__ . '/../../etc/ogAdmRepo.cfg', 'r'); + if (isset($confFile)) { if(@strcmp($apikey, $confFile['ApiToken']) == 0) { // Credentials OK. return true; @@ -184,32 +185,26 @@ $app->get('/repository/image(/:ouname)/:imagename(/)', 'validateRepositoryApiKey */ $app->post('/repository/poweron', 'validateRepositoryApiKey', function() use($app) { - // Debe venir el parametro macs en el post (objeto JSON con array de MACs) + // The macs parameter must come in the post (JSON object with array of MACs) $data = json_decode($app->request()->getBody()); - if(empty($data->macs)){ + if (empty($data->macs)) { // Print error message. $response['message'] = 'Required param macs not found'; jsonResponse(400, $response); - } - else{ - $strMacs = ""; - foreach($data->macs as $mac){ - $strMacs .= " ".$mac; - } - // Ejecutar comando wakeonlan, debe estar disponible en el sistema operativo - if(commandExist("wakeonlan")){ - $response["output"] = "Executing wakeonlan ".trim($strMacs)."\n"; - $response["output"] .= shell_exec("wakeonlan ".trim($strMacs)); - // Comprobar si el comando se ejecutórrectamente - jsonResponse(200, $response); - } - else{ + } else { + // Execute local wakeonlan command (may be installed) + if(commandExist("wakeonlan")) { + $strMacs = trim(implode(' ', $data->macs)); + $response["output"] = "Executing wakeonlan ".$strMacs."\n"; + $response["output"] .= shell_exec("wakeonlan ".$strMacs); + jsonResponse(200, $response); + } else { // Print error message. $response['message'] = 'Wakeonlan command not found in this repository'; jsonResponse(404, $response); } } + $app->stop(); } ); -?> diff --git a/admin/WebConsole/validacion/access_controller.php b/admin/WebConsole/validacion/access_controller.php index f0babd8a..7ed6c3fc 100644 --- a/admin/WebConsole/validacion/access_controller.php +++ b/admin/WebConsole/validacion/access_controller.php @@ -95,5 +95,5 @@ switch($action){ } /**/ -?> + diff --git a/admin/WebConsole/validacion/functions.php b/admin/WebConsole/validacion/functions.php index a4780fd1..102f1577 100644 --- a/admin/WebConsole/validacion/functions.php +++ b/admin/WebConsole/validacion/functions.php @@ -79,7 +79,7 @@ function GeneraMenu($rs,$tipo,$iph){ global $ITEMS_PUBLICOS; global $ITEMS_PRIVADOS; global $UrlPaginaIconos; - + $lit=''; $titulo=$rs->campos["titulo"]; $modalidad=$rs->campos["modalidad"]; $smodalidad=$rs->campos["smodalidad"]; @@ -120,7 +120,7 @@ function GeneraMenu($rs,$tipo,$iph){ $codeHTML.='<TD align=center> <A href="ejecutaritem.php?iph='.$iph.'&idt='.$idaccionmenu.'"> <IMG border=0 src="http://'.$UrlPaginaIconos.'/'.$urlicono.'" width=64></A></TD>'; - $codeHTML.='<TD style="font-family:Arial;color: #a71026;FONT-SIZE:14"> + $codeHTML.='<TD style="font-family:Arial,sans-serif;color: #a71026;FONT-SIZE:14px"> <A style="text-decoration:none" href="ejecutaritem.php?iph='.$iph.'&idt='.$idaccionmenu.'"> <span style="FONT-FAMILY: Verdana,Arial, Helvetica, sans-serif;FONT-SIZE: 12px;COLOR:#999999">'.$descripitem.'</span></A></TD>'; if($mod>1){ @@ -163,5 +163,4 @@ function GeneraMenu($rs,$tipo,$iph){ return($codeHTML); } -?> diff --git a/admin/WebConsole/validacion/html/close.php b/admin/WebConsole/validacion/html/close.php index a6b197b6..6f8fb44a 100644 --- a/admin/WebConsole/validacion/html/close.php +++ b/admin/WebConsole/validacion/html/close.php @@ -1,5 +1,5 @@ <?php session_start(); $_SESSION["validated"] = false; -?> + diff --git a/admin/WebConsole/validacion/html/validacion_ldap.php b/admin/WebConsole/validacion/html/validacion_ldap.php index 1929402a..5e18e7e2 100644 --- a/admin/WebConsole/validacion/html/validacion_ldap.php +++ b/admin/WebConsole/validacion/html/validacion_ldap.php @@ -29,7 +29,7 @@ function validate_user($user,$password){ $thedata = $info[0]["dn"]; if ($r=@ldap_bind($ds,$thedata,$password)){ $result['validation'] = 1; - // A parte de la validacion, se podran coger otros datos... + // A parte de la validacion, se podrían coger otros datos... /* $result['name'] = $info[0]["cn"][0]; $result['dni'] = $info[0]["uhuuserdni"][0]; @@ -50,7 +50,7 @@ function validate_user($user,$password){ } /** - * Sincroniza una base de datos externa con la de opengnsys. + * Sincroniza una base de datos externa con la de OpenGnsys. * No es necesaria su implementacion, puede dejarse en blanco */ function synchronize($validation){ @@ -71,5 +71,3 @@ function validate($VARS){ } return $result; } - -?> diff --git a/admin/WebConsole/validacion/html/validacion_prueba.php b/admin/WebConsole/validacion/html/validacion_prueba.php index 78ea208e..f98a1932 100644 --- a/admin/WebConsole/validacion/html/validacion_prueba.php +++ b/admin/WebConsole/validacion/html/validacion_prueba.php @@ -21,4 +21,4 @@ function validate($VARS){ return $result; } -?> + diff --git a/admin/WebConsole/validacion/html/validacion_template.php b/admin/WebConsole/validacion/html/validacion_template.php index 0ec37e30..171eb6d2 100644 --- a/admin/WebConsole/validacion/html/validacion_template.php +++ b/admin/WebConsole/validacion/html/validacion_template.php @@ -17,4 +17,4 @@ function validate($VARS){ return true; } -?> + diff --git a/admin/WebConsole/varios/acceso_operador.php b/admin/WebConsole/varios/acceso_operador.php index 79402878..c2c0cde4 100644 --- a/admin/WebConsole/varios/acceso_operador.php +++ b/admin/WebConsole/varios/acceso_operador.php @@ -8,7 +8,7 @@ // Descripción : Presenta la pantalla de login del operador // ************************************************************************************************************************************************* -session_start(); // Activa variables de sesi� +session_start(); // Activa variables de sesión $herror=0; @@ -31,11 +31,10 @@ $TbErr[2]="ERROR de conexión con el servidor de 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"> -</HEAD> +<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<TITLE>Administración web de aulas</TITLE> +<LINK rel="stylesheet" type="text/css" href="../estilos.css"> <SCRIPT LANGUAGE="JAVASCRIPT"> //________________________________________________________________________________________________________ function confirmar(){ @@ -44,12 +43,12 @@ function confirmar(){ } //________________________________________________________________________________________________________ function comprobar_datos(){ - if (document.fdatos.usu.value==""){ + if (document.fdatos.usu.value===""){ alert("Debe introducir un nombre de Usuario"); document.fdatos.usu.focus(); return(false) } - if (document.fdatos.pss.value==""){ + if (document.fdatos.pss.value===""){ alert("Debe introducir una contraseña"); document.fdatos.pss.focus(); return(false) @@ -67,20 +66,20 @@ function PulsaEnter(oEvento){ else return false; } - if (iAscii == 13) confirmar(); + if (iAscii === 13) confirmar(); return true; } //________________________________________________________________________________________________________ </SCRIPT> </HEAD> <BODY> -<DIV style="POSITION:absolute;top:20;left:150"> +<DIV style="POSITION:absolute;top:20px;left:150px"> <FORM action="accesoperadores.php" name="fdatos" method="post"> <DIV align="center"> <IMG src="../images/login_operador.png" width=500 > - <INPUT onkeypress="PulsaEnter(event)" name="usu" style="POSITION:absolute;top:125px;left:365px;width:90;height:20;COLOR: #999999; FONT-FAMILY: Verdana; FONT-SIZE: 12px;"> - <INPUT onkeypress="PulsaEnter(event)" name="pss" type="password" style="POSITION:absolute;top:160px;left:365;width:90;height:20;COLOR: #999999; FONT-FAMILY: Verdana; FONT-SIZE: 12px;"> - <IMG onclick="confirmar()" src="../images/botonok.png" style="POSITION:absolute;top:190;left:400;CURSOR: hand"> + <INPUT onkeypress="PulsaEnter(event)" name="usu" style="POSITION:absolute;top:125px;left:365px;width:90px;height:20px;COLOR: #999999; FONT-FAMILY: Verdana, sans-serif; FONT-SIZE: 12px;"> + <INPUT onkeypress="PulsaEnter(event)" name="pss" type="password" style="POSITION:absolute;top:160px;left:365px;width:90px;height:20px;COLOR: #999999; FONT-FAMILY: Verdana, sans-serif; FONT-SIZE: 12px;"> + <IMG onclick="confirmar()" src="../images/botonok.png" style="POSITION:absolute;top:190px;left:400px;CURSOR: hand"> </DIV> </FORM> </DIV> diff --git a/admin/WebConsole/varios/accionmenu.php b/admin/WebConsole/varios/accionmenu.php index fed455d0..3205350c 100644 --- a/admin/WebConsole/varios/accionmenu.php +++ b/admin/WebConsole/varios/accionmenu.php @@ -65,6 +65,7 @@ else{ // Viene de menus ?> <HTML> <HEAD> + <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/opciones.js"></SCRIPT> @@ -178,6 +179,7 @@ else function pintaMenus($cmd,$identificador,$tipoaccion,$op) { + global $pagerror; global $TbMsg; global $ITEM_PUBLICO; global $ITEM_PRIVADO; diff --git a/admin/WebConsole/varios/buscar.php b/admin/WebConsole/varios/buscar.php index 552e32b7..09c2e45c 100644 --- a/admin/WebConsole/varios/buscar.php +++ b/admin/WebConsole/varios/buscar.php @@ -142,8 +142,8 @@ if (!empty ($valor) or $criterio == "duplic" or $criterio == "profe" or $criteri //_________________________________ ?> <html> -<title>Administración web de aulas</title> <head> + <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 languaje="javascript"> @@ -154,7 +154,7 @@ function confirmar(){ } //_________________________________ function comprobar_datos(){ - if (document.fdatos.valor.value=="" && document.fdatos.criterio.value!="duplic" && document.fdatos.criterio.value!="profe" && document.fdatos.criterio.value!="norepo") { + if (document.fdatos.valor.value==="" && document.fdatos.criterio.value!=="duplic" && document.fdatos.criterio.value!="profe" && document.fdatos.criterio.value!=="norepo") { alert("<?php echo $TbMsg["SEARCH_NOVALUE"] ?>"); document.fdatos.valor.focus(); return(false) @@ -172,7 +172,7 @@ function PulsaEnter(oEvento){ else return false; } - if (iAscii == 13) confirmar(); + if (iAscii === 13) confirmar(); return true; } </script> @@ -186,7 +186,7 @@ if (!empty ($valor) or $criterio == "duplic" or $criterio == "profe" or $criteri echo '<p class="subcabeceras" align="center">'.$TbMsg["SEARCH_NOMATCHES"].'</p>'; } else { ?> -<div align="center" style="margin:20;"> +<div align="center" style="margin: 20px;"> <table class="tabla_listados"> <caption><?php echo $TbMsg["SEARCH_RESULTS"];?></caption> <tr> @@ -210,10 +210,10 @@ if (!empty ($valor) or $criterio == "duplic" or $criterio == "profe" or $criteri <hr width="50%"> <?php } ?> -<div align="center" style="margin:20;"> +<div align="center" style="margin: 20px;"> <form action="#" class="formulariodatos" name="fdatos" method="post"> <?php echo $TbMsg["SEARCH_CRITERIA"] ?>: - <select name="criterio" id="criterio" onchange="if (document.fdatos.criterio.value=='duplic' || document.fdatos.criterio.value=='profe' || document.fdatos.criterio.value=='norepo') document.fdatos.valor.disabled=true; else document.fdatos.valor.disabled=false"> + <select name="criterio" id="criterio" onchange="document.fdatos.valor.disabled=document.fdatos.criterio.value==='duplic' || document.fdatos.criterio.value=='profe' || document.fdatos.criterio.value==='norepo';"> <option value="nombre"> <?php echo $TbMsg["SEARCH_NAME"] ?> </option> <option value="ip"> <?php echo $TbMsg["SEARCH_IP"] ?> </option> <option value="mac"> <?php echo $TbMsg["SEARCH_MAC"] ?> </option> @@ -223,10 +223,9 @@ if (!empty ($valor) or $criterio == "duplic" or $criterio == "profe" or $criteri </select> <input type="text" name="valor" id="valor" size="20" /> <div align="center"> - <img onclick="confirmar()" src="../images/botonok.png" style="margin:20;cursor: hand" /> + <img onclick="confirmar()" src="../images/botonok.png" style="margin: 20px; cursor: hand" /> </div> </form> </div> </body> </html> - diff --git a/admin/WebConsole/varios/calendario_ventana.php b/admin/WebConsole/varios/calendario_ventana.php index b91c4e1d..070e4874 100644 --- a/admin/WebConsole/varios/calendario_ventana.php +++ b/admin/WebConsole/varios/calendario_ventana.php @@ -31,10 +31,10 @@ if (isset($_POST["anno_elegido"])) $anno_elegido=$_POST["anno_elegido"]; //_________________________________________________________________________________________________________ ?> <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"> +<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"> var rojo="#cc3366"; @@ -103,7 +103,7 @@ function mes_anterior(){ } } var swbi=0; - if (wanno%4==0 && wmes==2) swbi=1; + if (wanno%4===0 && wmes===2) swbi=1; document.forms.fdatos.dia_elegido.value=dias_meses[wmes]+swbi; document.forms.fdatos.mes_elegido.value=wmes; @@ -162,8 +162,8 @@ $mialmanaque=new Almanaque("tabla_meses"); echo '<TABLE align="center">'; echo ' <TR>'; echo ' <TD align="left"><img SRC="../images/iconos/salir_on.gif" onclick="cerrar_ventana()"></TD>'; -echo '<TD style="COLOR: MediumBlue;FONT-FAMILY: Arial, Helvetica, sans-serif;FONT-SIZE:12"> Año: '; -echo '<SELECT name="despleanno" onchange="elige_anno()" style="width:60">'; +echo '<TD style="COLOR: MediumBlue;FONT-FAMILY: Arial, Helvetica, sans-serif;FONT-SIZE:12px"> Año: '; +echo '<SELECT name="despleanno" onchange="elige_anno()" style="width:60px">'; for($i=2010;$i<2015;$i++){ echo '<OPTION value='.$i; if($anno_elegido==$i) echo" selected "; @@ -175,8 +175,8 @@ echo '</TR>'; echo '<table align=center border=0>'; echo '<tr>'; -echo '<td onclick="mes_anterior();" style="cursor:pointer;COLOR: MediumBlue;FONT-FAMILY: Arial, Helvetica, sans-serif;FONT-SIZE:10" align=left><<</td>'; -echo '<td onclick="mes_siguiente();" style="cursor:pointer;COLOR: MediumBlue;FONT-FAMILY: Arial, Helvetica, sans-serif;FONT-SIZE:10" align=right>>></td>'; +echo '<td onclick="mes_anterior();" style="cursor:pointer;COLOR: MediumBlue;FONT-FAMILY: Arial, Helvetica, sans-serif;FONT-SIZE:10px" align="left"><<</td>'; +echo '<td onclick="mes_siguiente();" style="cursor:pointer;COLOR: MediumBlue;FONT-FAMILY: Arial, Helvetica, sans-serif;FONT-SIZE:10px" align="right">>></td>'; echo '</tr>'; echo '<tr>'; echo '<td colspan=2 valign=top width=100>'.$mialmanaque->MesAnno($mes_elegido,$anno_elegido).'</td>'; diff --git a/admin/WebConsole/varios/consulta_programaciones.php b/admin/WebConsole/varios/consulta_programaciones.php index 9fce6c69..127dde3e 100644 --- a/admin/WebConsole/varios/consulta_programaciones.php +++ b/admin/WebConsole/varios/consulta_programaciones.php @@ -29,4 +29,4 @@ if ($rs->Abrir()){ // Error al abrir recordset echo $cadena_campos; } $rs->Cerrar(); -?> + diff --git a/admin/WebConsole/varios/desplegablesambitos.php b/admin/WebConsole/varios/desplegablesambitos.php index 6a174f9b..91a639ce 100644 --- a/admin/WebConsole/varios/desplegablesambitos.php +++ b/admin/WebConsole/varios/desplegablesambitos.php @@ -25,4 +25,3 @@ $cmd=CreaComando($cadenaconexion); // Crea objeto comando if ($cmd){ echo tomaSelectAmbito($cmd,$ambito,0,$idcentro,250); } -?>
\ No newline at end of file diff --git a/admin/WebConsole/varios/ejecutaritem.php b/admin/WebConsole/varios/ejecutaritem.php index ad3dbe48..fa431d17 100644 --- a/admin/WebConsole/varios/ejecutaritem.php +++ b/admin/WebConsole/varios/ejecutaritem.php @@ -58,4 +58,4 @@ switch($tipoaccion){ break; } die("HA HABIDO ALGÚN ERROR AL PROCESAR EL ITEM"); -?> + diff --git a/admin/WebConsole/varios/incluiracciones.php b/admin/WebConsole/varios/incluiracciones.php index 43cf1abe..b4f27bff 100644 --- a/admin/WebConsole/varios/incluiracciones.php +++ b/admin/WebConsole/varios/incluiracciones.php @@ -62,7 +62,8 @@ else{ // Viene de menus ?> <HTML> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> + <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/opciones.js"></SCRIPT> <SCRIPT language="javascript" src="../jscripts/accionmenu.js"></SCRIPT> @@ -184,6 +185,7 @@ function pintaMenus($cmd,$identificador,$tipoaccion,$op) global $descripcionaccion; global $EJECUCION_PROCEDIMIENTO; global $EJECUCION_TAREA; + $urlimg=""; // echo $cmd->texto; $idmenus=""; // Identificadores de menus para segunda consulta @@ -261,5 +263,3 @@ function pintaMenus($cmd,$identificador,$tipoaccion,$op) $rs->Cerrar(); return($idmenus); // retorna identificadores de menus implicados en la consulta } -?> - diff --git a/admin/WebConsole/varios/inclusionacciones.php b/admin/WebConsole/varios/inclusionacciones.php index 2f823445..6f7d9fab 100644 --- a/admin/WebConsole/varios/inclusionacciones.php +++ b/admin/WebConsole/varios/inclusionacciones.php @@ -1,282 +1,281 @@ -<?php
-//// ******************************************************************************************************
-// Aplicacin WEB: ogAdmWebCon
-// Autor: Jos Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
-// Fecha Creacin: Ao 2009-2010
-// Fecha ltima modificacin: Agosto-2010
-// Nombre del fichero: inclusionacciones.php
-// Descripcin :
-// Permite incorporar procedimientos y comandos a tareas y tareas ya existentes
-// *******************************************************************************************************
-include_once("../includes/ctrlacc.php");
-include_once("../clases/AdoPhp.php");
-include_once("../includes/CreaComando.php");
-include_once("../includes/constantes.php");
-include_once("../includes/comunes.php");
-include_once("../includes/TomaDato.php");
-include_once("../idiomas/php/".$idioma."/inclusionacciones_".$idioma.".php");
-//________________________________________________________________________________________________________
-
-$idtipoaccion=0;
-$tipoaccion=0;
-$descripcionaccion="";
-$ambito="";
-
-if (isset($_GET["idtipoaccion"])) $idtipoaccion=$_GET["idtipoaccion"];
-if (isset($_GET["tipoaccion"])) $tipoaccion=$_GET["tipoaccion"];
-if (isset($_GET["descripcionaccion"])) $descripcionaccion=$_GET["descripcionaccion"];
-if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
-
-//________________________________________________________________________________________________________
-
-$cmd=CreaComando($cadenaconexion); // Crea objeto comando
-if (!$cmd)
- Header('Location: '.$pagerror.'?herror=2'); // Error de conexin con servidor B.D.
-
-$tbParametros=CreaTablaParametros($cmd); // Crea tabla en memmoria para acceder a detalles de comandos
-//________________________________________________________________________________________________________
-?>
-<HTML>
- <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="../clases/jscripts/MenuContextual.js"></SCRIPT>
- <SCRIPT language="javascript" src="../jscripts/inclusionacciones.js"></SCRIPT>
- <SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
- <SCRIPT language="javascript" src="../jscripts/comunes.js"></SCRIPT>
- <SCRIPT language="javascript" src="../idiomas/javascripts/<?php echo $idioma?>/inclusionacciones_<?php echo $idioma?>.js"></SCRIPT>
- </HEAD>
- <BODY>
- <?php
- switch($tipoaccion){
- case $AMBITO_PROCEDIMIENTOS:
- $urlimg="../images/iconos/procedimiento.gif";
- $literal=$TbMsg[0];
- $litcab=$TbMsg[2];
- break;
- case $AMBITO_TAREAS:
- $urlimg="../images/iconos/tareas.gif";
- $literal=$TbMsg[1];
- $litcab=$TbMsg[3];
- break;
- }
- ?>
- <P align=center class=cabeceras><IMG src="../images/iconos/acciones.gif"> <?php echo $literal?><BR>
- <SPAN align=center class=subcabeceras><?php echo $descripcionaccion?></SPAN> <IMG src="<?php echo $urlimg?>"></P>
-
- <TABLE align=center border=0>
- <TR>
- <?php
- $conTR=0; // Contador de lineas (Identificadores de las filas)
- switch($tipoaccion){
- case $AMBITO_PROCEDIMIENTOS:
- $litmsg=$TbMsg[5];
- listaProcedientos($cmd,$idtipoaccion);
- break;
- case $AMBITO_TAREAS:
- $litmsg=$TbMsg[6];
- listaTareas($cmd,$idtipoaccion,$ambito);
- break;
- }
- ?>
- </TR>
- </TABLE>
- <FORM name="fdatos">
- <INPUT type="hidden" name="conTR" value="<?php echo $conTR?>">
- <INPUT type="hidden" name="tipoaccion" value="<?php echo $tipoaccion?>">
- <INPUT type="hidden" name="idtipoaccion" value="<?php echo $idtipoaccion?>">
- </FORM>
- </BODY>
-</HTML>
-<?php
-// *************************************************************************************************************************************************
- function listaProcedientos($cmd,$idprocedimiento)
- {
- global $AMBITO_PROCEDIMIENTOS;
- global $TbMsg;
-
- $cmd->texto="SELECT procedimientos_acciones.idprocedimientoaccion AS identificador, procedimientos_acciones.orden,
- procedimientos_acciones.parametros, procedimientos_acciones.procedimientoid,
- comandos.idcomando, comandos.descripcion AS comando,
- procedimientostemp.descripcion AS procedimiento
- FROM procedimientos
- INNER JOIN procedimientos_acciones ON procedimientos_acciones.idprocedimiento=procedimientos.idprocedimiento
- LEFT OUTER JOIN comandos ON comandos.idcomando=procedimientos_acciones.idcomando
- LEFT OUTER JOIN procedimientos AS procedimientostemp
- ON procedimientostemp.idprocedimiento=procedimientos_acciones.procedimientoid
- WHERE procedimientos.idprocedimiento=".$idprocedimiento."
- ORDER BY procedimientos_acciones.orden";
-
- $idprocedimientos=escribeAcciones($cmd,$AMBITO_PROCEDIMIENTOS,true,7);
-
- $idprocedimientos=$idprocedimiento; // Excluye slo a l para evitar dead-lock
- $cmd->texto="SELECT idprocedimiento AS identificador, 0 AS orden, 0 AS idcomando, descripcion AS procedimiento
- FROM procedimientos
- WHERE idprocedimiento NOT IN (".$idprocedimientos.")
- ORDER BY descripcion";
-
- escribeAcciones($cmd,$AMBITO_PROCEDIMIENTOS,false,8);
- }
-// *************************************************************************************************************************************************
- function listaTareas($cmd,$idtarea,$ambito)
- {
- global $AMBITO_PROCEDIMIENTOS;
- global $AMBITO_TAREAS;
- global $AMBITO_TAREAS;
- global $TbMsg;
-
- /* Contenido de tarea */
- $cmd->texto="SELECT tareas.ambito, tareas.idambito, tareas_acciones.idtareaaccion AS identificador,
- tareas_acciones.orden, tareas_acciones.tareaid, procedimientos.idprocedimiento,
- procedimientos.descripcion AS procedimiento, tareastemp.descripcion AS tarea
- FROM tareas
- INNER JOIN tareas_acciones ON tareas_acciones.idtarea=tareas.idtarea
- LEFT OUTER JOIN procedimientos ON procedimientos.idprocedimiento=tareas_acciones.idprocedimiento
- LEFT OUTER JOIN tareas AS tareastemp
- ON tareastemp.idtarea=tareas_acciones.tareaid
- WHERE tareas.idtarea=".$idtarea."
- ORDER BY tareas_acciones.orden";
-
- $idtareas=escribeAcciones($cmd,$AMBITO_TAREAS,true,7);
-
- /* Procedimientos disponibles */
- if(!empty($ambito)){
- $cmd->texto="SELECT idprocedimiento AS identificador, 0 AS orden, 0 AS idcomando, descripcion AS procedimiento
- FROM procedimientos
- ORDER BY descripcion";
-
- escribeAcciones($cmd,$AMBITO_PROCEDIMIENTOS,false,8);
- }
-
- /* Tareas disponibles */
- $idtareas=$idtarea; // Excluye slo a ella para evitar dead-lock
- $cmd->texto="SELECT idtarea AS identificador, 0 AS orden, 0 AS idprocedimiento, descripcion AS tarea
- FROM tareas
- WHERE idtarea NOT IN (".$idtareas.")
- ORDER BY descripcion";
- escribeAcciones($cmd,$AMBITO_TAREAS,false,9);
- }
-//________________________________________________________________________________________________________
-
- function escribeAcciones($cmd,$tipoaccion,$sw,$imsg)
- {
- global $AMBITO_PROCEDIMIENTOS;
- global $AMBITO_TAREAS;
- global $AMBITO_COMANDOS;
- global $conTR;
- global $TbMsg;
-
- $rs=new Recordset;
- $rs->Comando=&$cmd;
- if (!$rs->Abrir()) return("");
-
- $idacciones="";
-
- echo '<TD valign=top>';
- if($rs->EOF && !$sw){
- echo '</P></TD>';
- return;
- }
-
- echo '<P align=center><SPAN class=presentaciones><B>'.$TbMsg[$imsg].'</B></SPAN></BR>';
- echo ' <TABLE align=center class="tabla_listados" cellspacing=1 cellpadding=0>';
- escribeCabecera();
- while (!$rs->EOF){
- echo '<TR id="TR-'.$conTR.'" value="'.$rs->campos["identificador"].'">';
- $conTR++;
- echo '<TD align=center><INPUT type=checkbox';
- if($sw)
- echo ' value="1" checked '; // Lo marca como seleccionado (1. ronda)
- else
- echo ' value="0"';
- echo '></TD>';
- echo '<TD align=center ><INPUT class="formulariodatos" style="WIDTH:30px"
- type="text" value="'.$rs->campos["orden"].'" id="'.$rs->campos["orden"].'"></TD>';
-
- // Descripcion de la accin
- switch($tipoaccion){
- case $AMBITO_PROCEDIMIENTOS:
- if(!empty($rs->campos["idcomando"])){
- $urlimg="../images/iconos/comandos.gif";
- $accion=$rs->campos["comando"];
- $value=$AMBITO_COMANDOS;
- }
- else{
- $urlimg="../images/iconos/procedimiento.gif";
- $accion=$rs->campos["procedimiento"];
- $value=$AMBITO_PROCEDIMIENTOS;
- }
- break;
- case $AMBITO_TAREAS:
- if(!empty($rs->campos["idprocedimiento"])){
- $urlimg="../images/iconos/procedimiento.gif";
- $accion=$rs->campos["procedimiento"];
- $value=$AMBITO_PROCEDIMIENTOS;
- }
- else{
- $urlimg="../images/iconos/tareas.gif";
- $accion=$rs->campos["tarea"];
- $value=$AMBITO_TAREAS;
- }
- break;
- }
- echo '<TD align=center><IMG style="cursor:pointer" src="'.$urlimg.'" value="'.$value.'"></TD>';
- echo '<TD>'.$accion.'</TD>';
- // Orden del item del item
- echo '</TR>';
-
- /* Muestra parmetros de los comandos (Se hace en Informacin)
- if($tipoaccion==$AMBITO_PROCEDIMIENTOS){
- if(!empty($rs->campos["idcomando"])){ // Se trata de un comando, se muestran parmetros)
- $htmlprm=escribeParametros($rs->campos["parametros"]);
- if(!empty($htmlprm)){
- echo '<TR>';
- echo '<TD> </TD>';
- echo '<TD colspan=3>'.escribeParametros($rs->campos["parametros"]).'</TD>';
- }
- }
- }
- */
- $rs->Siguiente();
- }
- echo '</TABLE>';
- if($sw) escribePie();
- echo '</P></TD>';
- $rs->Cerrar();
- $idacciones.="0"; // Para evitar el ltimo ";"
- return($idacciones);
- }
-//________________________________________________________________________________________________________
-
- function escribeCabecera()
- {
- global $TbMsg;
- global $litcab;
-
- echo '<TR height=20>
- <TH> </TH>
- <TH> '.$TbMsg[4].' </TH>
- <TH>T</TH>
- <TH> '.$litcab.'</TH>
- </TR>';
- }
-//________________________________________________________________________________________________________
-
- function escribePie()
- {
- global $litmsg;
- global $op;
-
- echo '<BR><TABLE align=center>
- <TR>
- <TD><A href="#botones"><IMG border=0 src="../images/boton_confirmar.gif"
- onclick="confirmar('.$op.');"></A></TD>
- </TR>
- </TABLE>
- <BR>
- <DIV id="Layer_nota" align=center>
- <SPAN align=center class=notas><I>'.$litmsg.'</I></SPAN>
- </DIV>';
- }
-?>
-
+<?php +//// ****************************************************************************************************** +// Aplicación WEB: ogAdmWebCon +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: Año 2009-2010 +// Fecha última modificación: Agosto-2010 +// Nombre del fichero: inclusionacciones.php +// Descripción: +// Permite incorporar procedimientos y comandos a tareas y tareas ya existentes +// ******************************************************************************************************* +include_once("../includes/ctrlacc.php"); +include_once("../clases/AdoPhp.php"); +include_once("../includes/CreaComando.php"); +include_once("../includes/constantes.php"); +include_once("../includes/comunes.php"); +include_once("../includes/TomaDato.php"); +include_once("../idiomas/php/".$idioma."/inclusionacciones_".$idioma.".php"); +//________________________________________________________________________________________________________ + +$idtipoaccion=0; +$tipoaccion=0; +$descripcionaccion=""; +$ambito=""; + +if (isset($_GET["idtipoaccion"])) $idtipoaccion=$_GET["idtipoaccion"]; +if (isset($_GET["tipoaccion"])) $tipoaccion=$_GET["tipoaccion"]; +if (isset($_GET["descripcionaccion"])) $descripcionaccion=$_GET["descripcionaccion"]; +if (isset($_GET["ambito"])) $ambito=$_GET["ambito"]; + +//________________________________________________________________________________________________________ + +$cmd=CreaComando($cadenaconexion); // Crea objeto comando +if (!$cmd) + Header('Location: '.$pagerror.'?herror=2'); // Error de conexi�n con servidor B.D. + +$tbParametros=CreaTablaParametros($cmd); // Crea tabla en memmoria para acceder a detalles de comandos +//________________________________________________________________________________________________________ +?> +<HTML> + <HEAD> + <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="../clases/jscripts/MenuContextual.js"></SCRIPT> + <SCRIPT language="javascript" src="../jscripts/inclusionacciones.js"></SCRIPT> + <SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT> + <SCRIPT language="javascript" src="../jscripts/comunes.js"></SCRIPT> + <SCRIPT language="javascript" src="../idiomas/javascripts/<?php echo $idioma?>/inclusionacciones_<?php echo $idioma?>.js"></SCRIPT> + </HEAD> + <BODY> + <?php + switch($tipoaccion){ + case $AMBITO_PROCEDIMIENTOS: + $urlimg="../images/iconos/procedimiento.gif"; + $literal=$TbMsg[0]; + $litcab=$TbMsg[2]; + break; + case $AMBITO_TAREAS: + $urlimg="../images/iconos/tareas.gif"; + $literal=$TbMsg[1]; + $litcab=$TbMsg[3]; + break; + } + ?> + <P align=center class=cabeceras><IMG src="../images/iconos/acciones.gif"> <?php echo $literal?><BR> + <SPAN class=subcabeceras><?php echo $descripcionaccion?></SPAN> <IMG src="<?php echo $urlimg?>"></P> + + <TABLE align=center border=0> + <TR> + <?php + $conTR=0; // Contador de líneas (Identificadores de las filas) + switch($tipoaccion){ + case $AMBITO_PROCEDIMIENTOS: + $litmsg=$TbMsg[5]; + listaProcedientos($cmd,$idtipoaccion); + break; + case $AMBITO_TAREAS: + $litmsg=$TbMsg[6]; + listaTareas($cmd,$idtipoaccion,$ambito); + break; + } + ?> + </TR> + </TABLE> + <FORM name="fdatos"> + <INPUT type="hidden" name="conTR" value="<?php echo $conTR?>"> + <INPUT type="hidden" name="tipoaccion" value="<?php echo $tipoaccion?>"> + <INPUT type="hidden" name="idtipoaccion" value="<?php echo $idtipoaccion?>"> + </FORM> + </BODY> +</HTML> +<?php +// ************************************************************************************************************************************************* + function listaProcedientos($cmd,$idprocedimiento) + { + global $AMBITO_PROCEDIMIENTOS; + global $TbMsg; + + $cmd->texto="SELECT procedimientos_acciones.idprocedimientoaccion AS identificador, procedimientos_acciones.orden, + procedimientos_acciones.parametros, procedimientos_acciones.procedimientoid, + comandos.idcomando, comandos.descripcion AS comando, + procedimientostemp.descripcion AS procedimiento + FROM procedimientos + INNER JOIN procedimientos_acciones ON procedimientos_acciones.idprocedimiento=procedimientos.idprocedimiento + LEFT OUTER JOIN comandos ON comandos.idcomando=procedimientos_acciones.idcomando + LEFT OUTER JOIN procedimientos AS procedimientostemp + ON procedimientostemp.idprocedimiento=procedimientos_acciones.procedimientoid + WHERE procedimientos.idprocedimiento=".$idprocedimiento." + ORDER BY procedimientos_acciones.orden"; + + $idprocedimientos=escribeAcciones($cmd,$AMBITO_PROCEDIMIENTOS,true,7); + + $idprocedimientos=$idprocedimiento; // Excluye sólo a él para evitar dead-lock + $cmd->texto="SELECT idprocedimiento AS identificador, 0 AS orden, 0 AS idcomando, descripcion AS procedimiento + FROM procedimientos + WHERE idprocedimiento NOT IN (".$idprocedimientos.") + ORDER BY descripcion"; + + escribeAcciones($cmd,$AMBITO_PROCEDIMIENTOS,false,8); + } +// ************************************************************************************************************************************************* + function listaTareas($cmd,$idtarea,$ambito) + { + global $AMBITO_PROCEDIMIENTOS; + global $AMBITO_TAREAS; + global $AMBITO_TAREAS; + global $TbMsg; + + /* Contenido de tarea */ + $cmd->texto="SELECT tareas.ambito, tareas.idambito, tareas_acciones.idtareaaccion AS identificador, + tareas_acciones.orden, tareas_acciones.tareaid, procedimientos.idprocedimiento, + procedimientos.descripcion AS procedimiento, tareastemp.descripcion AS tarea + FROM tareas + INNER JOIN tareas_acciones ON tareas_acciones.idtarea=tareas.idtarea + LEFT OUTER JOIN procedimientos ON procedimientos.idprocedimiento=tareas_acciones.idprocedimiento + LEFT OUTER JOIN tareas AS tareastemp + ON tareastemp.idtarea=tareas_acciones.tareaid + WHERE tareas.idtarea=".$idtarea." + ORDER BY tareas_acciones.orden"; + + $idtareas=escribeAcciones($cmd,$AMBITO_TAREAS,true,7); + + /* Procedimientos disponibles */ + if(!empty($ambito)){ + $cmd->texto="SELECT idprocedimiento AS identificador, 0 AS orden, 0 AS idcomando, descripcion AS procedimiento + FROM procedimientos + ORDER BY descripcion"; + + escribeAcciones($cmd,$AMBITO_PROCEDIMIENTOS,false,8); + } + + /* Tareas disponibles */ + $idtareas=$idtarea; // Excluye s�lo a ella para evitar dead-lock + $cmd->texto="SELECT idtarea AS identificador, 0 AS orden, 0 AS idprocedimiento, descripcion AS tarea + FROM tareas + WHERE idtarea NOT IN (".$idtareas.") + ORDER BY descripcion"; + escribeAcciones($cmd,$AMBITO_TAREAS,false,9); + } +//________________________________________________________________________________________________________ + + function escribeAcciones($cmd,$tipoaccion,$sw,$imsg) + { + global $AMBITO_PROCEDIMIENTOS; + global $AMBITO_TAREAS; + global $AMBITO_COMANDOS; + global $conTR; + global $TbMsg; + + $rs=new Recordset; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) return(""); + + $idacciones=""; + + echo '<TD valign=top>'; + if($rs->EOF && !$sw){ + echo '</P></TD>'; + return; + } + + echo '<P align=center><SPAN class=presentaciones><B>'.$TbMsg[$imsg].'</B></SPAN></BR>'; + echo ' <TABLE align=center class="tabla_listados" cellspacing=1 cellpadding=0>'; + escribeCabecera(); + while (!$rs->EOF){ + echo '<TR id="TR-'.$conTR.'" value="'.$rs->campos["identificador"].'">'; + $conTR++; + echo '<TD align=center><INPUT type=checkbox'; + if($sw) + echo ' value="1" checked '; // Lo marca como seleccionado (1�. ronda) + else + echo ' value="0"'; + echo '></TD>'; + echo '<TD align=center ><INPUT class="formulariodatos" style="WIDTH:30px" + type="text" value="'.$rs->campos["orden"].'" id="'.$rs->campos["orden"].'"></TD>'; + + // Descripcion de la acci�n + switch($tipoaccion){ + case $AMBITO_PROCEDIMIENTOS: + if(!empty($rs->campos["idcomando"])){ + $urlimg="../images/iconos/comandos.gif"; + $accion=$rs->campos["comando"]; + $value=$AMBITO_COMANDOS; + } + else{ + $urlimg="../images/iconos/procedimiento.gif"; + $accion=$rs->campos["procedimiento"]; + $value=$AMBITO_PROCEDIMIENTOS; + } + break; + case $AMBITO_TAREAS: + if(!empty($rs->campos["idprocedimiento"])){ + $urlimg="../images/iconos/procedimiento.gif"; + $accion=$rs->campos["procedimiento"]; + $value=$AMBITO_PROCEDIMIENTOS; + } + else{ + $urlimg="../images/iconos/tareas.gif"; + $accion=$rs->campos["tarea"]; + $value=$AMBITO_TAREAS; + } + break; + } + echo '<TD align=center><IMG style="cursor:pointer" src="'.$urlimg.'" value="'.$value.'"></TD>'; + echo '<TD>'.$accion.'</TD>'; + // Orden del item del item + echo '</TR>'; + + /* Muestra parámetros de los comandos (Se hace en Información) + if($tipoaccion==$AMBITO_PROCEDIMIENTOS){ + if(!empty($rs->campos["idcomando"])){ // Se trata de un comando, se muestran par�metros) + $htmlprm=escribeParametros($rs->campos["parametros"]); + if(!empty($htmlprm)){ + echo '<TR>'; + echo '<TD> </TD>'; + echo '<TD colspan=3>'.escribeParametros($rs->campos["parametros"]).'</TD>'; + } + } + } + */ + $rs->Siguiente(); + } + echo '</TABLE>'; + if($sw) escribePie(); + echo '</P></TD>'; + $rs->Cerrar(); + $idacciones.="0"; // Para evitar el último ";" + return($idacciones); + } +//________________________________________________________________________________________________________ + + function escribeCabecera() + { + global $TbMsg; + global $litcab; + + echo '<TR height=20> + <TH> </TH> + <TH> '.$TbMsg[4].' </TH> + <TH>T</TH> + <TH> '.$litcab.'</TH> + </TR>'; + } +//________________________________________________________________________________________________________ + + function escribePie() + { + global $litmsg; + global $op; + + echo '<BR><TABLE align=center> + <TR> + <TD><A href="#botones"><IMG border=0 src="../images/boton_confirmar.gif" + onclick="confirmar('.$op.');"></A></TD> + </TR> + </TABLE> + <BR> + <DIV id="Layer_nota" align=center> + <SPAN align=center class=notas><I>'.$litmsg.'</I></SPAN> + </DIV>'; + } diff --git a/admin/WebConsole/varios/incorporaordenadores.php b/admin/WebConsole/varios/incorporaordenadores.php index 2615fbad..63caca6a 100644 --- a/admin/WebConsole/varios/incorporaordenadores.php +++ b/admin/WebConsole/varios/incorporaordenadores.php @@ -90,7 +90,7 @@ if(!empty($contenido)){ // Se ha introducido contenido en lugar de fichero <?php //________________________________________________________________________________________________________ // Mensaje con el resultado del proceso -echo '<SCRIPT LANGUAGE="javascript">'; +echo '<SCRIPT>'; if (!empty($resul)) echo " alert('".$TbMsg[$resul]."');"; if (!empty($ordDup)) @@ -193,8 +193,7 @@ function Inserta($cmd,$idaula,$nombre,$lamac,$laip) // Crear fichero de arranque PXE con plantilla por defecto. if ($resul) { - $idordenador=$cmd->Autonumerico(); - createBootMode ($cmd, "", $idordenador, $idioma); + createBootMode ($cmd, "", $nombreordenador, $idioma); } return($resul); } diff --git a/admin/WebConsole/varios/incrementalcomponente_soft.php b/admin/WebConsole/varios/incrementalcomponente_soft.php index bf3214da..cc6c4fed 100644 --- a/admin/WebConsole/varios/incrementalcomponente_soft.php +++ b/admin/WebConsole/varios/incrementalcomponente_soft.php @@ -25,7 +25,8 @@ if (!$cmd) ?> <HTML> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<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/incrementalcomponente_soft.js"></SCRIPT> <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT> @@ -36,10 +37,10 @@ if (!$cmd) <INPUT type=hidden value="<?php echo $idcentro?>" id=idcentro> <INPUT type=hidden value="<?php echo $idsoftincremental?>" id=idsoftincremental> <P align=center class=cabeceras><?php echo $TbMsg[0]?><BR> - <SPAN align=center class=subcabeceras><?php echo $TbMsg[1]?></SPAN> <IMG src="../images/iconos/confisoft.gif"></P> + <SPAN class=subcabeceras><?php echo $TbMsg[1]?></SPAN> <IMG src="../images/iconos/confisoft.gif"></P> <BR> <DIV align=center id="Layer_componentes"> - <SPAN align=center class=presentaciones><B><U><?php echo $TbMsg[2]?></U>: <?php echo $descripcionincremental?></B></SPAN></P> + <SPAN class=presentaciones><B><U><?php echo $TbMsg[2]?></U>: <?php echo $descripcionincremental?></B></SPAN></P> <TABLE width="100%" class="tabla_listados" cellspacing=1 cellpadding=0 > <TR> <TH> </TH> @@ -57,7 +58,7 @@ if (!$cmd) while (!$rs->EOF){ echo '<TR>'; echo '<TD align=center width="10%" ><INPUT type=checkbox onclick="gestion_componente('.$rs->campos["idsoftware"].',this)" checked ></INPUT></TD>'; - echo '<TD align=center width="10%" ><img alt="'. $rs->campos["hdescripcion"].'"src="'.$rs->campos["urlimg"].'"></TD>'; + echo '<TD align=center width="10%" ><img alt="'. $rs->campos["hdescripcion"].'" src="'.$rs->campos["urlimg"].'"></TD>'; echo '<TD width="80%" > '.$rs->campos["descripcion"].'</TD>'; echo '</TR>'; $strex.= $A_W."softwares.idsoftware<>".$rs->campos["idsoftware"]; diff --git a/admin/WebConsole/varios/informacion_imagenes.php b/admin/WebConsole/varios/informacion_imagenes.php index 8f43725a..0c3a52d4 100644 --- a/admin/WebConsole/varios/informacion_imagenes.php +++ b/admin/WebConsole/varios/informacion_imagenes.php @@ -49,12 +49,11 @@ $arbol=new ArbolVistaXml($arbolXML,0,$baseurlimg,$clasedefault,1,20,130,1,$titul </BODY> </HTML> <?php -/************************************************************************************************************************************************** - Devuelve una cadena con formato XML de toda la información de las imagenes - Parametros: - - cmd:Una comando ya operativo ( con conexiónabierta) - - idimagen: El identificador del perfil hardware -________________________________________________________________________________________________________*/ +/** + * @param Comando $cmd Comando ya operativo (con conexión abierta) + * @param integer $idimagen Identificador del perfil hardware + * @return string Cadena en formato XML con toda la información de las imágenes_____ + */ function CreaArbol($cmd,$idimagen){ $cadenaXML=SubarbolXML_Imagenes($cmd,$idimagen); return($cadenaXML); diff --git a/admin/WebConsole/varios/informacion_tareas.php b/admin/WebConsole/varios/informacion_tareas.php index 58b3c491..63adf78d 100644 --- a/admin/WebConsole/varios/informacion_tareas.php +++ b/admin/WebConsole/varios/informacion_tareas.php @@ -24,10 +24,10 @@ if (isset($_GET["descripciontarea"])) $descripciontarea=$_GET["descripciontarea" //________________________________________________________________________________________________________ ?> <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"> +<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"> </HEAD> <BODY> <?php @@ -67,7 +67,7 @@ function pintacomandos($cmd,$idtareacomando){ $cmd->texto.=" INNER JOIN comandos ON comandos.idcomando=tareas_comandos.idcomando"; $cmd->texto.=" WHERE tareas_comandos.idtareacomando=".$idtareacomando; $rs->Comando=&$cmd; - if (!$rs->Abrir()) return($cadenaXML); // Error al abrir recordset + if (!$rs->Abrir()) return(""); // Error al abrir recordset if ($rs->EOF) return(""); $HTMLparametros='<TABLE class="tabla_parametros" align=center border=0 cellspacing=1 cellpadding=0 width="90%">'.chr(13); @@ -78,6 +78,7 @@ function pintacomandos($cmd,$idtareacomando){ $textambito=""; $urlimg=""; + $nombre=""; switch($rs->campos["ambito"]){ case $AMBITO_CENTROS : @@ -109,7 +110,7 @@ function pintacomandos($cmd,$idtareacomando){ $HTMLparametros.= '<TD> '.$TbMsg[3].' </TD>'.chr(13); $HTMLparametros.= '<TD> '.$textambito.' '; $HTMLparametros.= '<IMG src="'.$urlimg.'"> </TD>'.chr(13); - $HTMLparametros.= '</TR><TR>'; + $HTMLparametros.= '</TR><TR>'; $HTMLparametros.= '<TD> '.$TbMsg[4].' </TD>'.chr(13); $HTMLparametros.= '<TD> '.$nombre.' </TD>'.chr(13); $HTMLparametros.= '</TR>'; diff --git a/admin/WebConsole/varios/menubrowser.php b/admin/WebConsole/varios/menubrowser.php index c5878939..03465c64 100644 --- a/admin/WebConsole/varios/menubrowser.php +++ b/admin/WebConsole/varios/menubrowser.php @@ -16,12 +16,11 @@ if(!empty($iph)){ } ?> <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"> -</HEAD> -<SCRIPT LANGUAGE="JAVASCRIPT"> + <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"> //________________________________________________________________________________________________________ function confirmar(){ if (comprobar_datos()) @@ -29,12 +28,12 @@ function confirmar(){ } //________________________________________________________________________________________________________ function comprobar_datos(){ - if (document.fdatos.usu.value==""){ + if (document.fdatos.usu.value===""){ alert("Debe introducir un nombre de Usuario"); document.fdatos.usu.focus(); return(false) } - if (document.fdatos.pss.value==""){ + if (document.fdatos.pss.value===""){ alert("Debe introducir una contraseña"); document.fdatos.pss.focus(); return(false) @@ -52,15 +51,15 @@ function PulsaEnter(oEvento){ else return false; } - if (iAscii == 13) confirmar(); + if (iAscii === 13) confirmar(); return true; } //________________________________________________________________________________________________________ -</SCRIPT> + </SCRIPT> </HEAD> <BODY> -<DIV style="POSITION:absolute;top:20;left:150"> - <FORM action="controlacceso.php" name="fdatos" method="post"></FORM> +<DIV style="POSITION:absolute;top:20px;left:150px"> + <FORM action="../controlacceso.php" name="fdatos" method="post"></FORM> </DIV> </BODY> </HTML> @@ -81,4 +80,3 @@ function tomaIP(){ return($ipcliente); } -?> diff --git a/admin/WebConsole/varios/menucliente.php b/admin/WebConsole/varios/menucliente.php index 06cd6816..b1c07c94 100644 --- a/admin/WebConsole/varios/menucliente.php +++ b/admin/WebConsole/varios/menucliente.php @@ -45,6 +45,7 @@ else{ $UrlPagina=$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; // Url página $UrlPagina=dirname($UrlPagina); $UrlPaginaIconos=dirname($UrlPagina)."/images/iconos"; + $codeHtml=""; //________________________________________________________________________________________________________ //agp $nombre_archivo = "/opt/opengnsys/log/clients/".$iph.".cache.txt"; diff --git a/admin/WebConsole/varios/msgbrowser.php b/admin/WebConsole/varios/msgbrowser.php index 8a89757a..9add7b33 100644 --- a/admin/WebConsole/varios/msgbrowser.php +++ b/admin/WebConsole/varios/msgbrowser.php @@ -23,16 +23,13 @@ else $mensaje=$TbMsg[$idx]; ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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"> - - </SCRIPT> <STYLE TYPE="text/css"> - .deepsea, .deepsea TD, .deepsea TH + .deepsea TD, .deepsea TH { background-color:#026afe; color:#FFFFFF; @@ -65,11 +62,11 @@ else <BODY> <?php if(empty($idx) && empty($msg)) { - // No hay operaciones realizandose + // No hay operaciones realizándose echo '<BR><BR><BR><BR><BR>'; echo '<TABLE cellspacing=0 cellpadding=2 align=center border=0>'; echo '<TR><TD align=center><IMG border=0 src="../images/iconos/logoopengnsys.png"></TD></TR>'; - echo '<TR><TD align=center><SPAN style="COLOR: #999999;FONT-FAMILY: Arial;FONT-SIZE: 12px;">Iniciando...</TD></TR>'; + echo '<TR><TD align=center><SPAN style="COLOR: #999999;FONT-FAMILY: Arial, sans-serif; FONT-SIZE: 12px;">Iniciando...</TD></TR>'; echo '</TR>'; echo '</TABLE>'; } @@ -79,7 +76,7 @@ else{ echo '<h1>' . $TbMsg[24] . ' </h1>'; echo '<BR><BR><BR>'; echo '<TABLE cellspacing=0 cellpadding=2 align=center border=0>'; - echo '<TR><TD align=center class="tdbarra">Opengnsys Browser Message</TD><TR>'; + echo '<TR><TD align=center class="tdbarra">OpenGnsys Browser Message</TD><TR>'; echo '<TR><TD class="tdclien" valign=center > '.$mensaje.' </TD></TR>'; echo '</TABLE>'; } diff --git a/admin/WebConsole/varios/perfilcomponente_hard.php b/admin/WebConsole/varios/perfilcomponente_hard.php index e1a8f4ae..82ea1d55 100644 --- a/admin/WebConsole/varios/perfilcomponente_hard.php +++ b/admin/WebConsole/varios/perfilcomponente_hard.php @@ -25,7 +25,8 @@ if (!$cmd) ?> <HTML> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<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/perfilcomponente_hard.js"></SCRIPT> <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT> diff --git a/admin/WebConsole/varios/perfilcomponente_soft.php b/admin/WebConsole/varios/perfilcomponente_soft.php index 58a90725..4b2c19ff 100644 --- a/admin/WebConsole/varios/perfilcomponente_soft.php +++ b/admin/WebConsole/varios/perfilcomponente_soft.php @@ -25,7 +25,8 @@ if (!$cmd) ?> <HTML> <HEAD> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> +<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/perfilcomponente_soft.js"></SCRIPT> <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT> @@ -40,7 +41,7 @@ if (!$cmd) <SPAN align=center class=subcabeceras><?php echo $TbMsg[1]?></SPAN> <IMG src="../images/iconos/confisoft.gif"></P> <BR> <DIV align=center id="Layer_componentes"> - <SPAN align=center class=presentaciones><B><U><?php echo $TbMsg[2]?></U>: <?php echo $descripcionperfil?></B></SPAN></P> + <P align=center><SPAN class=presentaciones><B><U><?php echo $TbMsg[2]?></U>: <?php echo $descripcionperfil?></B></SPAN></P> <TABLE width="100%" class="tabla_listados" cellspacing=1 cellpadding=0 > <TR> <TH> </TH> diff --git a/admin/WebConsole/varios/programaciones.php b/admin/WebConsole/varios/programaciones.php index 522614ca..2187345f 100644 --- a/admin/WebConsole/varios/programaciones.php +++ b/admin/WebConsole/varios/programaciones.php @@ -82,8 +82,8 @@ $mialmanaque= new Almanaque("tabla_meses"); //________________________________________________________________________________________________________ ?> <HTML> -<TITLE>Administración web de aulas</TITLE> <HEAD> + <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/constantes.js"></SCRIPT> @@ -96,7 +96,6 @@ $mialmanaque= new Almanaque("tabla_meses"); <IMG src=<?php echo $urlimg?>> <SPAN align=center class=subcabeceras><?php echo $descripcion?></SPAN> </p> <FORM name="fprogramaciones" method="post"> <INPUT type=hidden name=tipoaccion value="<?php echo $tipoaccion?>"> -<CENTER> <!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> <!-- Tabla Tabla con los tiempos y los bloques de programación --> <TABLE align=center border=0 cellPadding=0 cellSpacing=0> @@ -199,7 +198,7 @@ $mialmanaque= new Almanaque("tabla_meses"); </TR> <TR> <TD><input type=text class="cajatexto" id="nombrebloque" - style="width: 350; height: 20" size="20" ></TD> + style="width: 350px; height: 20px" size="20" ></TD> </TR> </TABLE> </TD> @@ -209,7 +208,7 @@ $mialmanaque= new Almanaque("tabla_meses"); <?php $HTMLSELECT=""; $HTMLSELECT.='<SELECT onclick="consulta_programacion();" - class="estilodesple" id="lista_programaciones" size=2 style="height:100; width: 350">' ; + class="estilodesple" id="lista_programaciones" size=2 style="height:100px; width: 350px">' ; if ($numreg>0){ while (!$rs->EOF){ $HTMLSELECT.='<OPTION value="'.$rs->campos["idprogramacion"].'"'; @@ -241,7 +240,7 @@ $mialmanaque= new Almanaque("tabla_meses"); onmouseover="sobreboton(this)" onmouseout="fueraboton(this)" onclick="modifica_programacion(<?php echo $identificador?>,<?php echo $tipoaccion?>,<?php echo $sesion?>)" align=center height="17" width="83">Modificar</SPAN></TD> </TR> - + <TR> <TD align=center class=botonprogramacion > <SPAN id=bt_duplicar style="cursor:pointer;visibility:visible;color:#bbbcb9" onmouseover="sobreboton(this)" onmouseout="fueraboton(this)" diff --git a/admin/WebConsole/varios/toma_mes.php b/admin/WebConsole/varios/toma_mes.php index c76b2dff..eaf75871 100644 --- a/admin/WebConsole/varios/toma_mes.php +++ b/admin/WebConsole/varios/toma_mes.php @@ -23,4 +23,3 @@ if (isset($_POST["idanno"])) $pidanno=$_POST["idanno"]; $mialmanaque= new Almanaque("tabla_meses"); $retorno=$mialmanaque->MesAnno($pidmes,$pidanno); echo $retorno; -?>
\ No newline at end of file diff --git a/client/boot-tools/boottoolsfunctions.lib b/client/boot-tools/boottoolsfunctions.lib index 15478248..3ad38d15 100755 --- a/client/boot-tools/boottoolsfunctions.lib +++ b/client/boot-tools/boottoolsfunctions.lib @@ -116,13 +116,27 @@ case "${1,,}" in OSARCH="amd64" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; - bionic) # ogLive 1.1.1-rc1 basado en Ubuntu 18.04 y Kernel 4.15. + bionic|bionic-4.15) # ogLive 1.1.1-rc1 basado en Ubuntu 18.04 y Kernel 4.15. OSDISTRIB="ubuntu" OSCODENAME="bionic" OSRELEASE="4.15.0-32-generic" OSARCH="amd64" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; + bionic-4.18) # ogLive 1.1.1-rc3 basado en Ubuntu 18.04 y Kernel 4.18. + OSDISTRIB="ubuntu" + OSCODENAME="bionic" + OSRELEASE="4.18.0-20-generic" + OSARCH="amd64" + OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + ;; + bionic-5.0) # ogLive 1.1.1-rc5 basado en Ubuntu 18.04 y Kernel 5.0. + OSDISTRIB="ubuntu" + OSCODENAME="bionic" + OSRELEASE="5.0.0-27-generic" + OSARCH="amd64" + OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + ;; host) # ogLive basado en la distribución del servidor. OSDISTRIB=$(lsb_release -is) OSCODENAME=$(lsb_release -cs) @@ -137,7 +151,7 @@ case "${1,,}" in esac BRANCH="devel" GITURL="https://api.github.com/repos/opengnsys/OpenGnsys/commits?sha=$BRANCH&path=/client" -GITRELEASE=$(curl -s "$GITURL" | jq -r '"r" + (.[0].commit.committer.date | gsub("-"; "")[:8]) + "." + (.[0].sha[:7])') +GITRELEASE=$(curl -s "$GITURL" | jq -r '"r" + (.[0].commit.committer.date | split("-") | join("")[:8]) + "." + (.[0].sha[:7])') NAMEISOCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$OSRELEASE-$OSARCH-$GITRELEASE" NAMEHOSTCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$GITRELEASE" export OSDISTRIB OSCODENAME OSRELEASE OSARCH OSHTTP diff --git a/client/boot-tools/boottoolsgenerator.sh b/client/boot-tools/boottoolsgenerator.sh index fb749a7b..79646a4a 100755 --- a/client/boot-tools/boottoolsgenerator.sh +++ b/client/boot-tools/boottoolsgenerator.sh @@ -75,7 +75,7 @@ echo "FASE 5 - Incorporando ficheros OpenGnsys al sistema raíz rootfs " cp -a ${BTDIR}/includes/usr/bin/* /tmp chmod +x /tmp/boot-tools/*.sh # Incluir revisión. -sed -i "1 s/$/ $GITRELEASE/" ${BTDIR}/includes/etc/initramfs-tools/scripts/VERSION.txt +sed -i "1 s/$/ $GITRELEASE ($OSRELEASE)/" ${BTDIR}/includes/etc/initramfs-tools/scripts/VERSION.txt # En Ubuntu 13.04+ es necesario matar proceso de "udev" antes de desmontar. umount $BTROOTFSMNT 2>/dev/null || (kill -9 $(lsof -t $BTROOTFSMNT); umount $BTROOTFSMNT 2>/dev/null) schroot -p -c IMGogclient -- /tmp/boot-tools/boottoolsFsOpengnsys.sh diff --git a/client/boot-tools/includes/etc/initramfs-tools/modules b/client/boot-tools/includes/etc/initramfs-tools/modules index 8300452a..78a25980 100644 --- a/client/boot-tools/includes/etc/initramfs-tools/modules +++ b/client/boot-tools/includes/etc/initramfs-tools/modules @@ -17,10 +17,12 @@ # Kernel 3.7+ video. uvesafb -#generales -usbcore -uhci_hcd -ehci_hcd +# Generales +#usbcore +#uhci_hcd +#ehci_hcd usbhid usbmouse mac-hid +arc4 +cmac diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/VERSION.txt b/client/boot-tools/includes/etc/initramfs-tools/scripts/VERSION.txt index 45805bd6..73b6a464 100644 --- a/client/boot-tools/includes/etc/initramfs-tools/scripts/VERSION.txt +++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/VERSION.txt @@ -1 +1 @@ -OpenGnsys Client 1.1.1-rc2 +OpenGnsys Client 1.1.1-rc5 diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions index 62f0524a..4d96f7eb 100644 --- a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions +++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions @@ -123,7 +123,7 @@ ogExportVarEnvironment () OGPROTOCOL="${ogprotocol:-smb}" [ "$ogunit" != "" ] && OGUNIT="/$ogunit" # OPTIONS Para samba y local (a nfs no le afecta) - export OPTIONS=" -o vers=1.0,sec=ntlm,user=opengnsys,pass=og" + export OPTIONS=" -o user=opengnsys,pass=og" DEFOGLIVE="ogclient" export OGLIVEDIR="${oglivedir:-$DEFOGLIVE}" && echo "OGLIVEDIR=$OGLIVEDIR" >> $CFGINITRD case "$OGPROTOCOL" in 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 85b00b69..62962927 100755 --- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh +++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh @@ -34,8 +34,6 @@ then exit 1 fi - - #damos permiso al directorio de scripts chmod -R 775 ${SVNCLIENTDIR}/includes/usr/bin/* @@ -43,6 +41,7 @@ chmod -R 775 ${SVNCLIENTDIR}/includes/usr/bin/* cp -av ${SVNCLIENTDIR}/includes/* ${OGCLIENTMOUNT}/ mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/ cp -av ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/ +mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/ cp -av ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/ if [ $? -ne 0 ] @@ -62,19 +61,9 @@ cp -av ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/lib cp -av ${SVNCLIENTSTRUCTURE}/lib/qtplugins/* $OGCLIENTMOUNT/usr/local/plugins cp -av ${SVNCLIENTSTRUCTURE}/etc/*.qmap $OGCLIENTMOUNT/usr/local/etc -# Browser. -cp -av ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin -if [ $? -ne 0 ]; then - echo "$FUNCNAME(): Copying Browser : ERROR" - exit 1 -fi - -# ogAdmClient. -cp -av ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin -if [ $? -ne 0 ]; then - echo "$FUNCNAME(): Copying ogAdmClient: ERROR" - exit 1 -fi +# Browser y ogAdmClient. +[ -x ${SVNCLIENTSTRUCTURE}/bin/browser ] && cp -av ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin +[ -x ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient ] && cp -av ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin # El fichero de configuración debe sustituir a los 2 ficheros (borrar las 2 líneas). echo "${VERSIONBOOTTOOLS}-${OSCODENAME}-${OSRELEASE}-${GITRELEASE}" > /$NAMEISOCLIENTFILE 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 9a9fb764..6c27f300 100755 --- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh +++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh @@ -13,32 +13,12 @@ export LANG=C source /opt/opengnsys/lib/engine/bin/ToolsGNU.c &>/dev/null pushd /tmp -echo "ms-sys " -which ms-sys || ms-sys install &>/dev/null +echo "ms-sys" +which ms-sys || (wget https://sourceforge.net/projects/ms-sys/files/latest/download -O ms-sys.tar.gz; tar xpvzf ms-sys.tar.gz; cd $(tar tzf ms-sys.tar.gz|head -1); make install; cd ..) echo "spartlnx" which spartlnx.run || $(wget http://damien.guibouret.free.fr/savepart.zip &>/dev/null; unzip -o savepart.zip -d /sbin/) -# Mach-O loader for Linux -#echo "maloader" -#apt-get install -y uuid-dev lib64z1 lib32z1 -#wget https://github.com/shinh/maloader/archive/master.zip -#unzip master.zip -#cd maloader-master -#perl -pi -le 'print "#include <unistd.h>" if $. == 45' ld-mac.cc -#if [ "$(arch)" == "x86_64" ]; then -# ln -fs /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /lib/libcrypto.so 2>/dev/null -# make release -#else -# ln -fs /lib/i386-linux-gnu/libcrypto.so.1.0.0 /lib/libcrypto.so 2>/dev/null -# make clean -# make all BITS=32 -#fi -#cp -va ld-mac /usr/bin -#cp -va libmac.so /usr/lib -#cd .. -#rm -fr master.zip maloader-master - popd export LANGUAGE=$OLDLANGUAGE export LC_ALL=$OLDLC_ALL diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh index 95a64cf9..301cd991 100755 --- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh +++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh @@ -35,25 +35,9 @@ echo "/dev/sda1 / ext4 rw,errors=remount-ro 0 0" > /etc/mtab OGCLIENTCFG=${OGCLIENTCFG:-/tmp/ogclient.cfg} [ -f $OGCLIENTCFG ] && source $OGCLIENTCFG OSRELEASE=${OSRELEASE:-$(uname -r)} -# inicio de la instalacion -if [ "$OSRELEASE" == "3.7.6-030706-generic" ]; then - # Descargar e instalar Kernel 3.7. - mkdir -p /tmp/kernel - pushd /tmp/kernel - apt-get -y --force-yes install wget crda libnl-3-200 libnl-genl-3-200 wireless-regdb - wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.7.6-raring/linux-image-3.7.6-030706-generic_3.7.6-030706.201302040006_$OSARCH.deb - wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.7.6-raring/linux-image-extra-3.7.6-030706-generic_3.7.6-030706.201302040006_$OSARCH.deb - wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.7.6-raring/linux-headers-3.7.6-030706-generic_3.7.6-030706.201302040006_$OSARCH.deb - wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.7.6-raring/linux-headers-3.7.6-030706_3.7.6-030706.201302040006_all.deb - dpkg -i *.deb - apt-get -y --force-yes install dkms - popd - rm -fr /tmp/kernel -else - # Instalar Kernel firmado del repositorio de paquetes. - apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} dkms shim-signed - apt-get -y --force-yes install linux-modules-${OSRELEASE} linux-modules-extra-${OSRELEASE} 2>/dev/null -fi +# Instalar Kernel firmado del repositorio de paquetes. +apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} dkms shim-signed +apt-get -y --force-yes install linux-modules-${OSRELEASE} linux-modules-extra-${OSRELEASE} 2>/dev/null # Valores para paquetes interactivos. cat << EOT | debconf-set-selections -- @@ -64,7 +48,8 @@ kexec-tools kexec-tools/load_kexec boolean true openssh-server openssh-server/permit-root-login boolean true refind refind/install_to_esp boolean false EOT -apt-get -y install sshfs console-data kexec-tools davfs2 $PKGS32 +apt-get -y install sshfs console-data kexec-tools $PKGS32 +#apt-get -y install davfs2 #comenzamos con la instalación de los paquetes a instalar. for group in `find /usr/bin/boot-tools/listpackages/ -name sw.*` 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 afd8ff4c..73e1c2b9 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,12 +4,13 @@ install man-db install fbset install gdebi-core install bash-static -install busybox-static +install busybox-static install console-data install locales install lshw install gawk -install subversion +#install subversion # ogLive anterior a Ubuntu 18.04 +install git # ogLive a partir de Ubuntu 18.04 install python-openssl install python #install php5-cli # ogLive anterior a Ubuntu 16.04 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 0092bd29..3e6a7666 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 @@ -5,7 +5,7 @@ install pxe-kexec install mbuffer install parted install gdisk -install chntpw +install chntpw install clonezilla install registry-tools install reglookup diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing index 13cd2665..93012f4a 100644 --- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing +++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing @@ -1,12 +1,14 @@ #sw.other install screen install schroot -#install grub install xmlstarlet ############# UEFI install efibootmgr install efitools install refind +install grub-efi-amd64-bin +install grub-efi-ia32-bin +install grub-pc-bin ############# OGAgent install libxss1 install python-prctl @@ -16,7 +18,7 @@ install python-requests install fusioninventory-agent install nvme-cli install disktype -install laptop-detect +install laptop-detect #install discover #install casper #install lupin-casper @@ -51,7 +53,6 @@ install laptop-detect #install nitrogen #install ttf-ubuntu-font-family #install time -#install openssh-client #install synaptic #install libglib-perl #install libgtk2-perl diff --git a/client/boot-tools/ogclientImg2Sqfs b/client/boot-tools/ogclientImg2Sqfs index 5dfb2b00..ea6f9509 100755 --- a/client/boot-tools/ogclientImg2Sqfs +++ b/client/boot-tools/ogclientImg2Sqfs @@ -26,7 +26,7 @@ OGCLIENTBASEDIR=$OPENGNSYS/tftpboot/ogclient/; OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img; OGCLIENTSQFS=${OGCLIENTBASEDIR}ogclient.sqfs OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount; -OGCLIENTSIZEMB=1900; +OGCLIENTSIZEMB=2100; OGCLIENTLABEL=ogClient; # Comprobamos que existe el cliente .sqfs diff --git a/client/boot-tools/ogclientSqfs2Img b/client/boot-tools/ogclientSqfs2Img index 4f8447da..e52b677c 100755 --- a/client/boot-tools/ogclientSqfs2Img +++ b/client/boot-tools/ogclientSqfs2Img @@ -29,7 +29,7 @@ OGCLIENTBASEDIR=$OPENGNSYS/tftpboot/ogclient/; OGCLIENTSQFS=${OGCLIENTBASEDIR}ogclient.sqfs OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img; OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount; -OGCLIENTSIZEMB=1900; +OGCLIENTSIZEMB=2100; OGCLIENTLABEL=ogClient; # Comprobamos que existe el cliente .sqfs diff --git a/client/browser/po/ca.po b/client/browser/po/ca.po index 8e5e0b7c..1e76b18b 100644 --- a/client/browser/po/ca.po +++ b/client/browser/po/ca.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: OpenGnsys Client Browser 1.1.0\n" -"Report-Msgid-Bugs-To: https://opengnsys.es\n" -"POT-Creation-Date: 2017-05-11 11:51+0000\n" +"Report-Msgid-Bugs-To: https://opengnsys.es/\n" +"POT-Creation-Date: 2019-09-11 15:48+0000\n" "PO-Revision-Date: 2016-05-03 10:25+0200\n" "Last-Translator: Ramón M. Gómez <ramongomez@us.es>\n" "Language-Team: CATALAN <LL@li.org>\n" @@ -17,94 +17,102 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/main.cpp:20 +#: src/main.cpp:20 #, c-format msgid "Uso: %s -qws http://sitioweb.com/\n" msgstr "Ús: %s -qws http://web.com/\n" -#: ../src/mainwindow.cpp:55 +#: src/mainwindow.cpp:47 +msgid "El fichero de log no ha podido ser abierto: " +msgstr "Log file could not be opened: " + +#: src/mainwindow.cpp:68 msgid "&Nueva Terminal" msgstr "&Nova Terminal" -#: ../src/mainwindow.cpp:60 +#: src/mainwindow.cpp:72 msgid "Salida" msgstr "Sortida" -#: ../src/mainwindow.cpp:97 +#: src/mainwindow.cpp:104 msgid "Proyecto OpenGnsys" msgstr "Projecte OpenGnsys" -#: ../src/mainwindow.cpp:145 -msgid "El fichero de log no ha podido ser abierto: " -msgstr "" - -#: ../src/mainwindow.cpp:174 +#: src/mainwindow.cpp:167 msgid "Hay otro proceso en ejecución. Por favor espere." msgstr "" -#: ../src/mainwindow.cpp:189 ../src/mainwindow.cpp:228 +#: src/mainwindow.cpp:183 src/mainwindow.cpp:250 msgid "AVISO" msgstr "AVIS" -#: ../src/mainwindow.cpp:191 +#: src/mainwindow.cpp:186 msgid "" "La siguiente acción puede modificar datos o tardar varios minutos. El " "equipo no podrá ser utilizado durante su ejecución." msgstr "" -#: ../src/mainwindow.cpp:192 +#: src/mainwindow.cpp:187 msgid "Ejecutar" msgstr "Executar" -#: ../src/mainwindow.cpp:193 +#: src/mainwindow.cpp:188 msgid "Cancelar" msgstr "Cancel-lar" -#: ../src/mainwindow.cpp:211 +#: src/mainwindow.cpp:233 #, c-format msgid "%p% Cargando" msgstr "%p% Carregat" -#: ../src/mainwindow.cpp:230 +#: src/mainwindow.cpp:253 msgid "La página no se puede cargar." msgstr "" -#: ../src/mainwindow.cpp:232 +#: src/mainwindow.cpp:255 msgid "Recargar" msgstr "Recarregar" -#: ../src/mainwindow.cpp:233 +#: src/mainwindow.cpp:256 msgid "Abortar" msgstr "Avortar" -#: ../src/mainwindow.cpp:264 -msgid "Lanzado satisfactoriamente." +#: src/mainwindow.cpp:333 src/mainwindow.cpp:345 +msgid "Fin del proceso. Valor de retorno: " msgstr "" -#: ../src/mainwindow.cpp:298 -msgid "Proceso acabado correctamente. Valor de retorno: " +#: src/mainwindow.cpp:338 +msgid "El proceso ha fallado inesperadamente. Salida: " msgstr "" -#: ../src/mainwindow.cpp:302 -msgid "El proceso ha fallado inesperadamente. Salida: " +#: src/mainwindow.cpp:347 +msgid "AVISO: Pulsar el botón superior derecho para cerrar" msgstr "" -#: ../src/mainwindow.cpp:313 +#: src/mainwindow.cpp:353 +msgid "Código de salida: " +msgstr "" + +#: src/mainwindow.cpp:364 msgid "Imposible lanzar el proceso." msgstr "" -#: ../src/mainwindow.cpp:316 +#: src/mainwindow.cpp:367 msgid "Error de escritura en el proceso." msgstr "" -#: ../src/mainwindow.cpp:319 +#: src/mainwindow.cpp:370 msgid "Error de lectura del proceso." msgstr "" -#: ../src/mainwindow.cpp:327 +#: src/mainwindow.cpp:378 msgid "Error desconocido." msgstr "" -#: ../src/mainwindow.cpp:460 +#: src/mainwindow.cpp:530 src/mainwindow.cpp:535 msgid "Lanzando el comando: " msgstr "" + +#: src/mainwindow.cpp:563 +msgid "ERROR" +msgstr "ERROR" diff --git a/client/browser/po/en.po b/client/browser/po/en.po index 68ab13c5..08c26b96 100644 --- a/client/browser/po/en.po +++ b/client/browser/po/en.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: OpenGnsys Client Browser 1.1.0\n" -"Report-Msgid-Bugs-To: https://opengnsys.es\n" -"POT-Creation-Date: 2017-05-11 11:51+0000\n" +"Report-Msgid-Bugs-To: https://opengnsys.es/\n" +"POT-Creation-Date: 2019-09-11 15:48+0000\n" "PO-Revision-Date: 2016-05-03 10:16+0200\n" "Last-Translator: Ramón M. Gómez <ramongomez@us.es>\n" "Language-Team: ENGLISH <LL@li.org>\n" @@ -17,36 +17,36 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/main.cpp:20 +#: src/main.cpp:20 #, c-format msgid "Uso: %s -qws http://sitioweb.com/\n" msgstr "Usage: %s -qws http://website.com/\n" -#: ../src/mainwindow.cpp:55 +#: src/mainwindow.cpp:47 +msgid "El fichero de log no ha podido ser abierto: " +msgstr "Log file could not be opened: " + +#: src/mainwindow.cpp:68 msgid "&Nueva Terminal" msgstr "&New Terminal" -#: ../src/mainwindow.cpp:60 +#: src/mainwindow.cpp:72 msgid "Salida" msgstr "Output" -#: ../src/mainwindow.cpp:97 +#: src/mainwindow.cpp:104 msgid "Proyecto OpenGnsys" msgstr "OpenGnsys Project" -#: ../src/mainwindow.cpp:145 -msgid "El fichero de log no ha podido ser abierto: " -msgstr "The log file could not be opened: " - -#: ../src/mainwindow.cpp:174 +#: src/mainwindow.cpp:167 msgid "Hay otro proceso en ejecución. Por favor espere." msgstr "There is another process running. Please wait." -#: ../src/mainwindow.cpp:189 ../src/mainwindow.cpp:228 +#: src/mainwindow.cpp:183 src/mainwindow.cpp:250 msgid "AVISO" msgstr "WARNING" -#: ../src/mainwindow.cpp:191 +#: src/mainwindow.cpp:186 msgid "" "La siguiente acción puede modificar datos o tardar varios minutos. El " "equipo no podrá ser utilizado durante su ejecución." @@ -54,59 +54,67 @@ msgstr "" "Following action can modify some data or take several minutes. This computer " "may not be used during execution." -#: ../src/mainwindow.cpp:192 +#: src/mainwindow.cpp:187 msgid "Ejecutar" msgstr "Run" -#: ../src/mainwindow.cpp:193 +#: src/mainwindow.cpp:188 msgid "Cancelar" msgstr "Cancel" -#: ../src/mainwindow.cpp:211 +#: src/mainwindow.cpp:233 #, c-format msgid "%p% Cargando" msgstr "%p% Loaded" -#: ../src/mainwindow.cpp:230 +#: src/mainwindow.cpp:253 msgid "La página no se puede cargar." msgstr "Page can not be loaded." -#: ../src/mainwindow.cpp:232 +#: src/mainwindow.cpp:255 msgid "Recargar" msgstr "Reload" -#: ../src/mainwindow.cpp:233 +#: src/mainwindow.cpp:256 msgid "Abortar" msgstr "Abort" -#: ../src/mainwindow.cpp:264 -msgid "Lanzado satisfactoriamente." -msgstr "Successfully launched." +#: src/mainwindow.cpp:333 src/mainwindow.cpp:345 +msgid "Fin del proceso. Valor de retorno: " +msgstr "End of process. Return value: " -#: ../src/mainwindow.cpp:298 -msgid "Proceso acabado correctamente. Valor de retorno: " -msgstr "Process completed successfully. Return value: " - -#: ../src/mainwindow.cpp:302 +#: src/mainwindow.cpp:338 msgid "El proceso ha fallado inesperadamente. Salida: " msgstr "The process crashed unexpectedly. Return value: " -#: ../src/mainwindow.cpp:313 +#: src/mainwindow.cpp:347 +msgid "AVISO: Pulsar el botón superior derecho para cerrar" +msgstr "WARNING: Press the upper right button to close" + +#: src/mainwindow.cpp:353 +msgid "Código de salida: " +msgstr "Exit code: " + +#: src/mainwindow.cpp:364 msgid "Imposible lanzar el proceso." msgstr "Unable to launch the process." -#: ../src/mainwindow.cpp:316 +#: src/mainwindow.cpp:367 msgid "Error de escritura en el proceso." msgstr "Error writing to the process." -#: ../src/mainwindow.cpp:319 +#: src/mainwindow.cpp:370 msgid "Error de lectura del proceso." msgstr "Error reading from the process." -#: ../src/mainwindow.cpp:327 +#: src/mainwindow.cpp:378 msgid "Error desconocido." msgstr "Unknown error." -#: ../src/mainwindow.cpp:460 +#: src/mainwindow.cpp:530 src/mainwindow.cpp:535 msgid "Lanzando el comando: " msgstr "Launching command: " + +#: src/mainwindow.cpp:563 +msgid "ERROR" +msgstr "ERROR" diff --git a/client/browser/src/mainwindow.cpp b/client/browser/src/mainwindow.cpp index 2e799c5e..1d89a1a8 100644 --- a/client/browser/src/mainwindow.cpp +++ b/client/browser/src/mainwindow.cpp @@ -12,10 +12,10 @@ #include <QDateTime> #include <QProgressBar> #include <QTabWidget> -#include <QWebView> #include <QLineEdit> #include <QNetworkReply> #include <QSslError> +#include <QTimer> #include <libintl.h> #include "qtermwidget.h" @@ -24,7 +24,7 @@ #define BUFFERSIZE 2048 #define REGEXP_STRING "^\\[(\\d+)\\]" -#define CURRENT_TIME() QDateTime::currentDateTime().toString("dd/MM/yy hh:mm:ss") +#define CURRENT_TIME() QDateTime::currentDateTime().toString("dd/MM/yyyy hh:mm:ss") MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),m_web(new QWebView()),m_output(new QTextEdit()), @@ -33,15 +33,28 @@ MainWindow::MainWindow(QWidget *parent) { // Graphic showFullScreen(); - setWindowTitle(tr("OpenGnsys Browser")); - setCentralWidget(m_web); - readEnvironmentValues(); + // Open the log file for append + if(m_env.contains("OGLOGFILE") && m_env["OGLOGFILE"]!="") + { + QFile* m_logfile=new QFile(m_env["OGLOGFILE"]); + if(!m_logfile->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) + { + delete m_logfile; + print(tr(gettext("El fichero de log no ha podido ser abierto: "))+m_env["OGLOGFILE"]+"."); + } + else + { + m_logstream=new QTextStream(m_logfile); + } + } + // Output m_output->setReadOnly(true); + m_output->setFontPointSize(16); // Button Dock QDockWidget* dock=new QDockWidget(); @@ -56,16 +69,13 @@ MainWindow::MainWindow(QWidget *parent) button->setFocusPolicy(Qt::TabFocus); m_tabs->setCornerWidget(button); m_tabs->setFocusPolicy(Qt::NoFocus); - m_tabs->addTab(m_output,tr(gettext("Salida"))); slotCreateTerminal(); - // Assign tabs to dock dock->setWidget(m_tabs); - // Assign tabs dock to the mainwindow if admin mode is active if(m_env.contains("ogactiveadmin") && m_env["ogactiveadmin"] == "true") - addDockWidget(Qt::BottomDockWidgetArea,dock); + addDockWidget(Qt::BottomDockWidgetArea,dock); // Top Dock dock=new QDockWidget(); @@ -73,16 +83,13 @@ MainWindow::MainWindow(QWidget *parent) QWidget* dummy2=new QWidget(); dummy2->setMaximumHeight(0); dock->setTitleBarWidget(dummy2); - // WebBar m_webBar=new QLineEdit(dock); - // WebBar to dock dock->setWidget(m_webBar); - // Assign top dock to the mainwindow if admin mode is active if(m_env.contains("ogactiveadmin") && m_env["ogactiveadmin"] == "true") - addDockWidget(Qt::TopDockWidgetArea,dock); + addDockWidget(Qt::TopDockWidgetArea,dock); // Status bar QStatusBar* st=statusBar(); @@ -91,9 +98,9 @@ MainWindow::MainWindow(QWidget *parent) m_logo=new QLabel(); QPixmap logo; if(logo.load("/opt/opengnsys/lib/pictures/oglogo.png")) - m_logo->setPixmap(logo); + m_logo->setPixmap(logo); else - m_logo->setText("OG"); + m_logo->setText("OG"); m_logo->setToolTip(tr(gettext("Proyecto OpenGnsys"))+"\nhttps://opengnsys.es"); // Progress bar m_progressBar=new QProgressBar(this); @@ -103,8 +110,8 @@ MainWindow::MainWindow(QWidget *parent) m_speedInfo=new QLabel(speed); m_speedInfo->setAlignment(Qt::AlignCenter); if(m_env.contains("DEFAULTSPEED") && m_env["DEFAULTSPEED"]!="") - if(speed.compare(m_env["DEFAULTSPEED"])!=0) - m_speedInfo->setStyleSheet("background-color: darkred; color: white; font-weight: bold;"); + if(speed.compare(m_env["DEFAULTSPEED"])!=0) + m_speedInfo->setStyleSheet("background-color: darkred; color: white; font-weight: bold;"); // Clock m_clock=new DigitalClock(this); @@ -126,10 +133,8 @@ MainWindow::MainWindow(QWidget *parent) connect(m_process,SIGNAL(started()),this,SLOT(slotProcessStarted())); connect(m_process,SIGNAL(finished(int,QProcess::ExitStatus)), this,SLOT(slotProcessFinished(int,QProcess::ExitStatus))); - connect(m_process,SIGNAL(error(QProcess::ProcessError)), this,SLOT(slotProcessError(QProcess::ProcessError))); - connect(m_process,SIGNAL(readyReadStandardOutput()),this,SLOT(slotProcessOutput())); connect(m_process,SIGNAL(readyReadStandardError()), this,SLOT(slotProcessErrorOutput())); @@ -138,21 +143,6 @@ MainWindow::MainWindow(QWidget *parent) connect(button,SIGNAL(clicked()),this,SLOT(slotCreateTerminal())); connect(m_webBar,SIGNAL(returnPressed()),this,SLOT(slotWebBarReturnPressed())); - // Open the log file for append - if(m_env.contains("OGLOGFILE") && m_env["OGLOGFILE"]!="") - { - QFile* m_logfile=new QFile(m_env["OGLOGFILE"]); - if(!m_logfile->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) - { - delete m_logfile; - print(tr(gettext("El fichero de log no ha podido ser abierto: "))+m_env["OGLOGFILE"]+"."); - } - else - { - m_logstream=new QTextStream(m_logfile); - } - } - QStringList arguments=QCoreApplication::arguments(); m_webBar->setText(arguments[1]); m_web->load(QUrl(arguments[1])); @@ -172,35 +162,64 @@ MainWindow::~MainWindow() void MainWindow::slotLinkHandle(const QUrl &url) { // Check if it's executing another process - if(m_process->state()!=QProcess::NotRunning) + if(m_process->state() != QProcess::NotRunning) { - print(tr(gettext("Hay otro proceso en ejecución. Por favor espere."))); - return; + print(tr(gettext("Hay otro proceso en ejecución. Por favor espere."))); + return; } - QString urlString = url.toString(); - if(urlString.startsWith(COMMAND)) + QString urlScheme = url.scheme(); + // Clear the output widget for a normal user + if(! m_env.contains("ogactiveadmin") || m_env["ogactiveadmin"] != "true") { - // For COMMAND link, execute - executeCommand(urlString.remove(0,QString(COMMAND).length())); + m_output->clear(); } - else if(urlString.startsWith(COMMAND_WITH_CONFIRMATION)) + if(urlScheme == COMMAND_CONFIRM || urlScheme == COMMAND_CONFIRM_OUTPUT || + urlScheme == COMMAND_OUTPUT_CONFIRM || urlScheme == COMMAND_WITH_CONFIRMATION) { - // For COMMAND_WITH_CONFIRMATION link, show confirmation box and execute, if accepted + // For all command with confirmation links, show a popup box QMessageBox msgBox; - msgBox.setIcon(QMessageBox::Question); + msgBox.setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint); msgBox.setWindowTitle(tr(gettext("AVISO"))); + msgBox.setIcon(QMessageBox::Question); msgBox.setTextFormat(Qt::RichText); msgBox.setText(tr(gettext("La siguiente acción puede modificar datos o tardar varios minutos. El equipo no podrá ser utilizado durante su ejecución."))); QPushButton *execButton = msgBox.addButton(tr(gettext("Ejecutar")), QMessageBox::ActionRole); msgBox.addButton(tr(gettext("Cancelar")), QMessageBox::RejectRole); msgBox.setDefaultButton(execButton); msgBox.exec(); + // Continue if user press the execution button if (msgBox.clickedButton() == execButton) { - executeCommand(urlString.remove(0,QString(COMMAND_WITH_CONFIRMATION).length())); + // For command with confirmation and output link, show an output window to non-admin user + if((urlScheme == COMMAND_CONFIRM_OUTPUT || urlScheme == COMMAND_OUTPUT_CONFIRM) && + (! m_env.contains("ogactiveadmin") || m_env["ogactiveadmin"] != "true")) + { + int w=MainWindow::width(), h=MainWindow::height(); + m_output->setWindowFlags(Qt::Window); + m_output->move(100, 100); + m_output->setFixedSize(w*0.8-100, h*0.8-100); + m_output->show(); + } + // Execute the command + executeCommand(urlString.remove(0, urlScheme.length()+1)); } } + else if(urlScheme == COMMAND || urlScheme == COMMAND_OUTPUT) + { + // For command with output link, show an output window to non-admin user + if(urlScheme == COMMAND_OUTPUT && + (! m_env.contains("ogactiveadmin") || m_env["ogactiveadmin"] != "true")) + { + int w=MainWindow::width(), h=MainWindow::height(); + m_output->setWindowFlags(Qt::Window); + m_output->move(100, 100); + m_output->setFixedSize(w*0.8-100, h*0.8-100); + m_output->show(); + } + // Execute the command + executeCommand(urlString.remove(0, urlScheme.length()+1)); + } else { // For other link, load webpage @@ -227,14 +246,14 @@ void MainWindow::slotWebLoadFinished(bool ok) if(ok == false) { QMessageBox msgBox; - msgBox.setIcon(QMessageBox::Question); + msgBox.setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint); msgBox.setWindowTitle(tr(gettext("AVISO"))); + msgBox.setIcon(QMessageBox::Question); msgBox.setTextFormat(Qt::RichText); msgBox.setText(tr(gettext("La página no se puede cargar."))); QPushButton *reloadButton = msgBox.addButton(tr(gettext("Recargar")), QMessageBox::ActionRole); msgBox.addButton(tr(gettext("Abortar")), QMessageBox::RejectRole); - msgBox.exec(); if (msgBox.clickedButton() == reloadButton) @@ -264,7 +283,6 @@ void MainWindow::slotSslErrors(QNetworkReply* reply) void MainWindow::slotProcessStarted() { - m_output->insertPlainText(tr(gettext("Lanzado satisfactoriamente."))); startProgressBar(); } @@ -275,7 +293,11 @@ void MainWindow::slotProcessOutput() while((m_process->readLine(buf,BUFFERSIZE) > 0)) { QString s(buf); - print(tr("Proc. stdout: ")+s); + if(m_env.contains("ogactiveadmin") && m_env["ogactiveadmin"] == "true") + { + m_output->insertPlainText(tr("Proc. stdout: ")); + } + print(s); captureOutputForStatusBar(s); } } @@ -287,39 +309,65 @@ void MainWindow::slotProcessErrorOutput() while((m_process->readLine(buf,BUFFERSIZE) > 0)) { QString s(buf); - m_output->insertPlainText(tr("Proc. stderr: ")); + if(m_env.contains("ogactiveadmin") && m_env["ogactiveadmin"] == "true") + { + m_output->insertPlainText(tr("Proc. stderr: ")); + } m_output->setTextColor(QColor(Qt::darkBlue)); print(s); m_output->setTextColor(QColor(Qt::black)); } } -void MainWindow::slotProcessFinished(int code,QProcess::ExitStatus status) +void MainWindow::slotProcessFinished(int code, QProcess::ExitStatus status) { - if(status==QProcess::NormalExit) + if(m_env.contains("ogactiveadmin") && m_env["ogactiveadmin"] == "true") { - print(tr(gettext("Proceso acabado correctamente. Valor de retorno: "))+QString::number(code)); + // Admin user: show process status + if(status==QProcess::NormalExit) + { + if(code > 0) + { + m_output->setTextColor(QColor(Qt::darkRed)); + } + print("\n"+tr(gettext("Fin del proceso. Valor de retorno: "))+QString::number(code)); + } + else + { + m_output->setTextColor(QColor(Qt::darkRed)); + print("\n"+tr(gettext("El proceso ha fallado inesperadamente. Salida: ")+code)); + } + m_output->setTextColor(QColor(Qt::black)); } else { - print(tr(gettext("El proceso ha fallado inesperadamente. Salida: ")+code)); + // Non-admin user: show instruction to close the popup window + write(tr(gettext("Fin del proceso. Valor de retorno: "))+QString::number(code)); + m_output->setFontUnderline(true); + print("\n\n"+tr(gettext("AVISO: Pulsar el botón superior derecho para cerrar"))+" [X]"); + m_output->setFontUnderline(false); + } + // On error, show a message box + if(code > 0 && ! m_output->isActiveWindow()) + { + showErrorMessage(gettext("Código de salida: ")+QString::number(code)); } finishProgressBar(); } void MainWindow::slotProcessError(QProcess::ProcessError error) { - m_output->setTextColor(QColor(Qt::darkRed)); + QString errorMsg; switch(error) { case QProcess::FailedToStart: - print(tr(gettext("Imposible lanzar el proceso."))); + errorMsg=tr(gettext("Imposible lanzar el proceso.")); break; case QProcess::WriteError: - print(tr(gettext("Error de escritura en el proceso."))); + errorMsg=tr(gettext("Error de escritura en el proceso.")); break; case QProcess::ReadError: - print(tr(gettext("Error de lectura del proceso."))); + errorMsg=tr(gettext("Error de lectura del proceso.")); break; // No capturo crashed porque la pillo por finished case QProcess::Crashed: @@ -327,11 +375,17 @@ void MainWindow::slotProcessError(QProcess::ProcessError error) break; case QProcess::UnknownError: default: - print(tr(gettext("Error desconocido."))); + errorMsg=tr(gettext("Error desconocido.")); break; } + // Print error and show message box with timeout. + if(!errorMsg.isNull()) { + m_output->setTextColor(QColor(Qt::darkRed)); + print(errorMsg); + m_output->setTextColor(QColor(Qt::black)); + showErrorMessage(errorMsg); + } finishProgressBar(); - m_output->setTextColor(QColor(Qt::black)); } void MainWindow::slotCreateTerminal() @@ -343,8 +397,6 @@ void MainWindow::slotCreateTerminal() console->setTerminalFont(font); console->setFocusPolicy(Qt::StrongFocus); - - //console->setColorScheme(COLOR_SCHEME_BLACK_ON_LIGHT_YELLOW); console->setScrollBarPosition(QTermWidget::ScrollBarRight); ++m_numberTerminal; @@ -367,7 +419,7 @@ void MainWindow::slotWebBarReturnPressed() { QUrl url(m_webBar->text()); if(url.isValid()) - slotLinkHandle(url); + slotLinkHandle(url); } int MainWindow::readEnvironmentValues() @@ -403,32 +455,42 @@ int MainWindow::readEnvironmentValues() return ret; } +// Write a string to the log file +void MainWindow::write(QString s) +{ + if(! s.endsWith("\n")) + s+="\n"; + if(m_logstream) + { + *m_logstream<<CURRENT_TIME()<<": browser: "<<s; + m_logstream->flush(); + } +} + +// Print and log a string void MainWindow::print(QString s) { - if(!s.endsWith("\n")) - s+="\n"; - if(m_logstream) - { - *m_logstream<<CURRENT_TIME()<<": "<<s; - m_logstream->flush(); - } - if(m_output) - m_output->insertPlainText(s); + if(! s.endsWith("\n")) + s+="\n"; + write(s); + if(m_output) + m_output->insertPlainText(s); } +// Show message in status bar void MainWindow::captureOutputForStatusBar(QString output) { - // Capturar para modificar status bar - output=output.trimmed(); - - QRegExp regexp(REGEXP_STRING); - if(regexp.indexIn(output) != -1) - { - int pass=regexp.cap(1).toInt(); - output.replace(regexp,""); - m_progressBar->setValue(pass); - m_progressBar->setFormat("%p%"+output); - } + // Modify the status bar + output=output.trimmed(); + // Get percentage (string starts with "[Number]") + QRegExp regexp(REGEXP_STRING); + if(regexp.indexIn(output) != -1) + { + int pass=regexp.cap(1).toInt(); + output.replace(regexp,""); + m_progressBar->setValue(pass); + m_progressBar->setFormat("%p%"+output); + } } // Init status bar @@ -445,13 +507,14 @@ void MainWindow::startProgressBar() m_web->setEnabled(false); } +// Reset status bar void MainWindow::finishProgressBar() { m_progressBar->reset(); m_web->setEnabled(true); } - +// Execute a command void MainWindow::executeCommand(QString &string) { QStringList list=string.split(" ",QString::SkipEmptyParts); @@ -460,10 +523,17 @@ void MainWindow::executeCommand(QString &string) // Assign the same Browser's environment to the process m_process->setEnvironment(QProcess::systemEnvironment()); m_process->start(program,list); - print(tr(gettext("Lanzando el comando: "))); - m_output->setTextColor(QColor(Qt::darkGreen)); - print(program+" "+list.join(" ")); - m_output->setTextColor(QColor(Qt::black)); + // Only show the command line to admin user + if(m_env.contains("ogactiveadmin") && m_env["ogactiveadmin"] == "true") + { + m_output->setTextColor(QColor(Qt::darkGreen)); + print(tr(gettext("Lanzando el comando: "))+string); + m_output->setTextColor(QColor(Qt::black)); + } + else + { + write(tr(gettext("Lanzando el comando: "))+string); + } startProgressBar(); } @@ -484,3 +554,15 @@ QString MainWindow::readSpeed() { return QString(""); } } + +// Show an error box with timeout +void MainWindow::showErrorMessage(QString text) +{ + QMessageBox* msgBox=new QMessageBox(); + msgBox->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint); + msgBox->setWindowTitle(gettext("ERROR")); + msgBox->setIcon(QMessageBox::Warning); + msgBox->setText(text); + msgBox->show(); + QTimer::singleShot(5000, msgBox, SLOT(close())); +} diff --git a/client/browser/src/mainwindow.h b/client/browser/src/mainwindow.h index e4e02fa3..664d2f00 100644 --- a/client/browser/src/mainwindow.h +++ b/client/browser/src/mainwindow.h @@ -1,8 +1,12 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#define COMMAND "command:" -#define COMMAND_WITH_CONFIRMATION "commandwithconfirmation:" +#define COMMAND "command" +#define COMMAND_CONFIRM "command+confirm" +#define COMMAND_WITH_CONFIRMATION "commandwithconfirmation" // Backwards compatibility +#define COMMAND_OUTPUT "command+output" +#define COMMAND_CONFIRM_OUTPUT "command+confirm+output" +#define COMMAND_OUTPUT_CONFIRM "command+output+confirm" #define ENVIRONMENT "OGLOGFILE,ogactiveadmin,DEFAULTSPEED" #include <QWidget> @@ -41,7 +45,7 @@ class MainWindow : public QMainWindow void slotWebLoadStarted(); void slotWebLoadFinished(bool ok); void slotWebLoadProgress(int progress); - void slotSslErrors(QNetworkReply* reply); + void slotSslErrors(QNetworkReply* reply); // Funciones que manejan cada vez que el proceso hace algo void slotProcessStarted(); @@ -62,12 +66,13 @@ class MainWindow : public QMainWindow protected: int readEnvironmentValues(); void print(QString s); + void write(QString s); void captureOutputForStatusBar(QString output); void startProgressBar(); void finishProgressBar(); void executeCommand(QString &string); QString readSpeed(); - + void showErrorMessage(QString string); protected: QWebView *m_web; diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib index e9ddf38e..6808f094 100755 --- a/client/engine/Boot.lib +++ b/client/engine/Boot.lib @@ -37,12 +37,15 @@ #@version 1.1.0 - Nuevo parámetro opcional con opciones de arranque del Kernel. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2015-07-15 +#@version 1.1.1 - UEFI: Permite iniciar linux recien instalados (ticket #802 #890) +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019-03-13 #*/ ## function ogBoot () { # Variables locales. local PART TYPE MNTDIR PARAMS KERNEL INITRD APPEND FILE LOADER f -local EFIDISK EFIPART EFIDIR BOOTLABEL BOOTNO +local EFIDISK EFIPART EFIDIR BOOTLABEL BOOTLOADER BOOTNO DIRGRUB b # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -63,6 +66,8 @@ case "$TYPE" in Linux|Android) # Si no se indican, obtiene los parámetros de arranque para Linux. PARAMS="${3:-$(ogLinuxBootParameters $1 $2 2>/dev/null)}" + # Si no existe y el UEFI buscar en particion ESP + [ -z "$PARAMS" ] && ogIsEfiActive && PARAMS="$(ogLinuxBootParameters $(ogGetEsp))" # Si no existe, buscar sistema de archivo /boot en /etc/fstab. if [ -z "$PARAMS" -a -e $MNTDIR/etc/fstab ]; then # Localizar S.F. /boot en /etc/fstab del S.F. actual. @@ -79,28 +84,39 @@ case "$TYPE" in [ -e "$MNTDIR/etc" ] && APPEND=$(echo $APPEND | awk -v P="$PART " '{sub (/root=[-+=_/a-zA-Z0-9]* /,"root="P);print}') # Comprobar tipo de sistema. if ogIsEfiActive; then - # Obtener parcición EFI. - read -e EFIDISK EFIPART <<<"$(ogGetEsp)" - [ -n "$EFIPART" ] || ogRaiseError $OG_ERR_PARTITION "ESP" || return $? # Comprobar si el Kernel está firmado. if ! file -k "$MNTDIR/$KERNEL" | grep -q "EFI app"; then ogRaiseError $OG_ERR_NOTOS "$1 $2 ($TYPE, EFI)" return $? fi - # Crear directorio para el cargador y copiar los ficheros. - EFIDIR=$(ogMount $EFIDISK $EFIPART) || exit $? + BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) - mkdir -p $EFIDIR/EFI/$BOOTLABEL - cp $MNTDIR/$KERNEL $EFIDIR/EFI/$BOOTLABEL/vmlinuz.efi - cp $MNTDIR/$INITRD $EFIDIR/EFI/$BOOTLABEL/initrd.img - # Borrar cargador guardado con la misma etiqueta. - BOOTNO=$(efibootmgr -v | awk -v L=$BOOTLABEL '{if ($2==L) print $1}') - [ -n "$BOOTNO" ] && efibootmgr -B -b ${BOOTNO:4:4} + BOOTLOADER="shimx64.efi" + # Obtener parcición EFI. + read -e EFIDISK EFIPART <<<"$(ogGetEsp)" + # TODO: Comprobamos que existe la BOOTLABEL, si no buscamos por sistema operativo + if [ "$(ogGetPath $EFIDISK $EFIPART EFI/$BOOTLABEL)" == "" ]; then + OSVERSION="$(ogGetOsVersion $1 $2)" + case $OSVERSION in + *SUSE*) + BOOTLABEL="opensuse" + ;; + *Fedora*) + BOOTLABEL="fedora" + ;; + *Ubuntu*) + BOOTLABEL="ubuntu" + ;; + *) + ogRaiseError $OG_ERR_NOTFOUND "$EFIDISK $EFIPART Boot loader"; return $? + ;; + esac + fi + # Crear orden de arranque (con unos valores por defecto). - efibootmgr -C -d $(ogDiskToDev $EFIDISK) -p $EFIPART -L "$BOOTLABEL" -l /EFI/$BOOTLABEL/vmlinuz.efi -u "initrd=/EFI/$BOOTLABEL/initrd.img $APPEND" + ogNvramAddEntry $BOOTLABEL "/EFI/$BOOTLABEL/Boot/$BOOTLOADER" # Marcar próximo arranque y reiniciar. - BOOTNO=$(efibootmgr -v | awk -v L="$BOOTLABEL" '{if ($2==L) print $1}') - [ -n "$BOOTNO" ] && efibootmgr -n ${BOOTNO:4:4} + ogNvramSetNext "$BOOTLABEL" reboot else # Arranque BIOS: configurar kernel Linux con los parámetros leídos de su GRUB. @@ -111,29 +127,23 @@ case "$TYPE" in Windows) # Comprobar tipo de sistema. if ogIsEfiActive; then + BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) # Obtener parcición EFI. read -e EFIDISK EFIPART <<<"$(ogGetEsp)" [ -n "$EFIPART" ] || ogRaiseError $OG_ERR_PARTITION "ESP" || return $? EFIDIR=$(ogMount $EFIDISK $EFIPART) || exit $? # Comprobar cargador (si no existe buscar por defecto en ESP). - LOADER=$(ogGetPath $1 $2 /Boot/bootmgfw.efi) - [ -z "$LOADER" ] && LOADER=$(ogGetPath $EFIDIR/EFI/Microsoft/Boot/bootmgfw.efi) + LOADER=$(ogGetPath $EFIDIR/EFI/$BOOTLABEL/Boot/bootmgfw.efi) + [ -z "$LOADER" ] && BOOTLABEL=Microsoft && LOADER=$(ogGetPath $EFIDIR/EFI/Microsoft/Boot/bootmgfw.efi) [ -n "$LOADER" ] || ogRaiseError $OG_ERR_NOTOS "$1 $2 ($TYPE, EFI)" || return $? - # Crear directorio para el cargador y copiar los ficheros. - BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) - mkdir -p $EFIDIR/EFI/$BOOTLABEL - cp -a $(dirname "$LOADER") $EFIDIR/EFI/$BOOTLABEL - # Borrar cargador guardado con la misma etiqueta. - BOOTNO=$(efibootmgr -v | awk -v L=$BOOTLABEL '{if ($2==L) print $1}') - [ -n "$BOOTNO" ] && efibootmgr -B -b ${BOOTNO:4:4} + # Crear orden de arranque (con unos valores por defecto). - efibootmgr -C -d $(ogDiskToDev $EFIDISK) -p $EFIPART -L "$BOOTLABEL" -l "/EFI/$BOOTLABEL/Boot/BOOTMGFW.EFI" + ogNvramAddEntry $BOOTLABEL "/EFI${LOADER#*EFI}" # Marcar próximo arranque y reiniciar. - BOOTNO=$(efibootmgr -v | awk -v L="$BOOTLABEL" '{if ($2==L) print $1}') - [ -n "$BOOTNO" ] && efibootmgr -n ${BOOTNO:4:4} + ogNvramSetNext "$BOOTLABEL" reboot else - # Arranque BIOS: compruebar si hay un cargador de Windows. + # Arranque BIOS: comprueba si hay un cargador de Windows. for f in io.sys ntldr bootmgr; do FILE="$(ogGetPath $1 $2 $f 2>/dev/null)" [ -n "$FILE" ] && LOADER="$f" @@ -167,7 +177,7 @@ case "$TYPE" in ;; GrubLoader) # Reiniciar. - reboot + #reboot ;; *) ogRaiseError $OG_ERR_NOTOS "$1 $2 ${TYPE:+($TYPE)}" return $? @@ -471,7 +481,7 @@ fi #TODO, solo si es ntfs o fat PARTYPE=$(ogGetPartitionId $1 $2) case "$PARTYPE" in - 1|4|6|7|b|c|e|f|17|700) + 1|4|6|7|b|c|e|f|17|700|EF00) ;; *) return $(ogRaiseError $OG_ERR_PARTITION; echo $?) @@ -490,9 +500,7 @@ main_part=$PART fix_first_sector=yes EOF -spartlnx.run -cui -nm -a -f $FILE & -sleep 5 -ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null +timeout --foreground --signal=SIGKILL 5s spartlnx.run -cui -nm -a -f $FILE rm -f $FILE } @@ -518,12 +526,15 @@ rm -f $FILE #@version 1.1.0 - Soporte para Windows 10. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2016-01-19 +#@version 1.1.1 - Compatibilidad con UEFI (ticket #802 #889) +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019-01-28 #*/ ## function ogWindowsBootParameters () { # Variables locales. -local PART DISK FILE WINVER MOUNT +local PART DISK BOOTLABEL BCDFILE BOOTDISK BOOTPART FILE WINVER MOUNT # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -541,6 +552,19 @@ ogDiskToDev $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?) let DISK=$1-1 PART=$2 FILE=/tmp/temp$$ +if ogIsEfiActive; then + read BOOTDISK BOOTPART <<< $(ogGetEsp) + ogUnmount $BOOTDISK $BOOTPART || ogRaiseError $OG_ERR_PARTITION "ESP: $BOOTDISK $BOOTPART" || return $? + + let BOOTDISK=$BOOTDISK-1 + BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) + BCDFILE="boot_BCD_file=/EFI/$BOOTLABEL/Boot/BCD" +else + BOOTDISK=$DISK + BOOTPART=$PART + BCDFILE="" +fi + # Obtener versión de Windows. WINVER=$(ogGetOsVersion $1 $2 | awk -F"[: ]" '$1=="Windows" {if ($3=="Server") print $2,$3,$4; else print $2,$3;}') @@ -559,69 +583,94 @@ ogUnmount $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?) #Preparando instruccion Windows Resume Application cat > $FILE <<EOF -boot_disk=$DISK -boot_main_part=$PART +boot_disk=$BOOTDISK +boot_main_part=$BOOTPART +$BCDFILE disk=$DISK main_part=$PART boot_entry=Windows Resume Application EOF -spartlnx.run -cui -nm -w -f $FILE & -sleep 5 -ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null +timeout --foreground --signal=SIGKILL 5s spartlnx.run -cui -nm -w -f $FILE - #Preparando instruccion tipo windows cat > $FILE <<EOF -boot_disk=$DISK -boot_main_part=$PART +boot_disk=$BOOTDISK +boot_main_part=$BOOTPART +$BCDFILE disk=$DISK main_part=$PART boot_entry=$WINVER EOF -spartlnx.run -cui -nm -w -f $FILE & -sleep 5 -ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null - +timeout --foreground --signal=SIGKILL 5s spartlnx.run -cui -nm -w -f $FILE ##Preparando instruccion Ramdisk Options cat > $FILE <<EOF -boot_disk=$DISK -boot_main_part=$PART +boot_disk=$BOOTDISK +boot_main_part=$BOOTPART +$BCDFILE disk=$DISK main_part=$PART boot_entry=Ramdisk Options EOF -spartlnx.run -cui -nm -w -f $FILE & -sleep 5 -ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null +timeout --foreground --signal=SIGKILL 5s spartlnx.run -cui -nm -w -f $FILE +##Preparando instruccion Recovery Environment +cat > $FILE <<EOF +boot_disk=$BOOTDISK +boot_main_part=$BOOTPART +$BCDFILE +disk=$DISK +main_part=$PART +boot_entry=Windows Recovery Environment +EOF +timeout --foreground --signal=SIGKILL 5s spartlnx.run -cui -nm -w -f $FILE -#Preparando instruccion Windows Boot Manager +##Preparando instruccion Recovery cat > $FILE <<EOF -boot_disk=$DISK -boot_main_part=$PART +boot_disk=$BOOTDISK +boot_main_part=$BOOTPART +$BCDFILE disk=$DISK main_part=$PART -boot_entry=Windows Boot Manager +boot_entry=Windows Recovery EOF -spartlnx.run -cui -nm -w -f $FILE & -sleep 5 -ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null +timeout --foreground --signal=SIGKILL 5s spartlnx.run -cui -nm -w -f $FILE +#Preparando instruccion Windows Boot Manager +cat > $FILE <<EOF +boot_disk=$BOOTDISK +boot_main_part=$BOOTPART +$BCDFILE +disk=$BOOTDISK +main_part=$BOOTPART +boot_entry=Windows Boot Manager +EOF +timeout --foreground --signal=SIGKILL 5s spartlnx.run -cui -nm -w -f $FILE #Preparando instruccion Herramienta de diagnóstico de memoria de Windows cat > $FILE <<EOF -boot_disk=$DISK -boot_main_part=$PART -disk=$DISK -main_part=$PART +boot_disk=$BOOTDISK +boot_main_part=$BOOTPART +$BCDFILE +disk=$BOOTDISK +main_part=$BOOTPART boot_entry=Herramienta de diagnóstico de memoria de Windows EOF -spartlnx.run -cui -nm -w -f $FILE & -sleep 5 -ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null +timeout --foreground --signal=SIGKILL 5s spartlnx.run -cui -nm -w -f $FILE + +#Preparando instruccion Herramienta de diagnóstico de memoria de Windows +cat > $FILE <<EOF +boot_disk=$BOOTDISK +boot_main_part=$BOOTPART +$BCDFILE +disk=$BOOTDISK +main_part=$BOOTPART +boot_entry=Herramienta de diagn<f3>stico de memoria de Windows +EOF +timeout --foreground --signal=SIGKILL 5s spartlnx.run -cui -nm -w -f $FILE +rm -f $FILE } @@ -695,9 +744,7 @@ main_part=$REGISTREDPART ;ext_part part_letter=$REGISTREDVOL EOF -spartlnx.run -cui -nm -u -f $FILE & -sleep 5 -ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null +timeout --foreground --signal=SIGKILL 5s spartlnx.run -cui -nm -u -f $FILE } @@ -724,6 +771,12 @@ ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null #@version 1.1.0 - #827 Entrada para el ogLive si el equipo tiene partición cache. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2018-01-21 +#@version 1.1.1 - #802 Equipos EFI: Se crea el grub.cfg de la partición EFI +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019-01-08 +#@version 1.1.1 - #890 UEFI: el grub.cfg original es necesario para obtener los datos del kernel efi: se mueve al final. +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019-03-05 #*/ ## function ogGrubInstallMbr () @@ -731,6 +784,7 @@ function ogGrubInstallMbr () # Variables locales. local PART DISK VERSION FIRSTAGE SECONSTAGE CHECKOS KERNELPARAM BACKUPNAME +local EFIDISK EFIPART EFISECONDSTAGE EFISUBDIR EFIOPTGRUB # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -758,7 +812,7 @@ BACKUPNAME=".backup.og" FIRSTSTAGE=$(ogDiskToDev 1) #localizar disco segunda etapa del grub -SECONDSTAGE=$(ogMount $DISK $PART) +SECONDSTAGE=$(ogMount "$DISK" "$PART") || return $? # prepara el directorio principal de la segunda etapa [ -d ${SECONDSTAGE}/boot/grub/ ] || mkdir -p ${SECONDSTAGE}/boot/grub/ @@ -766,43 +820,82 @@ SECONDSTAGE=$(ogMount $DISK $PART) #Localizar directorio segunda etapa del grub PREFIXSECONDSTAGE="/boot/grubMBR" +# Instalamos grub para EFI en ESP +EFIOPTGRUB="" +if ogIsEfiActive; then + read EFIDISK EFIPART <<< $(ogGetEsp) + # Comprobamos que exista ESP y el directorio para ubuntu + EFISECONDSTAGE=$(ogMount $EFIDISK $EFIPART) + if [ $? -ne 0 ]; then + ogFormat $EFIDISK $EFIPART FAT32 + EFISECONDSTAGE=$(ogMount $EFIDISK $EFIPART) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $? + fi + EFISUBDIR="grub" + # Borramos la configuración anterior + [ -d ${EFISECONDSTAGE}/EFI/$EFISUBDIR ] && rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR + mkdir -p ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot + EFIOPTGRUB=" --removable --no-nvram --uefi-secure-boot --target $(ogGetArch)-efi --efi-directory=${EFISECONDSTAGE}/EFI/$EFISUBDIR " +fi + # Si Reconfigurar segunda etapa (grub.cfg) == FALSE -if [ -f ${SECONDSTAGE}/boot/grub/grub.cfg -o -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ] +if [ "${CHECKOS^^}" == "FALSE" ] && [ -f ${SECONDSTAGE}/boot/grub/grub.cfg -o -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ] then - if [ "$CHECKOS" == "false" -o "$CHECKOS" == "FALSE" ] - then # Si no se reconfigura se utiliza el grub.cfg orginal [ -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ${SECONDSTAGE}/boot/grub/grub.cfg - # Si no se reconfigure se borra los ficheros previos de configuración específicos de opengnsys. + # Si no se reconfigure se borra los ficheros previos de configuración específicos de opengnsys. [ -d ${SECONDSTAGE}${PREFIXSECONDSTAGE} ] && rm -fr ${SECONDSTAGE}${PREFIXSECONDSTAGE} - # Reactivamos el grub con el grub.cfg original. - grub-install --force --root-directory=${SECONDSTAGE} $FIRSTSTAGE - return $? - fi -fi + PREFIXSECONDSTAGE="" +else + # SI Reconfigurar segunda etapa (grub.cfg) == TRUE -# SI Reconfigurar segunda etapa (grub.cfg) == TRUE + #llamada a updateBootCache para que aloje la primera fase del ogLive + updateBootCache -#llamada a updateBootCache para que aloje la primera fase del ogLive -updateBootCache + if ogIsEfiActive; then + # UEFI: grubSintax necesita grub.cfg para detectar los kernels: si no existe recupero backup. + if ! [ -f ${SECONDSTAGE}/boot/grub/grub.cfg ]; then + [ -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ${SECONDSTAGE}/boot/grub/grub.cfg + fi + else + #Evitar detectar modo recovery - mover grub.cfg original a grub.cfg.backup + mv ${SECONDSTAGE}/boot/grub/grub.cfg ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME + fi -#Configur la sintaxis grub para evitar menus de "recovery" en el OGLive -echo "GRUB_DISABLE_RECOVERY=\"true\"" >> /etc/default/grub -echo "GRUB_DISABLE_LINUX_UUID=\"true\"" >> /etc/default/grub + #Configur la sintaxis grub para evitar menus de "recovery" en el OGLive + echo "GRUB_DISABLE_RECOVERY=\"true\"" >> /etc/default/grub + echo "GRUB_DISABLE_LINUX_UUID=\"true\"" >> /etc/default/grub -#Evitar detectar modo recovery - mover grub.cfg original a grub.cfg.backup -[ -f ${SECONDSTAGE}/boot/grub/grub.cfg ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME -#Preparar configuración segunda etapa: crear ubicacion -mkdir -p ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/ -#Preparar configuración segunda etapa: crear cabecera del fichero (ignorar errores) -sed -i 's/^set -e/#set -e/' /etc/grub.d/00_header -/etc/grub.d/00_header > ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg 2>/dev/null -#Preparar configuración segunda etapa: crear entrada del sistema operativo -grubSyntax "$KERNELPARAM" >> ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg + #Preparar configuración segunda etapa: crear ubicacion + mkdir -p ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/ + #Preparar configuración segunda etapa: crear cabecera del fichero (ignorar errores) + sed -i 's/^set -e/#set -e/' /etc/grub.d/00_header + # (ogLive 5.0) Si 'pkgdatadir' está vacía ponemos valor de otros ogLive + sed -i '/grub-mkconfig_lib/i\pkgdatadir=${pkgdatadir:-"${datarootdir}/grub"}' /etc/grub.d/00_header + /etc/grub.d/00_header > ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg 2>/dev/null + + #Preparar configuración segunda etapa: crear entrada del sistema operativo + grubSyntax "$KERNELPARAM" >> ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg + + # Renombramos la configuración de grub antigua + [ -f ${SECONDSTAGE}/boot/grub/grub.cfg ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME + +fi + +#Instalar el grub +grub-install --force ${EFIOPTGRUB} --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE +EVAL=$? + +# Movemos el grubx64.efi +if ogIsEfiActive; then + mv ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI/BOOT/* ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot + rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI + cp /usr/lib/shim/shimx64.efi.signed ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot + # Nombre OpenGnsys para cargador + cp ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/{shimx64.efi.signed,ogloader.efi} +fi +return $EVAL -#Instalar el grub -grub-install --force --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE } @@ -824,6 +917,12 @@ grub-install --force --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTS #@version 1.0.3 - Ficheros de configuracion independientes segun ubicación de la priemra etapa #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2012-03-13 +#@version 1.1.1 - #802 Equipos EFI: Se crea el grub.cfg de la partición EFI +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019-01-08 +#@version 1.1.1 - #890 UEFI: el grub.cfg original es necesario para obtener los datos del kernel efi: se mueve al final. +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019-03-05 #*/ ## function ogGrubInstallPartition () @@ -831,6 +930,7 @@ function ogGrubInstallPartition () # Variables locales. local PART DISK VERSION FIRSTAGE SECONSTAGE CHECKOS KERNELPARAM BACKUPNAME +local EFIDISK EFIPART EFISECONDSTAGE EFISUBDIR EFIOPTGRUB EFIBOOTDIR # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -861,39 +961,77 @@ SECONDSTAGE=$(ogMount $DISK $PART) #Localizar directorio segunda etapa del grub PREFIXSECONDSTAGE="/boot/grubPARTITION" +# Si es EFI instalamos el grub en la ESP +EFIOPTGRUB="" +# Desde el bootdir uefi y bios buscan el grub.cfg en subdirectorios distintos. +EFIBOOTDIR="" +if ogIsEfiActive; then + read EFIDISK EFIPART <<< $(ogGetEsp) + # Comprobamos que exista ESP y el directorio para ubuntu + EFISECONDSTAGE=$(ogMount $EFIDISK $EFIPART) + if [ $? -ne 0 ]; then + ogFormat $EFIDISK $EFIPART FAT32 + EFISECONDSTAGE=$(ogMount $EFIDISK $EFIPART) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $? + fi + EFISUBDIR=$(printf "Part-%02d-%02d" $DISK $PART) + # Borramos la configuración anterior + [ -d ${EFISECONDSTAGE}/EFI/$EFISUBDIR ] && rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR + mkdir -p ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot + EFIOPTGRUB=" --removable --no-nvram --uefi-secure-boot --target $(ogGetArch)-efi --efi-directory=${EFISECONDSTAGE}/EFI/$EFISUBDIR " + EFIBOOTDIR="/boot" +fi + # Si Reconfigurar segunda etapa (grub.cfg) == FALSE -if [ -f ${SECONDSTAGE}/boot/grub/grub.cfg -o -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ] +if [ "${CHECKOS^^}" == "FALSE" ] && [ -f ${SECONDSTAGE}/boot/grub/grub.cfg -o -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ] then - if [ "$CHECKOS" == "false" -o "$CHECKOS" == "FALSE" ] - then # Si no se reconfigura se utiliza el grub.cfg orginal [ -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ${SECONDSTAGE}/boot/grub/grub.cfg - # Si no se reconfigure se borra los ficheros previos de configuración específicos de opengnsys. + # Si no se reconfigure se borra los ficheros previos de configuración específicos de opengnsys. [ -d ${SECONDSTAGE}${PREFIXSECONDSTAGE} ] && rm -fr ${SECONDSTAGE}${PREFIXSECONDSTAGE} # Reactivamos el grub con el grub.cfg original. - grub-install --force --root-directory=${SECONDSTAGE} $FIRSTSTAGE - return $? - fi -fi + PREFIXSECONDSTAGE="" +else + # SI Reconfigurar segunda etapa (grub.cfg) == TRUE -# SI Reconfigurar segunda etapa (grub.cfg) == TRUE -#Configur la sintaxis grub para evitar menus de "recovery" en el OGLive -echo "GRUB_DISABLE_RECOVERY=\"true\"" >> /etc/default/grub -echo "GRUB_DISABLE_LINUX_UUID=\"true\"" >> /etc/default/grub + if ogIsEfiActive; then + # UEFI: grubSintax necesita grub.cfg para detectar los kernels: si no existe recupero backup. + if ! [ -f ${SECONDSTAGE}/boot/grub/grub.cfg ]; then + [ -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ${SECONDSTAGE}/boot/grub/grub.cfg + fi + else + #Evitar detectar modo recovery - mover grub.cfg original a grub.cfg.backup + mv ${SECONDSTAGE}/boot/grub/grub.cfg ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME + fi -#Evitar detectar modo recovery - mover grub.cfg original a grub.cfg.backup.og -[ -f ${SECONDSTAGE}/boot/grub/grub.cfg ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME + #Configur la sintaxis grub para evitar menus de "recovery" en el OGLive + echo "GRUB_DISABLE_RECOVERY=\"true\"" >> /etc/default/grub + echo "GRUB_DISABLE_LINUX_UUID=\"true\"" >> /etc/default/grub -#Preparar configuración segunda etapa: crear ubicacion -mkdir -p ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/ -#Preparar configuración segunda etapa: crear cabecera del fichero (ingnorar errores) -sed -i 's/^set -e/#set -e/' /etc/grub.d/00_header -/etc/grub.d/00_header > ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg 2>/dev/null -#Preparar configuración segunda etapa: crear entrada del sistema operativo -grubSyntax $DISK $PART "$KERNELPARAM" >> ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg + #Preparar configuración segunda etapa: crear ubicacion + mkdir -p ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/ + #Preparar configuración segunda etapa: crear cabecera del fichero (ingnorar errores) + sed -i 's/^set -e/#set -e/' /etc/grub.d/00_header + # (ogLive 5.0) Si 'pkgdatadir' está vacía ponemos valor de otros ogLive + sed -i '/grub-mkconfig_lib/i\pkgdatadir=${pkgdatadir:-"${datarootdir}/grub"}' /etc/grub.d/00_header + /etc/grub.d/00_header > ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg 2>/dev/null + #Preparar configuración segunda etapa: crear entrada del sistema operativo + grubSyntax $DISK $PART "$KERNELPARAM" >> ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg +fi #Instalar el grub -grub-install --force --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE +grub-install --force ${EFIOPTGRUB} --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE +EVAL=$? + +# Movemos el grubx64.efi +if ogIsEfiActive; then + mv ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI/BOOT/* ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot + rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI + cp /usr/lib/shim/shimx64.efi.signed ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/shimx64.efi + # Nombre OpenGnsys para cargador + cp ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/{shimx64.efi,ogloader.efi} +fi + +return $EVAL } @@ -912,11 +1050,15 @@ grub-install --force --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTS #@version 1.0.6b - correccion. Si no hay partición fisica para la SWAP, eliminar entrada del fstab. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2016-11-03 +#@version 1.1.1 - Se configura la partición ESP (para sistemas EFI) (ticket #802) +#@author Irina Gómez, ETSII Universidad de Sevilla +#@date 2018-12-13 #*/ ## function ogConfigureFstab () { # Variables locales. local FSTAB DEFROOT PARTROOT DEFSWAP PARTSWAP +local EFIDISK EFIPART EFIDEV EFIOPT # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -954,9 +1096,19 @@ else echo "No hay partición SWAP -> configuramos FSTAB" # Mensaje temporal. sed "/swap/d" ${FSTAB}.backup > ${FSTAB} fi -} +# Si es un sistema EFI incluimos partición ESP (Si existe la modificamos) +if ogIsEfiActive; then + read EFIDISK EFIPART <<< $(ogGetEsp) + EFIDEV=$(ogDiskToDev $EFIDISK $EFIPART) + # Opciones de la partición ESP: si no existe ponemos un valor por defecto + EFIOPT=$(awk '$1!~/#/ && $2=="/boot/efi" {print $3"\t"$4"\t"$5"\t"$6 }' ${FSTAB}) + [ "$EFIOPT" == "" ] && EFIOPT='vfat\tumask=0077\t0\t1' + sed -i /"boot\/efi"/d ${FSTAB} + echo -e "$EFIDEV\t/boot/efi\t$EFIOPT" >> ${FSTAB} +fi +} #/** # ogSetLinuxName int_ndisk int_nfilesys [str_name] @@ -1188,6 +1340,8 @@ function ogBurgHidePartitions () #@brief Configura el grub/burg para que oculte las particiones de windows que no se esten iniciando. #@param 1 Numero de disco #@param 2 Numero de particion +#@param 3 Numero de disco de la partición de datos (no ocultar) +#@param 4 Numero de particion de datos (no ocultar) #@return (nada) #@exception OG_ERR_FORMAT Formato incorrecto. #@exception No existe archivo de configuracion del grub/burg. @@ -1200,11 +1354,14 @@ function ogBurgHidePartitions () #@version 1.1.1 Se incluye comentarios en codigo para autodocuemtnacion con Doxygen #@author Antonio J. Doblas Viso, EVLT Univesidad de Malaga. #@date 2018-07-05 +#@version Se permite una partición de datos que no se ocultará. Soporta más de un disco. Compatible con grub.cfg creado por ogLive 5.0 +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019-08-26 #*/ function ogBootLoaderHidePartitions () { - local FUNC DIRMOUNT GFCFILE PARTTABLETYPE WINENTRY ENTRY PART TEXT LINE2 PART2 HIDDEN + local FUNC DIRMOUNT GFCFILE PARTTABLETYPE WINENTRY WINPART ENTRY LINE PART PARTDATA TEXT PARTHIDDEN HIDDEN # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -1217,11 +1374,13 @@ function ogBootLoaderHidePartitions () FUNC="${FUNC%%\ *}" # Error si no se reciben 2 parámetros. - [ $# -lt 2 ] && return $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part"; echo $?) + [ $# -lt 2 ] && return $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part [ num_disk_partdata num_partdata ]"; echo $?) + # Si no existe $4 pongo un valor imposible para la partición de datos + [ $# -eq 4 ] && PARTDATA=$(ogDiskToDev $3 $4) || PARTDATA=0 # Archivo de configuracion del grub DIRMOUNT=$(ogMount $1 $2) - # La función debe ser llamanda desde ogGrubHidePartitions or ogBurgHidePartitions. + # La función debe ser llamanda desde ogGrubHidePartitionsCdc or ogBurgHidePartitionsCdc. case "$FUNC" in ogGrubHidePartitions) CFGFILE="$DIRMOUNT/boot/grubMBR/boot/grub/grub.cfg" @@ -1230,7 +1389,7 @@ function ogBootLoaderHidePartitions () CFGFILE="$DIRMOUNT/boot/burg/burg.cfg" ;; *) - ogRaiseError $OG_ERR_FORMAT "Use ogGrubHidePartitions or ogBurgHidePartitions." + ogRaiseError $OG_ERR_FORMAT "Use ogGrubHidePartitionsCdc or ogBurgHidePartitionsCdc." return $? ;; esac @@ -1239,37 +1398,41 @@ function ogBootLoaderHidePartitions () [ -r $CFGFILE ] || return $(ogRaiseError log session $OG_ERR_NOTFOUND "$CFGFILE" 1>&2; echo $?) # Si solo hay una particion de Windows me salgo - [ $(fdisk -l $(ogDiskToDev $1) | grep 'NTFS' |wc -l) -eq 1 ] && return 0 + [ $(fdisk -l $(ogDiskToDev) | grep 'NTFS' |wc -l) -eq 1 ] && return 0 # Elimino llamadas a parttool, se han incluido en otras ejecuciones de esta funcion. sed -i '/parttool/d' $CFGFILE PARTTABLETYPE=$(ogGetPartitionTableType $1 | tr [:upper:] [:lower:]) + # /* (comentario de bloque para Doxygen) # Entradas de Windows: numero de linea y particion. De mayor a menor. - WINENTRY=$(awk '/menuentry.*Windows/ {gsub(/\)\"/, ""); print NR":"$6} ' $CFGFILE | sed -e '1!G;h;$!d' -e s/[a-z\/]//g) + WINENTRY=$(awk '/menuentry.*Windows/ {gsub(/\)\"/, ""); gsub(/^.*dev/,""); print NR":/dev"$1} ' $CFGFILE | sed -e '1!G;h;$!d') #*/ (comentario para bloque Doxygen) # Particiones de Windows, pueden no estar en el grub. - WINPART=$(fdisk -l $(ogDiskToDev $1)|awk '/NTFS/ {print substr($1,9,1)}' |sed '1!G;h;$!d') + WINPART=$(fdisk -l $(ogDiskToDev)|awk '/NTFS/ {print $1}'|sed '1!G;h;$!d') + + # Modifico todas las entradas de Windows. for ENTRY in $WINENTRY; do LINE=${ENTRY%:*} - PART=${ENTRY#*:} + PART=${ENTRY#*:} + # En cada entrada, oculto o muestro cada particion. TEXT="" - for PART2 in $WINPART; do - # Muestro solo la particion de la entrada actual. - [ $PART2 -eq $PART ] && HIDDEN="-" || HIDDEN="+" + for PARTHIDDEN in $WINPART; do + # Muestro la particion de la entrada actual y la de datos. + [ "$PARTHIDDEN" == "$PART" -o "$PARTHIDDEN" == "$PARTDATA" ] && HIDDEN="-" || HIDDEN="+" + read NUMDISK NUMPART <<< $(ogDevToDisk $PARTHIDDEN) - TEXT="\tparttool (hd0,$PARTTABLETYPE$PART2) hidden$HIDDEN \n$TEXT" + TEXT="\tparttool (hd$((NUMDISK-1)),$PARTTABLETYPE$NUMPART) hidden$HIDDEN \n$TEXT" done - + sed -i "${LINE}a\ $TEXT" $CFGFILE done # Activamos la particion que se inicia en todas las entradas de windows. sed -i "/chainloader/i\\\tparttool \$\{root\} boot+" $CFGFILE - } #/** @@ -1307,13 +1470,32 @@ function ogBurgDeleteEntry () } #/** +# ogRefindDeleteEntry num_disk_delete num_part_delete +#@brief ver ogBootLoaderDeleteEntry +#@see ogBootLoaderDeleteEntry +#*/ +function ogRefindDeleteEntry () +{ + local EFIDISK EFIPART + # Si se solicita, mostrar ayuda. + if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_disk_delete int_npartition_delete" \ + "$FUNCNAME 2 1" + return + fi + read EFIDISK EFIPART <<< $(ogGetEsp) + ogBootLoaderDeleteEntry $EFIDISK $EFIPART $@ + return $? +} + +#/** # ogBootLoaderDeleteEntry num_disk num_part num_part_delete #@brief Borra en el grub las entradas para el inicio en una particion. #@param 1 Numero de disco donde esta el grub #@param 2 Numero de particion donde esta el grub #@param 3 Numero del disco del que borramos las entradas #@param 4 Numero de la particion de la que borramos las entradas -#@note Tiene que ser llamada desde ogGrubDeleteEntry o ogBurgDeleteEntry +#@note Tiene que ser llamada desde ogGrubDeleteEntry, ogBurgDeleteEntry o ogRefindDeleteEntry #@return (nada) #@exception OG_ERR_FORMAT Use ogGrubDeleteEntry or ogBurgDeleteEntry. #@exception OG_ERR_FORMAT Formato incorrecto. @@ -1325,11 +1507,11 @@ function ogBurgDeleteEntry () function ogBootLoaderDeleteEntry () { - local FUNC DIRMOUNT CFGFILE DEVICE MENUENTRY DELETEENTRY ENDENTRY ENTRY + local FUNC DIRMOUNT CFGFILE LABEL MENUENTRY DELETEENTRY ENDENTRY ENTRY # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$MSG_SEE ogBurgDeleteEntry ogGrubDeleteEntry" + ogHelp "$FUNCNAME" "$MSG_SEE ogBurgDeleteEntry, ogGrubDeleteEntry or ogRefindDeleteEntry" return fi @@ -1343,7 +1525,7 @@ function ogBootLoaderDeleteEntry () # Archivo de configuracion del grub DIRMOUNT=$(ogMount $1 $2) - # La función debe ser llamanda desde ogGrubDeleteEntry or ogBurgDeleteEntry. + # La función debe ser llamanda desde ogGrubDeleteEntry, ogBurgDeleteEntry or ogRefindDeleteEntry. case "$FUNC" in ogGrubDeleteEntry) CFGFILE="$DIRMOUNT/boot/grubMBR/boot/grub/grub.cfg" @@ -1351,26 +1533,33 @@ function ogBootLoaderDeleteEntry () ogBurgDeleteEntry) CFGFILE="$DIRMOUNT/boot/burg/burg.cfg" ;; + ogRefindDeleteEntry) + CFGFILE="$DIRMOUNT/EFI/refind/refind.conf" + ;; *) - ogRaiseError $OG_ERR_FORMAT "Use ogGrubDeleteEntry or ogBurgDeleteEntry." + ogRaiseError $OG_ERR_FORMAT "Use ogGrubDeleteEntry, ogBurgDeleteEntry or ogRefindDeleteEntry." return $? ;; esac # Dispositivo - DEVICE=$(ogDiskToDev $3 $4) + if [ "$(basename $CFGFILE)" == "refind.conf" ]; then + LABEL=$(printf "Part-%02d-%02d" $3 $4) + else + LABEL=$(ogDiskToDev $3 $4) + fi - # Error si no existe archivo del grub) + # Error si no existe archivo de configuración [ -r $CFGFILE ] || ogRaiseError log session $OG_ERR_NOTFOUND "$CFGFILE" || return $? # Numero de linea de cada entrada. MENUENTRY="$(grep -n -e menuentry $CFGFILE| cut -d: -f1 | sed '1!G;h;$!d' )" # Entradas que hay que borrar. - DELETEENTRY=$(grep -n menuentry.*$DEVICE $CFGFILE| cut -d: -f1) + DELETEENTRY=$(grep -n menuentry.*$LABEL $CFGFILE| cut -d: -f1) # Si no hay entradas para borrar me salgo con aviso - [ "$DELETEENTRY" != "" ] || ogRaiseError log session $OG_ERR_NOTFOUND "Menuentry $DEVICE" || return $? + [ "$DELETEENTRY" != "" ] || ogRaiseError log session $OG_ERR_NOTFOUND "Menuentry $LABEL" || return $? # Recorremos el fichero del final hacia el principio. ENDENTRY="$(wc -l $CFGFILE|cut -d" " -f1)" @@ -1569,7 +1758,6 @@ EOF #Preparar configuración segunda etapa: crear entrada del sistema operativo grubSyntax "$KERNELPARAM" >> "$FILECFG" - #Instalar el burg burg-install --force --root-directory=${SECONDSTAGE} $FIRSTSTAGE 2>&1>/dev/null } @@ -1608,6 +1796,27 @@ function ogBurgDefaultEntry () return $? } + +#/** +# ogRefindDefaultEntry int_disk_default_entry int_npartition_default_entry +#@brief ver ogBootLoaderDefaultEntry +#@see ogBootLoaderDefaultEntry +#*/ ## +function ogRefindDefaultEntry () +{ + local EFIDISK EFIPART + # Si se solicita, mostrar ayuda. + if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_disk_default_entry int_npartition_default_entry" \ + "$FUNCNAME 1 1" + return + fi + + read EFIDISK EFIPART <<< $(ogGetEsp) + ogBootLoaderDefaultEntry $EFIDISK $EFIPART $@ + return $? +} + #/** # ogBootLoaderDefaultEntry int_disk_CFG int_partition_CFG int_disk_default_entry int_npartition_default_entry #@brief Configura la entrada por defecto de Burg @@ -1631,11 +1840,11 @@ function ogBootLoaderDefaultEntry () { # Variables locales. -local PART CFGFILE DEFAULTENTRY MSG +local PART FUNC DIRMOUNT LABEL CFGFILE DEFAULTENTRY MENUENTRY MSG # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$MSG_SEE ogGrubDefaultEntry ogBurgDefaultEntry" + ogHelp "$FUNCNAME" "$MSG_SEE ogGrubDefaultEntry, ogBurgDefaultEntry or ogRefindDefaultEntry." return fi @@ -1650,7 +1859,7 @@ FUNC="${FUNC%%\ *}" DIRMOUNT=$(ogMount $1 $2) || return $? # Comprobamos que exista fichero de configuración -# La función debe ser llamanda desde ogGrubDefaultEntry or ogBurgDefaultEntry. +# La función debe ser llamanda desde ogGrubDefaultEntry, ogBurgDefaultEntry or ogRefindDefaultEntry. case "$FUNC" in ogGrubDefaultEntry) CFGFILE="$DIRMOUNT/boot/grubMBR/boot/grub/grub.cfg" @@ -1658,8 +1867,11 @@ case "$FUNC" in ogBurgDefaultEntry) CFGFILE="$DIRMOUNT/boot/burg/burg.cfg" ;; + ogRefindDefaultEntry) + CFGFILE="$DIRMOUNT/EFI/refind/refind.conf" + ;; *) - ogRaiseError $OG_ERR_FORMAT "Use ogGrubDefaultEntry or ogBurgDefaultEntry." + ogRaiseError $OG_ERR_FORMAT "Use ogGrubDefaultEntry, ogBurgDefaultEntry or ogRefindDefaultEntry." return $? ;; esac @@ -1668,19 +1880,29 @@ esac [ -r $CFGFILE ] || ogRaiseError $OG_ERR_NOTFOUND "$CFGFILE" || return $? # Dispositivo -DEVICE=$(ogDiskToDev $3 $4) +if [ "$(basename $CFGFILE)" == "refind.conf" ]; then + LABEL=$(printf "Part-%02d-%02d" $3 $4) +else + LABEL=$(ogDiskToDev $3 $4) +fi # Número de línea de la entrada por defecto en CFGFILE (primera de la partición). -DEFAULTENTRY=$(grep -n -m 1 menuentry.*$DEVICE $CFGFILE| cut -d: -f1) +DEFAULTENTRY=$(grep -n -m 1 menuentry.*$LABEL $CFGFILE| cut -d: -f1) # Si no hay entradas para borrar me salgo con aviso -[ "$DEFAULTENTRY" != "" ] || ogRaiseError session log $OG_ERR_NOTFOUND "No menuentry $DEVICE" || return $? +[ "$DEFAULTENTRY" != "" ] || ogRaiseError session log $OG_ERR_NOTFOUND "No menuentry $LABEL" || return $? # Número de la de linea por defecto en el menú de usuario MENUENTRY="$(grep -n -e menuentry $CFGFILE| cut -d: -f1 | grep -n $DEFAULTENTRY |cut -d: -f1)" -# Las líneas empiezan a contar desde cero -let MENUENTRY=$MENUENTRY-1 -sed --regexp-extended -i s/"set default=\"?[0-9]*\"?"/"set default=\"$MENUENTRY\""/g $CFGFILE + +if [ "$(basename $CFGFILE)" == "refind.conf" ]; then + sed -i /default_selection.*$/d $CFGFILE + sed -i "1 i\default_selection $MENUENTRY" $CFGFILE +else + # En grub y burg las líneas empiezan a contar desde cero + let MENUENTRY=$MENUENTRY-1 + sed --regexp-extended -i s/"set default=\"?[0-9]*\"?"/"set default=\"$MENUENTRY\""/g $CFGFILE +fi MSG="MSG_HELP_$FUNC" echo "${!MSG%%\.}: $@" } @@ -1719,6 +1941,28 @@ function ogBurgOgliveDefaultEntry () return $? } + +#/** +# ogRefindOgliveDefaultEntry +#@brief ver ogBootLoaderOgliveDefaultEntry +#@see ogBootLoaderOgliveDefaultEntry +#*/ ## +function ogRefindOgliveDefaultEntry () +{ + local EFIDISK EFIPART + # Si se solicita, mostrar ayuda. + if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME" \ + "$FUNCNAME" + return + fi + + read EFIDISK EFIPART <<< $(ogGetEsp) + ogBootLoaderOgliveDefaultEntry $EFIDISK $EFIPART + return $? +} + + #/** # ogBootLoaderOgliveDefaultEntry #@brief Configura la entrada de ogLive como la entrada por defecto de Burg. @@ -1744,7 +1988,7 @@ local FUNC PART CFGFILE NUMENTRY MSG # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$MSG_SEE ogGrubOgliveDefaultEntry ogBurgOgliveDefaultEntry" \ + ogHelp "$FUNCNAME" "$MSG_SEE ogGrubOgliveDefaultEntry, ogBurgOgliveDefaultEntry or ogRefindOgliveDefaultEntry" \ return fi @@ -1757,7 +2001,7 @@ FUNC="${FUNC%%\ *}" # Error si no puede montar sistema de archivos. PART=$(ogMount $1 $2) || return $? -# La función debe ser llamanda desde ogGrubOgliveDefaultEntry or ogBurgOgliveDefaultEntry. +# La función debe ser llamanda desde ogGrubOgliveDefaultEntry, ogBurgOgliveDefaultEntry or ogRefindOgliveDefaultEntry. case "$FUNC" in ogGrubOgliveDefaultEntry) CFGFILE="$PART/boot/grubMBR/boot/grub/grub.cfg" @@ -1765,8 +2009,11 @@ case "$FUNC" in ogBurgOgliveDefaultEntry) CFGFILE="$PART/boot/burg/burg.cfg" ;; + ogRefindOgliveDefaultEntry) + CFGFILE="$PART/EFI/refind/refind.conf" + ;; *) - ogRaiseError $OG_ERR_FORMAT "Use ogGrubOgliveDefaultEntry or ogBurgOgliveDefaultEntry." + ogRaiseError $OG_ERR_FORMAT "Use ogGrubOgliveDefaultEntry, ogBurgOgliveDefaultEntry or ogRefindOgliveDefaultEntry." return $? ;; esac @@ -1780,8 +2027,14 @@ NUMENTRY=$(grep ^menuentry $CFGFILE| grep -n "OpenGnsys Live"|cut -d: -f1) # Si no existe entrada de ogLive nos salimos [ -z "$NUMENTRY" ] && (ogRaiseError $OG_ERR_NOTFOUND "menuentry OpenGnsys Live in $CFGFILE" || return $?) -let NUMENTRY=$NUMENTRY-1 -sed --regexp-extended -i s/"set default=\"?[0-9]+\"?"/"set default=\"$NUMENTRY\""/g $CFGFILE +if [ "$(basename $CFGFILE)" == "refind.conf" ]; then + sed -i /default_selection.*$/d $CFGFILE + + sed -i "1 i\default_selection $NUMENTRY" $CFGFILE +else + let NUMENTRY=$NUMENTRY-1 + sed --regexp-extended -i s/"set default=\"?[0-9]+\"?"/"set default=\"$NUMENTRY\""/g $CFGFILE +fi MSG="MSG_HELP_$FUNC" echo "${!MSG%%\.}: $@" @@ -1827,6 +2080,42 @@ function ogBurgSetTheme () } +#/** +# ogRefindSetTheme str_theme +#@brief ver ogBootLoaderSetTheme +#@see ogBootLoaderSetTheme +#*/ ## +function ogRefindSetTheme () { + local PART DIRTHEME CFGFILE + # Si se solicita, mostrar ayuda. + if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME str_themeName" \ + "$FUNCNAME ThemeBasic" + echo -e "\nThemes in $OGLIB/refind:\n$(ls $OGLIB/refind/themes/ 2>/dev/null)" + + return + fi + + # Detectamos partición ESP + read EFIDISK EFIPART <<< $(ogGetEsp) + + PART=$(ogMount $EFIDISK $EFIPART) || return $? + DIRTHEME="$PART/EFI/refind/themes" + CFGFILE="$PART/EFI/refind/refind.conf" + + # Para utilizar ogBootLoaderSetTheme es necesario la entrada set theme_name + if [ -f $CFGFILE ]; then + sed -i '1 i\set theme_name=none' $CFGFILE + else + ogRaiseError $OG_ERR_NOTFOUND "$CFGFILE" || return $? + fi + # Creamos el directorio para los temas + [ -d $DIRTHEME ] || mkdir $DIRTHEME + + ogBootLoaderSetTheme $EFIDISK $EFIPART $@ + return $? +} + #/** # ogBootLoaderSetTheme @@ -1837,21 +2126,26 @@ function ogBurgSetTheme () #@return #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_PARTITION Partición errónea o desconocida (ogMount). -#@exception OG_ERR_NOTFOUND Fichero de configuración no encontrado: grub.cfg burg.cfg. +#@exception OG_ERR_NOTFOUND Fichero de configuración no encontrado: grub.cfg burg.cfg refind.conf. #@exception OG_ERR_NOTFOUND Entrada deltema no encontrada en burg.cfg. +#@exception OG_ERR_NOTFOUND Fichero de configuración del tema no encontrado: theme.conf (sólo refind). +#@note El tema debe situarse en OGLIB/BOOTLOADER/themes #@version 1.1.0 - Primeras pruebas con Burg. grub no soportado. #@author Antonio J. Doblas Viso. Universidad de Malaga #@date 2018-01-24 +#@version 1.1.1 - Soporta rEFInd (ticket #802 #888). +#@author Irina Gomez. Universidad de Sevilla +#@date 2019-03-22 #*/ ## function ogBootLoaderSetTheme () { # Variables locales. -local FUNC PART CFGFILE THEME NEWTHEME BOOTLOADER MSG +local FUNC PART CFGFILE THEME NEWTHEME BOOTLOADER MSG NEWTHEMECFG # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$MSG_SEE ogGrubSetTheme ogBurgSetTheme" + ogHelp "$FUNCNAME" "$MSG_SEE ogGrubSetTheme, ogBurgSetTheme or ogRefindSetTheme." return fi @@ -1864,27 +2158,32 @@ FUNC="${FUNC%%\ *}" -# Error si no se reciben 2 parametros. +# Error si no se reciben 3 parametros. [ $# -eq 3 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndiskSecondStage int_partitionSecondStage str_themeName" || return $? # Error si no puede montar sistema de archivos. PART=$(ogMount $1 $2) || return $? -# La función debe ser llamanda desde ogGrubSetTheme or ogBurgSetTheme. +# La función debe ser llamanda desde ogGrubSetTheme, ogBurgSetTheme or ogRefindSetTheme. case "$FUNC" in ogGrubSetTheme) - BOOTLOADER="grug" - BOOTLOADERDIR="grubMBR" + BOOTLOADER="grub" + BOOTLOADERDIR="boot/grubMBR" CFGFILE="$PART/boot/grubMBR/boot/grub/grub.cfg" ogRaiseError $OG_ERR_FORMAT "ogGrubSetTheme not sopported" return $? ;; ogBurgSetTheme) BOOTLOADER="burg" - BOOTLOADERDIR="burg" + BOOTLOADERDIR="boot/burg" CFGFILE="$PART/boot/burg/burg.cfg" ;; + ogRefindSetTheme) + BOOTLOADER="refind" + BOOTLOADERDIR="EFI/refind" + CFGFILE="$PART/EFI/refind/refind.conf" + ;; *) - ogRaiseError $OG_ERR_FORMAT "Use ogGrubSetTheme or ogBurgSetTheme." + ogRaiseError $OG_ERR_FORMAT "Use ogGrubSetTheme, ogBurgSetTheme or ogRefindSetTheme." return $? ;; esac @@ -1894,22 +2193,29 @@ esac # Detectamos cual es el tema asignado THEME=$(grep "set theme_name=" $CFGFILE | grep ^set | cut -d= -f2) - # Si no existe entrada de theme_name nos salimos [ -z "$THEME" ] && (ogRaiseError $OG_ERR_NOTFOUND "theme_name in $CFGFILE" || return $?) #Actualizamos el tema del servidor a la particion if [ -d $OGLIB/$BOOTLOADER/themes/$NEWTHEME ]; then - cp -pr $OGLIB/$BOOTLOADER/themes/$NEWTHEME $PART/boot/$BOOTLOADERDIR/themes/ + # Para refind es necesario que exista theme.conf en el directorio del tema. + if [ "$BOOTLOADER" == "refind" ]; then + NEWTHEMECFG="$OGLIB/$BOOTLOADER/themes/$NEWTHEME/theme.conf" + [ -f $NEWTHEMECFG ] || ogRaiserError $OG_ERR_NOTFOUND "theme.conf" || return $? + grep -v "^#" $NEWTHEMECFG >> $CFGFILE + # eliminamos "set theme" es de grub y no de refind + sed -i '/theme_name/d' $CFGFILE + fi + cp -pr $OGLIB/$BOOTLOADER/themes/$NEWTHEME $PART/$BOOTLOADERDIR/themes/ fi #Verificamos que el tema esta en la particion -if ! [ -d $PART/boot/$BOOTLOADERDIR/themes/$NEWTHEME ]; then - ogRaiseError $OG_ERR_NOTFOUND "theme_name=$NEWTHEME in $PART/boot/$BOOTLOADERDIR/themes/" || return $? +if ! [ -d $PART/$BOOTLOADERDIR/themes/$NEWTHEME ]; then + ogRaiseError $OG_ERR_NOTFOUND "theme_name=$NEWTHEME in $PART/$BOOTLOADERDIR/themes/" || return $? fi #Cambiamos la entrada el fichero de configuración. -sed --regexp-extended -i s/"$THEME"/"$NEWTHEME"/g $CFGFILE +sed --regexp-extended -i s/"set theme_name=$THEME"/"set theme_name=$NEWTHEME"/g $CFGFILE } @@ -1993,7 +2299,7 @@ PART=$(ogMount $1 $2) || return $? # La función debe ser llamanda desde ogGrubSetAdminKeys or ogBurgSetAdminKeys. case "$FUNC" in ogGrubSetAdminKeys) - BOOTLOADER="grug" + BOOTLOADER="grub" BOOTLOADERDIR="grubMBR" CFGFILE="$PART/boot/grubMBR/boot/grub/grub.cfg" ogRaiseError $OG_ERR_FORMAT "ogGrubSetAdminKeys not sopported" @@ -2068,6 +2374,25 @@ function ogBurgSetTimeOut () } +#/** +# ogRefindSetTimeOut int_timeout_second +#@brief ver ogBootLoaderSetTimeOut +#@see ogBootLoaderSetTimeOut +#*/ ## +function ogRefindSetTimeOut () +{ + local EFIDISK EFIPART + # Si se solicita, mostrar ayuda. + if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_timeout_seconds" \ + "$FUNCNAME 50" + return + fi + + read EFIDISK EFIPART <<< $(ogGetEsp) + ogBootLoaderSetTimeOut $EFIDISK $EFIPART $@ + return $? +} #/** # ogBootLoaderSetTimeOut @@ -2092,7 +2417,7 @@ local FUNC PART CFGFILE TIMEOUT BOOTLOADER BOOTLOADERDIR CFGFILE MSG # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$MSG_SEE ogGrubSetTimeOut ogBurgSetTimeOut" + ogHelp "$FUNCNAME" "$MSG_SEE ogGrubSetTimeOut, ogBurgSetTimeOut or ogRefindSetTimeOut" return fi @@ -2107,20 +2432,25 @@ FUNC="${FUNC%%\ *}" # Error si no puede montar sistema de archivos. PART=$(ogMount $1 $2) || return $? -# La función debe ser llamanda desde ogGrubSetTimeOut or ogBurgSetTimeOut. +# La función debe ser llamanda desde ogGrubSetTimeOut, ogBurgSetTimeOut or ogRefindSetTimeOut. case "$FUNC" in ogGrubSetTimeOut) - BOOTLOADER="grug" - BOOTLOADERDIR="grubMBR" + BOOTLOADER="grub" + BOOTLOADERDIR="boot/grubMBR" CFGFILE="$PART/boot/grubMBR/boot/grub/grub.cfg" ;; ogBurgSetTimeOut) BOOTLOADER="burg" - BOOTLOADERDIR="burg" + BOOTLOADERDIR="boot/burg" CFGFILE="$PART/boot/burg/burg.cfg" ;; + ogRefindSetTimeOut) + BOOTLOADER="refind" + BOOTLOADERDIR="EFI/refind" + CFGFILE="$PART/EFI/refind/refind.conf" + ;; *) - ogRaiseError $OG_ERR_FORMAT "Use ogGrubSetTimeOut" + ogRaiseError $OG_ERR_FORMAT "Use ogGrubSetTimeOut, ogBurgSetTimeOut or ogRefindSetTimeOut." return $? ;; esac @@ -2129,7 +2459,11 @@ esac [ -f $CFGFILE ] || ogRaiseError $OG_ERR_NOTFOUND "$CFGFILE" || return $? # Asignamos el timeOut. -sed -i s/timeout=.*$/timeout=$TIMEOUT/g $CFGFILE +if [ "$BOOTLOADER" == "refind" ]; then + sed -i s/timeout.*$/"timeout $TIMEOUT"/g $CFGFILE +else + sed -i s/timeout=.*$/timeout=$TIMEOUT/g $CFGFILE +fi } @@ -2195,7 +2529,7 @@ local FUNC PART CFGFILE RESOLUTION NEWRESOLUTION DEFAULTRESOLUTION BOOTLOADER BO # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$MSG_SEE ogGrubSetResolution ogBurgSetResolution" + ogHelp "$FUNCNAME" "$MSG_SEE ogGrubSetResolution, ogBurgSetResolution or ogRefindSetResolution." return fi @@ -2210,10 +2544,10 @@ FUNC="${FUNC%%\ *}" # Error si no puede montar sistema de archivos. PART=$(ogMount $1 $2) || return $? -# La función debe ser llamanda desde oogGrugSetResolution or ogBurgSetResolution. +# La función debe ser llamanda desde ogGrugSetResolution, ogBurgSetResolution or ogRefindSetResolution. case "$FUNC" in ogGrubSetResolution) - BOOTLOADER="grug" + BOOTLOADER="grub" BOOTLOADERDIR="grubMBR" CFGFILE="$PART/boot/grubMBR/boot/grub/grub.cfg" ogRaiseError $OG_ERR_FORMAT "ogGrubSetResolution not sopported" @@ -2225,7 +2559,7 @@ case "$FUNC" in CFGFILE="$PART/boot/burg/burg.cfg" ;; *) - ogRaiseError $OG_ERR_FORMAT "Use ogBootLoaderSetResolution" + ogRaiseError $OG_ERR_FORMAT "Use GrugSetResolution, ogBurgSetResolution or ogRefindSetResolution." return $? ;; esac @@ -2271,61 +2605,190 @@ fi sed -i s/gfxmode=.*$/gfxmode=$NEWRESOLUTION/g $CFGFILE } + + + #/** -# ogRefindInstall int_ndisk bool_autoconfig +# ogBootLoaderSetResolution +#@brief Define la resolucion que usuara el thema del gestor de arranque +#@param int_resolution1 +#@param int_resolution2 (Opcional) +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_PARTITION Partición errónea o desconocida (ogMount). +#@exception OG_ERR_NOTFOUND Fichero de configuración no encontrado: grub.cfg burg.cfg. +#*/ ## +function ogRefindSetResolution () { +local PART CFGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_resolution1 [int_resolution2]" \ + "$FUNCNAME 1366 768" \ + "$FUNCNAME 1" + return +fi + + # Error si no se reciben 2 parametros. +[ $# -ge 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_resolution1 [int_resolution2]" || return $? + +# Error si no puede montar sistema de archivos. +PART=$(ogMount $(ogGetEsp)) || return $? + +# Comprobamos que exista fichero de configuración +CFGFILE=$PART/EFI/refind/refind.conf +[ -f $CFGFILE ] || ogRaiseError $OG_ERR_NOTFOUND "$CFGFILE" || return $? + +# Borramos resolucion anterior y configuramos la nueva +sed -i /^resolution/d $CFGFILE + +sed -i "1 i\resolution $1 $2" $CFGFILE +} + +# ogRefindInstall bool_autoconfig #@brief Instala y actualiza el gestor rEFInd en la particion EFI -#@param int_ndisk #@param bolean_Check__auto_config true | false[default] #@return #@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND No se encuentra la partición ESP. +#@exception OG_ERR_NOTFOUND No se encuentra shimx64.efi.signed. +#@exception OG_ERR_NOTFOUND No se encuentra refind-install o refind en OGLIB +#@exception OG_ERR_PARTITION No se puede montar la partición ESP. +#@note Refind debe estar instalado en el ogLive o compartido en OGLIB #@version 1.1.0 - Primeras pruebas. #@author Juan Carlos Garcia. Universidad de ZAragoza. #@date 2017-06-26 +#@version 1.1.1 - Usa refind-install. Obtiene partición con ogGetEsp. Configura Part-X-Y y ogLive. +#@author Irina Gomez. Universidad de Sevilla. +#@date 2019-03-22 #*/ ## -function ogRefindInstall () -{ - +function ogRefindInstall () { # Variables locales. -local DISK EFIDIR CONFIG EFIPARTITIONID - +local CONFIG EFIDISK EFIPART EFIDEVICE EFIMNT EFIDIR SHIM REFINDDIR +local CACHEDEVICE OGLIVE OGLIVEDIR CMDLINE OGICON CFGFILE DEVICES +local LNXCFGFILE NUMENTRY DIR # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk boolean_autoconfig " \ - "$FUNCNAME 1 TRUE" + ogHelp "$FUNCNAME" "$FUNCNAME boolean_autoconfig " \ + "$FUNCNAME TRUE" return fi -# Error si no se recibe 1 parámetro. -[ $# -ge 1 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) - - -DISK=$1 -EFIDIR=/mnt/$(ogDiskToDev $1 1 | cut -c 6-8)$1/EFI -CONFIG=${2:-"FALSE"} -EFIPARTITIONID=$(ogGetPartitionId $1 1) -if [ "$EFIPARTITIONID" == "EF00" ] || [ "$EFIPARTITIONID" == "ef00" ]; then - cp -pr /opt/opengnsys/lib/refind ${EFIDIR} - case "$CONFIG" in - FALSE) - if [ -a ${EFIDIR}/ubuntu ]; then - echo "menuentry \"Ubuntu\" {" >> ${EFIDIR}/refind/refind.conf - echo "loader /EFI/ubuntu/grubx64.efi" >> ${EFIDIR}/refind/refind.conf - echo "icon /EFI/refind/icons/os_linux.png" >> ${EFIDIR}/refind/refind.conf - echo "}" >> ${EFIDIR}/refind/refind.conf - fi - if [ -a ${EFIDIR}/Microsoft ]; then - echo "menuentry \"Windows\" {" >> ${EFIDIR}/refind/refind.conf - echo "loader /EFI/Microsoft/Boot/bootmgfw.efi" >> ${EFIDIR}/refind/refind.conf - echo "}" >> ${EFIDIR}/refind/refind.conf - fi - ;; - TRUE) - cp ${EFIDIR}/refind/refind.conf.auto ${EFIDIR}/refind/refind.conf - ;; - esac +# Recogemos parametros +CONFIG=${1:-"FALSE"} + +read -e EFIDISK EFIPART <<< $(ogGetEsp) +EFIDEVICE=$(ogDiskToDev $EFIDISK $EFIPART) || ogRaiseError $OG_ERR_NOTFOUND "ESP" || return $? +EFIMNT=$(ogMount $EFIDISK $EFIPART) || ogRaiseError $OG_ERR_PARTITION "$MSG_ERROR mount ESP" || return $? +EFIDIR="$EFIMNT/EFI" +[ -d $EFIDIR ] || mkdir $EFIDIR + +# Comprobamos que exista shimx64 +SHIM=$(ogGetPath /usr/lib/shim/shimx64.efi.signed) +[ "$SHIM" == "" ] && return $(ogRaiseError $OG_ERR_NOTFOUND "shimx64.efi.signed") + +# Si existe configuración anterior de refind la borro +[ -d "$EFIDIR/refind" ] && rm -rf $EFIDIR/refind + +# Instalamos rEFInd. +refind-install --yes --alldrivers --root $EFIMNT --shim $SHIM + +# Firmo refind con certificado de OpenGnsys +mv $EFIDIR/refind/grubx64.efi $EFIDIR/refind/grubx64.efi-unsigned +sbsign --key $OGETC/ssl/private/opengnsys.key --cert $OGETC/ssl/certs/opengnsys.crt --output $EFIDIR/refind/grubx64.efi $EFIDIR/refind/grubx64.efi-unsigned + +# Copio los certificados +cp /etc/refind.d/keys/* $EFIDIR/refind/keys +# Copio certificado opengnsys +cp $OGETC/ssl/certs/opengnsys.* $EFIDIR/refind/keys + +# Ponemos la entrada en NVRAM en el segundo lugar del orden de arranque +NEWORDER="$(ogNvramGetOrder|awk '{gsub(",", " "); printf "%x %x %s\n", $2, $1, substr($0, index($0,$3))}')" +ogNvramSetOrder $NEWORDER + +# Borramos configuración linux +[ -f $EFIMNT/boot/refind_linux.conf ] && mv $EFIMNT/boot/refind_linux.conf{,.ogbackup} + +# Eliminamos punto de motaje (por si ejecutamos más de una vez) +umount $EFIMNT/boot/efi + +# Para la configuración del ogLive +ogMountCache &>/dev/null +if [ $? -eq 0 ]; then + # Detectamos si hay ogLive + CACHEDEVICE=$(ogDiskToDev $(ogFindCache)) + OGLIVE=$(find $OGCAC/boot -name ogvmlinuz|head -1) + # Obtenemos parametros del kernel y sustituimos root + # La línea de opciones no puede contener la cadena initrd. + CMDLINE="$(cat /proc/cmdline|sed -e 's/^.*ogvmlinuz.efi //g' -e 's/^.*ogvmlinuz //g' -e 's|root=/dev/[a-z]* ||g' \ + -e 's/ogupdateinitrd=[a-z]* //g')" + CMDLINE="root=$CACHEDEVICE ${CMDLINE#*ogvmlinuz}" + + # Icono para la entrada de menú + OGICON=$(ls $OGLIB/refind/icons/so_opengnsys.png 2>/dev/null) + [ "$OGICON" == "" ] && OGICON="${EFIDIR}/refind/icons/os_unknown.png" + cp "$OGICON" "$OGCAC/.VolumeIcon.png" +fi + +# Configuramos rEFInd si es necesario +CFGFILE="${EFIDIR}/refind/refind.conf" +if [ "$CONFIG" == "TRUE" ]; then + echo -e "\n\n# Configuración OpenGnsys" >> $CFGFILE + # Excluimos dispositivos distintos de ESP y CACHE + DEVICES=$(blkid -s PARTUUID |awk -v D=$EFIDEVICE -v C=$CACHEDEVICE '$1!=D":" && $1!=C":" {gsub(/PARTUUID=/,"");gsub(/"/,""); aux = aux" "$2","} END {print aux}') + echo "dont_scan_volumes $DEVICES" >> $CFGFILE + # Excluimos en la ESP los directorios de los sistemas operativos + echo "dont_scan_dirs EFI/microsoft,EFI/ubuntu,EFI/grub" >> $CFGFILE + echo "use_graphics_for osx,linux,windows" >> $CFGFILE + echo "showtools reboot, shutdown" >> $CFGFILE + + # Configuramos ogLive + if [ "$OGLIVE" != "" ]; then + # Cambiamos nombre de kernel e initrd para que lo detecte refind + OGLIVEDIR="$(dirname $OGLIVE)" + cp "$OGLIVE" "${OGLIVE}.efi" + cp "$OGLIVEDIR/oginitrd.img" "$OGLIVEDIR/initrd.img" + + # Incluimos el directorio de ogLive. + echo "also_scan_dirs +,boot/$(basename $OGLIVEDIR)" >> $CFGFILE + # Fichero de configuración de refind para kernel de linux. + LNXCFGFILE="$OGLIVEDIR/refind_linux.conf" + echo "\"OpenGnsys Live\" \"$CMDLINE\"" > $LNXCFGFILE + + # Ponemos ogLive como la entrada por defecto + NUMENTRY=$(ls -d $EFIDIR/Part-??-??|wc -l) + echo "default_selection $((NUMENTRY+1))" >> $CFGFILE + fi else -$(ogRaiseError $OG_ERR_FORMAT; echo $?) + # Renombramos la configuración por defecto + mv $CFGFILE ${CFGFILE}.auto + + # Creamos nueva configuración + echo "# Configuración OpenGnsys" >> $CFGFILE + echo "timeout 20" > $CFGFILE + echo "showtools reboot, shutdown" >> $CFGFILE + echo -e "scanfor manual\n" >> $CFGFILE + # Configuración para sistemas restaurados con OpenGnsys + for DIR in $(ls -d /mnt/sda1/EFI/Part-*-* 2>/dev/null); do + echo "menuentry \"${DIR##*/}\" {" >> $CFGFILE + echo " loader /EFI/${DIR##*/}/Boot/ogloader.efi" >> $CFGFILE + [ -f $DIR/Boot/bootmgfw.efi ] && echo " icon /EFI/refind/icons/os_win8.png" >> $CFGFILE + [ -f $DIR/Boot/grubx64.efi ] && echo " icon /EFI/refind/icons/os_linux.png" >> $CFGFILE + echo "}" >> $CFGFILE + done + # Configuración ogLive + # Comantamos temporalmente: Con la versión nueva de refind falla + #if [ "$OGLIVE" != "" ]; then + # echo "menuentry \"OpenGnsys Live\" {" >> $CFGFILE + # echo " volume CACHE" >> $CFGFILE + # echo " ostype Linux" >> $CFGFILE + # echo " loader /boot/$(basename ${OGLIVE%/*})/ogvmlinuz" >> $CFGFILE + # echo " initrd /boot/$(basename ${OGLIVE%/*})/oginitrd.img" >> $CFGFILE + # echo " options \"$CMDLINE\"" >> $CFGFILE + # echo "}" >> $CFGFILE + + # # Ponemos ogLive como la entrada por defecto + # sed -i '1 i\default_selection "OpenGnsys Live"' $CFGFILE + #fi fi } - diff --git a/client/engine/Cache.lib b/client/engine/Cache.lib index 0e7f51ef..40715946 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 1.1.0 +#@version 1.1.1 #@warning License: GNU GPLv3+ #*/ @@ -44,7 +44,8 @@ function ogCreateCache () { # Variables locales. -local FINDCACHE IOSIZE NDSK SIZECACHE PART DISK START END ENDPREVPART SIZE MINSIZE MAXSIZE PTTYPE ID TMPFILE +local FINDCACHE IOSIZE NDSK SIZECACHE PART DISK START END ENDPREVPART SIZE MINSIZE MAXSIZE +local PTTYPE ID TMPFILE NVME_PREFIX # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME [int_ndisk [int_npart]] int_partsize" \ @@ -81,6 +82,14 @@ esac TMPFILE=/tmp/sfdisk$$ DISK=$(ogDiskToDev $NDSK) || return $? + + # PATCH Para discos nvme la particion debe ser p1, p2, etc...en lugar de 1,2, sino falla sfdisk +NVME_PREFIX="" +if [[ $DISK == *"nvme"* ]]; then + NVME_PREFIX="p" +fi + + END=$[$(ogGetLastSector $NDSK 2>/dev/null)] # Sector final del disco. SIZE=$[$SIZECACHE*2] # Tamaño en sectores de 512 B. # Inicio partición cache según el disco tenga sectores de 4k o menores @@ -116,7 +125,8 @@ case "$(ogGetPartitionTableType $NDSK)" in # Si existe la cache se borra previamente [ -n "$(ogFindCache)" ] && ogDeleteCache # Capturamos el codigo de particion GPT para cache - ID=$(ogTypeToId CACHE GPT) + # PATCH - Cuando es GPT, la particion con codigo CACHE (CA00) no existe y no puede crearse, se cambia por LINUX (8300) + ID=$(ogTypeToId LINUX GPT) sgdisk $DISK -n$PART:$START:$END -c$PART:CACHE -t$PART:$ID 2>/dev/null ;; MSDOS) @@ -127,7 +137,7 @@ case "$(ogGetPartitionTableType $NDSK)" in # Salvamos la configuración de las particiones e incluimos la cache. trap "rm -f $TMPFILE" 1 2 3 9 15 sfdisk --dump $DISK | grep -v $DISK$PART > $TMPFILE - echo "$DISK$PART : start= $START, size= $SIZE, Id=$ID" >> $TMPFILE + echo "$DISK$NVME_PREFIX$PART : start= $START, size= $SIZE, Id=$ID" >> $TMPFILE # Ordenamos las líneas de los dispositivos UNIT=$(grep unit $TMPFILE) grep ^/dev $TMPFILE|sort -o $TMPFILE @@ -226,7 +236,8 @@ if [ "$*" == "help" ]; then fi # Obtener el dispositivo del sistema de archivos etiquetado como "CACHE". PART=$(blkid -L "CACHE") - +# En discos nvme con particiones GPT la partición se detecta usando el tag PARTLABEL +PART=${PART:-$(blkid -t PARTLABEL=CACHE | awk -F: '{print $1}')} # Si no se detecta, obtener particiones marcadas de tipo caché en discos MSDOS. PART=${PART:-$(sfdisk -l 2>/dev/null | awk '$6~/ca|a7/ {print $1}')} @@ -235,7 +246,7 @@ if [ -z "$PART" ]; then for DISK in $(ogDiskToDev); do # Nota: se añade espacio separador solo si existe valor previo. PART="${PART:+"$PART "}$(sgdisk -p $DISK 2>/dev/null | awk -v d=$DISK '$7~/CACHE/ {printf "%s%s",d,$1;}')" - done + done fi # Devolver número de disco y número de partición de la 1ª partición encontrada. diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index 06744bd9..f7def42e 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 1.1.0 +#@version 1.1.1 #@warning License: GNU GPLv3+ #*/ @@ -47,7 +47,8 @@ timeout -k 5s -s KILL 3s $(which parted) "$@" function ogCreatePartitions () { # Variables locales. -local ND DISK PTTYPE PART SECTORS START SIZE TYPE CACHEPART IODISCO IOSIZE CACHESIZE EXTSTART EXTSIZE tmpsfdisk +local ND DISK PTTYPE PART SECTORS START SIZE TYPE CACHEPART IODISCO IOSIZE CACHESIZE +local EXTSTART EXTSIZE NVME_PREFIX tmpsfdisk # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk str_parttype:int_partsize ..." \ @@ -94,12 +95,18 @@ trap "rm -f $tmpsfdisk" 1 2 3 9 15 echo "unit: sectors" >$tmpsfdisk echo >>$tmpsfdisk +NVME_PREFIX="" +if [[ $DISK == *"nvme"* ]]; then + NVME_PREFIX="p" +fi + + # Generar fichero de entrada para "sfdisk" con las particiones. shift while [ $# -gt 0 ]; do # Conservar los datos de la partición de caché. if [ "$ND $PART" == "$CACHEPART" -a -n "$CACHESIZE" ]; then - echo "$DISK$PART : start=$[SECTORS+1], size=$CACHESIZE, Id=ca" >>$tmpsfdisk + echo "$DISK$NVME_PREFIX$PART : start=$[SECTORS+1], size=$CACHESIZE, Id=ca" >>$tmpsfdisk PART=$[PART+1] fi # Leer formato de cada parámetro - Tipo:Tamaño @@ -125,7 +132,7 @@ while [ $# -gt 0 ]; do SECTORS=$[EXTSTART+EXTSIZE] fi # Generar datos para la partición. - echo "$DISK$PART : start=$START, size=$SIZE, Id=$ID" >>$tmpsfdisk + echo "$DISK$NVME_PREFIX$PART : start=$START, size=$SIZE, Id=$ID" >>$tmpsfdisk # Error si se supera el nº total de sectores. START=$[START+SIZE] if [ "$IOSIZE" == "4096" -a $PART -gt 4 ]; then @@ -138,9 +145,9 @@ done # Si no se indican las 4 particiones primarias, definirlas como vacías, conservando la partición de caché. while [ $PART -le 4 ]; do if [ "$ND $PART" == "$CACHEPART" -a -n "$CACHESIZE" ]; then - echo "$DISK$PART : start=$[SECTORS+1], size=$CACHESIZE, Id=ca" >>$tmpsfdisk + echo "$DISK$NVME_PREFIX$PART : start=$[SECTORS+1], size=$CACHESIZE, Id=ca" >>$tmpsfdisk else - echo "$DISK$PART : start=0, size=0, Id=0" >>$tmpsfdisk + echo "$DISK$NVME_PREFIX$PART : start=0, size=0, Id=0" >>$tmpsfdisk fi PART=$[PART+1] done @@ -258,7 +265,7 @@ 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 +[ -n "$CACHESIZE" ] && ogMountCache 2>/dev/null || return 0 } @@ -396,7 +403,7 @@ esac function ogDevToDisk () { # Variables locales. -local CACHEFILE DEV PART d n +local CACHEFILE DEV PART NVME_PREFIX d n # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME path_device | LABEL=str_label | UUID=str_uuid" \ @@ -431,7 +438,13 @@ fi # Si no se encuentra, procesa todos los discos para devolver su nº de orden y de partición. n=1 for d in $(ogDiskToDev); do - [ -n "$(echo $DEV | grep $d)" ] && echo "$n ${DEV#$d}" && return +NVME_PREFIX="" +if [[ $d == *"nvme"* ]]; then + NVME_PREFIX="p" +fi + + + [ -n "$(echo $DEV | grep $d)" ] && echo "$n ${DEV#$d$NVME_PREFIX}" && return n=$[n+1] done ogRaiseError $OG_ERR_NOTFOUND "$1" @@ -684,11 +697,20 @@ echo $TYPE function ogGetEsp () { local PART d -for d in $(blkid -t TYPE=vfat -o device); do - PART="$(ogDevToDisk $d)" - if [ "$(ogGetPartitionId $PART)" == "$(ogTypeToId EFI GPT)" ]; then - echo $PART - break +for d in $(blkid -o device|sort); do + # Previene error para /dev/loop0 + PART="$(ogDevToDisk $d 2>/dev/null)" || continue + # En discos NVMe blkid devuelve una salida del tipo: + # >/dev/loop0 + # >/dev/nvme0n1 + # >/dev/nvme0n1p1 + # al analizar la particion nvme0n1, PART solo tiene un argumento y hace que ogGetPartitionId lance un error + LEN=$(echo $PART | awk '{ print length($0) }') + if [ $LEN -gt 1 ]; then + if [ "$(ogGetPartitionId $PART)" == "$(ogTypeToId EFI GPT)" ]; then + echo $PART + break + fi fi done } @@ -1024,6 +1046,9 @@ echo "$TYPE" #@version 1.0 - Versión en pruebas. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2010/01/12 +#@version 1.1.1 - Se incluye tipo Windows para UEFI (ticket #802) +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019/01/18 #*/ ## function ogHidePartition () { @@ -1046,6 +1071,7 @@ case "$TYPE" in FAT32) NEWTYPE="HFAT32" ;; FAT16) NEWTYPE="HFAT16" ;; FAT12) NEWTYPE="HFAT12" ;; + WINDOWS)NEWTYPE="WIN-RESERV";; *) ogRaiseError $OG_ERR_PARTITION "$TYPE" return $? ;; esac @@ -1314,6 +1340,10 @@ if [ "$*" == "help" ]; then "$FUNCNAME 1 1" return fi + +# Si el EFI esta activo me salgo. +ogIsEfiActive && ogEcho session log warning "EFI: $MSG_DONTUSE $FUNCNAME" && return + # Error si no se reciben 2 parámetros. [ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? @@ -1595,6 +1625,9 @@ echo $ID #@version 1.0 - Versión en pruebas. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2010/01/12 +#@version 1.1.1 - Se incluye tipo Windows Reserver para UEFI (ticket #802) +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019/01/18 #*/ ## function ogUnhidePartition () { @@ -1613,10 +1646,11 @@ PART=$(ogDiskToDev "$1" "$2") || return $? # Obtener tipo de partición. TYPE=$(ogGetPartitionType "$1" "$2") case "$TYPE" in - HNTFS) NEWTYPE="NTFS" ;; - HFAT32) NEWTYPE="FAT32" ;; - HFAT16) NEWTYPE="FAT16" ;; - HFAT12) NEWTYPE="FAT12" ;; + HNTFS) NEWTYPE="NTFS" ;; + HFAT32) NEWTYPE="FAT32" ;; + HFAT16) NEWTYPE="FAT16" ;; + HFAT12) NEWTYPE="FAT12" ;; + WIN-RESERV) NEWTYPE="WINDOWS" ;; *) ogRaiseError $OG_ERR_PARTITION "$TYPE" return $? ;; esac diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib index 0642a854..aa1778eb 100755 --- a/client/engine/FileSystem.lib +++ b/client/engine/FileSystem.lib @@ -55,24 +55,24 @@ PART="$(ogDiskToDev $1 $2)" || return $? TYPE=$(ogGetFsType $1 $2) case "$TYPE" in - EXT[234]) PROG="e2fsck"; PARAMS="-y"; CODES=(1 2) ;; - BTRFS) PROG="btrfsck"; CODES=(1) ;; - REISERFS) PROG="fsck.reiserfs"; PARAMS="<<<\"Yes\""; CODES=(1 2) ;; - REISER4) PROG="fsck.reiser4"; PARAMS="-ay" ;; - JFS) PROG="fsck.jfs"; CODES=(1 2) ;; - XFS) PROG="xfs_repair" ;; - F2FS) PROG="fsck.f2fs" ;; - NTFS) PROG="ntfsfix" ;; - EXFAT) PROG="fsck.exfat" ;; - 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"; PARAMS="-f" ;; - HFSPLUS) PROG="fsck.hfs"; PARAMS="-f" ;; - UFS) PROG="fsck.ufs" ;; - ZFS) PROG="fsck.zfs" ;; - *) ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE" - return $? ;; + EXT[234]|CACHE) PROG="e2fsck"; PARAMS="-y"; CODES=(1 2) ;; + BTRFS) PROG="btrfsck"; CODES=(1) ;; + REISERFS) PROG="fsck.reiserfs"; PARAMS="<<<\"Yes\""; CODES=(1 2) ;; + REISER4) PROG="fsck.reiser4"; PARAMS="-ay" ;; + JFS) PROG="fsck.jfs"; CODES=(1 2) ;; + XFS) PROG="xfs_repair" ;; + F2FS) PROG="fsck.f2fs" ;; + NTFS) PROG="ntfsfix" ;; + EXFAT) PROG="fsck.exfat" ;; + 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"; PARAMS="-f" ;; + HFSPLUS) PROG="fsck.hfs"; PARAMS="-f" ;; + UFS) PROG="fsck.ufs" ;; + ZFS) PROG="fsck.zfs" ;; + *) ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE" + return $? ;; esac # Error si el sistema de archivos esta montado o bloqueado. ogUnmount $1 $2 diff --git a/client/engine/Inventory.lib b/client/engine/Inventory.lib index 853f0d18..f3a779d7 100755 --- a/client/engine/Inventory.lib +++ b/client/engine/Inventory.lib @@ -90,7 +90,6 @@ esac } - #/** # ogGetSerialNumber #@brief Obtiene el nº de serie del cliente. @@ -98,17 +97,22 @@ esac #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2015-06-08 #*/ ## - function ogGetSerialNumber () { +# Variables locales. +local SERIALNO # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME" + ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 123456" return fi -# Obtener nº de serie (ignorar los no especificados) -dmidecode -s system-serial-number | egrep -vi "(^[ 0]+$|not specified|filled by o.e.m.)" +# Obtener nº de serie (ignorar los no especificados). +SERIALNO=$(dmidecode -s system-serial-number | egrep -vi "(^[ 0]+$|not specified|to be filled|invalid entry|default string)") +# Truncar cadena si >25 caracteres. +[ ${#SERIALNO} -gt 25 ] && SERIALNO="${SERIALNO:0:22}..." +[ -n "$SERIALNO" ] && echo "$SERIALNO" +return 0 } @@ -499,4 +503,4 @@ fi # Mostrar resultado y salir sin errores. [ -n "$VERSION" ] && echo "$TYPE:$VERSION $IS64BIT" return 0 -}
\ No newline at end of file +} diff --git a/client/engine/PostConf.lib b/client/engine/PostConf.lib index 4e07f5a0..08f4621f 100755 --- a/client/engine/PostConf.lib +++ b/client/engine/PostConf.lib @@ -468,128 +468,41 @@ EOT #/** # ogInstallLinuxClient int_ndisk int_filesys -#@brief Instala el cliente OpenGnSys para sistemas operativos GNU/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. +#@brief Instala el cliente OpenGnSys para sistemas operativos GNU/Linux (obsoleta). #@version 1.0.4 - Primera adaptación para OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2012-04-10 #@version 1.0.5 - Evitar duplicidad de instalación del cliente. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2014-03-06 +#@version 1.1.1 - Marked as obsolete. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2019-09-25 #*/ ## function ogInstallLinuxClient () { -# Variables locales. -local 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. -MNTDIR=$(ogMount $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; } - if (! /ogAdmLnxClient/) - print; } - }' /tmp/rclocal > $MNTDIR/$RCLOCAL -rm /tmp/rclocal -ogUnlock $1 $2 } #/** # ogInstallWindowsClient int_ndisk int_filesys str_filename -#@brief Instala el cliente OpenGnSys para sistemas operativos Windows. -#@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 -#@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. +#@brief Instala el cliente OpenGnSys para sistemas operativos Windows (obsoleta). #@version 1.0.4 - Primera adaptación para OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2012-04-11 #@version 1.0.5 - Cambios en los parametros de entrada y funcionamiento de la funcion #@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona #@date 2013-02-12 +#@version 1.1.1 - Marked as obsolete. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2019-09-25 #*/ ## function ogInstallWindowsClient () { -# Variables locales. -local MNTDIR CLIENTFILE i DIR WINDIR -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_filename" \ - "$FUNCNAME 1 1 filename.cmd" - return -fi - -# Error si no se reciben 3 parámetros. -[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? -# Obtener sistema de archvios. -MNTDIR=$(ogMount $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 $? -# Copiar cliente e incluir en el fichero de configuracion dado que instale el cliente en el arranque. -cp -a $CLIENTFILE "$WINDIR" -ogAddCmd $1 $2 $3 "ogAdmWinClient -remove" -ogAddCmd $1 $2 $3 "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)" } - #/** # ogUninstallLinuxClient int_ndisk int_filesys #@brief Desinstala el cliente OpenGnSys para sistemas operativos GNU/Linux. diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib index 279961a5..c58d262b 100755 --- a/client/engine/Protocol.lib +++ b/client/engine/Protocol.lib @@ -399,7 +399,7 @@ fi ##### BEGIN SERVER SESSION ##### # 2º param check: controlamos el primer componente comun de las sesiones de servidor y cliente: PORTBASE PORTBASE=${SESSION[0]} -ogCheckStringInGroup ${SESSION[0]} "$(seq 9000 2 9050)" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $? +ogCheckStringInGroup ${SESSION[0]} "$(seq 9000 2 9100)" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $? # 2º param check: Controlamos el resto de componenentes de la sesion del servidor. if [ $MODE == "server" ] then diff --git a/client/engine/Registry.lib b/client/engine/Registry.lib index dbe69aee..60f7124b 100755 --- a/client/engine/Registry.lib +++ b/client/engine/Registry.lib @@ -15,7 +15,7 @@ function chntpw () local CHNTPW CHNTPW=$(which drbl-chntpw) CHNTPW=${CHNTPW:-$(which chntpw)} -timeout --foreground 5s $CHNTPW "$@" +timeout --foreground 5s $CHNTPW -e "$@" } diff --git a/client/engine/System.lib b/client/engine/System.lib index d016be13..77f77b48 100755 --- a/client/engine/System.lib +++ b/client/engine/System.lib @@ -243,6 +243,7 @@ case "$CODE" in $OG_ERR_DONTSYNC_IMAGE) MSG="$MSG_ERR_DONTSYNC_IMAGE \"$2\"" ;; $OG_ERR_NOTDIFFERENT) MSG="$MSG_ERR_NOTDIFFERENT \"$2\"" ;; $OG_ERR_SYNCHRONIZING) MSG="$MSG_ERR_SYNCHRONIZING \"$2\"" ;; + $OG_ERR_NOTUEFI) MSG="$MSG_ERR_NOTUEFI \"$2\"" ;; *) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;; esac diff --git a/client/engine/UEFI.lib b/client/engine/UEFI.lib new file mode 100644 index 00000000..cd7168e7 --- /dev/null +++ b/client/engine/UEFI.lib @@ -0,0 +1,645 @@ +#!/bin/bash +# Libreria provisional para uso de UEFI +# Las funciones se incluirán las librerías ya existentes + +#/** +# ogNvramActiveEntry +#@brief Activa entrada de la NVRAM identificada por la etiqueta o el orden +#@param Num_order_entry | Label_entry Número de orden o la etiqueta de la entrada a borrar. +#@return (nada) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTUEFI UEFI no activa. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#*/ ## +function ogNvramActiveEntry () { +local NUMENTRY + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [ Num_order_entry | Label_entry ] " \ + "$FUNCNAME 2" \ + "$FUNCNAME \"Windows Boot Manager\"" + return +fi + +# Error si no se recibe 1 parámetro. +[ $# -eq 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME [ Num_order_entry | Label_entry ]" || return $? + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +# Distingo si es número de orden o etiqueta +if [[ $1 =~ ^([0-9a-fA-F]+)$ ]]; then + NUMENTRY=$( efibootmgr |awk -v NUM="$(printf %04x 0x$1|tr '[:lower:]' '[:upper:]')" '{ if($1~NUM) print substr($1,5,4)}') +else + NUMENTRY=$(efibootmgr |awk -v LABEL="$1" '{ if(substr($0, index($0,$2))==LABEL) print substr($1,5,4)}') +fi + +[ "$NUMENTRY" == "" ] && return $(ogRaiseError $OG_ERR_NOTFOUND "NVRAM entry '$1'") + +efibootmgr -a -b $NUMENTRY &>/dev/null +} + +#/** +# ogNvramAddEntry +#@brief Crea nueva entrada en el gestor de arranque (NVRAM), opcionalmente la incluye al final del orden de arranque. +#@param Str_Label_entry Número de disco o etiqueta de la entrada a crear. +#@param Str_BootLoader Número de partición o cargador de arranque. +#@param Bool_Incluir_Arranque Incluir en el orden de arranque (por defecto FALSE) (opcional) +#@return (nada) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTUEFI UEFI no activa. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#*/ ## +function ogNvramAddEntry () { +local EFIDISK EFIPART BOOTLABEL BOOTLOADER ADDORDER + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME Str_label_entry Str_boot_loader [ Bool_add_bootorder ]" \ + "$FUNCNAME 1 2 TRUE" \ + "$FUNCNAME grub /EFI/grub/grubx64.efi TRUE" \ + "$FUNCNAME Windows /EFI/Microsoft/Boot/bootmgfw.efi" + return +fi + +# Error si no se recibe 1 parámetro. +[ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME Str_label_entry Str_boot_locader" || return $? + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +read -e EFIDISK EFIPART <<<"$(ogGetEsp)" +[ -n "$EFIPART" ] || ogRaiseError $OG_ERR_NOTFOUND "ESP" || return $? + +# Recogemos parámetros +# Distinguimos si es disco/partición o etiqueta/cargador +if [[ "$1$2" =~ ^([0-9]+)$ ]]; then + BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) + BOOTLOADER="/EFI/$BOOTLABEL/Boot/ogloader.efi" +else + BOOTLABEL="$1" + BOOTLOADER="$2" +fi + + +# Si existe entrada con la misma etiqueta la borramos +ogNvramDeleteEntry "$BOOTLABEL" 2>/dev/null + +efibootmgr -C -d $(ogDiskToDev $EFIDISK) -p $EFIPART -L "$BOOTLABEL" -l "$BOOTLOADER" &>/dev/null + +# Incluimos la entrada en el orden de arranque (opcional) +if [ "${3^^}" == "TRUE" ]; then + NUMENTRY=$(efibootmgr |awk -v LABEL="$BOOTLABEL" '{ if(substr($0, index($0,$2))==LABEL) print substr($1,5,4)}') + ogNvramSetOrder $(ogNvramGetOrder |tr , " ") $NUMENTRY +fi +} + + +#/** +# ogCopyEfiBootLoader int_ndisk str_repo path_image +#@brief Copia el cargador de arranque desde la partición EFI a la de sistema. +#@param int_ndisk nº de orden del disco +#@param int_part nº de partición +#@return (nada, por determinar) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#@note Si existe el cargador en la partición de sistema no es válido +#*/ ## +function ogCopyEfiBootLoader () { +# Variables locales +local MNTDIR EFIDIR BOOTLABEL OSVERSION LOADER f + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part" \ + "$FUNCNAME 1 2" + return +fi + +# Error si no se reciben 2 arámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part" || return $? + +# Comprobamos que exista partición de sistema y la ESP +MNTDIR=$(ogMount $1 $2) || ogRaiseError $OG_ERR_PARTITION "$DISK $PART" || return $? +EFIDIR=$(ogMount $(ogGetEsp)) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $? + +# Comprobamos que exista el cargador +BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) +OSVERSION=$(ogGetOsVersion $1 $2) +case $OSVERSION in + *Windows\ 10*) + for f in $EFIDIR/EFI/{$BOOTLABEL,Microsoft}/Boot/bootmgfw.efi; do + [ -r $f ] && LOADER=$f + done + [ -n "$LOADER" ] || ogRaiseError $OG_ERR_NOTOS "$1 $2 ($OSVERSION, EFI)" || return $? + # Si existe el directorio Boot lo borramos + [ -d $MNTDIR/Boot ] && rm -rf $MNTDIR/Boot + DIRLOADER=$(realpath "${LOADER%/*}/..") + cp -r ${DIRLOADER}/Boot $MNTDIR + ;; +esac +} + + +#/** +# ogNvramDeleteEntry +#@brief Borra entrada de la NVRAM identificada por la etiqueta o el orden +#@param Num_order_entry | Label_entry Número de orden o la etiqueta de la entrada a borrar. +#@return (nada) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTUEFI UEFI no activa. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado (entrada en NVRAM). +#*/ ## +function ogNvramDeleteEntry () { +local NUMENTRY n + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [ Num_order_entry | Label_entry ] " \ + "$FUNCNAME 2" \ + "$FUNCNAME \"Windows Boot Manager\"" + return +fi + +# Error si no se recibe 1 parámetro. +[ $# -eq 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME [ Num_order_entry | Label_entry ]" || return $? + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +# Distingo si es número de orden o etiqueta +if [[ $1 =~ ^([0-9a-fA-F]+)$ ]]; then + NUMENTRY=$( efibootmgr |awk -v NUM="$(printf %04x 0x$1|tr '[:lower:]' '[:upper:]')" '{ if($1~NUM) print substr($1,5,4)}') +else + NUMENTRY=$(efibootmgr |awk -v LABEL="$1" '{ if(substr($0, index($0,$2))==LABEL) print substr($1,5,4)}') +fi + +[ "$NUMENTRY" == "" ] && return $(ogRaiseError $OG_ERR_NOTFOUND "NVRAM entry '$1'") + +for n in $NUMENTRY; do + efibootmgr -B -b $n &>/dev/null +done +} + + +#/** +# ogNvramGetCurrent +#@brief Muestra la entrada del gestor de arranque (NVRAM) que ha iniciado el equipo. +#@return Entrada con la que se ha iniciado el equipo +#@exception OG_ERR_NOTUEFI UEFI no activa. +#*/ ## +function ogNvramGetCurrent () { + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME" \ + "$FUNCNAME" + return +fi + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +efibootmgr| awk -v bootentry=99999 '{if ($1~/BootCurrent/) bootentry=$2; if ($1~bootentry) printf "%s %s %s\n", gensub(/^0{1,3}/,"",1,substr($1,5,4))," ", substr($0, index($0,$2))}' +} + + +# ogNvramGetNext +#@brief Muestra la entrada del gestor de arranque (NVRAM) que se utilizará en el próximo arranque. +#@return Entrada que se utilizará en el próximo arranque +#@exception OG_ERR_NOTUEFI UEFI no activa. +#*/ ## +function ogNvramGetNext () { +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME" \ + "$FUNCNAME" + return +fi + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +efibootmgr|awk '{ if ($1 == "BootNext:") print $2}' +} + + +# ogNvramGetOrder +#@brief Muestra el orden de las entradas del gestor de arranque (NVRAM) +#@return Orden de las entradas +#@exception OG_ERR_NOTUEFI UEFI no activa. +#*/ ## +function ogNvramGetOrder () { +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME" \ + "$FUNCNAME" + return +fi + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +efibootmgr|awk '{ if ($1 == "BootOrder:") print $2}' +} + + +#/** +# ogNvramGetTimeout +#@brief Muestra el tiempo de espera del gestor de arranque (NVRAM) +#@return Timeout de la NVRAM +#@exception OG_ERR_NOTUEFI UEFI no activa. +#*/ ## +function ogNvramGetTimeout () { +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME" \ + "$FUNCNAME" + return +fi + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +efibootmgr|awk '{ if ($1 == "Timeout:") print substr($0, index($0,$2))}' +} + + +#/** +# ogGrubUefiConf int_ndisk int_part str_dir_grub +#@brief Genera el fichero grub.cfg de la ESP +#@param int_ndisk nº de orden del disco +#@param int_part nº de partición +#@param str_dir_grub prefijo del directorio de grub en la partición de sistema. ej: /boot/grubPARTITION +#@return (nada, por determinar) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#@TODO Confirmar si el fichero "$EFIDIR/EFI/$BOOTLABEL/grub.cfg" es necesario. +#*/ ## +function ogGrubUefiConf () { +local EFIDIR BOOTLABEL GRUBEFI UUID DEVICE PREFIXSECONDSTAGE EFIGRUBDIR + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part [ str_dir_grub ]" \ + "$FUNCNAME 1 2" \ + "$FUNCNAME 1 3 /boot/grubPARTITION" + return +fi + +# Error si no se reciben al menos 2 parámetros. +[ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part [ str_dir_grub ]" || return $? + +# Directorio del grub en la partición de sistema +PREFIXSECONDSTAGE="$3" + +EFIDIR=$(ogMount $(ogGetEsp)) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $? +BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) +EFIGRUBDIR="$EFIDIR/EFI/$BOOTLABEL/boot/grub" +# Comprobamos que existe directorio +[ -d "$EFIGRUBDIR" ] || mkdir -p "$EFIGRUBDIR" +# Parcheamos uuid y particion en grub.cfg +UUID=$(blkid -o value -s UUID $(ogDiskToDev $1 $2)) +DEVICE="hd$(expr $1 - 1 ),gpt$2" + +cat << EOT > $EFIGRUBDIR/grub.cfg +set root='$DEVICE' +set prefix=(\$root)'${PREFIXSECONDSTAGE}/boot/grub' +configfile \$prefix/grub.cfg +EOT + +# Provisional: confirmar si el segundo archivo se utiliza +cp $EFIGRUBDIR/grub.cfg "$EFIDIR/EFI/$BOOTLABEL/grub.cfg" +} + + +#/** +# ogNvramInactiveEntry +#@brief Inactiva entrada de la NVRAM identificada por la etiqueta o el orden +#@param Num_order_entry | Label_entry Número de orden o la etiqueta de la entrada a borrar. +#@return (nada) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#@exception OG_ERR_NOTUEFI UEFI no activa. +#*/ ## +function ogNvramInactiveEntry () { +local NUMENTRY + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [ Num_order_entry | Label_entry ] " \ + "$FUNCNAME 2" \ + "$FUNCNAME \"Windows Boot Manager\"" + return +fi + +# Error si no se recibe 1 parámetro. +[ $# -eq 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME [ Num_order_entry | Label_entry ]" || return $? + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +# Distingo si es número de orden o etiqueta +if [[ $1 =~ ^([0-9a-fA-F]+)$ ]]; then + NUMENTRY=$( efibootmgr |awk -v NUM="$(printf %04x 0x$1|tr '[:lower:]' '[:upper:]')" '{ if($1~NUM) print substr($1,5,4)}') +else + NUMENTRY=$(efibootmgr |awk -v LABEL="$1" '{ if(substr($0, index($0,$2))==LABEL) print substr($1,5,4)}') +fi + +[ "$NUMENTRY" == "" ] && return $(ogRaiseError $OG_ERR_NOTFOUND "NVRAM entry '$1'") + +efibootmgr -A -b $NUMENTRY &>/dev/null +} + + +#/** +# ogNvramList +#@brief Lista las entradas de la NVRAN (sólo equipos UEFI) +#@return Entradas de la NVRAM con el formato: orden etiqueta [* (si está activa) ] +#@exception OG_ERR_NOTUEFI UEFI no activa. +#*/ ## +function ogNvramList () { + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME" \ + "$FUNCNAME" + return +fi + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +efibootmgr |awk '{if($1~/Boot[[:digit:]]/) ; active="" ;if ($1~/*/) active="*"; if($1~/Boot[[:digit:]]/) printf "%4s %s %s %s\n", gensub(/^0{1,3}/,"",1,substr($1,5,4))," ", substr($0, index($0,$2)), active}' +} + + +#/** +# ogRestoreEfiBootLoader int_ndisk str_repo +#@brief Copia el cargador de arranque de la partición de sistema a la partición EFI. +#@param int_ndisk nº de orden del disco +#@param int_part nº de partición +#@return (nada, por determinar) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado (partición de sistema o EFI). +#@exception OG_ERR_NOTOS sin sistema operativo. +#*/ ## +function ogRestoreEfiBootLoader () { +# Variables locales +local MNTDIR EFIDIR BOOTLABEL OSVERSION LOADER f UUID DEVICE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part" \ + "$FUNCNAME 1 2" + return +fi + +# Error si no se reciben 2 arámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part" || return $? + +# Comprobamos que exista partición de sistema y la ESP +MNTDIR=$(ogMount $1 $2) || ogRaiseError $OG_ERR_PARTITION "$DISK $PART" || return $? +EFIDIR=$(ogMount $(ogGetEsp)) +if [ "$EFIDIR" == "" ]; then + ogFormat $(ogGetEsp) FAT32 + EFIDIR=$(ogMount $(ogGetEsp)) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $? +fi + +# Comprobamos que exista el cargador +#BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) +OSVERSION=$(ogGetOsVersion $1 $2) +case $OSVERSION in + *Windows\ 10*) + BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) + LOADER=$(ogGetPath $MNTDIR/Boot/bootmgfw.efi) + [ -n "$LOADER" ] || ogRaiseError $OG_ERR_NOTOS "$1 $2 ($OSVERSION, EFI)" || return $? + [ -r $EFIDIR/$BOOTLABEL ] && rm -rf $EFIDIR/$BOOTLABEL + mkdir -p $EFIDIR/EFI/$BOOTLABEL + cp -r "${LOADER%/*}" $EFIDIR/EFI/$BOOTLABEL + # Nombre OpenGnsys para cargador + cp $LOADER $EFIDIR/EFI/$BOOTLABEL/Boot/ogloader.efi + ;; +esac +} + + +#/** +# ogRestoreUuidPartitions +#@brief Restaura los uuid de las particiones y la tabla de particiones +#@param int_ndisk nº de orden del disco +#@param int_nfilesys nº de orden del sistema de archivos +#@param REPO|CACHE repositorio +#@param str_imgname nombre de la imagen +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND No encontrado fichero de información de la imagen (con uuid) +#*/ ## +function ogRestoreUuidPartitions () { +local DISK PART IMGNAME INFOFILE DEVICE DATA GUID UUID IMGGUID +local EFIDEVICE EFIDATA EFIGUID EFIUUID EFIUUID IMGEFIGUID + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME REPO|CACHE str_imgname int_ndisk int_npart" \ + "$FUNCNAME REPO Windows 1 2" + return +fi +# Error si no se reciben 4 parámetros. +[ $# -eq 4 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME REPO|CACHE str_imgname int_ndisk int_npart" || return $? + +# Sólo se ejecuta si es UEFI +ogIsEfiActive || return + +# Parámetros de entrada +IMGNAME="$2" +INFOFILE="$OGIMG/.$IMGNAME.img.json" +[ "${1^^}" == "CACHE" ] && INFOFILE="$OGCAC$INFOFILE" +# TODO: que la función getPath soporte archivos ocultos +ls $INFOFILE &>/dev/null || ogRaiseError $OG_ERR_NOTFOUND "$INFOFILE" || return $? +DISK=$3 +PART=$4 + +DEVICE=$(ogDiskToDev $DISK) +read -e EFIDISK EFIPART <<<"$(ogGetEsp)" + +# Datos de la imagen +IMGGUID=$(jq .guid $INFOFILE|tr -d \") +IMGEFIGUID=$(jq .espguid $INFOFILE|tr -d \") + +# Datos actuales +DATA=$(sfdisk -J $DEVICE) +GUID=$(echo $DATA|jq ".partitiontable|.id"|tr -d \") + +if [ "$IMGGUID" != "$GUID" ]; then + echo sgdisk -U "$IMGGUID" "$DEVICE" + sgdisk -U "$IMGGUID" "$DEVICE" + partprobe +fi + +if [ $DISK -eq $EFIDISK ]; then + EFIDATA=$DATA + EFIDEVICE=$DEVICE +else + EFIDEVICE=$(ogDiskToDev $EFIDISK) || return $? + EFIDATA=$(sfdisk -J $EFIDEVICE) + EFIGUID=$(echo $EFIDATA|jq ".partitiontable|.id"|tr -d \") + if [ "$IMGEFIGUID" != "$EFIGUID" ]; then +echo sgdisk -U "$IMGEFIGUID" "$EFIDEVICE" + sgdisk -U "$IMGEFIGUID" "$EFIDEVICE" + partprobe + fi +fi +} + + +#/** +# ogNvramSetNext +#@brief Configura el próximo arranque con la entrada del gestor de arranque (NVRAM) identificada por la etiqueta o el orden. +#@param Num_order_entry | Label_entry Número de orden o la etiqueta de la entrada a borrar. +#@return (nada) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTUEFI UEFI no activa. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#*/ ## +function ogNvramSetNext () { +local NUMENTRY + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [ Num_order_entry | Label_entry ] " \ + "$FUNCNAME 2" \ + "$FUNCNAME \"Windows Boot Manager\"" + return +fi + +# Error si no se recibe 1 parámetro. +[ $# -eq 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME [ Num_order_entry | Label_entry ]" || return $? + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +# Distingo si es número de orden o etiqueta +if [[ $1 =~ ^([0-9a-fA-F]+)$ ]]; then + NUMENTRY=$( efibootmgr |awk -v NUM="$(printf %04x 0x$1|tr '[:lower:]' '[:upper:]')" '{ if($1~NUM) print substr($1,5,4)}') +else + NUMENTRY=$(efibootmgr |awk -v LABEL="$1" '{ if(substr($0, index($0,$2))==LABEL) print substr($1,5,4)}') +fi + +[ "$NUMENTRY" == "" ] && return $(ogRaiseError $OG_ERR_NOTFOUND "NVRAM entry '$1'") + +efibootmgr -n $NUMENTRY &>/dev/null +} + +#/** +# ogNvramSetOrder +#@brief Configura el orden de las entradas de la NVRAM +#@param Orden de las entradas separadas por espacios +#@return (nada) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTUEFI UEFI no activa. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado (entrada NVRAM). +#*/ ## +function ogNvramSetOrder () { +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME Num_order1 [ Num_order2 ] ... " \ + "$FUNCNAME 1 3" + return +fi +# +# Error si no se recibe al menos 1 parámetro. +[ $# -ge 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME Num_order1 [ Num_order2 ] ..." || return $? + +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +# Comprobamos que sean números +[[ "$@" =~ ^([0-9a-fA-F ]+)$ ]] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME Num_order1 [ Num_order2 ] ..." || return $? + +# Entradas de la NVRAM actuales +NUMENTRYS=$(efibootmgr|awk '{ if ($1~/Boot[0-9a-fA-F]{4}/) printf "0%s ", substr($1,5,4)}') + +ORDER="" +for ARG in $@; do + # Si no existe la entrada me salgo + ARG=$(printf %04X 0x$ARG) + echo $NUMENTRYS | grep "$ARG" &>/dev/null || ogRaiseError $OG_ERR_NOTFOUND "NVRAM entry order \"$ARG\"" || return $? + ORDER=${ORDER},$ARG +done + +# Cambiamos el orden +efibootmgr -o ${ORDER#,} &>/dev/null +} + + +#/** +# ogNvramSetTimeout +#@brief Configura el tiempo de espera de la NVRAM +#@param Orden de las entradas separadas por espacios +#@return (nada) + +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#*/ ## +function ogNvramSetTimeout () { +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_Timeout (seg)" \ + "$FUNCNAME 2" + return +fi +# +# Si no es equipo UEFI salir con error +ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $? + +# Error si no se recibe 1 parámetro. +[ $# -eq 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_Timeout (seg)" || return $? + +# Comprobamos que sea un número +[[ "$1" =~ ^([0-9 ]+)*$ ]] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_Timeout (seg)" || return $? + +# Cambiamos el orden +efibootmgr -t $1 &>/dev/null +} + + +#/** +# ogUuidChange int_ndisk str_repo +#@brief Reemplaza el UUID de un sistema de ficheros. +#@param int_ndisk nº de orden del disco +#@param int_part nº de partición +#@return (nada, por determinar) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#*/ ## +function ogUuidChange () { +local MNTDIR DEVICE UUID NEWUUID f + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part" \ + "$FUNCNAME 1 2" + return +fi + +# Error si no se reciben al menos 2 parámetros. +[ $# -eq 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part" || return $? + +# Comprobamos que exista la partición +MNTDIR=$(ogMount $1 $2) || ogRaiseError $OG_ERR_NOTFOUND "Device $1 $2" || return $? +DEVICE=$(ogDiskToDev $1 $2) +UUID=$(blkid -o value -s UUID $DEVICE) +NEWUUID=$(cat /proc/sys/kernel/random/uuid) + +# Cambiamos UUID a la partición +ogUnmount $1 $2 +tune2fs $DEVICE -U $NEWUUID + +# Cambiamos UUID en la configuración (fstab y grub) +ogMount $1 $2 +for f in $MNTDIR/etc/fstab $MNTDIR/{,boot/}{{grubMBR,grubPARTITION}/boot/,}{grub{,2},{,efi/}EFI/*}/{menu.lst,grub.cfg}; do + [ -r $f ] && sed -i s/$UUID/$NEWUUID/g $f +done +} diff --git a/client/shared/bin/browser b/client/shared/bin/browser Binary files differindex 4370974f..54663a5a 100755 --- a/client/shared/bin/browser +++ b/client/shared/bin/browser diff --git a/client/shared/bin/ld-mac b/client/shared/bin/ld-mac Binary files differdeleted file mode 100755 index 0152c7d5..00000000 --- a/client/shared/bin/ld-mac +++ /dev/null diff --git a/client/shared/etc/lang.ca_ES.conf b/client/shared/etc/lang.ca_ES.conf index ed20f3af..92e97598 100644 --- a/client/shared/etc/lang.ca_ES.conf +++ b/client/shared/etc/lang.ca_ES.conf @@ -16,6 +16,7 @@ MSG_ERR_IMAGE="No se puede crear o restaurar una image de sistema" MSG_ERR_NOTEXEC="Programa o función no ejecutable" MSG_ERR_NOTWRITE="No hay acceso de escritura" MSG_ERR_NOTCACHE="No existe particion Cache en el cliente" +MSG_ERR_NOTUEFI="La interfaz UEFI no está activa" MSG_ERR_CACHESIZE="El espacio de la cache local o remota no es suficiente" MSG_ERR_REDUCEFS="Error al reducir el sistema de archivos" MSG_ERR_EXTENDFS="Error al expandir el sistema de archivos" @@ -131,6 +132,7 @@ 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_ogCreateTorrent="" +MSG_HELP_ogCopyEfiBootLoader="Copia el cargador de arranque desde la partición EFI a la de sistema." 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" @@ -196,9 +198,23 @@ MSG_HELP_ogGrubHidePartitions="Configura el grub del MBR para que oculte las par MSG_HELP_ogGrubInstallMbr="Instal·la el carregador d'arrencada GRUB al MBR del primer disc dur" MSG_HELP_ogGrubInstallPartition="Instal·la el carregador d'arrencada BURG al BootSector" MSG_HELP_ogGrubOgliveDefaultEntry="Configura la entrada de ogLive como la entrada por defecto de GRUB." +MSG_HELP_ogGrubUefiConf="Genera el fichero grub.cfg de la partición EFI." 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_ogNvramActiveEntry="Configura a activa entrada del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramAddEntry="Crea nueva entrada del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramDeleteEntry="Borra entrada del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramGetCurrent="Muestra la entrada del gestor de arranque (NVRAM) que ha iniciado el equipo." +MSG_HELP_ogNvramGetNext="Muestra la entrada del gestor de arranque (NVRAM) que se utilizará en el próximo arranque." +MSG_HELP_ogNvramGetOrder="Muestra el orden de las entradas del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramGetTimeout="Muestra el tiempo de espera del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramInactiveEntry="Configura a inactiva entrada del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramList="Lista las entradas del gestor de arranque (NVRAN) marcando con un asterisco las activas" +MSG_HELP_ogNvramSetNext="Configura el próximo arranque con la entrada del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramSetOrder="Configura el orden de las entradas del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramSetTimeout="Configura el tiempo de espera del gestor de arranque (NVRAM)." +MSG_HELP_ogGetOsType="Devuelve el tipo de un sistema operativo instalado." MSG_HELP_ogInstallFirstBoot="Crea un archivo que se ejecutará en el primer arranque de Windows." MSG_HELP_ogInstallLaunchDaemon="Instala un archivo que se ejecutará en el arranque de macOS." MSG_HELP_ogInstallLinuxClient="$MSG_OBSOLETE." @@ -245,12 +261,22 @@ MSG_HELP_ogMount="Monta un sistema de archivos y devuelve el punto de montaje." MSG_HELP_ogRaiseError="Muestra y registra mensajes de error y devuelve el código correspondiente." MSG_HELP_ogReduceFs="Reduce el tamaño del sistema de archivos al mínimo ocupado por sus datos." MSG_HELP_ogReduceImage="Reduce el tamaño de la imagen" +MSG_HELP_ogRefindDeleteEntry="Borra en rEFInd las entradas para el inicio en una particion." +MSG_HELP_ogRefindDefaultEntry="Configura la entrada por defecto de rEFInd." +MSG_HELP_ogRefindOgliveDefaultEntry="Configura la entrada de ogLive como la entrada por defecto de rEFInd." +MSG_HELP_ogRefindSetTheme="Asigna un tema al rEFInd." +MSG_HELP_ogRefindSetTimeOut="Define el tiempo (segundos) que se muestran las opciones de inicio de rEFInd." +MSG_HELP_ogRefindSetResolution="Define la resolución que usuará el thema del gestor de arranque rEFInd." +MSG_HELP_ogRefindInstall="Instala y configura el gestor rEFInd en la particion EFI" MSG_HELP_ogRestoreAclImage="" MSG_HELP_ogRestoreBootLoaderImage="" MSG_HELP_ogRestoreDiskImage="Restaura una imagen de un disco completo." +MSG_HELP_ogRestoreEfiBootLoader="Copia el cargador de arranque de la partición de sistema a la partición EFI." MSG_HELP_ogRestoreImage="Restaura una imagen de sistema operativo." MSG_HELP_ogRestoreInfoImage="Restablece informacion del sistema: acl y enlaces simbolicos" MSG_HELP_ogRestoreMbrImage="Restaura una imagen del sector de arranque (MBR)." +MSG_HELP_ogRestoreUuidPartitions="Restaura los uuid de las particiones y la tabla de particiones." +MSG_HELP_ogSaveImageInfo="Crea un fichero con la información de la imagen." MSG_HELP_ogSetLinuxName="" MSG_HELP_ogSetPartitionActive="Establece el número de partición activa de un disco." MSG_HELP_ogSetPartitionId="Modifica el tipo de una partición física usando el mnemónico del tipo." @@ -282,6 +308,7 @@ MSG_HELP_ogUnmountImage="Desmonta la imagen" MSG_HELP_ogUnsetDirtyBit="" MSG_HELP_ogUpdateCacheIsNecesary="Comprueba si es necesario actualizar una archivo en la cache local." MSG_HELP_ogUpdatePartitionTable="Actualiza informacion tabla particiones del disco" +MSG_HELP_ogUuidChange="Reemplaza el UUID de un sistema de ficheros." MSG_HELP_ogWaitSyncImage="" MSG_HELP_ogWindowsBootParameters="" MSG_HELP_ogWindowsRegisterPartition="" diff --git a/client/shared/etc/lang.en_GB.conf b/client/shared/etc/lang.en_GB.conf index 13365baf..b21a270f 100644 --- a/client/shared/etc/lang.en_GB.conf +++ b/client/shared/etc/lang.en_GB.conf @@ -19,6 +19,7 @@ MSG_ERR_IMAGE="Cannot create or restore a system image" MSG_ERR_NOTEXEC="Non executable program or function" MSG_ERR_NOTWRITE="Write access denied" MSG_ERR_NOTCACHE="No client cache partition" +MSG_ERR_NOTUEFI="UEFI isn't active" MSG_ERR_CACHESIZE="Not enough space in local or remote cache" MSG_ERR_REDUCEFS="Error when reducing file system" MSG_ERR_EXTENDFS="Error when expanding file system" @@ -134,6 +135,7 @@ MSG_HELP_ogCreateMbrImage="Creates MBR image." MSG_HELP_ogCreatePartitions="Creates disk partition table." MSG_HELP_ogCreatePartitionTable="Creates partition table, if necessary." MSG_HELP_ogCreateTorrent="" +MSG_HELP_ogCopyEfiBootLoader="Copy the boot loader from the EFI partition to system partition." MSG_HELP_ogDeleteCache="Deletes local cache partition." MSG_HELP_ogDeleteFile="Deletes file from storage." MSG_HELP_ogDeletePartitionTable="Deletes disk table partition" @@ -199,6 +201,7 @@ MSG_HELP_ogGrubHidePartitions="Sets MBR grub to hide non starting Windows partit MSG_HELP_ogGrubInstallMbr="Installs GRUB boot loader on 1st HD MBR" MSG_HELP_ogGrubInstallPartition="Installs GRUB boot loader on BootSector" MSG_HELP_ogGrubOgliveDefaultEntry="Sets ogLive entry as default GRUB entry." +MSG_HELP_ogGrubUefiConf="Generates the grub.cfg file of the EFI partition." MSG_HELP_ogHelp="Shows functions help messages." MSG_HELP_ogHidePartition="Hides Windows partition." MSG_HELP_ogIdToType="Returns partition type identifier." @@ -245,15 +248,37 @@ MSG_HELP_ogMountCdrom="Mounts default optical drive." MSG_HELP_ogMountFs=$MSG_HELP_ogMount MSG_HELP_ogMountImage="Mounts synchronizable image" MSG_HELP_ogMount="Mounts file system and returns mount point." +MSG_HELP_ogNvramActiveEntry="Sets active a bootloader (NVRAM) entry." +MSG_HELP_ogNvramAddEntry="Creates new entry in bootloader (NVRAM)." +MSG_HELP_ogNvramDeleteEntry="Deletes a bootloader (NVRAM) entry." +MSG_HELP_ogNvramGetCurrent="Displays the bootloader (NVRAM) entry that was started by the computer." +MSG_HELP_ogNvramGetNext="Displays the bootloader (NVRAM) entry for the boot next." +MSG_HELP_ogNvramGetOrder="Displays the bootloader (NVRAM) entries order." +MSG_HELP_ogNvramGetTimeout="Displays the bootloader (NVRAM) timeout." +MSG_HELP_ogNvramInactiveEntry="Sets inactive bootloader (NVRAM) entry." +MSG_HELP_ogNvramList="Lists bootloader (NVRAM) entries, by staring actives ones." +MSG_HELP_ogNvramSetNext="Set the bootloader (NVRAM) entry for the boot next." +MSG_HELP_ogNvramSetOrder="Sets the bootloader (NVRAM) entries order." +MSG_HELP_ogNvramSetTimeout="Sets the bootloader (NVRAM) timeout." MSG_HELP_ogRaiseError="Displays and registers error messages and returns code." MSG_HELP_ogReduceFs="Reduces file system size to minimum." MSG_HELP_ogReduceImage="Reduces image size." +MSG_HELP_ogRefindDeleteEntry="Deletes the menu entry of a partition in rEFInd." +MSG_HELP_ogRefindDefaultEntry="Configures default menu entry in rEFInd."" +MSG_HELP_ogRefindOgliveDefaultEntry="Configures ogLive menu entry as default menu entry in rEFInd." +MSG_HELP_ogRefindSetTheme="Configures rEFInd's theme." +MSG_HELP_ogRefindSetTimeOut="Defines the time that rEFInd shows the menu." +MSG_HELP_ogRefindSetResolution="Defines the resolucion of rEFInd's theme." +MSG_HELP_ogRefindInstall="Installs and configures rEFInd boot loader in ESP." MSG_HELP_ogRestoreAclImage="Restores Windows ACL (Inf. must be on /tmp)." MSG_HELP_ogRestoreBootLoaderImage="" MSG_HELP_ogRestoreDiskImage="Restores disk image." +MSG_HELP_ogRestoreEfiBootLoader="Copy the boot loader from the system partition to the EFI partition." MSG_HELP_ogRestoreImage="Restore OS image." MSG_HELP_ogRestoreInfoImage="Restores system information: ACL and symbolic links" MSG_HELP_ogRestoreMbrImage="Restores boot sector image (MBR)." +MSG_HELP_ogRestoreUuidPartitions="Restores UUID of partitions and partition table." +MSG_HELP_ogSaveImageInfo="Creates the image information file." MSG_HELP_ogSetLinuxName="" MSG_HELP_ogSetPartitionActive="Sets active partition number of disk." MSG_HELP_ogSetPartitionId="Changes partition ID using mnemonic." @@ -285,6 +310,7 @@ MSG_HELP_ogUnmount="Unmounts file system." MSG_HELP_ogUnsetDirtyBit= MSG_HELP_ogUpdateCacheIsNecesary="Checks if necessary file update in local cache." MSG_HELP_ogUpdatePartitionTable="Updates disk partition table info " +MSG_HELP_ogUuidChange="Replaces the filesystem UUID" MSG_HELP_ogWaitSyncImage="" MSG_HELP_ogWindowsBootParameters="" MSG_HELP_ogWindowsRegisterPartition="" diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf index 782cb624..27d0cd64 100644 --- a/client/shared/etc/lang.es_ES.conf +++ b/client/shared/etc/lang.es_ES.conf @@ -16,6 +16,7 @@ MSG_ERR_IMAGE="No se puede crear o restaurar una image de sistema" MSG_ERR_NOTEXEC="Programa o función no ejecutable" MSG_ERR_NOTWRITE="No hay acceso de escritura" MSG_ERR_NOTCACHE="No existe partición caché en el cliente" +MSG_ERR_NOTUEFI="La interfaz UEFI no está activa" MSG_ERR_CACHESIZE="El espacio de la caché local o remota no es suficiente" MSG_ERR_REDUCEFS="Error al reducir el sistema de archivos" MSG_ERR_EXTENDFS="Error al expandir el sistema de archivos" @@ -131,6 +132,7 @@ 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_ogCreateTorrent="" +MSG_HELP_ogCopyEfiBootLoader="Copia el cargador de arranque desde la partición EFI a la de sistema." 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" @@ -172,6 +174,18 @@ MSG_HELP_ogGetMacAddress="Devuelve la dirección Ethernet del cliente." MSG_HELP_ogGetMountImageDir="Devuelve el directorio de montaje de una imagen." MSG_HELP_ogGetMountPoint="Devuelve el directorio donde está montado un sistema de archivos local." MSG_HELP_ogGetNetInterface="" +MSG_HELP_ogNvramActiveEntry="Configura a activa entrada del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramAddEntry="Crea nueva entrada del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramDeleteEntry="Borra entrada del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramGetCurrent="Muestra la entrada del gestor de arranque (NVRAM) que ha iniciado el equipo." +MSG_HELP_ogNvramGetNext="Muestra la entrada del gestor de arranque (NVRAM) que se utilizará en el próximo arranque." +MSG_HELP_ogNvramGetOrder="Muestra el orden de las entradas del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramGetTimeout="Muestra el tiempo de espera del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramInactiveEntry="Configura a inactiva entrada del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramList="Lista las entradas del gestor de arranque (NVRAN) marcando con un asterisco las activas" +MSG_HELP_ogNvramSetNext="Configura el próximo arranque con la entrada del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramSetOrder="Configura el orden de las entradas del gestor de arranque (NVRAM)." +MSG_HELP_ogNvramSetTimeout="Configura el tiempo de espera del gestor de arranque (NVRAM)." MSG_HELP_ogGetOsType="Devuelve el tipo de un sistema operativo instalado." MSG_HELP_ogGetOsUuid="Devuelve el UUID de un sistema operativo" MSG_HELP_ogGetOsVersion="Devuelve el tipo y la versión de un sistema operativo instalado." @@ -196,6 +210,7 @@ MSG_HELP_ogGrubHidePartitions="Configura el grub del MBR para que oculte las par MSG_HELP_ogGrubInstallMbr="Instala el gestor de arranque GRUB en el MBR del primer disco duro" MSG_HELP_ogGrubInstallPartition="Instala el gestor de arranque GRUB en el BootSector" MSG_HELP_ogGrubOgliveDefaultEntry="Configura la entrada de ogLive como la entrada por defecto de GRUB." +MSG_HELP_ogGrubUefiConf="Genera el fichero grub.cfg de la partición EFI." 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." @@ -245,12 +260,22 @@ MSG_HELP_ogMount="Monta un sistema de archivos y devuelve el punto de montaje." MSG_HELP_ogRaiseError="Muestra y registra mensajes de error y devuelve el código correspondiente." MSG_HELP_ogReduceFs="Reduce el tamaño del sistema de archivos al mínimo ocupado por sus datos." MSG_HELP_ogReduceImage="Reduce el tamaño de la imagen" +MSG_HELP_ogRefindDeleteEntry="Borra en rEFInd las entradas para el inicio en una particion." +MSG_HELP_ogRefindDefaultEntry="Configura la entrada por defecto de rEFInd." +MSG_HELP_ogRefindOgliveDefaultEntry="Configura la entrada de ogLive como la entrada por defecto de rEFInd." +MSG_HELP_ogRefindSetTheme="Asigna un tema al rEFInd." +MSG_HELP_ogRefindSetTimeOut="Define el tiempo (segundos) que se muestran las opciones de inicio de rEFInd." +MSG_HELP_ogRefindSetResolution="Define la resolución que usuará el thema del gestor de arranque rEFInd." +MSG_HELP_ogRefindInstall="Instala y configura el gestor rEFInd en la particion EFI" MSG_HELP_ogRestoreAclImage="Restaura las ACL de Windows (La informacion debe estar copiada en /tmp)." MSG_HELP_ogRestoreBootLoaderImage="" MSG_HELP_ogRestoreDiskImage="Restaura una imagen de un disco completo." +MSG_HELP_ogRestoreEfiBootLoader="Copia el cargador de arranque de la partición de sistema a la partición EFI." MSG_HELP_ogRestoreImage="Restaura una imagen de sistema operativo." MSG_HELP_ogRestoreInfoImage="Restablece información del sistema: ACL y enlaces simbolicos" MSG_HELP_ogRestoreMbrImage="Restaura una imagen del sector de arranque (MBR)." +MSG_HELP_ogRestoreUuidPartitions="Restaura los uuid de las particiones y la tabla de particiones." +MSG_HELP_ogSaveImageInfo="Crea un fichero con la información de la imagen." MSG_HELP_ogSetLinuxName="" MSG_HELP_ogSetPartitionActive="Establece el número de partición activa de un disco." MSG_HELP_ogSetPartitionId="Modifica el tipo de una partición física usando el mnemónico del tipo." @@ -282,6 +307,7 @@ MSG_HELP_ogUnmountImage="Desmonta la imagen." MSG_HELP_ogUnsetDirtyBit="" MSG_HELP_ogUpdateCacheIsNecesary="Comprueba si es necesario actualizar una archivo en la cache local." MSG_HELP_ogUpdatePartitionTable="Actualiza información de la tabla de particiones del disco." +MSG_HELP_ogUuidChange="Reemplaza el UUID de un sistema de ficheros." MSG_HELP_ogWaitSyncImage="" MSG_HELP_ogWindowsBootParameters="" MSG_HELP_ogWindowsRegisterPartition="" diff --git a/client/shared/etc/preinit/fileslinks.sh b/client/shared/etc/preinit/fileslinks.sh index b6fc7e2f..826282da 100755 --- a/client/shared/etc/preinit/fileslinks.sh +++ b/client/shared/etc/preinit/fileslinks.sh @@ -6,9 +6,12 @@ #@version 0.9 #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-10-10 -#@version 1.0.5 - Enlace para librería libmac. +#@version 1.0.5 - Enlace para librería libmac (obsoleto en versión 1.1.1). #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2012-06-28 +#@version 1.1.2 - Autenticación con clave pública para SSH +#@author Irina Gómez, ETSII Universidad de Sevilla +#@date 2019-09-25 #*/ @@ -19,9 +22,6 @@ if [ -n "$OPENGNSYS" ]; then # Shell BASH por defecto (para usar "runtest") ln -fs /bin/bash /bin/sh 2>/dev/null - # Enlace a la librería libmac para ld-mac. - [ -f /usr/lib/libmac.so ] || ln -fs $OGLIB/libmac.so /usr/lib 2>/dev/null - # Crear directorio de bloqueos mkdir -p /var/lock 2>/dev/null || mkdir -p /run/lock @@ -32,7 +32,7 @@ if [ -n "$OPENGNSYS" ]; then # Enlaces para Qt Embeded. QTDIR="/usr/local" mkdir -p $QTDIR/{etc,lib,plugins} - for i in $OGLIB/qtlib/*; do + for i in $OGLIB/qtlib/* $OGLIB/fonts; do [ -f $QTDIR/lib/$i ] || ln -fs $i $QTDIR/lib 2>/dev/null done for i in $OGLIB/qtplugins/*; do @@ -42,6 +42,9 @@ if [ -n "$OPENGNSYS" ]; then [ -f $QTDIR/etc/$i ] || ln -fs $i $QTDIR/etc 2>/dev/null done + # Autenticación con clave pública para SSH + [ -f /scripts/ssl/authorized_keys ] && cp /scripts/ssl/* /root/.ssh + else # FIXME Error: entorno de OpenGnsys no configurado. echo "Error: OpenGnsys environment is not configured." # FIXME: definir mensaje. diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh index 314fb872..c80043cf 100755 --- a/client/shared/etc/preinit/loadenviron.sh +++ b/client/shared/etc/preinit/loadenviron.sh @@ -141,3 +141,4 @@ export OG_ERR_DONTUNMOUNT_IMAGE=72 # Error al desmontar la imagen export OG_ERR_NOTDIFFERENT=73 # No se detectan diferencias entre la imagen basica y la particion. export OG_ERR_SYNCHRONIZING=74 # Error al sincronizar, puede afectar la creacion/restauracion de la imagen +export OG_ERR_NOTUEFI=80 # La interfaz UEFI no está activa diff --git a/client/shared/lib/grub4dos/chinese/badgrub.exe b/client/shared/lib/grub4dos/chinese/badgrub.exe Binary files differdeleted file mode 100644 index 09daafee..00000000 --- a/client/shared/lib/grub4dos/chinese/badgrub.exe +++ /dev/null diff --git a/client/shared/lib/grub4dos/chinese/grldr b/client/shared/lib/grub4dos/chinese/grldr Binary files differdeleted file mode 100644 index f84d8475..00000000 --- a/client/shared/lib/grub4dos/chinese/grldr +++ /dev/null diff --git a/client/shared/lib/grub4dos/chinese/grub.exe b/client/shared/lib/grub4dos/chinese/grub.exe Binary files differdeleted file mode 100644 index f64b60b0..00000000 --- a/client/shared/lib/grub4dos/chinese/grub.exe +++ /dev/null diff --git a/client/shared/lib/locale/ca/LC_MESSAGES/browser.mo b/client/shared/lib/locale/ca/LC_MESSAGES/browser.mo Binary files differindex eda51ffb..61047594 100644 --- a/client/shared/lib/locale/ca/LC_MESSAGES/browser.mo +++ b/client/shared/lib/locale/ca/LC_MESSAGES/browser.mo diff --git a/client/shared/lib/locale/en/LC_MESSAGES/browser.mo b/client/shared/lib/locale/en/LC_MESSAGES/browser.mo Binary files differindex 9ac0ebbe..d6326d7a 100644 --- a/client/shared/lib/locale/en/LC_MESSAGES/browser.mo +++ b/client/shared/lib/locale/en/LC_MESSAGES/browser.mo diff --git a/client/shared/lib/ogclient/ogAdmLnxClient b/client/shared/lib/ogclient/ogAdmLnxClient Binary files differdeleted file mode 100755 index df8aa2cc..00000000 --- a/client/shared/lib/ogclient/ogAdmLnxClient +++ /dev/null diff --git a/client/shared/lib/ogclient/ogAdmWinClient.exe b/client/shared/lib/ogclient/ogAdmWinClient.exe Binary files differdeleted file mode 100644 index 56f1899d..00000000 --- a/client/shared/lib/ogclient/ogAdmWinClient.exe +++ /dev/null diff --git a/client/shared/lib/os-probes/mounted/efi/31part-x-y b/client/shared/lib/os-probes/mounted/efi/31part-x-y new file mode 100755 index 00000000..349c36d8 --- /dev/null +++ b/client/shared/lib/os-probes/mounted/efi/31part-x-y @@ -0,0 +1,28 @@ +#!/bin/sh +# OG: Detects Microsoft bootloader on a EFI System Partition in directory Part-xx-yy (#802 #888) + +. /usr/share/os-prober/common.sh + +efi="$1" + +found= +for microsoft in $(item_in_dir Part-..-.. "$efi"); do + for boot in $(item_in_dir boot "$efi/$microsoft"); do + bcd=$(item_in_dir bcd "$efi/$microsoft/$boot") + bootmgfw=$(item_in_dir bootmgfw.efi "$efi/$microsoft/$boot") + if [ -n "$bcd" -a -n "$bootmgfw" ]; then + long="Windows Boot Manager" + short=Windows + path="$microsoft/$boot/$bootmgfw" + found=true + break + fi + done +done + + +if [ -n "$found" ]; then + label="$(count_next_label "$short")" + result "${path}:${long}:${label}" +fi +exit 0 diff --git a/client/shared/scripts/bootOsCustom.template b/client/shared/scripts/bootOsCustom.template index b457fde4..efd4c1fc 100755 --- a/client/shared/scripts/bootOsCustom.template +++ b/client/shared/scripts/bootOsCustom.template @@ -6,8 +6,11 @@ #@param $2 nº de partición #@warning Renombrar este fichero como "bootOsCustom" para personalizar el script estándar "bootOs". #@note La partición a inicializar debe estar montada +#@version 1.1.1 Soporta varios discos +#@date 2019/08/26 #**/ -# CONFIGURAR: Partición de datos de Windows que no queremos ocultar +# CONFIGURAR: Partición de datos de Windows que no queremos ocultar (valor por defecto '0' no oculta nada) +DISKDATA=0 PARTDATA=0 PROG="$(basename $0)" @@ -22,51 +25,57 @@ DISK="$1" # Nº de disco. PART="$2" # Nº de partición. # Paso 0: Añadir código para realizar control de errores de los parámetros de entrada (recomendado). +DEVICE=$(ogDiskToDev "$DISK" "$PART") || exit $? -# Paso 1: Adaptar el código de ejemplo para postconfiguración personalizada. +# Paso 1: Adaptar el código de ejemplo para arranque personalizado. # Nota: el script "bootOs" llama al script "bootOsCustom" después de realizar la operaciones de inicio estándar y antes de desmontar las particiones e iniciar el sistema operativo. -MNTDIR=$(ogMount $DISK $PART) +MNTDIR=$(ogMount $DISK $PART) || exit $? NAME="$(ogGetHostname)" NAME=${NAME:-"pc"} OSTYPE=$(ogGetOsType $DISK $PART) case "$OSTYPE" in Windows) - ## Borrar marcas de arrranque de todos los Windows instalados en el disco. - #echo "[30] Borrar marcas de arrranque de todos los Windows instalados en el disco." - #for (( i=1; i<=$(ogGetPartitionsNumber $1); i++ )); do - # [ "$(ogGetOsType $1 $i)" == "Windows" ] && ogMount $1 $i &>/dev/null - #done - #rm -f /mnt/*/ogboot.* - ## Mostrar las particiones NTFS de sistema (dos opciones) ## Opción 1: SIN ocultar las demás. - #echo "[40] Mostrar y activar particion de Windows $PART." - #[ $(ogGetPartitionType $1 $2) == "HNTFS" ] && ogUnhidePartition $1 $2 + #ogEcho log session "[40] Mostrar y activar particion de Windows $PART." + #[ $(ogGetPartitionType $DISK $PART) == "HNTFS" -o $(ogGetPartitionType $DISK $PART) == "WIN-RESERV" ] && ogUnhidePartition $DISK $PART + + ## Recorremos los distintos discos + #for DEVICE in $(ogDiskToDev); do + # d=$(ogDevToDisk $DEVICE) - ## Opción 2: Ocultamos las demás. - #echo "[40] Activar particion de Windows $PART y ocultar las demás." - #for (( i=1; i<=$(ogGetPartitionsNumber $DISK); i++ )); do - # if [ $i == $PART -o $i == $PARTDATA ]; then - # [ $(ogGetPartitionType $DISK $PART) == "HNTFS" ] && ogUnhidePartition $1 $PART - # # Activo la particion si no es de datos - # [ $i -ne $PARTDATA ] && ogSetPartitionActive $DISK $i + # ## Mostrar las particiones NTFS de sistema (dos opciones) + # ## Opción 2: Ocultamos las demás. + # ogEcho log session "[40] Activar particion de Windows $PART y ocultar las demás." + # for (( i=1; i<=$(ogGetPartitionsNumber $d); i++ )); do + # if [ $d == $DISK -a $i == $PART ] || [ $d == $DISKDATA -a $i == $PARTDATA ]; then + # [ $(ogGetPartitionType $d $i) == "HNTFS" -o $(ogGetPartitionType $d $i) == "WIN-RESERV" ] && ogUnhidePartition $d $i # else - # [ "$(ogGetPartitionType $DISK $i)" == NTFS ] && ogHidePartition $DISK $i + # [ "$(ogGetPartitionType $d $i)" == NTFS -o "$(ogGetPartitionType $d $i)" == "WINDOWS" ] && ogHidePartition $d $i # fi + # done + + # ## Borrar marcas de arrranque de todos los Windows instalados en el disco. + # ogEcho log session "[30] Borrar marcas de arrranque de todos los Windows instalados en el disco." + # for (( i=1; i<=$(ogGetPartitionsNumber $d); i++ )); do + # [ "$(ogGetOsType $d $i)" == "Windows" ] && ogMount $d $i &>/dev/null + # done + # rm -f /mnt/*/ogboot.* + #done ;; Linux) ## Modificar el nombre del equipo - #echo "[30] Asignar nombre Linux \"$NAME\"." - #ETC=$(ogGetPath $1 $2 /etc) + #ogEcho log session "[30] Asignar nombre Linux \"$NAME\"." + #ETC=$(ogGetPath $DISK $PART /etc) #[ -d "$ETC" ] && echo "$NAME" >$ETC/hostname 2>/dev/null ## Sustituir UUID o LABEL por su dispositivo en definición de sistema de archivo raíz. #if [ -f "$ETC/fstab" ]; then - # echo "[40] Actualizar fstab con particion raiz \"$PART\"." + # ogEcho log session "[40] Actualizar fstab con particion raíz \"$PART\"." # awk -v P="$PART " '{ if ($2=="/" && $1!~/^#/) {sub(/^.*$/, P, $1)} # print }' $ETC/fstab >/tmp/fstab # mv /tmp/fstab $ETC/fstab @@ -76,7 +85,7 @@ case "$OSTYPE" in ## En el servidor el nuevo fichero debe situarse en el directorio del grupo: ## /opt/opengnsys/images/groups/nombre_aula #if [ -r $(ogGetGroupDir)/passwd ]; then - # echo "[65] Cambiar claves de usuarios." + # ogEcho log session "[65] Cambiar claves de usuarios." # cp $(ogGetGroupDir)/passwd $MNTDIR/etc #fi ;; diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster index b78bd629..6d8001d2 100755 --- a/client/shared/scripts/cloneRemoteFromMaster +++ b/client/shared/scripts/cloneRemoteFromMaster @@ -159,6 +159,13 @@ case $MASTERIP in #Obtener tamaño de la partición. SIZE=$(ogGetPartitionSize $2 $3) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar tamaño partcion $2 $3 l127"; echo $?) + # Si es UEFI copio el cargador de arranque a la partición + OSTYPE="$(ogGetOsType $2 $3)" + if ogIsEfiActive && [ "$OSTYPE" == "Windows" ]; then + ogEcho log session "[12] $MSG_HELP_ogCopyEfiBootLoader" + ogCopyEfiBootLoader $2 $3 + fi + if [ "$OGWINREDUCE" == "TRUE" ] then ogEcho log session "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs index 4b7ec6f7..2e529c9e 100755 --- a/client/shared/scripts/configureOs +++ b/client/shared/scripts/configureOs @@ -32,6 +32,9 @@ #@version 1.0.6b - llamadas opcionales para mejoras varias. Descomentar la instruccion para su activacion. ogConfigureFstab #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2016-11-03 +#@version 1.1.1 - Equipos UEFI: para Windows copia cargador de arranque a partición UEFI, para linux configura particion ESP en fstab. (ticket #802 #889 #890) +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019-01-08 #*/ ## # Carga el configurador del engine y los parámetros de red. @@ -67,8 +70,14 @@ case "$OSTYPE" in # Cambiar nombre en sistemas Windows. HOST=${HOST:-"pc"} ogSetWindowsName $1 $2 "$HOST" - # Configurar el boot sector de la partición Windows. - ogFixBootSector $1 $2 + # Si es UEFI copio el cargador de arranque a la partición EFI e instalo rEFInd. + if ogIsEfiActive; then + ogRestoreEfiBootLoader $1 $2 + ogRefindInstall + else + # Configurar el boot sector de la partición Windows. + ogFixBootSector $1 $2 + fi # 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:\ @@ -82,12 +91,20 @@ case "$OSTYPE" in fi ;; Linux) # Postconfiguración de GNU/Linux. + # Configuro fstab: particion de Swap y si es UEFI además la partición EFI. + ogConfigureFstab $1 $2 ## Instala (no configura) el codigo de arranque del Grub en la partición (no lo configura, se mantiene el original de la imagen) ogGrubInstallPartition $1 $2 + # Si es UEFI instalo rEFInd. + ogIsEfiActive && ogRefindInstall # Eliminar el antiguo cliente de Linux. [ -n "$(find $MNTDIR/usr/sbin $MNTDIR/sbin $MNTDIR/usr/local/sbin -name ogAdmLnxClient -print)" ] && ogUninstallLinuxClient $1 $2 # Configurar nuevo agente OGAgent. ogConfigureOgagent $1 $2 + ## Modificar el nombre del equipo + echo "Asignar nombre Linux \"$HOST\"." + ETC=$(ogGetPath $1 $2 /etc) + [ -d "$ETC" ] && echo "$HOST" >$ETC/hostname 2>/dev/null ;; MacOS) # Postconfiguración de Mac OS X. # Fichero indicador de activación de postconfiguración. diff --git a/client/shared/scripts/configureOsCustom.template b/client/shared/scripts/configureOsCustom.template index 66be3c63..f1c8e2a6 100644 --- a/client/shared/scripts/configureOsCustom.template +++ b/client/shared/scripts/configureOsCustom.template @@ -39,8 +39,8 @@ case "$OSTYPE" in #ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows ;; Linux) # Postconfiguración de GNU/Linux. - ##OPCIONAL: Configurar el FSTAB. En esta versión solo autoconfigura la partición SWAP - #ogConfigureFstab $1 $2 + ##OPCIONAL Para UEFI: cambia el UUID de la partición (para tener dos linux en un equipo) + #ogUuidChange $DISK $PART ##OPCIONAL Limpiar dispositivos reconocidos previamente #ogCleanLinuxDevices $1 $2 ## Instala (no configura) el codigo de arranque del Grub en la partición (no lo configura, se mantiene el original de la imagen) diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage index 65da156b..be1cb439 100755 --- a/client/shared/scripts/createImage +++ b/client/shared/scripts/createImage @@ -35,6 +35,9 @@ #@version 1.1.0 - Se muestra el espacio necesario para alojar la imagen y el disponible (ticket #771) #@author Irina Gomez - ETSII Universidad de Sevilla #@date 2017-03-28 +#@version 1.1.1 - #802 Equipos EFI: se guarda el cargador de arranque y UUID de las particiones +#@author Irina Gomez - ETSII Universidad de Sevilla +#@date 2019-01-08 #*/ ## # Test 1. crear una imagen en un REPO sin espacio libre. @@ -123,10 +126,17 @@ ogEcho log session "[20] $MSG_HELP_ogCheckFs $PART $SIZEFS (KB)" ogUnmount $1 $2 2>/dev/null ogCheckFs $1 $2 || exit $(ogRaiseError $OG_ERR_PARTITION "ogCheckFs $1 $2" && echo $?) +# Si es UEFI copio el cargador de arranque a la partición +OSTYPE="$(ogGetOsType $1 $2)" +if ogIsEfiActive && [ "$OSTYPE" == "Windows" ]; then + ogEcho log session "[25] $MSG_HELP_ogCopyEfiBootLoader" + ogCopyEfiBootLoader $1 $2 +fi + # Evaluar variable de engine.cfg para reducir el sistema de archivos en la creacion if [ "$IMGREDUCE" == "TRUE" ] then - ogEcho log session "[30]: $MSG_HELP_ogReduceFs" + ogEcho log session "[30] $MSG_HELP_ogReduceFs" ogReduceFs $1 $2 &>> $OGLOGCOMMAND || exit $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; echo $?) NEWSIZEFS=$(ogGetFsSize $1 $2) TIMEAUX=$[SECONDS-TIME1] @@ -135,7 +145,7 @@ fi # Renombrar el fichero de imagen si ya existe. if [ -f "$IMGFILE" ]; then - ogEcho log session "[10] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"." + ogEcho log session "[35] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"." mv "$IMGFILE" "$IMGFILE.ant" mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null mv "$IMGFILE.sum" "$IMGFILE.sum.ant" 2>/dev/null @@ -170,4 +180,3 @@ TIME=$[SECONDS-TIME1] ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" ogEcho log session " FileSystem $PART with $NEWSIZEFS KB data created onto file-image as $4 and used $IMGSIZE KB across DFS $ogprotocol" ogEcho log session " Image-file $4 metada: $IMGOS" - diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage index 824da2af..9406d80e 100755 --- a/client/shared/scripts/deployImage +++ b/client/shared/scripts/deployImage @@ -119,6 +119,8 @@ case "$MODE" in # Si protocolo es torrent|torrent-cache o multicast|multicast-cache TORRENT|TORRENT-CACHE|MULTICAST|MULTICAST-CACHE|UNICAST|UNICAST-CACHE) + # Eliminamos CACHE o DIRECT + PROTO=${PROTO%%-*} ogEcho log session "[2] updateCache "$REPO" \"/$IMGNAME.img\" $PROTO $PROTOOPT" TIME2=$SECONDS updateCache "$REPO" "/$IMGNAME.img" "$PROTO" "$PROTOOPT" @@ -165,6 +167,10 @@ case "$MODE" in # Time-out en la transferencia multicast (El mensaje de error está enviado) exit $RETVAL ;; + *) + # Error desconocido + exit $RETVAL + ;; esac ;; *) # Error: protocolo desconocido. diff --git a/client/shared/scripts/grubSyntax b/client/shared/scripts/grubSyntax index 209cfc00..aa1adb2e 100755 --- a/client/shared/scripts/grubSyntax +++ b/client/shared/scripts/grubSyntax @@ -7,6 +7,8 @@ set -e #basado en scripts del paquete de grub #Antonio Doblas Viso #Universidad de Málaga +#@version 1.1.1 - En los parámetros del kernel se sustituye el UUID por el dispositivo. +#@version 1.1.1 - Detecta cargador de Windows en directorio Part-xx-yy dentro de ESP (#802 #888) DISK= PART= @@ -31,7 +33,13 @@ fi grub_probe=${grub_probe:-$OGBIN/grub-probe1.99_$(arch)} #librerias del osProber para kernel antiguos: detecta e identifica sistema operativos. -grub-install --version | grep 1.99 && cp -r /opt/opengnsys/lib/os-probes/* /usr/lib/os-probes/ +if grub-install --version | grep 1.99 ; then + cp -r /opt/opengnsys/lib/os-probes/* /usr/lib/os-probes/ +else + # Librería os-probe para cargador de microsoft en dir part-x-y (uefi) + OSPROBE_MS_PART="/opt/opengnsys/lib/os-probes/mounted/efi/31part-x-y" + [ -f $OSPROBE_MS_PART ] && cp $OSPROBE_MS_PART /usr/lib/os-probes/mounted/efi +fi #Autoreconocimiento del ogLive en cache @@ -341,6 +349,24 @@ EOF } EOF ;; + efi) + + found_other_os=1 + EFIPATH=${DEVICE#*@} + DEVICE=${DEVICE%@*} + onstr="$(gettext_printf "(on %s)" "${DEVICE}")" + cat << EOF +menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class windows --class os \$menuentry_id_option 'osprober-efi-$(grub_get_device_id "${DEVICE}")' { +EOF + save_default_entry | sed -e "s/^/\t/" +#ADV prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/" + OG_prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/" + + cat <<EOF + chainloader ${EFIPATH} +} +EOF + ;; linux) KERNELPARAM="" #linuxprobed detecta todos los kernels de una partición. @@ -358,6 +384,9 @@ EOF LKERNEL="`echo ${LINUX} | cut -d ':' -f 4`" LINITRD="`echo ${LINUX} | cut -d ':' -f 5`" LPARAMS="`echo ${LINUX} | cut -d ':' -f 6- | tr '^' ' '`" + # En los parámetros cambiamos el UUID por el valor de LROOT + UUID=$(blkid -s UUID -o value $LROOT) + LPARAMS="$(echo $LPARAMS | sed "s|UUID=$UUID|$LROOT|g")" if [ -z "${LLABEL}" ] ; then LLABEL="${LONGNAME}" fi diff --git a/client/shared/scripts/initCache b/client/shared/scripts/initCache index 796ab84f..9caf0be0 100755 --- a/client/shared/scripts/initCache +++ b/client/shared/scripts/initCache @@ -69,6 +69,8 @@ else ogUnmountCache 2>/dev/null ogDeleteCache fi + # Tomamos el tamaño actual. Si no existe cache será 0. + OLDSIZE=$(ogGetCacheSize 2>/dev/null) || OLDSIZE=0 # Error si tamaño definido no es >0. if [ ! $SIZE -gt 0 ]; then @@ -83,9 +85,9 @@ else ogCreateCache $NDISK $NPART $SIZE ogUpdatePartitionTable $NDISK fi - # Si caché no montada y no formateada, formatear. + # Si caché no montada y no formateada o cambia el tamaño: formatear. CACHE=$(ogFindCache) || exit $? - if ! ogIsFormated $CACHE; then + if ! ogIsFormated $CACHE || [ $SIZE -ne $OLDSIZE ]; then echo "[50] Formatear caché local." ogFormatCache fi diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache index 0632365f..73086bb7 100755 --- a/client/shared/scripts/updateCache +++ b/client/shared/scripts/updateCache @@ -207,7 +207,7 @@ case "$PROTOCOLO" in ogEcho log session "ogCopyFile $REPOSITORIO $2.torrent absolute $OGCAC/$OGIMG" # tiempos timewait=$(expr $(printf '%d\n' 0x$(ogGetMacAddress | awk -F: '{print $5$6}')) \* 120 / 65535) - ogExecAndLog command ogCopyFile $REPOSITORIO "$2.torrent" "$IMGDIR" + ogExecAndLog command ogCopyFile $REPOSITORIO "$2.torrent" "$IMGDIR" || exit $? #TODO: comprobar que el tracker definido en el fichero es correcto. #TODO comprobar que el fichero torrent está en cache # retardamos el inicio -aleatorio de 0 a 120 segundos- al tracker para gestionar mas de +-40 equipos diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt index f04388d7..4908db14 100644 --- a/doc/CHANGELOG.es.txt +++ b/doc/CHANGELOG.es.txt @@ -8,35 +8,69 @@ Lista de cambios incluidos en OpenGnsys 1.1.1 (Espeto) Tickets resueltos en módulo OpenGnsys Cloning Engine: #853 Revisar autodocumentación con doxygen -#863 smartPartition: incluir scritps de ejemplo de particionado personalizado para múltiples d -iscos duros -#864 FirstRunOnceWindows: scripts de ejemplo para installMiniSetup con ratón y teclado desacti -vado +#855 Sincronizadas en la 1.1.0 con rsync (no se resolverá) +#863 smartPartition: incluir scritps de ejemplo de particionado personalizado para múltiples discos duros +#864 FirstRunOnceWindows: scripts de ejemplo para installMiniSetup con ratón y teclado desactivado #866 Si al restaurar usando la cache no hay espacio en la misma se finalizará la acción +#889 Gestión de Windows compatible con UEFI +#890 Gestión de Linux compatible con UEFI +#893 configureOs no asigna nombre de host en Linux +#905 deployImage falla con UNICAST-CACHE (corrección) +#906 Soporte NVMe +#920 Error al guardar en la BD el número de serie (corrección) +#923 Mejora de control de errores en deployImagen (corrección) +#926 bootOsCustom soportará varios discos y una partición de datos Tickets resueltos en módulo OpenGnsys Client: #847 La ISO del ogLive debe de utilzar la revisión de Git y no de SVN +#887 Browser: mostrar aviso si falla la ejecución de un comando +#919 Browser muestra salida de comando a usuario normal (mejora) +#922 Compatibilidad con ogLive basado en Kernel 5.0 Tickets resueltos en módulo OpenGnsys Server: +#580 Correcciones del Core de OpenGnsys: ogAdmServer (corrección) +#836 Crear informe de soporte (mejora) #856 Mejoras en setserveraddr - -Tickets resueltos en módulo OpenGnsys Repository Server: +#857 Crear documento de texto con la compatibilidad +#860 El nombre de la plantilla del fichero PXE para el arranque del primer disco duro no utiliza la misma nomenclatura que el resto #873 Script para importar imagen de otro repositorio +#874 Problemas con Multicast cuando hay 2 o más tarjetas de red en el servidor (corrección) #875 Eliminar el servicio inactivo ogAdmRepo +#878 sendFileMcast con más de una interfaz en el servidor +#881 Personalizar prioridad de ejecución de proceso de torrents +#883 Añadir soporte para syslog a ogAdmServer (mejora) +#884 No ejecutar strip al compilar ogAdmserver +#885 Eliminar ogAdmBoot +#888 Arranque PXE compatible con UEFI +#891 Fijar problema con Wake-On-Lan +#892 Usar Wake-On-Lan en ogAdmServer y en repositorio +#897 No usar tipo socket en ogAdmServer +#898 Eliminar rutinas obsoletas de encriptación y desencriptación +#899 Eliminar código obsoleto en ogAdmLib +#900 Fichero de configuración unificado (duplicado de #140) Tickets resueltos en módulo OpenGnsys Web Admin Console: #772 Módulo de administración web para dispositivos smartphones y tablets (no se resolverá) #804 Conversión de todo el código php de la consola web de administración a Php7 y Mysqli (tarea) #816 Marcar ordenador de profesor -#824 Iniciar sistema restaurado (no integrado) +#834 Aplicar limpieza de código PHP #842 Internacionalización de la consola web +#858 Añadir contenido al panel en blanco de la consola +#895 Asistente de particionado: error al pasar de tabla de particiones MSDOS a GPT y más (corrección) +#903 Formulario "Añadir Nuevo Ordenador" no valida dirección MAC (corrección) +#921 Cola de acciones: no muestra nada (corrección) +#928 Multicast: ampliar el rango de puertos posibles (mejora) Tickets resueltos en módulo OpenGnsys Installer: #784 Mejorar rendimiento de PHP sobre Apache +#843 Incluir nombre de versión #869 Compatibilidad de servidor con Ubuntu 18.04 LTS y CentOS 7.x +#916 No mostrar claves en script de instalación Tickets genéricos resueltos: -#843 Incluir nombre de versión +#785 Usar Grub2 como gestor PXE para soporte UEFI (tarea) +#802 Gestión equipos UEFI (tarea) +#917 Problemas de compatibilidad con Ubuntu 18.04 (corrección) Lista de cambios incluidos en OpenGnsys 1.1.0a (versión de mantenimiento) @@ -46,25 +80,34 @@ Tickets resueltos en módulo OpenGnsys Cloning Engine: #851 Ampliar parámetros de una sesión multicast para los clientes (corrección) #868 ConfiguraOs: error al desinstalar el agente de sistema operativo antiguo (corrección) #871 Error al crear particiones lógicas en discos con sectores de 4 KB (corrección) +#910 El control del éxito se verifica por la longitud de la cadena que retorna la función ogGetPath (corrección) Tickets resueltos en módulo OpenGnsys Client: #852 Apagado del cliente si tiempo de espera cambia de día (corrección) +#913 OGAgent no conecta para algunas tarjetas de red con IP estática (corrección) Tickets resueltos en módulo OpenGnsys Server: #846 Configuración de logrotate para que incluya todos los servicios de OpenGnsys (corrección) #859 Gestor de los ficheros PXE duplicado +#904 ogAdmClient se cuelga al programar una tarea para un equipo Tickets resueltos en módulo OpenGnsys Repository Server: #850 Problema con repositorio recién instalado (corrección) +#882 deleteimage no borra directorio (corrección) Tickets resueltos en módulo OpenGnsys Web Admin Console: #835 Problemas al listar plantillas en Nerboot Avanzado (corrección) #849 Incorporar ordenadores de dhcp no admite comentarios tras la declarción de un host (corrección) #867 La ayuda en la consola incluirá más información #870 Netboot avanzado no crea la plantilla de arranque si el equipo no tiene asignado un repositorio (corrección) +#909 Formulario asistente updateCache no asigna el REPO asociado a la imagen (corrección) Tickets resueltos en módulo OpenGnsys Installer: #876 Problemas al actualizar desde Subversion a Git (corrección) +#879 Función checkVersion de opengnsys_update.sh del tar.gz da error si se ejecuta sobre la misma versión de OpenGnsys (corrección) +#880 openGnsys_update.sh no deja la revisión, solo deja 1.1.0a (corrección) +#886 Actualización de la 1.0.6b a la 1.1.0 da errores a la hora de agregar ordenadores/aulas (no válido) +#912 opengnsys_update.sh desde la 1.0.6b a la 1.1.0a no deja la ApiToken del repo en su fichero de configuración (corrección) Tickets genéricos resueltos: #839 Errores detectado en API REST para Remote PC (corrección) @@ -105,6 +148,7 @@ Tickets resueltos en módulo OpenGnsys Cloning Engine: Tickets resueltos en módulo OpenGnsys Client: #233 Añadir reloj al cliente (resuelto en #746) #244 Internacionalización de los mensajes del Browser (mejora) +#467 ogLive iniciado desde caché #528 busybox tftp ogLive con acceso subdirectorio contenedor tftpd del server #625 Modo offline: segundo sistema de ficheros en cache/USB (duplicado de #467) #709 Script para instalar módulos del Kenrel en el cliente ogLive diff --git a/doc/INSTALL.en.txt b/doc/INSTALL.en.txt index c731350b..fac27547 120000..100644 --- a/doc/INSTALL.en.txt +++ b/doc/INSTALL.en.txt @@ -1 +1,95 @@ -../installer/INSTALL.en.txt
\ No newline at end of file +Installing OpenGnsys Server 1.1.0 +================================= + +Before installation +------------------- + +OpenGnsys Server 1.1.0 is meant to be installed under Ubuntu Server 16.04 LTS or newer, though it has also been tested under operating systems based on CentOS 7. + +Network connection is needed in order to download the required packages, the source code and the preconfigured client. + +Minimum storage requirements: +- 100 MB in /tmp (for the installation process) +- 600 MB in /var/lib/tftpboot (or /srv in Debian systems) for every installed ogLive client. +- 250 MB in the installation folder (/opt/opengnsys) plus 600 MB for every downloaded ISO image. +- Enough disk space for the image repository in /opt/opengnsys/images (it is recommended to mount it on an independent file system) + + + +Installing +---------- + +To install OpenGnsys, run opengnsys_installer.sh script after unpacking the release file (opengnsys-release.tar.gz) or after downloading it directly from https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh + +Unpacking example: + tar xvzf opengnsys-Version.tar.gz + cd opengnsys/installer + +Downloading examples: + + * Download with wget. + wget https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh + + * Download with curl. + curl https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh -o opengnsys_installer.sh + + +You must be root to run the installation script: + sudo bash opengnsys_installer.sh + + +The following information will be requested in order to configure the access to the service (a default value will be introduced if no parameter is indicated): + * MySQL root password + * Web console user and OpenGnsys Super Administrator + * Web console user's password + * Client's password for accessing remote services + * Choose which ogLive clients to install. + +The following processes will be carried out: + * Gathering of the basic network parameters. + * Checking installed packages. + * Downloading and installing dependencies. + * Creating OpenGnsys basic folder sctructure. + * Downloading code from the repository to a temporal folder (/tmp/opengnsys_installer). In upcoming releases this process will not be necessary. + * Compiling and installing OpenGnsys services. + * Basic configuration of OpenGnsys network services (DHCP, PXE and Samba) using the existing configuration templates. + * Copying additional server management files. + * Creating database and configuring OpenGnsys administration console web server. + * Copying administration console pages. + * Copying OpenGnsys client folder structure. + * Downloading OpenGnsys client initial image. + * Basic configuration of OpenGnsys services using network parameters. + +Once the installation process is finished, you can start working with the system: + * Configuring DHCP. + * Adding information in the administration console. + * Customizing administration scripts. + * Creating start menus for the clients. + + + +Updating / upgrading +-------------------- + +There is a system self-upgrading script with the following features: + * Network connection is needed to obtain the latest updates / upgrades. + * If the script updates itself, then it must be run once again. + * Services depending on the operating system will not be updated. + * Configuration files will not be modified. + +You must be root to run this script: + sudo /opt/opengnsys/lib/opengnsys_update.sh + + + +Uninstalling +------------ + +There is also an uninstallation script to remove the OpenGnsys components: + * OpenGnsys files and database will be deleted. + * Operating system packages and their configuration files will be preserved. + * The image folder and its content will not be deleted. + +You must be root to run this script: + sudo /opt/opengnsys/lib/opengnsys_uninstall.sh + diff --git a/doc/INSTALL.es.txt b/doc/INSTALL.es.txt index b4274ba4..7fd679de 120000..100644 --- a/doc/INSTALL.es.txt +++ b/doc/INSTALL.es.txt @@ -1 +1,100 @@ -../installer/INSTALL.es.txt
\ No newline at end of file +Instalación de OpenGnsys Server 1.1.0 +===================================== + +Notas iniciales +--------------- + +Se presupone que el servidor de OpenGnsys 1.1.0 va a ser instalado en una distribución del sistema operativo Ubuntu Server a partir de la versión 16.04 LTS (también ha sido probado en sistemas basados en CentOS 7). + +El serividor debe tener acceso a Internet para descargar los paquetes necesarios, el código del proyecto y el cliente preconfigurado. + +Requisitos mínimos de almacenamiento: +- 100 MB en el directorio /tmp (solo durante la instalación) +- 600 MB en el directorio /var/lib/tftpboot (o /srv en sistemas Debian) por cada cliente ogLive que se desee instalar. +- 250 MB en el directorio de instalación /opt/opengnsys más 600 MB por cada imagen ISO descargada de clientes ogLive. +- Estimar la capacidad necesaria para el repositorio de imágenes en /opt/opengnsys/images (es recomendable que este directorio se monte sobre un sistema de archivos independiente). + + +Instalación +----------- + +La instalación de OpenGnsys se realiza ejecutando el script de instalación opengnsys_installer.sh, el cual puede obtenerse descomprimiendo el fichero de la versión opengnsys-Version.tar.gz o descargándolo directamente de la dirección: https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh + +Ejemplos de descompresión del programa: + + tar xvzf opengnsys-Version.tar.gz + cd opengnsys/installer + +Ejemplos de descarga con varias herramientas: + + * Descargar con wget. + wget https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh + + * Descargar con curl. + curl https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh -o opengnsys_installer.sh + + +El script de instalación debe ser ejecutado como usuario root: + sudo bash opengnsys_installer.sh + + +Dicho script solicitará por teclado la siguiente información para configurar el acceso al servicio (si no se indica un parámetro, toma el valor por defecto): + * Clave del usuario root de MySQL. + * Usuario de acceso a la consola web y super-administrador de OpenGnsys. + * Clave del usuario de acceso a la consola web. + * Clave de acceso del cliente a servicios remotos. + * Seleccionar cliente(s) ogLive para instalar. + +Se realizan los siguientes procesos: + * Obtener los parámetros básicos de la red. + * Comprobar los paquetes instalados. + * Descargar e instalar las dependencias que faltan. + * Crear la estructura básica de directorios de OpenGnsys. + * Descargar el repositorio de código en un directorio temporal (/tmp/opengnsys_installer). Nota: en versiones futuras este proceso no será necesario. + * Compilar e instalar los servicios de OpenGnsys. + * Configuración básica de los serviciios de red DHCP, PXE y NFS/Samba a partir de las plantillas de configuración + * Copiar ficheros complementarios de gestión del servidor. + * Crear la base de datos y configurar el servidor web de OpenGnsys Web Admin Console. + * Copiar los ficheros de las páginas de Web Admin Console. + * Copiar la estructura de directorios de OpenGnsys Client. + * Descargar la o las imágenes iniciales de OpenGnsys Client. + * Configuración básica de los serviciios de OpenGnsys a partir de los parámetros de red. + +Una vez finalizada la ejecución del instalador, puede empezarse a trabajar con el sistema: + * Configurar DHCP. + * Añadir datos en la consola de administración. + * Personalizar scripts de administración. + * Definir menús de inicio para los clientes. + + + +Actualización +------------- + +Se dispone de un script de auto-actualización del sistema, con las siguientes características: + * Es necesario conexión a Internet para obtener las últimas actualizaciones. + * Si el script se actualiza a sí mismo, debe ser ejecutado de nuevo. + * No se actualizan los servicios asociados al sistema operativo. + * No se modifican los ficheros de configuración. + + +El script debe ser ejecutado como usuario root: + sudo /opt/opengnsys/lib/opengnsys_update.sh + + + +Desinstalación +-------------- + +También existe un script de desinstalación de los componentes de OpenGnsys, con las siguientes características: + * Solicita confirmación para ejecutar sus operaciones. + * Se eliminan los ficheros de OpenGnsys y su base de datos. + * No se eliminan ni paquetes del sistema operativo ni sus ficheros de configuración. + * No se elimina el directorio de las imágenes ni su contenido. + * No se eliminan los clientes ogLive ni las plantillas PXE. + + +El script debe ser ejecutado como usuario root: + sudo /opt/opengnsys/lib/opengnsys_uninstall.sh + + diff --git a/doc/VERSION.json b/doc/VERSION.json index d9d28325..1d1910c0 100644 --- a/doc/VERSION.json +++ b/doc/VERSION.json @@ -1,6 +1,6 @@ { "project": "OpenGnsys", - "version": "1.1.1pre", + "version": "1.1.1", "codename": "Espeto", "definition": "http://www.andalucia.com/gastronomy/espeto.htm", "release": "" diff --git a/installer/INSTALL.en.txt b/installer/INSTALL.en.txt index 23698972..ee919932 100644..120000 --- a/installer/INSTALL.en.txt +++ b/installer/INSTALL.en.txt @@ -1,95 +1 @@ -Installing OpenGnsys Server 1.1.1 (Espeto) -========================================== - -Before installation -------------------- - -OpenGnsys Server 1.1.1 (codename "Espeto") is meant to be installed under Ubuntu Server 16.04 LTS or newer, though it has also been tested under operating systems based on CentOS 7 (read COMPATIBILITY.en.txt for more details). - -Network connection is needed in order to download the required packages, the source code and the preconfigured client. - -Minimum storage requirements: -- 100 MB in /tmp (for the installation process) -- 600 MB in /var/lib/tftpboot (or /srv in Debian systems) for every installed ogLive client. -- 250 MB in the installation folder (/opt/opengnsys) plus 600 MB for every downloaded ISO image. -- Enough disk space for the image repository in /opt/opengnsys/images (it is recommended to mount it on an independent file system) - - - -Installing ----------- - -To install OpenGnsys, run opengnsys_installer.sh script after unpacking the release file (opengnsys-release.tar.gz) or after downloading it directly from https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh - -Unpacking example: - tar xvzf opengnsys-Version.tar.gz - cd opengnsys/installer - -Downloading examples: - - * Download with wget. - wget https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh - - * Download with curl. - curl https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh -o opengnsys_installer.sh - - -You must be root to run the installation script: - sudo bash opengnsys_installer.sh - - -The following information will be requested in order to configure the access to the service (a default value will be introduced if no parameter is indicated): - * MySQL root password - * Web console user and OpenGnsys Super Administrator - * Web console user's password - * Client's password for accessing remote services - * Choose which ogLive clients to install. - -The following processes will be carried out: - * Gathering of the basic network parameters. - * Checking installed packages. - * Downloading and installing dependencies. - * Creating OpenGnsys basic folder sctructure. - * Downloading code from the repository to a temporal folder (/tmp/opengnsys_installer). In upcoming releases this process will not be necessary. - * Compiling and installing OpenGnsys services. - * Basic configuration of OpenGnsys network services (DHCP, PXE and Samba) using the existing configuration templates. - * Copying additional server management files. - * Creating database and configuring OpenGnsys administration console web server. - * Copying administration console pages. - * Copying OpenGnsys client folder structure. - * Downloading OpenGnsys client initial image. - * Basic configuration of OpenGnsys services using network parameters. - -Once the installation process is finished, you can start working with the system: - * Configuring DHCP. - * Adding information in the administration console. - * Customizing administration scripts. - * Creating start menus for the clients. - - - -Updating / upgrading --------------------- - -There is a system self-upgrading script with the following features: - * Network connection is needed to obtain the latest updates / upgrades. - * If the script updates itself, then it must be run once again. - * Services depending on the operating system will not be updated. - * Configuration files will not be modified. - -You must be root to run this script: - sudo /opt/opengnsys/lib/opengnsys_update.sh - - - -Uninstalling ------------- - -There is also an uninstallation script to remove the OpenGnsys components: - * OpenGnsys files and database will be deleted. - * Operating system packages and their configuration files will be preserved. - * The image folder and its content will not be deleted. - -You must be root to run this script: - sudo /opt/opengnsys/lib/opengnsys_uninstall.sh - +../doc/INSTALL.en.txt
\ No newline at end of file diff --git a/installer/INSTALL.es.txt b/installer/INSTALL.es.txt index b99b1e20..e93a71d2 100644..120000 --- a/installer/INSTALL.es.txt +++ b/installer/INSTALL.es.txt @@ -1,100 +1 @@ -Instalación de OpenGnsys Server 1.1.1 (Espeto) -============================================== - -Notas iniciales ---------------- - -Se presupone que el servidor de OpenGnsys 1.1.1 (Espeto) debe ser instalado en una distribución del sistema operativo Ubuntu Server a partir de la versión 16.04 LTS, aunque también se está probado en sistemas basados en CentOS 7 (leer el fichero COMPATIBILITY.en.txt para obtener más detalles de compatibilidad). - -El serividor debe tener acceso a Internet para descargar los paquetes necesarios, el código del proyecto y el cliente preconfigurado. - -Requisitos mínimos de almacenamiento: -- 100 MB en el directorio /tmp (solo durante la instalación) -- 600 MB en el directorio /var/lib/tftpboot (o /srv en sistemas Debian) por cada cliente ogLive que se desee instalar. -- 250 MB en el directorio de instalación /opt/opengnsys más 600 MB por cada imagen ISO descargada de clientes ogLive. -- Estimar la capacidad necesaria para el repositorio de imágenes en /opt/opengnsys/images (es recomendable que este directorio se monte sobre un sistema de archivos independiente). - - -Instalación ------------ - -La instalación de OpenGnsys se realiza ejecutando el script de instalación opengnsys_installer.sh, el cual puede obtenerse descomprimiendo el fichero de la versión opengnsys-Version.tar.gz o descargándolo directamente de la dirección: https://raw.githubusercontent.com/opengnsys/OpenGnsys/devel/installer/opengnsys_installer.sh - -Ejemplos de descompresión del programa: - - tar xvzf opengnsys-Version.tar.gz - cd opengnsys/installer - -Ejemplos de descarga con varias herramientas: - - * Descargar con wget. - wget https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh - - * Descargar con curl. - curl https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh -o opengnsys_installer.sh - - -El script de instalación debe ser ejecutado como usuario root: - sudo bash opengnsys_installer.sh - - -Dicho script solicitará por teclado la siguiente información para configurar el acceso al servicio (si no se indica un parámetro, toma el valor por defecto): - * Clave del usuario root de MySQL. - * Usuario de acceso a la consola web y super-administrador de OpenGnsys. - * Clave del usuario de acceso a la consola web. - * Clave de acceso del cliente a servicios remotos. - * Seleccionar cliente(s) ogLive para instalar. - -Se realizan los siguientes procesos: - * Obtener los parámetros básicos de la red. - * Comprobar los paquetes instalados. - * Descargar e instalar las dependencias que faltan. - * Crear la estructura básica de directorios de OpenGnsys. - * Descargar el repositorio de código en un directorio temporal (/tmp/opengnsys_installer). Nota: en versiones futuras este proceso no será necesario. - * Compilar e instalar los servicios de OpenGnsys. - * Configuración básica de los serviciios de red DHCP, PXE y NFS/Samba a partir de las plantillas de configuración - * Copiar ficheros complementarios de gestión del servidor. - * Crear la base de datos y configurar el servidor web de OpenGnsys Web Admin Console. - * Copiar los ficheros de las páginas de Web Admin Console. - * Copiar la estructura de directorios de OpenGnsys Client. - * Descargar la o las imágenes iniciales de OpenGnsys Client. - * Configuración básica de los serviciios de OpenGnsys a partir de los parámetros de red. - -Una vez finalizada la ejecución del instalador, puede empezarse a trabajar con el sistema: - * Configurar DHCP. - * Añadir datos en la consola de administración. - * Personalizar scripts de administración. - * Definir menús de inicio para los clientes. - - - -Actualización -------------- - -Se dispone de un script de auto-actualización del sistema, con las siguientes características: - * Es necesario conexión a Internet para obtener las últimas actualizaciones. - * Si el script se actualiza a sí mismo, debe ser ejecutado de nuevo. - * No se actualizan los servicios asociados al sistema operativo. - * No se modifican los ficheros de configuración. - - -El script debe ser ejecutado como usuario root: - sudo /opt/opengnsys/lib/opengnsys_update.sh - - - -Desinstalación --------------- - -También existe un script de desinstalación de los componentes de OpenGnsys, con las siguientes características: - * Solicita confirmación para ejecutar sus operaciones. - * Se eliminan los ficheros de OpenGnsys y su base de datos. - * No se eliminan ni paquetes del sistema operativo ni sus ficheros de configuración. - * No se elimina el directorio de las imágenes ni su contenido. - * No se eliminan los clientes ogLive ni las plantillas PXE. - - -El script debe ser ejecutado como usuario root: - sudo /opt/opengnsys/lib/opengnsys_uninstall.sh - - +../doc/INSTALL.es.txt
\ No newline at end of file diff --git a/installer/opengnsys_export.sh b/installer/opengnsys_export.sh index 747a795a..09f2b763 100755 --- a/installer/opengnsys_export.sh +++ b/installer/opengnsys_export.sh @@ -15,6 +15,8 @@ #@version 1.1.0 - Cambia cómo se exporta la base de datos para permitir importar en versiones posteriores. #@note Incompatible con versiones de opengnsys_import.sh anteriores a esta fecha. #@date 2018-02-14 +#@version 1.1.1 - Incluye scripts personalizados (*Custom) +#@date 2019-07-25 #*/ ## # Variables globales. @@ -82,6 +84,7 @@ password=$PASSWORD EOT mysqldump --defaults-extra-file=$MYCNF --opt $CATALOG > $MYSQLFILE +chmod 400 $MYSQLFILE # Borrar fichero temporal rm -f $MYCNF @@ -94,13 +97,15 @@ echo $ServidorAdm > $TMPDIR/IPSERVER.txt # Empaquetamos los ficheros echo "Creamos un archivo comprimido con los datos: $BACKUPFILE." +CUSTOMFILES=$(find $OPENGNSYS/client/scripts -name "*Custom" -exec basename {} \;) tar -cvzf $BACKUPFILE --transform="s!^!$BACKUPPREFIX/!" \ -C $(dirname $MYSQLFILE) $(basename $MYSQLFILE) \ -C $TMPDIR IPSERVER.txt \ -C $DHCPDIR dhcpd.conf \ - -C $OPENGNSYS/tftpboot menu.lst \ - -C $OPENGNSYS/doc VERSION.json \ -C $OPENGNSYS/client/etc engine.cfg engine.json \ + -C $OPENGNSYS/client/scripts $CUSTOMFILES \ + -C $OPENGNSYS/doc VERSION.txt VERSION.json \ + -C $OPENGNSYS/tftpboot menu.lst grub \ -C $OPENGNSYS/www menus \ -C /etc default/opengnsys &>/dev/null diff --git a/installer/opengnsys_import.sh b/installer/opengnsys_import.sh index c3b343ee..528b8c3e 100755 --- a/installer/opengnsys_import.sh +++ b/installer/opengnsys_import.sh @@ -17,6 +17,8 @@ #@version 1.1.0 - Permite importar de versiones de OpenGnsys anteriores. Cambia la importación de la base de datos. #@note Incompatible con versiones de opengnsys_export.sh anteriores a esta fecha. #@date 2018-02-14 +#@version 1.1.1 - Importamos scripts Custom, PXE para UEFI y /etc/default/opengnsys. +#@date 2019-07-18 #*/ ## # Variables globales. @@ -157,7 +159,7 @@ function updateSqlFile() done # Aplicar posible actualización propia para la versión final. file=$CATALOG-$NEWVERSION.sql - if [ -n "$FILES" -o "$OLDVERSION" = "$NEWVERSION" -a -r $file ]; then + if [ -n "$FILES" -o "$OLDVERSION" = "$NEWVERSION" ] && [ -r $file ]; then FILES="$FILES $file" fi @@ -226,7 +228,8 @@ NEWVERSION=$(jq -r '.version' $OPENGNSYS/doc/VERSION.json) # FALTA: Comprobar que la versión OLD es menor que la NEW if [ $OLDVERSION != $NEWVERSION ] ; then echo "La versión del servidor no coincide con la del backup." - jq -r '[.project, .version, .codename] | join(" ")' $OPENGNSYS/doc/VERSION.json $TMPDIR/VERSION.json + jq -r '[.project, .version, .codename] | join(" ")' $OPENGNSYS/doc/VERSION.json $TMPDIR/VERSION.json 2>/dev/null \ + || cat $TMPDIR/VERSION.txt read -p "¿Quiere continuar? (y/n): " ANSWER if [ "${ANSWER^^}" != "Y" ]; then echo "Operación cancelada." @@ -259,7 +262,7 @@ fi mysql --defaults-extra-file=$MYCNF -e "SHOW TRIGGERS FROM $CATALOG;" |grep "Trigger" &>/dev/null if [ $? -eq 0 ]; then # Existe el trigger: eliminamos líneas del trigger en $CATALOG.sql - read INI END <<< $(grep -n -e TRIGGER -e "END.*;;" $MYSQLFILE |cut -d: -f1) + read -d\n INI END <<< $(grep -n -e TRIGGER -e "END.*;;" $MYSQLFILE |cut -d: -f1) [ -n "$INI" ] && sed -i "$INI,${END}d" $MYSQLFILE else # No existe: necesitamos privilegios de root @@ -271,7 +274,6 @@ fi # Eliminamos las tablas que no importamos: repositorios, entorno # y añadimos los usuarios, sólo si no existen. -cp $MYSQLFILE $MYSQLFILE.prueba sed -i -e '/Table structure.* `repositorios`/,/Table structure/d' \ -e '/Table structure.* `entornos`/,/Table structure/d' \ -e '/Table structure.*`usuarios`/,/CHARSET/d' \ @@ -280,11 +282,17 @@ sed -i -e '/Table structure.* `repositorios`/,/Table structure/d' \ # Copia de seguridad del estado de la base de datos mysqldump --defaults-extra-file=$MYCNF --opt $CATALOG > $MYSQLBCK +chmod 400 $MYSQLBCK # Importamos los datos nuevos mysql --defaults-extra-file=$MYCNF -D "$CATALOG" < $MYSQLFILE &>/dev/null [ $? -ne 0 ] && echo "ERROR: Error al importar la información de la base de datos." # Copiamos los archivos a su sitio correcto +# default/opengnsys +echo " * Guardamos la configuración de /etc/default." +mv /etc/default/opengnsys /etc/default/opengnsys-$DATE +cp $TMPDIR/default/opengnsys /etc/default/opengnsys + # DHCP echo " * Componemos la configuración del dhcp." for DHCPCFGDIR in /etc/dhcp /etc/dhcp3; do @@ -305,9 +313,27 @@ done # TFTP echo " * Guardamos los ficheros PXE de los clientes." -mv $OPENGNSYS/tftpboot/menu.lst $OPENGNSYS/tftpboot/menu.lst-$DATE -cp -r $TMPDIR/menu.lst $OPENGNSYS/tftpboot -chown -R www-data:www-data $OPENGNSYS/tftpboot/menu.lst +for BOOTLOADER in menu.lst grub; do + if [ -d $TMPDIR/$BOOTLOADER ]; then + mkdir $OPENGNSYS/tftpboot/$BOOTLOADER-$DATE + mv $OPENGNSYS/tftpboot/$BOOTLOADER/{01-*,templates,examples} $OPENGNSYS/tftpboot/$BOOTLOADER-$DATE 2>/dev/null + cp -r $TMPDIR/$BOOTLOADER/{01-*,templates,examples} $OPENGNSYS/tftpboot/$BOOTLOADER 2>/dev/null + chown -R www-data:www-data $OPENGNSYS/tftpboot/$BOOTLOADER + fi +done + +if [ -f $OPENGNSYS/tftpboot/menu.lst/templates/01 ]; then + echo " * Cambio del nombre de las plantillas PXE para compatibilidad con UEFI." + BIOSPXEDIR="$OPENGNSYS/tftpboot/menu.lst/templates" + mv $BIOSPXEDIR/01 $BIOSPXEDIR/10 + sed -i "s/\bMBR\b/1hd/" $BIOSPXEDIR/10 + sed -i "s/\b1hd-1partition\b/1hd-1os/" $BIOSPXEDIR/11 + sed -i "s/\b1hd-2partition\b/1hd-2os/" $BIOSPXEDIR/12 + + # Cambiamos el valor en la base de datos. Si no lo hacemos desaparecen de las columnas del NetBootAvanzado. + mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e "update ordenadores set arranque='10' where arranque='01';" &>/dev/null + [ $? -ne 0 ] && echo "ERROR: Error al modificar nombre de las plantilla '10' en la base de datos." +fi # Configuración de los clientes echo " * Guardamos la configuración de los clientes." @@ -319,10 +345,21 @@ echo " * Guardamos las páginas de inicio." mv $OPENGNSYS/www/menus $OPENGNSYS/www/menus-$DATE cp -r $TMPDIR/menus $OPENGNSYS/www +# Script personalizados +echo " * Guardamos los scripts personalizados." +if ls $OPENGNSYS/client/scripts/*Custom &>/dev/null; then + mkdir $OPENGNSYS/client/scripts/Custom-$DATE + mv $OPENGNSYS/client/scripts/*Custom $OPENGNSYS/client/scripts/Custom-$DATE +fi +cp -r $TMPDIR/*Custom $OPENGNSYS/client/scripts + echo -e "Se ha terminado de importar los datos del backup. \n\nSe han realizado copias de seguridad de los archivos antiguos:" +echo " - /etc/default/opengnsys-$DATE" echo " - $DHCPCFGDIR/dhcpd.conf-$DATE" echo " - $OPENGNSYS/tftpboot/menu.lst-$DATE" +echo " - $OPENGNSYS/tftpboot/grub-$DATE" echo " - $OPENGNSYS/client/etc/engine.cfg-$DATE" +echo " - $OPENGNSYS/client/scripts/Custom-$DATE" echo " - $OPENGNSYS/www/menus-$DATE" echo -e " - $MYSQLBCK \n" diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 93f26622..72d02115 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -6,131 +6,151 @@ ##################################################################### -#### AVISO: Puede editar configuración de acceso por defecto. -#### WARNING: Edit default access configuration if you wish. -DEFAULT_MYSQL_ROOT_PASSWORD="passwordroot" # Clave por defecto root de MySQL -DEFAULT_OPENGNSYS_DB_USER="usuog" # Usuario por defecto de acceso a la base de datos -DEFAULT_OPENGNSYS_DB_PASSWD="passusuog" # Clave por defecto de acceso a la base de datos -DEFAULT_OPENGNSYS_CLIENT_PASSWD="og" # Clave por defecto de acceso del cliente - -# Sólo ejecutable por usuario root -if [ "$(whoami)" != 'root' ]; then - echo "ERROR: this program must run under root privileges!!" - exit 1 -fi - -echo -e "\\nOpenGnsys Installation" -echo "==============================" +##################################################################### +####### Funciones de configuración +##################################################################### -# Clave root de MySQL -while : ; do - echo -n -e "\\nEnter root password for MySQL (${DEFAULT_MYSQL_ROOT_PASSWORD}): "; - read -r MYSQL_ROOT_PASSWORD - if [ -n "${MYSQL_ROOT_PASSWORD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico - echo -e "\\aERROR: Must be alphanumeric, try again..." - else - # Si esta vacio ponemos el valor por defecto - MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-$DEFAULT_MYSQL_ROOT_PASSWORD}" - break - fi -done +# Devuelve en la variable PASSWORD la clave introducida por el usuario (o la indicada por defecto) +function enterPassword () +{ + local PASSWORD2 + local DEFAULT_PASSWORD="$1" + + while : ; do + stty -echo + read -r PASSWORD + stty echo + if [ -z "$PASSWORD" ]; then + # Si esta vacio ponemos el valor por defecto + PASSWORD="${PASSWORD:-$DEFAULT_PASSWORD}" + break + else + if [ -n "${PASSWORD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico + echo -e "\\aERROR: Password must be alphanumeric, try again..." + else + echo -n -e "\\nConfirm password: " + stty -echo + read -r PASSWORD2 + stty echo + if [ "$PASSWORD" == "$PASSWORD2" ]; then + break + else + echo -e "\\aERROR: Passwords don't match, try again." + fi + fi + fi + echo -n -e "Please, enter a new password (${DEFAULT_PASSWORD}): " + done +} -# Usuario de acceso a la base de datos -while : ; do - echo -n -e "\\nEnter username for OpenGnsys console (${DEFAULT_OPENGNSYS_DB_USER}): " - read -r OPENGNSYS_DB_USER - if [ -n "${OPENGNSYS_DB_USER//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico - echo -e "\\aERROR: Must be alphanumeric, try again..." - else - # Si esta vacio ponemos el valor por defecto - OPENGNSYS_DB_USER="${OPENGNSYS_DB_USER:-$DEFAULT_OPENGNSYS_DB_USER}" - break - fi -done +# Recoge los datos de configuración introducidos por el usuario. +function userData () +{ + #### AVISO: Puede editar configuración de acceso por defecto. + #### WARNING: Edit default access configuration if you wish. + DEFAULT_MYSQL_ROOT_PASSWORD="passwordroot" # Clave por defecto root de MySQL + DEFAULT_OPENGNSYS_DB_USER="usuog" # Usuario por defecto de acceso a la base de datos + DEFAULT_OPENGNSYS_DB_PASSWD="passusuog" # Clave por defecto de acceso a la base de datos + DEFAULT_OPENGNSYS_CLIENT_PASSWD="og" # Clave por defecto de acceso del cliente + DEFAULT_OGLIVE="ogLive-bionic-5.0.0-27-generic-amd64-r20190830.7208cc9.iso" # Cliente ogLive + + echo -e "\\nOpenGnsys Installation" + echo "==============================" + + if [[ $- =~ s ]]; then + echo -e "\\nNot interactive mode: setting default configuration values.\\n" + MYSQL_ROOT_PASSWORD="$DEFAULT_MYSQL_ROOT_PASSWORD" + OPENGNSYS_DB_USER="$DEFAULT_OPENGNSYS_DB_USER" + OPENGNSYS_DB_PASSWD="$DEFAULT_OPENGNSYS_DB_PASSWD" + OPENGNSYS_CLIENT_PASSWD="$DEFAULT_OPENGNSYS_CLIENT_PASSWD" + OGLIVE="$DEFAULT_OGLIVE" + return + fi + + # Clave root de MySQL + echo -n -e "\\nEnter root password for MySQL (${DEFAULT_MYSQL_ROOT_PASSWORD}): " + enterPassword "$DEFAULT_MYSQL_ROOT_PASSWORD" + MYSQL_ROOT_PASSWORD="$PASSWORD" + + # Usuario de acceso a la base de datos + while : ; do + echo -n -e "\\n\\nEnter username for OpenGnsys console (${DEFAULT_OPENGNSYS_DB_USER}): " + read -r OPENGNSYS_DB_USER + if [ -n "${OPENGNSYS_DB_USER//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico + echo -e "\\aERROR: Must be alphanumeric, try again..." + else + # Si esta vacio ponemos el valor por defecto + OPENGNSYS_DB_USER="${OPENGNSYS_DB_USER:-$DEFAULT_OPENGNSYS_DB_USER}" + break + fi + done -# Clave de acceso a la base de datos -while : ; do + # Clave de acceso a la base de datos echo -n -e "\\nEnter password for OpenGnsys console (${DEFAULT_OPENGNSYS_DB_PASSWD}): " - read -r OPENGNSYS_DB_PASSWD - if [ -n "${OPENGNSYS_DB_PASSWD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico - echo -e "\\aERROR: Must be alphanumeric, try again..." - else - # Si esta vacio ponemos el valor por defecto - OPENGNSYS_DB_PASSWD="${OPENGNSYS_DB_PASSWD:-$DEFAULT_OPENGNSYS_DB_PASSWD}" - break - fi -done - -# Clave de acceso del cliente -while : ; do - echo -n -e "\\nEnter root password for OpenGnsys client (${DEFAULT_OPENGNSYS_CLIENT_PASSWD}): " - read -r OPENGNSYS_CLIENT_PASSWD - if [ -n "${OPENGNSYS_CLIENT_PASSWD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico - echo -e "\\aERROR: Must be alphanumeric, try again..." - else - # Si esta vacio ponemos el valor por defecto - OPENGNSYS_CLIENT_PASSWD="${OPENGNSYS_CLIENT_PASSWD:-$DEFAULT_OPENGNSYS_CLIENT_PASSWD}" - break - fi -done - -# Selección de clientes ogLive para descargar. -while : ; do - echo -e "\\nChoose ogLive client to install." - echo -e "1) Kernel 4.13, 64-bit, EFI-compatible" - echo -e "2) Kernel 3.2, 32-bit" - echo -e "3) Both" - echo -n -e "Please, type a valid number (1): " - read -r OPT - case "$OPT" in - 1|"") OGLIVE="ogLive-xenial-4.13.0-17-generic-amd64-r5520.iso" - break ;; - 2) OGLIVE="ogLive-precise-3.2.0-23-generic-r5159.iso" - break ;; - 3) OGLIVE="ogLive-xenial-4.13.0-17-generic-amd64-r5520.iso ogLive-precise-3.2.0-23-generic-r5159.iso"; - break ;; - *) echo -e "\\aERROR: unknown option, try again." - esac -done - -echo -e "\\n==============================" - -# Comprobar si se ha descargado el paquete comprimido (REMOTE=0) o sólo el instalador (REMOTE=1). -PROGRAMDIR=$(readlink -e "$(dirname "$0")") -PROGRAMNAME=$(basename "$0") -OPENGNSYS_SERVER="opengnsys.es" -DOWNLOADURL="https://$OPENGNSYS_SERVER/trac/downloads" -if [ -d "$PROGRAMDIR/../installer" ]; then - REMOTE=0 -else - REMOTE=1 -fi -BRANCH="devel" -CODE_URL="https://codeload.github.com/opengnsys/OpenGnsys/zip/$BRANCH" -API_URL="https://api.github.com/repos/opengnsys/OpenGnsys/branches/$BRANCH" - -WORKDIR=/tmp/opengnsys_installer -mkdir -p $WORKDIR - -# Directorio destino de OpenGnsys. -INSTALL_TARGET=/opt/opengnsys -PATH=$PATH:$INSTALL_TARGET/bin - -# Registro de incidencias. -OGLOGFILE=$INSTALL_TARGET/log/${PROGRAMNAME%.sh}.log -LOG_FILE=/tmp/$(basename $OGLOGFILE) - -# Usuario del cliente para acceso remoto. -OPENGNSYS_CLIENT_USER="opengnsys" - -# Nombre de la base datos y fichero SQL para su creación. -OPENGNSYS_DATABASE="ogAdmBD" -OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/${OPENGNSYS_DATABASE}.sql + enterPassword "$DEFAULT_OPENGNSYS_DB_PASSWD" + OPENGNSYS_DB_PASSWD="$PASSWORD" + + # Clave de acceso del cliente + echo -n -e "\\n\\nEnter root password for OpenGnsys client (${DEFAULT_OPENGNSYS_CLIENT_PASSWD}): " + enterPassword "$DEFAULT_OPENGNSYS_CLIENT_PASSWD" + OPENGNSYS_CLIENT_PASSWD="$PASSWORD" + unset PASSWORD + + # Selección de clientes ogLive para descargar. + while : ; do + echo -e "\\n\\nChoose ogLive client to install." + echo -e "1) Kernel 5.0, 64-bit, EFI-compatible" + echo -e "2) Kernel 3.2, 32-bit" + echo -e "3) Both" + echo -n -e "Please, type a valid number (1): " + read -r OPT + case "$OPT" in + 1|"") OGLIVE="$DEFAULT_OGLIVE" + break ;; + 2) OGLIVE="ogLive-precise-3.2.0-23-generic-r5159.iso" + break ;; + 3) OGLIVE=" $DEFAULT_OGLIVE ogLive-precise-3.2.0-23-generic-r5159.iso"; + break ;; + *) echo -e "\\aERROR: unknown option, try again." + esac + done + echo -e "\\n==============================" +} -##################################################################### -####### Funciones de configuración -##################################################################### +# Asigna valores globales de configuración para el script. +function globalSetup () +{ + PROGRAMDIR=$(readlink -e "$(dirname "$0")") + PROGRAMNAME=$(basename "$0") + + # Comprobar si se ha descargado el paquete comprimido (REMOTE=0) o sólo el instalador (REMOTE=1). + OPENGNSYS_SERVER="opengnsys.es" + DOWNLOADURL="https://$OPENGNSYS_SERVER/trac/downloads" + if [ -d "$PROGRAMDIR/../installer" ]; then + REMOTE=0 + else + REMOTE=1 + fi + BRANCH="devel" + CODE_URL="https://codeload.github.com/opengnsys/OpenGnsys/zip/$BRANCH" + API_URL="https://api.github.com/repos/opengnsys/OpenGnsys/branches/$BRANCH" + + # Directorios de instalación y destino de OpenGnsys. + WORKDIR=/tmp/opengnsys_installer + INSTALL_TARGET=/opt/opengnsys + PATH=$PATH:$INSTALL_TARGET/bin + + # Registro de incidencias. + OGLOGFILE=$INSTALL_TARGET/log/${PROGRAMNAME%.sh}.log + LOG_FILE=/tmp/$(basename $OGLOGFILE) + + # Usuario del cliente para acceso remoto. + OPENGNSYS_CLIENT_USER="opengnsys" + # Nombre de la base datos y fichero SQL para su creación. + OPENGNSYS_DATABASE="ogAdmBD" + OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/${OPENGNSYS_DATABASE}.sql +} # Generar variables de configuración del instalador # Variables globales: @@ -145,7 +165,6 @@ OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/${OPENGNSYS_DATABASE}.sql # - APACHEENABLEOG, APACHEOGSITE, - habilitar sitio web de OpenGnsys # - PHPFPMSERV - servicio PHP FastCGI Process Manager para Apache # - INETDSERV - servicio Inetd -# - FIREWALLSERV - servicio de cortabuegos IPTables/FirewallD # - DHCPSERV, DHCPCFGDIR - servicio y configuración de DHCP # - MYSQLSERV, TMPMYCNF - servicio MySQL y fichero temporal con credenciales de acceso # - MARIADBSERV - servicio MariaDB (sustituto de MySQL en algunas distribuciones) @@ -170,7 +189,7 @@ OSVERSION="${OSVERSION%%.*}" # Configuración según la distribución GNU/Linux (usar minúsculas). case "$OSDISTRIB" in ubuntu|debian|linuxmint) - DEPENDENCIES=( subversion apache2 php php-ldap php-fpm mysql-server php-mysql isc-dhcp-server bittorrent tftp-hpa tftpd-hpa xinetd build-essential g++-multilib libmysqlclient-dev wget curl doxygen graphviz bittornado ctorrent samba rsync unzip netpipes debootstrap schroot squashfs-tools btrfs-tools procps arp-scan realpath php-curl gettext moreutils jq wakeonlan udpcast shim-signed grub-efi-amd64-signed python-pip ) + DEPENDENCIES=( subversion apache2 php php-ldap php-fpm mysql-server php-mysql isc-dhcp-server bittorrent tftp-hpa tftpd-hpa xinetd build-essential g++-multilib libmysqlclient-dev wget curl doxygen graphviz bittornado ctorrent samba rsync unzip netpipes debootstrap schroot squashfs-tools btrfs-tools procps arp-scan realpath php-curl gettext moreutils jq wakeonlan udpcast libev-dev libjansson-dev shim-signed grub-efi-amd64-signed python-pip ) UPDATEPKGLIST="apt-get update" INSTALLPKG="apt-get -y install --force-yes" CHECKPKG="dpkg -s \$package 2>/dev/null | grep Status | grep -qw install" @@ -207,7 +226,7 @@ case "$OSDISTRIB" in TFTPCFGDIR=/var/lib/tftpboot ;; fedora|centos) - DEPENDENCIES=( subversion httpd mod_ssl php-ldap php-fpm mysql-server mysql-devel mysql-devel.i686 php-mysql dhcp tftp-server tftp xinetd binutils gcc gcc-c++ glibc-devel glibc-devel.i686 glibc-static glibc-static.i686 libstdc++-devel.i686 make wget curl doxygen graphviz ctorrent samba samba-client rsync unzip debootstrap schroot squashfs-tools python-crypto arp-scan procps-ng gettext moreutils jq net-tools udpcast shim-x64 grub2-efi-x64 grub2-efi-x64-modules python-pip http://ftp.altlinux.org/pub/distributions/ALTLinux/5.1/branch/$(arch)/RPMS.classic/netpipes-4.2-alt1.$(arch).rpm ) + DEPENDENCIES=( subversion httpd mod_ssl php-ldap php-fpm mysql-server mysql-devel mysql-devel.i686 php-mysql dhcp tftp-server tftp xinetd binutils gcc gcc-c++ glibc-devel glibc-devel.i686 glibc-static glibc-static.i686 libstdc++-devel.i686 make wget curl doxygen graphviz ctorrent samba samba-client rsync unzip debootstrap schroot squashfs-tools python-crypto arp-scan procps-ng gettext moreutils jq net-tools udpcast libev-devel shim-x64 grub2-efi-x64 grub2-efi-x64-modules http://ftp.altlinux.org/pub/distributions/ALTLinux/5.1/branch/$(arch)/RPMS.classic/netpipes-4.2-alt1.$(arch).rpm python-pip ) [ "$OSDISTRIB" == "centos" ] && UPDATEPKGLIST="yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-$OSVERSION.noarch.rpm http://rpms.remirepo.net/enterprise/remi-release-$OSVERSION.rpm" INSTALLEXTRADEPS=( 'pushd /tmp; wget -t3 http://ftp.acc.umu.se/mirror/bittornado/BitTornado-0.3.18.tar.gz && tar xvzf BitTornado-0.3.18.tar.gz && cd BitTornado-CVS && python setup.py install && ln -fs btlaunchmany.py /usr/bin/btlaunchmany && ln -fs bttrack.py /usr/bin/bttrack; popd' ) INSTALLPKG="yum install -y libstdc++ libstdc++.i686" @@ -232,11 +251,6 @@ case "$OSDISTRIB" in APACHEREWRITEMOD="sed -i '/rewrite/s/^#//' $APACHECFGDIR/../*.conf" DHCPSERV=dhcpd DHCPCFGDIR=/etc/dhcp - if firewall-cmd --state &>/dev/null; then - FIREWALLSERV=firewalld - else - FIREWALLSERV=iptables - fi INETDSERV=xinetd INETDCFGDIR=/etc/xinetd.d MYSQLSERV=mysqld @@ -263,18 +277,17 @@ TMPMYCNF=/tmp/.my.cnf.$$ # Modificar variables de configuración tras instalar paquetes del sistema. function autoConfigurePost() { -local f +local f MKNETDIR # Configuraciones específicas para Samba y TFTP en Debian 6. [ -z "$SYSTEMD" -a ! -e /etc/init.d/$SAMBASERV ] && SAMBASERV=samba [ ! -e $TFTPCFGDIR ] && TFTPCFGDIR=/srv/tftp -# Configuraciones específicas para SELinux permisivo en distintas versiones. -[ -f /selinux/enforce ] && echo 0 > /selinux/enforce -for f in /etc/sysconfig/selinux /etc/selinux/config; do - [ -f $f ] && perl -pi -e 's/SELINUX=enforcing/SELINUX=permissive/g' $f +# Preparar arranque en red con Grub. +for f in grub-mknetdir grub2-mknetdir; do + if which $f &>/dev/null; then MKNETDIR=$f; fi done -selinuxenabled 2>/dev/null && setenforce 0 2>/dev/null +$MKNETDIR --net-directory=$TFTPCFGDIR --subdir=grub } @@ -825,13 +838,7 @@ function downloadCode() # Comprobar si existe conexión. function checkNetworkConnection() { - echoAndLog "${FUNCNAME}(): Disabling Firewall: $FIREWALLSERV." - if [ -n "$FIREWALLSERV" ]; then - service=$FIREWALLSERV - $STOPSERVICE; $DISABLESERVICE - fi - - echoAndLog "${FUNCNAME}(): Checking OpenGnsys server conectivity." + echoAndLog "${FUNCNAME}(): Checking OpenGnsys server connectivity." OPENGNSYS_SERVER=${OPENGNSYS_SERVER:-"opengnsys.es"} if which wget &>/dev/null; then wget --spider -q $OPENGNSYS_SERVER @@ -876,17 +883,18 @@ function getNetworkSettings() exit 1 fi for dev in ${DEVICE[*]}; do - SERVERIP[i]=$(ip -o addr show dev "$dev" | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}') + SERVERIP[i]=$(ip -o addr show dev "$dev" | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4); exit;}') if [ -n "${SERVERIP[i]}" ]; then - NETMASK[i]=$( cidr2mask $(ip -o addr show dev "$dev" | awk '$3~/inet$/ {sub (/.*\//, "", $4); print ($4)}') ) - NETBROAD[i]=$(ip -o addr show dev "$dev" | awk '$3~/inet$/ {print ($6)}') - NETIP[i]=$(ip route list proto kernel | awk -v d="$dev" '$3==d && /src/ {sub (/\/.*/,""); print $1}') - ROUTERIP[i]=$(ip route list default | awk -v d="$dev" '$5==d {print $3}') + NETMASK[i]=$( cidr2mask $(ip -o addr show dev "$dev" | awk '$3~/inet$/ {sub (/.*\//, "", $4); print ($4); exit;}') ) + NETBROAD[i]=$(ip -o addr show dev "$dev" | awk '$3~/inet$/ {print ($6); exit;}') + NETIP[i]=$(ip route list proto kernel | awk -v d="$dev" '$3==d && /src/ {sub (/\/.*/,""); print $1; exit;}') + ROUTERIP[i]=$(ip route list default | awk -v d="$dev" '$5==d {print $3; exit;}') DEFAULTDEV=${DEFAULTDEV:-"$dev"} fi let i++ done - DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1) + DNSIP=$(systemd-resolve --status 2>/dev/null | awk '/DNS Servers:/ {print $3; exit;}') + [ -z "$DNSIP" ] && DNSIP=$(awk '/nameserver/ {print $2; exit;}' /etc/resolv.conf) if [ -z "${NETIP[*]}" -o -z "${NETMASK[*]}" ]; then errorAndLog "${FUNCNAME}(): Network not detected." exit 1 @@ -986,12 +994,6 @@ function rsyncConfigure() # Configurar acceso a Rsync. sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENT_USER/g" \ $WORKDIR/opengnsys/repoman/etc/rsyncd.conf.tmpl > $RSYNCCFGDIR/rsyncd.conf - sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENT_USER/g" \ - -e "s/CLIENTPASSWORD/$OPENGNSYS_CLIENT_PASSWD/g" \ - $WORKDIR/opengnsys/repoman/etc/rsyncd.secrets.tmpl > $RSYNCCFGDIR/rsyncd.secrets - chown root.root $RSYNCCFGDIR/rsyncd.secrets - chmod 600 $RSYNCCFGDIR/rsyncd.secrets - # Habilitar Rsync y reiniciar Inetd. if [ -n "$RSYNCSERV" ]; then if [ -f /etc/default/rsync ]; then @@ -1102,7 +1104,6 @@ function installWebFiles() # Copiar ficheros en la zona de descargas de OpenGnsys Web Console. function installDownloadableFiles() { - INSTVERSION=1.1.0 ### Temporal. local FILENAME=ogagentpkgs-$INSTVERSION.tar.gz local TARGETFILE=$WORKDIR/$FILENAME @@ -1153,7 +1154,7 @@ function installWebConsoleApacheConf() echoAndLog "${FUNCNAME}(): configuring PHP-FPM" service=$PHPFPMSERV $ENABLESERVICE; $STARTSERVICE - sockfile=$(find /run/php -name "php*.sock" -type s -print 2>/dev/null) + sockfile=$(find /run/php -name "php*.sock" -type s -print 2>/dev/null | tail -1) # Activar módulos de Apache. $APACHEENABLEMODS @@ -1374,12 +1375,11 @@ function copyInterfaceAdm () echoAndLog "${FUNCNAME}(): error while copying Administration Interface Folder" hayErrores=1 fi - chown $OPENGNSYS_CLIENT_USER:$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso - chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso return $hayErrores } + #################################################################### ### Funciones instalacion cliente opengnsys #################################################################### @@ -1413,6 +1413,18 @@ function copyClientFiles() } +# Crear certificados para la firma de cargadores de arranque. +function createCerts () +{ + local SSLCFGDIR=$INSTALL_TARGET/client/etc/ssl + echoAndLog "${FUNCNAME}(): creating certificate files" + mkdir -p $SSLCFGDIR/{certs,private} + openssl req -new -x509 -newkey rsa:2048 -keyout $SSLCFGDIR/private/opengnsys.key -out $SSLCFGDIR/certs/opengnsys.crt -nodes -days 3650 -subj "/CN=OpenGnsys/" + openssl x509 -in $SSLCFGDIR/certs/opengnsys.crt -out $SSLCFGDIR/certs/opengnsys.cer -outform DER + echoAndLog "${FUNCNAME}(): certificate successfully created" +} + + # Crear cliente OpenGnsys. function clientCreate() { @@ -1441,8 +1453,6 @@ function clientCreate() echoAndLog "${FUNCNAME}(): Installing ogLive Client" echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | \ oglivecli install $FILENAME - # Adaptar permisos. - chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/menu.lst echoAndLog "${FUNCNAME}(): Client generation success" } @@ -1484,6 +1494,7 @@ function openGnsysConfigure() -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \ -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \ -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \ + -e "s/REPOKEY/$OPENGNSYS_REPOKEY/g" \ $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer/ogAdmServer.cfg > $INSTALL_TARGET/etc/ogAdmServer-$dev.cfg sed -e "s/SERVERIP/${SERVERIP[i]}/g" \ -e "s/REPOKEY/$OPENGNSYS_REPOKEY/g" \ @@ -1514,10 +1525,6 @@ function openGnsysConfigure() ln -f $INSTALL_TARGET/etc/ogAdmAgent-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmAgent.cfg ln -f $INSTALL_TARGET/client/etc/ogAdmClient-$DEFAULTDEV.cfg $INSTALL_TARGET/client/etc/ogAdmClient.cfg ln -f $INSTALL_TARGET/www/controlacceso-$DEFAULTDEV.php $INSTALL_TARGET/www/controlacceso.php - chown root:root $INSTALL_TARGET/etc/{ogAdmServer,ogAdmAgent}*.cfg - chmod 600 $INSTALL_TARGET/etc/{ogAdmServer,ogAdmAgent}*.cfg - chown $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/controlacceso*.php - chmod 600 $INSTALL_TARGET/www/controlacceso*.php # Configuración del motor de clonación. # - Zona horaria del servidor. @@ -1560,7 +1567,7 @@ function installationSummary() # de código o si no está incluida en el fichero de versión. if [ $REMOTE -eq 1 ] || [ -z "$(jq -r '.release' $VERSIONFILE)" ]; then # Revisión: rAñoMesDía.Gitcommit (8 caracteres de fecha y 7 primeros de commit). - REVISION=$(curl -s "$API_URL" | jq '"r" + (.commit.commit.committer.date | gsub("-"; "")[:8]) + "." + (.commit.sha[:7])') + REVISION=$(curl -s "$API_URL" | jq '"r" + (.commit.commit.committer.date | split("-") | join("")[:8]) + "." + (.commit.sha[:7])') jq ".release=$REVISION" $VERSIONFILE | sponge $VERSIONFILE fi VERSION="$(jq -r '[.project, .version, .codename, .release] | join(" ")' $VERSIONFILE 2>/dev/null)" @@ -1578,16 +1585,15 @@ function installationSummary() echoAndLog "Installed ogLive client(s): $(oglivecli list | awk '{print $2}')" echoAndLog "Samba configuration directory: $SAMBACFGDIR" echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" - echoAndLog "Web Console access data: specified in installer script" + echoAndLog "Web Console access data: entered by the user" if grep -q "^RUN_BTTRACK.*no" /etc/default/opengnsys; then echoAndLog "BitTorrent service is disabled." fi echo echoAndLog "Post-Installation Instructions:" echo "===============================" - echoAndLog "Firewall service has been disabled and SELinux mode set to" - echoAndLog " permissive during OpenGnsys installation. Please check" - echoAndLog " ${FIREWALLSERV:-firewall} and SELinux configuration, if needed." + echoAndLog "You can improve server security by configuring firewall and SELinux," + echoAndLog " running \"$INSTALL_TARGET/lib/security-config\" script as root." echoAndLog "It's strongly recommended to synchronize this server with an NTP server." echoAndLog "Review or edit all configuration files." echoAndLog "Insert DHCP configuration data and restart service." @@ -1604,7 +1610,18 @@ echo ####### Proceso de instalación de OpenGnsys ##################################################################### +# Sólo ejecutable por usuario root +if [ "$(whoami)" != 'root' ]; then + echo "ERROR: this program must run under root privileges!!" + exit 1 +fi + +globalSetup echoAndLog "OpenGnsys installation begins at $(date)" +# Introducir datos de configuración y establecer variables globales. +userData + +mkdir -p $WORKDIR pushd $WORKDIR # Detectar datos iniciales de auto-configuración del instalador. @@ -1803,6 +1820,9 @@ if [ $? -ne 0 ]; then errorAndLog "Error creating client structure" fi +# Crear certificado para firmar cargadores +createCerts + # Crear la estructura del cliente de OpenGnsys. for i in $OGLIVE; do if ! clientCreate "$i"; then diff --git a/installer/opengnsys_makecompress.sh b/installer/opengnsys_makecompress.sh index ff267b1e..6b09deb5 100755 --- a/installer/opengnsys_makecompress.sh +++ b/installer/opengnsys_makecompress.sh @@ -20,13 +20,13 @@ for PROG in jq unzip; do fi done -# Variables +# Variables. BRANCH="devel" CODE_URL="https://codeload.github.com/opengnsys/OpenGnsys/zip/$BRANCH" API_URL="https://api.github.com/repos/opengnsys/OpenGnsys/branches/$BRANCH" -REVISION=$(curl -s "$API_URL" | jq '"r" + (.commit.commit.committer.date | gsub("-"; "")[:8]) + "." + (.commit.sha[:7])') +REVISION=$(curl -s "$API_URL" | jq '"r" + (.commit.commit.committer.date | split("-") | join("")[:8]) + "." + (.commit.sha[:7])') -# Descargar repositorio SVN +# Descargar del repositorio de código. cd /tmp rm -fr opengnsys curl "$CODE_URL" -o opengnsys.zip && unzip opengnsys.zip && mv "OpenGnsys-$BRANCH" opengnsys diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 1182b6eb..68978b3d 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -118,7 +118,9 @@ function autoConfigure() # Configuración según la distribución de Linux. if [ -f /etc/debian_version ]; then # Distribución basada en paquetes Deb. - DEPENDENCIES=( curl rsync btrfs-tools procps arp-scan realpath php-curl gettext moreutils jq wakeonlan udpcast shim-signed grub-efi-amd64-signed php-fpm python-pip ) + DEPENDENCIES=( curl rsync btrfs-tools procps arp-scan realpath php-curl gettext moreutils jq wakeonlan udpcast libev-dev libjansson-dev shim-signed grub-efi-amd64-signed php-fpm python-pip ) + # Paquete correcto para realpath. + [ -z "$(apt-cache pkgnames realpath)" ] && DEPENDENCIES=( ${DEPENDENCIES[@]//realpath/coreutils} ) UPDATEPKGLIST="add-apt-repository -y ppa:ondrej/php; apt-get update" INSTALLPKGS="apt-get -y install" DELETEPKGS="apt-get -y purge" @@ -141,7 +143,7 @@ function autoConfigure() INETDCFGDIR=/etc/xinetd.d elif [ -f /etc/redhat-release ]; then # Distribución basada en paquetes rpm. - DEPENDENCIES=( curl rsync btrfs-progs procps-ng arp-scan gettext moreutils jq net-tools udpcast shim-x64 grub2-efi-x64 grub2-efi-x64-modules python-pip ) + DEPENDENCIES=( curl rsync btrfs-progs procps-ng arp-scan gettext moreutils jq net-tools udpcast libev-devel shim-x64 grub2-efi-x64 grub2-efi-x64-modules python-pip ) # Repositorios para PHP 7 en CentOS. [ "$OSDISTRIB" == "centos" ] && UPDATEPKGLIST="yum update -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-$OSVERSION.noarch.rpm http://rpms.remirepo.net/enterprise/remi-release-$OSVERSION.rpm" INSTALLPKGS="yum install -y" @@ -167,7 +169,7 @@ function autoConfigure() : fi for service in apache2 httpd; do - [ -d /etc/$service ] && APACHECFGDIR="/etc/$service" + [ -d "/etc/$service" ] && APACHECFGDIR="/etc/$service" if $SERVICESTATUS &>/dev/null; then APACHESERV="$service"; fi done for service in dhcpd dhcpd3-server isc-dhcp-server; do @@ -300,7 +302,6 @@ function importSqlFile() local mycnf=/tmp/.my.cnf.$$ local status local APIKEY=$(php -r 'echo md5(uniqid(rand(), true));') - REPOKEY=$(php -r 'echo md5(uniqid(rand(), true));') if [ ! -r $sqlfile ]; then errorAndLog "${FUNCNAME}(): Unable to read $sqlfile!!" @@ -430,7 +431,10 @@ function downloadCode() echoAndLog "${FUNCNAME}(): downloading code..." - curl "${url}" -o opengnsys.zip && unzip opengnsys.zip && mv "OpenGnsys-$BRANCH" opengnsys + curl "$url" -o opengnsys.zip && \ + unzip -qo opengnsys.zip && \ + rm -fr opengnsys && \ + mv "OpenGnsys-$BRANCH" opengnsys if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error getting code from ${url}, verify your user and password" return 1 @@ -470,7 +474,7 @@ function checkVersion() if [ $REMOTE -eq 1 ]; then NEWVERSION=$(curl -s $RAW_URL/doc/VERSION.json 2>/dev/null | jq -r '.version') else - NEWVERSION=$(jq -r '.version' $PROGRAMDIR/doc/VERSION.json 2>/dev/null) + NEWVERSION=$(jq -r '.version' $PROGRAMDIR/../doc/VERSION.json 2>/dev/null) fi [[ "$NEWVERSION" =~ pre ]] && PRE=1 @@ -494,7 +498,7 @@ function getNetworkSettings() SERVERIP="$ServidorAdm" DEVICES="$(ip -o link show up | awk '!/loopback/ {sub(/:.*/,"",$2); print $2}')" for dev in $DEVICES; do - [ -z "$SERVERIP" ] && SERVERIP=$(ip -o addr show dev $dev | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}') + [ -z "$SERVERIP" ] && SERVERIP=$(ip -o addr show dev $dev | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4); exit;}') done } @@ -544,6 +548,19 @@ EOT echoAndLog "${FUNCNAME}(): client files successfully updated" } +# Crear certificado para la firma de cargadores de arranque, si es necesario. +function createCerts () +{ + local SSLCFGDIR=$INSTALL_TARGET/client/etc/ssl + mkdir -p $SSLCFGDIR/{certs,private} + if [ ! -f $SSLCFGDIR/private/opengnsys.key ]; then + echoAndLog "${FUNCNAME}(): creating certificate files" + openssl req -new -x509 -newkey rsa:2048 -keyout $SSLCFGDIR/private/opengnsys.key -out $SSLCFGDIR/certs/opengnsys.crt -nodes -days 3650 -subj "/CN=OpenGnsys/" + openssl x509 -in $SSLCFGDIR/certs/opengnsys.crt -out $SSLCFGDIR/certs/opengnsys.cer -outform DER + echoAndLog "${FUNCNAME}(): certificate successfully created" + fi +} + # Configurar HTTPS y exportar usuario y grupo del servicio Apache. function apacheConfiguration () { @@ -571,7 +588,7 @@ function apacheConfiguration () else template=$WORKDIR/opengnsys/server/etc/apache.conf.tmpl fi - sockfile=$(find /run/php -name "php*.sock" -type s -print 2>/dev/null) + sockfile=$(find /run/php -name "php*.sock" -type s -print 2>/dev/null | tail -1) # Actualizar configuración de Apache a partir de fichero de plantilla. for config in $APACHECFGDIR/{,sites-available/}opengnsys.conf; do if [ -e $config ]; then @@ -745,7 +762,7 @@ function createDirs() { # Crear estructura de directorios. echoAndLog "${FUNCNAME}(): creating directory paths in ${INSTALL_TARGET}" - local dir + local dir MKNETDIR mkdir -p ${INSTALL_TARGET}/{bin,doc,etc,lib,sbin,www} mkdir -p ${INSTALL_TARGET}/{client,images/groups} @@ -757,12 +774,19 @@ function createDirs() [ -d $dir ] && ln -fs $dir ${INSTALL_TARGET}/tftpboot done fi - mkdir -p $INSTALL_TARGET/tftpboot/menu.lst/examples + mkdir -p $INSTALL_TARGET/tftpboot/{menu.lst,grub}/examples if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" return 1 fi ! [ -f $INSTALL_TARGET/tftpboot/menu.lst/templates/00unknown ] && mv $INSTALL_TARGET/tftpboot/menu.lst/templates/* $INSTALL_TARGET/tftpboot/menu.lst/examples + ! [ -f $INSTALL_TARGET/tftpboot/grub/templates/10 ] && mv $INSTALL_TARGET/tftpboot/grub/templates/* $INSTALL_TARGET/tftpboot/grub/examples + + # Preparar arranque en red con Grub. + for f in grub-mknetdir grub2-mknetdir; do + if which $f &>/dev/null; then MKNETDIR=$f; fi + done + $MKNETDIR --net-directory=$TFTPCFGDIR --subdir=grub # Crear usuario ficticio. if id -u $OPENGNSYS_CLIENTUSER &>/dev/null; then @@ -825,6 +849,7 @@ function updateDatabase() fi popd >/dev/null + REPOKEY=$(php -r 'echo md5(uniqid(rand(), true));') if [ -n "$FILES" ]; then for file in $FILES; do importSqlFile $OPENGNSYS_DBUSER $OPENGNSYS_DBPASSWORD $OPENGNSYS_DATABASE $DBDIR/$file @@ -889,6 +914,18 @@ function updateServerFiles() cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys NEWFILES="$NEWFILES /etc/init.d/opengnsys" fi + if ! diff -q $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.default /etc/default/opengnsys >/dev/null; then + echoAndLog "${FUNCNAME}(): updating new default file" + backupFile /etc/default/opengnsys + # Buscar si hay nuevos parámetros. + local var valor + while IFS="=" read -e var valor; do + [[ $var =~ ^# ]] || \ + grep -q "^$var=" /etc/default/opengnsys || \ + echo "$var=$valor" >> /etc/default/opengnsys + done < $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.default + NEWFILES="$NEWFILES /etc/default/opengnsys" + fi if egrep -q "(UrlMsg=.*msgbrowser.php)|(UrlMenu=http://)" $INSTALL_TARGET/client/etc/ogAdmClient.cfg 2>/dev/null; then echoAndLog "${FUNCNAME}(): updating new client config file" backupFile $INSTALL_TARGET/client/etc/ogAdmClient.cfg @@ -903,6 +940,15 @@ function updateServerFiles() [ ! -f /etc/cron.d/imagedelete ] && echo "* * * * * root [ -x $INSTALL_TARGET/bin/deletepreimage ] && $INSTALL_TARGET/bin/deletepreimage" > /etc/cron.d/imagedelete [ ! -f /etc/cron.d/ogagentqueue ] && echo "* * * * * root [ -x $INSTALL_TARGET/bin/ogagentqueue.cron ] && $INSTALL_TARGET/bin/ogagentqueue.cron" > /etc/cron.d/ogagentqueue echoAndLog "${FUNCNAME}(): server files successfully updated" + + # Se modifican los nombres de las plantilla PXE por compatibilidad con los equipos UEFI. + if [ -f $INSTALL_TARGET/tftpboot/menu.lst/templates/01 ]; then + BIOSPXEDIR="$INSTALL_TARGET/tftpboot/menu.lst/templates" + mv $BIOSPXEDIR/01 $BIOSPXEDIR/10 + sed -i "s/\bMBR\b/1hd/" $BIOSPXEDIR/10 + sed -i "s/\b1hd-1partition\b/1hd-1os/" $BIOSPXEDIR/11 + sed -i "s/\b1hd-2partition\b/1hd-2os/" $BIOSPXEDIR/12 + fi } #################################################################### @@ -946,9 +992,8 @@ function compileServices() popd # Parar antiguo servicio de repositorio y añadir clave de acceso REST en su fichero de configuración. pgrep ogAdmRepo > /dev/null && service="ogAdmRepo" $STOPSERVICE - grep -q '^ApiToken=' $INSTALL_TARGET/etc/ogAdmRepo.cfg && \ - sed -i "s/^ApiToken=.*$/ApiToken=$REPOKEY/" $INSTALL_TARGET/etc/ogAdmRepo.cfg || \ - sed -i "$ a\ApiToken=$REPOKEY/" $INSTALL_TARGET/etc/ogAdmRepo.cfg + sed -i -n -e "/^ApiToken=/!p" -e "$ a\ApiToken=$REPOKEY" $INSTALL_TARGET/etc/ogAdmRepo.cfg + sed -i -n -e "/^APITOKEN=/!p" -e "$ a\APITOKEN=$REPOKEY" $INSTALL_TARGET/etc/ogAdmServer.cfg # Compilar OpenGnsys Agent echoAndLog "${FUNCNAME}(): Recompiling OpenGnsys Server Agent" pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent @@ -980,8 +1025,8 @@ function compileServices() # Actualizar cliente OpenGnsys function updateClient() { - #local FILENAME=ogLive-precise-3.2.0-23-generic-r5159.iso # 1.1.0-rc6 (old) - local FILENAME=ogLive-xenial-4.13.0-17-generic-amd64-r5520.iso # 1.1.0-rc6 + #local FILENAME=ogLive-precise-3.2.0-23-generic-r5159.iso # 1.1.0-rc6 (32-bit) + local FILENAME=ogLive-bionic-5.0.0-27-generic-amd64-r20190830.7208cc9.iso # 1.1.1-rc5 local SOURCEFILE=$DOWNLOADURL/$FILENAME local TARGETFILE=$(oglivecli config download-dir)/$FILENAME local SOURCELENGTH @@ -995,7 +1040,7 @@ function updateClient() oglivecli convert fi # Comprobar si debe actualizarse el cliente. - SOURCELENGTH=$(curl -sI $SOURCEFILE 2>&1 | awk '/Content-Length:/ {print $2}') + SOURCELENGTH=$(curl -sI $SOURCEFILE 2>&1 | awk '/Content-Length:/ {gsub("\r", ""); print $2}') TARGETLENGTH=$(stat -c "%s" $TARGETFILE 2>/dev/null) [ -z $TARGETLENGTH ] && TARGETLENGTH=0 if [ "$SOURCELENGTH" != "$TARGETLENGTH" ]; then @@ -1009,7 +1054,7 @@ function updateClient() echoAndLog "${FUNCNAME}(): Updatting ogLive client" oglivecli install $FILENAME - CLIENTUPDATED=${FILENAME%.*} + INSTALLEDOGLIVE=${FILENAME%.*} echoAndLog "${FUNCNAME}(): ogLive successfully updated" else @@ -1067,8 +1112,14 @@ function updateSummary() # Actualizar fichero de versión y revisión. local VERSIONFILE REVISION VERSIONFILE="$INSTALL_TARGET/doc/VERSION.json" - # Revisión: rAñoMesDía.Gitcommit (8 caracteres de fecha y 7 primeros de commit). - REVISION=$(curl -s "$API_URL" | jq '"r" + (.commit.commit.committer.date | gsub("-"; "")[:8]) + "." + (.commit.sha[:7])') + # Obtener revisión. + if [ $REMOTE -eq 1 ]; then + # Revisión: rAñoMesDía.Gitcommit (8 caracteres de fecha y 7 primeros de commit). + REVISION=$(curl -s "$API_URL" | jq '"r" + (.commit.commit.committer.date | split("-") | join("")[:8]) + "." + (.commit.sha[:7])') + else + # Parámetro "release" del fichero JSON. + REVISION=$(jq -r '.release' $PROGRAMDIR/../doc/VERSION.json 2>/dev/null) + fi [ -f $VERSIONFILE ] || echo '{ "project": "OpenGnsys" }' > $VERSIONFILE jq ".release=$REVISION" $VERSIONFILE | sponge $VERSIONFILE VERSION="$(jq -r '[.project, .version, .codename, .release] | join(" ")' $VERSIONFILE 2>/dev/null)" @@ -1096,8 +1147,8 @@ function updateSummary() echoAndLog "Warnings:" echoAndLog " - You must to clear web browser cache before loading OpenGnsys page" echoAndLog " - Generated new key to access Repository REST API (file ogAdmRepo.cfg)" - if [ -n "$CLIENTUPDATED" ]; then - echoAndLog " - ogLive Client is updated to: $CLIENTUPDATED" + if [ -n "$INSTALLEDOGLIVE" ]; then + echoAndLog " - Installed new ogLive Client: $INSTALLEDOGLIVE" fi if [ -n "$MYSQLCONFIG" ]; then echoAndLog " - MySQL must be reconfigured, run next code as DB root user and restart service:" @@ -1190,11 +1241,12 @@ fi # Configurar Rsync. rsyncConfigure -# Actualizar ficheros del cliente +# Actualizar ficheros del cliente. updateClientFiles +createCerts updateInterfaceAdm -# Actualizar páqinas web +# Actualizar páqinas web. apacheConfiguration updateWebFiles if [ $? -ne 0 ]; then @@ -1222,7 +1274,7 @@ checkFiles # Mostrar resumen de actualización. updateSummary -#rm -rf $WORKDIR +rm -rf $WORKDIR echoAndLog "OpenGnsys update finished at $(date)" popd diff --git a/installer/vagrant/Vagrantfile-1.0.6b-vbox b/installer/vagrant/Vagrantfile-1.0.6b-vbox index 2db25e1c..4317c654 100644 --- a/installer/vagrant/Vagrantfile-1.0.6b-vbox +++ b/installer/vagrant/Vagrantfile-1.0.6b-vbox @@ -42,7 +42,7 @@ fi # Install OpenGnsys and change server address. wget -q https://opengnsys.es/svn/tags/opengnsys-1.0.6b/installer/opengnsys_installer.sh -O - | bash || exit $? mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log -echo y | /opt/opengnsys/bin/setserveraddr eth1 +echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) # Insert DHCP data. for ((i=#{NCLIENTS+10}; i>10; i--)); do sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf diff --git a/installer/vagrant/Vagrantfile-browser-vbox b/installer/vagrant/Vagrantfile-browser-vbox index 60db8297..8e3abebf 100644 --- a/installer/vagrant/Vagrantfile-browser-vbox +++ b/installer/vagrant/Vagrantfile-browser-vbox @@ -21,27 +21,37 @@ dpkg-reconfigure -fnoninteractive console-setup # Install main dependencies. apt-get update apt-get install -y build-essential gettext libssl-dev libucommon-dev libxtst-dev subversion -# Compile Qt-Embedded 4.8 (aceptar la licencia Open Source). -wget http://download.qt.io/official_releases/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz +# Compile Qt-Embedded 4.8 (accept Open Source license). +wget http://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz tar xvzf qt-everywhere-opensource-src-4.8.7.tar.gz cd qt-everywhere-opensource-src-4.8.7 echo "yes" | ./configure -opensource -embedded x86 -webkit -openssl -qt-gfx-vnc -qvfb -prefix /usr/local/ -nomake demos -nomake examples make make install -# Compile Browser. -svn export https://github.com/opengnsys/OpenGnsys/branches/devel/client/browser ../browser -cd browser +# Compile the Browser. +BRANCH="devel" +svn export "https://github.com/opengnsys/OpenGnsys/branches/$BRANCH/client/browser" ../browser +cd ../browser qmake browser.pro make strip browser +# Update locale string files. +xgettext -C --qt --from-code=UTF-8 -o browser.pot src/*.cpp +msgmerge -U po/en.po browser.pot +msgmerge -U po/ca.po browser.pot +rm -f browser.pot # Instructions. echo "Browser's code is in /home/vagrant/browser directory." echo "To compile a new Browser, run as root user:" echo " cd /home/vagrant/browser && qmake browser.pro && make" -echo "Do not forget to copy all Browser's files to OpenGnsys Server:" +echo "To compile new locale files (note that \"xx\" is a locale code, like \"en\" or \"ca\"):" +echo " - Translate strings by editing each po/xx.po file." +echo " - Compile each locale file by running as root: msgfmt -o xx.mo po/xx.po" +echo "Do not forget to copy all Browser's files to the OpenGnsys Server:" echo " - Browser binary to /opt/opengnsys/client/bin directory on server." echo " - Qt linked libraries to /opt/opengnsys/client/lib/qtlibs directory." echo " - 64-bit-based ogLive only: libssl and libcrypto to /opt/opengnsys/client/lib/qtlibs directory." +echo " - Compiled Locale files, if needed: xx.mo as /opt/opengnsys/client/lib/locale/xx/LC_MESSAGES/browser.mo (\"xx\" is a locale code)." EOT Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| @@ -54,7 +64,6 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| vb.name = "ogBrowser" vb.memory = VMMEM vb.cpus = VMCPUS - vb.gui = true end # VM base and host name. br.vm.box = "ubuntu/trusty32" diff --git a/installer/vagrant/Vagrantfile-devel-vbox b/installer/vagrant/Vagrantfile-devel-vbox index 7aac2c56..c558227a 100644 --- a/installer/vagrant/Vagrantfile-devel-vbox +++ b/installer/vagrant/Vagrantfile-devel-vbox @@ -43,9 +43,10 @@ if which curl &>/dev/null; then elif which wget &>/dev/null; then DOWNLOAD="wget -q -O -" fi -$DOWNLOAD -s https://raw.githubusercontent.com/opengnsys/OpenGnsys/devel/installer/opengnsys_installer.sh | bash || exit $? +BRANCH="devel" +$DOWNLOAD "https://raw.githubusercontent.com/opengnsys/OpenGnsys/$BRANCH/installer/opengnsys_installer.sh" | bash || exit $? mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log -echo y | /opt/opengnsys/bin/setserveraddr enp0s8 +echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) # Insert DHCP data. for ((i=#{NCLIENTS+10}; i>10; i--)); do sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf @@ -68,34 +69,13 @@ dpkg-reconfigure -fnoninteractive console-setup #for ((i=12; i<=#{NCLIENTS+10}; i++)); do # /opt/opengnsys/bin/setclientmode ogLive pc$i PERM #done -# Comment out next lines to install new Angular-based web application (on early development). -#apt-get install -y git nodejs npm -#ln -fs nodejs /usr/bin/node -#npm install bower -g -#svn export https://opengnsys.es/svn/branches/version1.1-tickets/ogWebAdmin-ticket761/admin/WebConsole/angular /opt/opengnsys/www/angular -#cd /opt/opengnsys/www/angular -#chown -R vagrant.vagrant . -#su vagrant -c "bower install -F" -#sed -i 's!BASE_URL = .*$!BASE_URL = "https://localhost:#{LOCALWEBPORT}/opengnsys";!' ogWebAdmin/assets/js/config.constants.js -#### TEMPORAL PATCHES -#su vagrant -c "bower install angular-sanitize -F" -#su vagrant -c "bower install angular-translate-loader-static-files -F" -#su vagrant -c "bower install angular-ui-select -F" -#su vagrant -c "bower install bootstrap -F" -#su vagrant -c "bower install isteven-angular-multiselect -F" -#ln -s globunet-util.min.css ogWebAdmin/lib/globunet/dist/css/globunet-util.css -#cp -a ogWebAdmin/assets/i18n/es.json ogWebAdmin/assets/i18n/en.json -#sed -i 's/jm.bardallo/usuog/' ogWebAdmin/assets/js/controllers/login.controller.js -#sed -i "s/DirectoryIndex index.php/DirectoryIndex index.php index.html/" /etc/apache2/sites-enabled/opengnsys.conf -#service apache2 reload echo "Notes:" echo "- OpenGnsys Server URL: https://localhost:#{LOCALWEBPORT}/opengnsys/" -[ -d /opt/opengnsys/www/angular ] && echo "- Angular-based web URL: https://localhost:#{LOCALWEBPORT}/opengnsys/angular/ogWebAdmin/" exit 0 EOT # Client 1 OS provisioning script. -OGAGENTPKG = "ogagent_1.1.0_all.deb" +OGAGENTPKG = "ogagent_1.1.1_all.deb" MODELSCRIPT = <<EOT # Comment out next lines to install and configure OGAgent for Ubuntu. #apt-get update -y @@ -109,7 +89,7 @@ MODELSCRIPT = <<EOT # echo "Warning: cannot install OGAgent package #{OGAGENTPKG}" #fi # Remove network configuration added by Vagrant. -sed -i "/enp0s3/ d" /etc/network/interfaces +sed -i "/eth1/ d" /etc/network/interfaces echo "Notes:" echo "- After now, use VirtualBox GUI to disable network interface 1 and restart this VM." # Leave VM halted. @@ -143,7 +123,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk] end # VM base and host name. - og.vm.box = "bento/ubuntu-16.04" + og.vm.box = "bento/ubuntu-18.04" og.vm.hostname = "ogAdministrator" # Network configuration: forward web port and attach new interface to VMs private network. og.vm.network "forwarded_port", guest: 443, host: LOCALWEBPORT, host_ip: "127.0.0.1" @@ -156,7 +136,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # Client 1 VM definition. config.vm.define "pc11", autostart: false do |v1| - v1.vm.box = "bento/ubuntu-16.04" + v1.vm.box = "bento/ubuntu-18.04" v1.vm.hostname = "pc11" v1.vm.network "private_network", mac: "#{MACPREFIX}11".tr(":",""), type: "dhcp", virtualbox__intnet: true v1.vm.provider "virtualbox" do |vb| diff --git a/installer/vagrant/Vagrantfile-prod-vbox b/installer/vagrant/Vagrantfile-prod-vbox index adeccce7..5cfc94d5 100644 --- a/installer/vagrant/Vagrantfile-prod-vbox +++ b/installer/vagrant/Vagrantfile-prod-vbox @@ -45,7 +45,7 @@ elif which wget &>/dev/null; then fi $DOWNLOAD -s https://raw.githubusercontent.com/opengnsys/OpenGnsys/master/installer/opengnsys_installer.sh | bash || exit $? mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log -echo y | /opt/opengnsys/bin/setserveraddr enp0s8 +echo y | /opt/opengnsys/bin/setserveraddr $(ip -o link show | tail -1 | cut -d: -f2) # Insert DHCP data. for ((i=#{NCLIENTS+10}; i>10; i--)); do sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf diff --git a/repoman/bin/deleteimage b/repoman/bin/deleteimage index 2da477e4..a683d541 100755 --- a/repoman/bin/deleteimage +++ b/repoman/bin/deleteimage @@ -15,7 +15,7 @@ #@version 1.0.6 - Detección automática del tipo de imagen. #@date 2014-10-29 #@author Ramón Gómez, ETSII Univ. Sevilla -#@version 1.1.0 - Aunque no exista imagen permite recuperar la copia. +#@version 1.1.0 - Aunque no exista imagen permite recuperar la copia. #@date 2016-10-14 #@author Irina Gómez, ETSII Univ. Sevilla #*/ ## @@ -60,7 +60,7 @@ for IMG in "$OGIMG/$1.$IMGEXT" "$OGIMG/$1.$IMGEXT.$DIFFEXT" "$OGIMG/$1"; do if [ -r $IMG ] ; then IMGPATH=$IMG echo "Borrando imagen $IMGPATH" - rm -f $IMGPATH{,.sum,.full.sum,.torrent} + rm -fr $IMGPATH{,.sum,.full.sum,.torrent} break fi # Compruebo si existe copia de seguridad diff --git a/repoman/bin/importimage b/repoman/bin/importimage index 3a5a7bf3..63bcf865 100755 --- a/repoman/bin/importimage +++ b/repoman/bin/importimage @@ -9,7 +9,7 @@ #@warning Program will request the repository REST token. #@version 1.1.1 - Initial version #@author Ramón M. Gómez, ETSII Universidad de Sevilla -#@date 2017-10-08 +#@date 2018-10-08 #*/ @@ -17,11 +17,14 @@ PROG="$(basename "$0")" OPENGNSYS="/opt/opengnsys" REPODIR="$OPENGNSYS/images" +REPOCONF="$OPENGNSYS/etc/ogAdmRepo.cfg" SERVERCONF="$OPENGNSYS/etc/ogAdmServer.cfg" DEFAULTFILE="/etc/default/opengnsys" MYCNF=$(mktemp /tmp/.my.cnf.XXXXX) let BACKUP=0 source $DEFAULTFILE +source $REPOCONF &>/dev/null +[ "$RUN_OGADMSERVER" == "yes" ] && source $SERVERCONF &>/dev/null # Functions. source $OPENGNSYS/lib/ogfunctions.sh @@ -32,14 +35,14 @@ source $OPENGNSYS/lib/ogfunctions.sh # Error control. [ "$USER" == "root" ] || raiseError access "Need to be root." [ "$RUN_OGADMREPO" == "yes" ] || raiseError access "This server is not defined as image repository." -[ -w $REPODIR ] || raiseError access "Cannot write in local repository." +[ -w "$REPODIR" ] || raiseError access "Cannot write in local repository." +[ -n "$IPlocal" ] || raiseError access "Cannot read repository configuration file." case $# in 2) USERNAME="$SUDO_USER"; REPO="$1"; IMAGE="$2" ;; 3) USERNAME="$1"; REPO="$2"; IMAGE="$3" ;; *) [ "$*" == "help" ] && help || raiseError usage esac -source $SERVERCONF &>/dev/null -[ "${REPO,,}" == "${HOSTNAME,,}" ] || [ "${REPO,,}" == "localhost" ] || [ "${REPO}" == "127.0.0.1" ] || [ "${REPO,,}" == "${IPlocal,,}}" ] && raiseError access "Cannot import from local repository." +[ "${REPO,,}" == "${HOSTNAME,,}" ] || [ "${REPO,,}" == "localhost" ] || [[ ${REPO} =~ ^127\. ]] || [ "${REPO,,}" == "${IPlocal,,}" ] && raiseError access "Cannot import from local repository." # Fetching image info from the repository. read -rp "Enter repository API token: " APITOKEN @@ -61,9 +64,9 @@ IMAGESIZE="$(jq -r '.size' <<< "$IMAGEINFO" 2>/dev/null)" [ -z "$IMAGESIZE" ] && raiseError access "Cannot retrieve image size" # Checking if local image exists. IMAGEPATH="$REPODIR/$IMAGENAME.$IMAGETYPE" +LOCKFILE="$IMAGEPATH.lock" if [ -e "$IMAGEPATH" ]; then # Checking if local image is locked. - LOCKFILE="$IMAGEPATH.lock" [ -f "$LOCKFILE" ] && raiseError access "Local image is locked, cannot write." # Confirm image download. read -rp "Image $IMAGENAME exists in the local repository. Do you want to continue? (y/N): " ANSWER @@ -93,10 +96,13 @@ fi scp "$USERNAME@$REPO:$IMAGEPATH" $REPODIR ERRCODE=$? if [ $ERRCODE -eq 0 ]; then + # Cheking image size. + DOWNLOADSIZE=$(stat -c "%s" "$IMAGEPATH") + [ $IMAGESIZE -ne $DOWNLOADSIZE ] && echo "Warning: image sizes differ: source=$IMAGESIZE, target=$DOWNLOADSIZE." # Storing creation info. jq -r '.clonator+":"+.compressor+":"+.filesystem+":"+(.datasize|tostring)+":"' <<<"$IMAGEINFO" > "$IMAGEPATH.info" # Updating the database when the repo is also configured as Administration Server. - if [ "$RUN_OGADMREPO" == "yes" ]; then + if [ "$RUN_OGADMSERVER" == "yes" ]; then # Creating credentials file. cat << EOT > $MYCNF [client] @@ -122,11 +128,10 @@ EOT else # Choose image OU. echo "Choose Organization Unit:" - for ((i=0; i<${#OUS[@]}; i++)); do - echo " $i: ${OUS[i]#* }" + PS3="Enter number: " + select opt in "${OUS[@]#* }"; do + [ -n "$opt" ] && let OUID="${OUS[REPLY-1]%% *}" && break done - read -rp "Enter number (0 by default): " ANSWER - let OUID="${OUS[ANSWER]%% *}" 2>/dev/null || let OUID="${OUS[0]%% *}" fi # Creating a new image associated with an empty software profile. mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \ @@ -146,9 +151,6 @@ EOT echo "Warning: database cannot be updated." fi fi - # Cheking image size. - DOWNLOADSIZE=$(stat -c "%s" "$IMAGEPATH") - [ $IMAGESIZE -ne $DOWNLOADSIZE ] && echo "Warning: image sizes differ: source=$IMAGESIZE, target=$DOWNLOADSIZE." else # On download error, trying to recover backup. raiseError download "$USERNAME@$REPO:$IMAGEPATH" diff --git a/repoman/bin/sendFileMcast b/repoman/bin/sendFileMcast index 222a6d40..9f6479c9 100755 --- a/repoman/bin/sendFileMcast +++ b/repoman/bin/sendFileMcast @@ -4,7 +4,7 @@ #@param str_session Datos de sesión (Puerto:Duplex:IP:Mpbs:Nclientes:Timeout) -PROG=$(basename $0) +PROG=$(basename "$0") OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} OGIMG=$OPENGNSYS/images OGBIN=$OPENGNSYS/bin @@ -37,16 +37,17 @@ if [ ! -f "$FICHIMG" ]; then fi # Parámetros de sesión separado por ":". -PARAMS=$(echo $2 | \ - awk -F: '$1~/^[0-9]*$/ {print $1} - tolower($2)~/^(half)(-duplex)?$/ {print "half-duplex"} - tolower($2)~/^(full)(-duplex)?$/ {print "full-duplex"} - $3~/^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$/ {print $3} - $4~/^[0-9]*[mM]/ {print toupper($4)} - $5~/^[0-9]*/ {print $5} - $6~/^[0-9]*/ {print $6} +PARAMS=$(echo "$2" | \ + awk -F: '$1~/^[0-9]+$/ {v1=$1} + tolower($2)~/^half(-duplex)?$/ {v2="--half-duplex"} + tolower($2)~/^full(-duplex)?$/ {v2="--full-duplex"} + $3~/^[0-9]+(\.[0-9]+){3}$/ {v3=$3} + $4~/^[0-9]+[mM]$/ {v4=tolower($4)} + $5~/^[0-9]+$/ {v5=$5} + $6~/^[0-9]+$/ {v6=$6} + END {print v1,v2,v3,v4,v5,v6} ') -read -e PORTBASE METHOD ADDRESS BITRATE NCLIENTS MAXTIME <<< $PARAMS +read -re PORTBASE METHOD ADDRESS BITRATE NCLIENTS MAXTIME <<< "$PARAMS" if [ -z "$MAXTIME" ]; then echo "$PROG Error: Datos de sesión incorrectos: \"$2\"" exit 3 @@ -56,7 +57,7 @@ fi CERROR="8x8/128" # Envío de fichero por Multicast. -# Se desabilita el uso de mbuffer: eesta versión del upd-sender no la admite. +# Se desabilita el uso de mbuffer: esta versión del upd-sender no la admite. #which mbuffer &> /dev/null && MBUFFER="--pipe 'mbuffer -m 20M'" -$OGBIN/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --interface $REPO_IFACE --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 16 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" +$OGBIN/udp-sender "$MBUFFER" --nokbd --retries-until-drop 65 --portbase "$PORTBASE" "$METHOD" --interface "$REPO_IFACE" --mcast-data-address "$ADDRESS" --fec "$CERROR" --max-bitrate "$BITRATE" --ttl 16 --min-clients "$NCLIENTS" --max-wait "$MAXTIME" --file "$FICHIMG" diff --git a/repoman/bin/torrent-creator b/repoman/bin/torrent-creator index 958683ed..cfca393e 100755 --- a/repoman/bin/torrent-creator +++ b/repoman/bin/torrent-creator @@ -15,6 +15,10 @@ PATH=$PATH:$OPENGNSYS/bin OGIMG="$OPENGNSYS/images" REPOCFG="$OPENGNSYS/etc/ogAdmRepo.cfg" LOGFILE="$OPENGNSYS/log/$PROG.log" +DEFAULTFILE=/etc/default/opengnsys +source $DEFAULTFILE +# No hacer nada si no está definido como repositorio. +[ "$RUN_OGADMREPO" == "yes" ] || exit 0 # Error si no está bien configurado el repositorio de imágenes. [ -d $OGIMG -a -f $REPOCFG ] || exit 1 source $REPOCFG @@ -52,7 +56,7 @@ for IMG in *.{img,pgz,diff,dsk} */*.{img,pgz,diff,dsk} ; do # Datasum completo para transferencias torrent DATAFULLSUM=$(md5sum -b "$IMG"| cut -f1 -d" ") echo $DATAFULLSUM > "$SUMFULLFILE" - nice -8 ctorrent -t "$IMG" -u $TRACKERURL -s "$TORRENT" -c $DATAFULLSUM -l 4194304 2>/dev/null + nice -n ${BTSEEDER_PRIORITY:-0} ctorrent -t "$IMG" -u $TRACKERURL -s "$TORRENT" -c $DATAFULLSUM -l 4194304 2>/dev/null rm -f "$LOCKFILE" if [ -f "$TORRENT" ]; then echo "`date` : Fin creación de fichero $TORRENT" >> $LOGFILE diff --git a/repoman/etc/rsyncd.secrets.tmpl b/repoman/etc/rsyncd.secrets.tmpl deleted file mode 100644 index 92a79be6..00000000 --- a/repoman/etc/rsyncd.secrets.tmpl +++ /dev/null @@ -1 +0,0 @@ -CLIENTUSER:CLIENTPASSWORD diff --git a/server/bin/checkperms b/server/bin/checkperms index 5c558c45..3f79e2d3 100755 --- a/server/bin/checkperms +++ b/server/bin/checkperms @@ -44,6 +44,8 @@ find $OPENGNSYS_DIR/images -maxdepth 1 -exec chown :$OPENGNSYS_USER {} \; find $OPENGNSYS_DIR/images -maxdepth 1 -type d -exec chmod 775 {} \; find $OPENGNSYS_DIR/images -maxdepth 1 -type f -exec chmod 664 {} \; find $OPENGNSYS_DIR/client/{interfaceAdm,scripts} ! -name "*.txt" -exec chmod +x {} \; +chown -R $OPENGNSYS_USER:$OPENGNSYS_USER $OPENGNSYS_DIR/client/etc/ssl/private +chmod -R go-rwx $OPENGNSYS_DIR/client/etc/ssl/private chown $OPENGNSYS_USER:$OPENGNSYS_USER $OPENGNSYS_DIR/client/interfaceAdm/CambiarAcceso chmod 700 $OPENGNSYS_DIR/client/interfaceAdm/CambiarAcceso chown root:root $OPENGNSYS_DIR/etc/{ogAdmServer,ogAdmAgent}*.cfg @@ -53,7 +55,7 @@ chmod 640 $OPENGNSYS_DIR/{www/controlacceso*.php,etc/ogAdmRepo*.cfg} chown -R $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/www/images/{fotos,iconos} mkdir -p $OPENGNSYS_DIR/www/{api,tmp} chown -R $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/www/{api,tmp} -chown -R $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/tftpboot/menu.lst +chown -R $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/tftpboot/{menu.lst,grub} chown -R :$OPENGNSYS_USER $OPENGNSYS_DIR/tftpboot/ogLive* find -L $OPENGNSYS_DIR/tftpboot -type d -exec chmod 755 {} \; find -L $OPENGNSYS_DIR/tftpboot -type f -exec chmod 644 {} \; diff --git a/server/bin/getRepoIface b/server/bin/getRepoIface new file mode 100755 index 00000000..2ce208be --- /dev/null +++ b/server/bin/getRepoIface @@ -0,0 +1,9 @@ +#!/bin/bash + +# This script takes the IPlocal variable of the repository +# and returns the system interface +# Alfredo Luque <aluque@soleta.eu> + +source /opt/opengnsys/etc/ogAdmRepo.cfg + +ip addr show | grep $IPlocal | cut -f2 | awk '{ print $NF }' diff --git a/server/bin/oglivecli b/server/bin/oglivecli index 451c3c12..ca8ac0f9 100755 --- a/server/bin/oglivecli +++ b/server/bin/oglivecli @@ -14,13 +14,14 @@ # Global constants definition. -PROG=$(basename "$(realpath "$0")") -OPENGNSYS=/opt/opengnsys -DOWNLOADDIR=$OPENGNSYS/lib -DOWNLOADURL="https://opengnsys.es/trac/downloads" -TFTPDIR=$OPENGNSYS/tftpboot -DEFOGLIVE="ogLive" -INFOFILE=$OPENGNSYS/etc/ogliveinfo.json +PROG=$(basename "$(realpath "$0")") # Program name. +OPENGNSYS=/opt/opengnsys # OpenGnsys main directory. +DOWNLOADDIR=$OPENGNSYS/lib # Directory to store ogLive images. +DOWNLOADURL="https://opengnsys.es/trac/downloads" # Download URL. +TFTPDIR=$OPENGNSYS/tftpboot # TFTP directory. +DEFOGLIVE="ogLive" # Default ogLive directory. +MINREL=20190601 # Mininum ogLive compatibility release. +INFOFILE=$OPENGNSYS/etc/ogliveinfo.json # Configuration file. # Auxiliar functions. @@ -154,6 +155,7 @@ ogLive download URL: $DOWNLOADURL ogLive download directory: $DOWNLOADDIR ogLive installation directory: $TFTPDIR Default ogLive name: $DEFOGLIVE +Mainimum compatibility release: r$MINREL EOT ;; 1) # Show specified parameter. @@ -163,6 +165,7 @@ EOT download-dir) echo "$DOWNLOADDIR" ;; install-dir) echo "$TFTPDIR" ;; default-name) echo "$DEFOGLIVE" ;; + min-release) echo "r$MINREL" ;; *) raiseError notfound "$1" ;; esac ;; @@ -208,6 +211,8 @@ function check() { [ $DOWNLOADDIR/$DEF -nt $TFTPDIR/$INST ] && echo "$DEF" done) [ -n "$AUX" ] && echo "Some ISOs are downloaded after installation: ${AUX//$'\n'/, }" && let ERR++ + AUX=$(jq -r '.oglive[] as $og | if ($og.revision[1:9] | tonumber) < '$MINREL' then $og.directory else "" end' $INFOFILE 2>/dev/null) + [ -n "$AUX" ] && echo "Some installed ogLive aren't fully compatible: ${AUX//$'\n'/, }" && let ERR++ # Print result. [ $ERR -eq 0 ] && echo "OK!" || echo "Problems detected: $ERR" return $ERR @@ -253,7 +258,7 @@ function search() { # Show a menu to select and download an ogLive ISO image from the OpenGnsys website. function download() { local OGLIVE NISOS i SOURCELENGTH TARGETFILE - local ISOREL MINREL=5000 # Mininum compatibility release. + local ISOREL [ $# -gt 1 ] && raiseError usage [ ! -d $DOWNLOADDIR ] && raiseError notfound "Download directory" [ ! -w $DOWNLOADDIR ] && raiseError access "Download directory" @@ -268,7 +273,7 @@ function download() { echo "Available downloads (+ = installed, * = full compatibility):" for i in $(seq 1 $NISOS); do [ -e $DOWNLOADDIR/${OGLIVE[i-1]} ] && OGLIVE[i-1]="(+) ${OGLIVE[i-1]}" - ISOREL=${OGLIVE[i-1]##*-r}; ISOREL=${ISOREL%.*} + ISOREL=${OGLIVE[i-1]##*-r}; ISOREL=${ISOREL%%.*} [ $ISOREL -ge $MINREL ] && OGLIVE[i-1]="(*) ${OGLIVE[i-1]}" done select opt in "${OGLIVE[@]}"; do diff --git a/server/bin/setclientmode b/server/bin/setclientmode index 855ae4a6..4004e932 100755 --- a/server/bin/setclientmode +++ b/server/bin/setclientmode @@ -22,41 +22,58 @@ #@version 1.1.0a - El server siempre es el servidor PXE. El segundo parámetro de la IP es el SERVER. La asignación del ogLive siempre es el server. (ticket #859). #@author Antonio J. Doblas Viso, Universidad de Malaga #@date 2018-07-11 +#@version 1.1.1 - Crea configuración PXE para BIOS y UEFI. Permite pasar los datos acceso a la base de datos por variables de entorno. (ticket #802) +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019-02-13 #*/ ## - # Variables. PROG=$(basename $0) OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg -PXEDIR=$OPENGNSYS/tftpboot/menu.lst +PXEDIR[0]=$OPENGNSYS/tftpboot/menu.lst +PXEDIR[1]=$OPENGNSYS/tftpboot/grub LOGFILE=$OPENGNSYS/log/opengnsys.log MYCNF=/tmp/.my.cnf.$$ + # Control básico de errores. if [ $# -ne 3 ]; then echo "$PROG: Error de ejecución" echo "Formato: $PROG PLANTILLA [NOMBRE_PC|NOMBRE_AULA] MODO" exit 1 fi -if [ ! -r $SERVERCONF ]; then - echo "$PROG: Sin acceso a fichero de configuración" - exit 2 + +# Comprobar si el usuario es "root" o el del servicio web. +WEBUSER=$(ps axho user,comm|awk '!/root/ && /httpd|apache/ {print $1; exit;}') +if [ "$USER" != "root" -a "$USER" != "$WEBUSER" ]; then + echo "$PROG: Need to be root. (The console can also call the script)." >&2 + exit 1 +fi + +# El acceso a mysql por las variables pasadas o por el fichero de configuarción. +if [ -z "$USUARIO" ] || [ -z "$PASSWORD" ] || [ -z "$CATALOG" ]; then + if [ -r "$SERVERCONF" ]; then + source $SERVERCONF + else + echo "$PROG: Sin acceso a fichero de configuración" + exit 2 + fi fi -TEMPLATE=$(grep -l "^#.* $1 *$" $PXEDIR/templates/*) -if [ -z "$TEMPLATE" ]; then +TEMPLATE[0]=$(grep -l "^#.* $1 *$" ${PXEDIR[0]}/templates/*) +TEMPLATE[1]=$(grep -l "^#.* $1 *$" ${PXEDIR[1]}/templates/*) +if [ -z "${TEMPLATE[0]}" -a -z "${TEMPLATE[1]}" ]; then echo "No existe archivo platilla: $1" exit fi -case "$3" in + +case "${3^^}" in 0|TEMP) MODE="TEMP" ;; 1|PERM) MODE="PERM" ;; *) echo "$PROG: Modo desconodido: 0, TEMP (temporal), 1, PERM (permanente)" exit 1 ;; esac -# Obtener datos de acceso a la Base de datos. -source $SERVERCONF # Sustituir caracteres ' por \' para evitar inyección SQL. BOOTMODE="${1//\'/\'}" RESOURCE="${2//\'/\'}" @@ -87,9 +104,9 @@ NPC=0 for MAC in $ETHERNET; do date +"%b %d %T $PROG: Detectada ethernet \"$MAC\" en \"$2\"" | tee -a $LOGFILE MACFILE="${MAC^^}" - PXEFILE=$PXEDIR/01-${MACFILE:0:2}-${MACFILE:2:2}-${MACFILE:4:2}-${MACFILE:6:2}-${MACFILE:8:2}-${MACFILE:10:2} - # Renombra el fichero PXE original - [ -e $PXEFILE ] && mv $PXEFILE $PXEFILE.netboot + PXEFILE[0]=01-${MACFILE:0:2}-${MACFILE:2:2}-${MACFILE:4:2}-${MACFILE:6:2}-${MACFILE:8:2}-${MACFILE:10:2} + MACFILE="${MAC,,}" + PXEFILE[1]=01-${MACFILE:0:2}:${MACFILE:2:2}:${MACFILE:4:2}:${MACFILE:6:2}:${MACFILE:8:2}:${MACFILE:10:2} if [ "$1" != "default" ]; then # Si no está definida la variable LANG, usar idioma inglés por defecto. [ -z "$LANG" -o "$LANG" == "C" ] && LANG="en" @@ -130,30 +147,49 @@ for MAC in $ETHERNET; do [[ "$DATOS" =~ (vga|video) ]] || DATOS="$DATOS vga=788" # Obtener directorio ogLive a partir de los datos. OGLIVEDIR=$(echo "$DATOS" | awk -F= 'BEGIN {RS=" "} $1=="oglivedir" {print $2}') - # Comprobar si existe "oglivedir" en la plantilla para evitar duplicados. - if grep -q "oglivedir=" $TEMPLATE 2>/dev/null; then - DATOS="${DATOS/oglivedir=$OGLIVEDIR/}" - fi - # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD. - sed -e "s,vga=[0-9]*,,g; s,INFOHOST,${DATOS//,/\\,},g; s,set ISODIR=.*,set ISODIR=$OGLIVEDIR,g" $TEMPLATE >$PXEFILE - # Ponemos como propietario al usuario y grupo de Apache para que se pueda cambiar desde la consola web. - PERMS=$(ps axho user,group,comm|awk '!/root/ && /httpd|apache/ {u=$1; g=$2} END {if (g) printf "%s:%s",u,g}') - [ -n "$PERMS" ] && chown $PERMS $PXEFILE + + # Pondremos como propietario al usuario y grupo de Apache para que se pueda cambiar desde la consola web. + WEBGROUP=$(ps axho group,comm|awk '!/root/ && /httpd|apache/ {print $1; exit;}') + for BOOTTYPE in 0 1; do + # Si no existe la plantilla borramos el archivo PXE anterior continuamos + if [ -z "${TEMPLATE[$BOOTTYPE]}" ]; then + rm ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} + continue + fi + # Comprobar si existe "oglivedir" en la plantilla para evitar duplicados. + if grep -q "oglivedir=" ${TEMPLATE[$BOOTTYPE]} 2>/dev/null; then + DATOSAUX="${DATOS/oglivedir=$OGLIVEDIR/}" + fi + # Renombra el fichero PXE original + [ -e ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} ] && mv ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}.netboot + + # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD. + sed -e "s,vga=[0-9]*,,g; s,INFOHOST,${DATOSAUX//,/\\,},g; s,set ISODIR=.*,set ISODIR=$OGLIVEDIR,g" ${TEMPLATE[$BOOTTYPE]} >${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} + [ -n "$WEBUSER" ] && chown $WEBUSER:$WEBGROUP ${PXEDIR[$BOOTTYPE]}/${PXEFILEE[$BOOTTYPE]} + done + + # Si el modo de trabajo es temporal (0) mete un retardo, restaura el fichero PXE a su estado original y no toca la base de datos if [ "$MODE" == "TEMP" ]; then sleep 60 - rm $PXEFILE - [ -e $PXEFILE.netboot ] && mv $PXEFILE.netboot $PXEFILE + for BOOTTYPE in 0 1; do + [ -e ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} ] && rm ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} + [ -e ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}.netboot ] && mv ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}.netboot ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} + done fi + # Si el modo de trabajo es permanente (1) borra el fichero PXE.netboot si existe y graba los datos en la base de datos if [ "$MODE" == "PERM" ]; then - [ -e $PXEFILE.netboot ] && rm $PXEFILE.netboot + [ -e ${PXEDIR[0]}/${PXEFILE[0]}.netboot ] && rm ${PXEDIR[0]}/${PXEFILE[0]}.netboot + [ -e ${PXEDIR[1]}/${PXEFILE[1]}.netboot ] && rm ${PXEDIR[1]}/${PXEFILE[1]}.netboot + # Si no existe la plantilla de tipo BIOS tomo el nombre de la UEFI + [ -z "${TEMPLATE[0]}" ] && TEMPLATE[0]=${TEMPLATE[1]} + mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \ - "UPDATE ordenadores SET arranque='$(basename $TEMPLATE)' WHERE mac='$MAC';" + "UPDATE ordenadores SET arranque='$(basename ${TEMPLATE[0]})' WHERE mac='$MAC';" fi fi let NPC=NPC+1 done date +"%b %d %T $PROG: $NPC equipo(s) configurado(s)" | tee -a $LOGFILE - diff --git a/server/bin/setserveraddr b/server/bin/setserveraddr index eb52d64d..cca279b8 100755 --- a/server/bin/setserveraddr +++ b/server/bin/setserveraddr @@ -120,6 +120,7 @@ if [ -n "$SERVERIP" ]; then if [ "$RUN_OGADMREPO" == "yes" ]; then REPOKEY=$(php -r 'echo md5(uniqid(rand(), true));') sed -i -e "s/ApiToken=.*/ApiToken=$REPOKEY/" $OPENGNSYS/etc/ogAdmRepo.cfg + sed -i -e "s/APITOKEN=.*/APITOKEN=$REPOKEY/" $OPENGNSYS/etc/ogAdmServer.cfg fi # If OpenGnsys Server is active, updating the database. if [ "$RUN_OGADMSERVER" == "yes" ]; then diff --git a/server/bin/setsmbpass b/server/bin/setsmbpass index 2162b3be..efd90eec 100755 --- a/server/bin/setsmbpass +++ b/server/bin/setsmbpass @@ -105,7 +105,7 @@ for OGLIVE in $LIST; do done if [[ $CHANGES != 0 ]]; then # Ticket 565, preparar acceso Rsync servidor. - echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets + [ -e /etc/rsyncd.secrets ] && sed -i -n -e "/^$SAMBAUSER:/!p" -e "$ a$SAMBAUSER:$SAMBAPASS" /etc/rsyncd.secrets || echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets chown root.root /etc/rsyncd.secrets chmod 600 /etc/rsyncd.secrets # Cambiar clave Samba. diff --git a/server/bin/setsslkey b/server/bin/setsslkey new file mode 100755 index 00000000..9652f006 --- /dev/null +++ b/server/bin/setsslkey @@ -0,0 +1,127 @@ +#!/bin/bash + +#/** +# setsslkey +#@file setsslkey [NEW] [ogLive] +#@brief Configura las claves públicas en los ogLive para que puedan autenticarse entre ellos. +#@param $1 crear_key [NEW] (opcional). Crear la pareja de claves ssl. Por defecto toma la del oglive por defecto. +#@param $2 ogLive (opcional). ogLive al que se le incluyen las claves públicas, por defecto a todos. +#@warning Se modifica el Initrd del cliente. +#@version 1.1.2 - Versión inicial - Basado en setserveraddr +#@author Irina Gómez - ETSII Universidad Sevilla +#@date 2019-09-25 +#*/ ## + + +# Variables. +PROG=$(basename "$0") +PATH=$PATH:$(dirname "$(realpath "$0")") +OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} +TFTPDIR=$OPENGNSYS/tftpboot +INITRD=oginitrd.img +TMPDIR=/tmp/oglive$$ +let CHANGES=0 + +# Control básico de errores. +if [ "$USER" != "root" ]; then + echo "$PROG: Error: solo ejecutable por root" >&2 + exit 1 +fi + +# Regenerar las claves públicas aunque existan +[ "${1^^}" == "NEW" ] && NEWKEY="NEW" && shift + +case $# in + 0) # Cambios en todos los clientes ogLive instalados. + if which oglivecli &>/dev/null; then + LIST=$(oglivecli list | awk '{print $2}') + else + LIST="ogclient" + fi ;; + 1) # Cambios en único ogLive (AVISO: puede crear inconsistencias con otros ogLive). + LIST="$1" ;; + *) # Error de formato. + echo "$PROG: Error de ejecución" >&2 + echo "Formato: $PROG ogLive" + exit 1 ;; +esac + +# Si me salgo con error borro el directorio temporal +trap "rm -rf $TMPDIR 2>/dev/null" 1 2 3 6 9 15 + +# ogLive por defecto +OGLIVEDEFAULT=$(oglivecli list |awk -v NUM=$(oglivecli get-default) '{if ($1 == NUM) print $2}') + +if [ "$NEWKEY" != "NEW" ]; then + # Comprobamos si el ogLive por defecto contiene la clave + CLIENTINITRD="$TFTPDIR/$OGLIVEDEFAULT/$INITRD" + if [ -r "$CLIENTINITRD" ]; then + mkdir -p $TMPDIR + cd $TMPDIR || exit 3 + gzip -dc "$CLIENTINITRD" | cpio -im + if [ -r scripts/ssl/id_rsa ]; then + PRIVKEY=$(cat scripts/ssl/id_rsa |grep -v '\-\-\-') + PUBLICKEY=$(cat scripts/ssl/id_rsa.pub) + else + NEWKEY="NEW" + fi + rm -fr $TMPDIR + else + NEWKEY="NEW" + fi +fi + +# Genero nueva clave +if [ "$NEWKEY" == "NEW" ]; then + [ -d $TMPDIR ] && rm -rf $TMPDIR + mkdir $TMPDIR + ssh-keygen -N "" -f $TMPDIR/id_rsa + PRIVKEY=$(cat $TMPDIR/id_rsa |grep -v "\-\-\-") + PUBLICKEY=$(cat $TMPDIR/id_rsa.pub) + rm -rf $TMPDIR +fi + +# Buscar todos los clients ogLive instalados. +for OGLIVE in $LIST; do + # Si no hay generar nueva clave ssl no hay que modificar el ogLive por defecto + [ "$NEWKEY" != "NEW" ] && [ "$OGLIVE" == "$OGLIVEDEFAULT" ] && continue + + # Crear clave para usuario de acceso a los recursos. + CLIENTINITRD="$TFTPDIR/$OGLIVE/$INITRD" + if [ -r "$CLIENTINITRD" ]; then + # Editar la parte de acceso del cliente: + # descomprimir Initrd, sustituir clave y recomprimir Initrd). + echo "Configurando cliente \"$OGLIVE\" ..." + mkdir -p $TMPDIR + cd $TMPDIR || exit 3 + gzip -dc "$CLIENTINITRD" | cpio -im + + # Genero archivos de claves + [ -d $TMPDIR/scripts/ssl ] || mkdir -p $TMPDIR/scripts/ssl + + echo "-----BEGIN RSA PRIVATE KEY-----" > $TMPDIR/scripts/ssl/id_rsa + echo $PRIVKEY |sed s/" "/\\n/g >> $TMPDIR/scripts/ssl/id_rsa + echo "-----END RSA PRIVATE KEY-----" >> $TMPDIR/scripts/ssl/id_rsa + + echo $PUBLICKEY > $TMPDIR/scripts/ssl/id_rsa.pub + echo $PUBLICKEY > $TMPDIR/scripts/ssl/authorized_keys + + chmod 400 $TMPDIR/scripts/ssl/id_rsa + chmod 400 $TMPDIR/scripts/ssl/authorized_keys + + # Generar Initrd del cliente. + find . | cpio -H newc -oa | gzip -9c > "$CLIENTINITRD" + + rm -fr $TMPDIR + # Calcular suma de comprobación. + md5sum "$CLIENTINITRD" | cut -f1 -d" " > "$CLIENTINITRD.sum" + let CHANGES++ + else + echo "$PROG: Cliente \"$OGLIVE\" no accesible." + fi +done +if [[ $CHANGES != 0 ]]; then + echo "$PROG: Se ha modificado la pareja de claves ssl en $CHANGES clientes." +else + echo "$PROG: Aviso: no se ha modificado la clave de ningún cliente." +fi diff --git a/server/bin/settoken b/server/bin/settoken new file mode 100755 index 00000000..dd98f06a --- /dev/null +++ b/server/bin/settoken @@ -0,0 +1,83 @@ +#!/bin/bash + +#/** +#@file settoken +#@brief Generate a new security token for the specified service. +#@usage settoken [-f] [Service] +#@param -f: force server restart without prompting (ask by default) +#@param Service: may be "server", "repo" or "both" (by default) +#@warning This script uses "php" command. +#@version 1.1.2 - Initial version. +#@author Ramón M. Gómez - ETSII Univ. Sevilla +#@date 2019-09-25 +#*/ ## + +# Global constants definition. +PROG=$(basename "$(realpath "$0")") # Program name. +OPENGNSYS=/opt/opengnsys # OpenGnsys main directory. +SERVERCFG=$OPENGNSYS/etc/ogAdmServer.cfg # Configuration files. +REPOCFG=$OPENGNSYS/etc/ogAdmRepo.cfg + +# Functions. +source $OPENGNSYS/lib/ogfunctions.sh + +# Error control. +[ "$USER" != "root" ] && raiseError access "Need to by root" +if [ "$1" == "-f" ]; then + FORCE=1 + shift +fi +[ $# -gt 1 ] && raiseError usage +case "${1,,}" in + help) + help ;; + server) + SERVER=1 ;; + repo) + REPO=1 ;; + ""|both) + SERVER=1; REPO=1 ;; + *) + raiseError notfound "Unknown service" +esac +[ -w $SERVERCFG ] || raiseError access "Server configuration file" + +# Update server token. +if [ "$SERVER" ]; then + # Confirm action (server will be restarted). + if [ ! "$FORCE" ]; then + read -rp "It will be necessary to restart ogAdmServer service. Continue? [y/N]: " ANSWER + [ "${ANSWER,,}" != "y" ] && raiseError cancel "API tokens not updated" + fi + APIKEY=$(php -r 'echo md5(uniqid(rand(), true));') + sed -i "s/^APITOKEN=.*/APITOKEN=$APIKEY/" $SERVERCFG || raiseError access "Cannot update server file" +fi + +# Update repository token. +if [ "$REPO" ]; then + [ -w $REPOCFG ] || raiseError access "Repository configuration file" + APIKEY=$(php -r 'echo md5(uniqid(rand(), true));') + sed -i "s/^ApiToken=.*/ApiToken=$APIKEY/" $REPOCFG || raiseError access "Cannot update repository file" + # If database is local, update it. + source $SERVERCFG + source $REPOCFG + if [ "$ServidorAdm" == "$IPlocal" ]; then + MYCNF=$(mktemp) + trap "rm -f $MYCNF" 0 1 2 3 6 9 15 + chmod 600 $MYCNF + cat << EOT > $MYCNF +[client] +user=$USUARIO +password=$PASSWORD +host=$datasource +EOT + mysql --defaults-extra-file="$MYCNF" --default-character-set=utf8 -D "$CATALOG" -e \ + "UPDATE repositorios SET apikey='$APIKEY' WHERE ip='$IPlocal';" || raiseError access "Database error" + fi +fi + +# Restart server, if needed. +if [ "$SERVER" ]; then + restart opengnsys +fi + diff --git a/server/lib/ogfunctions.sh b/server/lib/ogfunctions.sh index 51de6b77..34b2ab7b 100755 --- a/server/lib/ogfunctions.sh +++ b/server/lib/ogfunctions.sh @@ -23,6 +23,9 @@ function raiseError() { download) echo "$PROG: Download error: $2" >&2 exit 4 ;; + cancel) + echo "$PROG: Operation cancelled: $2" >&2 + exit 5 ;; *) echo "$PROG: Unknown error" >&2 exit 1 ;; @@ -54,6 +57,20 @@ function help() { exit 0 } +# Functions to manage a service. +function restart() { + _service restart "$1" +} +function start() { + _service start "$1" +} +function stop() { + _service stop "$1" +} + + +### Meta-functions and private functions. + # Metafunction to check if JSON result exists. JQ=$(which jq 2>/dev/null) || raiseError notfound "Need to install \"jq\"." function jq() { @@ -63,3 +80,17 @@ function jq() { echo "$OUTPUT" } +# Private function to acts on a service (do not use directly). +function _service() { + local ACTION="$1" + local SERVICE="$2" + if which systemctl 2>/dev/null; then + systemctl "$ACTION" "$SERVICE" + elif which service 2>/dev/null; then + service "$SERVICE" "$ACTION" + elif [ -x /etc/init.d/"$SERVICE" ]; then + /etc/init.d/"$SERVICE" "$ACTION" + else + raiseError notfound "Service $SERVICE" + fi +} diff --git a/server/lib/security-config b/server/lib/security-config index 11961758..6d53d198 100755 --- a/server/lib/security-config +++ b/server/lib/security-config @@ -23,16 +23,16 @@ if which ufw &>/dev/null; then echo "Configuring UFW." # Adding active services. ufw allow "Apache Secure" + ufw allow from 127.0.0.1/8 to any port mysql proto tcp # MySQL from the loopback ufw allow OpenSSH ufw allow Samba - ufw allow mysql ufw allow rsync ufw allow tftp ufw allow 67,68/udp # DHCP - ufw allow 2008/tcp # OpenGnsys service + ufw allow 2008,2009,2011/tcp # OpenGnsys services ufw allow 6881:6999/udp # BitTorrent ufw allow 9000/tcp # PHP-FPM - ufw allow 9000:9051/udp # Multicast + ufw allow 9000:9101/udp # Multicast # Applying configuration. ufw enable # FirewallD configuration. @@ -42,9 +42,9 @@ elif which firewall-cmd &>/dev/null; then python -c " import firewall.core.io.service as ios s=ios.Service() -s.short = 'OpenGnsys Server' -s.name = 'ogAdmServer' -s.ports = [('2008', 'tcp')] +s.short = 'OpenGnsys Services' +s.name = 'opengnsys' +s.ports = [('2008', 'tcp'), ('2009', 'tcp'), ('2011', 'tcp')] ios.service_writer(s, '/etc/firewalld/services') s.name = 'php-fpm' s.ports = [('9000', 'tcp')] @@ -52,9 +52,9 @@ ios.service_writer(s, '/etc/firewalld/services')" # Adding active services. firewall-cmd --permanent --add-service=dhcp firewall-cmd --permanent --add-service=https - firewall-cmd --permanent --add-service=php-fpm firewall-cmd --permanent --add-service=mysql --zone internal - firewall-cmd --permanent --add-service=ogAdmServer + firewall-cmd --permanent --add-service=opengnsys + firewall-cmd --permanent --add-service=php-fpm # Ubuntu 14.04 does not define "rsyncd" service. firewall-cmd --permanent --add-service=rsyncd || \ firewall-cmd --permanent --add-port=873/tcp @@ -73,16 +73,20 @@ fi # SELinux configuration. if which setsebool &>/dev/null; then - echo "Configuring SELinux." - # Configuring Apache. - setsebool -P httpd_can_connect_ldap on - semanage fcontext -at httpd_sys_content_t "$OPENGNSYS/www(/.*)?" - # Configuring Samba. - setsebool -P samba_export_all_ro=1 samba_export_all_rw=1 - semanage fcontext -at samba_share_t "$OPENGNSYS/client(/.*)?" - semanage fcontext -at samba_share_t "$OPENGNSYS/images(/.*)?" - # Applying configuration. - restorecon -R $OPENGNSYS + if selinuxenabled; then + echo "Configuring SELinux." + # Configuring Apache. + setsebool -P httpd_can_connect_ldap on + semanage fcontext -at httpd_sys_content_t "$OPENGNSYS/www(/.*)?" + # Configuring Samba. + setsebool -P samba_export_all_ro=1 samba_export_all_rw=1 + semanage fcontext -at samba_share_t "$OPENGNSYS/client(/.*)?" + semanage fcontext -at samba_share_t "$OPENGNSYS/images(/.*)?" + # Applying configuration. + restorecon -R $OPENGNSYS + else + echo "$PROG: Warning: SELinux is disabled, it won't be configured." + fi else echo "$PROG: Warning: SELinux won't be configured (policycoreutils is not installed)." fi diff --git a/server/tftpboot/grub/default b/server/tftpboot/grub/default new file mode 100644 index 00000000..6c505de6 --- /dev/null +++ b/server/tftpboot/grub/default @@ -0,0 +1,65 @@ +# Busca cargadores existentes por orden de prioridad e +# inicia el primero que encuentra. +# Si no existe ningún cargador de arranque muestre mensaje de error. +set timeout=5 + +set detectado='no' +# Compruebo si existen distintos cargadores. +echo "Searching rEFInd" +search --file --set rootRefind /EFI/refind/shimx64.efi.signed +if [ "$rootRefind" != "" ]; then + set detectado='si' + menuentry "rEFInd" { + root="$rootRefind" + chainloader /EFI/refind/shimx64.efi.signed +} +fi + +echo "Searching Part-01-02" +search --file --set rootP2 /EFI/Part-01-02/Boot/ogloader.efi +if [ "$rootP2" != "" ]; then + set detectado='si' + menuentry "Part-01-02" { + root="$rootP2" + chainloader /EFI/Part-01-02/Boot/ogloader.efi + } +fi + +echo "Searching Part-01-03" +search --file --set rootP3 /EFI/Part-01-03/Boot/ogloader.efi +if [ "$rootP3" != "" ]; then + set detectado='si' + menuentry "Part-01-03" { + root="$rootP3" + chainloader /EFI/Part-01-03/Boot/ogloader.efi + } +fi + +echo "Searching Microsoft" +search --file --set rootMS /EFI/Microsoft/Boot/bootmgfw.efi +if [ "$rootMS" != "" ]; then + set detectado='si' + menuentry "Microsoft" { + root="$rootMS" + chainloader /EFI/Microsoft/Boot/bootmgfw.efi + } +fi + +echo "Searching Ubuntu" +search --file --set rootUb /EFI/ubuntu/grubx64.efi +if [ "$rootUb" != "" ]; then + set detectado='si' + menuentry "Ubuntu" + root="$rootUb" + chainloader /EFI/ubuntu/grubx64.efi + } +fi + + +# Si no hay ningún sistam operativo muestro mensaje. +if [ $detectado == 'no' ]; then + menuentry "OpenGnsys no ha detectado ningún sistema operativo" { + # para evitar mensajes de error. + set root="(hd0,gpt1)" + } +fi diff --git a/server/tftpboot/grub/grub.cfg b/server/tftpboot/grub/grub.cfg index 53db4d84..56f19639 100644 --- a/server/tftpboot/grub/grub.cfg +++ b/server/tftpboot/grub/grub.cfg @@ -1,2 +1,9 @@ -source "$prefix/$net_default_mac" +# Cargo configuración PC +configfile=$prefix/01-$net_default_mac +source "$configfile" +# Si no existe anterior cargo configuracion por defecto +# Lo compruebo buscando variables más usuales +if [ "$timeout" == "" -a "$default" == "" ]; then + source "$prefix/default" +fi diff --git a/server/tftpboot/grub/templates/00unknown b/server/tftpboot/grub/templates/00unknown new file mode 100644 index 00000000..3352a965 --- /dev/null +++ b/server/tftpboot/grub/templates/00unknown @@ -0,0 +1,30 @@ +##NO-TOCAR-ESTA-LINEA Sin-designar +set default="0" +set timeout="30" + +menuentry 'ogLive' { +set ISODIR=ogLive +linux (tftp)/$ISODIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogtmpfs=15 oglivedir=$ISODIR INFOHOST +initrd (tftp)/$ISODIR/oginitrd.img +boot +} +menuentry 'ReFind' { + root='hd0,gpt1' + chainloader /EFI/refind/shimx64.efi + boot +} +menuentry 'Part-01-02' { + root='hd0,gpt1' + chainloader /EFI/Part-01-02/Boot/ogloader.efi + boot +} +menuentry 'Windows' { + root='hd0,gpt1' + chainloader /EFI/Microsoft/Boot/bootmgfw.efi + boot +} +menuentry 'Ubuntu' { + root='hd0,gpt1' + chainloader /EFI/ubuntu/grubx64.efi + boot +} diff --git a/server/tftpboot/grub/templates/10 b/server/tftpboot/grub/templates/10 new file mode 100644 index 00000000..82c44464 --- /dev/null +++ b/server/tftpboot/grub/templates/10 @@ -0,0 +1,6 @@ +##NO-TOCAR-ESTA-LINEA 1hd +echo "rEFInd" + +root='hd0,gpt1' +chainloader /EFI/refind/shimx64.efi.signed +boot diff --git a/server/tftpboot/grub/templates/11 b/server/tftpboot/grub/templates/11 new file mode 100644 index 00000000..06b34088 --- /dev/null +++ b/server/tftpboot/grub/templates/11 @@ -0,0 +1,4 @@ +##NO-TOCAR-ESTA-LINEA 1hd-1os +root='hd0,gpt1' +chainloader /EFI/Part-01-02/Boot/ogloader.efi +boot diff --git a/server/tftpboot/grub/templates/12 b/server/tftpboot/grub/templates/12 new file mode 100644 index 00000000..6f22fc30 --- /dev/null +++ b/server/tftpboot/grub/templates/12 @@ -0,0 +1,4 @@ +##NO-TOCAR-ESTA-LINEA 1hd-2os +root='hd0,gpt1' +chainloader /EFI/Part-01-03/Boot/ogloader.efi +boot diff --git a/server/tftpboot/grub/templates/19pxeADMIN b/server/tftpboot/grub/templates/19pxeADMIN new file mode 100644 index 00000000..211a543b --- /dev/null +++ b/server/tftpboot/grub/templates/19pxeADMIN @@ -0,0 +1,22 @@ +##NO-TOCAR-ESTA-LINEA ogLiveAdmin +set timeout=0 +set timeout_style=hidden + +set ISODIR=ogLive +set default=0; + +echo "OgLive $ISODIR" +menuentry "OgLive $ISODIR" { + # Si no existe el ogLive de ISODIR en la red, inicio ogLive por defecto + for DIR in $ISODIR ogLive; do + if linux (tftp)/$DIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogtmpfs=15 oglivedir=$ISODIR INFOHOST ; then + set DIR=$DIR + break + else + echo "OgLive default" + fi + done + + initrd (tftp)/$DIR/oginitrd.img + boot +} diff --git a/server/tftpboot/grub/templates/21UEFIpxe b/server/tftpboot/grub/templates/21UEFIpxe deleted file mode 100644 index 7892a495..00000000 --- a/server/tftpboot/grub/templates/21UEFIpxe +++ /dev/null @@ -1,7 +0,0 @@ -##NO-TOCAR-ESTA-LINEA UEFI-pxe -set ISODIR=ogLive -linux (tftp)/$ISODIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogtmpfs=15 oglivedir=$ISODIR INFOHOST -initrd (tftp)/$OGLIVE/oginitrd.img -boot - - diff --git a/server/tftpboot/grub/templates/pxe b/server/tftpboot/grub/templates/pxe new file mode 100644 index 00000000..1a67fc25 --- /dev/null +++ b/server/tftpboot/grub/templates/pxe @@ -0,0 +1,37 @@ +##NO-TOCAR-ESTA-LINEA ogLive +set timeout=0 +set timeout_style=hidden + +set ISODIR=ogLive + +# Si existe ogLive en CACHE lo inicio, si no el de la red +set root='' +echo "OgLive CACHE" +search --file --set root /boot/$ISODIR/ogvmlinuz +if [ "$root" == "" ]; then + echo "OgLive $ISODIR" + set default=1; +else + set default=0; +fi + +menuentry "OgLive CACHE" { + linux /boot/$ISODIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogupdateinitrd=true ogtmpfs=15 oglivedir=$ISODIR INFOHOST + initrd /boot/$ISODIR/oginitrd.img + boot +} + +menuentry "OgLive $ISODIR" { + # Si no existe el ogLive de ISODIR en la red, inicio ogLive por defecto + for DIR in $ISODIR ogLive; do + if linux (tftp)/$DIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogtmpfs=15 oglivedir=$ISODIR INFOHOST ; then + set DIR=$DIR + break + else + echo "OgLive default" + fi + done + + initrd (tftp)/$DIR/oginitrd.img + boot +} diff --git a/server/tftpboot/menu.lst/templates/01 b/server/tftpboot/menu.lst/templates/10 index db7a3ee7..96d0f500 100644 --- a/server/tftpboot/menu.lst/templates/01 +++ b/server/tftpboot/menu.lst/templates/10 @@ -1,4 +1,4 @@ -##NO-TOCAR-ESTA-LINEA MBR +##NO-TOCAR-ESTA-LINEA 1hd timeout 1 title MBR chainloader (hd0)+1 diff --git a/server/tftpboot/menu.lst/templates/11 b/server/tftpboot/menu.lst/templates/11 index 6ff6b10b..c1492b57 100644 --- a/server/tftpboot/menu.lst/templates/11 +++ b/server/tftpboot/menu.lst/templates/11 @@ -1,6 +1,6 @@ -##NO-TOCAR-ESTA-LINEA 1hd-1partition +##NO-TOCAR-ESTA-LINEA 1hd-1os timeout 1 -title FirstHardDisk-FirstPartition +title FirstDisk-FirstOperatingSystem root (hd0,0) chainloader (hd0,0)+1 boot diff --git a/server/tftpboot/menu.lst/templates/12 b/server/tftpboot/menu.lst/templates/12 index 0843c3b1..0db966b7 100644 --- a/server/tftpboot/menu.lst/templates/12 +++ b/server/tftpboot/menu.lst/templates/12 @@ -1,6 +1,6 @@ -##NO-TOCAR-ESTA-LINEA 1hd-2partition +##NO-TOCAR-ESTA-LINEA 1hd-2os timeout 1 -title FirstHardDisk-SecondPartition +title FirstHardDisk-SecondOperatingSystem root (hd0,1) chainloader (hd0,1)+1 boot |