Idiot me _twice_! The new store_host_key() was failing in the
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Mon, 19 Jan 2004 09:37:17 +0000 (09:37 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Mon, 19 Jan 2004 09:37:17 +0000 (09:37 +0000)
absence of an existing host key file. Duhh.

git-svn-id: svn://svn.tartarus.org/sgt/putty@3737 cda61777-01e9-0310-a592-d414129be87e

unix/uxstore.c

index 3d2e241..922462f 100644 (file)
@@ -507,24 +507,30 @@ void store_host_key(const char *hostname, int port,
     /*
      * Open both the old file and a new file.
      */
-    make_filename(filename, INDEX_HOSTKEYS, NULL);
-    rfp = fopen(filename, "r");
-    if (!rfp)
-       return;
     make_filename(tmpfilename, INDEX_HOSTKEYS_TMP, NULL);
     wfp = fopen(tmpfilename, "w");
     if (!wfp) {
-       fclose(rfp);
-       return;
+        char dir[FILENAME_MAX];
+
+        make_filename(dir, INDEX_DIR, NULL);
+        mkdir(dir, 0700);
+        wfp = fopen(tmpfilename, "w");
     }
+    if (!wfp)
+       return;
+    make_filename(filename, INDEX_HOSTKEYS, NULL);
+    rfp = fopen(filename, "r");
 
     /*
      * Copy all lines from the old file to the new one that _don't_
      * involve the same host key identifier as the one we're adding.
      */
-    while ( (line = fgetline(rfp)) ) {
-       if (strncmp(line, newtext, headerlen))
-           fputs(line, wfp);
+    if (rfp) {
+        while ( (line = fgetline(rfp)) ) {
+            if (strncmp(line, newtext, headerlen))
+                fputs(line, wfp);
+        }
+        fclose(rfp);
     }
 
     /*
@@ -532,7 +538,6 @@ void store_host_key(const char *hostname, int port,
      */
     fputs(newtext, wfp);
 
-    fclose(rfp);
     fclose(wfp);
 
     rename(tmpfilename, filename);