86 lines
2.4 KiB
Diff
86 lines
2.4 KiB
Diff
|
From 519e3932898baba1e7eeb0d9d89acee796da61f5 Mon Sep 17 00:00:00 2001
|
||
|
From: Andreas Gruenbacher <agruenba@redhat.com>
|
||
|
Date: Tue, 8 Sep 2015 14:23:58 +0200
|
||
|
Subject: [PATCH 29/34] getfacl: Fix minor resource leak
|
||
|
|
||
|
The return value of of acl_get_qualifier needs to be acl_freed.
|
||
|
|
||
|
Reported by Jaska Uimonen <jaska.uimonen@helsinki.fi>.
|
||
|
---
|
||
|
tools/getfacl.c | 31 ++++++++++++++++++++-----------
|
||
|
1 file changed, 20 insertions(+), 11 deletions(-)
|
||
|
|
||
|
diff --git a/tools/getfacl.c b/tools/getfacl.c
|
||
|
index e44b572..3d8f1b8 100644
|
||
|
--- a/tools/getfacl.c
|
||
|
+++ b/tools/getfacl.c
|
||
|
@@ -125,7 +125,7 @@ struct name_list *get_list(const struct stat *st, acl_t acl)
|
||
|
return NULL;
|
||
|
while (ret > 0) {
|
||
|
acl_tag_t e_type;
|
||
|
- const id_t *id_p;
|
||
|
+ id_t *id_p;
|
||
|
const char *name = "";
|
||
|
int len;
|
||
|
|
||
|
@@ -137,8 +137,10 @@ struct name_list *get_list(const struct stat *st, acl_t acl)
|
||
|
|
||
|
case ACL_USER:
|
||
|
id_p = acl_get_qualifier(ent);
|
||
|
- if (id_p != NULL)
|
||
|
+ if (id_p != NULL) {
|
||
|
name = user_name(*id_p, opt_numeric);
|
||
|
+ acl_free(id_p);
|
||
|
+ }
|
||
|
break;
|
||
|
|
||
|
case ACL_GROUP_OBJ:
|
||
|
@@ -147,8 +149,10 @@ struct name_list *get_list(const struct stat *st, acl_t acl)
|
||
|
|
||
|
case ACL_GROUP:
|
||
|
id_p = acl_get_qualifier(ent);
|
||
|
- if (id_p != NULL)
|
||
|
+ if (id_p != NULL) {
|
||
|
name = group_name(*id_p, opt_numeric);
|
||
|
+ acl_free(id_p);
|
||
|
+ }
|
||
|
break;
|
||
|
}
|
||
|
name = xquote(name, "\t\n\r");
|
||
|
@@ -378,19 +382,24 @@ int do_show(FILE *stream, const char *path_p, const struct stat *st,
|
||
|
continue;
|
||
|
} else {
|
||
|
if (acl_tag == ACL_USER || acl_tag == ACL_GROUP) {
|
||
|
- id_t *acl_id_p = NULL, *dacl_id_p = NULL;
|
||
|
- if (acl_ent)
|
||
|
- acl_id_p = acl_get_qualifier(acl_ent);
|
||
|
- if (dacl_ent)
|
||
|
- dacl_id_p = acl_get_qualifier(dacl_ent);
|
||
|
+ int id_cmp = 0;
|
||
|
+
|
||
|
+ if (acl_ent && dacl_ent) {
|
||
|
+ id_t *acl_id_p = acl_get_qualifier(acl_ent);
|
||
|
+ id_t *dacl_id_p = acl_get_qualifier(dacl_ent);
|
||
|
+
|
||
|
+ id_cmp = (*acl_id_p > *dacl_id_p) -
|
||
|
+ (*acl_id_p < *dacl_id_p);
|
||
|
+ acl_free(acl_id_p);
|
||
|
+ acl_free(dacl_id_p);
|
||
|
+ }
|
||
|
|
||
|
- if (acl && (!dacl || *acl_id_p < *dacl_id_p)) {
|
||
|
+ if (acl && (!dacl || id_cmp < 0)) {
|
||
|
show_line(stream, &acl_names, acl,
|
||
|
&acl_ent, acl_mask,
|
||
|
NULL, NULL, NULL, NULL);
|
||
|
continue;
|
||
|
- } else if (dacl &&
|
||
|
- (!acl || *dacl_id_p < *acl_id_p)) {
|
||
|
+ } else if (dacl && (!acl || id_cmp > 0)) {
|
||
|
show_line(stream, NULL, NULL, NULL,
|
||
|
NULL, &dacl_names, dacl,
|
||
|
&dacl_ent, dacl_mask);
|
||
|
--
|
||
|
2.5.2
|
||
|
|