Made -getfacl file name escaping more similar to shell command behavior
This commit is contained in:
parent
b0aae62aff
commit
beac765f7b
@ -631,6 +631,8 @@ ex:;
|
|||||||
/* @param flag bit0= only encode inside quotes
|
/* @param flag bit0= only encode inside quotes
|
||||||
bit1= encode < 32 outside quotes except 7, 8, 9, 10, 12, 13
|
bit1= encode < 32 outside quotes except 7, 8, 9, 10, 12, 13
|
||||||
bit2= encode in any case above 126
|
bit2= encode in any case above 126
|
||||||
|
bit3= encode in any case shellsafe:
|
||||||
|
<=42 , 59, 60, 62, 63, 92, 94, 96, >=123
|
||||||
*/
|
*/
|
||||||
int Sfile_bsl_encoder(char **result, char *text, int flag)
|
int Sfile_bsl_encoder(char **result, char *text, int flag)
|
||||||
{
|
{
|
||||||
@ -640,9 +642,14 @@ int Sfile_bsl_encoder(char **result, char *text, int flag)
|
|||||||
count= 0;
|
count= 0;
|
||||||
for(rpt= text; *rpt != 0; rpt++) {
|
for(rpt= text; *rpt != 0; rpt++) {
|
||||||
count++;
|
count++;
|
||||||
if(*rpt >= 32 && *rpt <= 126 && *rpt != '\\')
|
if(flag & 8) {
|
||||||
|
if(!(*rpt <= 42 || *rpt == 59 || *rpt == 60 || *rpt == 62 ||
|
||||||
|
*rpt == 63 || *rpt == 92 || *rpt == 94 || *rpt == 96 ||
|
||||||
|
*rpt >= 123))
|
||||||
continue;
|
continue;
|
||||||
if((*rpt >= 7 && *rpt <= 13) || *rpt == 27 || *rpt == '\\')
|
} else if(*rpt >= 32 && *rpt <= 126 && *rpt != '\\')
|
||||||
|
continue;
|
||||||
|
if(((*rpt >= 7 && *rpt <= 13) || *rpt == 27 || *rpt == '\\') && !(flag & 8))
|
||||||
count++;
|
count++;
|
||||||
else
|
else
|
||||||
count+= 3;
|
count+= 3;
|
||||||
@ -655,11 +662,18 @@ int Sfile_bsl_encoder(char **result, char *text, int flag)
|
|||||||
sq_open= !(sq_open || dq_open);
|
sq_open= !(sq_open || dq_open);
|
||||||
if(*rpt == '"')
|
if(*rpt == '"')
|
||||||
dq_open= !(sq_open || dq_open);
|
dq_open= !(sq_open || dq_open);
|
||||||
if(*rpt >= 32 && *rpt <= 126 && *rpt != '\\') {
|
|
||||||
|
if(flag & 8) {
|
||||||
|
if(!(*rpt <= 42 || *rpt == 59 || *rpt == 60 || *rpt == 62 ||
|
||||||
|
*rpt == 63 || *rpt == 92 || *rpt == 94 || *rpt == 96 ||
|
||||||
|
*rpt >= 123)) {
|
||||||
*(wpt++)= *rpt;
|
*(wpt++)= *rpt;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if( ((flag & 1) && !(sq_open || dq_open)) &&
|
} else if(*rpt >= 32 && *rpt <= 126 && *rpt != '\\') {
|
||||||
|
*(wpt++)= *rpt;
|
||||||
|
continue;
|
||||||
|
} else if( ((flag & 1) && !(sq_open || dq_open)) &&
|
||||||
!((flag & 2) && (*rpt >= 1 && * rpt <= 31 &&
|
!((flag & 2) && (*rpt >= 1 && * rpt <= 31 &&
|
||||||
!(*rpt == 7 || *rpt == 8 || *rpt == 9 || *rpt == 10 ||
|
!(*rpt == 7 || *rpt == 8 || *rpt == 9 || *rpt == 10 ||
|
||||||
*rpt == 12 || *rpt == 13))) &&
|
*rpt == 12 || *rpt == 13))) &&
|
||||||
@ -669,7 +683,7 @@ int Sfile_bsl_encoder(char **result, char *text, int flag)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
*(wpt++)= '\\';
|
*(wpt++)= '\\';
|
||||||
if((*rpt >= 7 && *rpt <= 13) || *rpt == 27 || *rpt == '\\') {
|
if(((*rpt >= 7 && *rpt <= 13) || *rpt == 27 || *rpt == '\\') && !(flag&8)) {
|
||||||
if(*rpt == 7)
|
if(*rpt == 7)
|
||||||
*(wpt++)= 'a';
|
*(wpt++)= 'a';
|
||||||
else if(*rpt == 8)
|
else if(*rpt == 8)
|
||||||
@ -15386,6 +15400,22 @@ ex:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Options -setfacl_list alias -setfacl_listi */
|
||||||
|
int Xorriso_option_setfacl_listi(struct XorrisO *xorriso, char *path, int flag)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* >>> Open path */;
|
||||||
|
/* >>> Loop over lines */;
|
||||||
|
/* >>> if(strncmp(line, */;
|
||||||
|
/* >>> */;
|
||||||
|
/* >>> */;
|
||||||
|
/* >>> */;
|
||||||
|
/* >>> */;
|
||||||
|
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Options -setfacl alias -setfacli, -setfacl_r alias -setfacl_ri */
|
/* Options -setfacl alias -setfacli, -setfacl_r alias -setfacl_ri */
|
||||||
/* @param flag bit0=recursive -setfacl_r
|
/* @param flag bit0=recursive -setfacl_r
|
||||||
*/
|
*/
|
||||||
@ -15972,7 +16002,8 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
|||||||
"ls","lsi","lsl","lsli","lsd","lsdi","lsdl","lsdli",
|
"ls","lsi","lsl","lsli","lsd","lsdi","lsdl","lsdli",
|
||||||
"lsx","lslx","lsdx","lsdlx","map_l","mv","mvi","mkdir","mkdiri",
|
"lsx","lslx","lsdx","lsdlx","map_l","mv","mvi","mkdir","mkdiri",
|
||||||
"not_paths","rm","rmi","rm_r","rm_ri","rmdir","rmdiri","update_l",
|
"not_paths","rm","rmi","rm_r","rm_ri","rmdir","rmdiri","update_l",
|
||||||
"setfacl","setfacli","setfacl_r","setfacl_ri",
|
"setfacl","setfacli","setfacl_list","setfacl_listi",
|
||||||
|
"setfacl_r","setfacl_ri",
|
||||||
""
|
""
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -16602,6 +16633,10 @@ next_command:;
|
|||||||
(*idx)+= 1;
|
(*idx)+= 1;
|
||||||
ret= Xorriso_option_setfacli(xorriso, arg1, argc, argv, idx, 0);
|
ret= Xorriso_option_setfacli(xorriso, arg1, argc, argv, idx, 0);
|
||||||
|
|
||||||
|
} else if(strcmp(cmd,"setfacl_list")==0 || strcmp(cmd,"setfacl_listi")==0) {
|
||||||
|
(*idx)+= 1;
|
||||||
|
ret= Xorriso_option_setfacl_listi(xorriso, arg1, 0);
|
||||||
|
|
||||||
} else if(strcmp(cmd,"setfacl_r")==0 || strcmp(cmd,"setfacl_ri")==0) {
|
} else if(strcmp(cmd,"setfacl_r")==0 || strcmp(cmd,"setfacl_ri")==0) {
|
||||||
(*idx)+= 1;
|
(*idx)+= 1;
|
||||||
ret= Xorriso_option_setfacli(xorriso, arg1, argc, argv, idx, 1);
|
ret= Xorriso_option_setfacli(xorriso, arg1, argc, argv, idx, 1);
|
||||||
|
@ -654,6 +654,13 @@ int Sfile_count_components(char *path, int flag);
|
|||||||
*/
|
*/
|
||||||
int Sfile_type(char *filename, int flag);
|
int Sfile_type(char *filename, int flag);
|
||||||
|
|
||||||
|
/* @param flag bit0= only encode inside quotes
|
||||||
|
bit1= encode < 32 outside quotes except 7, 8, 9, 10, 12, 13
|
||||||
|
bit2= encode in any case above 126
|
||||||
|
bit3= encode in any case shellsafe:
|
||||||
|
<=42 , 59, 60, 62, 63, 92, 94, 96, >=123
|
||||||
|
*/
|
||||||
|
int Sfile_bsl_encoder(char **result, char *text, int flag);
|
||||||
|
|
||||||
|
|
||||||
char *Text_shellsafe(char *in_text, char *out_text, int flag);
|
char *Text_shellsafe(char *in_text, char *out_text, int flag);
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2009.01.28.114755"
|
#define Xorriso_timestamP "2009.01.28.190140"
|
||||||
|
@ -8815,9 +8815,9 @@ ok:;
|
|||||||
int Xorriso_getfacl(struct XorrisO *xorriso, void *in_node, char *path,
|
int Xorriso_getfacl(struct XorrisO *xorriso, void *in_node, char *path,
|
||||||
char **acl_text, int flag)
|
char **acl_text, int flag)
|
||||||
{
|
{
|
||||||
int ret, d_ret, path_offset= 0, result_len= 0, pass;
|
int ret, d_ret, path_offset= 0, result_len= 0, pass, bsl_mem;
|
||||||
IsoNode *node;
|
IsoNode *node;
|
||||||
char *text= NULL, *d_text= NULL, *cpt, *npt;
|
char *text= NULL, *d_text= NULL, *cpt, *npt, *bsl_path= NULL;
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
gid_t gid;
|
gid_t gid;
|
||||||
struct passwd *pwd;
|
struct passwd *pwd;
|
||||||
@ -8875,10 +8875,19 @@ int Xorriso_getfacl(struct XorrisO *xorriso, void *in_node, char *path,
|
|||||||
if(!(flag & 1)) {
|
if(!(flag & 1)) {
|
||||||
if(path[0] == '/' && !(flag & 2))
|
if(path[0] == '/' && !(flag & 2))
|
||||||
path_offset= 1;
|
path_offset= 1;
|
||||||
strcpy(xorriso->result_line, "# file: ");
|
|
||||||
Text_shellsafe(path + path_offset, xorriso->result_line, 1);
|
/* backslash escaped path rather than shellsafe path */
|
||||||
strcat(xorriso->result_line, "\n");
|
ret= Sfile_bsl_encoder(&bsl_path, path + path_offset, 8);
|
||||||
|
if(ret <= 0)
|
||||||
|
{ret= -1; goto ex;}
|
||||||
|
sprintf(xorriso->result_line, "# file: %s\n", bsl_path);
|
||||||
|
free(bsl_path);
|
||||||
|
bsl_path= NULL;
|
||||||
|
/* temporarily disable -backslash_codes with result output */
|
||||||
|
bsl_mem= xorriso->bsl_interpretation;
|
||||||
|
xorriso->bsl_interpretation= 0;
|
||||||
Xorriso_result(xorriso, 0);
|
Xorriso_result(xorriso, 0);
|
||||||
|
xorriso->bsl_interpretation= bsl_mem;
|
||||||
|
|
||||||
uid= iso_node_get_uid(node);
|
uid= iso_node_get_uid(node);
|
||||||
pwd= getpwuid(uid);
|
pwd= getpwuid(uid);
|
||||||
@ -8949,6 +8958,8 @@ ex:;
|
|||||||
free(d_text);
|
free(d_text);
|
||||||
if(text != NULL)
|
if(text != NULL)
|
||||||
free(text);
|
free(text);
|
||||||
|
if(bsl_path != NULL)
|
||||||
|
free(bsl_path);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user