getldapuser.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /* Create list user for 3proxy ACL from LDAP server
  2. (c) Kirill Lopuchov lopuchov@mail.ru
  3. */
  4. #include <stdio.h>
  5. #include <ldap.h>
  6. /*Create list user for 3proxy ACL from LDAP server*/
  7. /* argv[1] = server
  8. argv[2] = basedn
  9. argv[3] = user_attribute
  10. argv[4] = filter
  11. argv[5] = user
  12. argv[6] = password
  13. */
  14. main(int argc, char *argv[])
  15. {
  16. LDAP *ld = NULL;
  17. LDAPMessage *res = NULL;
  18. LDAPMessage *msg = NULL;
  19. BerElement *ber;
  20. char *getattr,**vals;
  21. char *attrs[] = { NULL, NULL };
  22. int i, rc = -1;
  23. int lderrno;
  24. unsigned char tmpbuf[1000];
  25. if ( argc < 6 )
  26. {
  27. printf ("Create 3proxy ACL userlist from ldap server.\ngetldapuser < ldapserver sbasedn user_attribute filter user password > \n");
  28. printf ("Example: getldapuser 192.168.0.1 dc=domain,dc=com cn (memberOf=cn=internet,cn=Users,dc=domain,dc=com) cn=admin,cn=users,dc=domain,dc=com password \n");
  29. }
  30. else
  31. {
  32. attrs[0]=strdup(argv[3]);
  33. /* init ldap ------------------------ */
  34. ld = ldap_init( argv[1] , 389 );
  35. if ( ld == NULL )
  36. {
  37. /*perror( "ldap_init" );*/
  38. printf("Error init ldap") ;
  39. exit(1);
  40. }
  41. /* connect ------------------------ */
  42. rc = ldap_bind_s( ld, argv[5], argv[6], LDAP_AUTH_SIMPLE );
  43. if ( rc != LDAP_SUCCESS )
  44. {
  45. ldap_perror( ld, "Error ldap_bind" );
  46. }
  47. /* search ------------------------ */
  48. rc = ldap_search_s( ld,argv[2], LDAP_SCOPE_SUBTREE,
  49. argv[4], attrs, 0, &res );
  50. /* get val ------------------------*/
  51. rc=ldap_count_entries(ld,res);
  52. if (rc > 0)
  53. {
  54. msg=ldap_first_entry(ld, res);
  55. getattr=ldap_first_attribute(ld, msg, &ber);
  56. while (rc > 0)
  57. {
  58. vals=ldap_get_values(ld, msg, getattr);
  59. if (vals != NULL && vals[0] != NULL )
  60. {
  61. i=ldap_count_values(vals);
  62. while(i>0)
  63. {
  64. printf("%s",vals[0]);
  65. i--;
  66. if (rc > 1) { printf(",",vals[0]); }
  67. }
  68. ldap_value_free(vals);
  69. }
  70. msg=ldap_next_entry(ld, msg);
  71. rc--;
  72. }
  73. } //end if (rc>0)
  74. ldap_memfree(res);
  75. ldap_unbind(ld);
  76. }/*end else*/
  77. }