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

Diff for /src/usr.bin/ssh/ssh-keygen.c between version 1.370 and 1.374

version 1.370, 2019/11/25 00:51:37 version 1.374, 2019/12/10 22:37:20
Line 114 
Line 114 
 static u_int64_t cert_valid_to = ~0ULL;  static u_int64_t cert_valid_to = ~0ULL;
   
 /* Certificate options */  /* Certificate options */
 #define CERTOPT_X_FWD   (1)  #define CERTOPT_X_FWD                           (1)
 #define CERTOPT_AGENT_FWD       (1<<1)  #define CERTOPT_AGENT_FWD                       (1<<1)
 #define CERTOPT_PORT_FWD        (1<<2)  #define CERTOPT_PORT_FWD                        (1<<2)
 #define CERTOPT_PTY             (1<<3)  #define CERTOPT_PTY                             (1<<3)
 #define CERTOPT_USER_RC (1<<4)  #define CERTOPT_USER_RC                         (1<<4)
   #define CERTOPT_NO_REQUIRE_USER_PRESENCE        (1<<5)
 #define CERTOPT_DEFAULT (CERTOPT_X_FWD|CERTOPT_AGENT_FWD| \  #define CERTOPT_DEFAULT (CERTOPT_X_FWD|CERTOPT_AGENT_FWD| \
                          CERTOPT_PORT_FWD|CERTOPT_PTY|CERTOPT_USER_RC)                           CERTOPT_PORT_FWD|CERTOPT_PTY|CERTOPT_USER_RC)
 static u_int32_t certflags_flags = CERTOPT_DEFAULT;  static u_int32_t certflags_flags = CERTOPT_DEFAULT;
Line 1646 
Line 1647 
             (certflags_flags & CERTOPT_USER_RC) != 0)              (certflags_flags & CERTOPT_USER_RC) != 0)
                 add_flag_option(c, "permit-user-rc");                  add_flag_option(c, "permit-user-rc");
         if ((which & OPTIONS_CRITICAL) != 0 &&          if ((which & OPTIONS_CRITICAL) != 0 &&
               (certflags_flags & CERTOPT_NO_REQUIRE_USER_PRESENCE) != 0)
                   add_flag_option(c, "no-touch-required");
           if ((which & OPTIONS_CRITICAL) != 0 &&
             certflags_src_addr != NULL)              certflags_src_addr != NULL)
                 add_string_option(c, "source-address", certflags_src_addr);                  add_string_option(c, "source-address", certflags_src_addr);
         for (i = 0; i < ncert_userext; i++) {          for (i = 0; i < ncert_userext; i++) {
Line 1711 
Line 1715 
         int r, i, fd, found, agent_fd = -1;          int r, i, fd, found, agent_fd = -1;
         u_int n;          u_int n;
         struct sshkey *ca, *public;          struct sshkey *ca, *public;
         char valid[64], *otmp, *tmp, *cp, *out, *comment, **plist = NULL;          char valid[64], *otmp, *tmp, *cp, *out, *comment;
           char *ca_fp = NULL, **plist = NULL;
         FILE *f;          FILE *f;
         struct ssh_identitylist *agent_ids;          struct ssh_identitylist *agent_ids;
         size_t j;          size_t j;
           struct notifier_ctx *notifier = NULL;
   
 #ifdef ENABLE_PKCS11  #ifdef ENABLE_PKCS11
         pkcs11_init(1);          pkcs11_init(1);
Line 1760 
Line 1766 
                 fatal("CA key type %s doesn't match specified %s",                  fatal("CA key type %s doesn't match specified %s",
                     sshkey_ssh_name(ca), key_type_name);                      sshkey_ssh_name(ca), key_type_name);
         }          }
           ca_fp = sshkey_fingerprint(ca, fingerprint_hash, SSH_FP_DEFAULT);
   
         for (i = 0; i < argc; i++) {          for (i = 0; i < argc; i++) {
                 /* Split list of principals */                  /* Split list of principals */
Line 1810 
Line 1817 
                                 fatal("Couldn't certify key %s via agent: %s",                                  fatal("Couldn't certify key %s via agent: %s",
                                     tmp, ssh_err(r));                                      tmp, ssh_err(r));
                 } else {                  } else {
                         if ((r = sshkey_certify(public, ca, key_type_name,                          if (sshkey_is_sk(ca) &&
                             sk_provider)) != 0)                              (ca->sk_flags & SSH_SK_USER_PRESENCE_REQD)) {
                                   notifier = notify_start(0,
                                       "Confirm user presence for key %s %s",
                                       sshkey_type(ca), ca_fp);
                           }
                           r = sshkey_certify(public, ca, key_type_name,
                               sk_provider);
                           notify_complete(notifier);
                           if (r != 0)
                                 fatal("Couldn't certify key %s: %s",                                  fatal("Couldn't certify key %s: %s",
                                     tmp, ssh_err(r));                                      tmp, ssh_err(r));
                 }                  }
