/* * 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 }