/*
* call-seq:
* conn.set_option(option, data) => self
*
* Set a session-wide option for this LDAP connection.
*
* For example:
*
* <code>conn.set_option( LDAP::LDAP_OPT_PROTOCOL_VERSION, 3 )</code>
*
* would set the protocol of this connection to LDAPv3.
*/
VALUE
rb_ldap_conn_set_option (VALUE self, VALUE opt, VALUE data)
{
/* ldap_set_option() is defined in IETF draft */
#ifdef HAVE_LDAP_SET_OPTION
RB_LDAP_DATA *ldapdata;
RB_LDAP_DATA dummy;
int idata;
void *optdata;
int copt;
if (NIL_P (self))
{
dummy.ldap = NULL;
dummy.err = dummy.bind = 0;
ldapdata = &dummy;
}
else
GET_LDAP_DATA (self, ldapdata);
copt = NUM2INT (opt);
switch (copt)
{
case LDAP_OPT_REFERRALS:
optdata = (void *) NUM2INT (data);
break;
case LDAP_OPT_DEREF:
case LDAP_OPT_SIZELIMIT:
case LDAP_OPT_TIMELIMIT:
case LDAP_OPT_RESTART:
case LDAP_OPT_PROTOCOL_VERSION:
if (ldapdata->bind != 0)
rb_raise (rb_eLDAP_ResultError,
"can't set LDAP protocol version after bind");
case LDAP_OPT_ERROR_NUMBER:
#ifdef LDAP_OPT_SSL
case LDAP_OPT_SSL:
#endif
#ifdef USE_OPENLDAP2
#ifdef LDAP_OPT_X_TLS
case LDAP_OPT_X_TLS:
#endif
#ifdef LDAP_OPT_X_TLS_REQUIRE_CERT
case LDAP_OPT_X_TLS_REQUIRE_CERT:
#endif
#endif
idata = NUM2INT (data);
optdata = &idata;
break;
case LDAP_OPT_HOST_NAME:
case LDAP_OPT_ERROR_STRING:
#ifdef LDAP_OPT_MATCHED_DN
case LDAP_OPT_MATCHED_DN:
#endif
#ifdef USE_OPENLDAP2
#ifdef LDAP_OPT_X_TLS_CACERTFILE
case LDAP_OPT_X_TLS_CACERTFILE:
#endif
#ifdef LDAP_OPT_X_TLS_CACERTDIR
case LDAP_OPT_X_TLS_CACERTDIR:
#endif
#ifdef LDAP_OPT_X_TLS_CERT
case LDAP_OPT_X_TLS_CERT:
#endif
#ifdef LDAP_OPT_X_TLS_CERTFILE
case LDAP_OPT_X_TLS_CERTFILE:
#endif
#ifdef LDAP_OPT_X_TLS_KEYFILE
case LDAP_OPT_X_TLS_KEYFILE:
#endif
#ifdef LDAP_OPT_X_TLS_PROTOCOL
case LDAP_OPT_X_TLS_PROTOCOL:
#endif
#ifdef LDAP_OPT_X_TLS_CIPHER_SUITE
case LDAP_OPT_X_TLS_CIPHER_SUITE:
#endif
#ifdef LDAP_OPT_X_TLS_RANDOM_FILE
case LDAP_OPT_X_TLS_RANDOM_FILE:
#endif
#endif
optdata = NIL_P (data) ? NULL : StringValueCStr (data);
break;
#ifdef LDAP_OPT_API_INFO
case LDAP_OPT_API_INFO:
rb_raise (rb_eLDAP_Error, "option is read-only");
/* optdata = (void*)rb_ldap_get_apiinfo(data); */
break;
#endif
#ifdef LDAP_OPT_SERVER_CONTROLS
case LDAP_OPT_SERVER_CONTROLS:
optdata = rb_ldap_get_controls (data);
break;
#endif
default:
rb_notimplement ();
}
ldapdata->err = ldap_set_option (ldapdata->ldap, copt, optdata);
Check_LDAP_OPT_Result (ldapdata->err);
return self;
#else
rb_notimplement ();
#endif
}