Deleted Added
full compact
test_acl_text.c (313926) test_acl_text.c (315432)
1/*-
2 * Copyright (c) 2016 Martin Matuska
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25#include "test.h"
1/*-
2 * Copyright (c) 2016 Martin Matuska
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25#include "test.h"
26__FBSDID("$FreeBSD: stable/11/contrib/libarchive/libarchive/test/test_acl_text.c 313926 2017-02-18 21:58:56Z mm $");
26__FBSDID("$FreeBSD: stable/11/contrib/libarchive/libarchive/test/test_acl_text.c 315432 2017-03-16 23:07:35Z mm $");
27
28/*
29 * Test converting ACLs to text, both wide and non-wide
30 *
31 * This should work on all systems, regardless of whether local
32 * filesystems support ACLs or not.
33 */
34

--- 242 unchanged lines hidden (view full) ---

277
278 /* Create an empty archive_entry. */
279 assert((ae = archive_entry_new()) != NULL);
280
281 /* 1a. Read POSIX.1e access ACLs from text */
282 assertEqualInt(ARCHIVE_OK,
283 archive_entry_acl_from_text(ae, acltext[5],
284 ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
27
28/*
29 * Test converting ACLs to text, both wide and non-wide
30 *
31 * This should work on all systems, regardless of whether local
32 * filesystems support ACLs or not.
33 */
34

--- 242 unchanged lines hidden (view full) ---

277
278 /* Create an empty archive_entry. */
279 assert((ae = archive_entry_new()) != NULL);
280
281 /* 1a. Read POSIX.1e access ACLs from text */
282 assertEqualInt(ARCHIVE_OK,
283 archive_entry_acl_from_text(ae, acltext[5],
284 ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
285 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
285 assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
286 ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0755);
287 assertEqualInt(6, archive_entry_acl_reset(ae,
288 ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
289
290 /* 1b. Now read POSIX.1e default ACLs and append them */
291 assertEqualInt(ARCHIVE_OK,
292 archive_entry_acl_from_text(ae, acltext[7],
293 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
286 ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0755);
287 assertEqualInt(6, archive_entry_acl_reset(ae,
288 ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
289
290 /* 1b. Now read POSIX.1e default ACLs and append them */
291 assertEqualInt(ARCHIVE_OK,
292 archive_entry_acl_from_text(ae, acltext[7],
293 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
294 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
294 assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
295 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
296 assertEqualInt(11, archive_entry_acl_reset(ae,
297 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
298 archive_entry_acl_clear(ae);
299
300 /* 1a and 1b with wide strings */
301 ws = convert_s_to_ws(acltext[5]);
302
303 assertEqualInt(ARCHIVE_OK,
304 archive_entry_acl_from_text_w(ae, ws,
305 ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
295 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
296 assertEqualInt(11, archive_entry_acl_reset(ae,
297 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
298 archive_entry_acl_clear(ae);
299
300 /* 1a and 1b with wide strings */
301 ws = convert_s_to_ws(acltext[5]);
302
303 assertEqualInt(ARCHIVE_OK,
304 archive_entry_acl_from_text_w(ae, ws,
305 ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
306 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
306 assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
307 ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0755);
308 assertEqualInt(6, archive_entry_acl_reset(ae,
309 ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
310
311 free(ws);
312 ws = convert_s_to_ws(acltext[7]);
313
314 assertEqualInt(ARCHIVE_OK,
315 archive_entry_acl_from_text_w(ae, ws,
316 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
307 ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0755);
308 assertEqualInt(6, archive_entry_acl_reset(ae,
309 ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
310
311 free(ws);
312 ws = convert_s_to_ws(acltext[7]);
313
314 assertEqualInt(ARCHIVE_OK,
315 archive_entry_acl_from_text_w(ae, ws,
316 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
317 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
317 assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
318 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
319 assertEqualInt(11, archive_entry_acl_reset(ae,
320 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
321 archive_entry_acl_clear(ae);
322
323 /* 2. Read POSIX.1e default ACLs from text */
324 assertEqualInt(ARCHIVE_OK,
325 archive_entry_acl_from_text(ae, acltext[7],
326 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
318 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
319 assertEqualInt(11, archive_entry_acl_reset(ae,
320 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
321 archive_entry_acl_clear(ae);
322
323 /* 2. Read POSIX.1e default ACLs from text */
324 assertEqualInt(ARCHIVE_OK,
325 archive_entry_acl_from_text(ae, acltext[7],
326 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
327 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
327 assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
328 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0);
329 assertEqualInt(5, archive_entry_acl_reset(ae,
330 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
331 archive_entry_acl_clear(ae);
332
333 /* ws is still acltext[7] */
334 assertEqualInt(ARCHIVE_OK,
335 archive_entry_acl_from_text_w(ae, ws,
336 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
328 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0);
329 assertEqualInt(5, archive_entry_acl_reset(ae,
330 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
331 archive_entry_acl_clear(ae);
332
333 /* ws is still acltext[7] */
334 assertEqualInt(ARCHIVE_OK,
335 archive_entry_acl_from_text_w(ae, ws,
336 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
337 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
337 assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
338 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0);
339 assertEqualInt(5, archive_entry_acl_reset(ae,
340 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
341 archive_entry_acl_clear(ae);
342
343 /* 3. Read POSIX.1e access and default ACLs from text */
344 assertEqualInt(ARCHIVE_OK,
345 archive_entry_acl_from_text(ae, acltext[1],
346 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
338 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0);
339 assertEqualInt(5, archive_entry_acl_reset(ae,
340 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
341 archive_entry_acl_clear(ae);
342
343 /* 3. Read POSIX.1e access and default ACLs from text */
344 assertEqualInt(ARCHIVE_OK,
345 archive_entry_acl_from_text(ae, acltext[1],
346 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
347 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
347 assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
348 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
349 assertEqualInt(11, archive_entry_acl_reset(ae,
350 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
351 archive_entry_acl_clear(ae);
352
353 free(ws);
354 ws = convert_s_to_ws(acltext[1]);
355 assertEqualInt(ARCHIVE_OK,
356 archive_entry_acl_from_text_w(ae, ws,
357 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
348 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
349 assertEqualInt(11, archive_entry_acl_reset(ae,
350 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
351 archive_entry_acl_clear(ae);
352
353 free(ws);
354 ws = convert_s_to_ws(acltext[1]);
355 assertEqualInt(ARCHIVE_OK,
356 archive_entry_acl_from_text_w(ae, ws,
357 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
358 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
358 assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
359 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
360 assertEqualInt(11, archive_entry_acl_reset(ae,
361 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
362 archive_entry_acl_clear(ae);
363
364 /* 4. Read POSIX.1e access and default ACLs from text (short form) */
365 assertEqualInt(ARCHIVE_OK,
366 archive_entry_acl_from_text(ae, acltext[2],
367 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
359 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
360 assertEqualInt(11, archive_entry_acl_reset(ae,
361 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
362 archive_entry_acl_clear(ae);
363
364 /* 4. Read POSIX.1e access and default ACLs from text (short form) */
365 assertEqualInt(ARCHIVE_OK,
366 archive_entry_acl_from_text(ae, acltext[2],
367 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
368 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
368 assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
369 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
370 assertEqualInt(11, archive_entry_acl_reset(ae,
371 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
372 archive_entry_acl_clear(ae);
373
374 free(ws);
375 ws = convert_s_to_ws(acltext[2]);
376 assertEqualInt(ARCHIVE_OK,
377 archive_entry_acl_from_text_w(ae, ws,
378 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
369 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
370 assertEqualInt(11, archive_entry_acl_reset(ae,
371 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
372 archive_entry_acl_clear(ae);
373
374 free(ws);
375 ws = convert_s_to_ws(acltext[2]);
376 assertEqualInt(ARCHIVE_OK,
377 archive_entry_acl_from_text_w(ae, ws,
378 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
379 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
379 assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
380 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
381 assertEqualInt(11, archive_entry_acl_reset(ae,
382 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
383 archive_entry_acl_clear(ae);
384
385 /* 5. Read NFSv4 ACLs from text */
386 assertEqualInt(ARCHIVE_OK,
387 archive_entry_acl_from_text(ae, acltext[10],
388 ARCHIVE_ENTRY_ACL_TYPE_NFS4));
380 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
381 assertEqualInt(11, archive_entry_acl_reset(ae,
382 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
383 archive_entry_acl_clear(ae);
384
385 /* 5. Read NFSv4 ACLs from text */
386 assertEqualInt(ARCHIVE_OK,
387 archive_entry_acl_from_text(ae, acltext[10],
388 ARCHIVE_ENTRY_ACL_TYPE_NFS4));
389 archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
389 assertEntryCompareAcls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
390 ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
391 assertEqualInt(6, archive_entry_acl_reset(ae,
392 ARCHIVE_ENTRY_ACL_TYPE_NFS4));
393 archive_entry_acl_clear(ae);
394
395 free(ws);
396 ws = convert_s_to_ws(acltext[10]);
397
398 assertEqualInt(ARCHIVE_OK,
399 archive_entry_acl_from_text_w(ae, ws,
400 ARCHIVE_ENTRY_ACL_TYPE_NFS4));
390 ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
391 assertEqualInt(6, archive_entry_acl_reset(ae,
392 ARCHIVE_ENTRY_ACL_TYPE_NFS4));
393 archive_entry_acl_clear(ae);
394
395 free(ws);
396 ws = convert_s_to_ws(acltext[10]);
397
398 assertEqualInt(ARCHIVE_OK,
399 archive_entry_acl_from_text_w(ae, ws,
400 ARCHIVE_ENTRY_ACL_TYPE_NFS4));
401 archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
401 assertEntryCompareAcls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
402 ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
403 assertEqualInt(6, archive_entry_acl_reset(ae,
404 ARCHIVE_ENTRY_ACL_TYPE_NFS4));
405 archive_entry_acl_clear(ae);
406
407 free(ws);
408 archive_entry_free(ae);
409}
410
411DEFINE_TEST(test_acl_to_text)
412{
413 struct archive_entry *ae;
414
415 /* Create an empty archive_entry. */
416 assert((ae = archive_entry_new()) != NULL);
417
418 /* Write POSIX.1e ACLs */
402 ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
403 assertEqualInt(6, archive_entry_acl_reset(ae,
404 ARCHIVE_ENTRY_ACL_TYPE_NFS4));
405 archive_entry_acl_clear(ae);
406
407 free(ws);
408 archive_entry_free(ae);
409}
410
411DEFINE_TEST(test_acl_to_text)
412{
413 struct archive_entry *ae;
414
415 /* Create an empty archive_entry. */
416 assert((ae = archive_entry_new()) != NULL);
417
418 /* Write POSIX.1e ACLs */
419 archive_test_set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
419 assertEntrySetAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
420
421 /* No flags should give output like getfacl(1) on linux */
422 compare_acl_text(ae, 0, acltext[0]);
423
424 /* This should give the same output as previous test */
425 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
426 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, acltext[0]);
427

--- 24 unchanged lines hidden (view full) ---

452 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
453 ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[7]);
454
455 /* POSIX.1e default acls prefixed with default: */
456 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
457 ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT, acltext[8]);
458
459 /* Write NFSv4 ACLs */
420
421 /* No flags should give output like getfacl(1) on linux */
422 compare_acl_text(ae, 0, acltext[0]);
423
424 /* This should give the same output as previous test */
425 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
426 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, acltext[0]);
427

--- 24 unchanged lines hidden (view full) ---

452 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
453 ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[7]);
454
455 /* POSIX.1e default acls prefixed with default: */
456 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
457 ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT, acltext[8]);
458
459 /* Write NFSv4 ACLs */
460 archive_test_set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
460 assertEntrySetAcls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
461
462 /* NFSv4 ACLs like getfacl(1) on FreeBSD */
463 compare_acl_text(ae, 0, acltext[9]);
464
465 /* NFSv4 ACLs like "getfacl -i" on FreeBSD */
466 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[10]);
467
468 /* NFSv4 ACLs like "getfacl -i" on FreeBSD with stripped minus chars */
469 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID |
470 ARCHIVE_ENTRY_ACL_STYLE_COMPACT, acltext[11]);
471
472 archive_entry_free(ae);
473}
461
462 /* NFSv4 ACLs like getfacl(1) on FreeBSD */
463 compare_acl_text(ae, 0, acltext[9]);
464
465 /* NFSv4 ACLs like "getfacl -i" on FreeBSD */
466 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[10]);
467
468 /* NFSv4 ACLs like "getfacl -i" on FreeBSD with stripped minus chars */
469 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID |
470 ARCHIVE_ENTRY_ACL_STYLE_COMPACT, acltext[11]);
471
472 archive_entry_free(ae);
473}