Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | | - |
18 | | - |
19 | | - |
20 | #ifdef _MSC_VER | - |
21 | #define NO_REDEF_POSIX_FUNCTIONS | - |
22 | #endif | - |
23 | | - |
24 | #include <sys/stat.h> | - |
25 | | - |
26 | #include <stdlib.h> | - |
27 | #include <unistd.h> | - |
28 | #include <fcntl.h> | - |
29 | | - |
30 | #include "tls.h" | - |
31 | #include "tls_internal.h" | - |
32 | | - |
33 | static void * | - |
34 | memdup(const void *in, size_t len) | - |
35 | { | - |
36 | void *out; | - |
37 | | - |
38 | if ((out = malloc(len)) == NULL)TRUE | never evaluated | FALSE | evaluated 3 times by 1 test |
| 0-3 |
39 | return NULL; never executed: return ((void *)0) ; | 0 |
40 | memcpy(out, in, len); | - |
41 | return out;executed 3 times by 1 test: return out; | 3 |
42 | } | - |
43 | | - |
44 | int | - |
45 | tls_set_mem(char **dest, size_t *destlen, const void *src, size_t srclen) | - |
46 | { | - |
47 | free(*dest); | - |
48 | *dest = NULL; | - |
49 | *destlen = 0; | - |
50 | if (src != NULL)TRUE | evaluated 3 times by 1 test | FALSE | never evaluated |
| 0-3 |
51 | if ((*dest = memdup(src, srclen)) == NULL)TRUE | never evaluated | FALSE | evaluated 3 times by 1 test |
| 0-3 |
52 | return -1; never executed: return -1; | 0 |
53 | *destlen = srclen; | - |
54 | return 0;executed 3 times by 1 test: return 0; | 3 |
55 | } | - |
56 | | - |
57 | int | - |
58 | tls_set_string(const char **dest, const char *src) | - |
59 | { | - |
60 | free((char *)*dest); | - |
61 | *dest = NULL; | - |
62 | if (src != NULL)TRUE | evaluated 7 times by 3 testsEvaluated by:- configtest
- tlstest
- verifytest
| FALSE | never evaluated |
| 0-7 |
63 | if ((*dest = strdup(src)) == NULL) never executed: __retval = (char *) memcpy (__retval, src , __len); TRUE | never evaluated | FALSE | evaluated 7 times by 3 testsEvaluated by:- configtest
- tlstest
- verifytest
|
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | evaluated 7 times by 3 testsEvaluated by:- configtest
- tlstest
- verifytest
|
TRUE | never evaluated | FALSE | never evaluated |
| 0-7 |
64 | return -1; never executed: return -1; | 0 |
65 | return 0;executed 7 times by 3 tests: return 0; Executed by:- configtest
- tlstest
- verifytest
| 7 |
66 | } | - |
67 | | - |
68 | | - |
69 | | - |
70 | | - |
71 | | - |
72 | | - |
73 | | - |
74 | | - |
75 | | - |
76 | int | - |
77 | tls_host_port(const char *hostport, char **host, char **port) | - |
78 | { | - |
79 | char *h, *p, *s; | - |
80 | int rv = 1; | - |
81 | | - |
82 | *host = NULL; | - |
83 | *port = NULL; | - |
84 | | - |
85 | if ((s = strdup(hostport)) == NULL) never executed: __retval = (char *) memcpy (__retval, hostport , __len); TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
86 | goto err; never executed: goto err; | 0 |
87 | | - |
88 | h = p = s; | - |
89 | | - |
90 | | - |
91 | if (p[0] == '[') {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
92 | h++; | - |
93 | if ((p = strchr(s, ']')) == NULL)TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
94 | goto done; never executed: goto done; | 0 |
95 | *p++ = '\0'; | - |
96 | } never executed: end of block | 0 |
97 | | - |
98 | | - |
99 | if ((p = strchr(p, ':')) == NULL)TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
100 | goto done; never executed: goto done; | 0 |
101 | | - |
102 | | - |
103 | if (strchr(p + 1, ':') != NULL)TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
104 | goto done; never executed: goto done; | 0 |
105 | | - |
106 | *p++ = '\0'; | - |
107 | | - |
108 | if (asprintf(host, "%s", h) == -1)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
109 | goto err; never executed: goto err; | 0 |
110 | if (asprintf(port, "%s", p) == -1)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
111 | goto err; never executed: goto err; | 0 |
112 | | - |
113 | rv = 0; | - |
114 | goto done; never executed: goto done; | 0 |
115 | | - |
116 | err: | - |
117 | free(*host); | - |
118 | *host = NULL; | - |
119 | free(*port); | - |
120 | *port = NULL; | - |
121 | rv = -1; | - |
122 | | - |
123 | done: code before this statement never executed: done: | 0 |
124 | free(s); | - |
125 | | - |
126 | return (rv); never executed: return (rv); | 0 |
127 | } | - |
128 | | - |
129 | int | - |
130 | tls_password_cb(char *buf, int size, int rwflag, void *u) | - |
131 | { | - |
132 | size_t len; | - |
133 | | - |
134 | if (size < 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
135 | return (0); never executed: return (0); | 0 |
136 | | - |
137 | if (u == NULL) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
138 | memset(buf, 0, size); | - |
139 | return (0); never executed: return (0); | 0 |
140 | } | - |
141 | | - |
142 | if ((len = strlcpy(buf, u, size)) >= (size_t)size)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
143 | return (0); never executed: return (0); | 0 |
144 | | - |
145 | return (len); never executed: return (len); | 0 |
146 | } | - |
147 | | - |
148 | uint8_t * | - |
149 | tls_load_file(const char *name, size_t *len, char *password) | - |
150 | { | - |
151 | FILE *fp; | - |
152 | EVP_PKEY *key = NULL; | - |
153 | BIO *bio = NULL; | - |
154 | char *data; | - |
155 | uint8_t *buf = NULL; | - |
156 | struct stat st; | - |
157 | size_t size = 0; | - |
158 | int fd = -1; | - |
159 | ssize_t n; | - |
160 | | - |
161 | *len = 0; | - |
162 | | - |
163 | if ((fd = open(name, O_RDONLY)) == -1)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
164 | return (NULL); never executed: return ( ((void *)0) ); | 0 |
165 | | - |
166 | | - |
167 | if (password == NULL) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
168 | if (fstat(fd, &st) != 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
169 | goto err; never executed: goto err; | 0 |
170 | if (st.st_size < 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
171 | goto err; never executed: goto err; | 0 |
172 | size = (size_t)st.st_size; | - |
173 | if ((buf = malloc(size)) == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
174 | goto err; never executed: goto err; | 0 |
175 | n = read(fd, buf, size); | - |
176 | if (n < 0 || (size_t)n != size)TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
177 | goto err; never executed: goto err; | 0 |
178 | close(fd); | - |
179 | goto done; never executed: goto done; | 0 |
180 | } | - |
181 | | - |
182 | | - |
183 | if ((fp = fdopen(fd, "r")) == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
184 | goto err; never executed: goto err; | 0 |
185 | fd = -1; | - |
186 | | - |
187 | key = PEM_read_PrivateKey(fp, NULL, tls_password_cb, password); | - |
188 | fclose(fp); | - |
189 | if (key == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
190 | goto err; never executed: goto err; | 0 |
191 | | - |
192 | | - |
193 | if ((bio = BIO_new(BIO_s_mem())) == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
194 | goto err; never executed: goto err; | 0 |
195 | if (!PEM_write_bio_PrivateKey(bio, key, NULL, NULL, 0, NULL, NULL))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
196 | goto err; never executed: goto err; | 0 |
197 | if ((size = BIO_get_mem_data(bio, &data)) <= 0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
198 | goto err; never executed: goto err; | 0 |
199 | if ((buf = malloc(size)) == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
200 | goto err; never executed: goto err; | 0 |
201 | memcpy(buf, data, size); | - |
202 | | - |
203 | BIO_free_all(bio); | - |
204 | EVP_PKEY_free(key); | - |
205 | | - |
206 | done: code before this statement never executed: done: | 0 |
207 | *len = size; | - |
208 | return (buf); never executed: return (buf); | 0 |
209 | | - |
210 | err: | - |
211 | if (fd != -1)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
212 | close(fd); never executed: close(fd); | 0 |
213 | freezero(buf, size); | - |
214 | BIO_free_all(bio); | - |
215 | EVP_PKEY_free(key); | - |
216 | | - |
217 | return (NULL); never executed: return ( ((void *)0) ); | 0 |
218 | } | - |
219 | | - |
220 | void | - |
221 | tls_unload_file(uint8_t *buf, size_t len) | - |
222 | { | - |
223 | freezero(buf, len); | - |
224 | } never executed: end of block | 0 |
| | |