Projects
Mega:23.03
systemd
_service:tar_scm:backport-devnode-acl-use-_clea...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:backport-devnode-acl-use-_cleanup_-to-free-acl_t.patch of Package systemd
From 541ada330879dd928b33b55f1fc437ec1bbd349f Mon Sep 17 00:00:00 2001 From: David Tardon <dtardon@redhat.com> Date: Thu, 3 Mar 2022 15:58:24 +0100 Subject: [PATCH] devnode-acl: use _cleanup_ to free acl_t (cherry picked from commit 203ea2c8f158288fea56c5be980715b2b7e002fe) (cherry picked from commit 543c73300e3b9298e5316555bf4df6ff7dfc210f) Conflict:NA Reference:https://github.com/systemd/systemd/commit/541ada330879dd928b33b55f1fc437ec1bbd349f --- src/shared/devnode-acl.c | 73 ++++++++++++++-------------------------- 1 file changed, 25 insertions(+), 48 deletions(-) diff --git a/src/shared/devnode-acl.c b/src/shared/devnode-acl.c index 07e29e1019..394422b164 100644 --- a/src/shared/devnode-acl.c +++ b/src/shared/devnode-acl.c @@ -52,8 +52,8 @@ int devnode_acl(const char *path, bool del, uid_t old_uid, bool add, uid_t new_uid) { - acl_t acl; - int r = 0; + _cleanup_(acl_freep) acl_t acl = NULL; + int r; bool changed = false; assert(path); @@ -66,7 +66,7 @@ int devnode_acl(const char *path, r = flush_acl(acl); if (r < 0) - goto finish; + return r; if (r > 0) changed = true; @@ -75,13 +75,11 @@ int devnode_acl(const char *path, r = acl_find_uid(acl, old_uid, &entry); if (r < 0) - goto finish; + return r; if (r > 0) { - if (acl_delete_entry(acl, entry) < 0) { - r = -errno; - goto finish; - } + if (acl_delete_entry(acl, entry) < 0) + return -errno; changed = true; } @@ -94,68 +92,47 @@ int devnode_acl(const char *path, r = acl_find_uid(acl, new_uid, &entry); if (r < 0) - goto finish; + return r; if (r == 0) { - if (acl_create_entry(&acl, &entry) < 0) { - r = -errno; - goto finish; - } + if (acl_create_entry(&acl, &entry) < 0) + return -errno; if (acl_set_tag_type(entry, ACL_USER) < 0 || - acl_set_qualifier(entry, &new_uid) < 0) { - r = -errno; - goto finish; - } + acl_set_qualifier(entry, &new_uid) < 0) + return -errno; } - if (acl_get_permset(entry, &permset) < 0) { - r = -errno; - goto finish; - } + if (acl_get_permset(entry, &permset) < 0) + return -errno; rd = acl_get_perm(permset, ACL_READ); - if (rd < 0) { - r = -errno; - goto finish; - } + if (rd < 0) + return -errno; wt = acl_get_perm(permset, ACL_WRITE); - if (wt < 0) { - r = -errno; - goto finish; - } + if (wt < 0) + return -errno; if (!rd || !wt) { - if (acl_add_perm(permset, ACL_READ|ACL_WRITE) < 0) { - r = -errno; - goto finish; - } + if (acl_add_perm(permset, ACL_READ|ACL_WRITE) < 0) + return -errno; changed = true; } } if (!changed) - goto finish; - - if (acl_calc_mask(&acl) < 0) { - r = -errno; - goto finish; - } - - if (acl_set_file(path, ACL_TYPE_ACCESS, acl) < 0) { - r = -errno; - goto finish; - } + return 0; - r = 0; + if (acl_calc_mask(&acl) < 0) + return -errno; -finish: - acl_free(acl); + if (acl_set_file(path, ACL_TYPE_ACCESS, acl) < 0) + return -errno; - return r; + return 0; } int devnode_acl_all(const char *seat, -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2