gpt4 book ai didi

c - stat() 函数似乎在测试 PAM 模块中不起作用

转载 作者:IT王子 更新时间:2023-10-29 00:43:12 25 4
gpt4 key购买 nike

我正在尝试编写一个 PAM 模块。 PAM 模块在第一次登录时创建一个目录。与 pam_mkhomedir 非常相似。

这是代码。

PAM_EXTERN int
pam_sm_open_session (pam_handle_t *pamh, int flags, int argc,
const char **argv)
{
int retval;
const char *user;
const struct passwd *pwd;
struct stat St;

// Parse the args
_pam_parse(pamh, flags, argc, argv);
pam_info (pamh, "\nThese are the args flags. skel: %s, mkdir: %s, umask: %o",SkelDir, MkDir, UMask );

// Determine the user name
retval = pam_get_user(pamh, &user, NULL);
if (retval != PAM_SUCCESS || user == NULL || *(const char *)user == '\0')
{
pam_syslog(pamh, LOG_NOTICE, "user unknown");
return PAM_USER_UNKNOWN;
}

strcpy(DestDir, MkDir);
strcat(DestDir,"/");
strcat(DestDir, user);

// Get the password entry
pwd = pam_modutil_getpwnam (pamh, user);
if (pwd == NULL)
{
return PAM_CRED_INSUFFICIENT;
}

// For some reason stat wont work, using access instead.

//retval = stat(DestDir,&St);


retval = access(DestDir, F_OK);
if ( retval == 0)
{
pam_info(pamh, "directory exists %s" ,DestDir);
}

return PAM_SUCCESS;

}

如您所见,现在,该模块仅在登录时打印 pam 配置文件中指定的参数。
问题出在 stat 函数上。当我使用它时,没有打印任何内容,即使在 stat 函数之前调用了 pam_info 函数。
如果我使用访问功能,模块会正确执行。我有点困惑为什么会这样。
编辑:我已经包含了一些检查 errno 和其他返回值的代码,但是这些代码没有被执行。我没有将它包含在问题中,因为我不想让代码太长而无法阅读。该模块似乎失败并完全退出。它不打印任何东西。它什么都不做。但是如果我使用 access() 模块工作正常。

最佳答案

有时,与您正在调用的库相比,stat 结构可能会被错误定义,以查看是否属于这种情况用字符数组填充您的 stat 结构(确保它不是指向字符的指针,实际定义数组的大小) 上面写着“测试堆栈损坏”。现在,当您运行该缓冲区是否已损坏时,这就是问题的根源。您可以尝试切换编译器,或者不使用 stat 函数。我最近在使用 clang 编译器与 gcc 时遇到了 stat 函数的错误行为。

关于c - stat() 函数似乎在测试 PAM 模块中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3182597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com