From 06897bd7828721c71d68f28cf2df4fca57964538 Mon Sep 17 00:00:00 2001 From: jacob Date: Sun, 30 Oct 2005 13:42:36 +0000 Subject: [PATCH] Add ability for ssh2_userkey_loadpub() to return the key comment. (Not actually used currently, but it makes life easier for a patch I'm working on.) git-svn-id: svn://svn.tartarus.org/sgt/putty@6433 cda61777-01e9-0310-a592-d414129be87e --- cmdgen.c | 2 +- ssh.c | 4 ++-- ssh.h | 3 ++- sshpubk.c | 12 +++++++++--- windows/winpgnt.c | 3 ++- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/cmdgen.c b/cmdgen.c index c4fcc9e1..f84938e4 100644 --- a/cmdgen.c +++ b/cmdgen.c @@ -722,7 +722,7 @@ int main(int argc, char **argv) case SSH_KEYTYPE_SSH2: if (!load_encrypted) { ssh2blob = ssh2_userkey_loadpub(&infilename, &ssh2alg, - &ssh2bloblen, &error); + &ssh2bloblen, NULL, &error); ssh2algf = find_pubkey_alg(ssh2alg); if (ssh2algf) bits = ssh2algf->pubkey_bits(ssh2blob, ssh2bloblen); diff --git a/ssh.c b/ssh.c index 0738b309..b30d0265 100644 --- a/ssh.c +++ b/ssh.c @@ -6640,7 +6640,7 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, if (keytype == SSH_KEYTYPE_SSH2) { s->publickey_blob = ssh2_userkey_loadpub(&ssh->cfg.keyfile, NULL, - &s->publickey_bloblen, NULL); + &s->publickey_bloblen, NULL, NULL); } else { char *msgbuf; logeventf(ssh, "Unable to use this key file (%s)", @@ -6982,7 +6982,7 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, (unsigned char *)ssh2_userkey_loadpub(&ssh->cfg.keyfile, &algorithm, &pub_blob_len, - NULL); + NULL, NULL); if (pub_blob) { s->pktout = ssh2_pkt_init(SSH2_MSG_USERAUTH_REQUEST); ssh2_pkt_addstring(s->pktout, s->username); diff --git a/ssh.h b/ssh.h index 8357f0c4..61de0448 100644 --- a/ssh.h +++ b/ssh.h @@ -400,7 +400,8 @@ int ssh2_userkey_encrypted(const Filename *filename, char **comment); struct ssh2_userkey *ssh2_load_userkey(const Filename *filename, char *passphrase, const char **errorstr); 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); int ssh2_save_userkey(const Filename *filename, struct ssh2_userkey *key, char *passphrase); const struct ssh_signkey *find_pubkey_alg(const char *name); diff --git a/sshpubk.c b/sshpubk.c index 2d5ff1d7..923ebe9d 100644 --- a/sshpubk.c +++ b/sshpubk.c @@ -866,7 +866,8 @@ struct ssh2_userkey *ssh2_load_userkey(const Filename *filename, } 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; @@ -875,6 +876,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 +914,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")) diff --git a/windows/winpgnt.c b/windows/winpgnt.c index 59a12e20..d4463155 100644 --- a/windows/winpgnt.c +++ b/windows/winpgnt.c @@ -425,7 +425,8 @@ static void add_keyfile(Filename filename) keylist = get_keylist1(&keylistlen); } else { unsigned char *blob2; - blob = ssh2_userkey_loadpub(&filename, NULL, &bloblen, &error); + blob = ssh2_userkey_loadpub(&filename, NULL, &bloblen, + NULL, &error); if (!blob) { char *msg = dupprintf("Couldn't load private key (%s)", error); message_box(msg, APPNAME, MB_OK | MB_ICONERROR, -- 2.11.0