stat()函数似乎没有在测试PAM模块中工作
发布时间:2020-12-16 06:54:21 所属栏目:百科 来源:网络整理
导读:我正在尝试编写PAM模块. PAM模块在首次登录时创建一个目录.非常类似于pam_mkhomedir. 这是代码. PAM_EXTERN intpam_sm_open_session (pam_handle_t *pamh,int flags,int argc,const char **argv){ int retval; const char *user; const struct passwd *pwd;
我正在尝试编写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 == ' ') { 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结构与字符数组的填充(确保它不是指向字符的指针,实际上是定义数组的大小) “测试堆栈损坏”.现在当你运行时,如果该缓冲区被破坏,那就是问题的根源.您可以尝试切换编译器,或不使用stat函数.当我使用clang编译器vs gcc时,我最近对stat函数行为不端.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |