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

WEB邮件程序

开发平台:

C/C++

  1. /* $Id: authsasl.c,v 1.1 1999/12/13 03:34:28 mrsam Exp $ */
  2. /*
  3. ** Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
  4. ** distribution information.
  5. */
  6. #include "config.h"
  7. #include "authsasl.h"
  8. #include <stdlib.h>
  9. #include <ctype.h>
  10. #include <string.h>
  11. #include <errno.h>
  12. /* Use the SASL_LIST macro to build authsasl_list */
  13. #define SASL(a,b) int b(const char *, const char *, 
  14. char *(*)(const char *), 
  15. char **, 
  16. char **);
  17. SASL_LIST
  18. #undef SASL
  19. #define SASL(a,b) {a, b},
  20. struct authsasl_info authsasl_list[] = {
  21. SASL_LIST
  22. { 0, 0}};
  23. int authsasl(const char *method,
  24. const char *initreply,
  25. char *(*callback_func)(const char *),
  26. char **authtype_ptr, /* Returned - AUTHTYPE */
  27. char **authdata_ptr)
  28. {
  29. int i;
  30. char *p, *q;
  31. if ((p=malloc(strlen(method)+1)) == 0)
  32. return (0);
  33. strcpy(p, method);
  34. for (q=p; *q; q++)
  35. *q=toupper((int)(unsigned char)*q);
  36. for (i=0; authsasl_list[i].sasl_method; i++)
  37. {
  38. if (strcmp(p, authsasl_list[i].sasl_method) == 0)
  39. {
  40. free(p);
  41. return ( (*authsasl_list[i].sasl_func)(method,
  42. initreply, callback_func,
  43. authtype_ptr, authdata_ptr));
  44. }
  45. }
  46. free(p);
  47. errno=ENOENT;
  48. return (-1);
  49. }