test_acl_text.c revision 313571
11539Srgrimes/*- 21539Srgrimes * Copyright (c) 2016 Martin Matuska 31539Srgrimes * All rights reserved. 41539Srgrimes * 51539Srgrimes * Redistribution and use in source and binary forms, with or without 61539Srgrimes * modification, are permitted provided that the following conditions 71539Srgrimes * are met: 81539Srgrimes * 1. Redistributions of source code must retain the above copyright 91539Srgrimes * notice, this list of conditions and the following disclaimer. 101539Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 111539Srgrimes * notice, this list of conditions and the following disclaimer in the 121539Srgrimes * documentation and/or other materials provided with the distribution. 131539Srgrimes * 141539Srgrimes * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 151539Srgrimes * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 161539Srgrimes * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 171539Srgrimes * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 181539Srgrimes * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 191539Srgrimes * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 201539Srgrimes * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 211539Srgrimes * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 221539Srgrimes * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 231539Srgrimes * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 241539Srgrimes */ 251539Srgrimes#include "test.h" 261539Srgrimes__FBSDID("$FreeBSD: stable/10/contrib/libarchive/libarchive/test/test_acl_text.c 313571 2017-02-11 00:56:18Z mm $"); 271539Srgrimes 281539Srgrimes/* 291539Srgrimes * Test converting ACLs to text, both wide and non-wide 301539Srgrimes * 311539Srgrimes * This should work on all systems, regardless of whether local 321539Srgrimes * filesystems support ACLs or not. 331539Srgrimes */ 3469793Sobrien 351539Srgrimesstatic struct archive_test_acl_t acls0[] = { 361539Srgrimes { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 371539Srgrimes ARCHIVE_ENTRY_ACL_EXECUTE | 381539Srgrimes ARCHIVE_ENTRY_ACL_READ | 391539Srgrimes ARCHIVE_ENTRY_ACL_WRITE, 403041Swollman ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" }, 413041Swollman { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 421539Srgrimes ARCHIVE_ENTRY_ACL_EXECUTE | 431539Srgrimes ARCHIVE_ENTRY_ACL_READ, 441539Srgrimes ARCHIVE_ENTRY_ACL_USER, 100, "user100" }, 451539Srgrimes { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0, 461570Srgrimes ARCHIVE_ENTRY_ACL_USER, 1000, "user1000" }, 471539Srgrimes { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 4887136Srwatson ARCHIVE_ENTRY_ACL_EXECUTE | 491539Srgrimes ARCHIVE_ENTRY_ACL_READ, 5087135Srwatson ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" }, 5187135Srwatson { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 521539Srgrimes ARCHIVE_ENTRY_ACL_EXECUTE | 531539Srgrimes ARCHIVE_ENTRY_ACL_READ | 5473986Sobrien ARCHIVE_ENTRY_ACL_WRITE, 551539Srgrimes ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" }, 561539Srgrimes { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 5769793Sobrien ARCHIVE_ENTRY_ACL_READ | 581539Srgrimes ARCHIVE_ENTRY_ACL_EXECUTE, 593189Spst ARCHIVE_ENTRY_ACL_OTHER, -1, "" }, 601539Srgrimes { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 611539Srgrimes ARCHIVE_ENTRY_ACL_EXECUTE | 621539Srgrimes ARCHIVE_ENTRY_ACL_READ, 631539Srgrimes ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" }, 6442515Sasami { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 651539Srgrimes ARCHIVE_ENTRY_ACL_EXECUTE | 661539Srgrimes ARCHIVE_ENTRY_ACL_READ, 671539Srgrimes ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" }, 683041Swollman { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0, 691539Srgrimes ARCHIVE_ENTRY_ACL_OTHER, -1, "" }, 701539Srgrimes { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 711539Srgrimes ARCHIVE_ENTRY_ACL_EXECUTE | 721539Srgrimes ARCHIVE_ENTRY_ACL_READ, 731539Srgrimes ARCHIVE_ENTRY_ACL_USER, 101, "user101"}, 741539Srgrimes { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 751539Srgrimes ARCHIVE_ENTRY_ACL_EXECUTE, 761539Srgrimes ARCHIVE_ENTRY_ACL_GROUP, 79, "group79" }, 776083Swpaul}; 7810975Sache 791539Srgrimesstatic struct archive_test_acl_t acls1[] = { 803041Swollman { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, 813041Swollman ARCHIVE_ENTRY_ACL_READ_DATA | 8293032Simp ARCHIVE_ENTRY_ACL_WRITE_DATA | 833041Swollman ARCHIVE_ENTRY_ACL_APPEND_DATA | 843041Swollman ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES | 851539Srgrimes ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS | 86 ARCHIVE_ENTRY_ACL_READ_ACL | 87 ARCHIVE_ENTRY_ACL_WRITE_OWNER, 88 ARCHIVE_ENTRY_ACL_USER, 77, "user77" }, 89 { ARCHIVE_ENTRY_ACL_TYPE_DENY, 90 ARCHIVE_ENTRY_ACL_WRITE_DATA | 91 ARCHIVE_ENTRY_ACL_APPEND_DATA | 92 ARCHIVE_ENTRY_ACL_DELETE_CHILD | 93 ARCHIVE_ENTRY_ACL_DELETE | 94 ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT | 95 ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT | 96 ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY | 97 ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, 98 ARCHIVE_ENTRY_ACL_USER, 101, "user101" }, 99 { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, 100 ARCHIVE_ENTRY_ACL_READ_DATA | 101 ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES | 102 ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS | 103 ARCHIVE_ENTRY_ACL_READ_ACL | 104 ARCHIVE_ENTRY_ACL_ENTRY_INHERITED, 105 ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" }, 106 { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, 107 ARCHIVE_ENTRY_ACL_READ_DATA | 108 ARCHIVE_ENTRY_ACL_WRITE_DATA | 109 ARCHIVE_ENTRY_ACL_EXECUTE | 110 ARCHIVE_ENTRY_ACL_APPEND_DATA | 111 ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES | 112 ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES | 113 ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS | 114 ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS | 115 ARCHIVE_ENTRY_ACL_READ_ACL | 116 ARCHIVE_ENTRY_ACL_WRITE_ACL | 117 ARCHIVE_ENTRY_ACL_WRITE_OWNER, 118 ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" }, 119 { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, 120 ARCHIVE_ENTRY_ACL_READ_DATA | 121 ARCHIVE_ENTRY_ACL_WRITE_DATA | 122 ARCHIVE_ENTRY_ACL_APPEND_DATA | 123 ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES | 124 ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS | 125 ARCHIVE_ENTRY_ACL_READ_ACL, 126 ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" }, 127 { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, 128 ARCHIVE_ENTRY_ACL_READ_DATA | 129 ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES | 130 ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS | 131 ARCHIVE_ENTRY_ACL_READ_ACL | 132 ARCHIVE_ENTRY_ACL_SYNCHRONIZE, 133 ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" }, 134}; 135 136const char* acltext[] = { 137 "user::rwx\n" 138 "group::r-x\n" 139 "other::r-x\n" 140 "user:user100:r-x\n" 141 "user:user1000:---\n" 142 "group:group78:rwx\n" 143 "default:user::r-x\n" 144 "default:group::r-x\n" 145 "default:other::---\n" 146 "default:user:user101:r-x\n" 147 "default:group:group79:--x", 148 149 "user::rwx\n" 150 "group::r-x\n" 151 "other::r-x\n" 152 "user:user100:r-x:100\n" 153 "user:user1000:---:1000\n" 154 "group:group78:rwx:78\n" 155 "default:user::r-x\n" 156 "default:group::r-x\n" 157 "default:other::---\n" 158 "default:user:user101:r-x:101\n" 159 "default:group:group79:--x:79", 160 161 "u::rwx\n" 162 "g::r-x\n" 163 "o::r-x\n" 164 "u:user100:r-x:100\n" 165 "u:user1000:---:1000\n" 166 "g:group78:rwx:78\n" 167 "d:user::r-x\n" 168 "d:group::r-x\n" 169 "d:other::---\n" 170 "d:user:user101:r-x:101\n" 171 "d:group:group79:--x:79", 172 173 "user::rwx\n" 174 "group::r-x\n" 175 "other::r-x\n" 176 "user:user100:r-x\n" 177 "user:user1000:---\n" 178 "group:group78:rwx", 179 180 "user::rwx," 181 "group::r-x," 182 "other::r-x," 183 "user:user100:r-x," 184 "user:user1000:---," 185 "group:group78:rwx", 186 187 "user::rwx\n" 188 "group::r-x\n" 189 "other::r-x\n" 190 "user:user100:r-x:100\n" 191 "user:user1000:---:1000\n" 192 "group:group78:rwx:78", 193 194 "user::r-x\n" 195 "group::r-x\n" 196 "other::---\n" 197 "user:user101:r-x\n" 198 "group:group79:--x", 199 200 "user::r-x\n" 201 "group::r-x\n" 202 "other::---\n" 203 "user:user101:r-x:101\n" 204 "group:group79:--x:79", 205 206 "default:user::r-x\n" 207 "default:group::r-x\n" 208 "default:other::---\n" 209 "default:user:user101:r-x\n" 210 "default:group:group79:--x", 211 212 "user:user77:rw-p--a-R-c-o-:-------:allow\n" 213 "user:user101:-w-pdD--------:fdin---:deny\n" 214 "group:group78:r-----a-R-c---:------I:allow\n" 215 "owner@:rwxp--aARWcCo-:-------:allow\n" 216 "group@:rw-p--a-R-c---:-------:allow\n" 217 "everyone@:r-----a-R-c--s:-------:allow", 218 219 "user:user77:rw-p--a-R-c-o-:-------:allow:77\n" 220 "user:user101:-w-pdD--------:fdin---:deny:101\n" 221 "group:group78:r-----a-R-c---:------I:allow:78\n" 222 "owner@:rwxp--aARWcCo-:-------:allow\n" 223 "group@:rw-p--a-R-c---:-------:allow\n" 224 "everyone@:r-----a-R-c--s:-------:allow" 225}; 226 227static wchar_t * 228convert_s_to_ws(const char *s) 229{ 230 size_t len; 231 wchar_t *ws = NULL; 232 233 if (s != NULL) { 234 len = strlen(s) + 1; 235 ws = malloc(len * sizeof(wchar_t)); 236 assert(mbstowcs(ws, s, len) != (size_t)-1); 237 } 238 239 return (ws); 240} 241 242static void 243compare_acl_text(struct archive_entry *ae, int flags, const char *s) 244{ 245 char *text; 246 wchar_t *wtext; 247 wchar_t *ws; 248 ssize_t slen; 249 250 ws = convert_s_to_ws(s); 251 252 text = archive_entry_acl_to_text(ae, &slen, flags); 253 assertEqualString(text, s); 254 if (text != NULL) 255 assertEqualInt(strlen(text), slen); 256 wtext = archive_entry_acl_to_text_w(ae, &slen, flags); 257 assertEqualWString(wtext, ws); 258 if (wtext != NULL) { 259 assertEqualInt(wcslen(wtext), slen); 260 } 261 free(text); 262 free(wtext); 263 free(ws); 264} 265 266DEFINE_TEST(test_acl_from_text) 267{ 268 struct archive_entry *ae; 269 wchar_t *ws = NULL; 270 271 /* Create an empty archive_entry. */ 272 assert((ae = archive_entry_new()) != NULL); 273 274 /* 1a. Read POSIX.1e access ACLs from text */ 275 assertEqualInt(ARCHIVE_OK, 276 archive_entry_acl_from_text(ae, acltext[5], 277 ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); 278 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 279 ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0755); 280 assertEqualInt(6, archive_entry_acl_reset(ae, 281 ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); 282 283 /* 1b. Now read POSIX.1e default ACLs and append them */ 284 assertEqualInt(ARCHIVE_OK, 285 archive_entry_acl_from_text(ae, acltext[7], 286 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT)); 287 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 288 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755); 289 assertEqualInt(11, archive_entry_acl_reset(ae, 290 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)); 291 archive_entry_acl_clear(ae); 292 293 /* 1a and 1b with wide strings */ 294 ws = convert_s_to_ws(acltext[5]); 295 296 assertEqualInt(ARCHIVE_OK, 297 archive_entry_acl_from_text_w(ae, ws, 298 ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); 299 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 300 ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0755); 301 assertEqualInt(6, archive_entry_acl_reset(ae, 302 ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); 303 304 free(ws); 305 ws = convert_s_to_ws(acltext[7]); 306 307 assertEqualInt(ARCHIVE_OK, 308 archive_entry_acl_from_text_w(ae, ws, 309 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT)); 310 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 311 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755); 312 assertEqualInt(11, archive_entry_acl_reset(ae, 313 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)); 314 archive_entry_acl_clear(ae); 315 316 /* 2. Read POSIX.1e default ACLs from text */ 317 assertEqualInt(ARCHIVE_OK, 318 archive_entry_acl_from_text(ae, acltext[7], 319 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT)); 320 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 321 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0); 322 assertEqualInt(5, archive_entry_acl_reset(ae, 323 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT)); 324 archive_entry_acl_clear(ae); 325 326 /* ws is still acltext[7] */ 327 assertEqualInt(ARCHIVE_OK, 328 archive_entry_acl_from_text_w(ae, ws, 329 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT)); 330 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 331 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0); 332 assertEqualInt(5, archive_entry_acl_reset(ae, 333 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT)); 334 archive_entry_acl_clear(ae); 335 336 /* 3. Read POSIX.1e access and default ACLs from text */ 337 assertEqualInt(ARCHIVE_OK, 338 archive_entry_acl_from_text(ae, acltext[1], 339 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)); 340 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 341 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755); 342 assertEqualInt(11, archive_entry_acl_reset(ae, 343 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)); 344 archive_entry_acl_clear(ae); 345 346 free(ws); 347 ws = convert_s_to_ws(acltext[1]); 348 assertEqualInt(ARCHIVE_OK, 349 archive_entry_acl_from_text_w(ae, ws, 350 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)); 351 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 352 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755); 353 assertEqualInt(11, archive_entry_acl_reset(ae, 354 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)); 355 archive_entry_acl_clear(ae); 356 357 /* 4. Read POSIX.1e access and default ACLs from text (short form) */ 358 assertEqualInt(ARCHIVE_OK, 359 archive_entry_acl_from_text(ae, acltext[2], 360 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)); 361 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 362 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755); 363 assertEqualInt(11, archive_entry_acl_reset(ae, 364 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)); 365 archive_entry_acl_clear(ae); 366 367 free(ws); 368 ws = convert_s_to_ws(acltext[2]); 369 assertEqualInt(ARCHIVE_OK, 370 archive_entry_acl_from_text_w(ae, ws, 371 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)); 372 archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 373 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755); 374 assertEqualInt(11, archive_entry_acl_reset(ae, 375 ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)); 376 archive_entry_acl_clear(ae); 377 378 /* 5. Read NFSv4 ACLs from text */ 379 assertEqualInt(ARCHIVE_OK, 380 archive_entry_acl_from_text(ae, acltext[10], 381 ARCHIVE_ENTRY_ACL_TYPE_NFS4)); 382 archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]), 383 ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0); 384 assertEqualInt(6, archive_entry_acl_reset(ae, 385 ARCHIVE_ENTRY_ACL_TYPE_NFS4)); 386 archive_entry_acl_clear(ae); 387 388 free(ws); 389 ws = convert_s_to_ws(acltext[10]); 390 391 assertEqualInt(ARCHIVE_OK, 392 archive_entry_acl_from_text_w(ae, ws, 393 ARCHIVE_ENTRY_ACL_TYPE_NFS4)); 394 archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]), 395 ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0); 396 assertEqualInt(6, archive_entry_acl_reset(ae, 397 ARCHIVE_ENTRY_ACL_TYPE_NFS4)); 398 archive_entry_acl_clear(ae); 399 400 free(ws); 401 archive_entry_free(ae); 402} 403 404DEFINE_TEST(test_acl_to_text) 405{ 406 struct archive_entry *ae; 407 408 /* Create an empty archive_entry. */ 409 assert((ae = archive_entry_new()) != NULL); 410 411 /* Write POSIX.1e ACLs */ 412 archive_test_set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0])); 413 414 /* No flags should give output like getfacl(1) on linux */ 415 compare_acl_text(ae, 0, acltext[0]); 416 417 /* This should give the same output as previous test */ 418 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS | 419 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, acltext[0]); 420 421 /* This should give the same output as previous two tests */ 422 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS | 423 ARCHIVE_ENTRY_ACL_TYPE_DEFAULT | 424 ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT, acltext[0]); 425 426 /* POSIX.1e access and default ACLs with appended ID */ 427 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[1]); 428 429 /* POSIX.1e access acls only, like getfacl(1) on FreeBSD */ 430 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS, acltext[3]); 431 432 /* POSIX.1e access acls separated with comma */ 433 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS | 434 ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA, 435 acltext[4]); 436 437 /* POSIX.1e access acls with appended user or group ID */ 438 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS | 439 ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[5]); 440 441 /* POSIX.1e default acls */ 442 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, acltext[6]); 443 444 /* POSIX.1e default acls with appended user or group ID */ 445 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT | 446 ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[7]); 447 448 /* POSIX.1e default acls prefixed with default: */ 449 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT | 450 ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT, acltext[8]); 451 452 /* Write NFSv4 ACLs */ 453 archive_test_set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0])); 454 455 /* NFSv4 ACLs like getfacl(1) on FreeBSD */ 456 compare_acl_text(ae, 0, acltext[9]); 457 458 /* NFSv4 ACLs like "getfacl -i" on FreeBSD */ 459 compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[10]); 460 461 archive_entry_free(ae); 462} 463