0

我有一个 PostgreSQL 的 Initdb 实用程序构建,它在运行 Fedora 的远程构建服务器上编译和链接。在我的系统(Ubuntu 13.04 64 位)上,当使用命令运行该实用程序时,将initdb -D /home/me/postgres_files/ -L /home/me/postgres_init_files/返回以下内容:

initdb: could not obtain information about current user: Success

如果我在本地构建实用程序,则不会发生这种情况,只有从我们的构建场进行远程构建。到目前为止,我已经设法将问题追溯到以下代码initdb.c

pw = getpwuid(geteuid());
if (!pw)
{
    fprintf(stderr,
          _("%s: could not obtain information about current user: %s\n"),
            progname, strerror(errno));
    exit(1);
}

似乎对 geteuid() 或 getpwuid() 的调用失败了,但是失败的函数没有设置 errno。不幸的是,我不能轻易进入并直接调试该实用程序,因为这只发生在该实用程序的远程构建版本上!

如果有人能对此有所了解,我将不胜感激。

谢谢。

4

1 回答 1

1

参考“不一致”错误消息:

如果getpwuid()返回NULL,这不一定需要指示错误。

来自man getpwuid(我用斜体强调):

getpwuid()函数返回一个指向结构的指针,该结构包含密码数据库中与用户 ID uid 匹配的记录的断开字段。

[...]

getpwnam ()getpwuid()函数返回指向 passwd 结构的指针,如果未找到匹配条目或发生错误,则返回 NULL。

errno从似乎是0上述两个陈述的事实来看,我得出的结论是geteuid()根本无法找到getpwuid().

于 2013-09-16T16:15:28.067 回答