|
Packit Service |
1d0348 |
/*-
|
|
Packit Service |
1d0348 |
* Copyright (c) 2016 Martin Matuska
|
|
Packit Service |
1d0348 |
* All rights reserved.
|
|
Packit Service |
1d0348 |
*
|
|
Packit Service |
1d0348 |
* Redistribution and use in source and binary forms, with or without
|
|
Packit Service |
1d0348 |
* modification, are permitted provided that the following conditions
|
|
Packit Service |
1d0348 |
* are met:
|
|
Packit Service |
1d0348 |
* 1. Redistributions of source code must retain the above copyright
|
|
Packit Service |
1d0348 |
* notice, this list of conditions and the following disclaimer.
|
|
Packit Service |
1d0348 |
* 2. Redistributions in binary form must reproduce the above copyright
|
|
Packit Service |
1d0348 |
* notice, this list of conditions and the following disclaimer in the
|
|
Packit Service |
1d0348 |
* documentation and/or other materials provided with the distribution.
|
|
Packit Service |
1d0348 |
*
|
|
Packit Service |
1d0348 |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
|
|
Packit Service |
1d0348 |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
Packit Service |
1d0348 |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
Packit Service |
1d0348 |
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
Packit Service |
1d0348 |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
Packit Service |
1d0348 |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
Packit Service |
1d0348 |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
Packit Service |
1d0348 |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
Packit Service |
1d0348 |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
Packit Service |
1d0348 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit Service |
1d0348 |
*/
|
|
Packit Service |
1d0348 |
#include "test.h"
|
|
Packit Service |
1d0348 |
__FBSDID("$FreeBSD$");
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/*
|
|
Packit Service |
1d0348 |
* Test converting ACLs to text, both wide and non-wide
|
|
Packit Service |
1d0348 |
*
|
|
Packit Service |
1d0348 |
* This should work on all systems, regardless of whether local
|
|
Packit Service |
1d0348 |
* filesystems support ACLs or not.
|
|
Packit Service |
1d0348 |
*/
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
static struct archive_test_acl_t acls0[] = {
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EXECUTE |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EXECUTE |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_USER, 100, "user100" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_USER, 1000, "user1000" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EXECUTE |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EXECUTE |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EXECUTE,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EXECUTE |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EXECUTE |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EXECUTE |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_USER, 101, "user101"},
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EXECUTE,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_GROUP, 79, "group79" },
|
|
Packit Service |
1d0348 |
};
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
static struct archive_test_acl_t acls1[] = {
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_APPEND_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_ACL |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE_OWNER,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_DENY,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_APPEND_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_DELETE_CHILD |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_DELETE |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_USER, 101, "user101" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_ACL |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_ENTRY_INHERITED,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EXECUTE |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_APPEND_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_ACL |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE_ACL |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE_OWNER,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_WRITE_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_APPEND_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_ACL,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" },
|
|
Packit Service |
1d0348 |
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_DATA |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_READ_ACL |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" },
|
|
Packit Service |
1d0348 |
};
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
const char* acltext[] = {
|
|
Packit Service |
1d0348 |
"user::rwx\n"
|
|
Packit Service |
1d0348 |
"group::r-x\n"
|
|
Packit Service |
1d0348 |
"other::r-x\n"
|
|
Packit Service |
1d0348 |
"user:user100:r-x\n"
|
|
Packit Service |
1d0348 |
"user:user1000:---\n"
|
|
Packit Service |
1d0348 |
"group:group78:rwx\n"
|
|
Packit Service |
1d0348 |
"default:user::r-x\n"
|
|
Packit Service |
1d0348 |
"default:group::r-x\n"
|
|
Packit Service |
1d0348 |
"default:other::---\n"
|
|
Packit Service |
1d0348 |
"default:user:user101:r-x\n"
|
|
Packit Service |
1d0348 |
"default:group:group79:--x",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"user::rwx\n"
|
|
Packit Service |
1d0348 |
"group::r-x\n"
|
|
Packit Service |
1d0348 |
"other::r-x\n"
|
|
Packit Service |
1d0348 |
"user:user100:r-x:100\n"
|
|
Packit Service |
1d0348 |
"user:user1000:---:1000\n"
|
|
Packit Service |
1d0348 |
"group:group78:rwx:78\n"
|
|
Packit Service |
1d0348 |
"default:user::r-x\n"
|
|
Packit Service |
1d0348 |
"default:group::r-x\n"
|
|
Packit Service |
1d0348 |
"default:other::---\n"
|
|
Packit Service |
1d0348 |
"default:user:user101:r-x:101\n"
|
|
Packit Service |
1d0348 |
"default:group:group79:--x:79",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"u::rwx\n"
|
|
Packit Service |
1d0348 |
"g::r-x\n"
|
|
Packit Service |
1d0348 |
"o::r-x\n"
|
|
Packit Service |
1d0348 |
"u:user100:r-x:100\n"
|
|
Packit Service |
1d0348 |
"u:user1000:---:1000\n"
|
|
Packit Service |
1d0348 |
"g:group78:rwx:78\n"
|
|
Packit Service |
1d0348 |
"d:user::r-x\n"
|
|
Packit Service |
1d0348 |
"d:group::r-x\n"
|
|
Packit Service |
1d0348 |
"d:other::---\n"
|
|
Packit Service |
1d0348 |
"d:user:user101:r-x:101\n"
|
|
Packit Service |
1d0348 |
"d:group:group79:--x:79",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"user::rwx\n"
|
|
Packit Service |
1d0348 |
"group::r-x\n"
|
|
Packit Service |
1d0348 |
"other::r-x\n"
|
|
Packit Service |
1d0348 |
"user:user100:r-x\n"
|
|
Packit Service |
1d0348 |
"user:user1000:---\n"
|
|
Packit Service |
1d0348 |
"group:group78:rwx",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"user::rwx,"
|
|
Packit Service |
1d0348 |
"group::r-x,"
|
|
Packit Service |
1d0348 |
"other::r-x,"
|
|
Packit Service |
1d0348 |
"user:user100:r-x,"
|
|
Packit Service |
1d0348 |
"user:user1000:---,"
|
|
Packit Service |
1d0348 |
"group:group78:rwx",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"user::rwx\n"
|
|
Packit Service |
1d0348 |
"group::r-x\n"
|
|
Packit Service |
1d0348 |
"other::r-x\n"
|
|
Packit Service |
1d0348 |
"user:user100:r-x:100\n"
|
|
Packit Service |
1d0348 |
"user:user1000:---:1000\n"
|
|
Packit Service |
1d0348 |
"group:group78:rwx:78",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"user::r-x\n"
|
|
Packit Service |
1d0348 |
"group::r-x\n"
|
|
Packit Service |
1d0348 |
"other::---\n"
|
|
Packit Service |
1d0348 |
"user:user101:r-x\n"
|
|
Packit Service |
1d0348 |
"group:group79:--x",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"user::r-x\n"
|
|
Packit Service |
1d0348 |
"group::r-x\n"
|
|
Packit Service |
1d0348 |
"other::---\n"
|
|
Packit Service |
1d0348 |
"user:user101:r-x:101\n"
|
|
Packit Service |
1d0348 |
"group:group79:--x:79",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"default:user::r-x\n"
|
|
Packit Service |
1d0348 |
"default:group::r-x\n"
|
|
Packit Service |
1d0348 |
"default:other::---\n"
|
|
Packit Service |
1d0348 |
"default:user:user101:r-x\n"
|
|
Packit Service |
1d0348 |
"default:group:group79:--x",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"user:user77:rw-p--a-R-c-o-:-------:allow\n"
|
|
Packit Service |
1d0348 |
"user:user101:-w-pdD--------:fdin---:deny\n"
|
|
Packit Service |
1d0348 |
"group:group78:r-----a-R-c---:------I:allow\n"
|
|
Packit Service |
1d0348 |
"owner@:rwxp--aARWcCo-:-------:allow\n"
|
|
Packit Service |
1d0348 |
"group@:rw-p--a-R-c---:-------:allow\n"
|
|
Packit Service |
1d0348 |
"everyone@:r-----a-R-c--s:-------:allow",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"user:user77:rw-p--a-R-c-o-:-------:allow:77\n"
|
|
Packit Service |
1d0348 |
"user:user101:-w-pdD--------:fdin---:deny:101\n"
|
|
Packit Service |
1d0348 |
"group:group78:r-----a-R-c---:------I:allow:78\n"
|
|
Packit Service |
1d0348 |
"owner@:rwxp--aARWcCo-:-------:allow\n"
|
|
Packit Service |
1d0348 |
"group@:rw-p--a-R-c---:-------:allow\n"
|
|
Packit Service |
1d0348 |
"everyone@:r-----a-R-c--s:-------:allow",
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"user:user77:rwpaRco::allow:77\n"
|
|
Packit Service |
1d0348 |
"user:user101:wpdD:fdin:deny:101\n"
|
|
Packit Service |
1d0348 |
"group:group78:raRc:I:allow:78\n"
|
|
Packit Service |
1d0348 |
"owner@:rwxpaARWcCo::allow\n"
|
|
Packit Service |
1d0348 |
"group@:rwpaRc::allow\n"
|
|
Packit Service |
1d0348 |
"everyone@:raRcs::allow"
|
|
Packit Service |
1d0348 |
};
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
static wchar_t *
|
|
Packit Service |
1d0348 |
convert_s_to_ws(const char *s)
|
|
Packit Service |
1d0348 |
{
|
|
Packit Service |
1d0348 |
size_t len;
|
|
Packit Service |
1d0348 |
wchar_t *ws = NULL;
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
if (s != NULL) {
|
|
Packit Service |
1d0348 |
len = strlen(s) + 1;
|
|
Packit Service |
1d0348 |
ws = malloc(len * sizeof(wchar_t));
|
|
Packit Service |
1d0348 |
assert(mbstowcs(ws, s, len) != (size_t)-1);
|
|
Packit Service |
1d0348 |
}
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
return (ws);
|
|
Packit Service |
1d0348 |
}
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
static void
|
|
Packit Service |
1d0348 |
compare_acl_text(struct archive_entry *ae, int flags, const char *s)
|
|
Packit Service |
1d0348 |
{
|
|
Packit Service |
1d0348 |
char *text;
|
|
Packit Service |
1d0348 |
wchar_t *wtext;
|
|
Packit Service |
1d0348 |
wchar_t *ws;
|
|
Packit Service |
1d0348 |
ssize_t slen;
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
ws = convert_s_to_ws(s);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
text = archive_entry_acl_to_text(ae, &slen, flags);
|
|
Packit Service |
1d0348 |
assertEqualString(text, s);
|
|
Packit Service |
1d0348 |
if (text != NULL)
|
|
Packit Service |
1d0348 |
assertEqualInt(strlen(text), slen);
|
|
Packit Service |
1d0348 |
wtext = archive_entry_acl_to_text_w(ae, &slen, flags);
|
|
Packit Service |
1d0348 |
assertEqualWString(wtext, ws);
|
|
Packit Service |
1d0348 |
if (wtext != NULL) {
|
|
Packit Service |
1d0348 |
assertEqualInt(wcslen(wtext), slen);
|
|
Packit Service |
1d0348 |
}
|
|
Packit Service |
1d0348 |
free(text);
|
|
Packit Service |
1d0348 |
free(wtext);
|
|
Packit Service |
1d0348 |
free(ws);
|
|
Packit Service |
1d0348 |
}
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
DEFINE_TEST(test_acl_from_text)
|
|
Packit Service |
1d0348 |
{
|
|
Packit Service |
1d0348 |
struct archive_entry *ae;
|
|
Packit Service |
1d0348 |
wchar_t *ws = NULL;
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* Create an empty archive_entry. */
|
|
Packit Service |
1d0348 |
assert((ae = archive_entry_new()) != NULL);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* 1a. Read POSIX.1e access ACLs from text */
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text(ae, acltext[5],
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0755);
|
|
Packit Service |
1d0348 |
assertEqualInt(6, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* 1b. Now read POSIX.1e default ACLs and append them */
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text(ae, acltext[7],
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
|
|
Packit Service |
1d0348 |
assertEqualInt(11, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
|
|
Packit Service |
1d0348 |
archive_entry_acl_clear(ae);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* 1a and 1b with wide strings */
|
|
Packit Service |
1d0348 |
ws = convert_s_to_ws(acltext[5]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text_w(ae, ws,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0755);
|
|
Packit Service |
1d0348 |
assertEqualInt(6, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
free(ws);
|
|
Packit Service |
1d0348 |
ws = convert_s_to_ws(acltext[7]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text_w(ae, ws,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
|
|
Packit Service |
1d0348 |
assertEqualInt(11, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
|
|
Packit Service |
1d0348 |
archive_entry_acl_clear(ae);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* 2. Read POSIX.1e default ACLs from text */
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text(ae, acltext[7],
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0);
|
|
Packit Service |
1d0348 |
assertEqualInt(5, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
|
|
Packit Service |
1d0348 |
archive_entry_acl_clear(ae);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* ws is still acltext[7] */
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text_w(ae, ws,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0);
|
|
Packit Service |
1d0348 |
assertEqualInt(5, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
|
|
Packit Service |
1d0348 |
archive_entry_acl_clear(ae);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* 3. Read POSIX.1e access and default ACLs from text */
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text(ae, acltext[1],
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
|
|
Packit Service |
1d0348 |
assertEqualInt(11, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
|
|
Packit Service |
1d0348 |
archive_entry_acl_clear(ae);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
free(ws);
|
|
Packit Service |
1d0348 |
ws = convert_s_to_ws(acltext[1]);
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text_w(ae, ws,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
|
|
Packit Service |
1d0348 |
assertEqualInt(11, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
|
|
Packit Service |
1d0348 |
archive_entry_acl_clear(ae);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* 4. Read POSIX.1e access and default ACLs from text (short form) */
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text(ae, acltext[2],
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
|
|
Packit Service |
1d0348 |
assertEqualInt(11, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
|
|
Packit Service |
1d0348 |
archive_entry_acl_clear(ae);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
free(ws);
|
|
Packit Service |
1d0348 |
ws = convert_s_to_ws(acltext[2]);
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text_w(ae, ws,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
|
|
Packit Service |
1d0348 |
assertEqualInt(11, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
|
|
Packit Service |
1d0348 |
archive_entry_acl_clear(ae);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* 5. Read NFSv4 ACLs from text */
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text(ae, acltext[10],
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_NFS4));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
|
|
Packit Service |
1d0348 |
assertEqualInt(6, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_NFS4));
|
|
Packit Service |
1d0348 |
archive_entry_acl_clear(ae);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
free(ws);
|
|
Packit Service |
1d0348 |
ws = convert_s_to_ws(acltext[10]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
assertEqualInt(ARCHIVE_OK,
|
|
Packit Service |
1d0348 |
archive_entry_acl_from_text_w(ae, ws,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_NFS4));
|
|
Packit Service |
1d0348 |
assertEntryCompareAcls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
|
|
Packit Service |
1d0348 |
assertEqualInt(6, archive_entry_acl_reset(ae,
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_NFS4));
|
|
Packit Service |
1d0348 |
archive_entry_acl_clear(ae);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
free(ws);
|
|
Packit Service |
1d0348 |
archive_entry_free(ae);
|
|
Packit Service |
1d0348 |
}
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
DEFINE_TEST(test_acl_to_text)
|
|
Packit Service |
1d0348 |
{
|
|
Packit Service |
1d0348 |
struct archive_entry *ae;
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* Create an empty archive_entry. */
|
|
Packit Service |
1d0348 |
assert((ae = archive_entry_new()) != NULL);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* Write POSIX.1e ACLs */
|
|
Packit Service |
1d0348 |
assertEntrySetAcls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* No flags should give output like getfacl(1) on linux */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, 0, acltext[0]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* This should give the same output as previous test */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, acltext[0]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* This should give the same output as previous two tests */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT, acltext[0]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* POSIX.1e access and default ACLs with appended ID */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[1]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* POSIX.1e access acls only, like getfacl(1) on FreeBSD */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS, acltext[3]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* POSIX.1e access acls separated with comma */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA,
|
|
Packit Service |
1d0348 |
acltext[4]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* POSIX.1e access acls with appended user or group ID */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[5]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* POSIX.1e default acls */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, acltext[6]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* POSIX.1e default acls with appended user or group ID */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[7]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* POSIX.1e default acls prefixed with default: */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT, acltext[8]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* Write NFSv4 ACLs */
|
|
Packit Service |
1d0348 |
assertEntrySetAcls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* NFSv4 ACLs like getfacl(1) on FreeBSD */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, 0, acltext[9]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* NFSv4 ACLs like "getfacl -i" on FreeBSD */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[10]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
/* NFSv4 ACLs like "getfacl -i" on FreeBSD with stripped minus chars */
|
|
Packit Service |
1d0348 |
compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID |
|
|
Packit Service |
1d0348 |
ARCHIVE_ENTRY_ACL_STYLE_COMPACT, acltext[11]);
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
archive_entry_free(ae);
|
|
Packit Service |
1d0348 |
}
|