Question

Quelqu'un at-il déjà rencontré un module Perl qui analysera (et écrira) les fichiers de configuration de Kerberos ( /etc/krb5.conf )? J'ai consulté plusieurs modules d'analyse tels que Config :: General , Config :: Auto , etc., mais aucun ne semble pouvoir gérer les structures imbriquées comme suit: :

pam = {
  debug = false
  ticket_lifetime = 36000
  renew_lifetime = 36000
  forwardable = true
  krb4_convert = false
}

Il doit également gérer les sections de style INI , par exemple:

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM

[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

Plus de détails sur le format peuvent être trouvés à la documentation sur krb5 conf

Je suis sur le point d'écrire mon propre analyseur, mais je préférerais ne pas le faire si quelqu'un d'autre a déjà écrit un module élégant et élégant.

Était-ce utile?

La solution

Je pense que s’il faut environ 10 minutes pour écrire un analyseur, il n’est probablement pas si intéressant d’en faire un module. Voici un morceau de code qui fait probablement l'affaire (disclaimer: je ne connais rien au format de configuration de Kerberos, le code est basé sur ce que vous avez posté ici).

#!/usr/bin/perl -w
use strict;

my %conf;
my $section;

while (<>) {
    if (/^\s*(\S*)\s*=\s*\{\s*$/) {
        $section = $1;
        $conf{$section} = {};
    } elsif (/^\s*(\S*)\s*=\s*(\S*)\s*$/) {
        my $key = $1;
        my $value = $2;
        if ($section) {
            $conf{$section}{$key}=$value;
        }
    }
}

foreach (keys %conf) {
    $section = 

Je pense que s’il faut environ 10 minutes pour écrire un analyseur, il n’est probablement pas si intéressant d’en faire un module. Voici un morceau de code qui fait probablement l'affaire (disclaimer: je ne connais rien au format de configuration de Kerberos, le code est basé sur ce que vous avez posté ici).

<*>

EDIT: L’analyse du format ini n’est pas difficile non plus. Vous aurez juste besoin d'ajouter un peu plus de if si dans la boucle while et de compliquer légèrement la structure de données% conf. Au lieu d'un hash de hash, vous aurez besoin d'un hash de hash, où la clé de premier niveau est le mot clé en [...], et le deuxième niveau est celui que j'ai écrit ici (pour "pam = {"). )

; foreach (keys %{$conf{$section}}) { print "$section:

Je pense que s’il faut environ 10 minutes pour écrire un analyseur, il n’est probablement pas si intéressant d’en faire un module. Voici un morceau de code qui fait probablement l'affaire (disclaimer: je ne connais rien au format de configuration de Kerberos, le code est basé sur ce que vous avez posté ici).

<*>

EDIT: L’analyse du format ini n’est pas difficile non plus. Vous aurez juste besoin d'ajouter un peu plus de if si dans la boucle while et de compliquer légèrement la structure de données% conf. Au lieu d'un hash de hash, vous aurez besoin d'un hash de hash, où la clé de premier niveau est le mot clé en [...], et le deuxième niveau est celui que j'ai écrit ici (pour "pam = {"). )

:$conf{$section}{

Je pense que s’il faut environ 10 minutes pour écrire un analyseur, il n’est probablement pas si intéressant d’en faire un module. Voici un morceau de code qui fait probablement l'affaire (disclaimer: je ne connais rien au format de configuration de Kerberos, le code est basé sur ce que vous avez posté ici).

<*>

EDIT: L’analyse du format ini n’est pas difficile non plus. Vous aurez juste besoin d'ajouter un peu plus de if si dans la boucle while et de compliquer légèrement la structure de données% conf. Au lieu d'un hash de hash, vous aurez besoin d'un hash de hash, où la clé de premier niveau est le mot clé en [...], et le deuxième niveau est celui que j'ai écrit ici (pour "pam = {"). )

}\n"; } }

EDIT: L’analyse du format ini n’est pas difficile non plus. Vous aurez juste besoin d'ajouter un peu plus de if si dans la boucle while et de compliquer légèrement la structure de données% conf. Au lieu d'un hash de hash, vous aurez besoin d'un hash de hash, où la clé de premier niveau est le mot clé en [...], et le deuxième niveau est celui que j'ai écrit ici (pour "pam = {"). )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top