MCPcopy Create free account
hub / github.com/RsyncProject/rsync / pack_smb_acl

Function pack_smb_acl

acls.c:375–446  ·  view source on GitHub ↗

Pack rsync ACL -> system ACL verbatim. Return whether we succeeded. */

Source from the content-addressed store, hash-verified

373
374/* Pack rsync ACL -> system ACL verbatim. Return whether we succeeded. */
375static BOOL pack_smb_acl(SMB_ACL_T *smb_acl, const rsync_acl *racl)
376{
377#ifdef ACLS_NEED_MASK
378 uchar mask_bits;
379#endif
380 size_t count;
381 id_access *ida;
382 const char *errfun = NULL;
383 SMB_ACL_ENTRY_T entry;
384
385 if (!(*smb_acl = sys_acl_init(calc_sacl_entries(racl)))) {
386 rsyserr(FERROR_XFER, errno, "pack_smb_acl: sys_acl_init()");
387 return False;
388 }
389
390#ifndef HAVE_OSX_ACLS
391 COE( sys_acl_create_entry,(smb_acl, &entry) );
392 COE( sys_acl_set_info,(entry, SMB_ACL_USER_OBJ, racl->user_obj & ~NO_ENTRY, 0) );
393#endif
394
395 for (ida = racl->names.idas, count = racl->names.count; count; ida++, count--) {
396#ifdef SMB_ACL_NEED_SORT
397 if (!(ida->access & NAME_IS_USER))
398 break;
399#endif
400 COE( sys_acl_create_entry,(smb_acl, &entry) );
401 COE( sys_acl_set_info,
402 (entry,
403 ida->access & NAME_IS_USER ? SMB_ACL_USER : SMB_ACL_GROUP,
404 ida->access & ~NAME_IS_USER, ida->id) );
405 }
406
407#ifndef HAVE_OSX_ACLS
408 COE( sys_acl_create_entry,(smb_acl, &entry) );
409 COE( sys_acl_set_info,(entry, SMB_ACL_GROUP_OBJ, racl->group_obj & ~NO_ENTRY, 0) );
410
411#ifdef SMB_ACL_NEED_SORT
412 for ( ; count; ida++, count--) {
413 COE( sys_acl_create_entry,(smb_acl, &entry) );
414 COE( sys_acl_set_info,(entry, SMB_ACL_GROUP, ida->access, ida->id) );
415 }
416#endif
417
418#ifdef ACLS_NEED_MASK
419 mask_bits = racl->mask_obj == NO_ENTRY ? racl->group_obj & ~NO_ENTRY : racl->mask_obj;
420 COE( sys_acl_create_entry,(smb_acl, &entry) );
421 COE( sys_acl_set_info,(entry, SMB_ACL_MASK, mask_bits, 0) );
422#else
423 if (racl->mask_obj != NO_ENTRY) {
424 COE( sys_acl_create_entry,(smb_acl, &entry) );
425 COE( sys_acl_set_info,(entry, SMB_ACL_MASK, racl->mask_obj, 0) );
426 }
427#endif
428
429 COE( sys_acl_create_entry,(smb_acl, &entry) );
430 COE( sys_acl_set_info,(entry, SMB_ACL_OTHER, racl->other_obj & ~NO_ENTRY, 0) );
431#endif
432

Callers 1

set_rsync_aclFunction · 0.85

Calls 6

sys_acl_initFunction · 0.85
calc_sacl_entriesFunction · 0.85
sys_acl_validFunction · 0.85
sys_acl_free_aclFunction · 0.85
rsyserrFunction · 0.70
rprintfFunction · 0.70

Tested by

no test coverage detected