params.c revision 1.1.1.1.6.2 1 1.1.1.1.6.2 wrstuden /* $OpenLDAP: pkg/ldap/libraries/librewrite/params.c,v 1.9.2.3 2008/02/11 23:26:42 kurt Exp $ */
2 1.1.1.1.6.2 wrstuden /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
3 1.1.1.1.6.2 wrstuden *
4 1.1.1.1.6.2 wrstuden * Copyright 2000-2008 The OpenLDAP Foundation.
5 1.1.1.1.6.2 wrstuden * All rights reserved.
6 1.1.1.1.6.2 wrstuden *
7 1.1.1.1.6.2 wrstuden * Redistribution and use in source and binary forms, with or without
8 1.1.1.1.6.2 wrstuden * modification, are permitted only as authorized by the OpenLDAP
9 1.1.1.1.6.2 wrstuden * Public License.
10 1.1.1.1.6.2 wrstuden *
11 1.1.1.1.6.2 wrstuden * A copy of this license is available in the file LICENSE in the
12 1.1.1.1.6.2 wrstuden * top-level directory of the distribution or, alternatively, at
13 1.1.1.1.6.2 wrstuden * <http://www.OpenLDAP.org/license.html>.
14 1.1.1.1.6.2 wrstuden */
15 1.1.1.1.6.2 wrstuden /* ACKNOWLEDGEMENT:
16 1.1.1.1.6.2 wrstuden * This work was initially developed by Pierangelo Masarati for
17 1.1.1.1.6.2 wrstuden * inclusion in OpenLDAP Software.
18 1.1.1.1.6.2 wrstuden */
19 1.1.1.1.6.2 wrstuden
20 1.1.1.1.6.2 wrstuden #include <portable.h>
21 1.1.1.1.6.2 wrstuden
22 1.1.1.1.6.2 wrstuden #include "rewrite-int.h"
23 1.1.1.1.6.2 wrstuden
24 1.1.1.1.6.2 wrstuden /*
25 1.1.1.1.6.2 wrstuden * Defines and inits a variable with global scope
26 1.1.1.1.6.2 wrstuden */
27 1.1.1.1.6.2 wrstuden int
28 1.1.1.1.6.2 wrstuden rewrite_param_set(
29 1.1.1.1.6.2 wrstuden struct rewrite_info *info,
30 1.1.1.1.6.2 wrstuden const char *name,
31 1.1.1.1.6.2 wrstuden const char *value
32 1.1.1.1.6.2 wrstuden )
33 1.1.1.1.6.2 wrstuden {
34 1.1.1.1.6.2 wrstuden struct rewrite_var *var;
35 1.1.1.1.6.2 wrstuden
36 1.1.1.1.6.2 wrstuden assert( info != NULL );
37 1.1.1.1.6.2 wrstuden assert( name != NULL );
38 1.1.1.1.6.2 wrstuden assert( value != NULL );
39 1.1.1.1.6.2 wrstuden
40 1.1.1.1.6.2 wrstuden #ifdef USE_REWRITE_LDAP_PVT_THREADS
41 1.1.1.1.6.2 wrstuden ldap_pvt_thread_rdwr_wlock( &info->li_params_mutex );
42 1.1.1.1.6.2 wrstuden #endif /* USE_REWRITE_LDAP_PVT_THREADS */
43 1.1.1.1.6.2 wrstuden
44 1.1.1.1.6.2 wrstuden var = rewrite_var_find( info->li_params, name );
45 1.1.1.1.6.2 wrstuden if ( var != NULL ) {
46 1.1.1.1.6.2 wrstuden assert( var->lv_value.bv_val != NULL );
47 1.1.1.1.6.2 wrstuden free( var->lv_value.bv_val );
48 1.1.1.1.6.2 wrstuden var->lv_value.bv_val = strdup( value );
49 1.1.1.1.6.2 wrstuden var->lv_value.bv_len = strlen( value );
50 1.1.1.1.6.2 wrstuden } else {
51 1.1.1.1.6.2 wrstuden var = rewrite_var_insert( &info->li_params, name, value );
52 1.1.1.1.6.2 wrstuden if ( var == NULL ) {
53 1.1.1.1.6.2 wrstuden #ifdef USE_REWRITE_LDAP_PVT_THREADS
54 1.1.1.1.6.2 wrstuden ldap_pvt_thread_rdwr_wunlock( &info->li_params_mutex );
55 1.1.1.1.6.2 wrstuden #endif /* USE_REWRITE_LDAP_PVT_THREADS */
56 1.1.1.1.6.2 wrstuden return REWRITE_ERR;
57 1.1.1.1.6.2 wrstuden }
58 1.1.1.1.6.2 wrstuden }
59 1.1.1.1.6.2 wrstuden
60 1.1.1.1.6.2 wrstuden #ifdef USE_REWRITE_LDAP_PVT_THREADS
61 1.1.1.1.6.2 wrstuden ldap_pvt_thread_rdwr_wunlock( &info->li_params_mutex );
62 1.1.1.1.6.2 wrstuden #endif /* USE_REWRITE_LDAP_PVT_THREADS */
63 1.1.1.1.6.2 wrstuden
64 1.1.1.1.6.2 wrstuden return REWRITE_SUCCESS;
65 1.1.1.1.6.2 wrstuden }
66 1.1.1.1.6.2 wrstuden
67 1.1.1.1.6.2 wrstuden /*
68 1.1.1.1.6.2 wrstuden * Gets a var with global scope
69 1.1.1.1.6.2 wrstuden */
70 1.1.1.1.6.2 wrstuden int
71 1.1.1.1.6.2 wrstuden rewrite_param_get(
72 1.1.1.1.6.2 wrstuden struct rewrite_info *info,
73 1.1.1.1.6.2 wrstuden const char *name,
74 1.1.1.1.6.2 wrstuden struct berval *value
75 1.1.1.1.6.2 wrstuden )
76 1.1.1.1.6.2 wrstuden {
77 1.1.1.1.6.2 wrstuden struct rewrite_var *var;
78 1.1.1.1.6.2 wrstuden
79 1.1.1.1.6.2 wrstuden assert( info != NULL );
80 1.1.1.1.6.2 wrstuden assert( name != NULL );
81 1.1.1.1.6.2 wrstuden assert( value != NULL );
82 1.1.1.1.6.2 wrstuden
83 1.1.1.1.6.2 wrstuden value->bv_val = NULL;
84 1.1.1.1.6.2 wrstuden value->bv_len = 0;
85 1.1.1.1.6.2 wrstuden
86 1.1.1.1.6.2 wrstuden #ifdef USE_REWRITE_LDAP_PVT_THREADS
87 1.1.1.1.6.2 wrstuden ldap_pvt_thread_rdwr_rlock( &info->li_params_mutex );
88 1.1.1.1.6.2 wrstuden #endif /* USE_REWRITE_LDAP_PVT_THREADS */
89 1.1.1.1.6.2 wrstuden
90 1.1.1.1.6.2 wrstuden var = rewrite_var_find( info->li_params, name );
91 1.1.1.1.6.2 wrstuden if ( var == NULL ) {
92 1.1.1.1.6.2 wrstuden
93 1.1.1.1.6.2 wrstuden #ifdef USE_REWRITE_LDAP_PVT_THREADS
94 1.1.1.1.6.2 wrstuden ldap_pvt_thread_rdwr_runlock( &info->li_params_mutex );
95 1.1.1.1.6.2 wrstuden #endif /* USE_REWRITE_LDAP_PVT_THREADS */
96 1.1.1.1.6.2 wrstuden
97 1.1.1.1.6.2 wrstuden return REWRITE_ERR;
98 1.1.1.1.6.2 wrstuden } else {
99 1.1.1.1.6.2 wrstuden value->bv_val = strdup( var->lv_value.bv_val );
100 1.1.1.1.6.2 wrstuden value->bv_len = var->lv_value.bv_len;
101 1.1.1.1.6.2 wrstuden }
102 1.1.1.1.6.2 wrstuden
103 1.1.1.1.6.2 wrstuden #ifdef USE_REWRITE_LDAP_PVT_THREADS
104 1.1.1.1.6.2 wrstuden ldap_pvt_thread_rdwr_runlock( &info->li_params_mutex );
105 1.1.1.1.6.2 wrstuden #endif /* USE_REWRITE_LDAP_PVT_THREADS */
106 1.1.1.1.6.2 wrstuden
107 1.1.1.1.6.2 wrstuden return REWRITE_SUCCESS;
108 1.1.1.1.6.2 wrstuden }
109 1.1.1.1.6.2 wrstuden
110 1.1.1.1.6.2 wrstuden static void
111 1.1.1.1.6.2 wrstuden rewrite_param_free(
112 1.1.1.1.6.2 wrstuden void *tmp
113 1.1.1.1.6.2 wrstuden )
114 1.1.1.1.6.2 wrstuden {
115 1.1.1.1.6.2 wrstuden struct rewrite_var *var = ( struct rewrite_var * )tmp;
116 1.1.1.1.6.2 wrstuden assert( var != NULL );
117 1.1.1.1.6.2 wrstuden
118 1.1.1.1.6.2 wrstuden assert( var->lv_name != NULL );
119 1.1.1.1.6.2 wrstuden assert( var->lv_value.bv_val != NULL );
120 1.1.1.1.6.2 wrstuden
121 1.1.1.1.6.2 wrstuden free( var->lv_name );
122 1.1.1.1.6.2 wrstuden free( var->lv_value.bv_val );
123 1.1.1.1.6.2 wrstuden free( var );
124 1.1.1.1.6.2 wrstuden }
125 1.1.1.1.6.2 wrstuden
126 1.1.1.1.6.2 wrstuden /*
127 1.1.1.1.6.2 wrstuden * Destroys the parameter tree
128 1.1.1.1.6.2 wrstuden */
129 1.1.1.1.6.2 wrstuden int
130 1.1.1.1.6.2 wrstuden rewrite_param_destroy(
131 1.1.1.1.6.2 wrstuden struct rewrite_info *info
132 1.1.1.1.6.2 wrstuden )
133 1.1.1.1.6.2 wrstuden {
134 1.1.1.1.6.2 wrstuden int count;
135 1.1.1.1.6.2 wrstuden
136 1.1.1.1.6.2 wrstuden assert( info != NULL );
137 1.1.1.1.6.2 wrstuden
138 1.1.1.1.6.2 wrstuden #ifdef USE_REWRITE_LDAP_PVT_THREADS
139 1.1.1.1.6.2 wrstuden ldap_pvt_thread_rdwr_wlock( &info->li_params_mutex );
140 1.1.1.1.6.2 wrstuden #endif /* USE_REWRITE_LDAP_PVT_THREADS */
141 1.1.1.1.6.2 wrstuden
142 1.1.1.1.6.2 wrstuden count = avl_free( info->li_params, rewrite_param_free );
143 1.1.1.1.6.2 wrstuden info->li_params = NULL;
144 1.1.1.1.6.2 wrstuden
145 1.1.1.1.6.2 wrstuden #ifdef USE_REWRITE_LDAP_PVT_THREADS
146 1.1.1.1.6.2 wrstuden ldap_pvt_thread_rdwr_wunlock( &info->li_params_mutex );
147 1.1.1.1.6.2 wrstuden #endif /* USE_REWRITE_LDAP_PVT_THREADS */
148 1.1.1.1.6.2 wrstuden
149 1.1.1.1.6.2 wrstuden return REWRITE_SUCCESS;
150 1.1.1.1.6.2 wrstuden }
151 1.1.1.1.6.2 wrstuden
152