Line 1849 
Line 1864 
                 if (cert_serial_autoinc)                  if (cert_serial_autoinc)
                         cert_serial++;                          cert_serial++;
         }          }
           free(ca_fp);
 #ifdef ENABLE_PKCS11  #ifdef ENABLE_PKCS11
         pkcs11_terminate();          pkcs11_terminate();
 #endif  #endif
Line 1947 
Line 1963 
                 certflags_flags &= ~CERTOPT_USER_RC;                  certflags_flags &= ~CERTOPT_USER_RC;
         else if (strcasecmp(opt, "permit-user-rc") == 0)          else if (strcasecmp(opt, "permit-user-rc") == 0)
                 certflags_flags |= CERTOPT_USER_RC;                  certflags_flags |= CERTOPT_USER_RC;
           else if (strcasecmp(opt, "touch-required") == 0)
                   certflags_flags &= ~CERTOPT_NO_REQUIRE_USER_PRESENCE;
           else if (strcasecmp(opt, "no-touch-required") == 0)
                   certflags_flags |= CERTOPT_NO_REQUIRE_USER_PRESENCE;
         else if (strncasecmp(opt, "force-command=", 14) == 0) {          else if (strncasecmp(opt, "force-command=", 14) == 0) {
                 val = opt + 14;                  val = opt + 14;
                 if (*val == '\0')                  if (*val == '\0')
Line 2000 
Line 2020 
                     strcmp(name, "permit-agent-forwarding") == 0 ||                      strcmp(name, "permit-agent-forwarding") == 0 ||
                     strcmp(name, "permit-port-forwarding") == 0 ||                      strcmp(name, "permit-port-forwarding") == 0 ||
                     strcmp(name, "permit-pty") == 0 ||                      strcmp(name, "permit-pty") == 0 ||
                     strcmp(name, "permit-user-rc") == 0))                      strcmp(name, "permit-user-rc") == 0 ||
                       strcmp(name, "no-touch-required") == 0)) {
                         printf("\n");                          printf("\n");
                 else if (in_critical &&                  } else if (in_critical &&
                     (strcmp(name, "force-command") == 0 ||                      (strcmp(name, "force-command") == 0 ||
                     strcmp(name, "source-address") == 0)) {                      strcmp(name, "source-address") == 0)) {
                         if ((r = sshbuf_get_cstring(option, &arg, NULL)) != 0)                          if ((r = sshbuf_get_cstring(option, &arg, NULL)) != 0)
Line 2985 
Line 3006 
                 case 'x':                  case 'x':
                         if (*optarg == '\0')                          if (*optarg == '\0')
                                 fatal("Missing security key flags");                                  fatal("Missing security key flags");
                         ull = strtoull(optarg, &ep, 0);                          if (strcasecmp(optarg, "no-touch-required") == 0)
                         if (*ep != '\0')                                  sk_flags &= ~SSH_SK_USER_PRESENCE_REQD;
                                 fatal("Security key flags \"%s\" is not a "                          else {
                                     "number", optarg);                                  ull = strtoull(optarg, &ep, 0);
                         if (ull > 0xff)                                  if (*ep != '\0')
                                 fatal("Invalid security key flags 0x%llx", ull);                                          fatal("Security key flags \"%s\" is "
                         sk_flags = (uint8_t)ull;                                              "not a number", optarg);
                                   if (ull > 0xff) {
                                           fatal("Invalid security key "
                                               "flags 0x%llx", ull);
                                   }
                                   sk_flags = (uint8_t)ull;
                           }
                         break;                          break;
                 case 'z':                  case 'z':
                         errno = 0;                          errno = 0;
Line 3257 
Line 3284 
         switch (type) {          switch (type) {
         case KEY_ECDSA_SK:          case KEY_ECDSA_SK:
         case KEY_ED25519_SK:          case KEY_ED25519_SK:
                   if (!quiet) {
                           printf("You may need to touch your security key "
                               "to authorize key generation.\n");
                   }
                   fflush(stdout);
                 if (sshsk_enroll(type, sk_provider,                  if (sshsk_enroll(type, sk_provider,
                     cert_key_id == NULL ? "ssh:" : cert_key_id,                      cert_key_id == NULL ? "ssh:" : cert_key_id,
                     sk_flags, NULL, &private, NULL) != 0)                      sk_flags, NULL, &private, NULL) != 0)

Legend:
Removed from v.1.370  
changed lines
  Added in v.1.374