/* Create list user for 3proxy ACL from LDAP server (c) Kirill Lopuchov lopuchov@mail.ru */ #include #include /*Create list user for 3proxy ACL from LDAP server*/ /* argv[1] = server argv[2] = basedn argv[3] = user_attribute argv[4] = filter argv[5] = user argv[6] = password */ main(int argc, char *argv[]) { LDAP *ld = NULL; LDAPMessage *res = NULL; LDAPMessage *msg = NULL; BerElement *ber; char *getattr,**vals; char *attrs[] = { NULL, NULL }; int i, rc = -1; int lderrno; unsigned char tmpbuf[1000]; if ( argc < 6 ) { printf ("Create 3proxy ACL userlist from ldap server.\ngetldapuser < ldapserver sbasedn user_attribute filter user password > \n"); 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"); } else { attrs[0]=strdup(argv[3]); /* init ldap ------------------------ */ ld = ldap_init( argv[1] , 389 ); if ( ld == NULL ) { /*perror( "ldap_init" );*/ printf("Error init ldap") ; exit(1); } /* connect ------------------------ */ rc = ldap_bind_s( ld, argv[5], argv[6], LDAP_AUTH_SIMPLE ); if ( rc != LDAP_SUCCESS ) { ldap_perror( ld, "Error ldap_bind" ); } /* search ------------------------ */ rc = ldap_search_s( ld,argv[2], LDAP_SCOPE_SUBTREE, argv[4], attrs, 0, &res ); /* get val ------------------------*/ rc=ldap_count_entries(ld,res); if (rc > 0) { msg=ldap_first_entry(ld, res); getattr=ldap_first_attribute(ld, msg, &ber); while (rc > 0) { vals=ldap_get_values(ld, msg, getattr); if (vals != NULL && vals[0] != NULL ) { i=ldap_count_values(vals); while(i>0) { printf("%s",vals[0]); i--; if (rc > 1) { printf(",",vals[0]); } } ldap_value_free(vals); } msg=ldap_next_entry(ld, msg); rc--; } } //end if (rc>0) ldap_memfree(res); ldap_unbind(ld); }/*end else*/ }