Comment puis-je modifier les fichiers de configuration de Kerberos 5 avec Perl?
-
03-07-2019 - |
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.
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 = {"). )