str_meth.c revision 296465
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
64STORE_METHOD *STORE_create_method(char *name)
65{
66    STORE_METHOD *store_method =
67        (STORE_METHOD *)OPENSSL_malloc(sizeof(STORE_METHOD));
68
69    if (store_method) {
70        memset(store_method, 0, sizeof(*store_method));
71        store_method->name = BUF_strdup(name);
72    }
73    return store_method;
74}
75
76/*
77 * BIG FSCKING WARNING!!!! If you use this on a statically allocated method
78 * (that is, it hasn't been allocated using STORE_create_method(), you
79 * deserve anything Murphy can throw at you and more! You have been warned.
80 */
81void STORE_destroy_method(STORE_METHOD *store_method)
82{
83    if (!store_method)
84        return;
85    OPENSSL_free(store_method->name);
86    store_method->name = NULL;
87    OPENSSL_free(store_method);
88}
89
90int STORE_method_set_initialise_function(STORE_METHOD *sm,
91                                         STORE_INITIALISE_FUNC_PTR init_f)
92{
93    sm->init = init_f;
94    return 1;
95}
96
97int STORE_method_set_cleanup_function(STORE_METHOD *sm,
98                                      STORE_CLEANUP_FUNC_PTR clean_f)
99{
100    sm->clean = clean_f;
101    return 1;
102}
103
104int STORE_method_set_generate_function(STORE_METHOD *sm,
105                                       STORE_GENERATE_OBJECT_FUNC_PTR
106                                       generate_f)
107{
108    sm->generate_object = generate_f;
109    return 1;
110}
111
112int STORE_method_set_get_function(STORE_METHOD *sm,
113                                  STORE_GET_OBJECT_FUNC_PTR get_f)
114{
115    sm->get_object = get_f;
116    return 1;
117}
118
119int STORE_method_set_store_function(STORE_METHOD *sm,
120                                    STORE_STORE_OBJECT_FUNC_PTR store_f)
121{
122    sm->store_object = store_f;
123    return 1;
124}
125
126int STORE_method_set_modify_function(STORE_METHOD *sm,
127                                     STORE_MODIFY_OBJECT_FUNC_PTR modify_f)
128{
129    sm->modify_object = modify_f;
130    return 1;
131}
132
133int STORE_method_set_revoke_function(STORE_METHOD *sm,
134                                     STORE_HANDLE_OBJECT_FUNC_PTR revoke_f)
135{
136    sm->revoke_object = revoke_f;
137    return 1;
138}
139
140int STORE_method_set_delete_function(STORE_METHOD *sm,
141                                     STORE_HANDLE_OBJECT_FUNC_PTR delete_f)
142{
143    sm->delete_object = delete_f;
144    return 1;
145}
146
147int STORE_method_set_list_start_function(STORE_METHOD *sm,
148                                         STORE_START_OBJECT_FUNC_PTR
149                                         list_start_f)
150{
151    sm->list_object_start = list_start_f;
152    return 1;
153}
154
155int STORE_method_set_list_next_function(STORE_METHOD *sm,
156                                        STORE_NEXT_OBJECT_FUNC_PTR
157                                        list_next_f)
158{
159    sm->list_object_next = list_next_f;
160    return 1;
161}
162
163int STORE_method_set_list_end_function(STORE_METHOD *sm,
164                                       STORE_END_OBJECT_FUNC_PTR list_end_f)
165{
166    sm->list_object_end = list_end_f;
167    return 1;
168}
169
170int STORE_method_set_update_store_function(STORE_METHOD *sm,
171                                           STORE_GENERIC_FUNC_PTR update_f)
172{
173    sm->update_store = update_f;
174    return 1;
175}
176
177int STORE_method_set_lock_store_function(STORE_METHOD *sm,
178                                         STORE_GENERIC_FUNC_PTR lock_f)
179{
180    sm->lock_store = lock_f;
181    return 1;
182}
183
184int STORE_method_set_unlock_store_function(STORE_METHOD *sm,
185                                           STORE_GENERIC_FUNC_PTR unlock_f)
186{
187    sm->unlock_store = unlock_f;
188    return 1;
189}
190
191int STORE_method_set_ctrl_function(STORE_METHOD *sm,
192                                   STORE_CTRL_FUNC_PTR ctrl_f)
193{
194    sm->ctrl = ctrl_f;
195    return 1;
196}
197
198STORE_INITIALISE_FUNC_PTR STORE_method_get_initialise_function(STORE_METHOD
199                                                               *sm)
200{
201    return sm->init;
202}
203
204STORE_CLEANUP_FUNC_PTR STORE_method_get_cleanup_function(STORE_METHOD *sm)
205{
206    return sm->clean;
207}
208
209STORE_GENERATE_OBJECT_FUNC_PTR STORE_method_get_generate_function(STORE_METHOD
210                                                                  *sm)
211{
212    return sm->generate_object;
213}
214
215STORE_GET_OBJECT_FUNC_PTR STORE_method_get_get_function(STORE_METHOD *sm)
216{
217    return sm->get_object;
218}
219
220STORE_STORE_OBJECT_FUNC_PTR STORE_method_get_store_function(STORE_METHOD *sm)
221{
222    return sm->store_object;
223}
224
225STORE_MODIFY_OBJECT_FUNC_PTR STORE_method_get_modify_function(STORE_METHOD
226                                                              *sm)
227{
228    return sm->modify_object;
229}
230
231STORE_HANDLE_OBJECT_FUNC_PTR STORE_method_get_revoke_function(STORE_METHOD
232                                                              *sm)
233{
234    return sm->revoke_object;
235}
236
237STORE_HANDLE_OBJECT_FUNC_PTR STORE_method_get_delete_function(STORE_METHOD
238                                                              *sm)
239{
240    return sm->delete_object;
241}
242
243STORE_START_OBJECT_FUNC_PTR STORE_method_get_list_start_function(STORE_METHOD
244                                                                 *sm)
245{
246    return sm->list_object_start;
247}
248
249STORE_NEXT_OBJECT_FUNC_PTR STORE_method_get_list_next_function(STORE_METHOD
250                                                               *sm)
251{
252    return sm->list_object_next;
253}
254
255STORE_END_OBJECT_FUNC_PTR STORE_method_get_list_end_function(STORE_METHOD *sm)
256{
257    return sm->list_object_end;
258}
259
260STORE_GENERIC_FUNC_PTR STORE_method_get_update_store_function(STORE_METHOD
261                                                              *sm)
262{
263    return sm->update_store;
264}
265
266STORE_GENERIC_FUNC_PTR STORE_method_get_lock_store_function(STORE_METHOD *sm)
267{
268    return sm->lock_store;
269}
270
271STORE_GENERIC_FUNC_PTR STORE_method_get_unlock_store_function(STORE_METHOD
272                                                              *sm)
273{
274    return sm->unlock_store;
275}
276
277STORE_CTRL_FUNC_PTR STORE_method_get_ctrl_function(STORE_METHOD *sm)
278{
279    return sm->ctrl;
280}
281