Add ability for ssh2_userkey_loadpub() to return the key comment.
authorjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Sun, 30 Oct 2005 13:42:36 +0000 (13:42 +0000)
committerjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Sun, 30 Oct 2005 13:42:36 +0000 (13:42 +0000)
(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
ssh.c
ssh.h
sshpubk.c
windows/winpgnt.c

index c4fcc9e..f84938e 100644 (file)
--- 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 0738b30..b30d026 100644 (file)
--- 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 8357f0c..61de044 100644 (file)
--- 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);
index 2d5ff1d..923ebe9 100644 (file)
--- 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"))
index 59a12e2..d446315 100644 (file)
@@ -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,