]> git.sur5r.net Git - openldap/commitdiff
more Sun ONE DS 5.x harmonisation
authorLuke Howard <lukeh@openldap.org>
Sun, 26 Jan 2003 01:10:19 +0000 (01:10 +0000)
committerLuke Howard <lukeh@openldap.org>
Sun, 26 Jan 2003 01:10:19 +0000 (01:10 +0000)
include/slapi-plugin.h
servers/slapd/slapi/slapi_utils.c
servers/slapd/slapi/slapi_utils.h

index f6f8022ba7f23b5dcbb09551b2deab9b5d5ddb1b..46ed4815441f93e7c4ca9534832f88e2fed89d8c 100644 (file)
@@ -79,6 +79,21 @@ int slapi_attr_get_valueset( const Slapi_Attr *a, Slapi_ValueSet **vs );
 int slapi_attr_get_bervals_copy( Slapi_Attr *a, struct berval ***vals );
 int slapi_entry_attr_hasvalue( Slapi_Entry *e, const char *type, const char *value );
 int slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+void slapi_entry_attr_set_charptr(Slapi_Entry* e, const char *type, const char *value);
+void slapi_entry_attr_set_int( Slapi_Entry* e, const char *type, int l);
+void slapi_entry_attr_set_uint( Slapi_Entry* e, const char *type, unsigned int l);
+void slapi_entry_attr_set_long(Slapi_Entry* e, const char *type, long l);
+void slapi_entry_attr_set_ulong(Slapi_Entry* e, const char *type, unsigned long l);
+int slapi_is_rootdse( const char *dn );
+int slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+int slapi_entry_add_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+int slapi_entry_add_valueset(Slapi_Entry *e, const char *type, Slapi_ValueSet *vs);
+int slapi_entry_delete_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+int slapi_entry_merge_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+int slapi_entry_attr_replace_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+int slapi_entry_add_value(Slapi_Entry *e, const char *type, const Slapi_Value *value);
+int slapi_entry_add_string(Slapi_Entry *e, const char *type, const char *value);
+int slapi_entry_delete_string(Slapi_Entry *e, const char *type, const char *value);
 int slapi_entry_first_attr( const Slapi_Entry *e, Slapi_Attr **attr );
 int slapi_entry_next_attr( const Slapi_Entry *e, Slapi_Attr *prevattr, Slapi_Attr **attr );
 char *slapi_attr_syntax_normalize( const char *s );
index 73464e0d0d8953c0f11fa78d17de6f73e9f1f813..2694914b5b30337acb6a9c65a1855a8c45132920 100644 (file)
@@ -452,6 +452,283 @@ slapi_entry_attr_hasvalue( Slapi_Entry *e, const char *type, const char *value )
 #endif
 }
 
