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

Function unpack_smb_acl

acls.c:262–347  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

260
261/* Unpack system ACL -> rsync ACL verbatim. Return whether we succeeded. */
262static BOOL unpack_smb_acl(SMB_ACL_T sacl, rsync_acl *racl)
263{
264 static item_list temp_ida_list = EMPTY_ITEM_LIST;
265 SMB_ACL_ENTRY_T entry;
266 const char *errfun;
267 int rc;
268
269 errfun = "sys_acl_get_entry";
270 for (rc = sys_acl_get_entry(sacl, SMB_ACL_FIRST_ENTRY, &entry);
271 rc == 1;
272 rc = sys_acl_get_entry(sacl, SMB_ACL_NEXT_ENTRY, &entry)) {
273 SMB_ACL_TAG_T tag_type;
274 uint32 access;
275 id_t g_u_id;
276 id_access *ida;
277 if ((rc = sys_acl_get_info(entry, &tag_type, &access, &g_u_id)) != 0) {
278 errfun = "sys_acl_get_info";
279 break;
280 }
281 /* continue == done with entry; break == store in temporary ida list */
282 switch (tag_type) {
283#ifndef HAVE_OSX_ACLS
284 case SMB_ACL_USER_OBJ:
285 if (racl->user_obj == NO_ENTRY)
286 racl->user_obj = access;
287 else
288 rprintf(FINFO, "unpack_smb_acl: warning: duplicate USER_OBJ entry ignored\n");
289 continue;
290 case SMB_ACL_GROUP_OBJ:
291 if (racl->group_obj == NO_ENTRY)
292 racl->group_obj = access;
293 else
294 rprintf(FINFO, "unpack_smb_acl: warning: duplicate GROUP_OBJ entry ignored\n");
295 continue;
296 case SMB_ACL_MASK:
297 if (racl->mask_obj == NO_ENTRY)
298 racl->mask_obj = access;
299 else
300 rprintf(FINFO, "unpack_smb_acl: warning: duplicate MASK entry ignored\n");
301 continue;
302 case SMB_ACL_OTHER:
303 if (racl->other_obj == NO_ENTRY)
304 racl->other_obj = access;
305 else
306 rprintf(FINFO, "unpack_smb_acl: warning: duplicate OTHER entry ignored\n");
307 continue;
308#endif
309 case SMB_ACL_USER:
310 access |= NAME_IS_USER;
311 break;
312 case SMB_ACL_GROUP:
313 break;
314 default:
315 rprintf(FINFO, "unpack_smb_acl: warning: entry with unrecognized tag type ignored\n");
316 continue;
317 }
318 ida = EXPAND_ITEM_LIST(&temp_ida_list, id_access, -10);
319 ida->id = g_u_id;

Callers 2

get_rsync_aclFunction · 0.85
default_perms_for_dirFunction · 0.85

Calls 5

sys_acl_get_entryFunction · 0.85
sys_acl_get_infoFunction · 0.85
rsync_acl_freeFunction · 0.85
rprintfFunction · 0.70
rsyserrFunction · 0.70

Tested by

no test coverage detected