diff --git a/client/lib/engine/bin/NetLib.py b/client/lib/engine/bin/NetLib.py index 793bf73..866196b 100755 --- a/client/lib/engine/bin/NetLib.py +++ b/client/lib/engine/bin/NetLib.py @@ -2,11 +2,28 @@ import subprocess import sys import os import json +import re import ogGlobals import SystemLib import FileLib +def _ogConnect_options(): + ## the original bash code does: eval $(grep "OPTIONS=" /scripts/ogfunctions) + ## this is highly insecure but we need to keep it for now + opt = subprocess.run (['grep', '-o', 'OPTIONS=.*', '/scripts/ogfunctions'], capture_output=True, text=True).stdout.strip() + exec (opt, globals()) + return OPTIONS + +## defined in /scripts/ogfunctions. We can't tackle that yet. +## this is a quick implementation just to unblock development +def _ogConnect (server, protocol, src, dst, options, readonly): + if 'smb' != protocol: return None ## only supported value right now + write_option = ',ro' if readonly else ',rw' + options += write_option + return not subprocess.run (['mount.cifs', f'//{server}/{src}', dst] + options.split()).returncode + + #/** # ogChangeRepo IPREPO [ OgUnit ] #@brief Cambia el repositorio para el recurso remoto images. @@ -15,57 +32,48 @@ import FileLib #@return Cambio recurso remoto en OGIMG. #*/ def ogChangeRepo(ip_repo, og_unit=None): - ogprotocol = "cifs" + ogprotocol = os.environ['ogprotocol'] or 'smb' + + if og_unit: + SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_GENERIC, 'the og_unit parameter became unsupported') + return None try: - rw_option = ",rw" if "rw" in subprocess.getoutput("mount | grep 'ogimages'") else ",ro" + mount = subprocess.run (['mount'], capture_output=True, text=True).stdout + ro = not not list (filter (lambda line: re.search (r'ogimages.*\bro,', line), mount.splitlines())) current_repo = ogGetRepoIp() - current_og_unit = subprocess.getoutput( - "df | awk -F ' ' '/ogimages/ {sub(\"//.*/ogimages\",\"\",$1); sub(\"/\",\"\",$1); print $1}'" - ).strip() - new_repo = current_repo if ip_repo.upper() == "REPO" else ip_repo - - if new_repo == current_repo and og_unit == current_og_unit: - return 0 + if new_repo == current_repo: return True subprocess.run(["umount", ogGlobals.OGIMG], check=True) - src_img = "ogimages" if not og_unit else f"ogimages/{og_unit}" - - result = subprocess.run( - ["ogConnect", new_repo, ogprotocol, src_img, ogGlobals.OGIMG, rw_option], - text=True, - ) - - if result.returncode != 0: - subprocess.run( - ["ogConnect", current_repo, ogprotocol, src_img, ogGlobals.OGIMG, rw_option], - text=True, - ) + SystemLib.ogEcho (['session', 'log'], 'info', f'{ogGlobals.lang.MSG_HELP_ogChangeRepo} {new_repo}') + options = _ogConnect_options() + if not _ogConnect (new_repo, ogprotocol, 'ogimages', ogGlobals.OGIMG, options, ro): + _ogConnect (current_repo, ogprotocol, 'ogimages', ogGlobals.OGIMG, options, ro) SystemLib.ogRaiseError( "session", ogGlobals.OG_ERR_REPO, f"Error connecting to the new repository: {new_repo}", ) - return 1 + return False SystemLib.ogEcho( - "session", - "log", - f"Repository successfully changed to {new_repo} {og_unit or ''}".strip(), + ["session", "log"], + 'info', + f"Repository successfully changed to {new_repo}".strip(), ) - return 0 + return True except Exception as e: SystemLib.ogRaiseError( "session", - ogGlobals.OG_ERR_FORMAT, + ogGlobals.OG_ERR_GENERIC, f"Error executing ogChangeRepo: {e}", ) - return 1 + return None #/** # ogGetGroupDir [ str_repo ]