]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/proto-slap.h
fix previous commit
[openldap] / servers / slapd / proto-slap.h
index c8c2095d2f90045ee28942f9ccea103198528ede..f5ed80742f02c2f5032ed69e8e966994895c66e4 100644 (file)
@@ -472,6 +472,8 @@ LDAP_SLAPD_F (int) verbs_to_mask LDAP_P((
        int argc, char *argv[], slap_verbmasks *v, slap_mask_t *m ));
 LDAP_SLAPD_F (int) mask_to_verbs LDAP_P((
        slap_verbmasks *v, slap_mask_t m, BerVarray *bva ));
+LDAP_SLAPD_F (int) enum_to_verb LDAP_P((
+       slap_verbmasks *v, slap_mask_t m, struct berval *bv ));
 LDAP_SLAPD_F (int) bindconf_parse LDAP_P((
        const char *word,  slap_bindconf *bc ));
 LDAP_SLAPD_F (int) bindconf_unparse LDAP_P((
@@ -878,7 +880,14 @@ LDAP_SLAPD_F (int) slap_modrdn2mods(
 /*
  * modify.c
  */
-LDAP_SLAPD_F( int ) slap_mods_no_update_check(
+LDAP_SLAPD_F( int ) slap_mods_obsolete_check(
+       Operation *op,
+       Modifications *ml,
+       const char **text,
+       char *textbuf, size_t textlen );
+
+LDAP_SLAPD_F( int ) slap_mods_no_user_mod_check(
+       Operation *op,
        Modifications *ml,
        const char **text,
        char *textbuf, size_t textlen );
@@ -1563,6 +1572,60 @@ LDAP_SLAPD_F (int) fe_op_unbind LDAP_P((Operation *op, SlapReply *rs));
 #endif
 LDAP_SLAPD_F (int) fe_extended LDAP_P((Operation *op, SlapReply *rs));
 
+/* NOTE: this macro assumes that bv has been allocated
+ * by ber_* malloc functions or is { 0L, NULL } */
+#if defined(HAVE_BIGNUM)
+#define UI2BVX(bv,ui,ctx) \
+       do { \
+               char            *val; \
+               ber_len_t       len; \
+               val = BN_bn2dec(ui); \
+               if (val) { \
+                       len = strlen(val); \
+                       if ( len > (bv)->bv_len ) { \
+                               (bv)->bv_val = ber_memrealloc_x( (bv)->bv_val, len + 1, (ctx) ); \
+                       } \
+                       AC_MEMCPY((bv)->bv_val, val, len + 1); \
+                       (bv)->bv_len = len; \
+                       OPENSSL_free(val); \
+               } else { \
+                       ber_memfree_x( (bv)->bv_val, (ctx) ); \
+                       BER_BVZERO( (bv) ); \
+               } \
+       } while ( 0 )
+#elif defined(HAVE_GMP)
+/* NOTE: according to the documentation, the result 
+ * of mpz_sizeinbase() can exceed the length of the
+ * string representation of the number by 1
+ */
+#define UI2BVX(bv,ui,ctx) \
+       do { \
+               ber_len_t       len = mpz_sizeinbase( (ui), 10 ); \
+               if ( len > (bv)->bv_len ) { \
+                       (bv)->bv_val = ber_memrealloc_x( (bv)->bv_val, len + 1, (ctx) ); \
+               } \
+               (void)mpz_get_str( (bv)->bv_val, 10, (ui) ); \
+               if ( (bv)->bv_val[ len - 1 ] == '\0' ) { \
+                       len--; \
+               } \
+               (bv)->bv_len = len; \
+       } while ( 0 )
+#else /* ! HAVE_BIGNUM && ! HAVE_GMP */
+#define UI2BVX(bv,ui,ctx) \
+       do { \
+               char            buf[] = "+9223372036854775807L"; \
+               ber_len_t       len; \
+               snprintf( buf, sizeof( buf ), "%lu", (ui) ); \
+               len = strlen( buf ); \
+               if ( len > (bv)->bv_len ) { \
+                       (bv)->bv_val = ber_memrealloc_x( (bv)->bv_val, len + 1, (ctx) ); \
+               } \
+               AC_MEMCPY( (bv)->bv_val, buf, len + 1 ); \
+       } while ( 0 )
+#endif /* ! HAVE_GMP */
+
+#define UI2BV(bv,ui)   UI2BVX(bv,ui,NULL)
+
 LDAP_END_DECL
 
 #endif /* PROTO_SLAP_H */