问题标签 [getpwnam]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
724 浏览

linux - getpwnam 是否尊重 /etc/nsswitch.conf?

getpwnam 是否尊重 /etc/nsswitch.conf?

getpwnam状态的联机帮助页

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

这让我相信它应该尊重/etc/nsswitch.conf,迭代为该passwd行列出的任何条目(...但我有一个错误报告表明它的行为不是那样)。

编辑:我发现了一个3c 联机帮助页,表明它确实尊重它,所以现在的问题是它支持哪些操作系统

0 投票
2 回答
1654 浏览

c - 如果以 32 位编译,Ubuntu 上的 getpwnam 行为会有所不同

我正在几个 Ubuntu 64 位服务器上设置 ZABBIX 代理(用 C 编写)。我通常以 32 位编译所有内容,除非我特别需要 64 位(例如数据库服务器)。有问题的服务器将托管虚拟服务器并具有 8GB RAM,因此我将它们保留为 64 位。

如果 ZABBIX 代理以 root 身份启动,它会尝试下拉到 zabbix 用户的权限级别,它使用 C 的 getpwnam() 函数查找。

在纯 32 位系统上,此函数的行为。但是,当在 64 位系统上以 32 位编译时,当用户确实存在时,getpwnam() 返回 NULL。如果在 64 位系统上以 64 位编译,则可以正常工作。

我已经模拟了一个小应用程序来证明这一点,但我希望这更像是我的设置,而不是 GCC 或 STL 中的错误——zabbix 用户位于 LDAP 目录中。

首先是这个程序的输出:

这是我使用 ZABBIX 代理源代码改编的小程序的代码。

如果这被证明是我的设置问题,我很乐意在 serverfault.com 上询问,但我认为它以 getpwnam() 函数为中心,它与编程更相关。我也用谷歌搜索过,但没有发现任何有用的东西,这就是为什么我倾向于认为这是我的设置。

0 投票
1 回答
435 浏览

cocoa - 系统偏好设置 > 帐户的 uids / 名称列表

如何获取带有 uid 和名称的数组?

我可以从 0 迭代到 99999 并执行getpwnam(). 但是,大多数机器的帐户少于 5 个,因此不是最佳选择。我不知道什么框架对此负责,因此我不知道要搜索什么。

有没有更优的方案可以遍历账户?

编辑:就在我发布后,我发现getpwent()了遍历帐户。

但是,这并不表示帐户是否是系统偏好帐户。

那么如何获得系统偏好帐户呢?


编辑:我找到了与此等效的命令行dscl命令。

0 投票
2 回答
8273 浏览

samba - passdb 中的用户,但 getpwnam() 失败!

尝试使用 nss_ldap 设置 Samba + OpenLDAP。

将 Windows7 加入 Samba 独立 PDC 后,我无法使用域帐户登录,除非该帐户也添加到 /etc/passwd 文件中。

我得到:passdb 中的用户,但 getpwnam() 失败!

我读到的所有内容都指向 NSS_LDAP 问题,getent passwd 显示用户非常好,我能够使用仅在 LDAP 数据库中的用户帐户 ssh 进入同一 Linux 主机。

另外,如果我打开 /etc/passwd 文件并为有问题的用户添加一行,我就可以登录了。

我没有使用 PAM。我添加了每个 Samba.org 站点所需的两个 Windows7 注册表更新。

软件栈如下: Samba 3.5.3 OpenLDAP 2.4.21 nss_ldap 264

想法/建议?

- - - - - - - - - - - - - - - - - 更新 - - - - - - - - -----------------

越来越近!我的 nsswitch.conf 确实有文件 ldap 所以我颠倒了顺序(现在是 ldap 文件)并且发生了一些奇怪的事情。请注意,之前,我说过我可以使用 SSH 登录,getent passwd 将用户转储到 ldap 和文件中。更改 nsswitch.conf 后,文件之前的 ldap,像 ls 这样的简单命令需要很长时间。此外,我观察到 nss_ldap 错误如下:

ls: nss_ldap: 无法搜索 LDAP 服务器 - 服务器不可用

ls:nss_ldap:无法绑定到 LDAP 服务器 ldap://tsrvr.example.corp:凭据无效

我在 ldap.conf 中注释掉了 rootbinddn 行,这些错误消失了,getent passwd 立即重新开始工作。输出的顺序也发生了变化:ldap 条目列在文件条目之前。

