sssd-2.5.0-2: Fix KCM regression on long upgrade path

Resolves: rhbz#1962006
This commit is contained in:
Pavel Březina 2021-05-19 19:30:33 +02:00
parent 0f12c3fbb3
commit f224e547f4
4 changed files with 213 additions and 1 deletions

View File

@ -0,0 +1,49 @@
From 9b017dbc80cf09b3a2d7e09f771faf70d4538b4f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Date: Thu, 13 May 2021 12:18:24 +0200
Subject: [PATCH 1/5] KCM: return KRB5_FCC_INTERNAL for unknown or not
implemented operation
sssd-kcm should follow Heimdal's return codes. Heimdal returns `KRB5_FCC_INTERNAL`
for cases where operation code is not known or not implemented. See:
* https://github.com/heimdal/heimdal/blob/master/kcm/protocol.c#L1785
* https://github.com/heimdal/heimdal/blob/master/kcm/protocol.c#L1792
We returned different codes before this patch which makes Kerberos to differentiate
between Heimdal and sssd implementation. This leads to errors like:
* https://github.com/krb5/krb5/pull/1178#issuecomment-838289703
Resolves: https://github.com/SSSD/sssd/issues/5628
Reviewed-by: Justin Stephenson <jstephen@redhat.com>
---
src/responder/kcm/kcmsrv_cmd.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/responder/kcm/kcmsrv_cmd.c b/src/responder/kcm/kcmsrv_cmd.c
index 6b11b184124c7cb17be2c7858afda3d56a4dcea6..3ad17ef431bb3d42b39f56d04c97acfc25f06d2f 100644
--- a/src/responder/kcm/kcmsrv_cmd.c
+++ b/src/responder/kcm/kcmsrv_cmd.c
@@ -197,7 +197,7 @@ static errno_t kcm_input_parse(struct kcm_reqbuf *reqbuf,
if (op_io->op == NULL) {
DEBUG(SSSDBG_CRIT_FAILURE,
"Did not find a KCM operation handler for the requested opcode\n");
- return ERR_KCM_MALFORMED_IN_PKT;
+ return ERR_KCM_OP_NOT_IMPLEMENTED;
}
/* The operation only receives the payload, not the opcode or the protocol info */
@@ -643,7 +643,7 @@ krb5_error_code sss2krb5_error(errno_t err)
case EACCES:
return KRB5_FCC_PERM;
case ERR_KCM_OP_NOT_IMPLEMENTED:
- return KRB5_CC_NOSUPP;
+ return KRB5_FCC_INTERNAL;
case ERR_WRONG_NAME_FORMAT:
return KRB5_CC_BADNAME;
case ERR_NO_MATCHING_CREDS:
--
2.30.2

View File

@ -0,0 +1,104 @@
From dbde4e692e34d3ff8233ac17a5eae5a062637e48 Mon Sep 17 00:00:00 2001
From: Justin Stephenson <jstephen@redhat.com>
Date: Wed, 19 May 2021 10:54:52 -0400
Subject: [PATCH 2/5] SECRETS: Resolve mkey path correctly
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Use the correct master key path for the secrets database,
fixing an issue on upgrade.
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Reviewed-by: Sumit Bose <sbose@redhat.com>
---
src/tests/cmocka/test_kcm_renewals.c | 3 ++-
src/util/secrets/secrets.c | 10 ++++++----
src/util/secrets/secrets.h | 1 +
3 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/tests/cmocka/test_kcm_renewals.c b/src/tests/cmocka/test_kcm_renewals.c
index f508bab005ff916a8f2a453670c137a56ac9ba46..53ce558be22cffb486d593bbc8c021b91e8fb2fa 100644
--- a/src/tests/cmocka/test_kcm_renewals.c
+++ b/src/tests/cmocka/test_kcm_renewals.c
@@ -37,6 +37,7 @@
#define TESTS_PATH "tp_" BASE_FILE_STEM
#define TEST_CONF_DB "test_kcm_renewals_conf.ldb"
#define TEST_DB_FULL_PATH TESTS_PATH "/secrets.ldb"
+#define TEST_MKEY_FULL_PATH TESTS_PATH "/.secrets.mkey"
errno_t kcm_renew_all_tgts(TALLOC_CTX *mem_ctx,
struct kcm_renew_tgt_ctx *renew_tgt_ctx,
@@ -199,7 +200,7 @@ static void test_kcm_renewals_tgt(void **state)
open(TEST_DB_FULL_PATH, O_CREAT|O_EXCL|O_WRONLY, 0600);
ret = sss_sec_init_with_path(test_ctx->ccdb, NULL, TEST_DB_FULL_PATH,
- &secdb->sctx);
+ TEST_MKEY_FULL_PATH, &secdb->sctx);
/* Create renew ctx */
renew_tgt_ctx = talloc_zero(test_ctx, struct kcm_renew_tgt_ctx);
diff --git a/src/util/secrets/secrets.c b/src/util/secrets/secrets.c
index 42df14aa9c6265cbd723f826ce47f35529c4be10..2801eb24263ef8116a7afc294ee91a863295f5be 100644
--- a/src/util/secrets/secrets.c
+++ b/src/util/secrets/secrets.c
@@ -634,13 +634,13 @@ static int generate_master_key(const char *filename, size_t size)
}
static errno_t lcl_read_mkey(TALLOC_CTX *mem_ctx,
- const char *dbpath,
+ const char *mkeypath,
struct sss_sec_data *master_key)
{
int mfd;
ssize_t size;
errno_t ret;
- const char *mkey = dbpath;
+ const char *mkey = mkeypath;
master_key->data = talloc_size(mem_ctx, MKEY_SIZE);
if (master_key->data == NULL) {
@@ -703,6 +703,7 @@ static int set_quotas(struct sss_sec_ctx *sec_ctx,
errno_t sss_sec_init_with_path(TALLOC_CTX *mem_ctx,
struct sss_sec_hive_config **config_list,
const char *dbpath,
+ const char *mkeypath,
struct sss_sec_ctx **_sec_ctx)
{
struct sss_sec_ctx *sec_ctx;
@@ -746,7 +747,7 @@ errno_t sss_sec_init_with_path(TALLOC_CTX *mem_ctx,
goto done;
}
- ret = lcl_read_mkey(sec_ctx, dbpath, &sec_ctx->master_key);
+ ret = lcl_read_mkey(sec_ctx, mkeypath, &sec_ctx->master_key);
if (ret != EOK) {
DEBUG(SSSDBG_OP_FAILURE, "Cannot get the master key\n");
goto done;
@@ -764,9 +765,10 @@ errno_t sss_sec_init(TALLOC_CTX *mem_ctx,
struct sss_sec_ctx **_sec_ctx)
{
const char *dbpath = SECRETS_DB_PATH"/secrets.ldb";
+ const char *mkeypath = SECRETS_DB_PATH"/.secrets.mkey";
errno_t ret;
- ret = sss_sec_init_with_path(mem_ctx, config_list, dbpath, _sec_ctx);
+ ret = sss_sec_init_with_path(mem_ctx, config_list, dbpath, mkeypath, _sec_ctx);
if (ret != EOK) {
DEBUG(SSSDBG_CRIT_FAILURE, "Failed to initialize secdb [%d]: %s\n",
ret, sss_strerror(ret));
diff --git a/src/util/secrets/secrets.h b/src/util/secrets/secrets.h
index a15b99ffec6d1810e0c0cf815ed48d118ba2a08c..958f0824b5c89d8cafc249c7ac123ed999931347 100644
--- a/src/util/secrets/secrets.h
+++ b/src/util/secrets/secrets.h
@@ -83,6 +83,7 @@ errno_t sss_sec_init(TALLOC_CTX *mem_ctx,
errno_t sss_sec_init_with_path(TALLOC_CTX *mem_ctx,
struct sss_sec_hive_config **config_list,
const char *dbpath,
+ const char *mkeypath,
struct sss_sec_ctx **_sec_ctx);
errno_t sss_sec_new_req(TALLOC_CTX *mem_ctx,
--
2.30.2

View File

@ -0,0 +1,51 @@
From 9777427facccbbe45c855b0319258335dffb986a Mon Sep 17 00:00:00 2001
From: Alexey Tikhonov <atikhono@redhat.com>
Date: Tue, 18 May 2021 12:04:01 +0200
Subject: [PATCH 3/5] UTIL/SECRETS: mistype fix
Wrong variable was tested after mem allocation.
Also fixes following covscan issues:
```
Error: DEADCODE (CWE-561):
sssd-2.5.0/src/util/secrets/secrets.c:1004: cond_notnull: Condition "uuid_list == NULL", taking false branch. Now the value of "uuid_list" is not "NULL".
sssd-2.5.0/src/util/secrets/secrets.c:1010: notnull: At condition "uuid_list == NULL", the value of "uuid_list" cannot be "NULL".
sssd-2.5.0/src/util/secrets/secrets.c:1010: dead_error_condition: The condition "uuid_list == NULL" cannot be true.
sssd-2.5.0/src/util/secrets/secrets.c:1011: dead_error_begin: Execution cannot reach this statement: "ret = 12;".
# 1009| uid_list = talloc_zero_array(tmp_ctx, const char *, res->count);
# 1010| if (uuid_list == NULL) {
# 1011|-> ret = ENOMEM;
# 1012| goto done;
# 1013| }
```
Reviewed-by: Justin Stephenson <jstephen@redhat.com>
---
src/util/secrets/secrets.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/util/secrets/secrets.c b/src/util/secrets/secrets.c
index 2801eb24263ef8116a7afc294ee91a863295f5be..6e99e291dd355cc69b0d872f53624ca3446e18ad 100644
--- a/src/util/secrets/secrets.c
+++ b/src/util/secrets/secrets.c
@@ -1002,14 +1002,14 @@ errno_t sss_sec_list_cc_uuids(TALLOC_CTX *mem_ctx,
goto done;
}
- uuid_list = talloc_zero_array(tmp_ctx, const char *, res->count);
+ uuid_list = talloc_zero_array(tmp_ctx, const char *, res->count);
if (uuid_list == NULL) {
ret = ENOMEM;
goto done;
}
- uid_list = talloc_zero_array(tmp_ctx, const char *, res->count);
- if (uuid_list == NULL) {
+ uid_list = talloc_zero_array(tmp_ctx, const char *, res->count);
+ if (uid_list == NULL) {
ret = ENOMEM;
goto done;
}
--
2.30.2

View File

@ -27,7 +27,7 @@
Name: sssd
Version: 2.5.0
Release: 1%{?dist}
Release: 2%{?dist}
Summary: System Security Services Daemon
License: GPLv3+
URL: https://github.com/SSSD/sssd/
@ -35,6 +35,10 @@ Source0: https://github.com/SSSD/sssd/releases/download/2.5.0/sssd-2.5.0.tar.gz
### Patches ###
Patch0001: 0001-KCM-return-KRB5_FCC_INTERNAL-for-unknown-or-not-impl.patch
Patch0002: 0002-SECRETS-Resolve-mkey-path-correctly.patch
Patch0003: 0003-UTIL-SECRETS-mistype-fix.patch
### Dependencies ###
Requires: sssd-ad = %{version}-%{release}
@ -998,6 +1002,10 @@ fi
%systemd_postun_with_restart sssd.service
%changelog
* Wed May 19 2021 Pavel Březina <pbrezina@redhat.com> - 2.5.0-2
- Fix regression in sssd-kcm when upgrading from 2.4.0 directly to 2.5.0
- Return correct error code for unknown/unsupported operations in sssd-kcm
* Mon May 10 2021 Pavel Březina <pbrezina@redhat.com> - 2.5.0-1
- Rebase to SSSD 2.5.0