136 lines
		
	
	
		
			No EOL
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			No EOL
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import configparser, re
 | 
						|
from linuxmusterLinuxclient7 import logging, constants
 | 
						|
 | 
						|
def network():
 | 
						|
    """
 | 
						|
    Get the network configuration in `/etc/linuxmuster-linuxclient7/network.conf`
 | 
						|
 | 
						|
    :return: Tuple (success, dict of keys)
 | 
						|
    :rtype: tuple
 | 
						|
    """
 | 
						|
    rc, rawNetworkConfig = _readNetworkConfig()
 | 
						|
    if not rc:
 | 
						|
        return False, None
 | 
						|
 | 
						|
    if not _checkNetworkConfigVersion(rawNetworkConfig)[0]:
 | 
						|
        return False, None
 | 
						|
 | 
						|
    networkConfig = {}
 | 
						|
 | 
						|
    try:
 | 
						|
        networkConfig["serverHostname"] = rawNetworkConfig["serverHostname"]
 | 
						|
        networkConfig["domain"] = rawNetworkConfig["domain"]
 | 
						|
        networkConfig["realm"] = rawNetworkConfig["realm"]
 | 
						|
    except KeyError as e:
 | 
						|
        logging.error("Error when reading network.conf (2)")
 | 
						|
        logging.exception(e)
 | 
						|
        return False, None
 | 
						|
 | 
						|
    return True, networkConfig
 | 
						|
 | 
						|
def writeNetworkConfig(newNetworkConfig):
 | 
						|
    """
 | 
						|
    Write the network configuration in `/etc/linuxmuster-linuxclient7/network.conf`
 | 
						|
 | 
						|
    :param newNetworkConfig: The new config
 | 
						|
    :type newNetworkConfig: dict
 | 
						|
    :return: True or False
 | 
						|
    :rtype: bool
 | 
						|
    """
 | 
						|
    networkConfig = configparser.ConfigParser(interpolation=None)
 | 
						|
 | 
						|
    try:
 | 
						|
        networkConfig["network"] = {}
 | 
						|
        networkConfig["network"]["version"] = str(_networkConfigVersion())
 | 
						|
        networkConfig["network"]["serverHostname"] = newNetworkConfig["serverHostname"]
 | 
						|
        networkConfig["network"]["domain"] = newNetworkConfig["domain"]
 | 
						|
        networkConfig["network"]["realm"] = newNetworkConfig["realm"]
 | 
						|
    except Exception as e:
 | 
						|
        logging.error("Error when preprocessing new network configuration!")
 | 
						|
        logging.exception(e)
 | 
						|
        return False
 | 
						|
 | 
						|
    try:
 | 
						|
        logging.info("Writing new network Configuration")
 | 
						|
        with open(constants.networkConfigFilePath, 'w') as networkConfigFile:
 | 
						|
            networkConfig.write(networkConfigFile)
 | 
						|
 | 
						|
    except Exception as e:
 | 
						|
        logging.error("Failed!")
 | 
						|
        logging.exception(e)
 | 
						|
        return False
 | 
						|
 | 
						|
    return True
 | 
						|
 | 
						|
def upgrade():
 | 
						|
    """
 | 
						|
    Upgrade the format of the network configuration in `/etc/linuxmuster-linuxclient7/network.conf`
 | 
						|
    This is done automatically on package upgrades.
 | 
						|
 | 
						|
    :return: True or False
 | 
						|
    :rtype: bool
 | 
						|
    """
 | 
						|
    return _upgradeNetworkConfig()
 | 
						|
 | 
						|
# --------------------
 | 
						|
# - Helper functions -
 | 
						|
# --------------------
 | 
						|
 | 
						|
def _readNetworkConfig():
 | 
						|
    configParser = configparser.ConfigParser()
 | 
						|
    configParser.read(constants.networkConfigFilePath)
 | 
						|
    try:
 | 
						|
        rawNetworkConfig = configParser["network"]
 | 
						|
        return True, rawNetworkConfig
 | 
						|
    except KeyError as e:
 | 
						|
        logging.error("Error when reading network.conf (1)")
 | 
						|
        logging.exception(e)
 | 
						|
        return False, None
 | 
						|
    return configParser
 | 
						|
 | 
						|
def _networkConfigVersion():
 | 
						|
    return 1
 | 
						|
 | 
						|
def _checkNetworkConfigVersion(rawNetworkConfig):
 | 
						|
    try:
 | 
						|
        networkConfigVersion = int(rawNetworkConfig["version"])
 | 
						|
    except KeyError as e:
 | 
						|
        logging.warning("The network.conf version could not be identified, assuming 0")
 | 
						|
        networkConfigVersion = 0
 | 
						|
 | 
						|
    if networkConfigVersion != _networkConfigVersion():
 | 
						|
        logging.warning("The network.conf Version is a mismatch!")
 | 
						|
        return False, networkConfigVersion
 | 
						|
 | 
						|
    return True, networkConfigVersion
 | 
						|
 | 
						|
def _upgradeNetworkConfig():
 | 
						|
    logging.info("Upgrading network config.")
 | 
						|
    rc, rawNetworkConfig = _readNetworkConfig()
 | 
						|
    if not rc:
 | 
						|
        return False
 | 
						|
 | 
						|
    rc, networkConfigVersion = _checkNetworkConfigVersion(rawNetworkConfig)
 | 
						|
    if rc:
 | 
						|
        logging.info("No need to upgrade, already up-to-date.")
 | 
						|
        return True
 | 
						|
 | 
						|
    logging.info("Upgrading network config from {0} to {1}".format(networkConfigVersion, _networkConfigVersion()))
 | 
						|
    
 | 
						|
    if networkConfigVersion > _networkConfigVersion():
 | 
						|
        logging.error("Cannot upgrade from a newer version to an older one!")
 | 
						|
        return False
 | 
						|
 | 
						|
    try:
 | 
						|
        if networkConfigVersion == 0:
 | 
						|
            newNetworkConfig = {}
 | 
						|
            newNetworkConfig["serverHostname"] = rawNetworkConfig["serverHostname"] + "." + rawNetworkConfig["domain"]
 | 
						|
            newNetworkConfig["domain"] = rawNetworkConfig["domain"]
 | 
						|
            newNetworkConfig["realm"] = rawNetworkConfig["domain"].upper()
 | 
						|
            return writeNetworkConfig(newNetworkConfig)
 | 
						|
    except Exception as e:
 | 
						|
        logging.error("Error when upgrading network config!")
 | 
						|
        logging.exception(e)
 | 
						|
        return False
 | 
						|
 | 
						|
    return True |