¿Cómo puedo editar los archivos de configuración de Kerberos 5 con Perl?
-
03-07-2019 - |
Pregunta
¿Alguien ha encontrado un módulo Perl que analice (y escriba) los archivos de configuración de kerberos (es decir, /etc/krb5.conf
)? He visto bastantes módulos de análisis como Config :: General , Config :: Auto , etc., pero ninguno parece ser capaz de manejar estructuras anidadas como las siguientes :
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
También debe manejar las secciones de estilo INI
, por ejemplo:
[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
}
Se pueden encontrar más detalles sobre el formato en la documentación de krb5 conf
Estoy en el momento de escribir mi propio analizador, pero preferiría no tener que hacerlo si alguien ya ha escrito un módulo bonito y elegante.
Solución
Supongo que si se tarda unos 10 minutos en escribir un analizador, probablemente no sea tan interesante convertirlo en un módulo. Aquí hay una parte del código que probablemente hace el trabajo (exención de responsabilidad: no sé nada acerca del formato de configuración para Kerberos, el código se basa en lo que publicaste aquí).
#!/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 = Supongo que si se tarda unos 10 minutos en escribir un analizador, probablemente no sea tan interesante convertirlo en un módulo. Aquí hay una parte del código que probablemente hace el trabajo (exención de responsabilidad: no sé nada acerca del formato de configuración para Kerberos, el código se basa en lo que publicaste aquí).
<*>
EDITAR: Analizar el formato ini tampoco es difícil. Solo tendrá que agregar algunos más si está en el bucle while y hacer que la estructura de datos% conf sea un poco más complicada. En lugar de un hash de hash, necesitarás un hash de hash, donde la clave del primer nivel es la palabra clave en [...] y el segundo nivel es lo que escribí aquí (para " pam = {" ).
;
foreach (keys %{$conf{$section}}) {
print "$section: Supongo que si se tarda unos 10 minutos en escribir un analizador, probablemente no sea tan interesante convertirlo en un módulo. Aquí hay una parte del código que probablemente hace el trabajo (exención de responsabilidad: no sé nada acerca del formato de configuración para Kerberos, el código se basa en lo que publicaste aquí).
<*>
EDITAR: Analizar el formato ini tampoco es difícil. Solo tendrá que agregar algunos más si está en el bucle while y hacer que la estructura de datos% conf sea un poco más complicada. En lugar de un hash de hash, necesitarás un hash de hash, donde la clave del primer nivel es la palabra clave en [...] y el segundo nivel es lo que escribí aquí (para " pam = {" ).
:$conf{$section}{ Supongo que si se tarda unos 10 minutos en escribir un analizador, probablemente no sea tan interesante convertirlo en un módulo. Aquí hay una parte del código que probablemente hace el trabajo (exención de responsabilidad: no sé nada acerca del formato de configuración para Kerberos, el código se basa en lo que publicaste aquí).
<*>
EDITAR: Analizar el formato ini tampoco es difícil. Solo tendrá que agregar algunos más si está en el bucle while y hacer que la estructura de datos% conf sea un poco más complicada. En lugar de un hash de hash, necesitarás un hash de hash, donde la clave del primer nivel es la palabra clave en [...] y el segundo nivel es lo que escribí aquí (para " pam = {" ).
}\n";
}
}
EDITAR: Analizar el formato ini tampoco es difícil. Solo tendrá que agregar algunos más si está en el bucle while y hacer que la estructura de datos% conf sea un poco más complicada. En lugar de un hash de hash, necesitarás un hash de hash, donde la clave del primer nivel es la palabra clave en [...] y el segundo nivel es lo que escribí aquí (para " pam = {" ).