尽管如此,我的 Windows7 客户端仍无法登录域,并且我继续收到相同的 Samba 错误消息

passdb 中的用户测试,但 getpwnam() 失败!

在我的 smb.conf 中,我尝试删除 ldapsam:trusted = yes 行,当我这样做时,我得到域身份验证错误。

我没有将 SSL/TLS 与 OpenLDAP 一起使用,并且我有 SSL = no 设置。我也有 ldap.secret 文件集。我在 root 帐户下运行 slapd。我的 rootbinddn 在注释掉之前引用了 uid=root,ou=Users,dc=example,dc=corp 的 LDAP root 用户。root 使用 CRYPT 的 userPassword 与 bindpw 以及 /etc/shadow 中的匹配。

当我收到 Samba 错误时,查看 LDAP 日志活动,看起来 LDAP 正在针对 Samba 查询返回正确的结果:

6 月 19 日 14:20:14 tsrvr slapd[3803]: conn=1025 op=15 SRCH base="dc=example,dc=corp" scope=2 deref=0 filter="(&(uid=test)(objectClass= sambaSamAccount))” 06月19日14时20分14秒tsrvr slapd的[3803]:CONN = 1025 OP = 15 SRCH ATTR = UID uidNumber的gidNumber homeDirectory的sambaPwdLastSet sambaPwdCanChange sambaPwdMustChange sambaLogonTime sambaLogoffTime sambaKickoffTime CN SN的displayName sambaHomeDrive sambaHomePath sambaLogonScript sambaProfilePath描述sambaUserWorkstations sambaSID sambaPrimaryGroupSID sambaLMPassword SAM baNTPassword sambaDomainName objectClass sambaAcctFlags sambaMungedDial sambaBadPasswordCount sambaBadPasswordTime sambaPasswordHistory modifyTimestamp sambaLogonHours modifyTimestamp p uidNumber gidNumber homeDirectory loginShell gecos Jun 19 14:20:14 tsrvr slapd[3803]:conn=1025 op=15 搜索结果 tag=101 err=0 nentries=1 text=

还有其他建议吗?

非常感激

0 投票
1 回答
208 浏览

tcl - 如何在 tcl 中执行 getpwnam/getpwuid 等

tcl 是否有进行 NSS 查找的标准方法(getpwnam,setpwent,...)

0 投票
1 回答
852 浏览

c - 为什么 getpwnam() 总是在函数中返回根信息?

我编写了一个简单的程序,它调用getpwnam()一个用户名,将该用户名传递给一个函数,然后getpwnam()再次调用。出于某种原因,我总是在函数内部获取 root 的密码信息。

该程序总是产生以下输出:

我在手册页中找不到与此相关的任何内容。有什么我做错了吗?

提前致谢!

0 投票
1 回答
332 浏览

perl - Perl getpwnam 在 sub 中失败

所以我正在尝试使用 getpwnam() 在 etc/passwd 中搜索子用户名,如果存在则返回 true。我不断收到错误“在 getpwnam 中使用未初始化的值”。

我正在将一个切碎的字符串传递给这个子。我试过只使用@name = getpwnam($_[0])@name = getpwnam($_)

我知道我传递的字符串作为用户名存在于 /etc/passwd 中,并且代码在其不在子目录中时有效。

0 投票
1 回答
571 浏览

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

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

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

我的理解正确吗?

0 投票
1 回答
156 浏览

c++ - 在 C++ 中使用 try 和 catch 方法创建一个函数以获取用户名

我正在尝试创建一个函数来使用 C++ 中的 try and catch 方法获取用户名。不幸的是,这段代码不起作用,我的应用程序在尝试运行时关闭。

问题出现在这行代码中,因为我在它之后放置了从未到达的打印件。

有谁知道这里有什么问题?

*编辑 - - - -

这是我的函数 getUserName()

0 投票
2 回答
3817 浏览

ansible - Ansible - 无法查找用户

如何解决下面运行 ansible 角色的问题?如果远程服务器上不存在用户,ansible 会收到错误消息“无法查找用户 test1:'getpwnam(): name not found: test1”。我需要在多台服务器上管理多个用户。谢谢

CentOS Linux 7、Ansible 2.4.2.0