diff options
Diffstat (limited to 'src/responder/pac/pacsrv_utils.c')
-rw-r--r-- | src/responder/pac/pacsrv_utils.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/responder/pac/pacsrv_utils.c b/src/responder/pac/pacsrv_utils.c index 4c3ecb2a..8328d6fb 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; +} |