]> git.sur5r.net Git - openldap/blobdiff - include/ldap_pvt.h
ITS#5780
[openldap] / include / ldap_pvt.h
index bbf461c7b4dfdadaac5840c9dc1a2489db770f6a..6c36d1af8830a51884d6e2c0f25946a303e8998a 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  * 
- * Copyright 1998-2007 The OpenLDAP Foundation.
+ * Copyright 1998-2008 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -21,6 +21,7 @@
 #define _LDAP_PVT_H 1
 
 #include <lber.h>                              /* get ber_slen_t */
+#include <lber_pvt.h>                          /* get Sockbuf_Buf */
 
 LDAP_BEGIN_DECL
 
@@ -169,7 +170,7 @@ LDAP_F( int ) ldap_bv2rdn_x LDAP_P((
        struct berval *, LDAPRDN *, char **, unsigned flags, void *ctx ));
 LDAP_F( int ) ldap_rdn2bv_x LDAP_P(( 
        LDAPRDN rdn, struct berval *bv, unsigned flags, void *ctx ));
-#endif
+#endif /* LDAP_AVA_NULL */
 
 /* url.c */
 LDAP_F (void) ldap_pvt_hex_unescape LDAP_P(( char *s ));
@@ -195,12 +196,10 @@ LDAP_F (void) ldap_pvt_hex_unescape LDAP_P(( char *s ));
 
 /* controls.c */
 struct ldapcontrol;
-LDAP_F (struct ldapcontrol *) ldap_control_dup LDAP_P((
-       const struct ldapcontrol *ctrl ));
-
-LDAP_F (struct ldapcontrol **) ldap_controls_dup LDAP_P((
-       struct ldapcontrol *const *ctrls ));
-
+LDAP_F (int)
+ldap_pvt_put_control LDAP_P((
+       const struct ldapcontrol *c,
+       BerElement *ber ));
 LDAP_F (int) ldap_pvt_get_controls LDAP_P((
        BerElement *be,
        struct ldapcontrol ***ctrlsp));
@@ -219,15 +218,55 @@ LDAP_F (void *) ldap_pvt_sasl_mutex_new LDAP_P((void));
 LDAP_F (int) ldap_pvt_sasl_mutex_lock LDAP_P((void *mutex));
 LDAP_F (int) ldap_pvt_sasl_mutex_unlock LDAP_P((void *mutex));
 LDAP_F (void) ldap_pvt_sasl_mutex_dispose LDAP_P((void *mutex));
+#endif /* HAVE_CYRUS_SASL */
 
 struct sockbuf; /* avoid pulling in <lber.h> */
 LDAP_F (int) ldap_pvt_sasl_install LDAP_P(( struct sockbuf *, void * ));
 LDAP_F (void) ldap_pvt_sasl_remove LDAP_P(( struct sockbuf * ));
-#endif /* HAVE_CYRUS_SASL */
 
+/*
+ * SASL encryption support for LBER Sockbufs
+ */
+
+struct sb_sasl_generic_data;
+
+struct sb_sasl_generic_ops {
+       void (*init)(struct sb_sasl_generic_data *p,
+                    ber_len_t *min_send,
+                    ber_len_t *max_send,
+                    ber_len_t *max_recv);
+       ber_int_t (*encode)(struct sb_sasl_generic_data *p,
+                           unsigned char *buf,
+                           ber_len_t len,
+                           Sockbuf_Buf *dst);
+       ber_int_t (*decode)(struct sb_sasl_generic_data *p,
+                           const Sockbuf_Buf *src,
+                           Sockbuf_Buf *dst);
+       void (*reset_buf)(struct sb_sasl_generic_data *p,
+                         Sockbuf_Buf *buf);
+       void (*fini)(struct sb_sasl_generic_data *p);
+};
+
+struct sb_sasl_generic_install {
+       const struct sb_sasl_generic_ops        *ops;
+       void                                    *ops_private;
+};
+
+struct sb_sasl_generic_data {
+       const struct sb_sasl_generic_ops        *ops;
+       void                                    *ops_private;
+       Sockbuf_IO_Desc                         *sbiod;
+       ber_len_t                               min_send;
+       ber_len_t                               max_send;
+       ber_len_t                               max_recv;
+       Sockbuf_Buf                             sec_buf_in;
+       Sockbuf_Buf                             buf_in;
+       Sockbuf_Buf                             buf_out;
+};
 #ifndef LDAP_PVT_SASL_LOCAL_SSF
 #define LDAP_PVT_SASL_LOCAL_SSF        71      /* SSF for Unix Domain Sockets */
-#endif
+#endif /* ! LDAP_PVT_SASL_LOCAL_SSF */
 
 struct ldap;
 struct ldapmsg;
@@ -318,6 +357,8 @@ LDAP_END_DECL
  * If none is available, unsigned long data is used.
  */
 
+LDAP_BEGIN_DECL
+
 #ifdef USE_MP_BIGNUM
 /*
  * Use OpenSSL's BIGNUM
@@ -406,4 +447,15 @@ typedef    unsigned long           ldap_pvt_mp_t;
 
 #include "ldap_pvt_uc.h"
 
+LDAP_END_DECL
+
+LDAP_BEGIN_DECL
+
+#include <limits.h>                            /* get CHAR_BIT */
+
+/* Buffer space for sign, decimal digits and \0. Note: log10(2) < 146/485. */
+#define LDAP_PVT_INTTYPE_CHARS(type) (((sizeof(type)*CHAR_BIT-1)*146)/485 + 3)
+
+LDAP_END_DECL
+
 #endif /* _LDAP_PVT_H */