这是代码.
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; 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函数之前调用pam_info函数,也不会打印任何内容.
如果我使用访问功能,模块将正确执行.
我有点难过为什么会发生这种情况.
编辑:我已经包含了一些检查errno和其他返回值的代码,但该代码没有被执行.我没有在问题中包含它,因为我不想让代码太长而无法阅读.该模块似乎失败并完全退出.它没有打印任何东西.它什么都不做.但是,如果我使用access(),模块工作正常.
以上是内存溢出为你收集整理的stat()函数似乎没有在测试PAM模块中工作全部内容,希望文章能够帮你解决stat()函数似乎没有在测试PAM模块中工作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)