projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Support for Windows PuTTY connecting straight to a local serial port
[u/mdw/putty]
/
sshpubk.c
diff --git
a/sshpubk.c
b/sshpubk.c
index
2d5ff1d
..
812a8e9
100644
(file)
--- 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 (i < 0)
goto end; /* overran */
- if (pub_only) {
- ret = 1;
- goto end;
- }
-
/* Next, the comment field. */
j = GET_32BIT(buf + i);
i += 4;
/* 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)
}
i += j;
if (commentptr)
- *commentptr =
comment
;
+ *commentptr =
dupstr(comment)
;
if (key)
key->comment = comment;
if (key)
key->comment = comment;
+ else
+ sfree(comment);
+
+ if (pub_only) {
+ ret = 1;
+ goto end;
+ }
+
if (!key) {
ret = ciphertype != 0;
*error = NULL;
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,
* exponent, modulus).
*/
int rsakey_pubblob(const Filename *filename, void **blob, int *bloblen,
- const char **errorstr)
+ c
har **commentptr, c
onst char **errorstr)
{
FILE *fp;
char buf[64];
{
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 (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;
*blob = rsa_public_blob(&key, bloblen);
freersakey(&key);
ret = 1;
@@
-866,7
+869,8
@@
struct ssh2_userkey *ssh2_load_userkey(const Filename *filename,
}
char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm,
}
char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm,
- int *pub_blob_len, const char **errorstr)
+ int *pub_blob_len, char **commentptr,
+ const char **errorstr)
{
FILE *fp;
char header[40], *b;
{
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;
int public_blob_len;
int i;
const char *error = NULL;
+ char *comment;
public_blob = NULL;
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;
/* 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;
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"))
/* Read the Public-Lines header line and the public blob. */
if (!read_header(fp, header) || 0 != strcmp(header, "Public-Lines"))