Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package google-guest-oslogin for openSUSE:Factory checked in at 2023-09-01 14:19:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/google-guest-oslogin (Old) and /work/SRC/openSUSE:Factory/.google-guest-oslogin.new.1766 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "google-guest-oslogin" Fri Sep 1 14:19:23 2023 rev:20 rq:1108277 version:20230823.00 Changes: -------- --- /work/SRC/openSUSE:Factory/google-guest-oslogin/google-guest-oslogin.changes 2023-08-16 14:17:46.659263726 +0200 +++ /work/SRC/openSUSE:Factory/.google-guest-oslogin.new.1766/google-guest-oslogin.changes 2023-09-01 14:19:50.997600658 +0200 @@ -1,0 +2,12 @@ +Thu Aug 31 11:46:10 UTC 2023 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- Update to version 20230823.00 + * selinux: Add sshd_key_t type enforcement to trusted user ca (#113) +- from version 20230822.00 + * sshca: Add tests with fingerprint and multiple extensions (#111) +- from version 20230821.01 + * sshca: Support method token and handle multi line (#109) +- from version 20230821.00 + * Update owners (#110) + +------------------------------------------------------------------- Old: ---- google-guest-oslogin-20230808.00.tar.gz New: ---- google-guest-oslogin-20230823.00.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ google-guest-oslogin.spec ++++++ --- /var/tmp/diff_new_pack.e0mZAi/_old 2023-09-01 14:19:52.149641775 +0200 +++ /var/tmp/diff_new_pack.e0mZAi/_new 2023-09-01 14:19:52.153641918 +0200 @@ -19,7 +19,7 @@ %{!?_pam_moduledir: %define _pam_moduledir %{_pamdir}} Name: google-guest-oslogin -Version: 20230808.00 +Version: 20230823.00 Release: 0 Summary: Google Cloud Guest OS Login License: Apache-2.0 ++++++ google-guest-oslogin-20230808.00.tar.gz -> google-guest-oslogin-20230823.00.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20230808.00/OWNERS new/guest-oslogin-20230823.00/OWNERS --- old/guest-oslogin-20230808.00/OWNERS 2023-08-08 20:00:56.000000000 +0200 +++ new/guest-oslogin-20230823.00/OWNERS 2023-08-23 02:54:45.000000000 +0200 @@ -2,10 +2,12 @@ # See the OWNERS docs at https://go.k8s.io/owners approvers: - - anandadalton + - a-crate - bkatyl - chaitanyakulkarni28 - dorileo + - drewhli + - elicriffield - jjerger - karnvadaliya - koln67 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20230808.00/selinux/oslogin.fc new/guest-oslogin-20230823.00/selinux/oslogin.fc --- old/guest-oslogin-20230808.00/selinux/oslogin.fc 2023-08-08 20:00:56.000000000 +0200 +++ new/guest-oslogin-20230823.00/selinux/oslogin.fc 2023-08-23 02:54:45.000000000 +0200 @@ -1,2 +1,3 @@ /var/google-sudoers.d(/.*)? system_u:object_r:google_t:s0 /var/google-users.d(/.*)? system_u:object_r:google_t:s0 +/etc/ssh/oslogin_trustedca.pub -p system_u:object_r:sshd_key_t:s0 Binary files old/guest-oslogin-20230808.00/selinux/oslogin.pp and new/guest-oslogin-20230823.00/selinux/oslogin.pp differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20230808.00/selinux/oslogin.te new/guest-oslogin-20230823.00/selinux/oslogin.te --- old/guest-oslogin-20230808.00/selinux/oslogin.te 2023-08-08 20:00:56.000000000 +0200 +++ new/guest-oslogin-20230823.00/selinux/oslogin.te 2023-08-23 02:54:45.000000000 +0200 @@ -7,9 +7,11 @@ attribute non_security_file_type; type http_port_t; type sshd_t; + type sshd_key_t; class tcp_socket name_connect; class file { create getattr setattr write open unlink }; class dir { search write remove_name add_name }; + class fifo_file { getattr open read }; } #============= types ============== @@ -22,3 +24,4 @@ allow sshd_t google_t:file { create getattr setattr write open unlink }; allow sshd_t google_t:dir { search write remove_name add_name }; allow sshd_t http_port_t:tcp_socket name_connect; +allow sshd_t sshd_key_t:fifo_file { getattr open read }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20230808.00/src/pam/oslogin_sshca.cc new/guest-oslogin-20230823.00/src/pam/oslogin_sshca.cc --- old/guest-oslogin-20230808.00/src/pam/oslogin_sshca.cc 2023-08-08 20:00:56.000000000 +0200 +++ new/guest-oslogin-20230823.00/src/pam/oslogin_sshca.cc 2023-08-23 02:54:45.000000000 +0200 @@ -24,25 +24,25 @@ int (*skip_custom_fields)(char **buff, size_t *blen); } sshca_type; -static int sshca_dsa_skip_fields(char **buff, size_t *blen); -static int sshca_ecdsa_skip_fields(char **buff, size_t *blen); -static int sshca_ed25519_skip_fields(char **buff, size_t *blen); -static int sshca_rsa_skip_fields(char **buff, size_t *blen); +static int _sshca_dsa_skip_fields(char **buff, size_t *blen); +static int _sshca_ecdsa_skip_fields(char **buff, size_t *blen); +static int _sshca_ed25519_skip_fields(char **buff, size_t *blen); +static int _sshca_rsa_skip_fields(char **buff, size_t *blen); static sshca_type sshca_impl[] = { - {"ecdsa-sha2-nistp256-cert-...@openssh.com", sshca_ecdsa_skip_fields}, - {"ecdsa-sha2-nistp384-cert-...@openssh.com", sshca_ecdsa_skip_fields}, - {"ecdsa-sha2-nistp521-cert-...@openssh.com", sshca_ecdsa_skip_fields}, - {"rsa-sha2-256-cert-...@openssh.com", sshca_rsa_skip_fields}, - {"rsa-sha2-512-cert-...@openssh.com", sshca_rsa_skip_fields}, - {"ssh-dss-cert-...@openssh.com", sshca_dsa_skip_fields}, - {"ssh-ed25519-cert-...@openssh.com", sshca_ed25519_skip_fields}, - {"ssh-rsa-cert-...@openssh.com", sshca_rsa_skip_fields}, + {"ecdsa-sha2-nistp256-cert-...@openssh.com", _sshca_ecdsa_skip_fields}, + {"ecdsa-sha2-nistp384-cert-...@openssh.com", _sshca_ecdsa_skip_fields}, + {"ecdsa-sha2-nistp521-cert-...@openssh.com", _sshca_ecdsa_skip_fields}, + {"rsa-sha2-256-cert-...@openssh.com", _sshca_rsa_skip_fields}, + {"rsa-sha2-512-cert-...@openssh.com", _sshca_rsa_skip_fields}, + {"ssh-dss-cert-...@openssh.com", _sshca_dsa_skip_fields}, + {"ssh-ed25519-cert-...@openssh.com", _sshca_ed25519_skip_fields}, + {"ssh-rsa-cert-...@openssh.com", _sshca_rsa_skip_fields}, { }, }; static int -sshca_get_string(char **buff, size_t *blen, char **ptr, size_t *len_ptr) { +_sshca_get_string(char **buff, size_t *blen, char **ptr, size_t *len_ptr) { u_int32_t len; if (*blen < 4) { @@ -74,7 +74,7 @@ } static sshca_type* -sshca_get_implementation(const char *type) { +_sshca_get_implementation(const char *type) { sshca_type *iter; for (iter = sshca_impl; iter->type != NULL; iter++) { @@ -87,14 +87,14 @@ } static int -sshca_rsa_skip_fields(char **buff, size_t *blen) { +_sshca_rsa_skip_fields(char **buff, size_t *blen) { // Skip e. - if (sshca_get_string(buff, blen, NULL, NULL) < 0) { + if (_sshca_get_string(buff, blen, NULL, NULL) < 0) { return -1; } // Skip n. - if (sshca_get_string(buff, blen, NULL, NULL) < 0) { + if (_sshca_get_string(buff, blen, NULL, NULL) < 0) { return -1; } @@ -102,24 +102,24 @@ } static int -sshca_dsa_skip_fields(char **buff, size_t *blen) { +_sshca_dsa_skip_fields(char **buff, size_t *blen) { // Skip p. - if (sshca_get_string(buff, blen, NULL, NULL) < 0) { + if (_sshca_get_string(buff, blen, NULL, NULL) < 0) { return -1; } // Skip q. - if (sshca_get_string(buff, blen, NULL, NULL) < 0) { + if (_sshca_get_string(buff, blen, NULL, NULL) < 0) { return -1; } // Skip g. - if (sshca_get_string(buff, blen, NULL, NULL) < 0) { + if (_sshca_get_string(buff, blen, NULL, NULL) < 0) { return -1; } // Skip y. - if (sshca_get_string(buff, blen, NULL, NULL) < 0) { + if (_sshca_get_string(buff, blen, NULL, NULL) < 0) { return -1; } @@ -127,20 +127,20 @@ } static int -sshca_ed25519_skip_fields(char **buff, size_t *blen) { +_sshca_ed25519_skip_fields(char **buff, size_t *blen) { // Skip pk. - return sshca_get_string(buff, blen, NULL, NULL); + return _sshca_get_string(buff, blen, NULL, NULL); } static int -sshca_ecdsa_skip_fields(char **buff, size_t *blen) { +_sshca_ecdsa_skip_fields(char **buff, size_t *blen) { // Skip curve. - if (sshca_get_string(buff, blen, NULL, NULL) < 0) { + if (_sshca_get_string(buff, blen, NULL, NULL) < 0) { return -1; } // Skip public key. - if (sshca_get_string(buff, blen, NULL, NULL) < 0) { + if (_sshca_get_string(buff, blen, NULL, NULL) < 0) { return -1; } @@ -148,7 +148,7 @@ } static int -sshca_get_extension(pam_handle_t *pamh, const char *key, size_t k_len, char **exts) { +_sshca_get_extension(pam_handle_t *pamh, const char *key, size_t k_len, char **exts) { sshca_type* impl = NULL; size_t n_len, t_len, tmp_exts_len, ret = -1; char *tmp_exts, *tmp_head, *type, *key_b64, *head; @@ -171,19 +171,19 @@ goto out; } - if (sshca_get_string(&key_b64, &n_len, &type, &t_len) < 0) { + if (_sshca_get_string(&key_b64, &n_len, &type, &t_len) < 0) { PAM_SYSLOG(pamh, LOG_ERR, "Could not get cert's type string."); goto out; } - impl = sshca_get_implementation(type); + impl = _sshca_get_implementation(type); if (impl == NULL) { PAM_SYSLOG(pamh, LOG_ERR, "Invalid cert type: %s.", type); goto out; } // Skip nonce for all types of certificates. - if (sshca_get_string(&key_b64, &n_len, NULL, NULL) < 0) { + if (_sshca_get_string(&key_b64, &n_len, NULL, NULL) < 0) { PAM_SYSLOG(pamh, LOG_ERR, "Failed to skip cert's \"nonce\" field."); goto out; } @@ -201,13 +201,13 @@ SKIP_UINT32(key_b64, n_len); // Skip key id. - if (sshca_get_string(&key_b64, &n_len, NULL, NULL) < 0) { + if (_sshca_get_string(&key_b64, &n_len, NULL, NULL) < 0) { PAM_SYSLOG(pamh, LOG_ERR, "Failed to skip cert's \"key id\" field."); goto out; } // Skip valid principals. - if (sshca_get_string(&key_b64, &n_len, NULL, NULL) < 0) { + if (_sshca_get_string(&key_b64, &n_len, NULL, NULL) < 0) { PAM_SYSLOG(pamh, LOG_ERR, "Failed to skip cert's \"valid principals\" " "field."); goto out; @@ -220,21 +220,21 @@ SKIP_UINT64(key_b64, n_len); // Skip critical options. - if (sshca_get_string(&key_b64, &n_len, NULL, NULL) < 0) { + if (_sshca_get_string(&key_b64, &n_len, NULL, NULL) < 0) { PAM_SYSLOG(pamh, LOG_ERR, "Failed to skip cert's \"critical options\" " "field."); goto out; } // Get extensions buffer. - if (sshca_get_string(&key_b64, &n_len, &tmp_exts, &tmp_exts_len) < 0) { + if (_sshca_get_string(&key_b64, &n_len, &tmp_exts, &tmp_exts_len) < 0) { PAM_SYSLOG(pamh, LOG_ERR, "Failed to get cert's \"extensions\" field."); goto out; } // The field extensions is a self described/sized buffer. tmp_head = tmp_exts; - if (sshca_get_string(&tmp_exts, &tmp_exts_len, exts, &ret) < 0) { + if (_sshca_get_string(&tmp_exts, &tmp_exts_len, exts, &ret) < 0) { PAM_SYSLOG(pamh, LOG_ERR, "Failed to read google's extension."); goto out; } @@ -248,28 +248,31 @@ } static size_t -sshca_split_key(const char *blob, char **out) { - int i, len, k_start; +_sshca_split_key(const char *blob, char **out) { + int i, len, algo_start, k_start; char *key = NULL; - len = 0; - k_start = 0; + len, k_start, algo_start = 0; for (i = 0; blob[i] != '\0'; i++) { if (blob[i] == ' ' && key == NULL) { - k_start = i + 1; - key = (char *)blob + i + 1; + if (!algo_start) { + algo_start = i; + } else { + k_start = i + 1; + key = (char *)blob + i + 1; + } } else if (blob[i] == ' ' && key != NULL) { len = i; } } *out = strndup(key, len - k_start); - return len; + return strlen(*out); } static size_t -sshca_extract_fingerprint(const char *extension, char **out) { +_sshca_extract_fingerprint(const char *extension, char **out) { int i = 0; if (extension == NULL || strstr(extension, "fingerpr...@google.com=") == NULL) { @@ -285,27 +288,27 @@ return i; } -int -sshca_get_byoid_fingerprint(pam_handle_t *pamh, const char *blob, char **fingerprint) { +static int +_sshca_get_byoid_fingerprint(pam_handle_t *pamh, const char *blob, char **fingerprint) { size_t f_len, k_len, exts_len = -1; char *key, *exts = NULL; - k_len = sshca_split_key(blob, &key); + k_len = _sshca_split_key(blob, &key); if (k_len <= 0) { PAM_SYSLOG(pamh, LOG_ERR, "Could not split ssh ca cert."); goto out; } - exts_len = sshca_get_extension(pamh, key, k_len, &exts); + exts_len = _sshca_get_extension(pamh, key, k_len, &exts); if (exts_len < 0) { - PAM_SYSLOG(pamh, LOG_ERR, "Could not parse/extract extension" + PAM_SYSLOG(pamh, LOG_ERR, "Could not parse/extract extension " "from ssh ca cert."); goto out; } - f_len = sshca_extract_fingerprint(exts, fingerprint); + f_len = _sshca_extract_fingerprint(exts, fingerprint); if (f_len == 0) { - PAM_SYSLOG(pamh, LOG_ERR, "Could not parse/extract fingerprint" + PAM_SYSLOG(pamh, LOG_ERR, "Could not parse/extract fingerprint " "from ssh ca cert's extension."); goto out; } @@ -316,6 +319,33 @@ return f_len; } + +int +sshca_get_byoid_fingerprint(pam_handle_t *pamh, const char *blob, char **fingerprint) { + char *line, *saveptr = NULL; + size_t f_len = 0; + + if (blob == NULL || strlen(blob) == 0) { + PAM_SYSLOG(pamh, LOG_ERR, "Could not parse/extract fingerprint " + "from ssh ca cert's extension: \"blob\" is empty."); + } + + if (fingerprint == NULL) { + PAM_SYSLOG(pamh, LOG_ERR, "Could not parse/extract fingerprint " + "from ssh ca cert's extension: \"fingerprint\" is NULL."); + } + + line = strtok_r((char *)blob, "\n", &saveptr); + while (line != NULL) { + f_len = _sshca_get_byoid_fingerprint(pamh, line, fingerprint); + if (f_len > 0) { + return f_len; + } + line = strtok_r(NULL, "\n", &saveptr); + } + + return f_len; +} #ifdef __cplusplus } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20230808.00/test/Makefile new/guest-oslogin-20230823.00/test/Makefile --- old/guest-oslogin-20230808.00/test/Makefile 2023-08-08 20:00:56.000000000 +0200 +++ new/guest-oslogin-20230823.00/test/Makefile 2023-08-23 02:54:45.000000000 +0200 @@ -7,7 +7,7 @@ TEST_RUNNER = ./test_runner --gtest_output=xml NEW_TEST_RUNNER = ./new_test_runner --gtest_output=xml SSHCA_TEST_RUNNER = ./sshca_runner --gtest_output=xml --gtest_filter="SSHCATests.*" -CPPFLAGS += -I$(TOPDIR)/src/include -I/usr/include/json-c -I$(GTEST_DIR) -isystem $(GTEST_DIR)/include +CPPFLAGS += -I$(TOPDIR)/src/include -I$(TOPDIR)/third_party/include -I/usr/include/json-c -I$(GTEST_DIR) -isystem $(GTEST_DIR)/include CXXFLAGS += -g -Wall -Wextra -std=c++11 LDLIBS = -lcurl -ljson-c -lpthread diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/guest-oslogin-20230808.00/test/oslogin_sshca_test.cc new/guest-oslogin-20230823.00/test/oslogin_sshca_test.cc --- old/guest-oslogin-20230808.00/test/oslogin_sshca_test.cc 2023-08-08 20:00:56.000000000 +0200 +++ new/guest-oslogin-20230823.00/test/oslogin_sshca_test.cc 2023-08-23 02:54:45.000000000 +0200 @@ -23,7 +23,7 @@ namespace oslogin_utils { -#define VALID_ECDSA_SINGLE_EXT "ecdsa-sha2-nistp256-cert-...@openssh.com " \ +#define VALID_ECDSA_SINGLE_EXT "publickey ecdsa-sha2-nistp256-cert-...@openssh.com " \ "AAAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAg1yMhf" \ "NVBe4etWEQNDmtxhsAD+YAb7fl/Bn0Z+GGEE9EAAAAIbmlzdHAyNTYAAABBBJ+nM2cR4B" \ "FHbmokUIScpTaSkx/F1QS2KfIx6z4wcpUmjzKtbP0KFw12mMUiNHzlNBD0B2RnX54uN+k" \ @@ -48,7 +48,23 @@ "bcetrgglFiujUFlIdxkHMmsIxHM88wEnJAlETd7zl9WR/FgQYn3y2dZz9VKoheJdg== " \ "pantheon.sitar.mig" \ -#define INVALID_ECDSA_NO_FP "ecdsa-sha2-nistp256-cert-...@openssh.com A" \ +#define VALID_ECDSA_MULTI_EXT "publickey ecdsa-sha2-nistp256-cert-v01@o" \ + "penssh.com AAAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb" \ + "20AAAAgcBZK0OB/KoC8ir+mo+aDJm3e88cmk1/UZ+NMhiWyXMQAAAAIbmlzdHAyNTYAA" \ + "ABBBCK4bF9EA181g2ZHWmuggqjsK53SwQKVzyDNZHDIMcCN117t6dSJYvSAgnlg01PGx" \ + "9HyTz7ffcPf3yUfN21WgRsAAAAAAAAAAAAAAAEAAAAWZmluZ2VycHJpbnRAZ29vZ2xlL" \ + "mNvbQAAABoAAAAWZmluZ2VycHJpbnRAZ29vZ2xlLmNvbQAAAABk5O4EAAAAAGbE0HQAA" \ + "AAAAAAAxQAAADtmaW5nZXJwcmludEBnb29nbGUuY29tPWI4NmRiNGNhLTA5ZmQtNDI5Z" \ + "S1iMTIxLWExMjc5OTYxNDAzMgAAAAAAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAA" \ + "AAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd" \ + "2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAA" \ + "AAAAAAAAGgAAAATZWNkc2Etc2hhMi1uaXN0cDI1NgAAAAhuaXN0cDI1NgAAAEEErH/DI" \ + "zvUUx1Isb5xtFpgt2TgPsB9QfbM7EAGKJ8yZaljZr2blH+XsQjIognAv3FCE3t3zTshl" \ + "8atWl5fzzXa4QAAAGUAAAATZWNkc2Etc2hhMi1uaXN0cDI1NgAAAEoAAAAhAPTeGWrdg" \ + "chbWRO1o6ignVyuwq6tTjz/rSfzkjDZw6BsAAAAIQCSDGI9KQuAxhaVDhD9y1XHm2s+I" \ + "+IddaiA/0hzb4MDtA== fingerpr...@google.com" \ + +#define INVALID_ECDSA_NO_FP "publickey ecdsa-sha2-nistp256-cert-...@openssh.com A" \ "AAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgxlbtL" \ "/mjYXEgsXjl7GZgpvIFncxbfmjPYVewm1sdXo4AAAAIbmlzdHAyNTYAAABBBMYdGLr6M" \ "102qgBeJ3CanDi0WV1vGif2jMMv1ldtN0+wbDztYdtUu8iop/tN46wFVbfmSzyx/R2YL" \ @@ -60,12 +76,12 @@ "pM3dlil8jDXlpL4U1JSmP3MeHX0OKcpHgAAACAYiWa3KrreEzN+VrnuhwStH70bvH9Qm" \ "6Va6a0IcMrMkA== fingerpr...@google.com" \ -#define INVALID_ECDSA_NON_CERT "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTI" \ +#define INVALID_ECDSA_NON_CERT "publickey ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTI" \ "tbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMYdGLr6M102qgBeJ3CanDi0WV1vGif2jMM" \ "v1ldtN0+wbDztYdtUu8iop/tN46wFVbfmSzyx/R2YLbvQ+z2k/sY= " \ "fingerpr...@google.com" \ -#define VALID_RSA_SINGLE_EXT "ssh-rsa-cert-...@openssh.com AAAAHHNzaC1yc" \ +#define VALID_RSA_SINGLE_EXT "publickey ssh-rsa-cert-...@openssh.com AAAAHHNzaC1yc" \ "2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgijvX6FIu7BjRIACC+C0b8cxrAORm8flzJU" \ "3Y2q7ci/4AAAADAQABAAABAQCU/mydd9mSwlSDv4T3OiL5IHrvSuXpWFvCEDmVyLxBHz1" \ "FCwjnk3G5xSt9nGtUyL0KpGt0dyvLU07JGB33cbVnVe1z3373FNKxF8LdwDTEZG6xijXu" \ @@ -98,7 +114,43 @@ "IBVqgGgEztsSYO0brQWsCoiOxToxWiqDbYc2ifgcIUB+kSzvmbkvbgoNuT111PKpMkIii" \ "GqmJpNjwsqExxW5E= fingerpr...@google.com" \ -#define INVALID_RSA_NO_FP "ssh-rsa-cert-...@openssh.com AAAAHHNzaC1yc2Et" \ +#define VALID_RSA_MULTI_EXT "publickey ssh-rsa-cert-...@openssh.com AAAA" \ + "HHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgpv8XuCPuX0/2hATuCuFa1kVXR" \ + "CNzX7gU6T4Q/EVZiMkAAAADAQABAAABAQDPh7YORgzS7V3F5oxVlwTABglvV6cUx32GO7" \ + "I84CxVRnWdW9D4eQoRD+lN8YKcbWN826/G9A9AIyADl6nMpxocgymCCyz4ujapTf/ntaH" \ + "pc7QTNuKDQ3x9ptHVjPSbXx+HVBC0gFgCxRlymAjN8P9Rex+wkJRMPCOIwykO9H5BkDfc" \ + "iZMcPc+BAVvM/A+oREjHVO7yyOEiMXByoiXOg9yd4KM70ypmAOLan4unQRy10Bye6U2fL" \ + "mqkPzfLIQpdExBmU+MEEBum+Kqk3pdppwli/EnueHSkljtJLBBID5bD3xEzNcdi107OoW" \ + "fXBgiTAyewrW7GCYw1V27LpUwg21/lAAAAAAAAAAAAAAABAAAAFmZpbmdlcnByaW50QGd" \ + "vb2dsZS5jb20AAAAaAAAAFmZpbmdlcnByaW50QGdvb2dsZS5jb20AAAAAZOTh1AAAAABm" \ + "xMQ6AAAAAAAAAMUAAAA7ZmluZ2VycHJpbnRAZ29vZ2xlLmNvbT1iODZkYjRjYS0wOWZkL" \ + "TQyOWUtYjEyMS1hMTI3OTk2MTQwMzIAAAAAAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZw" \ + "AAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZ" \ + "vcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAA" \ + "AAAAAAAAAAIXAAAAB3NzaC1yc2EAAAADAQABAAACAQDY+memx1OUatqYIbrKErOTXM1/h" \ + "rqeDmT423gK5ecqmzJt86ZS1Z1WhuqOD4CW9YISZP2VpScV61Cj4OF5MuEi8V7UaaJf6N" \ + "himixleP88rCxCbXWc9MwX7xBnX8spvOPcrof9zs8fKnDJuhRMMf614gfD3C0cPpahtxx" \ + "4n7KytJ14jSKaECUjcpZ+f30WHrZvLY4sJMmMBJhcuMWC6Y1lckMT0t9M0pjRs2ZUOOyc" \ + "R5wTxybr7rFxzQhHiSpfXeVwErz8b+5IxvvlqUCawTmVmntcP9atobNZCIRt28K6Fyw7A" \ + "AjoD0jP3nLoEQuk2As4erfmuabBZK4HwxoaWVSbsV8T7RYq/JiDdvP6x+BbEhgmrnBRUA" \ + "dPTRy2fEFxgIKbKhg8tm5M9GO8k/VeVykeOmcL88Da2swXuCcp1wAQjrrn81jyunsVlLG" \ + "Kzeco3qrSn/6nwtcNOu2I8JNwk1GKvV7KTYEL/xNQSQ2Pk6r1HlPlyq/eo3HuFE/NxO9u" \ + "iXLV3bapMSt3KsvCkTpLW1eJLg9bytd2aVpZW7s4uuR1mTZfgDPM75zXubkgqA2RVQ7Tl" \ + "76MzBW9LL1f/B7lMxdJYQF1WqqSJNVcRLS5L0zpuS9Z48piYv8v2ioJGCFae+CnwmNYw+" \ + "wPAd0MXp1X6808ceRvmqADSbU4zxH00BUIdwAAAhQAAAAMcnNhLXNoYTItNTEyAAACAF6" \ + "7EZPDjyBO6+Zv88KnNyTFkQ5+wbS2DzD9myW/cSGxEvKX/Ccznzi8ROesNzjv4vOJja3Z" \ + "2UIm4LjmzVXrTJsu0XFQ8NnN8Bk1GedqxLgYUfEgTkVh2Wj778Cw278NTQFRqwdkYrK3q" \ + "DksHGrp8xoXNb7kf8Kws1R4GS8ue0mW5QFgQRd2WLRckYh5S9cnDMbw4wGrZFFu75RJUA" \ + "lozlB7sDCcMJRtJ5VmU8PgzyZpsRm2GnNCLqbnH/QbH3wPnHgbtaZqGU5vU2uRkwML+P8" \ + "mn8fbePqOw4sC5sGvxOZ3Zr6S22WygRaoq7iM6w4Yhjg57Ga0RRsT8KbAmFyZlnghroS8" \ + "9R84iVJPDxjSskrpY1oM5pjonvmD/3GeGd6oXl/x9A+df5YBiVxn6KiXgbS90yYXJFpeh" \ + "xE+whj5PeNlL/6qaqf0MesCHT+6Uwo/Hp7DAbRCzEt8KBWr1nt6bLwEzitT4nokTljo70" \ + "ctSlNsmXAOalqatlffQnGF1J5n3HDbPH6zKon82MMAnlha+SGfDQqc1uhMdfbfL7DMhFm" \ + "xLPX5BvoRzQT96EGgWjhlmI7j2e8fghkjsCwaH7HrfSBuXYvw1DPRBaOktIEDPk9tF70B" \ + "WIdoJJX2phxK1km8+78sdCbtVVaTzlGNDflqM++kqmNHhZFtoWRYeHKYHRFo " \ + "fingerpr...@google.com" \ + +#define INVALID_RSA_NO_FP "publickey ssh-rsa-cert-...@openssh.com AAAAHHNzaC1yc2Et" \ "Y2VydC12MDFAb3BlbnNzaC5jb20AAAAgwCArEN+qa2BR5+4DNaSCwGP3avz3wFcJzuaZk" \ "UrXsv0AAAADAQABAAABAQCic3UBNOW41D6BH8e8acBKAw3PdWcvqEIP8v5Otk56nXNrZH" \ "8tTrposPHZOjAoMCyv9F3siuv+ZfX8k0/x2l9Efayhdcr8AWIr+riqYBNHUby7iefdXCR" \ @@ -130,7 +182,7 @@ "6tN/eIqzpsfLbRPoK4B7xmoEqtPn1KidKZnvegGasSfrquoyM/E4enhV3kXfJQ== " \ "fingerpr...@google.com" \ -#define INVALID_RSA_NON_CERT "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCU/m" \ +#define INVALID_RSA_NON_CERT "publickey ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCU/m" \ "ydd9mSwlSDv4T3OiL5IHrvSuXpWFvCEDmVyLxBHz1FCwjnk3G5xSt9nGtUyL0KpGt0dyv" \ "LU07JGB33cbVnVe1z3373FNKxF8LdwDTEZG6xijXuOi4xfk47arlpk9Pw14qcnVu9on4R" \ "m4cSmm5PkyIwTfJsKvOl8oOgZ0HZG7pzYEt+9wUoeGzUE0rsAreNFVB7ZBqHp2ZtdIe5d" \ @@ -138,7 +190,7 @@ "NZPchE/T19LSP/fQbPCGmqc+mC6YodSEbLkO6JmOaW+knTEc9D6xdozx6Oa4vR " \ "fingerpr...@google.com" \ -#define VALID_DSA_SINGLE_EXT "ssh-dss-cert-...@openssh.com AAAAHHNzaC1kc" \ +#define VALID_DSA_SINGLE_EXT "publickey ssh-dss-cert-...@openssh.com AAAAHHNzaC1kc" \ "3MtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgH400e9SzsvaN8OkKvH26sXEJtU/BVc2IBG" \ "fdZDHk508AAACBAO9UdOmq7Z0qy86mwsDf07TmXQe7X0TLKbyFSsd2b+jTCzpXy9rBhgg" \ "oJlzYzxSQgtR4JaSTauZMiQQViN3cKvHuGfAXIOIMtMHVupNy6WSkcixGrvw6Y0Yr90+e" \ @@ -163,7 +215,35 @@ "AAAAdzc2gtZHNzAAAAKH5faM5YTlMn+h2cf99PJ8rjvqQUJoh5yi3a4pkGcr5MJs53Wfi" \ "DPaA= fingerpr...@google.com" \ -#define INVALID_DSA_NO_FP "ssh-dss-cert-...@openssh.com AAAAHHNzaC1kc3Mt" \ +#define VALID_DSA_MULTI_EXT "publickey ssh-dss-cert-...@openssh.com AAAA" \ + "HHNzaC1kc3MtY2VydC12MDFAb3BlbnNzaC5jb20AAAAg4F67aKUUtM8mWvtHxr2AjRcDB" \ + "jkmICwZRUOx4JaDVYEAAACBAKbdH1vmX/ZCVY1v41hXxEroqQpfOGR+G/0gtuscO5rU+c" \ + "9T4qq5lm3E+SwFfCCqC4x6+zDomsJvptMJU0r1oxMuXDo0PRtr4qMMKw0FwZ29D+9zITb" \ + "FvaRUc4+FQ5JvxCUBEKQxzetsTyIsirM4vWW6oKMGACAvgs3qu+CrPKtnAAAAFQDWlrhr" \ + "iKONlBabChlcap+cmeMzvQAAAIEAnlrkClDOBZ0Cx+cQF201G3Bq9eThHYo+sxydojtIW" \ + "SYAJFYLvQjF0r/34Wxj5sBgxcGhe8yp3Y+ZggB3vGZ6UjzCy6F6zkfgyl+KzYfV42uRrW" \ + "+7dn7VChySMM2OcgTnN69QMTkym8Pv00qF+a0XD1mH9uK0l1q0eZtndj59rfUAAACARtR" \ + "gCOBB7JoU1Br38bo6VNww26oRV4BkVEQN9l3M+6sxG0IL8brBuCh1JLyQVLMcXNj+K2pQ" \ + "PH8JDKdOrbP/xarcRY+fhRN5IvP5n/fNOJp3oXsvjiOeH1z4u1Ra7e0DAoJEOofKbr/sg" \ + "QfCNsB4gP4u62ck27w2pRXNdxJKyrkAAAAAAAAAAAAAAAEAAAAWZmluZ2VycHJpbnRAZ2" \ + "9vZ2xlLmNvbQAAABoAAAAWZmluZ2VycHJpbnRAZ29vZ2xlLmNvbQAAAABk5Nv4AAAAAGb" \ + "Evl8AAAAAAAAAxQAAADtmaW5nZXJwcmludEBnb29nbGUuY29tPWI4NmRiNGNhLTA5ZmQt" \ + "NDI5ZS1iMTIxLWExMjc5OTYxNDAzMgAAAAAAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nA" \ + "AAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm" \ + "9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAA" \ + "AAAAAAAAAAbEAAAAHc3NoLWRzcwAAAIEAuoOoF4etzwXHXkc4b1Wx15adJkLBzbRARAuc" \ + "A360XxdxzO+Gt5A/OLV7eE8jxVaz0sC9CE1ikpAp/u0ZL+tVZyA0X2KMAJetgFxVZueyI" \ + "wHY1IKOzJibJ4OP8re3MiYYoxdAd2fK4n9x/IvjIIXy8GfEsiBQXNEBDcMKTCGgJC0AAA" \ + "AVAPhsO/SR/pV7M52uwsfIbnTshxC/AAAAgCEG5HUjilYhxoWKAXhdsnEHKGzv9zDTkBQ" \ + "9c5zrG/ZegmJiFrpmwL2ON38Co+BcH88kxDjdyVOkIncldxVd0OpdAGLClhEVeY3g4nWl" \ + "DYPPxkH4GJapMltkYMwa6HaWCRRgNE/aEwcAyMj3lwtCRXtX33tMM+9hjDHUbRNkpv60A" \ + "AAAgB/6hg9VhH/eJLQm3URYl+dXSiBONDkbLzKHUvSaAqmItoDDsW6N/pd5XqrSzLxa1R" \ + "DihDoRNZbZ7uWCjRKfwoPZTKL42OV4WRa//gPDzx55zECZokYg0d5/AbZ3pmf9XYo2Lka" \ + "eA3PlT8Oz/DABW3BKipLrvXhZYAn8PumuUNsdAAAANwAAAAdzc2gtZHNzAAAAKBleCvo9" \ + "QgobHREVlFH0/E84XhTVRfOok7RE4ht2EOiZLG2cfThvWUQ= " \ + "fingerpr...@google.com" \ + +#define INVALID_DSA_NO_FP "publickey ssh-dss-cert-...@openssh.com AAAAHHNzaC1kc3Mt" \ "Y2VydC12MDFAb3BlbnNzaC5jb20AAAAgGrlYnOqQxs/zzfWRcrM7DHrFy653/x7rtOghw" \ "R/f3HIAAACBALzWA8yWLownZsO4Tuc4DF6EplCJ1SBSEqMYAEhzrnxjHkoOpJ3Ncs+Zn5" \ "jdcnCamkm6KQ4keXkV0xwLthRgLxhUguc9xANV5k2Vft+axWr+cp+KNiGzDjblTUnWzQD" \ @@ -187,7 +267,7 @@ "+YzrU7BOR7qnGs1qJqWhgFKXETMeHxPzpi4ny9tSNlI6c0g= " \ "fingerpr...@google.com" \ -#define INVALID_DSA_NON_CERT "ssh-dss AAAAB3NzaC1kc3MAAACBAO9UdOmq7Z0qy8" \ +#define INVALID_DSA_NON_CERT "publickey ssh-dss AAAAB3NzaC1kc3MAAACBAO9UdOmq7Z0qy8" \ "6mwsDf07TmXQe7X0TLKbyFSsd2b+jTCzpXy9rBhggoJlzYzxSQgtR4JaSTauZMiQQViN3" \ "cKvHuGfAXIOIMtMHVupNy6WSkcixGrvw6Y0Yr90+e8PXcFw6jwQbFZX4v9zlUuIl067rC" \ "rxp1jnhBjxvBZEmpR/ezAAAAFQCO10V2wYXJ7cSo4eEgHB1BnOxbzwAAAIEAzbdt5bgzV" \ @@ -198,7 +278,7 @@ "kN0PeT2KtyGWqLcnbFRSQGNQOs+vv3TIUofZosXKTA2EtmjpKcIbfu3lF+J50g= " \ "fingerpr...@google.com" \ -#define VALID_ED25519_SINGLE_EXT "ssh-ed25519-cert-...@openssh.com AAAAI" \ +#define VALID_ED25519_SINGLE_EXT "publickey ssh-ed25519-cert-...@openssh.com AAAAI" \ "HNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIDaErnQWEw/jxPD0JUJsEk" \ "CtENcE11Zl53QHbxbAgx22AAAAIHs6r2AekiTHmmoJMKxAKtKW4qcGq5Ku1+SJ1NLdZh0" \ "1AAAAAAAAAAAAAAABAAAAFmZpbmdlcnByaW50QGdvb2dsZS5jb20AAAAaAAAAFmZpbmdl" \ @@ -209,7 +289,20 @@ "Yv0T0U/GZoCiLfVm3pcXV3RA8aze+y/pbjv+MOxjmAb4KbRH31/S34UALsyGwQM= fing" \ "erpr...@google.com" \ -#define INVALID_ED25519_NO_FP "ssh-ed25519-cert-...@openssh.com AAAAIHNz" \ +#define VALID_ED25519_MULTI_EXT "publickey ssh-ed25519-cert-v01@openssh." \ + "com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIEBlk2f75yvu5" \ + "8QqsykJfRrKxblQi2RmcW2bzj9mhi2YAAAAINYsHqqaS4JdLuAevLnHc7lBu0qv2/Lfx+" \ + "VLRTIIA5wxAAAAAAAAAAAAAAABAAAAFmZpbmdlcnByaW50QGdvb2dsZS5jb20AAAAaAAA" \ + "AFmZpbmdlcnByaW50QGdvb2dsZS5jb20AAAAAZOTuuAAAAABmxND2AAAAAAAAAMUAAAA7" \ + "ZmluZ2VycHJpbnRAZ29vZ2xlLmNvbT1iODZkYjRjYS0wOWZkLTQyOWUtYjEyMS1hMTI3O" \ + "Tk2MTQwMzIAAAAAAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LW" \ + "FnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAA" \ + "ACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3Nz" \ + "aC1lZDI1NTE5AAAAIJD/WK1OEhbe0bG/3ibbjawl0FNHf3nho9hF9D5QcXOPAAAAUwAAA" \ + "Atzc2gtZWQyNTUxOQAAAEANxz8Lv5Ojc0U1SIU5eGoGk8N+LAHS5/OfB3AvLT94raJ8qc" \ + "lB7KvEgKOycsF5xLJOL9+/oe29SeNTq+ubIkIN fingerpr...@google.com" \ + +#define INVALID_ED25519_NO_FP "publickey ssh-ed25519-cert-...@openssh.com AAAAIHNz" \ "aC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIDDgIXa9QLFY7RpSNnWDm3Saq" \ "YZ5HGcpzHq9hdv64nqXAAAAIKfDRdZjpCb2YVsmhs286hQTH7JFctizNC0W7UQKfruSAA" \ "AAAAAAAAAAAAABAAAAFmZpbmdlcnByaW50QGdvb2dsZS5jb20AAAAaAAAAFmZpbmdlcnB" \ @@ -218,7 +311,7 @@ "AALc3NoLWVkMjU1MTkAAABAt2CPRZos3Lna+44LwI6ON8rRktxAqz1S4nUf+IwrG83Wbv" \ "nEvvZ2plHLTAU7GP2ZMedVKoXB9KXB2vNBVjt9Cg== fingerpr...@google.com" \ -#define INVALID_ED25519_NON_CERT "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH" \ +#define INVALID_ED25519_NON_CERT "publickey ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH" \ "s6r2AekiTHmmoJMKxAKtKW4qcGq5Ku1+SJ1NLdZh01 fingerpr...@google.com" \ TEST(SSHCATests, TestValidSingleExtCert) { @@ -226,9 +319,13 @@ const char *key; } *iter, tests[] = { {VALID_RSA_SINGLE_EXT}, + {VALID_RSA_MULTI_EXT}, {VALID_DSA_SINGLE_EXT}, + {VALID_DSA_MULTI_EXT}, {VALID_ECDSA_SINGLE_EXT}, + {VALID_ECDSA_MULTI_EXT}, {VALID_ED25519_SINGLE_EXT}, + {VALID_ED25519_MULTI_EXT}, { NULL }, };