X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/038ec85e825fc940c1387f64a88ae73b75f6822b..c9017afc2ece6fb3f69ef866845d7dc7ee73bbf2:/unix/uxstore.c diff --git a/unix/uxstore.c b/unix/uxstore.c index c5e40d46..913b736a 100644 --- a/unix/uxstore.c +++ b/unix/uxstore.c @@ -596,18 +596,28 @@ void store_host_key(const char *hostname, int port, */ tmpfilename = make_filename(INDEX_HOSTKEYS_TMP, NULL); wfp = fopen(tmpfilename, "w"); - if (!wfp) { + if (!wfp && errno == ENOENT) { char *dir; dir = make_filename(INDEX_DIR, NULL); - mkdir(dir, 0700); + if (mkdir(dir, 0700) < 0) { + char *msg = dupprintf("Unable to store host key: mkdir(\"%s\") " + "returned '%s'", dir, strerror(errno)); + nonfatal(msg); + sfree(dir); + sfree(tmpfilename); + return; + } sfree(dir); wfp = fopen(tmpfilename, "w"); } if (!wfp) { - sfree(tmpfilename); - return; + char *msg = dupprintf("Unable to store host key: open(\"%s\") " + "returned '%s'", tmpfilename, strerror(errno)); + nonfatal(msg); + sfree(tmpfilename); + return; } filename = make_filename(INDEX_HOSTKEYS, NULL); rfp = fopen(filename, "r"); @@ -672,18 +682,45 @@ void write_random_seed(void *data, int len) */ fd = open(fname, O_CREAT | O_WRONLY, 0600); if (fd < 0) { + if (errno != ENOENT) { + char *msg = dupprintf("Unable to write random seed: open(\"%s\") " + "returned '%s'", fname, strerror(errno)); + nonfatal(msg); + sfree(msg); + return; + } char *dir; dir = make_filename(INDEX_DIR, NULL); - mkdir(dir, 0700); + if (mkdir(dir, 0700) < 0) { + char *msg = dupprintf("Unable to write random seed: mkdir(\"%s\") " + "returned '%s'", dir, strerror(errno)); + nonfatal(msg); + sfree(msg); + sfree(dir); + return; + } sfree(dir); fd = open(fname, O_CREAT | O_WRONLY, 0600); + if (errno != ENOENT) { + char *msg = dupprintf("Unable to write random seed: open(\"%s\") " + "returned '%s'", fname, strerror(errno)); + nonfatal(msg); + sfree(msg); + return; + } } while (len > 0) { int ret = write(fd, data, len); - if (ret <= 0) break; + if (ret < 0) { + char *msg = dupprintf("Unable to write random seed: write " + "returned '%s'", strerror(errno)); + nonfatal(msg); + sfree(msg); + break; + } len -= ret; data = (char *)data + len; }