Example #1
0
def CheckConfigBackendReturnTypes():
    option = None
    success = True

    try:
        option = "config_file"
        getFile()
        option = "ip"
        getIP()
        option = "port"
        getPort()
        option = "logfile"
        getLogfile()
        option = "loglevel"
        getLoglevel()
        option = "user"
        getUser()
        option = "group"
        getGroup()
        option = "scriptname"
        getScriptname()
        option = "checkMimeTypes"
        getCheckMimeTypes()
        option = "allowedMimeTypes"
        getAllowedMimeTypes()
        option = "script_stdout"
        getScriptStdout()
        option = "script_stderr"
        getScriptStderr()
        option = "encryption"
        getEncryption()
        option = "runScriptWithSudo"
        getRunScriptWithSudo()
        option = "debug"
        getDebug()

        success = True

    except error.ConfigBackendReturnTypeError as e:
        log.writeLogLV(
            config_backend.getLogfile(),
            "Return-Type-Error in Config-Backend's option '%s' (is: %s, expected: %s)\n"
            % (option, e.getWrongType(), e.getRightType()),
            log.LOGLEVEL["warning"],
        )
        success = False
    except error.ConfigBackendReturnValueError as e:
        log.writeLogLV(
            config_backend.getLogfile(),
            "Return-Value-Error in Config-Backend's option '%s' (is: %s, expected: %s)\n"
            % (option, e.getWrongValue(), e.getRightValue()),
            log.LOGLEVEL["warning"],
        )
        success = False

    return success
Example #2
0
File: lcm.py Project: we-mi/lcm
def openSocket():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        if config_backend.getEncryption() is None:
            s.connect((config_backend.getIP(), config_backend.getPort()))
            return s
        else:
            ssl_sock = ssl.wrap_socket(s)
            ssl_sock.connect((config_backend.getIP(), config_backend.getPort()))
            return ssl_sock
    except Exception as e:
        log.writeLogLV(config_backend.getLogfile(),
                        "Konnte keine Verbindung zum Server aufbauen (%s:%s). Fehler: %s\n" %
                            (config_backend.getIP(), config_backend.getPort(), e.args),
                        log.LOGLEVEL["fatal"])
        if config_backend.getDebug():
            print traceback.print_exc()
        exit(1)
Example #3
0
def checkPermissions():
    """ Modulinterne Berechtigungsprüfung, die nur von der Data-Backend-
        Zwischenschicht aufgerufen werden sollte.
        Diese Funktion dient zur Überprüfung der Berechtigungen der Dateien, die
        dieses Data-Backend-Modul benutzt. Alle anderen Integritätsprüfungen
        werden von der Zwischenschicht erledigt.
    """
    try:
        file = open(FILENAME_CLIENTS, "a")
        file.close()
    except:
        log.writeLogLV(config_backend.getLogfile(),
                       "Data-Backend-File-Modul: Die Client-Datei kann nicht zum Schreiben geöffnet werden\n",
                       log.LOGLEVEL['warning'])

    try:
        file = open(FILENAME_GROUPS, "a")
        file.close()
    except:
        log.writeLogLV(config_backend.getLogfile(),
                       "Data-Backend-File-Modul: Die Gruppen-Datei kann nicht zum Schreiben geöffnet werden\n",
                       log.LOGLEVEL['warning'])

    try:
        file = open(FILENAME_SCRIPTS, "a")
        file.close()
    except:
        log.writeLogLV(config_backend.getLogfile(),
                       "Data-Backend-File-Modul: Die Skript-Datei kann nicht zum Schreiben geöffnet werden\n",
                       log.LOGLEVEL['warning'])
Example #4
0
def loadDataBackend(backendName):
    """ Beschreibung: Lädt ein Data-Backend-Modul. Prüft vorher, ob das Modul
                        auch verwendet werden kann.
        Parameter: (string)backendName: Pfad zum Data-Backend-Modul im Python "Import"-Stil. 
                    Das Modul muss mindestens im gleichen Ordner sein, wie das Programm,
                    das das Modul lädt, oder aber in einem Unterordner.
        Rückgabewert: Verweis auf das Data-Backend-Modul
        Exceptions: Wirft selbst keine
    """
    try:
        return checkDataBackend(backendName)
    except ImportError as e:
        log.writeLogLV(config_backend.getLogfile(),
                "Konnte das Modul '%s' nicht importieren. Originale Fehlermeldung: %s" % (backendName, e.args),
                log.LOGLEVEL["fatal"])
    except AttributeError as e:
        log.writeLogLV(config_backend.getLogfile(),
                "Eine benötigte Funktion ist im Modul '%s' nicht vorhanden. Originale Fehlermeldung: %s\n" % (backendName, e.args),
                log.LOGLEVEL["fatal"])
    except Exception as e:
        log.writeLogLV(config_backend.getLogfile(),
               "Unbekannter Fehler im Modul '%s'. Originale Fehlermeldung: %s" % (backendName, e.args),
                log.LOGLEVEL["fatal"])
        if config_backend.getDebug():
            print traceback.print_exc()
        print 
