Good evening every-one,

Actually I don't have that much hands on experience in C programming [though I 
am very through in java/j2ee] but I have a task with me to be done in C 
language.

I have a C utility which performs certain tasks. I have to incorporate a check 
that only valid users can run that utility. This I have to do by authenticating 
their user names and pwds in LDAP.

Now, now I decided that I would break my problem in simple manageable tasks....
step (1) => I decided to write a sample C program which connects to our ldap 
server and performs the validation
step (2) => try include the above program in my utility.

And I am at present on step1.

I am using sunstudio 12 for this purpose running it on solaris 10.

The LDAP authentication has to be done over SSL. I have the SSL certificates 
with me and I can connect to my ldap server using them but When i try to bind a 
particular user with it, the programe stucks there... it doesn't even give any 
error message or logs so I actually don't know how to proceed further.

The approach that I have taken is ---
STEP (1) bind annonmously with the ldap server to find out the user DN in ldap. 
This I have to do as I have the login ID and not the complete DN with me & 
because the port on which SSL is enabled dosn't allow annonymous log-in so I 
use a different port to get the DN and yes I didn't forget to unbind [the 
pointer].

THIS is working fine.
[for the sake of simplicity I would be removing this step and the code outlined 
below].


STEP(2) make a connection to ldap server using the certificates using 
ldapssl_clientauth_init() and ldapssl_init() fucntions.
THIS is also working fine.

STEP(3) then I set the ldap version to version to version3 using 
ldap_set_option() funciton
THIS is also working fine.

STEP(4) bind to the ldap server over ssl server using the user DN using 
ldap_sasl_bind_s() function
this is NOT working fine and programe hangs at this point [you might see a few 
extra variables used but these are just there as I was their trying out 
different things, I would for sure remove them]

************************************************See code snippet 
below.*****************************************************

int main(int argc, char** argv) {

LDAP ld;
LDAPMessage *result, *e;

struct berval *servcred , cred;

BerElement *ber;
int ret_val, search_ret_val, i, j;
int b;
int version;

char *a, *dn;
char **vals;
char *userDN;

char *pw = "users_passwd";
char *dn1 = "cn=ABCD EFGH (123456),ou=people,dc=example,dc=com";
//The above DN is absolutely correct and this I am using just for the sake of 
simplyfying things... as I explained in the desc above

printf("\nstarting the sample program....\n");

b = ldapssl_clientauth_init( "/home/XXXXXXXX/ldaplib/cert8.db", NULL, 1, 
"/home/XXXXXXXX/ldaplib/key3.db", NULL );

printf("\n 11111111111 \n");

// Get hold of a SSL LDAP connection.

if ((ld = ldapssl_init("my_ldap_server_name", XXXX, 0)) == NULL ) {
printf("\ncouldn't open SSL connection to the ldap server...\n");
exit( 1 );
}
else {
printf("\nSSL connection to ldap server is open...\n");
}


printf("\n 22222222222 \n");

version = LDAP_VERSION3;

ldap_set_option(ld,LDAP_OPT_PROTOCOL_VERSION,&version);

printf("\n 33333333333 \n");

cred.bv_val = "users_passwd";
cred.bv_len = strlen(cred.bv_val);

// Bind to the server. when we specify null, its an annonymous login
ret_val = ldap_sasl_bind_s(ld,dn1,LDAP_SASL_EXTERNAL,&cred,NULL,NULL,&servcred);
//ret_val = ldap_simple_bind_s( ld, dn1, pw );
if ( ret_val != LDAP_SUCCESS ) {
printf("\n COULD NOT BIND with annonymous log-in, return value is => %d ", 
ret_val);
}
else {
printf("\nnow we are bind, with annonymous log-in, return value is => %d ", 
ret_val);
printf("\nTHIS IS A VALID PASSWORD... USER CAN GO AHEAD TO PERFORM THE 
ACTION... \n");
}

ldap_unbind_s(ld);

printf("\nfinally exiting....\n");

return (EXIT_SUCCESS);

}

****************************************************************************************************
 ************

The output of the program is below...
starting the sample program....

11111111111

SSL connection to ldap server is open...

22222222222

33333333333

and after this it hangs---- i mean no further statment gets prnted.

So the problem is wth this function ----> ldap_sasl_bind_s() but what exactly 
it is I am not able to understand.




Any pointers OR code snippet OR any help is much appreciated.

Best Regards,
Vinay Mudgil
-- 
This message posted from opensolaris.org
_______________________________________________
opensolaris-code mailing list
opensolaris-code@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to