如何使用Perl编辑Kerberos 5配置文件?

时间:2009-01-07 01:22:40

标签: perl configuration-files kerberos cpan

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

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

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

1 个答案:

答案 0 :(得分: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稍微复杂一点。你需要一个哈希散列哈希,而不是hash的哈希值,其中第一级键是[...]中的关键字,第二级是我在这里写的(对于“pam = {”)。