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.

¿Fue útil?

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 = {" ).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top