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