Frage

Hat über ein Perl-Modul jemand kommen, der wird analysiert (und schreiben) kerberos Konfigurationsdateien (dh /etc/krb5.conf)? Ich habe schon ein paar Parsing Module sah aus wie Config :: General , Config :: Auto , etc., aber keine scheinen verschachtelte Strukturen wie folgt zu handhaben zu können, :

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

Es muss auch INI Stil Abschnitte, zum Beispiel behandeln:

[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
 }

Weitere Details über das Format finden Sie unter krb5 conf Dokumentation zu finden

ich an dem Punkt bin mein eigener Parser zu schreiben, aber ich möchte lieber nicht zu tun haben, wenn jemand anderes ein schönes, elegantes Modul bereits geschrieben hat.

War es hilfreich?

Lösung

Ich denke, wenn es etwa 10 Minuten in Anspruch nimmt, einen Parser zu schreiben, ist es wahrscheinlich nicht so interessant ist es ein Modul zu machen. Hier ist ein Stück Code, das wahrscheinlich macht den Job (Disclaimer: Ich weiß nichts über das Config-Format für Kerberos, wird der Code auf dem, was Sie hier gepostet).

#!/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 = $_;
    foreach (keys %{$conf{$section}}) {
        print "$section:$_:$conf{$section}{$_}\n";
    }
}

EDIT: das INI-Format Parsing ist auch nicht schwierig. Sie müssen nur ein paar mehr, wenn die in der while-Schleife hinzuzufügen, und die Datenstruktur% conf etwas komplizierter zu machen. Anstelle eines Hash-Hash, werden Sie einen Hash Hash Hash benötigen, wobei die erste Ebene Schlüssel ist das Schlüsselwort in [...] und die zweite Ebene ist das, was ich hier geschrieben (für „pam = {“).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top