Skip to content

Commit

Permalink
findlib: adapt xattr changes for acl, too.
Browse files Browse the repository at this point in the history
Previously the filed did not pick up acl on filesystems when
st_dev == 0. This patch now also considers such filesystems.
  • Loading branch information
arogge committed Aug 20, 2020
1 parent e0808db commit 297c8e7
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 87 deletions.
9 changes: 3 additions & 6 deletions core/src/filed/backup.cc
Expand Up @@ -145,8 +145,7 @@ bool BlastDataToStorageDaemon(JobControlRecord* jcr,
StartHeartbeatMonitor(jcr);

if (have_acl) {
jcr->impl->acl_data = (acl_data_t*)malloc(sizeof(acl_data_t));
memset(jcr->impl->acl_data, 0, sizeof(acl_data_t));
jcr->impl->acl_data = std::make_unique<AclData>();
jcr->impl->acl_data->u.build =
(acl_build_data_t*)malloc(sizeof(acl_build_data_t));
memset(jcr->impl->acl_data->u.build, 0, sizeof(acl_build_data_t));
Expand Down Expand Up @@ -191,8 +190,6 @@ bool BlastDataToStorageDaemon(JobControlRecord* jcr,
if (have_acl && jcr->impl->acl_data) {
FreePoolMemory(jcr->impl->acl_data->u.build->content);
free(jcr->impl->acl_data->u.build);
free(jcr->impl->acl_data);
jcr->impl->acl_data = NULL;
}

if (have_xattr && jcr->impl->xattr_data) {
Expand Down Expand Up @@ -465,9 +462,9 @@ static inline bool DoBackupAcl(JobControlRecord* jcr, FindFilesPacket* ff_pkt)
jcr->impl->acl_data->last_fname = jcr->impl->last_fname;

if (jcr->IsPlugin()) {
retval = PluginBuildAclStreams(jcr, jcr->impl->acl_data, ff_pkt);
retval = PluginBuildAclStreams(jcr, jcr->impl->acl_data.get(), ff_pkt);
} else {
retval = BuildAclStreams(jcr, jcr->impl->acl_data, ff_pkt);
retval = BuildAclStreams(jcr, jcr->impl->acl_data.get(), ff_pkt);
}

switch (retval) {
Expand Down
4 changes: 2 additions & 2 deletions core/src/filed/fd_plugins.cc
Expand Up @@ -1405,7 +1405,7 @@ bool PluginSetAttributes(JobControlRecord* jcr,
* Plugin specific callback for getting ACL information.
*/
bacl_exit_code PluginBuildAclStreams(JobControlRecord* jcr,
acl_data_t* acl_data,
AclData* acl_data,
FindFilesPacket* ff_pkt)
{
Plugin* plugin;
Expand Down Expand Up @@ -1452,7 +1452,7 @@ bacl_exit_code PluginBuildAclStreams(JobControlRecord* jcr,
* Plugin specific callback for setting ACL information.
*/
bacl_exit_code plugin_parse_acl_streams(JobControlRecord* jcr,
acl_data_t* acl_data,
AclData* acl_data,
int stream,
char* content,
uint32_t content_length)
Expand Down
4 changes: 2 additions & 2 deletions core/src/filed/fd_plugins.h
Expand Up @@ -282,10 +282,10 @@ bool PluginSetAttributes(JobControlRecord* jcr,
Attributes* attr,
BareosWinFilePacket* ofd);
bacl_exit_code PluginBuildAclStreams(JobControlRecord* jcr,
acl_data_t* acl_data,
AclData* acl_data,
FindFilesPacket* ff_pkt);
bacl_exit_code plugin_parse_acl_streams(JobControlRecord* jcr,
acl_data_t* acl_data,
AclData* acl_data,
int stream,
char* content,
uint32_t content_length);
Expand Down
4 changes: 2 additions & 2 deletions core/src/filed/jcr_private.h
Expand Up @@ -28,7 +28,7 @@

#include <atomic>

struct acl_data_t;
struct AclData;
struct XattrData;

namespace filedaemon {
Expand All @@ -53,7 +53,7 @@ struct JobControlRecordPrivate {
uint32_t num_files_examined{}; /**< Files examined this job */
POOLMEM* last_fname{}; /**< Last file saved/verified */
POOLMEM* job_metadata{}; /**< VSS job metadata */
acl_data_t* acl_data{}; /**< ACLs for backup/restore */
std::unique_ptr<AclData> acl_data{}; /**< ACLs for backup/restore */
std::unique_ptr<XattrData> xattr_data{}; /**< Extended Attributes for backup/restore */
int32_t last_type{}; /**< Type of last file saved/verified */
bool incremental{}; /**< Set if incremental for SINCE */
Expand Down
23 changes: 7 additions & 16 deletions core/src/filed/restore.cc
Expand Up @@ -227,12 +227,12 @@ static inline bool do_reStoreAcl(JobControlRecord* jcr,
jcr->impl->acl_data->last_fname = jcr->impl->last_fname;
switch (stream) {
case STREAM_ACL_PLUGIN:
retval = plugin_parse_acl_streams(jcr, jcr->impl->acl_data, stream,
retval = plugin_parse_acl_streams(jcr, jcr->impl->acl_data.get(), stream,
content, content_length);
break;
default:
retval = parse_acl_streams(jcr, jcr->impl->acl_data, stream, content,
content_length);
retval = parse_acl_streams(jcr, jcr->impl->acl_data.get(), stream,
content, content_length);
break;
}

Expand Down Expand Up @@ -276,8 +276,8 @@ static inline bool do_restore_xattr(JobControlRecord* jcr,
content, content_length);
break;
default:
retval = ParseXattrStreams(jcr, jcr->impl->xattr_data.get(), stream, content,
content_length);
retval = ParseXattrStreams(jcr, jcr->impl->xattr_data.get(), stream,
content, content_length);
break;
}

Expand Down Expand Up @@ -491,18 +491,13 @@ void DoRestore(JobControlRecord* jcr)
binit(&rctx.forkbfd);
attr = rctx.attr = new_attr(jcr);
if (have_acl) {
jcr->impl->acl_data = (acl_data_t*)malloc(sizeof(acl_data_t));
memset(jcr->impl->acl_data, 0, sizeof(acl_data_t));
jcr->impl->acl_data = std::make_unique<AclData>();
jcr->impl->acl_data->u.parse =
(acl_parse_data_t*)malloc(sizeof(acl_parse_data_t));
memset(jcr->impl->acl_data->u.parse, 0, sizeof(acl_parse_data_t));
}
if (have_xattr) {
jcr->impl->xattr_data = std::make_unique<XattrData>();
/*
jcr->impl->xattr_data = (xattr_data_t*)malloc(sizeof(xattr_data_t));
memset(jcr->impl->xattr_data, 0, sizeof(xattr_data_t));
*/
jcr->impl->xattr_data->u.parse =
(xattr_parse_data_t*)malloc(sizeof(xattr_parse_data_t));
memset(jcr->impl->xattr_data->u.parse, 0, sizeof(xattr_parse_data_t));
Expand Down Expand Up @@ -1197,11 +1192,7 @@ void DoRestore(JobControlRecord* jcr)
rctx.fork_cipher_ctx.buf = NULL;
}

if (have_acl && jcr->impl->acl_data) {
free(jcr->impl->acl_data->u.parse);
free(jcr->impl->acl_data);
jcr->impl->acl_data = NULL;
}
if (have_acl && jcr->impl->acl_data) { free(jcr->impl->acl_data->u.parse); }

if (have_xattr && jcr->impl->xattr_data) {
free(jcr->impl->xattr_data->u.parse);
Expand Down

0 comments on commit 297c8e7

Please sign in to comment.