preauthshadow.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. #if HAVE_UNISTD_H
  14. #include <unistd.h>
  15. #endif
  16. #if HAVE_SHADOW_H
  17. #include <shadow.h>
  18. #endif
  19. #include "auth.h"
  20. static const char rcsid[]="$Id: preauthshadow.c,v 1.5 2000/02/20 21:48:36 mrsam Exp $";
  21. int auth_shadow_pre(const char *userid, const char *service,
  22. int (*callback)(struct authinfo *, void *),
  23. void *arg)
  24. {
  25. struct authinfo auth;
  26. struct passwd *pw;
  27. struct spwd *spw;
  28. memset(&auth, 0, sizeof(auth));
  29. if ((pw=getpwnam(userid)) == 0)
  30. {
  31. if (errno == ENOMEM) return (1);
  32. return (-1);
  33. }
  34. auth.sysusername=userid;
  35. auth.sysgroupid=pw->pw_gid;
  36. auth.homedir=pw->pw_dir;
  37. auth.address=userid;
  38. auth.fullname=pw->pw_gecos;
  39. auth.passwd=pw->pw_passwd;
  40. if ((spw=getspnam(userid)) != 0)
  41. auth.passwd=spw->sp_pwdp;
  42. return ((*callback)(&auth, arg));
  43. }