Mercurial > dropbear
changeset 80:07bcdccb3577
create known_hosts properly
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Mon, 16 Aug 2004 14:46:13 +0000 |
parents | 5a55bd66707f |
children | 2a798efbb40b |
files | cli-kex.c |
diffstat | 1 files changed, 9 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/cli-kex.c Mon Aug 16 08:59:11 2004 +0000 +++ b/cli-kex.c Mon Aug 16 14:46:13 2004 +0000 @@ -147,21 +147,27 @@ /* Check that ~/.ssh exists - easiest way is just to mkdir */ if (mkdir(filename, S_IRWXU) != 0) { if (errno != EEXIST) { + dropbear_log(LOG_INFO, "Warning: failed creating ~/.ssh: %s", + strerror(errno)); + TRACE(("mkdir didn't work: %s", strerror(errno))); ask_to_confirm(keyblob, keybloblen); goto out; /* only get here on success */ } } snprintf(filename, len+18, "%s/.ssh/known_hosts", pw->pw_dir); - hostsfile = fopen(filename, "r+"); + hostsfile = fopen(filename, "a+"); + fseek(hostsfile, 0, SEEK_SET); /* We mightn't have been able to open it if it was read-only */ if (hostsfile == NULL && (errno == EACCES || errno == EROFS)) { + TRACE(("trying readonly: %s", strerror(errno))); readonly = 1; hostsfile = fopen(filename, "r"); } if (hostsfile == NULL) { + TRACE(("hostsfile didn't open: %s", strerror(errno))); ask_to_confirm(keyblob, keybloblen); goto out; /* We only get here on success */ } @@ -228,11 +234,12 @@ /* If we get here, they said yes */ if (readonly) { + TRACE(("readonly")); goto out; } /* put the new entry in the file */ - fseek(hostsfile, 0, SEEK_END); + fseek(hostsfile, 0, SEEK_END); /* In case it wasn't opened append */ buf_setpos(line, 0); buf_setlen(line, 0); buf_putbytes(line, ses.remotehost, hostlen);