Example #5
0
File: lcmd.py Project: we-mi/lcm
    config_backend.setMaxQueue(cmd_max_queue)
if not cmd_skip_integrity_test is None:
    config_backend.setSkipIntegrityTest(cmd_skip_integrity_test)
if not cmd_debug is None:
    config_backend.setDebug(cmd_debug)
if not cmd_interface is None:
    config_backend.setIP(cmd_interface)
if not cmd_port is None:
    config_backend.setPort(cmd_port)
if not cmd_verbosity is 0:
    config_backend.setLoglevel(str(config_backend.getLoglevel() + cmd_verbosity))

# Prüfe, ob im Config-Backend auch gültige Werte gespeichert sind
if config_backend.checkConfigBackend():
    log.writeLogLV(config_backend.getLogfile(),
                   "Config-Backend erfolgreich geladen (Modul: %s)\n" %
                       config_backend.getServerConfigBackend(),
                   log.LOGLEVEL["info"])
else:
    log.writeLogBuffer("Es wurden Fehler im Serverconfig-Backend-Modul gefunden (Modul: %s)\n" %
                       config_backend.getServerConfigBackend(),
                   log.LOGLEVEL["error"])
    sys.exit(1)

# Schreibe Logs aus dem temporären Logfile in das Logfile, das im Config-Backend eingetragen ist
log.writeLogBufferToFile(config_backend.getLogfile())

# zeige einen Config-Dump an (nur bei loglovel: debug)
log.writeLogLV(config_backend.getLogfile(), "%s" % config_backend.printConfig(), log.LOGLEVEL["debug"])

# Bevor der User und die Gruppe umgeschaltet werden, müssen die Berechtigungen der 
# Logdatei umgestellt werden damit der neue Benutzer darin auch schreiben darf.
Example #6
0
File: lcm.py Project: we-mi/lcm
    config_backend.setUser(cmd_user)
if not cmd_group is None:
    config_backend.setGroup(cmd_group)
if not cmd_debug is None:
    config_backend.setDebug(cmd_debug)
if not cmd_interface is None:
    config_backend.setIP(cmd_interface)
if not cmd_port is None:
    config_backend.setPort(cmd_port)
if not cmd_verbosity is 0:
    config_backend.setLoglevel(str(config_backend.getLoglevel() + cmd_verbosity))

# Prüfe, ob im Config-Backend auch gültige Werte gespeichert sind
if config_backend.CheckConfigBackendReturnTypes():
    log.writeLogLV(config_backend.getLogfile(),
                   "Config-Backend erfolgreich geladen (Modul: %s)\n" %
                       config_backend.getConfigBackend(),
                   log.LOGLEVEL["info"])
else:
    log.writeLogBuffer("Es wurden Fehler im Config-Backend-Modul gefunden (Modul: %s)\n" %
                       config_backend.getConfigBackend(),
                   log.LOGLEVEL["error"])
    sys.exit(1)

# Schreibe Logs aus dem temporären Logfile in das Logfile, das im Config-Backend eingetragen ist
log.writeLogBufferToFile(config_backend.getLogfile())

# zeige einen Config-Dump an (nur bei loglovel: debug)
log.writeLogLV(config_backend.getLogfile(), "%s" % config_backend.config_backend.printConfig(), log.LOGLEVEL["debug"])

