1caf54c4fSMartin Matuska /*- 2caf54c4fSMartin Matuska * Copyright (c) 2003-2007 Tim Kientzle 3caf54c4fSMartin Matuska * All rights reserved. 4caf54c4fSMartin Matuska * 5caf54c4fSMartin Matuska * Redistribution and use in source and binary forms, with or without 6caf54c4fSMartin Matuska * modification, are permitted provided that the following conditions 7caf54c4fSMartin Matuska * are met: 8caf54c4fSMartin Matuska * 1. Redistributions of source code must retain the above copyright 9caf54c4fSMartin Matuska * notice, this list of conditions and the following disclaimer. 10caf54c4fSMartin Matuska * 2. Redistributions in binary form must reproduce the above copyright 11caf54c4fSMartin Matuska * notice, this list of conditions and the following disclaimer in the 12caf54c4fSMartin Matuska * documentation and/or other materials provided with the distribution. 13caf54c4fSMartin Matuska * 14caf54c4fSMartin Matuska * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 15caf54c4fSMartin Matuska * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16caf54c4fSMartin Matuska * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17caf54c4fSMartin Matuska * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 18caf54c4fSMartin Matuska * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19caf54c4fSMartin Matuska * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20caf54c4fSMartin Matuska * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21caf54c4fSMartin Matuska * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22caf54c4fSMartin Matuska * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23caf54c4fSMartin Matuska * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24caf54c4fSMartin Matuska */ 25caf54c4fSMartin Matuska #include "test.h" 26caf54c4fSMartin Matuska __FBSDID("$FreeBSD: head/lib/libarchive/test/test_acl_pax.c 201247 2009-12-30 05:59:21Z kientzle $"); 27caf54c4fSMartin Matuska 28caf54c4fSMartin Matuska /* 29caf54c4fSMartin Matuska * Exercise the system-independent portion of the ACL support. 30caf54c4fSMartin Matuska * Check that pax archive can save and restore ACL data. 31caf54c4fSMartin Matuska * 32caf54c4fSMartin Matuska * This should work on all systems, regardless of whether local 33caf54c4fSMartin Matuska * filesystems support ACLs or not. 34caf54c4fSMartin Matuska */ 35caf54c4fSMartin Matuska 36caf54c4fSMartin Matuska static unsigned char buff[16384]; 37caf54c4fSMartin Matuska 38caf54c4fSMartin Matuska static unsigned char reference[] = { 39caf54c4fSMartin Matuska 'P','a','x','H','e','a','d','e','r','/','f','i','l','e',0,0,0,0,0,0,0,0,0, 40caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 41caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 42caf54c4fSMartin Matuska 0,0,0,'0','0','0','1','4','2',' ',0,'0','0','0','0','0','0',' ',0,'0','0', 43caf54c4fSMartin Matuska '0','0','0','0',' ',0,'0','0','0','0','0','0','0','0','0','6','2',' ','0', 44caf54c4fSMartin Matuska '0','0','0','0','0','0','0','0','0','0',' ','0','1','1','7','6','7',0,' ', 45caf54c4fSMartin Matuska 'x',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 46caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 47caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t','a','r', 48caf54c4fSMartin Matuska 0,'0','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 49caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'0','0','0', 50caf54c4fSMartin Matuska '0','0','0',' ',0,'0','0','0','0','0','0',' ',0,0,0,0,0,0,0,0,0,0,0,0,0,0, 51caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 52caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 53caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 54caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 55caf54c4fSMartin Matuska 0,0,0,0,0,0,'1','6',' ','S','C','H','I','L','Y','.','d','e','v','=','0',10, 56caf54c4fSMartin Matuska '1','6',' ','S','C','H','I','L','Y','.','i','n','o','=','0',10,'1','8',' ', 57caf54c4fSMartin Matuska 'S','C','H','I','L','Y','.','n','l','i','n','k','=','0',10,0,0,0,0,0,0,0, 58caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 59caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 60caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 61caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 62caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 63caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 64caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 65caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 66caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 67caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 68caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 69caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 70caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,'f','i','l','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 71caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 72caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 73caf54c4fSMartin Matuska 0,0,0,0,'0','0','0','1','4','2',' ',0,'0','0','0','0','0','0',' ',0,'0','0', 74caf54c4fSMartin Matuska '0','0','0','0',' ',0,'0','0','0','0','0','0','0','0','0','0','0',' ','0', 75caf54c4fSMartin Matuska '0','0','0','0','0','0','0','0','0','0',' ','0','1','0','0','0','6',0,' ', 76caf54c4fSMartin Matuska '0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 77caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 78caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t','a','r', 79caf54c4fSMartin Matuska 0,'0','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 80caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'0','0','0', 81caf54c4fSMartin Matuska '0','0','0',' ',0,'0','0','0','0','0','0',' ',0,0,0,0,0,0,0,0,0,0,0,0,0,0, 82caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 83caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 84caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 85caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 86caf54c4fSMartin Matuska 0,0,0,0,0,0,'P','a','x','H','e','a','d','e','r','/','f','i','l','e',0,0,0, 87caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 88caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 89caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,'0','0','0','1','4','2',' ',0,'0','0','0','0','0','0',' ', 90caf54c4fSMartin Matuska 0,'0','0','0','0','0','0',' ',0,'0','0','0','0','0','0','0','0','1','7','2', 91caf54c4fSMartin Matuska ' ','0','0','0','0','0','0','0','0','0','0','0',' ','0','1','1','7','7','1', 92caf54c4fSMartin Matuska 0,' ','x',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 93caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 94caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t', 95caf54c4fSMartin Matuska 'a','r',0,'0','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 96caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'0', 97caf54c4fSMartin Matuska '0','0','0','0','0',' ',0,'0','0','0','0','0','0',' ',0,0,0,0,0,0,0,0,0,0, 98caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 99caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 100caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 101caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 102caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,'7','2',' ','S','C','H','I','L','Y','.','a','c','l','.', 103caf54c4fSMartin Matuska 'a','c','c','e','s','s','=','u','s','e','r',':',':','-','-','x',',','g','r', 104caf54c4fSMartin Matuska 'o','u','p',':',':','r','-','-',',','o','t','h','e','r',':',':','-','w','-', 105caf54c4fSMartin Matuska ',','u','s','e','r',':','u','s','e','r','7','7',':','r','-','-',':','7','7', 106caf54c4fSMartin Matuska 10,'1','6',' ','S','C','H','I','L','Y','.','d','e','v','=','0',10,'1','6', 107caf54c4fSMartin Matuska ' ','S','C','H','I','L','Y','.','i','n','o','=','0',10,'1','8',' ','S','C', 108caf54c4fSMartin Matuska 'H','I','L','Y','.','n','l','i','n','k','=','0',10,0,0,0,0,0,0,0,0,0,0,0, 109caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 110caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 111caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 112caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 113caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 114caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 115caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 116caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 117caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 118caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 119caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,'f','i','l','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 120caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 121caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 122caf54c4fSMartin Matuska 0,0,'0','0','0','1','4','2',' ',0,'0','0','0','0','0','0',' ',0,'0','0','0', 123caf54c4fSMartin Matuska '0','0','0',' ',0,'0','0','0','0','0','0','0','0','0','0','0',' ','0','0', 124caf54c4fSMartin Matuska '0','0','0','0','0','0','0','0','0',' ','0','1','0','0','0','6',0,' ','0', 125caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 126caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 127caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t','a','r',0, 128caf54c4fSMartin Matuska '0','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 129caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'0','0','0', 130caf54c4fSMartin Matuska '0','0','0',' ',0,'0','0','0','0','0','0',' ',0,0,0,0,0,0,0,0,0,0,0,0,0,0, 131caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 132caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 133caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 134caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 135caf54c4fSMartin Matuska 0,0,0,0,0,0,'P','a','x','H','e','a','d','e','r','/','f','i','l','e',0,0,0, 136caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 137caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 138caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,'0','0','0','5','4','3',' ',0,'0','0','0','0','0','0',' ', 139caf54c4fSMartin Matuska 0,'0','0','0','0','0','0',' ',0,'0','0','0','0','0','0','0','0','2','4','3', 140caf54c4fSMartin Matuska ' ','0','0','0','0','0','0','0','0','0','0','0',' ','0','1','1','7','7','5', 141caf54c4fSMartin Matuska 0,' ','x',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 142caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 143caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t', 144caf54c4fSMartin Matuska 'a','r',0,'0','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 145caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'0', 146caf54c4fSMartin Matuska '0','0','0','0','0',' ',0,'0','0','0','0','0','0',' ',0,0,0,0,0,0,0,0,0,0, 147caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 148caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 149caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 150caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 151caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,'1','1','3',' ','S','C','H','I','L','Y','.','a','c','l', 152caf54c4fSMartin Matuska '.','a','c','c','e','s','s','=','u','s','e','r',':',':','r','-','x',',','g', 153caf54c4fSMartin Matuska 'r','o','u','p',':',':','r','-','-',',','o','t','h','e','r',':',':','-','w', 154caf54c4fSMartin Matuska 'x',',','u','s','e','r',':','u','s','e','r','7','7',':','r','-','-',':','7', 155caf54c4fSMartin Matuska '7',',','u','s','e','r',':','u','s','e','r','7','8',':','-','-','-',':','7', 156caf54c4fSMartin Matuska '8',',','g','r','o','u','p',':','g','r','o','u','p','7','8',':','r','w','x', 157caf54c4fSMartin Matuska ':','7','8',10,'1','6',' ','S','C','H','I','L','Y','.','d','e','v','=','0', 158caf54c4fSMartin Matuska 10,'1','6',' ','S','C','H','I','L','Y','.','i','n','o','=','0',10,'1','8', 159caf54c4fSMartin Matuska ' ','S','C','H','I','L','Y','.','n','l','i','n','k','=','0',10,0,0,0,0,0, 160caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 161caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 162caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 163caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 164caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 165caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 166caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 167caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 168caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 169caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,'f','i','l','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 170caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 171caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 172caf54c4fSMartin Matuska 0,0,0,0,'0','0','0','5','4','3',' ',0,'0','0','0','0','0','0',' ',0,'0','0', 173caf54c4fSMartin Matuska '0','0','0','0',' ',0,'0','0','0','0','0','0','0','0','0','0','0',' ','0', 174caf54c4fSMartin Matuska '0','0','0','0','0','0','0','0','0','0',' ','0','1','0','0','1','3',0,' ', 175caf54c4fSMartin Matuska '0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 176caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 177caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t','a','r', 178caf54c4fSMartin Matuska 0,'0','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 179caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'0','0','0', 180caf54c4fSMartin Matuska '0','0','0',' ',0,'0','0','0','0','0','0',' ',0,0,0,0,0,0,0,0,0,0,0,0,0,0, 181caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 182caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 183caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 184caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 185caf54c4fSMartin Matuska 0,0,0,0,0,0,'P','a','x','H','e','a','d','e','r','/','f','i','l','e',0,0,0, 186caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 187caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 188caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,'0','0','0','1','4','2',' ',0,'0','0','0','0','0','0',' ', 189caf54c4fSMartin Matuska 0,'0','0','0','0','0','0',' ',0,'0','0','0','0','0','0','0','0','0','6','2', 190caf54c4fSMartin Matuska ' ','0','0','0','0','0','0','0','0','0','0','0',' ','0','1','1','7','6','7', 191caf54c4fSMartin Matuska 0,' ','x',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 192caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 193caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t', 194caf54c4fSMartin Matuska 'a','r',0,'0','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 195caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'0', 196caf54c4fSMartin Matuska '0','0','0','0','0',' ',0,'0','0','0','0','0','0',' ',0,0,0,0,0,0,0,0,0,0, 197caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 198caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 199caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 200caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 201caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,'1','6',' ','S','C','H','I','L','Y','.','d','e','v','=', 202caf54c4fSMartin Matuska '0',10,'1','6',' ','S','C','H','I','L','Y','.','i','n','o','=','0',10,'1', 203caf54c4fSMartin Matuska '8',' ','S','C','H','I','L','Y','.','n','l','i','n','k','=','0',10,0,0,0, 204caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 205caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 206caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 207caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 208caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 209caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 210caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 211caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 212caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 213caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 214caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 215caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 216caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'f','i','l','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0, 217caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 218caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 219caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,'0','0','0','1','4','2',' ',0,'0','0','0','0','0','0',' ', 220caf54c4fSMartin Matuska 0,'0','0','0','0','0','0',' ',0,'0','0','0','0','0','0','0','0','0','0','0', 221caf54c4fSMartin Matuska ' ','0','0','0','0','0','0','0','0','0','0','0',' ','0','1','0','0','0','6', 222caf54c4fSMartin Matuska 0,' ','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 223caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 224caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'u','s','t', 225caf54c4fSMartin Matuska 'a','r',0,'0','0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 226caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'0', 227caf54c4fSMartin Matuska '0','0','0','0','0',' ',0,'0','0','0','0','0','0',' ',0,0,0,0,0,0,0,0,0,0, 228caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 229caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 230caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 231caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 232caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 233caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 234caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 235caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 236caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 237caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 238caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 239caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 240caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 241caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 242caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 243caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 244caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 245caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 246caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 247caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 248caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 249caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 250caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 251caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 252caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 253caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 254caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 255caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 256caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 257caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 258caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 259caf54c4fSMartin Matuska 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 260caf54c4fSMartin Matuska 261caf54c4fSMartin Matuska 262caf54c4fSMartin Matuska struct acl_t { 263caf54c4fSMartin Matuska int type; /* Type of ACL: "access" or "default" */ 264caf54c4fSMartin Matuska int permset; /* Permissions for this class of users. */ 265caf54c4fSMartin Matuska int tag; /* Owner, User, Owning group, group, other, etc. */ 266caf54c4fSMartin Matuska int qual; /* GID or UID of user/group, depending on tag. */ 267caf54c4fSMartin Matuska const char *name; /* Name of user/group, depending on tag. */ 268caf54c4fSMartin Matuska }; 269caf54c4fSMartin Matuska 270caf54c4fSMartin Matuska static struct acl_t acls0[] = { 271caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE, 272caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" }, 273caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ, 274caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" }, 275caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_WRITE, 276caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_OTHER, 0, "" }, 277caf54c4fSMartin Matuska }; 278caf54c4fSMartin Matuska 279caf54c4fSMartin Matuska static struct acl_t acls1[] = { 280caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE, 281caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" }, 282caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ, 283caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_USER, 77, "user77" }, 284caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ, 285caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" }, 286caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_WRITE, 287caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_OTHER, -1, "" }, 288caf54c4fSMartin Matuska }; 289caf54c4fSMartin Matuska 290caf54c4fSMartin Matuska static struct acl_t acls2[] = { 291caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE | ARCHIVE_ENTRY_ACL_READ, 292caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" }, 293caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ, 294caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_USER, 77, "user77" }, 295caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0, 296caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_USER, 78, "user78" }, 297caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ, 298caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" }, 299caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0007, 300caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" }, 301caf54c4fSMartin Matuska { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_EXECUTE, 302caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_OTHER, -1, "" }, 303caf54c4fSMartin Matuska }; 304caf54c4fSMartin Matuska 305caf54c4fSMartin Matuska static void 306caf54c4fSMartin Matuska set_acls(struct archive_entry *ae, struct acl_t *acls, int n) 307caf54c4fSMartin Matuska { 308caf54c4fSMartin Matuska int i; 309caf54c4fSMartin Matuska 310caf54c4fSMartin Matuska archive_entry_acl_clear(ae); 311caf54c4fSMartin Matuska for (i = 0; i < n; i++) { 312caf54c4fSMartin Matuska archive_entry_acl_add_entry(ae, 313caf54c4fSMartin Matuska acls[i].type, acls[i].permset, acls[i].tag, acls[i].qual, 314caf54c4fSMartin Matuska acls[i].name); 315caf54c4fSMartin Matuska } 316caf54c4fSMartin Matuska } 317caf54c4fSMartin Matuska 318caf54c4fSMartin Matuska static int 319caf54c4fSMartin Matuska acl_match(struct acl_t *acl, int type, int permset, int tag, int qual, const char *name) 320caf54c4fSMartin Matuska { 321caf54c4fSMartin Matuska if (type != acl->type) 322caf54c4fSMartin Matuska return (0); 323caf54c4fSMartin Matuska if (permset != acl->permset) 324caf54c4fSMartin Matuska return (0); 325caf54c4fSMartin Matuska if (tag != acl->tag) 326caf54c4fSMartin Matuska return (0); 327caf54c4fSMartin Matuska if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ) 328caf54c4fSMartin Matuska return (1); 329caf54c4fSMartin Matuska if (tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ) 330caf54c4fSMartin Matuska return (1); 331caf54c4fSMartin Matuska if (tag == ARCHIVE_ENTRY_ACL_OTHER) 332caf54c4fSMartin Matuska return (1); 333caf54c4fSMartin Matuska if (qual != acl->qual) 334caf54c4fSMartin Matuska return (0); 335caf54c4fSMartin Matuska if (name == NULL) 336caf54c4fSMartin Matuska return (acl->name == NULL || acl->name[0] == '\0'); 337caf54c4fSMartin Matuska if (acl->name == NULL) 338caf54c4fSMartin Matuska return (name == NULL || name[0] == '\0'); 339caf54c4fSMartin Matuska return (0 == strcmp(name, acl->name)); 340caf54c4fSMartin Matuska } 341caf54c4fSMartin Matuska 342caf54c4fSMartin Matuska static void 343caf54c4fSMartin Matuska compare_acls(struct archive_entry *ae, struct acl_t *acls, int n, int mode) 344caf54c4fSMartin Matuska { 345caf54c4fSMartin Matuska int *marker = malloc(sizeof(marker[0]) * n); 346caf54c4fSMartin Matuska int i; 347caf54c4fSMartin Matuska int r; 348caf54c4fSMartin Matuska int type, permset, tag, qual; 349caf54c4fSMartin Matuska int matched; 350caf54c4fSMartin Matuska const char *name; 351caf54c4fSMartin Matuska 352caf54c4fSMartin Matuska for (i = 0; i < n; i++) 353caf54c4fSMartin Matuska marker[i] = i; 354caf54c4fSMartin Matuska 355caf54c4fSMartin Matuska while (0 == (r = archive_entry_acl_next(ae, 356caf54c4fSMartin Matuska ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 357caf54c4fSMartin Matuska &type, &permset, &tag, &qual, &name))) { 358caf54c4fSMartin Matuska for (i = 0, matched = 0; i < n && !matched; i++) { 359caf54c4fSMartin Matuska if (acl_match(&acls[marker[i]], type, permset, 360caf54c4fSMartin Matuska tag, qual, name)) { 361caf54c4fSMartin Matuska /* We found a match; remove it. */ 362caf54c4fSMartin Matuska marker[i] = marker[n - 1]; 363caf54c4fSMartin Matuska n--; 364caf54c4fSMartin Matuska matched = 1; 365caf54c4fSMartin Matuska } 366caf54c4fSMartin Matuska } 367caf54c4fSMartin Matuska if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ) { 368caf54c4fSMartin Matuska if (!matched) printf("No match for user_obj perm\n"); 369caf54c4fSMartin Matuska failure("USER_OBJ permset (%02o) != user mode (%02o)", 370caf54c4fSMartin Matuska permset, 07 & (mode >> 6)); 371caf54c4fSMartin Matuska assert((permset << 6) == (mode & 0700)); 372caf54c4fSMartin Matuska } else if (tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ) { 373caf54c4fSMartin Matuska if (!matched) printf("No match for group_obj perm\n"); 374caf54c4fSMartin Matuska failure("GROUP_OBJ permset %02o != group mode %02o", 375caf54c4fSMartin Matuska permset, 07 & (mode >> 3)); 376caf54c4fSMartin Matuska assert((permset << 3) == (mode & 0070)); 377caf54c4fSMartin Matuska } else if (tag == ARCHIVE_ENTRY_ACL_OTHER) { 378caf54c4fSMartin Matuska if (!matched) printf("No match for other perm\n"); 379caf54c4fSMartin Matuska failure("OTHER permset (%02o) != other mode (%02o)", 380caf54c4fSMartin Matuska permset, mode & 07); 381caf54c4fSMartin Matuska assert((permset << 0) == (mode & 0007)); 382caf54c4fSMartin Matuska } else { 383caf54c4fSMartin Matuska failure("Could not find match for ACL " 384caf54c4fSMartin Matuska "(type=%d,permset=%d,tag=%d,qual=%d,name=``%s'')", 385caf54c4fSMartin Matuska type, permset, tag, qual, name); 386caf54c4fSMartin Matuska assert(matched == 1); 387caf54c4fSMartin Matuska } 388caf54c4fSMartin Matuska } 389caf54c4fSMartin Matuska #if ARCHIVE_VERSION_NUMBER < 1009000 390caf54c4fSMartin Matuska /* Known broken before 1.9.0. */ 391caf54c4fSMartin Matuska skipping("archive_entry_acl_next() exits with ARCHIVE_EOF"); 392caf54c4fSMartin Matuska #else 393caf54c4fSMartin Matuska assertEqualInt(ARCHIVE_EOF, r); 394caf54c4fSMartin Matuska #endif 395caf54c4fSMartin Matuska assert((mode & 0777) == (archive_entry_mode(ae) & 0777)); 396caf54c4fSMartin Matuska failure("Could not find match for ACL " 397caf54c4fSMartin Matuska "(type=%d,permset=%d,tag=%d,qual=%d,name=``%s'')", 398caf54c4fSMartin Matuska acls[marker[0]].type, acls[marker[0]].permset, 399caf54c4fSMartin Matuska acls[marker[0]].tag, acls[marker[0]].qual, acls[marker[0]].name); 400caf54c4fSMartin Matuska assert(n == 0); /* Number of ACLs not matched should == 0 */ 401caf54c4fSMartin Matuska free(marker); 402caf54c4fSMartin Matuska } 403caf54c4fSMartin Matuska 404caf54c4fSMartin Matuska DEFINE_TEST(test_acl_pax) 405caf54c4fSMartin Matuska { 406caf54c4fSMartin Matuska struct archive *a; 407caf54c4fSMartin Matuska struct archive_entry *ae; 408caf54c4fSMartin Matuska size_t used; 409caf54c4fSMartin Matuska FILE *f; 410caf54c4fSMartin Matuska 411caf54c4fSMartin Matuska /* Write an archive to memory. */ 412caf54c4fSMartin Matuska assert(NULL != (a = archive_write_new())); 413caf54c4fSMartin Matuska assertA(0 == archive_write_set_format_pax(a)); 414caf54c4fSMartin Matuska assertA(0 == archive_write_set_compression_none(a)); 415caf54c4fSMartin Matuska assertA(0 == archive_write_set_bytes_per_block(a, 1)); 416caf54c4fSMartin Matuska assertA(0 == archive_write_set_bytes_in_last_block(a, 1)); 417caf54c4fSMartin Matuska assertA(0 == archive_write_open_memory(a, buff, sizeof(buff), &used)); 418caf54c4fSMartin Matuska 419caf54c4fSMartin Matuska /* Write a series of files to the archive with different ACL info. */ 420caf54c4fSMartin Matuska 421caf54c4fSMartin Matuska /* Create a simple archive_entry. */ 422caf54c4fSMartin Matuska assert((ae = archive_entry_new()) != NULL); 423caf54c4fSMartin Matuska archive_entry_set_pathname(ae, "file"); 424caf54c4fSMartin Matuska archive_entry_set_mode(ae, S_IFREG | 0777); 425caf54c4fSMartin Matuska 426caf54c4fSMartin Matuska /* Basic owner/owning group should just update mode bits. */ 427caf54c4fSMartin Matuska set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0])); 428caf54c4fSMartin Matuska assertA(0 == archive_write_header(a, ae)); 429caf54c4fSMartin Matuska 430caf54c4fSMartin Matuska /* With any extended ACL entry, we should read back a full set. */ 431caf54c4fSMartin Matuska set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0])); 432caf54c4fSMartin Matuska assertA(0 == archive_write_header(a, ae)); 433caf54c4fSMartin Matuska 434caf54c4fSMartin Matuska 435caf54c4fSMartin Matuska /* A more extensive set of ACLs. */ 436caf54c4fSMartin Matuska set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0])); 437caf54c4fSMartin Matuska assertA(0 == archive_write_header(a, ae)); 438caf54c4fSMartin Matuska 439caf54c4fSMartin Matuska /* 440caf54c4fSMartin Matuska * Check that clearing ACLs gets rid of them all by repeating 441caf54c4fSMartin Matuska * the first test. 442caf54c4fSMartin Matuska */ 443caf54c4fSMartin Matuska set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0])); 444caf54c4fSMartin Matuska assertA(0 == archive_write_header(a, ae)); 445caf54c4fSMartin Matuska archive_entry_free(ae); 446caf54c4fSMartin Matuska 447caf54c4fSMartin Matuska /* Close out the archive. */ 448caf54c4fSMartin Matuska assertA(0 == archive_write_close(a)); 449caf54c4fSMartin Matuska #if ARCHIVE_VERSION_NUMBER < 2000000 450caf54c4fSMartin Matuska archive_write_finish(a); 451caf54c4fSMartin Matuska #else 452caf54c4fSMartin Matuska assertA(0 == archive_write_finish(a)); 453caf54c4fSMartin Matuska #endif 454caf54c4fSMartin Matuska 455caf54c4fSMartin Matuska /* Write out the data we generated to a file for manual inspection. */ 456caf54c4fSMartin Matuska assert(NULL != (f = fopen("testout", "wb"))); 457caf54c4fSMartin Matuska assertEqualInt(used, (size_t)fwrite(buff, 1, (unsigned int)used, f)); 458caf54c4fSMartin Matuska fclose(f); 459caf54c4fSMartin Matuska 460caf54c4fSMartin Matuska /* Write out the reference data to a file for manual inspection. */ 461caf54c4fSMartin Matuska assert(NULL != (f = fopen("reference", "wb"))); 462caf54c4fSMartin Matuska assert(sizeof(reference) == fwrite(reference, 1, sizeof(reference), f)); 463caf54c4fSMartin Matuska fclose(f); 464caf54c4fSMartin Matuska 465caf54c4fSMartin Matuska /* Assert that the generated data matches the built-in reference data.*/ 466caf54c4fSMartin Matuska failure("Generated pax archive does not match reference; check 'testout' and 'reference' files."); 467caf54c4fSMartin Matuska assertEqualMem(buff, reference, sizeof(reference)); 468caf54c4fSMartin Matuska failure("Generated pax archive does not match reference; check 'testout' and 'reference' files."); 469caf54c4fSMartin Matuska assertEqualInt((int)used, sizeof(reference)); 470caf54c4fSMartin Matuska 471caf54c4fSMartin Matuska /* Read back each entry and check that the ACL data is right. */ 472caf54c4fSMartin Matuska assert(NULL != (a = archive_read_new())); 473caf54c4fSMartin Matuska assertA(0 == archive_read_support_format_all(a)); 474caf54c4fSMartin Matuska assertA(0 == archive_read_support_compression_all(a)); 475caf54c4fSMartin Matuska assertA(0 == archive_read_open_memory(a, buff, used)); 476caf54c4fSMartin Matuska 477caf54c4fSMartin Matuska /* First item has no ACLs */ 478caf54c4fSMartin Matuska assertA(0 == archive_read_next_header(a, &ae)); 479caf54c4fSMartin Matuska failure("Basic ACLs shouldn't be stored as extended ACLs"); 480caf54c4fSMartin Matuska assert(0 == archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); 481caf54c4fSMartin Matuska failure("Basic ACLs should set mode to 0142, not %04o", 482caf54c4fSMartin Matuska archive_entry_mode(ae)&0777); 483caf54c4fSMartin Matuska assert((archive_entry_mode(ae) & 0777) == 0142); 484caf54c4fSMartin Matuska 485caf54c4fSMartin Matuska /* Second item has a few ACLs */ 486caf54c4fSMartin Matuska assertA(0 == archive_read_next_header(a, &ae)); 487caf54c4fSMartin Matuska failure("One extended ACL should flag all ACLs to be returned."); 488caf54c4fSMartin Matuska assert(4 == archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); 489caf54c4fSMartin Matuska compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]), 0142); 490caf54c4fSMartin Matuska failure("Basic ACLs should set mode to 0142, not %04o", 491caf54c4fSMartin Matuska archive_entry_mode(ae)&0777); 492caf54c4fSMartin Matuska assert((archive_entry_mode(ae) & 0777) == 0142); 493caf54c4fSMartin Matuska 494caf54c4fSMartin Matuska /* Third item has pretty extensive ACLs */ 495caf54c4fSMartin Matuska assertA(0 == archive_read_next_header(a, &ae)); 496caf54c4fSMartin Matuska assertEqualInt(6, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); 497caf54c4fSMartin Matuska compare_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]), 0543); 498caf54c4fSMartin Matuska failure("Basic ACLs should set mode to 0543, not %04o", 499caf54c4fSMartin Matuska archive_entry_mode(ae)&0777); 500caf54c4fSMartin Matuska assert((archive_entry_mode(ae) & 0777) == 0543); 501caf54c4fSMartin Matuska 502caf54c4fSMartin Matuska /* Fourth item has no ACLs */ 503caf54c4fSMartin Matuska assertA(0 == archive_read_next_header(a, &ae)); 504caf54c4fSMartin Matuska failure("Basic ACLs shouldn't be stored as extended ACLs"); 505caf54c4fSMartin Matuska assert(0 == archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); 506caf54c4fSMartin Matuska failure("Basic ACLs should set mode to 0142, not %04o", 507caf54c4fSMartin Matuska archive_entry_mode(ae)&0777); 508caf54c4fSMartin Matuska assert((archive_entry_mode(ae) & 0777) == 0142); 509caf54c4fSMartin Matuska 510caf54c4fSMartin Matuska /* Close the archive. */ 511caf54c4fSMartin Matuska assertA(0 == archive_read_close(a)); 512caf54c4fSMartin Matuska #if ARCHIVE_VERSION_NUMBER < 2000000 513caf54c4fSMartin Matuska archive_read_finish(a); 514caf54c4fSMartin Matuska #else 515caf54c4fSMartin Matuska assertA(0 == archive_read_finish(a)); 516caf54c4fSMartin Matuska #endif 517caf54c4fSMartin Matuska } 518