projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Report errors in store_host_key too.
[u/mdw/putty]
/
unix
/
uxstore.c
diff --git
a/unix/uxstore.c
b/unix/uxstore.c
index
c5e40d4
..
913b736
100644
(file)
--- 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");
*/
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);
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(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");
}
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) {
*/
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);
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);
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);
}
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;
}
len -= ret;
data = (char *)data + len;
}