+void
+slapi_entry_attr_set_charptr(Slapi_Entry* e, const char *type, const char *value)
+{
+#ifdef LDAP_SLAPI
+       AttributeDescription    *ad = NULL;
+       const char              *text;
+       int                     rc;
+       struct berval           bv;
+       
+       rc = slap_str2ad( type, &ad, &text );
+       if ( rc != LDAP_SUCCESS ) {
+               return;
+       }
+       
+       attr_delete ( &e->e_attrs, ad );
+       if ( value != NULL ) {
+               bv.bv_val = (char *)value;
+               bv.bv_len = strlen(value);
+               attr_merge_one ( e, ad, &bv );
+       }
+#endif /* LDAP_SLAPI */
+}
+
+void
+slapi_entry_attr_set_int( Slapi_Entry* e, const char *type, int l)
+{
+#ifdef LDAP_SLAPI
+       char buf[64];
+
+       snprintf( buf, sizeof( buf ), "%d", l );
+       slapi_entry_attr_set_charptr( e, type, buf );
+#endif /* LDAP_SLAPI */
+}
+
+void
+slapi_entry_attr_set_uint( Slapi_Entry* e, const char *type, unsigned int l)
+{
+#ifdef LDAP_SLAPI
+       char buf[64];
+
+       snprintf( buf, sizeof( buf ), "%u", l );
+       slapi_entry_attr_set_charptr( e, type, buf );
+#endif /* LDAP_SLAPI */
+}
+
+void
+slapi_entry_attr_set_long(Slapi_Entry* e, const char *type, long l)
+{
+#ifdef LDAP_SLAPI
+       char buf[64];
+
+       snprintf( buf, sizeof( buf ), "%ld", l );
+       slapi_entry_attr_set_charptr( e, type, buf );
+#endif /* LDAP_SLAPI */
+}
+
+void
+slapi_entry_attr_set_ulong(Slapi_Entry* e, const char *type, unsigned long l)
+{
+#ifdef LDAP_SLAPI
+       char buf[64];
+
+       snprintf( buf, sizeof( buf ), "%lu", l );
+       slapi_entry_attr_set_charptr( e, type, buf );
+#endif /* LDAP_SLAPI */
+}
+
+int
+slapi_is_rootdse( const char *dn )
+{
+#ifdef LDAP_SLAPI
+       return ( dn == NULL || dn[0] == '\0' );
+#else
+       return 0;
+#endif
+}
+
+/*
+ * Add values to entry.
+ *
+ * Returns:
+ *     LDAP_SUCCESS                    Values added to entry
+ *     LDAP_TYPE_OR_VALUE_EXISTS       One or more values exist in entry already
+ *     LDAP_CONSTRAINT_VIOLATION       Any other error (odd, but it's the spec)
+ */
+int
+slapi_entry_add_values( Slapi_Entry *e, const char *type, struct berval **vals )
+{
+#ifdef LDAP_SLAPI
+       Modification            mod;
+       const char              *text;
+       int                     rc;
+       char                    textbuf[SLAP_TEXT_BUFLEN];
+
+       mod.sm_op = LDAP_MOD_ADD;
+       mod.sm_desc = NULL;
+       mod.sm_type.bv_val = (char *)type;
+       mod.sm_type.bv_len = strlen( type );
+
+       rc = slap_str2ad( type, &mod.sm_desc, &text );
+       if ( rc != LDAP_SUCCESS ) {
+               return rc;
+       }
+
+       if ( vals == NULL ) {
+               /* Apparently vals can be NULL */ 
+               mod.sm_bvalues = (BerVarray)ch_malloc( sizeof(struct berval) );
+               mod.sm_bvalues->bv_val = NULL;
+       } else {
+               rc = bvptr2obj( vals, &mod.sm_bvalues );
+               if ( rc != LDAP_SUCCESS ) {
+                       return LDAP_CONSTRAINT_VIOLATION;
+               }
+       }
+
+       rc = modify_add_values( e, &mod, 0, &text, textbuf, sizeof(textbuf) );
+
+       ch_free( mod.sm_bvalues );
+
+       return (rc == LDAP_SUCCESS) ? LDAP_SUCCESS : LDAP_CONSTRAINT_VIOLATION;
+#else
+       return -1;
+#endif /* LDAP_SLAPI */
+}
+
+int
+slapi_entry_add_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals )
+{
+#ifdef LDAP_SLAPI
+       return slapi_entry_add_values( e, type, vals );
+#else
+       return -1;
+#endif /* LDAP_SLAPI */
+}
+
+int
+slapi_entry_add_valueset(Slapi_Entry *e, const char *type, Slapi_ValueSet *vs)
+{
+#ifdef LDAP_SLAPI
+       AttributeDescription    *ad = NULL;
+       const char              *text;
+       int                     rc;
+       BerVarray               bv;
+       
+       rc = slap_str2ad( type, &ad, &text );
+       if ( rc != LDAP_SUCCESS ) {
+               return -1;
+       }
+
+       return attr_merge( e, ad, *vs );
+#else
+       return -1;
+#endif /* LDAP_SLAPI */
+}
+
+int
+slapi_entry_delete_values( Slapi_Entry *e, const char *type, struct berval **vals )
+{
+#ifdef LDAP_SLAPI
+       Modification            mod;
+       const char              *text;
+       int                     rc;
+       char                    textbuf[SLAP_TEXT_BUFLEN];
+
+       mod.sm_op = LDAP_MOD_DELETE;
+       mod.sm_desc = NULL;
+       mod.sm_type.bv_val = (char *)type;
+       mod.sm_type.bv_len = strlen( type );
+
+       if ( vals == NULL ) {
+               /* If vals is NULL, this is a NOOP. */
+               return LDAP_SUCCESS;
+       }
+       
+       rc = slap_str2ad( type, &mod.sm_desc, &text );
+       if ( rc != LDAP_SUCCESS ) {
+               return rc;
+       }
+
+       if ( vals[0] == NULL ) {
+               /* SLAPI doco says LDAP_OPERATIONS_ERROR */
+               return attr_delete( &e->e_attrs, mod.sm_desc ) ? LDAP_OPERATIONS_ERROR : LDAP_SUCCESS;
+       }
+
+       rc = bvptr2obj( vals, &mod.sm_bvalues );
+       if ( rc != LDAP_SUCCESS ) {
+               return LDAP_CONSTRAINT_VIOLATION;
+       }
+
+       rc = modify_delete_values( e, &mod, 0, &text, textbuf, sizeof(textbuf) );
+
+       ch_free( mod.sm_bvalues );
+
+       return rc;
+#else
+       return -1;
+#endif /* LDAP_SLAPI */
+}
+
+int
+slapi_entry_delete_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals )
+{
+#ifdef LDAP_SLAPI
+       return slapi_entry_delete_values( e, type, vals );
+#else
+       return -1;
+#endif /* LDAP_SLAPI */
+}
+
+int
+slapi_entry_merge_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals )
+{
+#ifdef LDAP_SLAPI
+       return slapi_entry_attr_merge( e, (char *)type, vals );
+#else
+       return -1;
+#endif /* LDAP_SLAPI */
+}
+
+int
+slapi_entry_add_value(Slapi_Entry *e, const char *type, const Slapi_Value *value)
+{
+#ifdef LDAP_SLAPI
+       AttributeDescription    *ad = NULL;
+       int                     rc;
+       const char              *text;
+
+       rc = slap_str2ad( type, &ad, &text );
+       if ( rc != LDAP_SUCCESS ) {
+               return -1;
+       }
+
+       rc = attr_merge_one( e, ad, (Slapi_Value *)value );
+       if ( rc != LDAP_SUCCESS ) {
+               return -1;
+       }
+
+       return 0;
+#else
+       return -1;
+#endif /* LDAP_SLAPI */
+}
+
+int
+slapi_entry_add_string(Slapi_Entry *e, const char *type, const char *value)
+{
+#ifdef LDAP_SLAPI
+       Slapi_Value val;
+
+       val.bv_val = (char *)value;
+       val.bv_len = strlen( value );
+
+       return slapi_entry_add_value( e, type, &val );
+#else
+       return -1;
+#endif /* LDAP_SLAPI */
+}
+
+int
+slapi_entry_delete_string(Slapi_Entry *e, const char *type, const char *value)
+{
+#ifdef LDAP_SLAPI
+       Slapi_Value *vals[2];
+       Slapi_Value val;
+
+       val.bv_val = (char *)value;
+       val.bv_len = strlen( value );
+       vals[0] = &val;
+       vals[1] = NULL;
+
+       return slapi_entry_delete_values_sv( e, type, vals );   
+#else
+       return -1;
+#endif /* LDAP_SLAPI */
+}
+
+
 int
 slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals )
 {
index 531b1426f5ae7e7c60391e0c6452210eb6c0b903..3f0c06214fccd6d176eafbe93ac7263ee47028c9 100644 (file)
@@ -55,6 +55,21 @@ int slapi_entry_attr_get_uint( const Slapi_Entry *e, const char *type );
 int slapi_entry_attr_get_ulong( const Slapi_Entry *e, const char *type );
 int slapi_entry_attr_hasvalue( Slapi_Entry *e, const char *type, const char *value );
 int slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+void slapi_entry_attr_set_charptr(Slapi_Entry* e, const char *type, const char *value);
+void slapi_entry_attr_set_int( Slapi_Entry* e, const char *type, int l);
+void slapi_entry_attr_set_uint( Slapi_Entry* e, const char *type, unsigned int l);
+void slapi_entry_attr_set_long(Slapi_Entry* e, const char *type, long l);
+void slapi_entry_attr_set_ulong(Slapi_Entry* e, const char *type, unsigned long l);
+int slapi_is_rootdse( const char *dn );
+int slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+int slapi_entry_add_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+int slapi_entry_add_valueset(Slapi_Entry *e, const char *type, Slapi_ValueSet *vs);
+int slapi_entry_delete_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+int slapi_entry_merge_values_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+int slapi_entry_attr_replace_sv( Slapi_Entry *e, const char *type, Slapi_Value **vals );
+int slapi_entry_add_value(Slapi_Entry *e, const char *type, const Slapi_Value *value);
+int slapi_entry_add_string(Slapi_Entry *e, const char *type, const char *value);
+int slapi_entry_delete_string(Slapi_Entry *e, const char *type, const char *value);
 int slapi_entry_first_attr( const Slapi_Entry *e, Slapi_Attr **attr );
 int slapi_entry_next_attr( const Slapi_Entry *e, Slapi_Attr *prevattr, Slapi_Attr **attr );
 char *slapi_entry_get_dn( Slapi_Entry *e );