diff options
-rw-r--r-- | src/responder/pac/pacsrv.h | 2 | ||||
-rw-r--r-- | src/responder/pac/pacsrv_cmd.c | 55 | ||||
-rw-r--r-- | src/responder/pac/pacsrv_utils.c | 39 |
3 files changed, 10 insertions, 86 deletions
diff --git a/src/responder/pac/pacsrv.h b/src/responder/pac/pacsrv.h index 6477e449..126ec7de 100644 --- a/src/responder/pac/pacsrv.h +++ b/src/responder/pac/pacsrv.h @@ -81,6 +81,4 @@ errno_t get_pwd_from_pac(TALLOC_CTX *mem_ctx, struct PAC_LOGON_INFO *logon_info, struct passwd **_pwd, struct sysdb_attrs **_attrs); - -bool new_and_cached_user_differs(struct passwd *pwd, struct ldb_message *msg); #endif /* __PACSRV_H__ */ diff --git a/src/responder/pac/pacsrv_cmd.c b/src/responder/pac/pacsrv_cmd.c index 2b11acad..e5152006 100644 --- a/src/responder/pac/pacsrv_cmd.c +++ b/src/responder/pac/pacsrv_cmd.c @@ -549,7 +549,6 @@ static errno_t save_pac_user(struct pac_req_ctx *pr_ctx) struct passwd *pwd = NULL; TALLOC_CTX *tmp_ctx = NULL; struct sysdb_attrs *user_attrs = NULL; - const char *tmp_str; sysdb = pr_ctx->dom->sysdb; if (sysdb == NULL) { @@ -575,53 +574,19 @@ static errno_t save_pac_user(struct pac_req_ctx *pr_ctx) ret = sysdb_search_user_by_uid(tmp_ctx, sysdb, pr_ctx->dom, pwd->pw_uid, attrs, &msg); - if (ret == EOK) { - if (new_and_cached_user_differs(pwd, msg)) { - ret = sysdb_delete_user(sysdb, pr_ctx->dom, NULL, pwd->pw_uid); - if (ret != EOK) { - DEBUG(SSSDBG_OP_FAILURE, ("sysdb_delete_user failed.\n")); - goto done; - } - - /* If the entry is delete we might loose the information about the - * original DN of e.g. an IPA user or a chache password. */ - tmp_str = ldb_msg_find_attr_as_string(msg, SYSDB_ORIG_DN, NULL); - if (tmp_str != NULL) { - ret = sysdb_attrs_add_string(user_attrs, SYSDB_ORIG_DN, - tmp_str); - if (ret != EOK) { - DEBUG(SSSDBG_OP_FAILURE, - ("sysdb_attrs_add_string failed.\n")); - goto done; - } - } - - tmp_str = ldb_msg_find_attr_as_string(msg, SYSDB_CACHEDPWD, NULL); - if (tmp_str != NULL) { - ret = sysdb_attrs_add_string(user_attrs, SYSDB_CACHEDPWD, - tmp_str); - if (ret != EOK) { - DEBUG(SSSDBG_OP_FAILURE, - ("sysdb_attrs_add_string failed.\n")); - goto done; - } - } - } else { + if (ret == ENOENT) { + ret = sysdb_store_user(sysdb, pr_ctx->dom, pwd->pw_name, NULL, + pwd->pw_uid, pwd->pw_gid, pwd->pw_gecos, + pwd->pw_dir, + pwd->pw_shell, NULL, user_attrs, NULL, + pr_ctx->dom->user_timeout, 0); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("sysdb_store_user failed [%d][%s].\n", + ret, strerror(ret))); goto done; } } else if (ret != EOK && ret != ENOENT) { - DEBUG(SSSDBG_OP_FAILURE, ("sysdb_search_user_by_name failed.\n")); - goto done; - } - - ret = sysdb_store_user(sysdb, pr_ctx->dom, pwd->pw_name, NULL, - pwd->pw_uid, pwd->pw_gid, pwd->pw_gecos, - pwd->pw_dir, - pwd->pw_shell, NULL, user_attrs, NULL, - pr_ctx->dom->user_timeout, 0); - if (ret != EOK) { - DEBUG(SSSDBG_OP_FAILURE, ("sysdb_store_user failed [%d][%s].\n", - ret, strerror(ret))); + DEBUG(SSSDBG_OP_FAILURE, ("sysdb_search_user_by_id failed.\n")); goto done; } diff --git a/src/responder/pac/pacsrv_utils.c b/src/responder/pac/pacsrv_utils.c index f70438b6..a52282c7 100644 --- a/src/responder/pac/pacsrv_utils.c +++ b/src/responder/pac/pacsrv_utils.c @@ -506,42 +506,3 @@ done: return ret; } - -static bool compare_string_with_attr(const char *val, struct ldb_message *msg, - const char *attr) -{ - const char *str; - - str = ldb_msg_find_attr_as_string(msg, attr, NULL); - if ((str == NULL && val == NULL) || - (str != NULL && val != NULL && strcmp(str, val) == 0)) { - return true; - } - - return false; -} - -bool new_and_cached_user_differs(struct passwd *pwd, struct ldb_message *msg) -{ - if (pwd == NULL || msg == NULL) { - return true; - } - - if (!compare_string_with_attr(pwd->pw_name, msg, SYSDB_NAME) && - !compare_string_with_attr(pwd->pw_name, msg, SYSDB_NAME_ALIAS)) { - DEBUG(SSSDBG_TRACE_FUNC, ("Names differ.")); - return true; - } - - if (!compare_string_with_attr(pwd->pw_dir, msg, SYSDB_HOMEDIR)) { - DEBUG(SSSDBG_TRACE_FUNC, ("Home directories differ.")); - return true; - } - - if (!compare_string_with_attr(pwd->pw_shell, msg, SYSDB_SHELL)) { - DEBUG(SSSDBG_TRACE_FUNC, ("Shells differ.")); - return true; - } - - return false; -} |