[BACK]Return to auth2-pubkey.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/auth2-pubkey.c between version 1.111 and 1.112

version 1.111, 2021/12/19 22:12:07 version 1.112, 2021/12/19 22:12:30
Line 64 
Line 64 
 #include "authfile.h"  #include "authfile.h"
 #include "match.h"  #include "match.h"
 #include "ssherr.h"  #include "ssherr.h"
   #include "kex.h"
 #include "channels.h" /* XXX for session.h */  #include "channels.h" /* XXX for session.h */
 #include "session.h" /* XXX for child_set_env(); refactor? */  #include "session.h" /* XXX for child_set_env(); refactor? */
 #include "sk-api.h"  #include "sk-api.h"
Line 88 
Line 89 
         Authctxt *authctxt = ssh->authctxt;          Authctxt *authctxt = ssh->authctxt;
         struct passwd *pw = authctxt->pw;          struct passwd *pw = authctxt->pw;
         struct sshbuf *b = NULL;          struct sshbuf *b = NULL;
         struct sshkey *key = NULL;          struct sshkey *key = NULL, *hostkey = NULL;
         char *pkalg = NULL, *userstyle = NULL, *key_s = NULL, *ca_s = NULL;          char *pkalg = NULL, *userstyle = NULL, *key_s = NULL, *ca_s = NULL;
         u_char *pkblob = NULL, *sig = NULL, have_sig;          u_char *pkblob = NULL, *sig = NULL, have_sig;
         size_t blen, slen;          size_t blen, slen;
         int r, pktype;          int hostbound, r, pktype;
         int req_presence = 0, req_verify = 0, authenticated = 0;          int req_presence = 0, req_verify = 0, authenticated = 0;
         struct sshauthopt *authopts = NULL;          struct sshauthopt *authopts = NULL;
         struct sshkey_sig_details *sig_details = NULL;          struct sshkey_sig_details *sig_details = NULL;
   
           hostbound = strcmp(method, "publickey-hostbound-v00@openssh.com") == 0;
   
         if ((r = sshpkt_get_u8(ssh, &have_sig)) != 0 ||          if ((r = sshpkt_get_u8(ssh, &have_sig)) != 0 ||
             (r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 ||              (r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 ||
             (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0)              (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0)
                 fatal_fr(r, "parse packet");                  fatal_fr(r, "parse %s packet", method);
   
           /* hostbound auth includes the hostkey offered at initial KEX */
           if (hostbound) {
                   if ((r = sshpkt_getb_froms(ssh, &b)) != 0 ||
                       (r = sshkey_fromb(b, &hostkey)) != 0)
                           fatal_fr(r, "parse %s hostkey", method);
                   if (ssh->kex->initial_hostkey == NULL)
                           fatal_f("internal error: initial hostkey not recorded");
                   if (!sshkey_equal(hostkey, ssh->kex->initial_hostkey))
                           fatal_f("%s packet contained wrong host key", method);
                   sshbuf_free(b);
                   b = NULL;
           }
   
         if (log_level_get() >= SYSLOG_LEVEL_DEBUG2) {          if (log_level_get() >= SYSLOG_LEVEL_DEBUG2) {
                 char *keystring;                  char *keystring;
                 struct sshbuf *pkbuf;                  struct sshbuf *pkbuf;
Line 163 
Line 179 
                 ca_s = format_key(key->cert->signature_key);                  ca_s = format_key(key->cert->signature_key);
   
         if (have_sig) {          if (have_sig) {
                 debug3_f("have %s signature for %s%s%s", pkalg, key_s,                  debug3_f("%s have %s signature for %s%s%s",
                       method, pkalg, key_s,
                     ca_s == NULL ? "" : " CA ", ca_s == NULL ? "" : ca_s);                      ca_s == NULL ? "" : " CA ", ca_s == NULL ? "" : ca_s);
                 if ((r = sshpkt_get_string(ssh, &sig, &slen)) != 0 ||                  if ((r = sshpkt_get_string(ssh, &sig, &slen)) != 0 ||
                     (r = sshpkt_get_end(ssh)) != 0)                      (r = sshpkt_get_end(ssh)) != 0)
Line 193 
Line 210 
                     (r = sshbuf_put_u8(b, have_sig)) != 0 ||                      (r = sshbuf_put_u8(b, have_sig)) != 0 ||
                     (r = sshbuf_put_cstring(b, pkalg)) != 0 ||                      (r = sshbuf_put_cstring(b, pkalg)) != 0 ||
                     (r = sshbuf_put_string(b, pkblob, blen)) != 0)                      (r = sshbuf_put_string(b, pkblob, blen)) != 0)
                         fatal_fr(r, "reconstruct packet");                          fatal_fr(r, "reconstruct %s packet", method);
                   if (hostbound &&
                       (r = sshkey_puts(ssh->kex->initial_hostkey, b)) != 0)
                           fatal_fr(r, "reconstruct %s packet", method);
 #ifdef DEBUG_PK  #ifdef DEBUG_PK
                 sshbuf_dump(b, stderr);                  sshbuf_dump(b, stderr);
 #endif  #endif
Line 243 
Line 263 
                 }                  }
                 auth2_record_key(authctxt, authenticated, key);                  auth2_record_key(authctxt, authenticated, key);
         } else {          } else {
                 debug_f("test pkalg %s pkblob %s%s%s", pkalg, key_s,                  debug_f("%s test pkalg %s pkblob %s%s%s", method, pkalg, key_s,
                     ca_s == NULL ? "" : " CA ", ca_s == NULL ? "" : ca_s);                      ca_s == NULL ? "" : " CA ", ca_s == NULL ? "" : ca_s);
   
                 if ((r = sshpkt_get_end(ssh)) != 0)                  if ((r = sshpkt_get_end(ssh)) != 0)
Line 282 
Line 302 
         sshbuf_free(b);          sshbuf_free(b);
         sshauthopt_free(authopts);          sshauthopt_free(authopts);
         sshkey_free(key);          sshkey_free(key);
           sshkey_free(hostkey);
         free(userstyle);          free(userstyle);
         free(pkalg);          free(pkalg);
         free(pkblob);          free(pkblob);
Line 1064 
Line 1085 
   
 Authmethod method_pubkey = {  Authmethod method_pubkey = {
         "publickey",          "publickey",
         NULL,          "publickey-hostbound-v00@openssh.com",
         userauth_pubkey,          userauth_pubkey,
         &options.pubkey_authentication          &options.pubkey_authentication
 };  };

Legend:
Removed from v.1.111  
changed lines
  Added in v.1.112