zephir.prelude_options

Package zephir :: Module prelude_options |
[frames] | no frames]

# Source Code for Module zephir.prelude_options

     1  # -*- coding: UTF-8 -*-
     2  ###########################################################################
     3  # Eole NG - 2007
     4  # Copyright Pole de Competence Eole  (Ministere Education - Academie Dijon)
     5  # Licence CeCill  cf /root/LicenceEole.txt
     6  # eole@ac-dijon.fr
     7  #
     8  # prelude_options.py
     9  #
    10  # options pour l'enregistrement des sondes prelude
    11  #
    12  # les options sont stockées dans un dictionnaire de la forme:
    13  #
    14  #       {<nom_sonde>: [uid, gid, services]}
    15  #
    16  #   uid/gid : utilisateur à utiliser à l'appel de add-user
    17  #   services : liste des services à relancer après enregistrement
    18  #
    19  # Les options snt chargées depuis des fichiers de type .ini
    20  #
    21  # par défaut : /usr/share/zephir/zephir_conf/prelude_eole.ini
    22  # si d'autres fichiers de ce type sont présents dans le répertoire,
    23  # ils seront lus aussi. ordre de priorité des fichiers (croissant):
    24  # - prelude_eole.ini (installé par défaut)
    25  # - prelude_acad.ini (si présent)
    26  # - autres fichiers du type prelude_XXXX.ini
    27  #   (ordre de chargement déterminé par le nom de fichier,
    28  #   le dernier chargé est prioritaire)
    29
    30  from glob import glob
    31  from ConfigParser import ConfigParser
    32  import os
    33
    34  DEFAULT_UID = 'root'
    35  DEFAULT_GID = 'root'
    36  DEFAULT_PERMS = 'idmef:w admin:r'
    37
    38 -def get_conf_files(zephir_dir):
    39      """détermine les fichiers à charger et l'ordre de prise en compte"""
    40      conf_files = []
    41      fics = glob(os.path.join(zephir_dir, 'zephir_conf', 'prelude_*.ini'))
    42      fics.sort()
    43      for std_f in ('eole', 'acad'):
    44          std_file = os.path.join(zephir_dir, 'zephir_conf', 'prelude_%s.ini' % std_f)
    45          if std_file in fics:
    46              conf_files.append(std_file)
    47              fics.remove(std_file)
    48      # on ajoute les éventuels fichiers restants
    49      conf_files.extend(fics)
    50      return conf_files
    51
    52 -def get_options(zephir_dir):
    53      """création de la liste des fichiers de définition"""
    54      conf_files = get_conf_files(zephir_dir)
    55      # calcul du dictionnaire des options
    56      options = {}
    57
    58      for conf_file in conf_files:
    59          conf_p = ConfigParser()
    60          conf_p.read(conf_file)
    61          for sonde in conf_p.sections():
    62              perms = uid = gid = services = None
    63              # vérification des options déjà chargées
    64              if sonde in options:
    65                  uid, gid, services = options[sonde]
    66              if conf_p.has_option(sonde, 'permissions'):
    67                  perms = conf_p.get(sonde, 'permissions')
    68              else:
    69                  perms = perms or DEFAULT_PERMS
    70              if conf_p.has_option(sonde, 'uid'):
    71                  uid = conf_p.get(sonde, 'uid')
    72              else:
    73                  uid = uid or DEFAULT_UID
    74              if conf_p.has_option(sonde, 'gid'):
    75                  gid = conf_p.get(sonde, 'gid')
    76              else:
    77                  gid = gid or DEFAULT_GID
    78              if conf_p.has_option(sonde, 'services'):
    79                  services = conf_p.get(sonde, 'services').split(',')
    80              else:
    81                  services = services or [sonde]
    82              # prise en compte des options pour cette sonde (écrase si déjà présent)
    83              options[sonde] = [perms, uid, gid, services]
    84      return options
    85