Restoring ACLs with -extract and others
This commit is contained in:
parent
7a7aef6f9c
commit
1f37d81537
@ -13002,7 +13002,7 @@ int Xorriso_option_getfacl(struct XorrisO *xorriso,
|
|||||||
/* >>> set up findjob and run it */;
|
/* >>> set up findjob and run it */;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ret= Xorriso_getfacl(xorriso, optv[i], 0);
|
ret= Xorriso_getfacl(xorriso, optv[i], NULL, 0);
|
||||||
}
|
}
|
||||||
if(ret>0 && !xorriso->request_to_abort)
|
if(ret>0 && !xorriso->request_to_abort)
|
||||||
continue; /* regular bottom of loop */
|
continue; /* regular bottom of loop */
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2009.01.17.181500"
|
#define Xorriso_timestamP "2009.01.18.213952"
|
||||||
|
@ -63,6 +63,10 @@
|
|||||||
|
|
||||||
#endif /* Xorriso_standalonE */
|
#endif /* Xorriso_standalonE */
|
||||||
|
|
||||||
|
#ifdef Libisofs_with_aaiP
|
||||||
|
#define Xorriso_with_aaiP yes
|
||||||
|
#endif /* Libisofs_with_aaiP */
|
||||||
|
|
||||||
/* Some private in advance declarations */
|
/* Some private in advance declarations */
|
||||||
int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||||
int flag);
|
int flag);
|
||||||
@ -2840,7 +2844,7 @@ int Xorriso_restore_properties(struct XorrisO *xorriso, char *disk_path,
|
|||||||
uid_t uid;
|
uid_t uid;
|
||||||
gid_t gid;
|
gid_t gid;
|
||||||
struct utimbuf utime_buffer;
|
struct utimbuf utime_buffer;
|
||||||
char sfe[5*SfileadrL];
|
char sfe[5*SfileadrL], *text= NULL;
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
|
|
||||||
ret= lstat(disk_path, &stbuf);
|
ret= lstat(disk_path, &stbuf);
|
||||||
@ -2849,7 +2853,7 @@ int Xorriso_restore_properties(struct XorrisO *xorriso, char *disk_path,
|
|||||||
"Cannot obtain properties of disk file %s",
|
"Cannot obtain properties of disk file %s",
|
||||||
Text_shellsafe(disk_path, sfe, 0));
|
Text_shellsafe(disk_path, sfe, 0));
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
|
||||||
return(0);
|
{ret= 0; goto ex;}
|
||||||
}
|
}
|
||||||
uid= stbuf.st_uid;
|
uid= stbuf.st_uid;
|
||||||
|
|
||||||
@ -2858,14 +2862,14 @@ int Xorriso_restore_properties(struct XorrisO *xorriso, char *disk_path,
|
|||||||
if(is_dir && (flag&2)) {
|
if(is_dir && (flag&2)) {
|
||||||
ret= Xorriso_fake_stbuf(xorriso, "", &stbuf, &node, 1);
|
ret= Xorriso_fake_stbuf(xorriso, "", &stbuf, &node, 1);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
return(0);
|
{ret= 0; goto ex;}
|
||||||
ret= Permstack_push(&(xorriso->perm_stack), disk_path, &stbuf, 0);
|
ret= Permstack_push(&(xorriso->perm_stack), disk_path, &stbuf, 0);
|
||||||
if(ret<=0) {
|
if(ret<=0) {
|
||||||
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
|
Xorriso_msgs_submit(xorriso, 0, disk_path, 0, "ERRFILE", 0);
|
||||||
strcpy(xorriso->info_text,
|
strcpy(xorriso->info_text,
|
||||||
"Cannot memorize permissions for disk directory");
|
"Cannot memorize permissions for disk directory");
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
||||||
return(-1);
|
{ret= -1; goto ex;}
|
||||||
}
|
}
|
||||||
mode|= S_IRUSR|S_IWUSR|S_IXUSR;
|
mode|= S_IRUSR|S_IWUSR|S_IXUSR;
|
||||||
}
|
}
|
||||||
@ -2875,10 +2879,33 @@ int Xorriso_restore_properties(struct XorrisO *xorriso, char *disk_path,
|
|||||||
"Cannot change access permissions of disk file %s",
|
"Cannot change access permissions of disk file %s",
|
||||||
Text_shellsafe(disk_path, sfe, 0));
|
Text_shellsafe(disk_path, sfe, 0));
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
|
||||||
return(0);
|
{ret= 0; goto ex;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_aaiP
|
||||||
|
|
||||||
|
ret= iso_node_get_acl_text(node, &text, 16);
|
||||||
|
if(ret < 0) {
|
||||||
|
strcpy(xorriso->info_text, "Error with obtaining ACL for ");
|
||||||
|
Text_shellsafe(disk_path, xorriso->info_text, 1);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
{ret= 0; goto ex;}
|
||||||
|
}
|
||||||
|
if(text != NULL) {
|
||||||
|
ret= iso_local_set_acl_text(disk_path, text, 0);
|
||||||
|
if(ret == -1) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"Cannot change ACL of disk file %s",
|
||||||
|
Text_shellsafe(disk_path, sfe, 0));
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
|
||||||
|
{ret= 0; goto ex;}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
if(flag&1)
|
if(flag&1)
|
||||||
return(1);
|
{ret= 1; goto ex;}
|
||||||
|
|
||||||
gid= iso_node_get_gid(node);
|
gid= iso_node_get_gid(node);
|
||||||
if(!(S_ISDIR(stbuf.st_mode) && (flag&2)))
|
if(!(S_ISDIR(stbuf.st_mode) && (flag&2)))
|
||||||
@ -2892,9 +2919,13 @@ int Xorriso_restore_properties(struct XorrisO *xorriso, char *disk_path,
|
|||||||
"Cannot change atime, mtime of disk file %s",
|
"Cannot change atime, mtime of disk file %s",
|
||||||
Text_shellsafe(disk_path, sfe, 0));
|
Text_shellsafe(disk_path, sfe, 0));
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE", 0);
|
||||||
return(0);
|
{ret= 0; goto ex;}
|
||||||
}
|
}
|
||||||
return(1);
|
ret= 1;
|
||||||
|
ex:;
|
||||||
|
if(text != NULL)
|
||||||
|
free(text);
|
||||||
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -8724,7 +8755,16 @@ ok:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Xorriso_getfacl(struct XorrisO *xorriso, char *path, int flag)
|
/* @param acl_text if acl_text is not NULL, then *acl_text will be set to the
|
||||||
|
ACL text (without comments) of the file object. In this
|
||||||
|
case it finally has to be freed by the caller.
|
||||||
|
@param flag bit0= do not report to result but only retrieve ACL text
|
||||||
|
@return 2 ok, no ACL available, eventual *acl_text will be NULL
|
||||||
|
1 ok, ACL available, eventual *acl_text stems from malloc()
|
||||||
|
<=0 error
|
||||||
|
*/
|
||||||
|
int Xorriso_getfacl(struct XorrisO *xorriso, char *path, char **acl_text,
|
||||||
|
int flag)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
IsoNode *node;
|
IsoNode *node;
|
||||||
@ -8737,18 +8777,29 @@ int Xorriso_getfacl(struct XorrisO *xorriso, char *path, int flag)
|
|||||||
ret= Xorriso_get_node_by_path(xorriso, path, NULL, &node, 0);
|
ret= Xorriso_get_node_by_path(xorriso, path, NULL, &node, 0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
ret = iso_node_get_acl_text(node, &text, 0);
|
|
||||||
|
#ifdef Xorriso_with_aaiP
|
||||||
|
ret= iso_node_get_acl_text(node, &text, 0);
|
||||||
|
#else
|
||||||
|
ret= 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
strcpy(xorriso->info_text, "Error with obtaining ACL of ");
|
strcpy(xorriso->info_text, "Error with obtaining ACL of ");
|
||||||
Text_shellsafe(path, xorriso->info_text, 1);
|
Text_shellsafe(path, xorriso->info_text, 1);
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
ret= 0; goto ex;
|
ret= 0; goto ex;
|
||||||
}
|
}
|
||||||
if(ret == 0) {
|
if(flag & 1) {
|
||||||
|
ret= 1 + (ret == 0);
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
if(ret == 0 || ret == 2) {
|
||||||
strcpy(xorriso->info_text, "No ACL associated with ");
|
strcpy(xorriso->info_text, "No ACL associated with ");
|
||||||
Text_shellsafe(path, xorriso->info_text, 1);
|
Text_shellsafe(path, xorriso->info_text, 1);
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
|
||||||
ret= 2; goto ex;
|
if(ret == 0)
|
||||||
|
{ret= 2; goto ex;}
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(xorriso->result_line, "# file: ");
|
strcpy(xorriso->result_line, "# file: ");
|
||||||
@ -8783,7 +8834,9 @@ int Xorriso_getfacl(struct XorrisO *xorriso, char *path, int flag)
|
|||||||
|
|
||||||
ret= 1;
|
ret= 1;
|
||||||
ex:;
|
ex:;
|
||||||
if(text != NULL)
|
if(acl_text != NULL)
|
||||||
|
*acl_text= text;
|
||||||
|
else if(text != NULL)
|
||||||
free(text);
|
free(text);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
@ -382,7 +382,16 @@ int Xorriso_auto_driveadr(struct XorrisO *xorriso, char *adr, char *result,
|
|||||||
int flag);
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
int Xorriso_getfacl(struct XorrisO *xorriso, char *path, int flag);
|
/* @param acl_text if acl_text is not NULL, then *acl_text will be set to the
|
||||||
|
ACL text (without comments) of the file object. In this
|
||||||
|
case it finally has to be freed by the caller.
|
||||||
|
@param flag bit0= do not report to result but only retrieve ACL text
|
||||||
|
@return 2 ok, no ACL available, eventual *acl_text will be NULL
|
||||||
|
1 ok, ACL available, eventual *acl_text stems from malloc()
|
||||||
|
<=0 error
|
||||||
|
*/
|
||||||
|
int Xorriso_getfacl(struct XorrisO *xorriso, char *path, char **acl_text,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
/* A pseudo file type for El-Torito bootsectors as in man 2 stat :
|
/* A pseudo file type for El-Torito bootsectors as in man 2 stat :
|
||||||
|
Loading…
Reference in New Issue
Block a user