preauthpam.c
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:1k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
  3. ** distribution information.
  4. */
  5. #if HAVE_CONFIG_H
  6. #include "config.h"
  7. #endif
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <errno.h>
  12. #include <pwd.h>
  13. #include "auth.h"
  14. #if HAVE_SHADOW_H
  15. #include <shadow.h>
  16. #endif
  17. static const char rcsid[]="$Id: preauthpam.c,v 1.7 2000/05/23 17:55:00 mrsam Exp $";
  18. int auth_pam_pre(const char *userid, const char *service,
  19.         int (*callback)(struct authinfo *, void *),
  20.                         void *arg)
  21. {
  22. struct authinfo auth;
  23. struct passwd *pw;
  24. #if HAVE_GETSPENT
  25. struct spwd *spw;
  26. #endif
  27. memset(&auth, 0, sizeof(auth));
  28. if ((pw=getpwnam(userid)) == 0)
  29. {
  30. if (errno == ENOMEM) return (1);
  31. return (-1);
  32. }
  33. auth.sysusername=userid;
  34. auth.sysgroupid=pw->pw_gid;
  35. auth.homedir=pw->pw_dir;
  36. auth.address=userid;
  37. auth.fullname=pw->pw_gecos;
  38. auth.passwd=pw->pw_passwd;
  39. #if HAVE_GETSPENT
  40. if ((spw=getspnam(userid)) != 0)
  41. auth.passwd=spw->sp_pwdp;
  42. #endif
  43. return ((*callback)(&auth, arg));
  44. }