我有在 64 位 RedHat 8.7 Linux 上运行的 IBM Informix SE DBMS。这是一个 32 位产品。
它适用于本地定义的用户(例如billd
具有 UID 的用户名) 505
。例如,他们可以运行dbaccess stores7 sel_order
产品随附的 IBM Informix 演示数据库并从中获取正确的结果。
该系统还集成了 sssd 和 Microsoft Active Directory (AD) 服务。这意味着人们也可以使用他们的 Windows 用户名和凭据登录。这将产生像下面这样的用户名[email protected]
和 UID:507735929
当这些 AD 用户运行时dbaccess stores7 sel_order
他们会收到 Informix 错误
25590 - "authentication error".
这个错误的帮助是
This error indicates that an invalid user ID or password was used to
connect to the database server. Redefine a valid user ID and password.
快速字符串检查显示 dbaccess 包含getpwuid
和getpwnam
。
我怀疑以下一个或多个可能存在问题
- -505预期的 UID 大小
getpwuid()
适合 int16,507735929 需要 int32? - 用户名的长度(例如 32 个字符,而不是 10 个或更少)
- /etc/passwd 中缺少条目
- 缺少使 sssd 与 32 位应用程序兼容的 32 位库
- 其他内容
有人能指出可能是什么原因造成的、是否无法解决或者如何解决吗?
更新
我编译了 32 位(gcc -m32)和 64 位版本的 25 行 whoami.c 代码https://stackoverflow.com/q/8953424/477035
对于本地用户,64 位和 32 位版本均可运行
对于 AD 用户,64 位程序可以运行,但 32 位程序从getpwuid(uid)
uid 的来源处获得空结果geteuid()
。
所以我怀疑这可能是问题的根源——我是否遗漏了什么?还有什么我可以尝试的吗?