Use safer sizeof variant in malloc
[openssl.git] / crypto / store / str_meth.c
1 /* crypto/store/str_meth.c -*- mode:C; c-file-style: "eay" -*- */
2 /*
3  * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project
4  * 2003.
5  */
6 /* ====================================================================
7  * Copyright (c) 2003 The OpenSSL Project.  All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in
18  *    the documentation and/or other materials provided with the
19  *    distribution.
20  *
21  * 3. All advertising materials mentioning features or use of this
22  *    software must display the following acknowledgment:
23  *    "This product includes software developed by the OpenSSL Project
24  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
25  *
26  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27  *    endorse or promote products derived from this software without
28  *    prior written permission. For written permission, please contact
29  *    openssl-core@openssl.org.
30  *
31  * 5. Products derived from this software may not be called "OpenSSL"
32  *    nor may "OpenSSL" appear in their names without prior written
33  *    permission of the OpenSSL Project.
34  *
35  * 6. Redistributions of any form whatsoever must retain the following
36  *    acknowledgment:
37  *    "This product includes software developed by the OpenSSL Project
38  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
39  *
40  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
44  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51  * OF THE POSSIBILITY OF SUCH DAMAGE.
52  * ====================================================================
53  *
54  * This product includes cryptographic software written by Eric Young
55  * (eay@cryptsoft.com).  This product includes software written by Tim
56  * Hudson (tjh@cryptsoft.com).
57  *
58  */
59
60 #include <string.h>
61 #include <openssl/buffer.h>
62 #include "str_locl.h"
63
64 STORE_METHOD *STORE_create_method(char *name)
65 {
66     STORE_METHOD *store_method = OPENSSL_malloc(sizeof(*store_method));
67
68     if (store_method) {
69         memset(store_method, 0, sizeof(*store_method));
70         store_method->name = BUF_strdup(name);
71     }
72     return store_method;
73 }
74
75 /*
76  * BIG FSCKING WARNING!!!! If you use this on a statically allocated method
77  * (that is, it hasn't been allocated using STORE_create_method(), you
78  * deserve anything Murphy can throw at you and more! You have been warned.
79  */
80 void STORE_destroy_method(STORE_METHOD *store_method)
81 {
82     if (!store_method)
83         return;
84     OPENSSL_free(store_method->name);
85     store_method->name = NULL;
86     OPENSSL_free(store_method);
87 }
88
89 int STORE_method_set_initialise_function(STORE_METHOD *sm,
90                                          STORE_INITIALISE_FUNC_PTR init_f)
91 {
92     sm->init = init_f;
93     return 1;
94 }
95
96 int STORE_method_set_cleanup_function(STORE_METHOD *sm,
97                                       STORE_CLEANUP_FUNC_PTR clean_f)
98 {
99     sm->clean = clean_f;
100     return 1;
101 }
102
103 int STORE_method_set_generate_function(STORE_METHOD *sm,
104                                        STORE_GENERATE_OBJECT_FUNC_PTR
105                                        generate_f)
106 {
107     sm->generate_object = generate_f;
108     return 1;
109 }
110
111 int STORE_method_set_get_function(STORE_METHOD *sm,
112                                   STORE_GET_OBJECT_FUNC_PTR get_f)
113 {
114     sm->get_object = get_f;
115     return 1;
116 }
117
118 int STORE_method_set_store_function(STORE_METHOD *sm,
119                                     STORE_STORE_OBJECT_FUNC_PTR store_f)
120 {
121     sm->store_object = store_f;
122     return 1;
123 }
124
125 int STORE_method_set_modify_function(STORE_METHOD *sm,
126                                      STORE_MODIFY_OBJECT_FUNC_PTR modify_f)
127 {
128     sm->modify_object = modify_f;
129     return 1;
130 }
131
132 int STORE_method_set_revoke_function(STORE_METHOD *sm,
133                                      STORE_HANDLE_OBJECT_FUNC_PTR revoke_f)
134 {
135     sm->revoke_object = revoke_f;
136     return 1;
137 }
138
139 int STORE_method_set_delete_function(STORE_METHOD *sm,
140                                      STORE_HANDLE_OBJECT_FUNC_PTR delete_f)
141 {
142     sm->delete_object = delete_f;
143     return 1;
144 }
145
146 int STORE_method_set_list_start_function(STORE_METHOD *sm,
147                                          STORE_START_OBJECT_FUNC_PTR
148                                          list_start_f)
149 {
150     sm->list_object_start = list_start_f;
151     return 1;
152 }
153
154 int STORE_method_set_list_next_function(STORE_METHOD *sm,
155                                         STORE_NEXT_OBJECT_FUNC_PTR
156                                         list_next_f)
157 {
158     sm->list_object_next = list_next_f;
159     return 1;
160 }
161
162 int STORE_method_set_list_end_function(STORE_METHOD *sm,
163                                        STORE_END_OBJECT_FUNC_PTR list_end_f)
164 {
165     sm->list_object_end = list_end_f;
166     return 1;
167 }
168
169 int STORE_method_set_update_store_function(STORE_METHOD *sm,
170                                            STORE_GENERIC_FUNC_PTR update_f)
171 {
172     sm->update_store = update_f;
173     return 1;
174 }
175
176 int STORE_method_set_lock_store_function(STORE_METHOD *sm,
177                                          STORE_GENERIC_FUNC_PTR lock_f)
178 {
179     sm->lock_store = lock_f;
180     return 1;
181 }
182
183 int STORE_method_set_unlock_store_function(STORE_METHOD *sm,
184                                            STORE_GENERIC_FUNC_PTR unlock_f)
185 {
186     sm->unlock_store = unlock_f;
187     return 1;
188 }
189
190 int STORE_method_set_ctrl_function(STORE_METHOD *sm,
191                                    STORE_CTRL_FUNC_PTR ctrl_f)
192 {
193     sm->ctrl = ctrl_f;
194     return 1;
195 }
196
197 STORE_INITIALISE_FUNC_PTR STORE_method_get_initialise_function(STORE_METHOD
198                                                                *sm)
199 {
200     return sm->init;
201 }
202
203 STORE_CLEANUP_FUNC_PTR STORE_method_get_cleanup_function(STORE_METHOD *sm)
204 {
205     return sm->clean;
206 }
207
208 STORE_GENERATE_OBJECT_FUNC_PTR STORE_method_get_generate_function(STORE_METHOD
209                                                                   *sm)
210 {
211     return sm->generate_object;
212 }
213
214 STORE_GET_OBJECT_FUNC_PTR STORE_method_get_get_function(STORE_METHOD *sm)
215 {
216     return sm->get_object;
217 }
218
219 STORE_STORE_OBJECT_FUNC_PTR STORE_method_get_store_function(STORE_METHOD *sm)
220 {
221     return sm->store_object;
222 }
223
224 STORE_MODIFY_OBJECT_FUNC_PTR STORE_method_get_modify_function(STORE_METHOD
225                                                               *sm)
226 {
227     return sm->modify_object;
228 }
229
230 STORE_HANDLE_OBJECT_FUNC_PTR STORE_method_get_revoke_function(STORE_METHOD
231                                                               *sm)
232 {
233     return sm->revoke_object;
234 }
235
236 STORE_HANDLE_OBJECT_FUNC_PTR STORE_method_get_delete_function(STORE_METHOD
237                                                               *sm)
238 {
239     return sm->delete_object;
240 }
241
242 STORE_START_OBJECT_FUNC_PTR STORE_method_get_list_start_function(STORE_METHOD
243                                                                  *sm)
244 {
245     return sm->list_object_start;
246 }
247
248 STORE_NEXT_OBJECT_FUNC_PTR STORE_method_get_list_next_function(STORE_METHOD
249                                                                *sm)
250 {
251     return sm->list_object_next;
252 }
253
254 STORE_END_OBJECT_FUNC_PTR STORE_method_get_list_end_function(STORE_METHOD *sm)
255 {
256     return sm->list_object_end;
257 }
258
259 STORE_GENERIC_FUNC_PTR STORE_method_get_update_store_function(STORE_METHOD
260                                                               *sm)
261 {
262     return sm->update_store;
263 }
264
265 STORE_GENERIC_FUNC_PTR STORE_method_get_lock_store_function(STORE_METHOD *sm)
266 {
267     return sm->lock_store;
268 }
269
270 STORE_GENERIC_FUNC_PTR STORE_method_get_unlock_store_function(STORE_METHOD
271                                                               *sm)
272 {
273     return sm->unlock_store;
274 }
275
276 STORE_CTRL_FUNC_PTR STORE_method_get_ctrl_function(STORE_METHOD *sm)
277 {
278     return sm->ctrl;
279 }