Thu, 29 May 2025 15:17:01 +0200
add sha512 hashing functions
| 1 | 1 | /* |
| 2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
| 3 | * | |
|
44
3da1f7b6847f
added some error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
23
diff
changeset
|
4 | * Copyright 2013 Olaf Wintermann. All rights reserved. |
| 1 | 5 | * |
| 6 | * Redistribution and use in source and binary forms, with or without | |
| 7 | * modification, are permitted provided that the following conditions are met: | |
| 8 | * | |
| 9 | * 1. Redistributions of source code must retain the above copyright | |
| 10 | * notice, this list of conditions and the following disclaimer. | |
| 11 | * | |
| 12 | * 2. Redistributions in binary form must reproduce the above copyright | |
| 13 | * notice, this list of conditions and the following disclaimer in the | |
| 14 | * documentation and/or other materials provided with the distribution. | |
| 15 | * | |
| 16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| 17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
| 20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
| 21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
| 22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
| 23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
| 24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
| 25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
| 26 | * POSSIBILITY OF SUCH DAMAGE. | |
| 27 | */ | |
| 28 | ||
| 29 | ||
| 30 | #include <stdlib.h> | |
|
415
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
31 | #include <cx/map.h> |
|
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
32 | #include <cx/hash_map.h> |
| 1 | 33 | |
|
14
b8bf95b39952
New source folder layout
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
3
diff
changeset
|
34 | #include "../public/nsapi.h" |
|
23
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
35 | #include "../util/pblock.h" |
|
15
cff9c4101dd7
Replaced old utils with ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
14
diff
changeset
|
36 | |
| 1 | 37 | #include "func.h" |
| 38 | ||
|
415
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
39 | CxMap *function_map; |
| 1 | 40 | |
|
574
76450adae540
add saf function map cleanup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
490
diff
changeset
|
41 | static void funcstruct_free(FuncStruct *f) { |
|
76450adae540
add saf function map cleanup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
490
diff
changeset
|
42 | free((char*)f->name); |
|
76450adae540
add saf function map cleanup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
490
diff
changeset
|
43 | free(f); |
|
76450adae540
add saf function map cleanup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
490
diff
changeset
|
44 | } |
|
76450adae540
add saf function map cleanup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
490
diff
changeset
|
45 | |
| 1 | 46 | void func_init() { |
| 490 | 47 | function_map = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 256); |
| 579 | 48 | function_map->collection.simple_destructor = (cx_destructor_func)funcstruct_free; |
|
574
76450adae540
add saf function map cleanup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
490
diff
changeset
|
49 | } |
|
76450adae540
add saf function map cleanup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
490
diff
changeset
|
50 | |
|
76450adae540
add saf function map cleanup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
490
diff
changeset
|
51 | void func_cleanup() { |
| 579 | 52 | cxMapFree(function_map); |
| 1 | 53 | } |
| 54 | ||
|
20
7b235fa88008
Some fixes for mod_jk
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
55 | void add_function(FuncStruct *func) { |
| 1 | 56 | struct FuncStruct *f = malloc(sizeof(FuncStruct)); |
| 57 | *f = *func; | |
|
84
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
58 | char *name = strdup(func->name); |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
59 | for(int i=0;name[i]!='\0';i++) { |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
60 | if(name[i] == '_') { |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
61 | name[i] = '-'; |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
62 | } |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
63 | } |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
64 | f->name = name; |
|
115
51d9a15eac98
improves logging
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
92
diff
changeset
|
65 | log_ereport(LOG_VERBOSE, "add_function %s", f->name); |
|
415
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
66 | cxMapPut(function_map, cx_hash_key_str(f->name), f); |
| 1 | 67 | } |
| 68 | ||
|
20
7b235fa88008
Some fixes for mod_jk
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
69 | void add_functions(FuncStruct *funcs) { |
| 1 | 70 | int i = 0; |
| 71 | while(funcs[i].func != NULL) { | |
| 72 | add_function(&funcs[i]); | |
| 73 | i++; | |
| 74 | } | |
| 75 | } | |
| 76 | ||
|
415
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
77 | FuncStruct* get_function(const char *name) { |
|
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
78 | char *name_dup = strdup(name); |
|
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
79 | for(int i=0;name_dup[i]!='\0';i++) { |
|
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
80 | if(name_dup[i] == '_') { |
|
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
81 | name_dup[i] = '-'; |
|
84
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
82 | } |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
83 | } |
|
415
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
84 | void *ret = cxMapGet(function_map, cx_hash_key_str(name_dup)); |
|
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
85 | free(name_dup); |
|
d938228c382e
switch from ucx 2 to 3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
115
diff
changeset
|
86 | return ret; |
|
3
137197831306
minimal request handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
87 | } |
|
23
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
88 | |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
89 | FuncStruct* func_resolve(pblock *pb, Session *sn, Request *rq) { |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
90 | char *name = pblock_findkeyval(pb_key_fn, pb); |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
91 | if(name == NULL) { |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
92 | // TODO: error |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
93 | return NULL; |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
94 | } |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
95 | |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
96 | FuncStruct *func = get_function(name); |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
97 | if(func == NULL) { |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
98 | // TODO: error |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
99 | } |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
100 | return func; |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
101 | } |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
102 | |
| 54 | 103 | int func_exec(pblock *pb, Session *sn, Request *rq) { |
|
23
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
104 | FuncStruct *func = func_resolve(pb, sn, rq); |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
105 | if(func == NULL) { |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
106 | return REQ_ABORTED; |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
107 | } |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
108 | return func->func(pb, sn, rq); |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
109 | } |
|
a2c8fc23c90e
Added basic authentication
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
20
diff
changeset
|
110 | |
|
84
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
111 | |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
112 | |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
113 | |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
114 | // public API |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
115 | |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
116 | struct FuncStruct func_insert(char *name, FuncPtr fn) { |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
117 | struct FuncStruct fc; |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
118 | ZERO(&fc, sizeof(FuncStruct)); |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
119 | fc.func = fn; |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
120 | fc.name = strdup(name); |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
121 | add_function(&fc); |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
122 | return *get_function(name); |
|
afd57ce39ec9
added initial java plugin code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
123 | } |