diff --git a/src/shared/userdb.c b/src/shared/userdb.c index a77eff4407..5e347e4629 100644 --- a/src/shared/userdb.c +++ b/src/shared/userdb.c @@ -146,6 +146,16 @@ static void user_group_data_release(struct user_group_data *d) { json_variant_unref(d->record); } +struct membership_data { + char *user_name; + char *group_name; +}; + +static void membership_data_done(struct membership_data *d) { + free(d->user_name); + free(d->group_name); +} + static int userdb_on_query_reply( Varlink *link, JsonVariant *parameters, @@ -288,10 +298,7 @@ static int userdb_on_query_reply( } case LOOKUP_MEMBERSHIP: { - struct membership_data { - const char *user_name; - const char *group_name; - } membership_data = {}; + _cleanup_(membership_data_done) struct membership_data membership_data = {}; static const JsonDispatch dispatch_table[] = { { "userName", JSON_VARIANT_STRING, json_dispatch_user_group_name, offsetof(struct membership_data, user_name), JSON_RELAX }, @@ -306,21 +313,8 @@ static int userdb_on_query_reply( if (r < 0) goto finish; - iterator->found_user_name = mfree(iterator->found_user_name); - iterator->found_group_name = mfree(iterator->found_group_name); - - iterator->found_user_name = strdup(membership_data.user_name); - if (!iterator->found_user_name) { - r = -ENOMEM; - goto finish; - } - - iterator->found_group_name = strdup(membership_data.group_name); - if (!iterator->found_group_name) { - r = -ENOMEM; - goto finish; - } - + iterator->found_user_name = TAKE_PTR(membership_data.user_name); + iterator->found_group_name = TAKE_PTR(membership_data.group_name); iterator->n_found++; if (FLAGS_SET(flags, VARLINK_REPLY_CONTINUES))