return;
}
+/*
+ * This host key cache uses a file in the PuTTY Preferences folder and
+ * stores keys as individual TEXT resources in the resource fork of
+ * that file. This has two problems. Firstly, a resource fork can
+ * contain no more than 2727 resources. Secondly, the Resource
+ * Manager uses a linear search to find a particular resource, which
+ * could make having lots of host keys quite slow.
+ */
+
int verify_host_key(const char *hostname, int port,
const char *keytype, const char *key)
{
char *resname;
Str255 presname;
Handle resvalue;
+ Handle reshandle;
int id;
/* Open the host key file */
UseResFile(keyrefnum);
resname = dupprintf("%s@%d:%s", keytype, port, hostname);
c2pstrcpy(presname, resname);
-
+
+ reshandle = Get1NamedResource(FOUR_CHAR_CODE('TEXT'), presname);
+ if (reshandle != NULL) {
+ /* The resource exists, we're replacing a host key */
+ RemoveResource(reshandle);
+ }
error = PtrToHand(key, &resvalue, strlen(key));
if (error != noErr) goto out;
sfree(resname);
}
-
-
/*
* Emacs magic:
* Local Variables: