- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试编写一个 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/
我想使用 PAM 对我的 C 网络应用程序的用户进行身份验证,并且我找到了一个 a nice PAM example在 Stack 上,我附在底部。问题是,在我的开发机器中,我有一个 PAM 设置使用
我正在研究 PAM 模块的设计方式,作为我自己的 JAAS LoginModule 的指南。让我感到惊讶的一件事是,尽管用于访问散列密码的方法大多与散列方法本身正交,但我无法找到任何可以充分利用此属性
我必须调用什么 PAM 来重置用户密码?我想不通。 背景: 我正在开发嵌入式 Linux 设备。客户安装此设备,并创建用户帐户。如果其中一个二级用户帐户被锁定,或者如果用户忘记了密码,我们需要一种方法
是否可以有一个 PAM 模块来检查尝试通过 OpenSSH 登录的用户是否已经登录,如果他们拒绝第二次登录? 我已经尝试了其他几种方法来阻止多个登录 session ,但没有任何效果,如果有人可以使用
我修改了示例 python 脚本: service = 'passwd' if len(sys.argv) == 3: user = sys.argv[1] password = sy
目前我有一个图形应用程序,它有两个级别的访问权限:运算符(operator)和管理员。登录和身份验证都是自制的,我想将应用程序切换为使用 PAM。我不确定这样做的正确方法是什么。 如果我错了,请纠正我
我正在尝试交叉编译 Linux PAM对于 android 的方式如下 `#!/bin/sh # Linux-PAM/build.sh INSTALL_DIR="`pwd`/out" export P
是否有任何工作包可以使用 PHP 更改 linux 用户密码? 我试过使用 PECL:PAM,但在尝试更改密码时出现错误。 编辑: PHP代码: echo pam_chpass($username,
我从 webfusion 安装了 ubuntu VPS 和 Plesk 当我通过腻子上的 SSH 连接到服务器时,我已经从终端升级了 PAM。 现在这样做之后,我无法使用 ssh 访问我的服务器, 每
我已通读 this页面,但我有点困惑...... pam_start 什么是struct pam_conv应该如何填写? 到底是什么service_name这是什么意思? 是否有使用 PAM 登录用户
我在使用 PAM 时遇到了一些问题。我有一个使用 PAM 进行身份验证的 tomcat web 应用程序。在安装过程中,我们在/etc/pam.d 中创建到/etc/pam.d/sshd 文件的符号链
我已经使用pam函数(R中的集群包)成功运行了围绕 Medoids 的分区,现在,我想使用结果将新的观察结果归因于之前定义的集群/medoids 。 解决问题的另一种方法是,考虑到 pam 函数已找到
我正在开发一个管理多个主机的 Java Web 应用程序,我需要做的事情之一是设置和配置具有已知默认配置的主机。主机是基于RHEL的定制Linux。 我需要根据网络应用程序中的用户输入更改根用户的密码
我正在编写一个 PAM 模块,在此之前一切都运行良好,我成功地管理了 pam_sm_open_session()。进程的编辑文件是/etc/pam.d/login with“授权要求 pam_test
我正在使用 k-means 和 K-medoids。使用 K-means 执行出现以下信息: Within cluster sum of squares by cluster: [1] 1263616
我正在尝试编写一个 pam 模块,它将从文件中读取密码,然后让用户无需输入密码即可登录。 [编辑:文件将存储在外部设备中。 (试图满足双因素身份验证)。这听起来很不安全,但是文件将使用适当的加密算法进
我有一个以 root 身份运行的 C 程序,并通过调用 pam_chauthtok 使用 PAM 设置用户密码。这可行,但它允许设置弱密码,并且不保存用户更改自己的密码时将保存的密码历史记录。 有什么
我正在尝试编写一个 PAM 模块,将有关从 SSH 进行的身份验证尝试的信息记录到一个文件中。 我已经编写了一个由 OpenSSH 加载的模块,然后在身份验证尝试时被调用。该模块基于此代码:http:
我目前正在尝试测试一个 PAM 模块,这个:http://www.linux-pam.org/Linux-PAM-html/adg-example.html . 没有关于将 .o 文件放在哪里的指示。
如果应用程序 A 调用 PAM 服务“myapp”,并且 PAM 服务“myapp”被配置为使用 pam 模块 pam_exec.so(auth required pam_exec.so myscri
我是一名优秀的程序员,十分优秀!