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