| 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 |
| | |