X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/51e9d3c00a3471f284e89ec1f59f38ca25f10c5f..533c7491240f2fd71d026e91f0a940f4729992fd:/sshpubk.c diff --git a/sshpubk.c b/sshpubk.c index 2d5ff1d7..79b224c0 100644 --- a/sshpubk.c +++ b/sshpubk.c @@ -71,11 +71,6 @@ static int loadrsakey_main(FILE * fp, struct RSAKey *key, int pub_only, if (i < 0) goto end; /* overran */ - if (pub_only) { - ret = 1; - goto end; - } - /* Next, the comment field. */ j = GET_32BIT(buf + i); i += 4; @@ -88,9 +83,17 @@ static int loadrsakey_main(FILE * fp, struct RSAKey *key, int pub_only, } i += j; if (commentptr) - *commentptr = comment; + *commentptr = dupstr(comment); if (key) key->comment = comment; + else + sfree(comment); + + if (pub_only) { + ret = 1; + goto end; + } + if (!key) { ret = ciphertype != 0; *error = NULL; @@ -225,7 +228,7 @@ int rsakey_encrypted(const Filename *filename, char **comment) * exponent, modulus). */ int rsakey_pubblob(const Filename *filename, void **blob, int *bloblen, - const char **errorstr) + char **commentptr, const char **errorstr) { FILE *fp; char buf[64]; @@ -250,7 +253,7 @@ int rsakey_pubblob(const Filename *filename, void **blob, int *bloblen, */ if (fgets(buf, sizeof(buf), fp) && !strcmp(buf, rsa_signature)) { memset(&key, 0, sizeof(key)); - if (loadrsakey_main(fp, &key, TRUE, NULL, NULL, &error)) { + if (loadrsakey_main(fp, &key, TRUE, commentptr, NULL, &error)) { *blob = rsa_public_blob(&key, bloblen); freersakey(&key); ret = 1; @@ -865,8 +868,9 @@ struct ssh2_userkey *ssh2_load_userkey(const Filename *filename, return ret; } -char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm, - int *pub_blob_len, const char **errorstr) +unsigned char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm, + int *pub_blob_len, char **commentptr, + const char **errorstr) { FILE *fp; char header[40], *b; @@ -875,6 +879,7 @@ char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm, int public_blob_len; int i; const char *error = NULL; + char *comment; public_blob = NULL; @@ -912,9 +917,13 @@ char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm, /* Read the Comment header line. */ if (!read_header(fp, header) || 0 != strcmp(header, "Comment")) goto error; - if ((b = read_body(fp)) == NULL) + if ((comment = read_body(fp)) == NULL) goto error; - sfree(b); /* we don't care */ + + if (commentptr) + *commentptr = comment; + else + sfree(comment); /* Read the Public-Lines header line and the public blob. */ if (!read_header(fp, header) || 0 != strcmp(header, "Public-Lines")) @@ -931,7 +940,7 @@ char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm, *pub_blob_len = public_blob_len; if (algorithm) *algorithm = alg->name; - return (char *)public_blob; + return public_blob; /* * Error processing.