summaryrefslogtreecommitdiffstats
path: root/src/responder/pac/pacsrv_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/responder/pac/pacsrv_utils.c')
-rw-r--r--src/responder/pac/pacsrv_utils.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/responder/pac/pacsrv_utils.c b/src/responder/pac/pacsrv_utils.c
index 4c3ecb2ac..8328d6fbc 100644
--- a/src/responder/pac/pacsrv_utils.c
+++ b/src/responder/pac/pacsrv_utils.c
@@ -963,3 +963,45 @@ 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)) {
+ DEBUG(SSSDBG_TRACE_FUNC, ("Names differ."));
+ return true;
+ }
+ if (!compare_string_with_attr(pwd->pw_gecos, msg, SYSDB_GECOS)) {
+ DEBUG(SSSDBG_TRACE_FUNC, ("Gecos fields 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;
+}