New find actions get_md5, get_any_xattr, test -has_any_xattr

This commit is contained in:
Thomas Schmitt 2009-08-10 12:30:49 +00:00
parent 6de5c8d9d4
commit d1490aa95e
4 changed files with 90 additions and 13 deletions

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" other parameters are allowed: see man(7), man(1)
.TH XORRISO 1 "Aug 03, 2009" .TH XORRISO 1 "Aug 09, 2009"
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@ -487,7 +487,7 @@ to make dialog more comfortable.
.PP .PP
Readline is an enhancement for the input line. You may know it already from Readline is an enhancement for the input line. You may know it already from
the bash shell. Whether it is available in xorriso depends on the availability the bash shell. Whether it is available in xorriso depends on the availability
package readline-dev at the time when xorriso was built from its sourcecode. of package readline-dev at the time when xorriso was built from its sourcecode.
.br .br
It allows to move the cursor over the text in the line by help of the It allows to move the cursor over the text in the line by help of the
Leftward and the Rightward arrow key. Leftward and the Rightward arrow key.
@ -1304,6 +1304,9 @@ Matches files which have xattr name-value pairs from user namespace.
\fB\-has_aaip\fR : \fB\-has_aaip\fR :
Matches files which have ACL or any xattr. Matches files which have ACL or any xattr.
.br .br
\fB\-has_any_xattr\fR :
Matches files which have any xattr other than ACL.
.br
\fB\-has_filter\fR : \fB\-has_filter\fR :
Matches files which are filtered by -set_filter. Matches files which are filtered by -set_filter.
.br .br
@ -1412,7 +1415,14 @@ ACL is given in text form as defined with option -setfacl.
.br .br
E.g.: -exec setfacl u:lisa:rw,u::rw,g::r,o::-,m::rw -- E.g.: -exec setfacl u:lisa:rw,u::rw,g::r,o::-,m::rw --
.br .br
\fBgetfattr\fR prints eventual xattr name-value pairs to the result channel. \fBgetfattr\fR prints eventual xattr name-value pairs from user namespace
to the result channel.
.br
\fBget_any_xattr\fR prints eventual xattr name-value pairs from any namespace
except ACL to the result channel. This is mostly for debugging of
namespace "isofs".
.br
\fBget_md5\fR prints eventual recorded MD5 sum together with file path.
.br .br
\fBsetfattr\fR sets or deletes xattr name value pairs. \fBsetfattr\fR sets or deletes xattr name value pairs.
.br .br

View File

