X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=unix%2Fuxstore.c;h=51242eab1ad018fb6f344442ab3cbde2d82289ed;hb=af1460d6e5044a3344aaacd15c91cfdcb58578e7;hp=372c224d5d179091e62f2438f6d418d3921b7425;hpb=adf8b3222fc1f54565891d1a9114d393e23a9870;p=PuTTY.git diff --git a/unix/uxstore.c b/unix/uxstore.c index 372c224d..51242eab 100644 --- a/unix/uxstore.c +++ b/unix/uxstore.c @@ -589,6 +589,16 @@ int verify_host_key(const char *hostname, int port, return ret; } +int have_ssh_host_key(const char *hostname, int port, + const char *keytype) +{ + /* + * If we have a host key, verify_host_key will return 0 or 2. + * If we don't have one, it'll return 1. + */ + return verify_host_key(hostname, port, keytype, "") != 1; +} + void store_host_key(const char *hostname, int port, const char *keytype, const char *key) { @@ -607,9 +617,8 @@ void store_host_key(const char *hostname, int port, dir = make_filename(INDEX_DIR, NULL); if (mkdir(dir, 0700) < 0) { - char *msg = dupprintf("Unable to store host key: mkdir(\"%s\") " - "returned '%s'", dir, strerror(errno)); - nonfatal(msg); + nonfatal("Unable to store host key: mkdir(\"%s\") " + "returned '%s'", dir, strerror(errno)); sfree(dir); sfree(tmpfilename); return; @@ -619,9 +628,8 @@ void store_host_key(const char *hostname, int port, wfp = fopen(tmpfilename, "w"); } if (!wfp) { - char *msg = dupprintf("Unable to store host key: open(\"%s\") " - "returned '%s'", tmpfilename, strerror(errno)); - nonfatal(msg); + nonfatal("Unable to store host key: open(\"%s\") " + "returned '%s'", tmpfilename, strerror(errno)); sfree(tmpfilename); return; } @@ -651,7 +659,11 @@ void store_host_key(const char *hostname, int port, fclose(wfp); - rename(tmpfilename, filename); + if (rename(tmpfilename, filename) < 0) { + nonfatal("Unable to store host key: rename(\"%s\",\"%s\")" + " returned '%s'", tmpfilename, filename, + strerror(errno)); + } sfree(tmpfilename); sfree(filename); @@ -689,10 +701,8 @@ 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); + nonfatal("Unable to write random seed: open(\"%s\") " + "returned '%s'", fname, strerror(errno)); sfree(fname); return; } @@ -700,10 +710,8 @@ void write_random_seed(void *data, int len) dir = make_filename(INDEX_DIR, NULL); if (mkdir(dir, 0700) < 0) { - char *msg = dupprintf("Unable to write random seed: mkdir(\"%s\") " - "returned '%s'", dir, strerror(errno)); - nonfatal(msg); - sfree(msg); + nonfatal("Unable to write random seed: mkdir(\"%s\") " + "returned '%s'", dir, strerror(errno)); sfree(fname); sfree(dir); return; @@ -711,11 +719,9 @@ void write_random_seed(void *data, int len) 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); + if (fd < 0) { + nonfatal("Unable to write random seed: open(\"%s\") " + "returned '%s'", fname, strerror(errno)); sfree(fname); return; } @@ -724,10 +730,8 @@ void write_random_seed(void *data, int len) while (len > 0) { int ret = write(fd, data, len); if (ret < 0) { - char *msg = dupprintf("Unable to write random seed: write " - "returned '%s'", strerror(errno)); - nonfatal(msg); - sfree(msg); + nonfatal("Unable to write random seed: write " + "returned '%s'", strerror(errno)); break; } len -= ret;