~ubuntu-branches/ubuntu/oneiric/likewise-open/oneiric

« back to all changes in this revision

Viewing changes to openldap/contrib/slapd-modules/trace/trace.c

  • Committer: Bazaar Package Importer
  • Author(s): Scott Salley
  • Date: 2010-11-22 12:06:00 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20101122120600-8lba1fpceot71wlb
Tags: 6.0.0.53010-1
Likewise Open 6.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* trace.c - traces overlay invocation */
 
2
/* $OpenLDAP: pkg/ldap/contrib/slapd-modules/trace/trace.c,v 1.2.2.4 2009/01/22 00:00:46 kurt Exp $ */
 
3
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
 
4
 *
 
5
 * Copyright 2006-2009 The OpenLDAP Foundation.
 
6
 * All rights reserved.
 
7
 *
 
8
 * Redistribution and use in source and binary forms, with or without
 
9
 * modification, are permitted only as authorized by the OpenLDAP
 
10
 * Public License.
 
11
 *
 
12
 * A copy of this license is available in the file LICENSE in the
 
13
 * top-level directory of the distribution or, alternatively, at
 
14
 * <http://www.OpenLDAP.org/license.html>.
 
15
 */
 
16
/* ACKNOWLEDGEMENTS:
 
17
 * This work was initially developed by Pierangelo Masarati for inclusion in
 
18
 * OpenLDAP Software.
 
19
 */
 
20
 
 
21
#include "portable.h"
 
22
 
 
23
#ifdef SLAPD_OVER_TRACE
 
24
 
 
25
#include <stdio.h>
 
26
 
 
27
#include <ac/string.h>
 
28
#include <ac/socket.h>
 
29
 
 
30
#include "slap.h"
 
31
#include "lutil.h"
 
32
 
 
33
static int
 
34
trace_op2str( Operation *op, char **op_strp )
 
35
{
 
36
        switch ( op->o_tag ) {
 
37
        case LDAP_REQ_BIND:
 
38
                *op_strp = "BIND";
 
39
                break;
 
40
 
 
41
        case LDAP_REQ_UNBIND:
 
42
                *op_strp = "UNBIND";
 
43
                break;
 
44
 
 
45
        case LDAP_REQ_SEARCH:
 
46
                *op_strp = "SEARCH";
 
47
                break;
 
48
 
 
49
        case LDAP_REQ_MODIFY:
 
50
                *op_strp = "MODIFY";
 
51
                break;
 
52
 
 
53
        case LDAP_REQ_ADD:
 
54
                *op_strp = "ADD";
 
55
                break;
 
56
 
 
57
        case LDAP_REQ_DELETE:
 
58
                *op_strp = "DELETE";
 
59
                break;
 
60
 
 
61
        case LDAP_REQ_MODRDN:
 
62
                *op_strp = "MODRDN";
 
63
                break;
 
64
 
 
65
        case LDAP_REQ_COMPARE:
 
66
                *op_strp = "COMPARE";
 
67
                break;
 
68
 
 
69
        case LDAP_REQ_ABANDON:
 
70
                *op_strp = "ABANDON";
 
71
                break;
 
72
 
 
73
        case LDAP_REQ_EXTENDED:
 
74
                *op_strp = "EXTENDED";
 
75
                break;
 
76
 
 
77
        default:
 
78
                assert( 0 );
 
79
        }
 
80
 
 
81
        return 0;
 
82
}
 
83
 
 
84
static int
 
85
trace_op_func( Operation *op, SlapReply *rs )
 
86
{
 
87
        char    *op_str = NULL;
 
88
 
 
89
        (void)trace_op2str( op, &op_str );
 
90
 
 
91
        switch ( op->o_tag ) {
 
92
        case LDAP_REQ_EXTENDED:
 
93
                Log3( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
94
                        "%s trace op=EXTENDED dn=\"%s\" reqoid=%s\n",
 
95
                        op->o_log_prefix,
 
96
                        BER_BVISNULL( &op->o_req_ndn ) ? "(null)" : op->o_req_ndn.bv_val,
 
97
                        BER_BVISNULL( &op->ore_reqoid ) ? "" : op->ore_reqoid.bv_val );
 
98
                break;
 
99
 
 
100
        default:
 
101
                Log3( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
102
                        "%s trace op=%s dn=\"%s\"\n",
 
103
                        op->o_log_prefix, op_str,
 
104
                        BER_BVISNULL( &op->o_req_ndn ) ? "(null)" : op->o_req_ndn.bv_val );
 
105
                break;
 
106
        }
 
107
 
 
108
        return SLAP_CB_CONTINUE;
 
109
}
 
110
 
 
111
static int
 
112
trace_response( Operation *op, SlapReply *rs )
 
