Enabled more actions for -findx: getfacl, getfattr, get_any_xattr

This commit is contained in:
2024-08-28 16:31:16 +02:00
parent c68d4f2ec6
commit ffe18475a4
7 changed files with 209 additions and 80 deletions

View File

@ -648,6 +648,35 @@ int Xorriso_is_split(struct XorrisO *xorriso, char *path, void *node,
}
int Xorriso_report_acl_header(struct XorrisO *xorriso, char *path,
uid_t uid, gid_t gid, int flag)
{
int ret;
struct passwd *pwd;
struct group *grp;
ret= Xorriso_getfname(xorriso, path, 0);
if(ret <= 0)
goto ex;
pwd= getpwuid(uid);
if(pwd == NULL)
sprintf(xorriso->result_line, "# owner: %.f\n", (double) uid);
else
sprintf(xorriso->result_line, "# owner: %s\n", pwd->pw_name);
Xorriso_result(xorriso, 0);
grp= getgrgid(gid);
if(grp == NULL)
sprintf(xorriso->result_line, "# group: %.f\n", (double) gid);
else
sprintf(xorriso->result_line, "# group: %s\n", grp->gr_name);
Xorriso_result(xorriso, 0);
ret= 1;
ex:
return(ret);
}
/* @param node Opaque handle to IsoNode which is to be inquired instead of path if it is not NULL.
@param path is used as address if node is NULL.
@param acl_text if acl_text is not NULL, then *acl_text will be set to the
@ -673,8 +702,6 @@ int Xorriso_getfacl(struct XorrisO *xorriso, void *in_node, char *path,
char *text= NULL, *d_text= NULL, *cpt, *npt;
uid_t uid;
gid_t gid;
struct passwd *pwd;
struct group *grp;
what= (flag >> 2) & 3;
if(acl_text != NULL)
@ -713,23 +740,11 @@ int Xorriso_getfacl(struct XorrisO *xorriso, void *in_node, char *path,
}
if(!(flag & 1)) {
ret= Xorriso_getfname(xorriso, path, 0);
uid= iso_node_get_uid(node);
gid= iso_node_get_gid(node);
ret= Xorriso_report_acl_header(xorriso, path, uid, gid, 0);
if(ret <= 0)
goto ex;
uid= iso_node_get_uid(node);
pwd= getpwuid(uid);
if(pwd == NULL)
sprintf(xorriso->result_line, "# owner: %.f\n", (double) uid);
else
sprintf(xorriso->result_line, "# owner: %s\n", pwd->pw_name);
Xorriso_result(xorriso, 0);
gid= iso_node_get_gid(node);
grp= getgrgid(gid);
if(grp == NULL)
sprintf(xorriso->result_line, "# group: %.f\n", (double) gid);
else
sprintf(xorriso->result_line, "# group: %s\n", grp->gr_name);
Xorriso_result(xorriso, 0);
}
for(pass= 0; pass < 1 + (acl_text != NULL && !(flag & 2)); pass++) {