]> git.sur5r.net Git - openldap/commitdiff
Split Operation into Opheader and op
authorHoward Chu <hyc@openldap.org>
Thu, 25 Nov 2004 22:59:00 +0000 (22:59 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 25 Nov 2004 22:59:00 +0000 (22:59 +0000)
15 files changed:
servers/slapd/acl.c
servers/slapd/back-monitor/init.c
servers/slapd/connection.c
servers/slapd/filter.c
servers/slapd/operation.c
servers/slapd/overlays/pcache.c
servers/slapd/overlays/syncprov.c
servers/slapd/passwd.c
servers/slapd/proto-slap.h
servers/slapd/sasl.c
servers/slapd/saslauthz.c
servers/slapd/slap.h
servers/slapd/slapacl.c
servers/slapd/slapauth.c
servers/slapd/syncrepl.c

index fbcdf3a59926aa3bbc260f958fe1d6e71782aeb0..2be75b512828051c5640ff89c33046fe92aae35a 100644 (file)
@@ -2025,21 +2025,13 @@ aci_set_gather( SetCookie *cookie, struct berval *name, AttributeDescription *de
        
        p.cookie = cookie;
        
+       op2.o_hdr = cp->op->o_hdr;
        op2.o_tag = LDAP_REQ_SEARCH;
-       op2.o_protocol = LDAP_VERSION3;
        op2.o_ndn = op2.o_bd->be_rootndn;
        op2.o_callback = &cb;
        op2.o_time = slap_get_time();
        op2.o_do_not_cache = 1;
        op2.o_is_auth_check = 0;
-       op2.o_threadctx = cp->op->o_threadctx;
-       op2.o_tmpmemctx = cp->op->o_tmpmemctx;
-       op2.o_tmpmfuncs = cp->op->o_tmpmfuncs;
-#ifdef LDAP_SLAPI
-       op2.o_pb = cp->op->o_pb;
-#endif
-       op2.o_conn = cp->op->o_conn;
-       op2.o_connid = cp->op->o_connid;
        ber_dupbv_x( &op2.o_req_dn, &op2.o_req_ndn, cp->op->o_tmpmemctx );
        op2.ors_slimit = SLAP_NO_LIMIT;
        op2.ors_tlimit = SLAP_NO_LIMIT;
index 03a233ad7a2765792029b4f43dfb1c1d7acd5597..496d5e9ce88b92b150e36c5ed27ae5c2504fcca6 100644 (file)
@@ -374,6 +374,7 @@ monitor_filter2ndn( struct berval *base, int scope, struct berval *filter,
 {
        Connection      conn = { 0 };
        Operation       op = { 0 };
+       Opheader        ohdr = { 0 };
        SlapReply       rs = { 0 };
        slap_callback   cb = { NULL, monitor_filter2ndn_cb, NULL, NULL };
        AttributeName   anlist[ 2 ];
@@ -385,7 +386,7 @@ monitor_filter2ndn( struct berval *base, int scope, struct berval *filter,
                return -1;
        }
 
-       connection_fake_init( &conn, &op, &conn );
+       connection_fake_init( &conn, &op, &ohdr, &conn );
 
        op.o_tag = LDAP_REQ_SEARCH;
 
index abb470fac9758d82e5f303dd53edeb79c3bcb240..19143d5daa5fb518836a44ce27736328754b4e46 100644 (file)
@@ -1695,6 +1695,7 @@ void
 connection_fake_init(
        Connection *conn,
        Operation *op,
+       Opheader *ohdr,
        void *ctx )
 {
        conn->c_connid = -1;
@@ -1705,6 +1706,7 @@ connection_fake_init(
        conn->c_peer_domain = slap_empty_bv;
        conn->c_peer_name = slap_empty_bv;
 
+       op->o_hdr = ohdr;
        /* set memory context */
        op->o_tmpmemctx = slap_sl_mem_create(SLAP_SLAB_SIZE, SLAP_SLAB_STACK, ctx);
        op->o_tmpmfuncs = &slap_sl_mfuncs;
index d1cc7da88f7923d1285ac4c07ef4a10db2498fbb..df96a225f44ffbb9beb68e6df99105b59aea9e30 100644 (file)
@@ -541,7 +541,9 @@ void
 filter_free( Filter *f )
 {
        Operation op;
+       Opheader ohdr;
 
+       op.o_hdr = &ohdr;
        op.o_tmpmemctx = slap_sl_context( f );
        op.o_tmpmfuncs = &slap_sl_mfuncs;
        filter_free_x( &op, f );
@@ -776,6 +778,9 @@ void
 filter2bv( Filter *f, struct berval *fstr )
 {
        Operation op;
+       Opheader ohdr;
+
+       op.o_hdr = &ohdr;
        op.o_tmpmemctx = NULL;
        op.o_tmpmfuncs = &ch_mfuncs;
 
index 68d8a758213840ff2a7cbd9a79a354755b851587..d50d89b24777a9d5736c024b370fea4212b31cae 100644 (file)
@@ -53,7 +53,6 @@ void slap_op_destroy(void)
        while ( (o = LDAP_STAILQ_FIRST( &slap_free_ops )) != NULL) {
                LDAP_STAILQ_REMOVE_HEAD( &slap_free_ops, o_next );
                LDAP_STAILQ_NEXT(o, o_next) = NULL;
-               ch_free( o->o_controls );
                ch_free( o );
        }
        ldap_pvt_thread_mutex_destroy( &slap_op_mutex );
@@ -63,7 +62,6 @@ void
 slap_op_free( Operation *op )
 {
        struct berval slap_empty_bv_dup;
-       void **controls;
 
        assert( LDAP_STAILQ_NEXT(op, o_next) == NULL );
 
@@ -106,10 +104,9 @@ slap_op_free( Operation *op )
 #endif /* defined( LDAP_SLAPI ) */
 
 
-       controls = op->o_controls;
-       memset( controls, 0, sizeof(void *) * SLAP_MAX_CIDS );
-       memset( op, 0, sizeof(Operation) );
-       op->o_controls = controls;
+       memset( op, 0, sizeof(Operation) + sizeof(Opheader) + SLAP_MAX_CIDS * sizeof(void *) );
+       op->o_hdr = (Opheader *)(op+1);
+       op->o_controls = (void **)(op->o_hdr+1);
 
 #if 0
        slap_sync_cookie_free( &op->o_sync_state, 0 );
@@ -144,8 +141,10 @@ slap_op_alloc(
        ldap_pvt_thread_mutex_unlock( &slap_op_mutex );
 
        if (!op) {
-               op = (Operation *) ch_calloc( 1, sizeof(Operation) );
-               op->o_controls = (void **) ch_calloc( SLAP_MAX_CIDS, sizeof( void *));
+               op = (Operation *) ch_calloc( 1, sizeof(Operation)
+                       + sizeof(Opheader) + SLAP_MAX_CIDS * sizeof(void *) );
+               op->o_hdr = (Opheader *)(op + 1);
+               op->o_controls = (void **)(op->o_hdr+1);
        }
 
        op->o_ber = ber;
index ff3110726ed58b6b55a63bc3c63754e22ed2aca2..e4135b982218da39c744362010fa5a1c0002278f 100644 (file)
@@ -1411,6 +1411,7 @@ consistency_check(
        cache_manager *cm = on->on_bi.bi_private;
        query_manager *qm = cm->qm;
        Operation op = {0};
+       Opheader ohdr = {0};
        Connection conn = {0};
 
        SlapReply rs = {REP_RESULT};
@@ -1418,7 +1419,7 @@ consistency_check(
        int i, return_val, pause = 1;
        QueryTemplate* templ;
 
-       connection_fake_init( &conn, &op, ctx );
+       connection_fake_init( &conn, &op, &ohdr, ctx );
 
        op.o_bd = &cm->db;
        op.o_dn = cm->db.be_rootdn;
index 33d14c52857c95da654442ee4a47f3daf8a79781..5e67191fba22e5e1a9210a5f3b4f23237ffe8270 100644 (file)
@@ -19,8 +19,6 @@
 
 #include "portable.h"
 
-#define        SLAPD_OVER_SYNCPROV     SLAPD_MOD_DYNAMIC
-
 #ifdef SLAPD_OVER_SYNCPROV
 
 #include <ac/string.h>
@@ -394,8 +392,11 @@ syncprov_sendresp( Operation *op, opcookie *opc, syncops *so, Entry *e, int mode
        Entry e_uuid = {0};
        Attribute a_uuid = {0};
        Operation sop = *so->s_op;
+       Opheader ohdr;
        syncrepl_state *srs = sop.o_controls[sync_cid];
 
+       ohdr = *sop.o_hdr;
+       sop.o_hdr = &ohdr;
        sop.o_tmpmemctx = op->o_tmpmemctx;
 
        ctrls[1] = NULL;
@@ -789,7 +790,7 @@ syncprov_op_search( Operation *op, SlapReply *rs )
        Filter *fand, *fava;
        syncops *sop = NULL;
        searchstate *ss;
-       syncrepl_state *srs = op->o_controls[sync_cid];
+       syncrepl_state *srs;
 
        if ( !(op->o_sync_mode & SLAP_SYNC_REFRESH) ) return SLAP_CB_CONTINUE;
 
@@ -798,6 +799,8 @@ syncprov_op_search( Operation *op, SlapReply *rs )
                return rs->sr_err;
        }
 
+       srs = op->o_controls[sync_cid];
+
        /* If this is a persistent search, set it up right away */
        if ( op->o_sync_mode & SLAP_SYNC_PERSIST ) {
                syncops so;
index d848e7a6cc2e4f7491bea1daf914d253899cc744..a39abcb29a4c967bd65232588e57e7a0d435735a 100644 (file)
@@ -202,7 +202,7 @@ int passwd_extop(
                rs->sr_err = LDAP_OTHER;
 
        } else {
-               op2 = *op;
+               op2.o_hdr = op->o_hdr;
                op2.o_tag = LDAP_REQ_MODIFY;
                op2.o_callback = &cb2;
                op2.orm_modlist = qpw->rs_mods;
index d0c3f93b37668bbd3c35019fc5b68a1acd7012f4..06698a1f6f53bd43040b6d71b52b8945b3afecd1 100644 (file)
@@ -448,6 +448,7 @@ LDAP_SLAPD_F (void) connection2anonymous LDAP_P((Connection *));
 LDAP_SLAPD_F (void) connection_fake_init LDAP_P((
        Connection *conn,
        Operation *op,
+       Opheader *ohdr,
        void *threadctx ));
 LDAP_SLAPD_F (void) connection_assign_nextid LDAP_P((Connection *));
 
index fb6ef138fc4e28bf4f941ad25f6e000a92a09c0b..61c003ac321f640ccb9c8e881a0976e3914f41c2 100644 (file)
@@ -398,18 +398,13 @@ slap_auxprop_lookup(
 
                if ( op.o_bd && op.o_bd->be_search ) {
                        SlapReply rs = {REP_RESULT};
+                       op.o_hdr = conn->c_sasl_bindop->o_hdr;
                        op.o_tag = LDAP_REQ_SEARCH;
-                       op.o_protocol = LDAP_VERSION3;
                        op.o_ndn = conn->c_ndn;
                        op.o_callback = &cb;
                        op.o_time = slap_get_time();
                        op.o_do_not_cache = 1;
                        op.o_is_auth_check = 1;
-                       op.o_threadctx = conn->c_sasl_bindop->o_threadctx;
-                       op.o_tmpmemctx = conn->c_sasl_bindop->o_tmpmemctx;
-                       op.o_tmpmfuncs = conn->c_sasl_bindop->o_tmpmfuncs;
-                       op.o_conn = conn;
-                       op.o_connid = conn->c_connid;
                        op.o_req_dn = op.o_req_ndn;
                        op.ors_scope = LDAP_SCOPE_BASE;
                        op.ors_deref = LDAP_DEREF_NEVER;
@@ -504,18 +499,13 @@ slap_auxprop_store(
        }
 
        if ( rc == LDAP_SUCCESS ) {
+               op.o_hdr = conn->c_sasl_bindop->o_hdr;
                op.o_tag = LDAP_REQ_MODIFY;
-               op.o_protocol = LDAP_VERSION3;
                op.o_ndn = op.o_req_ndn;
                op.o_callback = &cb;
                op.o_time = slap_get_time();
                op.o_do_not_cache = 1;
                op.o_is_auth_check = 1;
-               op.o_threadctx = conn->c_sasl_bindop->o_threadctx;
-               op.o_tmpmemctx = conn->c_sasl_bindop->o_tmpmemctx;
-               op.o_tmpmfuncs = conn->c_sasl_bindop->o_tmpmfuncs;
-               op.o_conn = conn;
-               op.o_connid = conn->c_connid;
                op.o_req_dn = op.o_req_ndn;
                op.orm_modlist = modlist;
 
index 3faedc8ff1e75cdcbdc55e8132edcec83f45d3c3..52d928f51236d1a688c203ea1cf5e3b5ee3abc4b 100644 (file)
@@ -992,21 +992,13 @@ exact_match:
                goto CONCLUDED;
        }
 
+       op.o_hdr = opx->o_hdr;
        op.o_tag = LDAP_REQ_SEARCH;
-       op.o_protocol = LDAP_VERSION3;
        op.o_ndn = *authc;
        op.o_callback = &cb;
        op.o_time = slap_get_time();
        op.o_do_not_cache = 1;
        op.o_is_auth_check = 1;
-       op.o_threadctx = opx->o_threadctx;
-       op.o_tmpmemctx = opx->o_tmpmemctx;
-       op.o_tmpmfuncs = opx->o_tmpmfuncs;
-#ifdef LDAP_SLAPI
-       op.o_pb = opx->o_pb;
-#endif
-       op.o_conn = opx->o_conn;
-       op.o_connid = opx->o_connid;
        /* use req_ndn as req_dn instead of non-pretty base of uri */
        if( !BER_BVISNULL( &base ) ) {
                ch_free( base.bv_val );
@@ -1163,21 +1155,13 @@ void slap_sasl2dn( Operation *opx,
                goto FINISHED;
        }
 
-       op.o_conn = opx->o_conn;
-       op.o_connid = opx->o_connid;
+       op.o_hdr = opx->o_hdr;
        op.o_tag = LDAP_REQ_SEARCH;
-       op.o_protocol = LDAP_VERSION3;
        op.o_ndn = opx->o_conn->c_ndn;
        op.o_callback = &cb;
        op.o_time = slap_get_time();
        op.o_do_not_cache = 1;
        op.o_is_auth_check = 1;
-       op.o_threadctx = opx->o_threadctx;
-       op.o_tmpmemctx = opx->o_tmpmemctx;
-       op.o_tmpmfuncs = opx->o_tmpmfuncs;
-#ifdef LDAP_SLAPI
-       op.o_pb = opx->o_pb;
-#endif
        op.ors_deref = LDAP_DEREF_NEVER;
        op.ors_slimit = 1;
        op.ors_tlimit = SLAP_NO_LIMIT;
index c8152611dd52250baf5433a467dcf8b2c02ccc2e..c5ec701d55bef155db1d570d1027506c82c7a483 100644 (file)
@@ -2139,18 +2139,57 @@ typedef struct syncrepl_state {
 /*
  * represents an operation pending from an ldap client
  */
+typedef struct slap_op_header {
+       unsigned long oh_opid;  /* id of this operation */
+       unsigned long oh_connid; /* id of conn initiating this op */
+       struct slap_conn *oh_conn;      /* connection spawning this op */
+
+       ber_int_t       oh_msgid;       /* msgid of the request */
+       ber_int_t       oh_protocol;    /* version of the LDAP protocol used by client */
+
+       ldap_pvt_thread_t       oh_tid; /* thread handling this op */
+
+       void    *oh_threadctx;          /* thread pool thread context */
+       void    *oh_tmpmemctx;          /* slab malloc context */
+       BerMemoryFunctions *oh_tmpmfuncs;
+
+       char            oh_log_prefix[sizeof("conn=18446744073709551615 op=18446744073709551615")];
+
+#ifdef LDAP_SLAPI
+       void    *oh_pb;                  /* NS-SLAPI plugin */
+       void    *oh_extensions;         /* NS-SLAPI plugin */
+#endif
+} Opheader;
+
 typedef struct slap_op {
-       unsigned long o_opid;   /* id of this operation */
-       unsigned long o_connid; /* id of conn initiating this op */
-       char            o_log_prefix[sizeof("conn=18446744073709551615 op=18446744073709551615")];
-       struct slap_conn *o_conn;       /* connection spawning this op */
-       BackendDB       *o_bd;  /* backend DB processing this op */
+       Opheader *o_hdr;
+
+#define o_opid o_hdr->oh_opid
+#define o_connid o_hdr->oh_connid
+#define o_conn o_hdr->oh_conn
+#define o_msgid o_hdr->oh_msgid
+#define o_protocol o_hdr->oh_protocol
+#define o_tid o_hdr->oh_tid
+#define o_threadctx o_hdr->oh_threadctx
+#define o_tmpmemctx o_hdr->oh_tmpmemctx
+#define o_tmpmfuncs o_hdr->oh_tmpmfuncs
+
+#define        o_tmpalloc      o_tmpmfuncs->bmf_malloc
+#define o_tmpcalloc    o_tmpmfuncs->bmf_calloc
+#define        o_tmprealloc    o_tmpmfuncs->bmf_realloc
+#define        o_tmpfree       o_tmpmfuncs->bmf_free
+
+#define o_log_prefix o_hdr->oh_log_prefix
+
+#ifdef LDAP_SLAPI
+#define o_pb o_hdr->oh_pb
+#define o_extensions o_hdr->oh_extensions
+#endif
 
-       ber_int_t       o_msgid;        /* msgid of the request */
-       ber_int_t       o_protocol;     /* version of the LDAP protocol used by client */
        ber_tag_t       o_tag;          /* tag of the request */
        time_t          o_time;         /* time op was initiated */
 
+       BackendDB       *o_bd;  /* backend DB processing this op */
        struct berval   o_req_dn;       /* DN of target of request */
        struct berval   o_req_ndn;
 
@@ -2213,9 +2252,6 @@ typedef struct slap_op {
 #define ore_reqoid oq_extended.rs_reqoid
 #define ore_flags oq_extended.rs_flags
 #define ore_reqdata oq_extended.rs_reqdata
-
-       ldap_pvt_thread_t       o_tid;  /* thread handling this op */
-
        volatile sig_atomic_t o_abandon;        /* abandon flag */
        volatile sig_atomic_t o_cancel;         /* cancel flag */
 #define SLAP_CANCEL_NONE                               0x00
@@ -2337,26 +2373,13 @@ typedef struct slap_op {
        slap_callback *o_callback;      /* callback pointers */
        LDAPControl     **o_ctrls;       /* controls */
 
-       void    *o_threadctx;           /* thread pool thread context */
-       void    *o_tmpmemctx;           /* slab malloc context */
-       BerMemoryFunctions *o_tmpmfuncs;
-#define        o_tmpalloc      o_tmpmfuncs->bmf_malloc
-#define o_tmpcalloc    o_tmpmfuncs->bmf_calloc
-#define        o_tmprealloc    o_tmpmfuncs->bmf_realloc
-#define        o_tmpfree       o_tmpmfuncs->bmf_free
        void    *o_private;     /* anything the backend needs */
 
        LDAP_STAILQ_ENTRY(slap_op)      o_next; /* next operation in list         */
 
-
        int o_nocaching;
        int     o_delete_glue_parent;
 
-#ifdef LDAP_SLAPI
-       void    *o_pb;                  /* NS-SLAPI plugin */
-       void    *o_extensions;          /* NS-SLAPI plugin */
-#endif
-
 } Operation;
 
 #define send_ldap_error( op, rs, err, text ) do { \
index 391bb624445670b698093e2156942aa4ae86eef7..b7d192870617b2cf62cd0200ea4e5e7f05632bc3 100644 (file)
@@ -39,8 +39,9 @@ slapacl( int argc, char **argv )
 {
        int                     rc = EXIT_SUCCESS;
        const char              *progname = "slapacl";
-       Connection              conn;
-       Operation               op;
+       Connection              conn = {0};
+       Operation               op = {0};
+       Opheader                ohdr = {0};
        Entry                   e = { 0 };
        char                    *attr = NULL;
 
@@ -49,10 +50,7 @@ slapacl( int argc, char **argv )
        argv = &argv[ optind ];
        argc -= optind;
 
-       memset( &conn, 0, sizeof( Connection ) );
-       memset( &op, 0, sizeof( Operation ) );
-
-       connection_fake_init( &conn, &op, &conn );
+       connection_fake_init( &conn, &op, &ohdr, &conn );
 
        if ( !BER_BVISNULL( &authcID ) ) {
                rc = slap_sasl_getdn( &conn, &op, &authcID, NULL,
index 8952c935b11a7219bef298bbdebd5330eb59f279..06dd27709d50529250e30993ec36cf8d866e26b0 100644 (file)
@@ -79,18 +79,16 @@ slapauth( int argc, char **argv )
 {
        int                     rc = EXIT_SUCCESS;
        const char              *progname = "slapauth";
-       Connection              conn;
-       Operation               op;
+       Connection              conn = {0};
+       Operation               op = {0};
+       Opheader                ohdr = {0};
 
        slap_tool_init( progname, SLAPAUTH, argc, argv );
 
        argv = &argv[ optind ];
        argc -= optind;
 
-       memset( &conn, 0, sizeof( Connection ) );
-       memset( &op, 0, sizeof( Operation ) );
-
-       connection_fake_init( &conn, &op, &conn );
+       connection_fake_init( &conn, &op, &ohdr, &conn );
 
        if ( !BER_BVISNULL( &authzID ) ) {
                struct berval   authzdn;
index f5d028d1f4008cc17e57bd3216eb3f7dce652d65..d9f01d29de955c9cc4229a1a78ca541187b3b580 100644 (file)
@@ -890,6 +890,7 @@ do_syncrepl(
        syncinfo_t *si = ( syncinfo_t * ) rtask->arg;
        Connection conn = {0};
        Operation op = {0};
+       Opheader ohdr = {0};
        int rc = LDAP_SUCCESS;
        int first = 0;
        int dostop = 0;
@@ -918,7 +919,7 @@ do_syncrepl(
                return NULL;
        }
 
-       connection_fake_init( &conn, &op, ctx );
+       connection_fake_init( &conn, &op, &ohdr, ctx );
 
        /* use global malloc for now */
        op.o_tmpmemctx = NULL;