/*
* call-seq:
* conn.simple_bind(dn=nil, password=nil) => self
* conn.simple_bind(dn=nil, password=nil) { |conn| } => nil
*
* Bind an LDAP connection, using the DN, +dn+, and the credential, +password+.
* If a block is given, +self+ is yielded to the block.
*/
VALUE
rb_ldap_conn_simple_bind_s (int argc, VALUE argv[], VALUE self)
{
RB_LDAP_DATA *ldapdata;
VALUE arg1, arg2;
char *dn = NULL;
char *passwd = NULL;
Data_Get_Struct (self, RB_LDAP_DATA, ldapdata);
if (!ldapdata->ldap)
{
if (rb_iv_get (self, "@args") != Qnil)
{
rb_ldap_conn_rebind (self);
GET_LDAP_DATA (self, ldapdata);
}
else
{
rb_raise (rb_eLDAP_InvalidDataError,
"The LDAP handler has already unbound.");
}
}
if (ldapdata->bind)
{
rb_raise (rb_eLDAP_Error, "already bound.");
};
switch (rb_scan_args (argc, argv, "02", &arg1, &arg2))
{
case 0:
break;
case 1:
if (arg1 == Qnil)
{
dn = NULL;
}
else
{
dn = StringValueCStr (arg1);
}
break;
case 2:
if (arg1 == Qnil)
{
dn = NULL;
}
else
{
dn = StringValueCStr (arg1);
}
if (arg2 == Qnil)
{
passwd = NULL;
}
else
{
passwd = StringValueCStr (arg2);
}
break;
default:
rb_bug ("rb_ldap_conn_simple_bind_s");
}
ldapdata->err = ldap_simple_bind_s (ldapdata->ldap, dn, passwd);
Check_LDAP_Result (ldapdata->err);
ldapdata->bind = 1;
if (rb_block_given_p ())
{
rb_ensure (rb_yield, self, rb_ldap_conn_unbind, self);
return Qnil;
}
else
{
return self;
};
}