【问题标题】:Migrating AIX specific C function calls to Linux将 AIX 特定的 C 函数调用迁移到 Linux
【发布时间】:2019-11-25 12:35:51
【问题描述】:

我从 IBM AIX 上的一个应用程序中获得了源文件,我正在尝试在 Linux 上构建它们。但是,在 AIX 上存在的名为 usersec.huserpw.h 的头文件在 Linux 上不存在。因此,在 Linux 上,这些函数出现编译器错误:

usersec.h声明

int     getuserattr (char *, char *, void *, int);

更多关于getuserattr的信息是here

userpw.h声明

struct userpw
{
        char    *upw_passwd;            /* user's passwd */
        unsigned int    upw_flags;      /* flags of restrictions */
        time_t  upw_lastupdate;         /* date of last passwd update */
        char    upw_name[PW_NAMELEN];   /* user's name */
};

struct userpw   *getuserpw (); 
int setpwdb ();  
int endpwdb ();

更多信息请查询:getuserpwsetpwdb and endpwdb

如果有人知道如何在 Linux 上编写等效函数,那就太好了。

【问题讨论】:

  • 您是否对userpw 结构应包含的内容以及getuserattr()getuserpw()setpwdb()endpwdb() 的预期行为有更多见解?
  • 在 Linux 上无法读取用户密码,只能存储哈希值。
  • getspent() 和朋友可能是 pwdb 最接近的等价物。
  • @StefOverflow 非常感谢您的评论。我添加了指向这些函数的文档的链接。

标签: c linux migration aix porting


【解决方案1】:

您可能想要使用getpwent 及其相关函数。

getpwent() 函数返回一个指向结构的指针,该结构包含 密码数据库中记录的细分字段(例如, 本地密码文件/etc/passwd、NIS 和 LDAP)。第一次 getpwent() 被调用,它返回第一个条目;此后,它 返回连续的条目。

setpwent() 函数回退到密码的开头 数据库。

endpwent()函数用于关闭密码数据库后 所有处理都已执行。

如果您想获取特定用户的密码条目,可以使用getpwnam 或其变体之一。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多