diff -uNr ruby-ldap-0.8.3.orig/conn.c ruby-ldap-0.8.3/conn.c --- ruby-ldap-0.8.3.orig/conn.c 2004-11-18 17:06:45.382124120 -0800 +++ ruby-ldap-0.8.3/conn.c 2004-11-18 17:08:23.544201216 -0800 @@ -278,6 +278,16 @@ }; VALUE +rb_ldap_conn_bound(VALUE self) +{ + RB_LDAP_DATA *ldapdata; + + GET_LDAP_DATA(self,ldapdata); + + return ldapdata->bind == 0 ? Qfalse : Qtrue; +}; + +VALUE rb_ldap_conn_set_option(VALUE self, VALUE opt, VALUE data) { /* ldap_set_option() is defined in IETF draft */ @@ -305,6 +315,8 @@ 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: @@ -1276,6 +1288,7 @@ rb_ldap_conn_define_method("start_tls", rb_ldap_conn_start_tls_s, -1); rb_ldap_conn_define_method("simple_bind", rb_ldap_conn_simple_bind_s, -1); rb_ldap_conn_define_method("bind", rb_ldap_conn_bind_s, -1); + rb_ldap_conn_define_method("bound?", rb_ldap_conn_bound, 0); rb_ldap_conn_define_method("unbind", rb_ldap_conn_unbind, 0); rb_ldap_conn_define_method("set_option", rb_ldap_conn_set_option, 2); rb_ldap_conn_define_method("get_option", rb_ldap_conn_get_option, 1);