2009-01-07 45 views
4

有没有人遇到过解析(并写入)Kerberos配置文件(即/etc/krb5.conf)的Perl模块?我已经看过了不少解析模块,如Config::General,​​等,但没有一个似乎能够处理嵌套结构如下所示:如何用Perl编辑Kerberos 5配置文件?

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

它还需要处理INI风格的部分,例如:在格式

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

更多细节可以在the krb5 conf documentation

我在写我自己的解析器的观点,但我宁愿没有这样做,如果发现别人^ h因为已经写了一个很好的,优雅的模块。

回答

3

我猜如果编写解析器需要大约10分钟时间,那么将其作为模块可能并不是那么有趣。这里有一段代码可能可以完成这项工作(免责声明:我对Kerberos的配置格式一无所知,代码基于您在此发布的内容)。

#!/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"; 
    } 
} 

编辑:解析ini格式也不难。您只需要在while循环中添加更多if,并使数据结构%conf稍微复杂一些。而不是散列哈希,您将需要散列哈希的散列,其中第一级关键字是[...]中的关键字,第二层是我在这里写的内容(对于“pam = {”)。

+0

感谢您的建议。我正走向类似的道路,但正如你可能猜到的那样,文件格式稍微复杂一些。我现在给这个问题增加了一些更详细的细节。尽管如此,再次感谢您的帮助。 – 2009-01-07 02:34:06