113
{
 
114
        char    *op_str = NULL;
 
115
 
 
116
        (void)trace_op2str( op, &op_str );
 
117
 
 
118
        switch ( op->o_tag ) {
 
119
        case LDAP_REQ_EXTENDED:
 
120
                Log5( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
121
                        "%s trace op=EXTENDED RESPONSE dn=\"%s\" reqoid=%s rspoid=%s err=%d\n",
 
122
                        op->o_log_prefix,
 
123
                        BER_BVISNULL( &op->o_req_ndn ) ? "(null)" : op->o_req_ndn.bv_val,
 
124
                        BER_BVISNULL( &op->ore_reqoid ) ? "" : op->ore_reqoid.bv_val,
 
125
                        rs->sr_rspoid == NULL ? "" : rs->sr_rspoid,
 
126
                        rs->sr_err );
 
127
                break;
 
128
 
 
129
        case LDAP_REQ_SEARCH:
 
130
                switch ( rs->sr_type ) {
 
131
                case REP_SEARCH:
 
132
                        Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
133
                                "%s trace op=SEARCH ENTRY dn=\"%s\"\n",
 
134
                                op->o_log_prefix,
 
135
                                rs->sr_entry->e_name.bv_val );
 
136
                        goto done;
 
137
 
 
138
                case REP_SEARCHREF:
 
139
                        Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
140
                                "%s trace op=SEARCH REFERENCE ref=\"%s\"\n",
 
141
                                op->o_log_prefix,
 
142
                                rs->sr_ref[ 0 ].bv_val );
 
143
                        goto done;
 
144
 
 
145
                case REP_RESULT:
 
146
                        break;
 
147
 
 
148
                default:
 
149
                        assert( 0 );
 
150
                }
 
151
                /* fallthru */
 
152
 
 
153
        default:
 
154
                Log4( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
155
                        "%s trace op=%s RESPONSE dn=\"%s\" err=%d\n",
 
156
                        op->o_log_prefix,
 
157
                        op_str,
 
158
                        BER_BVISNULL( &op->o_req_ndn ) ? "(null)" : op->o_req_ndn.bv_val,
 
159
                        rs->sr_err );
 
160
                break;
 
161
        }
 
162
 
 
163
done:;
 
164
        return SLAP_CB_CONTINUE;
 
165
}
 
166
 
 
167
static int
 
168
trace_db_init(
 
169
        BackendDB *be )
 
170
{
 
171
        Log0( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
172
                "trace DB_INIT\n" );
 
173
 
 
174
        return 0;
 
175
}
 
176
 
 
177
static int
 
178
trace_db_config(
 
179
        BackendDB       *be,
 
180
        const char      *fname,
 
181
        int             lineno,
 
182
        int             argc,
 
183
        char            **argv )
 
184
{
 
185
        Log2( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
186
                "trace DB_CONFIG argc=%d argv[0]=\"%s\"\n",
 
187
                argc, argv[ 0 ] );
 
188
 
 
189
        return 0;
 
190
}
 
191
 
 
192
static int
 
193
trace_db_open(
 
194
        BackendDB *be )
 
195
{
 
196
        Log0( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
197
                "trace DB_OPEN\n" );
 
198
 
 
199
        return 0;
 
200
}
 
201
 
 
202
static int
 
203
trace_db_close(
 
204
        BackendDB *be )
 
205
{
 
206
        Log0( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
207
                "trace DB_CLOSE\n" );
 
208
 
 
209
        return 0;
 
210
}
 
211
 
 
212
static int
 
213
trace_db_destroy(
 
214
        BackendDB *be )
 
215
{
 
216
        Log0( LDAP_DEBUG_ANY, LDAP_LEVEL_INFO,
 
217
                "trace DB_DESTROY\n" );
 
218
 
 
219
        return 0;
 
220
}
 
221
 
 
222
static slap_overinst            trace;
 
223
 
 
224
int
 
225
trace_initialize()
 
226
{
 
227
        trace.on_bi.bi_type = "trace";
 
228
 
 
229
        trace.on_bi.bi_db_init = trace_db_init;
 
230
        trace.on_bi.bi_db_open = trace_db_open;
 
231
        trace.on_bi.bi_db_config = trace_db_config;
 
232
        trace.on_bi.bi_db_close = trace_db_close;
 
233
        trace.on_bi.bi_db_destroy = trace_db_destroy;
 
234
 
 
235
        trace.on_bi.bi_op_add = trace_op_func;
 
236
        trace.on_bi.bi_op_bind = trace_op_func;
 
237
        trace.on_bi.bi_op_unbind = trace_op_func;
 
238
        trace.on_bi.bi_op_compare = trace_op_func;
 
239
        trace.on_bi.bi_op_delete = trace_op_func;
 
240
        trace.on_bi.bi_op_modify = trace_op_func;
 
241
        trace.on_bi.bi_op_modrdn = trace_op_func;
 
242
        trace.on_bi.bi_op_search = trace_op_func;
 
243
        trace.on_bi.bi_op_abandon = trace_op_func;
 
244
        trace.on_bi.bi_extended = trace_op_func;
 
245
 
 
246
        trace.on_response = trace_response;
 
247
 
 
248
        return overlay_register( &trace );
 
249
}
 
250
 
 
251
#if SLAPD_OVER_TRACE == SLAPD_MOD_DYNAMIC
 
252
int
 
253
init_module( int argc, char *argv[] )
 
254
{
 
255
        return trace_initialize();
 
256
}
 
257
#endif /* SLAPD_OVER_TRACE == SLAPD_MOD_DYNAMIC */
 
258
 
 
259
#endif /* defined(SLAPD_OVER_TRACE) */