From eab3f84381635153932bc3ee329b8acd5e32fb1b Mon Sep 17 00:00:00 2001 From: Marcel Poul Date: Sun, 4 Dec 2011 00:54:13 +0000 Subject: [PATCH] return values check improvement; minor error messages changes --- emi.canl.canl-c/src/canl.c | 31 ++++++++------------- emi.canl.canl-c/src/canl_cert.c | 47 ++++++++++++++++++-------------- emi.canl.canl-c/src/canl_sample_server.c | 4 +-- emi.canl.canl-c/src/canl_ssl.c | 47 ++++++++------------------------ 4 files changed, 52 insertions(+), 77 deletions(-) diff --git a/emi.canl.canl-c/src/canl.c b/emi.canl.canl-c/src/canl.c index 861662e..4a9986c 100644 --- a/emi.canl.canl-c/src/canl.c +++ b/emi.canl.canl-c/src/canl.c @@ -418,27 +418,25 @@ size_t canl_io_read(canl_ctx cc, canl_io_handler io, void *buffer, size_t size, } if (!io) { - //set_error(ctx->err_msg); err = EINVAL; - goto end; + set_error(glb_cc, err, posix_error, "io handler not set" + " (canl_io_read)"); + return -1; } if (!buffer || !size) { err = EINVAL; - update_error(glb_cc, "no memory to write into (canl_io_read)"); + set_error(glb_cc, err, posix_error, "no memory to write into" + " (canl_io_read)"); return -1; } //read something using openssl b_recvd = ssl_read(glb_cc, io_cc, buffer, size, timeout); - if (b_recvd == -1) { - err = errno; //TODO check again - goto end; + if (b_recvd <= 0) { + update_error(glb_cc, "can't read from connection" + " (canl_io_read)"); } -end: - if (err) - update_error(glb_cc, "can't read from connection" - " (canl_io_read)"); return b_recvd; } @@ -456,7 +454,9 @@ size_t canl_io_write(canl_ctx cc, canl_io_handler io, void *buffer, size_t size, if (!io) { err = EINVAL; - goto end; + set_error(glb_cc, err, posix_error, "io handler not set" + " (canl_io_write)"); + return -1; } if (!buffer || !size) { @@ -467,16 +467,9 @@ size_t canl_io_write(canl_ctx cc, canl_io_handler io, void *buffer, size_t size, //write something using openssl b_written = ssl_write(glb_cc, io_cc, buffer, size, timeout); - if (b_written == -1) { - err = errno; //TODO check again - goto end; - } - -end: - if (err) { + if (b_written <= 0) { update_error(glb_cc, "can't write to connection" " (canl_io_write)"); - return -1; } return b_written; } diff --git a/emi.canl.canl-c/src/canl_cert.c b/emi.canl.canl-c/src/canl_cert.c index cc9243e..1bed7c2 100644 --- a/emi.canl.canl-c/src/canl_cert.c +++ b/emi.canl.canl-c/src/canl_cert.c @@ -86,14 +86,6 @@ static int set_key_file(glb_ctx *cc, char *key) EVP_PKEY_free(cc->cert_key->key); cc->cert_key->key = NULL; } -/* cc->cert_key->key = EVP_PKEY_new(void); - if (!cc->cert_key->key) { - err = ERR_get_error(); - set_error(cc, err, ssl_error, "not enough memory for" - " key storage (set_key_file)"); - return err; - } -*/ key_file = fopen(key, "rb"); if (!key_file) { err = errno; @@ -109,9 +101,20 @@ static int set_key_file(glb_ctx *cc, char *key) " (set_key_file)"); goto end; } + if (fclose(key_file)){ + err = errno; + set_error(cc, err, posix_error, "cannot close file with key" + " (set_key_file)"); + return errno; + } + return 0; end: - err = fclose(key_file); + if (fclose(key_file)){ + err = errno; + update_error(cc, "cannot close file with key" + " (set_key_file)"); + } return err; } @@ -134,19 +137,11 @@ static int set_cert_file(glb_ctx *cc, char *cert) X509_free(cc->cert_key->cert); cc->cert_key->cert = NULL; } -/* cc->cert_key->cert = EVP_PKEY_new(void); - if (!cc->cert_key->cert) { - err = ERR_get_error(); - set_error(cc, err, ssl_error, "not enough memory for" - " key storage (set_key_file)"); - return err; - } -*/ cert_file = fopen(cert, "rb"); if (!cert_file) { err = errno; set_error(cc, err, posix_error, "cannot open file with cert" - " (set_key_file)"); + " (set_cert_file)"); return err; } /*TODO NULL NULL, callback and user data*/ @@ -154,11 +149,23 @@ static int set_cert_file(glb_ctx *cc, char *cert) if (!cc->cert_key->cert) { err = ERR_get_error(); set_error(cc, err, ssl_error, "error while writing certificate" - " to context (set_key_file)"); + " to context (set_cert_file)"); goto end; } + if (fclose(cert_file)){ + err = errno; + set_error(cc, err, posix_error, "cannot close file with certificate" + " (set_cert_file)"); + return errno; + } + return 0; + end: - err = fclose(cert_file); + if (fclose(cert_file)){ + err = errno; + update_error(cc, "cannot close file with certificate" + " (set_cert_file)"); + } return err; } diff --git a/emi.canl.canl-c/src/canl_sample_server.c b/emi.canl.canl-c/src/canl_sample_server.c index ca96a3f..1a17d15 100644 --- a/emi.canl.canl-c/src/canl_sample_server.c +++ b/emi.canl.canl-c/src/canl_sample_server.c @@ -63,7 +63,7 @@ int main(int argc, char *argv[]) err = canl_set_ctx_own_cert_file(my_ctx, serv_cert, serv_key, NULL, NULL); if (err) { - printf("[SERVER] cannot set certificate or file to context\n"); + printf("[SERVER] cannot set certificate or key to context\n"); } } @@ -95,7 +95,7 @@ int main(int argc, char *argv[]) printf("[SERVER] message \"%s\" sent successfully\n", buf); } - err = canl_io_read (my_ctx, my_io_h, buf, sizeof(buf)-1, NULL); + err = canl_io_read (my_ctx, my_new_io_h, buf, sizeof(buf)-1, NULL); if (err > 0) { buf[err] = '\0'; printf ("[SERVER] received: %s\n", buf); diff --git a/emi.canl.canl-c/src/canl_ssl.c b/emi.canl.canl-c/src/canl_ssl.c index 3ccca23..34b3def 100644 --- a/emi.canl.canl-c/src/canl_ssl.c +++ b/emi.canl.canl-c/src/canl_ssl.c @@ -443,23 +443,9 @@ int ssl_write(glb_ctx *cc, io_handler *io, void *buffer, size_t size, struct tim int touted = 0; int to = 0; // bool - if (!io->s_ctx->ssl_io) { + if (!io->s_ctx || !io->s_ctx->ssl_io) { err = EINVAL; - goto end; - } - - if (!cc) { - return -1; - } - if (!io) { - err = EINVAL; - goto end; - } - - if (!buffer) { - err = EINVAL; //TODO really? - set_error(cc, err, posix_error, "Nothing to write (ssl_write)"); - errno = err; + set_error(cc, err, posix_error, "wrong ssl handler (ssl_read)"); return -1; } @@ -543,23 +529,9 @@ int ssl_read(glb_ctx *cc, io_handler *io, void *buffer, size_t size, struct time int expected = 0, error = 0; int timeout; - if (!io->s_ctx->ssl_io) { + if (!io->s_ctx || !io->s_ctx->ssl_io) { err = EINVAL; - goto end; - } - - if (!cc) { - return -1; - } - if (!io) { - err = EINVAL; - goto end; - } - - if (!buffer) { - err = EINVAL; //TODO really? - set_error(cc, err, posix_error, "Not enough memory to read to (ssl_read)"); - errno = err; + set_error(cc, err, posix_error, "wrong ssl handler (ssl_read)"); return -1; } @@ -577,7 +549,8 @@ int ssl_read(glb_ctx *cc, io_handler *io, void *buffer, size_t size, struct time curtime = time(NULL); if (ret > 0) { - ret2 = SSL_read(io->s_ctx->ssl_io, str + nwritten, strlen(str) - nwritten); + ret2 = SSL_read(io->s_ctx->ssl_io, str + nwritten, + strlen(str) - nwritten); if (ret2 <= 0) { expected = error = SSL_get_error(io->s_ctx->ssl_io, ret2); @@ -586,13 +559,15 @@ int ssl_read(glb_ctx *cc, io_handler *io, void *buffer, size_t size, struct time } while (TEST_SELECT(ret, ret2, timeout, curtime, starttime, error)); end: - if (ret <= 0 || ret2 <= 0) { //TODO ret2 < 0 originally + if (ret <= 0 || ret2 <= 0) { // what if ret2 == 0? conn closed? err = -1; //TODO what to assign if (timeout != -1 && (curtime - starttime >= timeout)){ - set_error(cc, ETIMEDOUT, posix_error, "Connection stuck during read: timeout reached. (ssl_read)"); + set_error(cc, ETIMEDOUT, posix_error, "Connection stuck" + " during read: timeout reached. (ssl_read)"); } else - set_error(cc, err, unknown_error, "Error during SSL read: (ssl_read)"); + set_error(cc, err, unknown_error, "Error during SSL" + " read: (ssl_read)"); } else err = ret2; -- 1.8.2.3