/* * call-seq: * entry.get_attributes => Array of String * entry.attrs => Array of String * * Return an array of all the attributes belonging to the entry. */ VALUE rb_ldap_entry_get_attributes (VALUE self) { RB_LDAPENTRY_DATA *edata; VALUE vals; char *attr; BerElement *ber; GET_LDAPENTRY_DATA (self, edata); vals = rb_ary_new (); for (attr = ldap_first_attribute (edata->ldap, edata->msg, &ber); attr != NULL; attr = ldap_next_attribute (edata->ldap, edata->msg, ber)) { rb_ary_push (vals, rb_tainted_str_new2 (attr)); } /* this code may cause segv #if !defined(USE_OPENLDAP1) if( ber != NULL ){ ber_free(ber, 0); } #endif */ return vals; }