diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/userpref.c | 58 | ||||
-rw-r--r-- | src/userpref.h | 2 |
2 files changed, 48 insertions, 12 deletions
diff --git a/src/userpref.c b/src/userpref.c index 9b7a0a8..2f4e55b 100644 --- a/src/userpref.c +++ b/src/userpref.c @@ -193,6 +193,8 @@ static int config_write(const char *cfgfile, plist_t dict) fprintf(fd, "\n[Global]\nHostID=%s\n", hostidstr); fclose(fd); res = 0; + } else { + debug_info("could not open '%s' for writing: %s", cfgfile, strerror(errno)); } free(hostidstr); } @@ -234,6 +236,7 @@ static int config_read(const char *cfgfile, plist_t *dict) int res = -1; FILE *fd = fopen(cfgfile, "rb"); if (!fd) { + debug_info("could not open '%s' for reading: %s", cfgfile, strerror(errno)); return -1; } @@ -565,8 +568,12 @@ userpref_error_t userpref_set_device_public_key(const char *uuid, key_data_t pub /* store file */ FILE *pFile = fopen(pem, "wb"); - fwrite(public_key.data, 1, public_key.size, pFile); - fclose(pFile); + if (pFile) { + fwrite(public_key.data, 1, public_key.size, pFile); + fclose(pFile); + } else { + debug_info("could not open '%s' for writing: %s", pem, strerror(errno)); + } free(pem); return USERPREF_E_SUCCESS; @@ -678,6 +685,7 @@ static userpref_error_t userpref_gen_keys_and_cert(void) key_data_t host_key_pem = { NULL, 0 }; key_data_t host_cert_pem = { NULL, 0 }; + debug_info("Generating keys and certificates"); #ifdef HAVE_OPENSSL RSA* root_keypair = RSA_generate_key(2048, 65537, NULL, NULL); RSA* host_keypair = RSA_generate_key(2048, 65537, NULL, NULL); @@ -1035,6 +1043,7 @@ userpref_error_t userpref_get_certs_as_pem(key_data_t *pem_root_cert, key_data_t pem_host_cert->size = 0; } } + debug_info("configuration invalid"); return USERPREF_E_INVALID_CONF; } @@ -1055,9 +1064,14 @@ userpref_error_t userpref_set_keys_and_certs(key_data_t * root_key, key_data_t * FILE *pFile; char *pem; const char *config_path; + userpref_error_t ret = USERPREF_E_SUCCESS; + + debug_info("saving keys and certs"); - if (!root_key || !host_key || !root_cert || !host_cert) + if (!root_key || !host_key || !root_cert || !host_cert) { + debug_info("missing key or cert (root_key=%p, host_key=%p, root=cert=%p, host_cert=%p", root_key, host_key, root_cert, host_cert); return USERPREF_E_INVALID_ARG; + } /* Make sure config directory exists */ userpref_create_config_dir(); @@ -1070,8 +1084,13 @@ userpref_error_t userpref_set_keys_and_certs(key_data_t * root_key, key_data_t * strcat(pem, DIR_SEP_S); strcat(pem, LIBIMOBILEDEVICE_ROOT_PRIVKEY); pFile = fopen(pem, "wb"); - fwrite(root_key->data, 1, root_key->size, pFile); - fclose(pFile); + if (pFile) { + fwrite(root_key->data, 1, root_key->size, pFile); + fclose(pFile); + } else { + debug_info("could not open '%s' for writing: %s", pem, strerror(errno)); + ret = USERPREF_E_WRITE_ERROR; + } free(pem); pem = (char*)malloc(strlen(config_path)+1+strlen(LIBIMOBILEDEVICE_HOST_PRIVKEY)+1); @@ -1079,8 +1098,13 @@ userpref_error_t userpref_set_keys_and_certs(key_data_t * root_key, key_data_t * strcat(pem, DIR_SEP_S); strcat(pem, LIBIMOBILEDEVICE_HOST_PRIVKEY); pFile = fopen(pem, "wb"); - fwrite(host_key->data, 1, host_key->size, pFile); - fclose(pFile); + if (pFile) { + fwrite(host_key->data, 1, host_key->size, pFile); + fclose(pFile); + } else { + debug_info("could not open '%s' for writing: %s", pem, strerror(errno)); + ret = USERPREF_E_WRITE_ERROR; + } free(pem); pem = (char*)malloc(strlen(config_path)+1+strlen(LIBIMOBILEDEVICE_ROOT_CERTIF)+1); @@ -1088,8 +1112,13 @@ userpref_error_t userpref_set_keys_and_certs(key_data_t * root_key, key_data_t * strcat(pem, DIR_SEP_S); strcat(pem, LIBIMOBILEDEVICE_ROOT_CERTIF); pFile = fopen(pem, "wb"); - fwrite(root_cert->data, 1, root_cert->size, pFile); - fclose(pFile); + if (pFile) { + fwrite(root_cert->data, 1, root_cert->size, pFile); + fclose(pFile); + } else { + debug_info("could not open '%s' for writing: %s", pem, strerror(errno)); + ret = USERPREF_E_WRITE_ERROR; + } free(pem); pem = (char*)malloc(strlen(config_path)+1+strlen(LIBIMOBILEDEVICE_HOST_CERTIF)+1); @@ -1097,9 +1126,14 @@ userpref_error_t userpref_set_keys_and_certs(key_data_t * root_key, key_data_t * strcat(pem, DIR_SEP_S); strcat(pem, LIBIMOBILEDEVICE_HOST_CERTIF); pFile = fopen(pem, "wb"); - fwrite(host_cert->data, 1, host_cert->size, pFile); - fclose(pFile); + if (pFile) { + fwrite(host_cert->data, 1, host_cert->size, pFile); + fclose(pFile); + } else { + debug_info("could not open '%s' for writing: %s", pem, strerror(errno)); + ret = USERPREF_E_WRITE_ERROR; + } free(pem); - return USERPREF_E_SUCCESS; + return ret; } diff --git a/src/userpref.h b/src/userpref.h index ae8aff9..e5dcd1f 100644 --- a/src/userpref.h +++ b/src/userpref.h @@ -50,6 +50,8 @@ typedef gnutls_datum_t key_data_t; #define USERPREF_E_INVALID_ARG -1 #define USERPREF_E_INVALID_CONF -2 #define USERPREF_E_SSL_ERROR -3 +#define USERPREF_E_READ_ERROR -4 +#define USERPREF_E_WRITE_ERROR -5 #define USERPREF_E_UNKNOWN_ERROR -256 |