Wie kann ich Kerberos 5-Konfigurationsdateien mit Perl bearbeiten?
-
03-07-2019 - |
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.
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 = {“).