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
相关产品推荐
相关产品推荐

