【问题标题】:How can I configure a shell script which will parse ldap data in ldif format for each dn:如何配置一个 shell 脚本,它将为每个 dn 解析 ldif 格式的 ldap 数据:
【发布时间】:2011-12-27 03:05:39
【问题描述】:

我有一个类似这样的 LDIF 数据库。

dn: uid=user1,ou=People,dc=example,dc=com
mail: user1@example.com
passwordexpirationtime: 20120113203000Z

dn: uid=user2,ou=People,dc=example,dc=com
mail: user2@example.com
passwordexpirationtime: 20120113203000Z

dn: uid=user3,ou=People,dc=example,dc=com
mail: user3@example.com
passwordexpirationtime: 20120113203000Z

如何配置 shell 脚本来解析每个 dn:检查 passwordexpirationtime 的值,将其与当前日期进行比较。如果少于 10 天,那么将邮件发送到邮件属性中的值?

如果我通过grep passwordexpirationtime |awk -F ':' '{print $2}'搜索属性的值,它将返回所有dn的值:我怎么知道哪个邮件:与哪个dn关联:

【问题讨论】:

    标签: bash ldap-query


    【解决方案1】:

    你可以告诉 awk 用不同的分隔符分割输入:

    BEGIN { RS="\n\n"; FS="\n" }
    

    这样它会将记录拆分为块,将字段拆分为行,然后您可以获得每条记录的第三个字段,剥离日期并进行比较。

    但是如果你有一个 python 脚本来检查日期,为什么不直接在 python 中完成呢?

    【讨论】:

    • 是的,使用 awk 会更容易。cat ldif.txt | awk '开始 { RS="\n\n"; FS="\n" } {打印 $1}'
    • Python - 因为我对编程一无所知,所以只需根据我的需要复制/粘贴和更改。 @tinychen 你的想法奏效了。我会试试 awk 的东西。谢谢大家。
    【解决方案2】:

    您可以像这样转换文本:

    邮件:user1@example.com 密码过期时间:20120113203000Z

    邮件:user2@example.com 密码过期时间:20120113203000Z

    邮件:user3@example.com 密码过期时间:20120113203000Z

    使用这个脚本:

    猫 ldif.txt | tr '\n' '|' | sed 's/||/\n/g' | awk -F"|" '{打印 $2,$3}'

    【讨论】:

    • 太棒了,我可以做 {print $1,$2,$3} 然后读取使用 awk 读取密码过期时间的值,与今天比较(我有一个相同的 python 脚本。)如果 1 来了使用邮件属性并发送邮件。否则继续第二条记录。非常感谢今晚会试试这个并更新结果。
    【解决方案3】:

    这可能对你有用:

    awk '{print $4,$6}' RS='' ldif.txt
    user1@example.com 20120113203000Z
    user2@example.com 20120113203000Z
    user3@example.com 20120113203000Z
    

    现在您所要做的就是添加一些日期算术,如下所示:

    awk '{if(systime()+(10*24*60*60)-mktime(gensub(/(....)(..)(..)(..)(..)(..)(.)/,"\\1 \\2 \\3 \\4 \\5 \\6 \\7",1g,$6))>0)print $4}' RS='' ldif.txt
    

    【讨论】:

      【解决方案4】:

      这里有一个 python 解决方案,因为这似乎是您正在使用的语言:

      with open('ldif.txt') as f:
          for line in f:
              if line.startswith('passwordexpirationtime'):
                  _, date = line.split(': ')
                  print date
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-13
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        • 2014-05-06
        • 1970-01-01
        • 2012-01-11
        • 1970-01-01
        相关资源
        最近更新 更多