auth_syspwd.c
上传用户:ladybrid91
上传日期:2007-01-04
资源大小:287k
文件大小:2k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. /*
  2. ** auth_syspwd.c
  3. **
  4. ** Copyright (c) 1994-1996 Peter Eriksson <pen@signum.se>
  5. **
  6. ** This program is free software; you can redistribute it and/or modify
  7. ** it under the terms of the GNU General Public License as published by
  8. ** the Free Software Foundation; either version 2 of the License, or
  9. ** (at your option) any later version.
  10. **
  11. ** This program is distributed in the hope that it will be useful,
  12. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. ** GNU General Public License for more details.
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program; if not, write to the Free Software
  17. ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. #include <stdio.h>
  20. #include <crypt.h>
  21. #include <string.h>
  22. #include "phttpd.h"
  23. int pm_init(const char **argv)
  24. {
  25.     const char *name = argv[0];
  26.     
  27.     if (debug > 1)
  28. fprintf(stderr, "*** auth_syspwd/pm_init("%s") called ***n", name);
  29.     return 0;
  30. }
  31. void pm_exit(void)
  32. {
  33.     if (debug > 1)
  34. fprintf(stderr, "*** auth_syspwd/pm_exit() called ***n");
  35. }
  36. int pm_auth(struct authinfo *aip, struct connectioninfo *cip,
  37.     const char *domain)
  38. {
  39.     char pbuf[1024], *sys_pwd, *cp;
  40.     char *username, *password;
  41. #ifndef __osf__
  42.     struct spwd spwb;
  43. #endif
  44.     struct passwd pwb;
  45.     if (debug > 1)
  46. fprintf(stderr, "*** auth_syspwd/pm_auth(%s)n",
  47. domain);
  48.     
  49.     if (aip == NULL ||
  50. aip->type == NULL ||
  51. strcasecmp(aip->type, "basic") != 0 ||
  52. aip->u.basic.username == NULL ||
  53. aip->u.basic.password == NULL)
  54.     {
  55. /* Unknown/bad authentication */
  56. return -1;
  57.     }
  58.     username = aip->u.basic.username;
  59.     password = aip->u.basic.password;
  60.     
  61. #ifndef __osf__    
  62.     if (s_getspnam_r(username, &spwb, pbuf, sizeof(pbuf)) == NULL)
  63. #endif
  64. {
  65.   if (s_getpwnam_r(username, &pwb, pbuf, sizeof(pbuf)) == NULL)
  66.     return 0;
  67.   else
  68.     sys_pwd = pwb.pw_passwd;
  69. }
  70. #ifndef __osf__
  71.     else
  72. sys_pwd = spwb.sp_pwdp;
  73. #endif
  74.     
  75.     if (password)
  76.     {
  77. if ((cp = crypt(password, sys_pwd)) == NULL)
  78.     return 0;
  79. if (strcmp(cp, sys_pwd) == 0)
  80. {
  81.     return 1;
  82. }
  83.     }
  84.     else
  85. if (sys_pwd[0] == '')
  86. {
  87.     return 1;
  88. }
  89.     
  90.     return 0;
  91. }