]> git.sur5r.net Git - openldap/commitdiff
added attr_merge/value_add functions that dela with single attribute; bervals for...
authorPierangelo Masarati <ando@openldap.org>
Fri, 23 Aug 2002 08:49:19 +0000 (08:49 +0000)
committerPierangelo Masarati <ando@openldap.org>
Fri, 23 Aug 2002 08:49:19 +0000 (08:49 +0000)
servers/slapd/attr.c
servers/slapd/init.c
servers/slapd/proto-slap.h
servers/slapd/result.c
servers/slapd/value.c

index 39c2594189c7ab44906db93556891c6942e66392..ab9c56511ed0052bc06f44e07aa350d29230f32a 100644 (file)
@@ -133,6 +133,31 @@ attr_merge(
        return( value_add( &(*a)->a_vals, vals ) );
 }
 
+int
+attr_merge_one(
+       Entry           *e,
+       AttributeDescription *desc,
+       struct berval   *val )
+{
+       Attribute       **a;
+
+       for ( a = &e->e_attrs; *a != NULL; a = &(*a)->a_next ) {
+               if ( ad_cmp( (*a)->a_desc, desc ) == 0 ) {
+                       break;
+               }
+       }
+
+       if ( *a == NULL ) {
+               *a = (Attribute *) ch_malloc( sizeof(Attribute) );
+               (*a)->a_desc = desc;
+               (*a)->a_vals = NULL;
+               (*a)->a_next = NULL;
+               (*a)->a_flags = 0;
+       }
+
+       return( value_add_one( &(*a)->a_vals, val ) );
+}
+
 /*
  * attrs_find - find attribute(s) by AttributeDescription
  * returns next attribute which is subtype of provided description.
index b860b3f673bdce6e7935f3aadc39a00100d44873..d091c4fe07a25feb96b0761398b31bfa23549a98 100644 (file)
@@ -14,6 +14,7 @@
 #include <ac/time.h>
 
 #include "slap.h"
+#include "lber_pvt.h"
 
 /*
  * read-only global variables or variables only written by the listener
@@ -33,6 +34,10 @@ int          ldap_syslog_level = LOG_DEBUG;
 
 BerVarray default_referral = NULL;
 
+struct berval AllUser = BER_BVC( LDAP_ALL_USER_ATTRIBUTES );
+struct berval AllOper = BER_BVC( LDAP_ALL_OPERATIONAL_ATTRIBUTES );
+struct berval NoAttrs = BER_BVC( LDAP_NO_ATTRS );
+
 /*
  * global variables that need mutex protection
  */
index 6282ee2848c693444b12ae59f5e72aa5c2eb55b4..fe3b1546df8c73f21f557b9ddf46aa6e1f11bcf5 100644 (file)
@@ -123,6 +123,9 @@ LDAP_SLAPD_F (Attribute *) attr_dup LDAP_P(( Attribute *a ));
 LDAP_SLAPD_F (int) attr_merge LDAP_P(( Entry *e,
        AttributeDescription *desc,
        BerVarray vals ));
+LDAP_SLAPD_F (int) attr_merge_one LDAP_P(( Entry *e,
+       AttributeDescription *desc,
+       struct berval *val ));
 LDAP_SLAPD_F (Attribute *) attrs_find LDAP_P((
        Attribute *a, AttributeDescription *desc ));
 LDAP_SLAPD_F (Attribute *) attr_find LDAP_P((
@@ -998,6 +1001,9 @@ LDAP_SLAPD_F (int) value_find_ex LDAP_P((
 LDAP_SLAPD_F (int) value_add LDAP_P((
        BerVarray *vals,
        BerVarray addvals ));
+LDAP_SLAPD_F (int) value_add_one LDAP_P((
+       BerVarray *vals,
+       struct berval *addval ));
 
 /*
  * Other...
@@ -1073,6 +1079,10 @@ LDAP_SLAPD_V (ber_socket_t)      dtblsize;
 
 LDAP_SLAPD_V (int)             use_reverse_lookup;
 
+LDAP_SLAPD_V (struct berval)   AllUser;
+LDAP_SLAPD_V (struct berval)   AllOper;
+LDAP_SLAPD_V (struct berval)   NoAttrs;
+
 /*
  * operations
  */
index 3551b745ed0852273115446fb68b045cbfd4da24..ccc1de308336c816201a3ada61da4c65b11bc830 100644 (file)
@@ -645,11 +645,6 @@ send_search_result(
        }
 }
 
-static struct berval AllUser = { sizeof(LDAP_ALL_USER_ATTRIBUTES)-1,
-       LDAP_ALL_USER_ATTRIBUTES };
-static struct berval AllOper = { sizeof(LDAP_ALL_OPERATIONAL_ATTRIBUTES)-1,
-       LDAP_ALL_OPERATIONAL_ATTRIBUTES };
-
 int
 send_search_entry(
     Backend    *be,
@@ -726,7 +721,7 @@ send_search_entry(
                Debug( LDAP_DEBUG_ANY, "ber_printf failed\n", 0, 0, 0 );
 #endif
                ber_free_buf( ber );
-               return;
+               return( 1 );
            }
        }
        if (conn->c_is_udp && op->o_protocol == LDAP_VERSION2) {
index 002a105ab36aad5cd4c7ede354cecb4992ec15e8..3aa2adfa5000173347769adde26816223823de85 100644 (file)
@@ -53,6 +53,36 @@ value_add(
        return LDAP_SUCCESS;
 }
 
+int
+value_add_one( 
+    BerVarray *vals,
+    struct berval *addval
+)
+{
+       int     n;
+       BerVarray v2;
+
+       if ( *vals == NULL ) {
+               *vals = (BerVarray) ch_malloc( 2 * sizeof(struct berval) );
+               n = 0;
+       } else {
+               for ( n = 0; (*vals)[n].bv_val != NULL; n++ ) {
+                       ;       /* Empty */
+               }
+               *vals = (BerVarray) ch_realloc( (char *) *vals,
+                   (n + 2) * sizeof(struct berval) );
+       }
+
+       v2 = *vals + n;
+       ber_dupbv(v2, addval);
+
+       v2++;
+       v2->bv_val = NULL;
+       v2->bv_len = 0;
+
+       return LDAP_SUCCESS;
+}
+
 int
 value_validate(
        MatchingRule *mr,