Project

General

Profile

Anomalie #8469

Mauvaise gestion des doublons par groupe de conteneurs

Added by Joël Cuissinat about 6 years ago. Updated about 6 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Category:
-
Start date:
06/26/2014
Due date:
07/04/2014
% Done:

100%

Estimated time:
1.50 h
Spent time:
Distribution:
EOLE 2.4

Description

Avec l'anti-virus activé sur le proxy et désactivé sur le mail (cf. configuration jointe), le service est en erreur dans diagnose :

 .                  Anti-virus => Erreur

Le service affiche l'erreur suivante :

root@amon:~# service clamav-daemon start
 * Starting ClamAV daemon clamd 
ERROR: Can't open /var/log/clamav/clamav.log in append mode (check permissions!).
ERROR: Can't initialize the internal logger
[fail]

amon24.eol (1.63 KB) Joël Cuissinat, 06/26/2014 10:23 AM


Related issues

Related to python-pyeole - Anomalie #8403: startlevel et stoplevel ne fonctionne pas Fermé 06/30/2014 07/04/2014
Related to creole - Evolution #5740: Permettre d’obtenir toutes les informations utiles à un conteneur ou groupe de conteneur Fermé 07/10/2013

Associated revisions

Revision a213d5bd (diff)
Added by Daniel Dehennin about 6 years ago

Fusion des ressources par groupe de conteneurs

L’inventaires des ressources par groupe de conteneur ne prend en compte
que la première occurrence d’une ressource, identifié par l’attribut
« name ».

Si la première occurrence est désactivée et que la seconde est activé,
alors la ressource est considérée comme désactivée.

Au lieu de supprimer les doublons, il faut les fusionner.

  • creole/client.py (_merge_entries): Fusionne les dictionnaires de
    ressources en gérant les attributs par type.
    (_merge_duplicates_in_components): Nouveau nom de
    « _remove_duplicates_in_components() ».
    Stocke la première occurrence d’une ressource et merge toutes les
    occurrences suivantes si elles sont actives.
    (CreoleClient.get_containers_components): Utilise le nouveau nom
    « _merge_duplicates_in_components() ».

Fixes: #8469 @1h30m

History

#1 Updated by Daniel Dehennin about 6 years ago

Le fichier /etc/clamav/clamd.conf est conditionné de la façon suivante :

  • dans le proxy, si activer_clam est à oui, alors le fichier est templatisé
  • dans le mail, si exim_clamav est à oui, alors le fichier est templatisé

Le soucis c’est :

  • CreoleGet activer_clam => oui
  • CreoleGet exim_clamav => non
(Pdb) pp [ f for f in group['files'] if f['name'].endswith('clamd.conf') ]
[{u'container': u'mail',
  u'container_group': u'mail',
  u'filelist': u'clamav_mail',
  u'full_name': u'/etc/clamav/clamd.conf',
  u'level': u'module',
  u'mkdir': False,
  u'name': u'/etc/clamav/clamd.conf',
  u'real_container': u'root',
  u'rm': False,
  u'source': u'/var/lib/creole/clamd.conf'}]

Il manque la clef activate à True.

On voit que la gestion des doublons ne retient que la déclaration du conteneur mail.

#2 Updated by Emmanuel GARETTE about 6 years ago

Il faut remplacer les "hidden_if_in" par des "hidden_if_not_in".

#3 Updated by Emmanuel GARETTE about 6 years ago

  • Distribution changed from EOLE 2.3 to EOLE 2.4

#4 Updated by Daniel Dehennin about 6 years ago

Emmanuel GARETTE a écrit :

Il faut remplacer les "hidden_if_in" par des "hidden_if_not_in".

Ça n’a pas l’air de fonctionner :

root@amon:~# grep 'disable.*activer_clam' /usr/share/eole/creole/dicos/*
/usr/share/eole/creole/dicos/20_antivirus.xml:        <condition name='disabled_if_not_in' source='activer_clam'>
/usr/share/eole/creole/dicos/23_proxy.xml:        <condition name='disabled_if_not_in' source='activer_clam'>
/usr/share/eole/creole/dicos/26_mail.xml:        <condition name='disabled_if_not_in' source='activer_clam' fallback='True'>
>>> from creole.loader import creole_loader
>>> conf = creole_loader()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/creole/loader.py", line 286, in creole_loader
    loader.read_dir(dirs, namespace)
  File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 947, in read_dir
    self._gen_descr(namespace)
  File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 1370, in _gen_descr
    containers = self.gen_container(paths, namespace='containers')
  File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 407, in gen_container
    ret.append(getattr(self, func_name)(paths))
  File "/usr/lib/python2.7/dist-packages/creole/loader.py", line 189, in gen_files
    requires_key='activate')
  File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 386, in _gen_tiramisu_config
    requires=requires, properties=properties))
  File "/usr/lib/python2.7/dist-packages/tiramisu/option.py", line 297, in __init__
    super(Option, self).__init__(name, doc, requires, properties)
  File "/usr/lib/python2.7/dist-packages/tiramisu/option.py", line 71, in __init__
    requires, self._name)
  File "/usr/lib/python2.7/dist-packages/tiramisu/option.py", line 1500, in validate_requires_arg
    " action: {1}").format(name, action))