# Bevor der User und die Gruppe umgeschaltet werden, müssen die Berechtigungen der 
#Logdatei umgestellt werden damit der neue Benutzer darin auch schreiben darf.
Example #7
0
def checkDataIntegrity():
    """ Beschreibung: Prüft, ob alle Daten im DataBackend korrekt sind (z.B.
                      ob die Clients, die einer Gruppe zugewiesen sind überhaupt
                      existieren, etc)
        Parameter: keine
        Rückgabewerte: Keiner (es gibt nur Warnungen aus)
        Exceptions: <TODO>
    """
    
    # Rufe die modulinterne Prüfung auf (prüfen der Berechtigungen, etc.)
    data_backend.checkPermissions()
    
    clientnames = data_backend.getClientNames()
    groupnames = data_backend.getGroupNames()
    scriptnames = data_backend.getScriptNames()
    
    # überprüfe Clients
    # Später soll hier auch noch geprüft werden, ob z.B. der DNS-Name aufgelöst werden kann, etc.
    errorcode, allClients = data_backend.getClientsFull()
    if errorcode is 0:
        for client in allClients:
            try:
                # Prüfe, ob alle benötigten Optionen existieren
                if not 'created-on' in client:
                    log.writeLogLV(config_backend.getLogfile(),
                                   "Client '%s': Benötigte Option ('created-on') nicht gefunden\n" % (client['name']),
                                   log.LOGLEVEL["warning"])
                if not 'last-seen' in client:
                    log.writeLogLV(config_backend.getLogfile(),
                                   "Client '%s': Benötigte Option ('last-seen') nicht gefunden\n" % (client['name']),
                                   log.LOGLEVEL["warning"])
                    
                # Prüfe, ob die zugewiesenen Skripte existieren
                if 'scriptmember' in client:
                    for script in ast.literal_eval(client['scriptmember']):
                        if not script in scriptnames:
                            log.writeLogLV(config_backend.getLogfile(),
                                   "Client '%s': Zugewiesenes Skript (%s) nicht gefunden\n" % (client['name'], script),
                                   log.LOGLEVEL["warning"])
            except Exception as e:
                log.writeLogLV(config_backend.getLogfile(),
                                   "Client '%s': Überspringe die Prüfung, da ein Fehler aufgetreten ist (%s)\n" % (client['name'], e),
                                   log.LOGLEVEL["warning"])
                if config_backend.getDebug():
                    print traceback.print_exc()

    # überprüfe Gruppen
    errorcode, allGroups = data_backend.getGroupsFull()
    if errorcode is 0:
        for group in allGroups:
            try:
                # Prüfe, ob alle benötigten Optionen existieren
                if not 'parent' in group:
                    log.writeLogLV(config_backend.getLogfile(),
                                   "Gruppe '%s': Benötigte Option ('parent') nicht gefunden\n" % (group['name']),
                                   log.LOGLEVEL["warning"])

                # Prüfe, ob die Parent-Gruppe existiert
                elif not group['parent'] in groupnames:
                    log.writeLogLV(config_backend.getLogfile(),
                                   "Gruppe '%s': Parent-Gruppe (%s) nicht gefunden\n" % (group['name'], group['parent']),
                                   log.LOGLEVEL["warning"])
                if 'member' in group:
                    for client in ast.literal_eval(group['member']):
                        if not client in clientnames:
                            log.writeLogLV(config_backend.getLogfile(),
                                   "Gruppe '%s': Zugewiesener Client (%s) nicht gefunden\n" % (group['name'], client),
                                   log.LOGLEVEL["warning"])
                if 'scriptmember' in group:
                    for script in ast.literal_eval(group['scriptmember']):
                        if not script in scriptnames:
                            log.writeLogLV(config_backend.getLogfile(),
                                   "Gruppe '%s': Zugewiesenes Script (%s) nicht gefunden\n" % (group['name'], script),
                                   log.LOGLEVEL["warning"])
            except Exception as e:
                log.writeLogLV(config_backend.getLogfile(),
                                   "Gruppe '%s': Überspringe die Prüfung, da ein Fehler aufgetreten ist (%s)\n" % (group['name'], e),
                                   log.LOGLEVEL["warning"])
                if config_backend.getDebug():
                    print traceback.print_exc()
    
    # überprüfe Skripte
    errorcode, allScripts = data_backend.getScriptsFull()
    if errorcode is 0:
        for script in allScripts:
            try:
                # Prüfe, ob alle benötigten Optionen existieren
                if not 'path' in script:
                    log.writeLogLV(config_backend.getLogfile(),
                                   "Script '%s': Benötigte Option ('path') nicht gefunden\n" % (script['name']),
                                   log.LOGLEVEL["warning"])
                # Prüfe, ob das Skript im Dateisystem existiert
                elif not core.doesFileExist(script['path']):
                    log.writeLogLV(config_backend.getLogfile(),
                                   "Script '%s': Datei (%s) im Dateisystem nicht gefunden\n" % (script['name'], script['path']),
                                   log.LOGLEVEL["warning"])
                    
                elif not 'md5' in script:
                    log.writeLogLV(config_backend.getLogfile(),
                                   "Script '%s': Benötigte Option ('md5') nicht gefunden\n" % (script['name']),
                                   log.LOGLEVEL["warning"])
                elif not script['md5'] == core.getMD5(script['path']):
                    log.writeLogLV(config_backend.getLogfile(),
                           "Script '%s': MD5-Summe (%s) stimmt nicht mit der Datei im Dateisystem (%s) überein\n" % 
                                (script['name'], script['md5'], core.getMD5(script['path'])),
                           log.LOGLEVEL["warning"])
            except Exception as e:
                log.writeLogLV(config_backend.getLogfile(),
                                   "Script '%s': Überspringe die Prüfung, da ein Fehler aufgetreten ist (%s)\n" % (script['name'], e),
                                   log.LOGLEVEL["warning"])
                if config_backend.getDebug():
                    print traceback.print_exc()