64 位 Linux 上的 32 位支持 - getpwuid()、getpwnam() - sssd - MS AD

64 位 Linux 上的 32 位支持 - getpwuid()、getpwnam() - sssd - MS AD

我有在 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 包含getpwuidgetpwnam

我怀疑以下一个或多个可能存在问题

  • -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()

所以我怀疑这可能是问题的根源——我是否遗漏了什么?还有什么我可以尝试的吗?

相关内容