ValueError: incohérence dans les types action pour l'option : activate action disabled

#5 Updated by Daniel Dehennin about 6 years ago

Peut importe le sens du test.

Même sans supprimer les doublons :

>>> from creole.client import CreoleClient; c = CreoleClient()
>>> import pprint; pp = pprint.PrettyPrinter(indent=4)
>>> files_dict = c.get('/containers/files')
>>> files = c.to_list_of_dict(files_dict, 'files')
>>> pp.pprint([ f for f in files if f['name'].endswith('clamd.conf') ])
[   {   u'container': u'proxy',
        u'container_group': u'internet',
        u'filelist': u'clamav_proxy',
        u'full_name': u'/etc/clamav/clamd.conf',
        u'level': u'module',
        u'mkdir': False,
        u'name': u'/etc/clamav/clamd.conf',
        u'real_container': u'root',
        u'rm': False,
        u'source': u'/var/lib/creole/clamd.conf'},
    {   u'container': u'mail',
        u'container_group': u'mail',
        u'filelist': u'clamav_mail',
        u'full_name': u'/etc/clamav/clamd.conf',
        u'level': u'module',
        u'mkdir': False,
        u'name': u'/etc/clamav/clamd.conf',
        u'real_container': u'root',
        u'rm': False,
        u'source': u'/var/lib/creole/clamd.conf'}]

Il doit y a un soucis avec les conditions car le fichier n’est actif pour le compte d’aucun des conteneurs.

#6 Updated by Daniel Dehennin about 6 years ago

Daniel Dehennin a écrit :

Peut importe le sens du test.

Même sans supprimer les doublons :

[...]

Il doit y a un soucis avec les conditions car le fichier n’est actif pour le compte d’aucun des conteneurs.

Sur un amon2.4 non trafiqué j’obtiens :

[   {   u'activate': True,
        u'container': u'proxy',
        u'container_group': u'internet',
        u'filelist': u'clamav_proxy',
        u'full_name': u'/etc/clamav/clamd.conf',
        u'level': u'module',
        u'mkdir': False,
        u'name': u'/etc/clamav/clamd.conf',
        u'real_container': u'root',
        u'rm': False,
        u'source': u'/var/lib/creole/clamd.conf'},
    {   u'container': u'mail',
        u'container_group': u'mail',
        u'filelist': u'clamav_mail',
        u'full_name': u'/etc/clamav/clamd.conf',
        u'level': u'module',
        u'mkdir': False,
        u'name': u'/etc/clamav/clamd.conf',
        u'real_container': u'root',
        u'rm': False,
        u'source': u'/var/lib/creole/clamd.conf'}]

En revanche:

>>> from creole.client import CreoleClient; c = CreoleClient()
>>> import pprint; pp = pprint.PrettyPrinter(indent=4)
>>> root_infos = c.get_group_infos('root')
>>> pp.pprint([ f for f in root_infos['files'] if f['name'].endswith('clamd.conf') ])
[   {   u'container': u'mail',
        u'container_group': u'mail',
        u'filelist': u'clamav_mail',
        u'full_name': u'/etc/clamav/clamd.conf',
        u'level': u'module',
        u'mkdir': False,
        u'name': u'/etc/clamav/clamd.conf',
        u'real_container': u'root',
        u'rm': False,
        u'source': u'/var/lib/creole/clamd.conf'}]

Il y a donc bien un soucis avec la gestion des doublons (creole:source:creole/client.py@64e4b21#L90)

Il faudrait renommer cette fonction en quelque chose comme _merge_entries() et gérer la fusion comme dans #8403.

#7 Updated by Daniel Dehennin about 6 years ago

  • Project changed from eole-antivirus to creole
  • Start date set to 06/26/2014

C’est un problème creole.

#8 Updated by Daniel Dehennin about 6 years ago

  • Subject changed from clamav-daemon non fonctionnel sur Amon to Mauvaise gestion des doublons par groupe de conteneurs
  • Description updated (diff)
  • Status changed from A étudier to Accepté
  • Assigned To set to Daniel Dehennin

#9 Updated by Daniel Dehennin about 6 years ago

  • Status changed from Accepté to Résolu
  • % Done changed from 0 to 100

#10 Updated by Joël Cuissinat about 6 years ago

  • Status changed from Résolu to Fermé

Service OK avec le fichier de configuration fourni.

Also available in: Atom PDF