有没有人遇到过将解析(并写入)kerberos配置文件(即/etc/krb5.conf
)的Perl模块?我查看了很多解析模块,如Config::General,Config::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
我正在编写自己的解析器,但如果其他人已经编写了一个漂亮,优雅的模块,我宁愿不必这样做。
答案 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 = {”)。