标签: getpwuid

我应该在Linux中释放getpwuid()返回的指针吗?

我打电话后getpwuid(uid),我有一个指针的引用.当我不再使用它时,我应该释放指针吗?阅读手册页,它说它引用了一些静态区域,可能会被后续调用相同的函数覆盖,所以我不确定是否应该触摸那个内存区域.

谢谢.

c linux getpwuid

7
推荐指数
2
解决办法
2048
查看次数

getpwuid()为LDAP用户返回NULL

我在检索用户是LDAP用户的Red Hat Enterprise 6的当前用户信息时遇到问题?

我有一些代码(实际上是安装工具的一部分),需要检索用户名,主目录和其他详细信息.它使用getpwuid()调用来根据用户ID执行此操作.简化细分:

uid_t uid = getuid();
printf("UID = %d\n", uid);

errno = 0;
struct passwd* udetails = getpwuid(uid);

if (udetails != NULL)
{
    printf("User name = %s\n", udetails->pw_name);
}
else
{
    printf("getpwuid returns NULL, errno=%d\n", errno);
}
Run Code Online (Sandbox Code Playgroud)

如果用户是本地用户(在该系统的/ etc/passwd中),则可以正常工作.

当用户是LDAP认证用户时,getuid调用返回用户ID或当前用户,但对getpwuid的调用返回0,而errno中没有设置错误代码.根据文档,这意味着用户不存在.

这有用吗?根据getpwuid手册页:

的getpwnam()函数返回一个包含在口令数据库中的记录的断开的字段的指针的结构(例如,本地密码文件/ etc/passwd中,NIS和LDAP)相匹配的用户名的名称.

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

如果当前用户已通过LDAP验证,是否需要另外的调用来获取详细信息?是否有必要在应用程序中打开LDAP数据库,还是系统调用应该处理?

附加:我现在也在RHEL 5机箱上尝试了这个,对同一个LDAP目录进行身份验证.这可能只是RHEL 6盒子上的配置问题吗?还是更广泛的RHEL 6问题?

附加:/etc/nsswitch.conf按照Basile Starynkevitch的要求(删除了注释行):

passwd:     files sss
shadow:     files sss
group:      files sss

hosts:      files dns

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc: …
Run Code Online (Sandbox Code Playgroud)

linux redhat ldap getpwuid

5
推荐指数
1
解决办法
5231
查看次数

如何在Windows上的Perl中获取用户和组信息?

Perl有几个内置函数,用于访问Unix系统(以及支持时的其他地方)的/ etc/passwd,以获取用户和组信息.例如,

my $name = getpwuid($uid);
Run Code Online (Sandbox Code Playgroud)

将返回给定用户ID的用户名,如果没有此类用户则返回undef.

如果Perl脚本需要可移植并在Unices和Windows上运行,那么应该如何访问用户和组信息?ActivePerl似乎支持User :: grent和User :: pwent模块,它们提供对/ etc/passwd的字段访问 - 即使在Windows中也是如此.奇怪的是,它们不支持内置函数getpw*和getgr*.有什么其他选择吗?

windows perl getpwuid etcpasswd

4
推荐指数
1
解决办法
1643
查看次数

使用 getpwnam()/getpwuid() 结果的安全方法?

我正在研究 Linux 和 FreeBSD。当我使用getpwnam()or时getpwuid(),我得到一个指向结构的指针passwd。使用char*passwd结构成员的安全方法是什么?

手册页说这个结构是一个静态对象,但会被后续调用覆盖,所以我想安全的方法是使用strdup()来获取成员的副本char*,然后不再使用该passwd结构。

我的理解正确吗?

c linux getpwuid getpwnam

1
推荐指数
1
解决办法
848
查看次数

为什么我得到"getuid未在该范围内声明"错误?

#include <string>
#include <stdio.h>
#include <pwd.h>

std::string impPath()
{
    char *name;
    struct passwd *pass;
    pass = getpwuid(getuid());
    name = pass->pw_name;

    std::string PATH = "/home";
    PATH.append("/");
    PATH.append(name);

    return PATH;
}
Run Code Online (Sandbox Code Playgroud)

我需要知道用户的用户.为此.我正在使用,getpwuid()但我收到此错误.

/home/shobhit/Desktop/file.cpp:15: error: 'getuid' was not declared in this scope
 pass = getpwuid(getuid());
                        ^
Run Code Online (Sandbox Code Playgroud)

我只是想不出在这个范围内没有声明getuid的原因是什么.我想我已经包含了所有必要的头文件.(yami对R的回答getlogin()的评论c函数返回NULL和错误"没有这样的文件或目录" 我试过在网上搜索但找不到任何相关的答案.

c++ getpwuid

0
推荐指数
1
解决办法
850
查看次数

标签 统计

getpwuid ×5

linux ×3

c ×2

c++ ×1

etcpasswd ×1

getpwnam ×1

ldap ×1

perl ×1

redhat ×1

windows ×1