Prevent read_rsa_public_key() from returning an uninitialized RSA structure.

In case the config file could not be opened a new but unitialized RSA structure
would be returned, causing a segmentation fault later on. This would only
happen in the case that the config file could be opened before, but not when
read_rsa_public_key() was called. This situation could occur when the --user
option was used, and the config files were not readable by the specified user.
This commit is contained in:
Guus Sliepen 2011-08-30 19:56:56 +02:00
parent 0f2aa4bd8b
commit e838289683

View file

@ -113,11 +113,14 @@ bool read_rsa_public_key(connection_t *c) {
xasprintf(&fname, "%s/hosts/%s", confbase, c->name); xasprintf(&fname, "%s/hosts/%s", confbase, c->name);
fp = fopen(fname, "r"); fp = fopen(fname, "r");
if(fp) { if(!fp) {
c->rsa_key = PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL); logger(LOG_ERR, "Error reading RSA public key file `%s': %s", fname, strerror(errno));
fclose(fp); free(fname);
return;
} }
c->rsa_key = PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL);
fclose(fp);
free(fname); free(fname);
if(c->rsa_key) if(c->rsa_key)
@ -128,12 +131,15 @@ bool read_rsa_public_key(connection_t *c) {
xasprintf(&fname, "%s/hosts/%s", confbase, c->name); xasprintf(&fname, "%s/hosts/%s", confbase, c->name);
fp = fopen(fname, "r"); fp = fopen(fname, "r");
if(fp) { if(!fp) {
c->rsa_key = PEM_read_RSA_PUBKEY(fp, &c->rsa_key, NULL, NULL); logger(LOG_ERR, "Error reading RSA public key file `%s': %s", fname, strerror(errno));
// RSA_blinding_on(c->rsa_key, NULL); free(fname);
fclose(fp); return;
} }
c->rsa_key = PEM_read_RSA_PUBKEY(fp, &c->rsa_key, NULL, NULL);
// RSA_blinding_on(c->rsa_key, NULL);
fclose(fp);
free(fname); free(fname);
if(c->rsa_key) if(c->rsa_key)