diff options
Diffstat (limited to 'src/account/LMI_AccountProvider.c')
-rw-r--r-- | src/account/LMI_AccountProvider.c | 99 |
1 files changed, 36 insertions, 63 deletions
diff --git a/src/account/LMI_AccountProvider.c b/src/account/LMI_AccountProvider.c index fa2e316..ca9758a 100644 --- a/src/account/LMI_AccountProvider.c +++ b/src/account/LMI_AccountProvider.c @@ -285,8 +285,6 @@ static CMPIStatus LMI_AccountModifyInstance( struct lu_ent *lue = NULL; struct lu_error *error = NULL; GValue val; - GValueArray *groups = NULL; - guint i = 0; long last_change; date_time_prop expiration, warning, inactive_password, inactive_account; @@ -305,10 +303,8 @@ static CMPIStatus LMI_AccountModifyInstance( char userlock[USERNAME_LEN_MAX] = {0}; /* -1 for NULL char */ strncpy(userlock, la.Name.chars, sizeof(userlock) - 1); - lmi_debug("Getting lock for user: %s", userlock); - if (get_user_lock(userlock) == 0) { - KReturn2(_cb, ERR_FAILED, "Unable to obtain lock."); - } + lmi_debug("Getting giant lock for user: %s", userlock); + get_giant_lock(); pwdlockres = lckpwdf(); if (pwdlockres != 0) warn("Cannot acquire passwd file lock\n"); @@ -316,10 +312,11 @@ static CMPIStatus LMI_AccountModifyInstance( luc = lu_start(NULL, lu_user, NULL, NULL, lu_prompt_console_quiet, NULL, &error); if (!luc) { - const int ret = release_user_lock(userlock); - lmi_debug("Releasing lock for user: %s. Result: %d", userlock, ret); if (pwdlockres == 0) ulckpwdf(); + lmi_debug("Releasing giant lock for user: %s", userlock); + release_giant_lock(); + lmi_debug("Giant lock released for user %s", userlock); KReturn2(_cb, ERR_FAILED, "Unable to initialize libuser: %s\n", lu_strerror(error)); } @@ -333,23 +330,6 @@ static CMPIStatus LMI_AccountModifyInstance( goto fail; } - /* get list of groups and lock them. userlock variable is our stored username */ - groups = lu_groups_enumerate_by_user (luc, userlock, &error); - if (groups == NULL) - { - rc = CMPI_RC_ERR_NOT_FOUND; - asprintf(&errmsg, "Get groups for user %s failed with: %s", - userlock, lu_strerror(error)); - goto fail; - } - - for (i = 0; i < groups->n_values; ++i) { - GValue *group_val = g_value_array_get_nth (groups, i); - const gchar *const group_str = g_value_get_string(group_val); - const int ret = get_group_lock((const char *const) group_str); - lmi_debug("Getting lock for group: %s. Result: %d", group_str, ret); - } - data = ci->ft->getProperty(ci, "UserPassword", NULL); ar = data.value.array; if (ar && (arsize = ar->ft->getSize(ar, NULL) > 0)) @@ -427,20 +407,13 @@ static CMPIStatus LMI_AccountModifyInstance( last_change = aux_lu_get_long(lue, LU_SHADOWLASTCHANGE); #define FAIL(msg) \ - for (i = 0; (groups != NULL) && (i < groups->n_values); ++i) { \ - GValue *group_val = g_value_array_get_nth (groups, i); \ - const gchar *const group_str = g_value_get_string(group_val); \ - const int ret = release_group_lock((const char *const) group_str); \ - lmi_debug("Releasing lock for group: %s. Result: %d", group_str, ret); \ - } \ - g_value_array_free (groups); \ - groups = NULL; \ - const int ret = release_user_lock(userlock); \ - lmi_debug("Releasing lock for user: %s. Result: %d", userlock, ret); \ lu_end(luc); \ lu_ent_free(lue); \ if (pwdlockres == 0) \ ulckpwdf(); \ + lmi_debug("Releasing lock for user: %s", userlock); \ + release_giant_lock(); \ + lmi_debug("Giant lock released for user %s", userlock); \ KReturn2(_cb, ERR_FAILED, msg); GETDATEVALUE("PasswordExpiration", expiration); if (!expiration.null && !expiration.interval) @@ -529,20 +502,14 @@ static CMPIStatus LMI_AccountModifyInstance( } fail: - for (i = 0; (groups != NULL) && (i < groups->n_values); ++i) { - GValue *group_val = g_value_array_get_nth (groups, i); - const gchar *const group_str = g_value_get_string(group_val); - const int ret = release_group_lock((const char *const) group_str); - lmi_debug("Releasing lock for group: %s. Result: %d", group_str, ret); - } - g_value_array_free (groups); - groups = NULL; - const int ret = release_user_lock(userlock); - lmi_debug("Releasing lock for user: %s. Result: %d", userlock, ret); - lu_ent_free(lue); - lu_end(luc); if (pwdlockres == 0) ulckpwdf(); + lmi_debug("Releasing giant lock for user: %s", userlock); + release_giant_lock (); + lmi_debug("Giant lock released for user %s", userlock); + + lu_ent_free(lue); + lu_end(luc); if (errmsg) { CMPIString *errstr = CMNewString(_cb, errmsg, NULL); @@ -581,22 +548,20 @@ static CMPIrc delete_user( char userlock[USERNAME_LEN_MAX] = {0}; /* -1 for NULL char */ strncpy(userlock, username, sizeof(userlock) - 1); - lmi_debug("Getting lock for user: %s. Result: %d", userlock); - if (get_user_lock(userlock) == 0) { - asprintf(&errormsg, "Unable to obtain lock."); - return CMPI_RC_ERR_FAILED; - } + lmi_debug("Getting giant lock for user: %s", userlock); + get_giant_lock(); pwdlockres = lckpwdf(); if (pwdlockres != 0) warn("Cannot acquire passwd file lock\n"); luc = lu_start(NULL, 0, NULL, NULL, lu_prompt_console_quiet, NULL, &error); if (!luc) { - const int ret = release_user_lock(userlock); - lmi_debug("Releasing lock for user: %s. Result: %d", userlock, ret); if (pwdlockres == 0) ulckpwdf(); asprintf(&errormsg, "Unable to initialize libuser: %s\n", lu_strerror(error)); + lmi_debug("Releasing giant lock for user: %s", userlock); + release_giant_lock(); + lmi_debug("Giant lock released for user %s", userlock); return CMPI_RC_ERR_FAILED; } @@ -673,16 +638,14 @@ static CMPIrc delete_user( } clean: - /* Because C specification... */ - { - const int ret = release_user_lock(userlock); - lmi_debug("Releasing lock for user: %s. Result: %d", userlock, ret); - } + if (pwdlockres == 0) + ulckpwdf(); + lmi_debug("Releasing giant lock for user: %s", userlock); + release_giant_lock(); + lmi_debug("Giant lock released for user %s", userlock); lu_ent_free(lue); lu_ent_free(lueg); lu_end(luc); - if (pwdlockres == 0) - ulckpwdf(); return rc; } @@ -795,6 +758,12 @@ KUint32 LMI_Account_ChangePassword( goto clean; } + char userlock[USERNAME_LEN_MAX] = {0}; + /* -1 for NULL char */ + strncpy(userlock, self->Name.chars, sizeof(userlock) - 1); + lmi_debug("Getting giant lock for user: %s", userlock); + get_giant_lock(); + pwdlockres = lckpwdf(); if (pwdlockres != 0) warn("Cannot acquire passwd file lock\n"); @@ -825,11 +794,15 @@ KUint32 LMI_Account_ChangePassword( } clean: + if (pwdlockres == 0) + ulckpwdf(); + lmi_debug("Releasing giant lock for user: %s", userlock); + release_giant_lock(); + lmi_debug("Giant lock released for user %s", userlock); + free(errmsg); if(luc) lu_end(luc); if(lue) lu_ent_free(lue); - if (pwdlockres == 0) - ulckpwdf(); return result; } |