有没有人遇到过将解析(并写入)kerberos配置文件的Perl模块(即 /etc/krb5.conf )?我查看了很多解析模块,如 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
 }

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

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

有帮助吗?

解决方案

我想如果编写解析器大约需要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 = 

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

<*>

编辑:解析ini格式也不困难。你只需要在while循环中添加一些if,并使数据结构%conf稍微复杂一点。不需要散列哈希,你需要散列散列哈希,其中第一级键是[...]中的关键词,第二级是我在这里写的(对于“pam = {&quot; )。

; foreach (keys %{$conf{$section}}) { print "$section:

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

<*>

编辑:解析ini格式也不困难。你只需要在while循环中添加一些if,并使数据结构%conf稍微复杂一点。不需要散列哈希,你需要散列散列哈希,其中第一级键是[...]中的关键词,第二级是我在这里写的(对于“pam = {&quot; )。

:$conf{$section}{

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

<*>

编辑:解析ini格式也不困难。你只需要在while循环中添加一些if,并使数据结构%conf稍微复杂一点。不需要散列哈希,你需要散列散列哈希,其中第一级键是[...]中的关键词,第二级是我在这里写的(对于“pam = {&quot; )。

}\n"; } }

编辑:解析ini格式也不困难。你只需要在while循环中添加一些if,并使数据结构%conf稍微复杂一点。不需要散列哈希,你需要散列散列哈希,其中第一级键是[...]中的关键词,第二级是我在这里写的(对于“pam = {&quot; )。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top