@ -3307,12 +3307,13 @@ int Findjob_set_acl_filter(struct FindjoB *o, int value, int flag)
/* @param value -1= files without xattr, 1= only files with xattr /* @param value -1= files without xattr, 1= only files with xattr
@param flag bit0=-has_any_xattr rather than -has_xattr
*/ */
int Findjob_set_xattr_filter(struct FindjoB *o, int value, int flag) int Findjob_set_xattr_filter(struct FindjoB *o, int value, int flag)
{ {
int ret; int ret;
ret= Findjob_set_prop_filter(o, 6, value, 0); ret= Findjob_set_prop_filter(o, (flag & 1 ? 14 : 6), value, 0);
return(ret); return(ret);
} }
@ -15239,6 +15240,8 @@ not_enough_arguments:;
Findjob_set_acl_filter(job, -1, 0); Findjob_set_acl_filter(job, -1, 0);
} else if(strcmp(argv[i], "-has_xattr")==0) { } else if(strcmp(argv[i], "-has_xattr")==0) {
Findjob_set_xattr_filter(job, 1, 0); Findjob_set_xattr_filter(job, 1, 0);
} else if(strcmp(argv[i], "-has_any_xattr")==0) {
Findjob_set_xattr_filter(job, 1, 1);
} else if(strcmp(argv[i], "-has_no_xattr")==0) { } else if(strcmp(argv[i], "-has_no_xattr")==0) {
Findjob_set_xattr_filter(job, -1, 0); Findjob_set_xattr_filter(job, -1, 0);
} else if(strcmp(argv[i], "-has_aaip")==0) { } else if(strcmp(argv[i], "-has_aaip")==0) {
@ -15475,6 +15478,10 @@ not_enough_exec_arguments:;
} }
} else if(strcmp(cpt, "show_stream")==0) { } else if(strcmp(cpt, "show_stream")==0) {
Findjob_set_action_target(job, 29, NULL, 0); Findjob_set_action_target(job, 29, NULL, 0);
} else if(strcmp(cpt, "get_any_xattr")==0) {
Findjob_set_action_target(job, 33, NULL, 0);
} else if(strcmp(cpt, "get_md5")==0) {
Findjob_set_action_target(job, 34, NULL, 0);
} else { } else {
sprintf(xorriso->info_text, "-find -exec: unknown action %s", sprintf(xorriso->info_text, "-find -exec: unknown action %s",
Text_shellsafe(argv[i], sfe, 0)); Text_shellsafe(argv[i], sfe, 0));
@ -15616,6 +15623,7 @@ int Xorriso_option_fs(struct XorrisO *xorriso, char *size, int flag)
*/ */
/* @param flag bit0= recursive -getfacl_r /* @param flag bit0= recursive -getfacl_r
bit1= getfattr rather than getfacl bit1= getfattr rather than getfacl
bit3= with bit1: do not ignore eventual non-user attributes
*/ */
int Xorriso_option_getfacli(struct XorrisO *xorriso, int Xorriso_option_getfacli(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag) int argc, char **argv, int *idx, int flag)
@ -15646,7 +15654,7 @@ int Xorriso_option_getfacli(struct XorrisO *xorriso,
Findjob_destroy(&job, 0); Findjob_destroy(&job, 0);
} else { } else {
if(flag & 2) if(flag & 2)
ret= Xorriso_getfattr(xorriso, NULL, optv[i], NULL, 0); ret= Xorriso_getfattr(xorriso, NULL, optv[i], NULL, flag & 8);
else else
ret= Xorriso_getfacl(xorriso, NULL, optv[i], NULL, 0); ret= Xorriso_getfacl(xorriso, NULL, optv[i], NULL, 0);
} }

View File

@ -1 +1 @@
#define Xorriso_timestamP "2009.08.03.075954" #define Xorriso_timestamP "2009.08.10.123146"

View File

