4

有没有人遇到过会解析(和编写)kerberos 配置文件(即/etc/krb5.conf)的 Perl 模块?我看过很多解析模块,如Config::GeneralConfig::Auto等,但似乎没有一个能够处理如下嵌套结构:

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

它还需要处理INI-style 部分,例如:

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

有关格式的更多详细信息,请参阅 krb5 conf 文档

我正在编写自己的解析器,但如果其他人已经编写了一个漂亮、优雅的模块,我宁愿不必这样做。

4

1 回答 1

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 = {”)。

于 2009-01-07T01:51:07.407 回答