5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks%{
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks/*
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * CDDL HEADER START
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks *
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * The contents of this file are subject to the terms of the
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks * Common Development and Distribution License (the "License").
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks * You may not use this file except in compliance with the License.
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks *
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * or http://www.opensolaris.org/os/licensing.
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * See the License for the specific language governing permissions
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * and limitations under the License.
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks *
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * When distributing Covered Code, include this CDDL HEADER in each
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * If applicable, add the following below this CDDL HEADER, with the
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * fields enclosed by brackets "[]" replaced with your own identifying
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * information: Portions Copyright [yyyy] [name of copyright owner]
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks *
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * CDDL HEADER END
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks *
b249c65cf0a7400e86a36ddab5c3fce085809859marks * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks * Use is subject to license terms.
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks */
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <acl_common.h>
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks#include <aclutils.h>
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksextern int yyinteractive;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksextern acl_t *yyacl;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks%}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks%union {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks char *str;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int val;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks struct acl_perm_type acl_perm;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks ace_t ace;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks aclent_t aclent;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks acl_t *acl;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
b249c65cf0a7400e86a36ddab5c3fce085809859marks%token USER_TOK USER_SID_TOK GROUP_TOK GROUP_SID_TOK MASK_TOK OTHER_TOK
b249c65cf0a7400e86a36ddab5c3fce085809859marks%token OWNERAT_TOK GROUPAT_TOK EVERYONEAT_TOK DEFAULT_USER_TOK
b249c65cf0a7400e86a36ddab5c3fce085809859marks%token DEFAULT_GROUP_TOK DEFAULT_MASK_TOK DEFAULT_OTHER_TOK
b249c65cf0a7400e86a36ddab5c3fce085809859marks%token COLON COMMA NL SLASH
5f41bf46ca5230bc3ee6b7d6a714a3a16a390261Mark Shellenbaum%token <str> ID IDNAME PERM_TOK INHERIT_TOK SID
5f41bf46ca5230bc3ee6b7d6a714a3a16a390261Mark Shellenbaum%token <val> ERROR ACE_PERM ACE_INHERIT ENTRY_TYPE ACCESS_TYPE
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5f41bf46ca5230bc3ee6b7d6a714a3a16a390261Mark Shellenbaum%type <str> idname id
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks%type <acl_perm> perms perm aclent_perm ace_perms
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks%type <acl> acl_entry
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks%type <ace> ace
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks%type <aclent> aclent
5f41bf46ca5230bc3ee6b7d6a714a3a16a390261Mark Shellenbaum%type <val> iflags verbose_iflag compact_iflag access_type entry_type
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks%left ERROR COLON
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks%%
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksacl: acl_entry NL
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks yyacl = $1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (0);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks /* This seems illegal, but the old aclfromtext() allows it */
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | acl_entry COMMA NL
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks yyacl = $1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (0);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | acl_entry COMMA acl
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks yyacl = $1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (0);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksacl_entry: ace
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks ace_t *acep;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (yyacl == NULL) {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks yyacl = acl_alloc(ACE_T);
ec965100f097e34cc456d3090f870440179928f7marks if (yyacl == NULL) {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_MEM_ERROR);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$ = yyacl;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if ($$->acl_type == ACLENT_T) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Cannot have POSIX draft ACL entries"
5b233e2d88c4da66fe52338394923e92c67f6d94marks " with NFSv4/ZFS ACL entries.\n"));
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks acl_free(yyacl);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks yyacl = NULL;
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_DIFF_TYPE);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$->acl_aclp = realloc($$->acl_aclp,
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks ($$->acl_entry_size * ($$->acl_cnt + 1)));
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if ($$->acl_aclp == NULL) {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks free (yyacl);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_MEM_ERROR);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks acep = $$->acl_aclp;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks acep[$$->acl_cnt] = $1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$->acl_cnt++;
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | aclent
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks aclent_t *aclent;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (yyacl == NULL) {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks yyacl = acl_alloc(ACLENT_T);
ec965100f097e34cc456d3090f870440179928f7marks if (yyacl == NULL) {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_MEM_ERROR);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$ = yyacl;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if ($$->acl_type == ACE_T) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Cannot have NFSv4/ZFS ACL entries"
5b233e2d88c4da66fe52338394923e92c67f6d94marks " with POSIX draft ACL entries.\n"));
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks acl_free(yyacl);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks yyacl = NULL;
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_DIFF_TYPE);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$->acl_aclp = realloc($$->acl_aclp,
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks ($$->acl_entry_size * ($$->acl_cnt +1)));
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if ($$->acl_aclp == NULL) {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks free (yyacl);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_MEM_ERROR);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks aclent = $$->acl_aclp;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks aclent[$$->acl_cnt] = $1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$->acl_cnt++;
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksace: entry_type idname ace_perms access_type
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
b249c65cf0a7400e86a36ddab5c3fce085809859marks uid_t id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int mask;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = get_id($1, $2, &id);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
b249c65cf0a7400e86a36ddab5c3fce085809859marks bad_entry_type($1, $2);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_INVALID_USER_GROUP);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_who = id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_flags = ace_entry_type($1);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = ace_perm_mask(&$3, &$$.a_access_mask);
ec965100f097e34cc456d3090f870440179928f7marks if (error) {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_type = $4;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type idname ace_perms access_type COLON id
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
b249c65cf0a7400e86a36ddab5c3fce085809859marks uid_t id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (yyinteractive) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Extra fields on the end of "
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks "ACL specification.\n"));
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_UNKNOWN_DATA);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = get_id($1, $2, &id);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5f41bf46ca5230bc3ee6b7d6a714a3a16a390261Mark Shellenbaum $$.a_who = get_id_nofail($1, $6);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks } else {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_who = id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_flags = ace_entry_type($1);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = ace_perm_mask(&$3, &$$.a_access_mask);
ec965100f097e34cc456d3090f870440179928f7marks if (error) {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_type = $4;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type idname ace_perms iflags access_type
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
b249c65cf0a7400e86a36ddab5c3fce085809859marks uid_t id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = get_id($1, $2, &id);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
b249c65cf0a7400e86a36ddab5c3fce085809859marks bad_entry_type($1, $2);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_INVALID_USER_GROUP);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_who = id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_flags = ace_entry_type($1);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = ace_perm_mask(&$3, &$$.a_access_mask);
ec965100f097e34cc456d3090f870440179928f7marks if (error) {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_type = $5;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_flags |= $4;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type idname ace_perms iflags access_type COLON id
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
b249c65cf0a7400e86a36ddab5c3fce085809859marks uid_t id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (yyinteractive) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Extra fields on the end of "
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks "ACL specification.\n"));
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_UNKNOWN_DATA);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = get_id($1, $2, &id);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5f41bf46ca5230bc3ee6b7d6a714a3a16a390261Mark Shellenbaum $$.a_who = get_id_nofail($1, $7);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks } else {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_who = id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_flags = ace_entry_type($1);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = ace_perm_mask(&$3, &$$.a_access_mask);
ec965100f097e34cc456d3090f870440179928f7marks if (error) {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_type = $5;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_flags |= $4;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type ace_perms access_type
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_who = -1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_flags = ace_entry_type($1);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = ace_perm_mask(&$2, &$$.a_access_mask);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_type = $3;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type ace_perms access_type COLON id
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (yyinteractive) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Extra fields on the end of "
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks "ACL specification.\n"));
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_UNKNOWN_DATA);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_ENTRY_ERROR);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type ace_perms iflags access_type
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_who = -1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_flags = ace_entry_type($1);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = ace_perm_mask(&$2, &$$.a_access_mask);
ec965100f097e34cc456d3090f870440179928f7marks if (error) {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_type = $4;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_flags |= $3;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type ace_perms iflags access_type COLON id
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (yyinteractive) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Extra fields on the end of "
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks "ACL specification.\n"));
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_UNKNOWN_DATA);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_ENTRY_ERROR);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksaclent: entry_type idname aclent_perm /* user or group */
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
b249c65cf0a7400e86a36ddab5c3fce085809859marks uid_t id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = get_id($1, $2, &id);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
b249c65cf0a7400e86a36ddab5c3fce085809859marks bad_entry_type($1, $2);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_INVALID_USER_GROUP);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = compute_aclent_perms($3.perm_str, &$$.a_perm);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks "Invalid permission(s) '%s' specified.\n"),
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $3.perm_str);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_id = id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = aclent_entry_type($1, 0, &$$.a_type);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks acl_error(
5b233e2d88c4da66fe52338394923e92c67f6d94marks dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Invalid ACL entry type '%s' specified.\n"), $1);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type COLON aclent_perm /* owner group other */
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = compute_aclent_perms($3.perm_str, &$$.a_perm);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks "Invalid permission(s) '%s' specified.\n"),
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $3.perm_str);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_id = -1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = aclent_entry_type($1, 1, &$$.a_type);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks acl_error(
5b233e2d88c4da66fe52338394923e92c67f6d94marks dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Invalid ACL entry type '%s' specified.\n"), $1);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type COLON aclent_perm COLON id
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (yyinteractive) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Extra fields on the end of ACL specification.\n"));
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_UNKNOWN_DATA);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_ENTRY_ERROR);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type idname aclent_perm COLON id /* user or group */
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
b249c65cf0a7400e86a36ddab5c3fce085809859marks uid_t id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (yyinteractive) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Extra fields on the end of ACL specification.\n"));
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_UNKNOWN_DATA);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = compute_aclent_perms($3.perm_str, &$$.a_perm);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks "Invalid permission(s) '%s' specified.\n"),
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $3.perm_str);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = get_id($1, $2, &id);
5f41bf46ca5230bc3ee6b7d6a714a3a16a390261Mark Shellenbaum if (error) {
5f41bf46ca5230bc3ee6b7d6a714a3a16a390261Mark Shellenbaum $$.a_id = get_id_nofail($1, $5);
5f41bf46ca5230bc3ee6b7d6a714a3a16a390261Mark Shellenbaum } else
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_id = id;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = aclent_entry_type($1, 0, &$$.a_type);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks acl_error(
5b233e2d88c4da66fe52338394923e92c67f6d94marks dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Invalid ACL entry type '%s' specified.\n"), $1);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type aclent_perm /* mask entry */
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = compute_aclent_perms($2.perm_str, &$$.a_perm);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks "Invalid permission(s) '%s' specified.\n"),
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $2.perm_str);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.a_id = -1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = aclent_entry_type($1, 0, &$$.a_type);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks acl_error(
5b233e2d88c4da66fe52338394923e92c67f6d94marks dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Invalid ACL entry type specified %d.\n"),
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | entry_type aclent_perm COLON id
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (yyinteractive) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Extra fields on the end of ACL specification.\n"));
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_UNKNOWN_DATA);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_ENTRY_ERROR);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksiflags: compact_iflag COLON {$$ = $1;}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | verbose_iflag COLON {$$ = $1;}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | COLON {$$ = 0;}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarkscompact_iflag : INHERIT_TOK
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks int error;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks uint32_t iflags;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks error = compute_ace_inherit($1, &iflags);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks if (error) {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Invalid inheritance flags '%s' specified.\n"), $1);
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (error);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$ = iflags;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | INHERIT_TOK SLASH verbose_iflag
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Can't mix compact inherit flags with"
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks " verbose inheritance flags.\n"));
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_INHERIT_ERROR);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksverbose_iflag: ACE_INHERIT {$$ |= $1;}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | ACE_INHERIT SLASH verbose_iflag {$$ = $1 | $3;}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | ACE_INHERIT SLASH compact_iflag
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Can't mix verbose inherit flags with"
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks " compact inheritance flags.\n"));
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks return (EACL_INHERIT_ERROR);
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks }
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks | ACE_INHERIT SLASH ACCESS_TYPE
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Inheritance flags can't be mixed with access type.\n"));
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_INHERIT_ERROR);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
ec965100f097e34cc456d3090f870440179928f7marks | ACE_INHERIT SLASH ERROR
ec965100f097e34cc456d3090f870440179928f7marks {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
ec965100f097e34cc456d3090f870440179928f7marks return ($3);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksaclent_perm: PERM_TOK
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.perm_style = PERM_TYPE_UNKNOWN;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.perm_str = $1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.perm_val = 0;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | PERM_TOK ERROR
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "ACL entry permissions are incorrectly specified.\n"));
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return ($2);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
94d2b9ab1a2f061b0f007e415667889b3abc36c8marksaccess_type: ACCESS_TYPE {$$ = $1;}
ec965100f097e34cc456d3090f870440179928f7marks | ERROR
ec965100f097e34cc456d3090f870440179928f7marks {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
ec965100f097e34cc456d3090f870440179928f7marks return ($1);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksid: ID {$$ = $1;}
5f41bf46ca5230bc3ee6b7d6a714a3a16a390261Mark Shellenbaum | SID {$$ = $1;}
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks | COLON
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks {
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Invalid uid/gid specified.\nThe field"
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks " should be a numeric value.\n"));
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks return (EACL_UNKNOWN_DATA);
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks }
ec965100f097e34cc456d3090f870440179928f7marks | ERROR
ec965100f097e34cc456d3090f870440179928f7marks {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
ec965100f097e34cc456d3090f870440179928f7marks return ($1);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksace_perms: perm {$$ = $1;}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | aclent_perm COLON {$$ = $1;}
ec965100f097e34cc456d3090f870440179928f7marks | ERROR
ec965100f097e34cc456d3090f870440179928f7marks {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
ec965100f097e34cc456d3090f870440179928f7marks return ($1);
ec965100f097e34cc456d3090f870440179928f7marks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksperm: perms COLON {$$ = $1;}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | COLON {$$.perm_style = PERM_TYPE_EMPTY;}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksperms: ACE_PERM
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.perm_style = PERM_TYPE_ACE;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.perm_val |= $1;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | ACE_PERM SLASH perms
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.perm_style = PERM_TYPE_ACE;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks $$.perm_val = $1 | $3.perm_val;
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks | ACE_PERM SLASH aclent_perm
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks {
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5b233e2d88c4da66fe52338394923e92c67f6d94marks acl_error(dgettext(TEXT_DOMAIN,
5b233e2d88c4da66fe52338394923e92c67f6d94marks "Can't mix verbose permissions with"
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks " compact permission.\n"));
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks return (EACL_PERM_MASK_ERROR);
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks }
ec965100f097e34cc456d3090f870440179928f7marks | ACE_PERM SLASH ERROR
ec965100f097e34cc456d3090f870440179928f7marks {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
ec965100f097e34cc456d3090f870440179928f7marks return ($3);
ec965100f097e34cc456d3090f870440179928f7marks }
94d2b9ab1a2f061b0f007e415667889b3abc36c8marks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksidname: IDNAME {$$ = $1;}
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarks
5a5eeccada4b11bc692e9a5015d5f4a4f188226cmarksentry_type: ENTRY_TYPE {$$ = $1;}
ec965100f097e34cc456d3090f870440179928f7marks | ERROR
ec965100f097e34cc456d3090f870440179928f7marks {
ec965100f097e34cc456d3090f870440179928f7marks yycleanup();
ec965100f097e34cc456d3090f870440179928f7marks return ($1);
ec965100f097e34cc456d3090f870440179928f7marks }
b249c65cf0a7400e86a36ddab5c3fce085809859marks
b249c65cf0a7400e86a36ddab5c3fce085809859marks%%
b249c65cf0a7400e86a36ddab5c3fce085809859marksstatic void
b249c65cf0a7400e86a36ddab5c3fce085809859marksbad_entry_type(int toketype, char *str)
b249c65cf0a7400e86a36ddab5c3fce085809859marks{
b249c65cf0a7400e86a36ddab5c3fce085809859marks switch(toketype) {
b249c65cf0a7400e86a36ddab5c3fce085809859marks case USER_TOK:
b249c65cf0a7400e86a36ddab5c3fce085809859marks case DEFAULT_USER_TOK:
b249c65cf0a7400e86a36ddab5c3fce085809859marks acl_error(dgettext(TEXT_DOMAIN,
b249c65cf0a7400e86a36ddab5c3fce085809859marks "Invalid user %s specified.\n"), str);
b249c65cf0a7400e86a36ddab5c3fce085809859marks break;
b249c65cf0a7400e86a36ddab5c3fce085809859marks
b249c65cf0a7400e86a36ddab5c3fce085809859marks case GROUP_TOK:
b249c65cf0a7400e86a36ddab5c3fce085809859marks case DEFAULT_GROUP_TOK:
b249c65cf0a7400e86a36ddab5c3fce085809859marks acl_error(dgettext(TEXT_DOMAIN,
b249c65cf0a7400e86a36ddab5c3fce085809859marks "Invalid group %s specified.\n"), str);
b249c65cf0a7400e86a36ddab5c3fce085809859marks break;
b249c65cf0a7400e86a36ddab5c3fce085809859marks
b249c65cf0a7400e86a36ddab5c3fce085809859marks case USER_SID_TOK:
b249c65cf0a7400e86a36ddab5c3fce085809859marks acl_error(dgettext(TEXT_DOMAIN,
b249c65cf0a7400e86a36ddab5c3fce085809859marks "Invalid user SID %s specified.\n"), str);
b249c65cf0a7400e86a36ddab5c3fce085809859marks break;
b249c65cf0a7400e86a36ddab5c3fce085809859marks
b249c65cf0a7400e86a36ddab5c3fce085809859marks case GROUP_SID_TOK:
b249c65cf0a7400e86a36ddab5c3fce085809859marks acl_error(dgettext(TEXT_DOMAIN,
b249c65cf0a7400e86a36ddab5c3fce085809859marks "Invalid group SID %s specified.\n"), str);
b249c65cf0a7400e86a36ddab5c3fce085809859marks }
b249c65cf0a7400e86a36ddab5c3fce085809859marks
b249c65cf0a7400e86a36ddab5c3fce085809859marks}