}
fscanf(f, "%d ", &size);
- size >>= 2; /* nibbles->bits */
+ if(size < 1 || size > (1<<15))
+ {
+ syslog(LOG_ERR, "Illegal passphrase in %s; size would be %d", filename, size);
+ return -1;
+ }
+ size >>= 2; /* bits->nibbles */
pp = xmalloc(size+2);
fgets(pp, size+1, f);
fclose(f);
for(p = conn_list; p != NULL; p = p->next)
{
if(!p->public_key || !p->public_key->key)
+ /* We haven't received a key from this host (yet). */
continue;
ek = make_shared_key(p->public_key->key);
- if(!p->key)
- {
- p->key = xmalloc(sizeof(enc_key_t));
- p->key->key = NULL;
- }
- if(p->key->key)
- free(p->key->key);
+ free_key(p->key);
+ p->key = xmalloc(sizeof(enc_key_t));
p->key->length = strlen(ek);
p->key->expiry = p->public_key->expiry;
p->key->key = xmalloc(strlen(ek) + 1);