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

WEB邮件程序

开发平台:

C/C++

  1. #include "config.h"
  2. #include "ldapaddressbook.h"
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. struct ldapabook *ldapabook_read(const char *filename)
  7. {
  8. char buf[BUFSIZ];
  9. FILE *fp;
  10. struct ldapabook *list, *last;
  11. char *s;
  12. char *name;
  13. char *host;
  14. char *port;
  15. char *suffix;
  16. char *binddn;
  17. char *bindpw;
  18. if ((fp=fopen(filename, "r")) == 0) return (0);
  19. list=last=0;
  20. while (fgets(buf, sizeof(buf), fp))
  21. {
  22. struct ldapabook *p;
  23. s=strchr(buf, 'n');
  24. if (s) *s=0;
  25. if ((s=strchr(buf, '#')) != 0) *s=0;
  26. name=buf;
  27. s=strchr(buf, 't');
  28. if (!s) continue;
  29. *s++=0;
  30. host=s;
  31. s=strchr(s, 't');
  32. if (s) *s++=0;
  33. port=s;
  34. if (s) s=strchr(s, 't');
  35. if (s) *s++=0;
  36. suffix=s;
  37. if (s) s=strchr(s, 't');
  38. if (s) *s++=0;
  39. binddn=s;
  40. if (s) s=strchr(s, 't');
  41. if (s) *s++=0;
  42. bindpw=s;
  43. if (!port || !*port) port="389";
  44. if (!suffix) suffix="";
  45. if (!binddn) binddn="";
  46. if (!bindpw) bindpw="";
  47. if ((p=malloc(sizeof(struct ldapabook))) == 0)
  48. {
  49. ldapabook_free(list);
  50. fclose(fp);
  51. return (0);
  52. }
  53. memset(p, 0, sizeof(*p));
  54. if ( (p->name=strdup(name)) != 0)
  55. {
  56. if ((p->host=strdup(host)) != 0)
  57. {
  58. if ((p->port=strdup(port)) != 0)
  59. {
  60. if ((p->suffix=strdup(suffix)) != 0)
  61. {
  62. if ((p->binddn=strdup(binddn))
  63. != 0)
  64. {
  65. if ((p->bindpw=strdup
  66. (bindpw)) != 0)
  67. {
  68. if (!list)
  69.    list=last=p;
  70. else
  71.    last->next=p;
  72. last=p;
  73. p->next=0;
  74. continue;
  75. }
  76. free(p->binddn);
  77. }
  78. free(p->suffix);
  79. }
  80. free(p->port);
  81. }
  82. free(p->host);
  83. }
  84. free(p->name);
  85. }
  86. free(p);
  87. ldapabook_free(list);
  88. fclose(fp);
  89. return (0);
  90. }
  91. fclose(fp);
  92. return (list);
  93. }
  94. void ldapabook_free(struct ldapabook *p)
  95. {
  96. while (p)
  97. {
  98. struct ldapabook *n=p->next;
  99. free(p->bindpw);
  100. free(p->binddn);
  101. free(p->suffix);
  102. free(p->port);
  103. free(p->host);
  104. free(p->name);
  105. free(p);
  106. p=n;
  107. }
  108. }