You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeIPA自定义插件Post Callback未触发问题求助

FreeIPA自定义插件调试日志无法触发的问题解决

关键遗漏点及修正方案

1. 插件注册方式错误

你的代码中手动调用api.Object.user.user_disable.register()的方式不符合FreeIPA插件规范,必须使用Registry装饰器完成注册,且注册逻辑要在模块加载时自动执行——FreeIPA启动时不会执行if __name__ == '__main__'代码块,依赖main()函数的初始化逻辑完全不会触发。

2. 日志配置冲突

手动创建FileHandler会被FreeIPA全局日志系统覆盖,应该直接使用FreeIPA内置的日志组件,无需自定义文件输出路径。

3. 全局日志级别未开启DEBUG

FreeIPA默认不输出DEBUG级日志,即使代码中设置了logger.setLevel(logging.DEBUG),也会被全局配置覆盖。


修正后的完整代码

import logging
from ipalib import api, Registry
from ipaserver.plugins.user import user_disable

register = Registry()

# 使用FreeIPA内置日志,无需自定义handler
logger = logging.getLogger('ipaserver.user_disable_hook')

@register()
class user_disable_hook(user_disable):
    """
    用户禁用后执行逻辑的钩子
    """

    def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
        logger.debug("post_callback 已触发")
        if 'nsaccountlock' in entry_attrs and entry_attrs['nsaccountlock'][0] == 'TRUE':
            logger.info(f"用户 {dn} 已被禁用")
            # 在此添加会话结束相关代码
        return super().post_callback(ldap, dn, entry_attrs, *keys, **options)

# 模块加载时自动注册插件
api.register(user_disable_hook)

后续配置步骤

  • 开启DEBUG日志:编辑/etc/ipa/default.conf,添加或修改:
    debug = True
    
  • 重启服务:
    systemctl restart httpd ipa.service
    
  • 查看日志:调试日志会输出到FreeIPA默认日志文件/var/log/ipa/ipa-server.log,可通过以下命令过滤查看:
    grep 'ipaserver.user_disable_hook' /var/log/ipa/ipa-server.log
    

内容的提问来源于stack exchange,提问作者Jinckz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:03:23