@ -7502,7 +7502,7 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
gid_t group= 0; gid_t group= 0;
time_t date= 0; time_t date= 0;
mode_t mode_or= 0, mode_and= ~1; mode_t mode_or= 0, mode_and= ~1;
char *target, *text_2, sfe[5*SfileadrL], *iso_prefix; char *target, *text_2, sfe[5*SfileadrL], *iso_prefix, md5[16];
struct FindjoB *subjob; struct FindjoB *subjob;
struct stat dir_stbuf; struct stat dir_stbuf;
@ -7588,7 +7588,12 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
iso_prefix, target, 0); iso_prefix, target, 0);
if(ret==2) if(ret==2)
deleted= 1; deleted= 1;
} else if(action == 33) {
ret= Xorriso_getfattr(xorriso, (void *) node, show_path, NULL, 8);
} else if(action == 34) {
ret= Xorriso_get_md5(xorriso, (void *) node, show_path, md5, 0);
if(ret >= 0)
ret= 1;
} else { /* includes : 15 in_iso */ } else { /* includes : 15 in_iso */
sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0)); sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0));
Xorriso_result(xorriso, 0); Xorriso_result(xorriso, 0);
@ -7734,7 +7739,9 @@ return:
value= (ret == 1); value= (ret == 1);
break; case 6: /* -has_xattr */ break; case 6: /* -has_xattr */
ret = Xorriso_getfattr(xorriso, (void *) node, "", NULL, 64); case 14: /* -has_any_xattr */
ret = Xorriso_getfattr(xorriso, (void *) node, "", NULL,
64 | (8 * (ftest->test_type == 14)));
if(ret < 0) { if(ret < 0) {
value= -1; value= -1;
Xorriso_process_msg_queues(xorriso, 0); Xorriso_process_msg_queues(xorriso, 0);
@ -10373,6 +10380,7 @@ ok:;
/* /*
@param flag bit0= do not remove leading slash @param flag bit0= do not remove leading slash
bit1= append flatly to result_line and put out
*/ */
int Xorriso_getfname(struct XorrisO *xorriso, char *path, int flag) int Xorriso_getfname(struct XorrisO *xorriso, char *path, int flag)
{ {
@ -10387,7 +10395,12 @@ int Xorriso_getfname(struct XorrisO *xorriso, char *path, int flag)
strlen(path + path_offset), 8); strlen(path + path_offset), 8);
if(ret <= 0) if(ret <= 0)
return(-1); return(-1);
if(flag & 2) {
sprintf(xorriso->result_line + strlen(xorriso->result_line),
"%s\n", bsl_path[0] ? bsl_path : ".");
} else {
sprintf(xorriso->result_line, "# file: %s\n", bsl_path[0] ? bsl_path : "."); sprintf(xorriso->result_line, "# file: %s\n", bsl_path[0] ? bsl_path : ".");
}
free(bsl_path); free(bsl_path);
bsl_path= NULL; bsl_path= NULL;
/* temporarily disable -backslash_codes with result output */ /* temporarily disable -backslash_codes with result output */
@ -10607,9 +10620,10 @@ ex:;
/* /*
@param flag bit0= do not report to result but only retrieve attr text @param flag bit0= do not report to result but only retrieve attr text
bit1= path is disk_path bit1= path is disk_path
bit3= do not ignore eventual non-user attributes.
bit5= in case of symbolic link on disk: inquire link target bit5= in case of symbolic link on disk: inquire link target
bit6= check for existence of user namespaceL xattr, bit6= check for existence of xattr, return 0 or 1
return 0 or 1 (depends also on bit3)
*/ */
int Xorriso_getfattr(struct XorrisO *xorriso, void *in_node, char *path, int Xorriso_getfattr(struct XorrisO *xorriso, void *in_node, char *path,
char **attr_text, int flag) char **attr_text, int flag)
@ -10621,7 +10635,7 @@ int Xorriso_getfattr(struct XorrisO *xorriso, void *in_node, char *path,
if(attr_text != NULL) if(attr_text != NULL)
*attr_text= NULL; *attr_text= NULL;
ret= Xorriso_get_attrs(xorriso, in_node, path, &num_attrs, &names, ret= Xorriso_get_attrs(xorriso, in_node, path, &num_attrs, &names,
&value_lengths, &values, flag & (2 | 32)); &value_lengths, &values, flag & (2 | 8 | 32));
if(ret <= 0) if(ret <= 0)
goto ex; goto ex;
if(flag & 64) { if(flag & 64) {
@ -12138,3 +12152,48 @@ ex:;
} }
/*
@param flag bit0= do not report to result but only retrieve md5 text
bit6= check for existence of md5, return 0 or 1
*/
int Xorriso_get_md5(struct XorrisO *xorriso, void *in_node, char *path,
char md5[16], int flag)
{
int ret= 1, i;
char *wpt;
IsoImage *image;
IsoNode *node;
ret= Xorriso_get_volume(xorriso, &image, 0);
if(ret <= 0)
goto ex;
node= (IsoNode *) in_node;
if(node == NULL) {
ret= Xorriso_get_node_by_path(xorriso, path, NULL, &node, 0);
if(ret<=0)
goto ex;
}
if(!LIBISO_ISREG(node))
return(0);
ret= iso_file_get_md5(image, (IsoFile *) node, md5, 0);
Xorriso_process_msg_queues(xorriso,0);
if(ret <= 0)
goto ex;
if(flag & 1)
{ret= 1; goto ex;}
wpt= xorriso->result_line;
for(i= 0; i < 16; i++) {
sprintf(wpt, "%2.2x", ((unsigned char *) md5)[i]);
wpt+= 2;
}
strcpy(wpt, " ");
wpt+= 2;
Xorriso_getfname(xorriso, path, 1 | 2);
ret= 1;
ex:;
return(ret);
}