On 06/05/2015 04:44 PM, Michal Židek wrote:
On 06/05/2015 01:33 PM, Pavel Reichl wrote:
On 06/05/2015 01:17 PM, Michal Židek wrote:
On 05/28/2015 06:43 PM, Pavel Reichl wrote:
Hello,
please see simple attached patch.
Thanks!
Please send version that cleanly applies on top of current master.
Michal
_______________________________________________
sssd-devel mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/sssd-devel
Hello,
please see rebased patch attached.
Thanks!
Super small nitpick:
static errno_t
get_subdomain_homedir_of_user(TALLOC_CTX *mem_ctx, struct
sss_domain_info *dom,
const char *fqname, uint32_t uid,
- const char **_homedir)
+ const char* original, const char
^^^^^
Could you please move the '*' to the 'original' to look like
const char *original?
Sure.
The patch passed my testing.
I suppose you have read the testing section from design document, right?
The only thing that did not work for me
was from sssd client when the server was not patched, but I think this
is expected (please confirm).
I hereby confirm that this is expected behavior.
I am waiting for the CI to finish.
Michal
_______________________________________________
sssd-devel mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/sssd-devel
Thanks!
>From 6445b7472c9b3f40161bed8224f395cfdec10403 Mon Sep 17 00:00:00 2001
From: Pavel Reichl <[email protected]>
Date: Thu, 28 May 2015 16:28:17 -0400
Subject: [PATCH] IPA: Don't override homedir with subdomain_homedir
Resolves:
https://fedorahosted.org/sssd/ticket/2583
---
src/providers/ipa/ipa_subdomains_id.c | 30 +++++++++++++++++++++++-------
src/util/util_errors.c | 1 +
src/util/util_errors.h | 1 +
3 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/src/providers/ipa/ipa_subdomains_id.c b/src/providers/ipa/ipa_subdomains_id.c
index 617c091d3abc4808da4a279213ffc3e1119001bf..b5c0aa0b531619d34309e12e4cd8084f7beee88a 100644
--- a/src/providers/ipa/ipa_subdomains_id.c
+++ b/src/providers/ipa/ipa_subdomains_id.c
@@ -683,7 +683,7 @@ ipa_get_ad_id_ctx(struct ipa_id_ctx *ipa_ctx,
static errno_t
get_subdomain_homedir_of_user(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom,
const char *fqname, uint32_t uid,
- const char **_homedir)
+ const char *original, const char **_homedir)
{
errno_t ret;
const char *name;
@@ -697,12 +697,20 @@ get_subdomain_homedir_of_user(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom,
goto done;
}
+ if (strstr(dom->subdomain_homedir, "%o") != NULL && original == NULL) {
+ DEBUG(SSSDBG_TRACE_ALL,
+ "Original home directory for user: %s is empty.\n", fqname);
+ ret = ERR_HOMEDIR_IS_NULL;
+ goto done;
+ }
+
ZERO_STRUCT(homedir_ctx);
homedir_ctx.uid = uid;
homedir_ctx.domain = dom->name;
homedir_ctx.flatname = dom->flat_name;
homedir_ctx.config_homedir_substr = dom->homedir_substr;
+ homedir_ctx.original = original;
ret = sss_parse_name_const(tmp_ctx, dom->names, fqname,
NULL, &name);
if (ret != EOK) {
@@ -809,6 +817,7 @@ apply_subdomain_homedir(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom,
errno_t ret;
uint32_t uid;
const char *fqname;
+ const char *original;
const char *homedir = NULL;
struct ldb_message_element *msg_el = NULL;
size_t c;
@@ -833,10 +842,6 @@ apply_subdomain_homedir(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom,
goto done;
}
- /*
- * Homedir is always overriden by subdomain_homedir even if it was
- * explicitly set by user.
- */
fqname = ldb_msg_find_attr_as_string(msg, SYSDB_NAME, NULL);
if (fqname == NULL) {
DEBUG(SSSDBG_CRIT_FAILURE, "Missing user name.\n");
@@ -852,11 +857,21 @@ apply_subdomain_homedir(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom,
goto done;
}
- ret = get_subdomain_homedir_of_user(mem_ctx, dom, fqname, uid, &homedir);
+ original = ldb_msg_find_attr_as_string(msg, SYSDB_HOMEDIR, NULL);
+ if (original == NULL) {
+ DEBUG(SSSDBG_TRACE_ALL, "Missing homedir of %s.\n", fqname);
+ }
+
+ ret = get_subdomain_homedir_of_user(mem_ctx, dom, fqname, uid, original,
+ &homedir);
if (ret != EOK) {
DEBUG(SSSDBG_OP_FAILURE,
"get_subdomain_homedir_of_user failed: [%d]: [%s]\n",
- ret, sss_strerror(ret));
+ ret, sss_strerror(ret));
+ if (ret == ERR_HOMEDIR_IS_NULL) {
+ /* This is not fatal, fallback_homedir will be used. */
+ ret = EOK;
+ }
goto done;
}
@@ -887,6 +902,7 @@ errno_t get_object_from_cache(TALLOC_CTX *mem_ctx,
SYSDB_OBJECTCLASS,
SYSDB_UUID,
SYSDB_GHOST,
+ SYSDB_HOMEDIR,
NULL };
char *name;
diff --git a/src/util/util_errors.c b/src/util/util_errors.c
index 97c54a5b3352f7982a129ddea3e65f08d0351ea3..f219d9787206ad9860bb83ca6bf09c80d87c302e 100644
--- a/src/util/util_errors.c
+++ b/src/util/util_errors.c
@@ -74,6 +74,7 @@ struct err_string error_to_str[] = {
{ "Malformed cache entry" }, /* ERR_MALFORMED_ENTRY */
{ "Unexpected cache entry type" }, /* ERR_UNEXPECTED_ENTRY_TYPE */
{ "Failed to resolve one of user groups" }, /* ERR_SIMPLE_GROUPS_MISSING */
+ { "Home directory is NULL" }, /* ERR_HOMEDIR_IS_NULL */
{ "ERR_LAST" } /* ERR_LAST */
};
diff --git a/src/util/util_errors.h b/src/util/util_errors.h
index 2dbf2243c753a7c418665bbff71fde469cec806f..74f8e13db839557af71579f7573a1d589eba73bd 100644
--- a/src/util/util_errors.h
+++ b/src/util/util_errors.h
@@ -96,6 +96,7 @@ enum sssd_errors {
ERR_MALFORMED_ENTRY,
ERR_UNEXPECTED_ENTRY_TYPE,
ERR_SIMPLE_GROUPS_MISSING,
+ ERR_HOMEDIR_IS_NULL,
ERR_LAST /* ALWAYS LAST */
};
--
2.1.0
_______________________________________________
sssd-devel mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/sssd-devel