1b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/* 2b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * Copyright 2011 Tresys Technology, LLC. All rights reserved. 3b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * 4b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * Redistribution and use in source and binary forms, with or without 5b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * modification, are permitted provided that the following conditions are met: 6b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * 7b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * 1. Redistributions of source code must retain the above copyright notice, 8b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * this list of conditions and the following disclaimer. 9b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * 10b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * 2. Redistributions in binary form must reproduce the above copyright notice, 11b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * this list of conditions and the following disclaimer in the documentation 12b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * and/or other materials provided with the distribution. 13b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * 14b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * THIS SOFTWARE IS PROVIDED BY TRESYS TECHNOLOGY, LLC ``AS IS'' AND ANY EXPRESS 15b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 17b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * EVENT SHALL TRESYS TECHNOLOGY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 18b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 19b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 21b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 22b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 23b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * 25b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * The views and conclusions contained in the software and documentation are those 26b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * of the authors and should not be interpreted as representing official policies, 27b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * either expressed or implied, of Tresys Technology, LLC. 28b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence */ 29b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 30b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include <stdlib.h> 31b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include <stdio.h> 32b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include <string.h> 33b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 34b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_internal.h" 35b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_log.h" 36b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_mem.h" 37b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_tree.h" 38b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_list.h" 39b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_symtab.h" 40b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_copy_ast.h" 41b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_build_ast.h" 42b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "cil_strpool.h" 43b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 44b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_args_copy { 45b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_tree_node *dest; 46b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_db *db; 47b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}; 48b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 49b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_copy_list(struct cil_list *data, struct cil_list **copy) 50b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 51b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_list *new; 52b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_list_item *orig_item; 53b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 54b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_init(&new, data->flavor); 55b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 56b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_for_each(orig_item, data) { 57b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence switch (orig_item->flavor) { 58b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_STRING: 59b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(new, CIL_STRING, orig_item->data); 60b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 61b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_LIST: { 62b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_list *new_sub = NULL; 63b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_list((struct cil_list*)orig_item->data, &new_sub); 64b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(new, CIL_LIST, new_sub); 65b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 66b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 6780afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence case CIL_PARAM: { 6880afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence struct cil_param *po = orig_item->data; 6980afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence struct cil_param *pn; 7080afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence cil_param_init(&pn); 7180afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence pn->str = po->str; 7280afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence pn->flavor = po->flavor; 7380afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence cil_list_append(new, CIL_PARAM, pn); 7480afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence } 7580afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence break; 7680afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence 77b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence default: 78b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(new, orig_item->flavor, orig_item->data); 79b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 8080afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence } 81b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 82b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 83b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 84b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 85b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 86b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_node(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 87b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 88b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *new = NULL; 89b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 90b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (data != NULL) { 91b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new = data; 92b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 93b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 94b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 95b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 96b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 97b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 98b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_block(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 99b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 100b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_block *orig = data; 101b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 102b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 103b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 104b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 105b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 106b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_block *new; 107b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_block_init(&new); 108b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 109b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 110b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum;; 111b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 112b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 113b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 114b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 115b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 116b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_blockabstract(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 117b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 118b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_blockabstract *orig = data; 119b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_blockabstract *new = NULL; 120b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 121b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_blockabstract_init(&new); 122b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 123b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->block_str = orig->block_str; 124b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 125b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 126b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 127b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 128b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 129b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 130b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_blockinherit(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 131b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 132b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_blockinherit *orig = data; 133b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_blockinherit *new = NULL; 134b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 135b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_blockinherit_init(&new); 136b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 137b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->block_str = orig->block_str; 13876ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence new->block = orig->block; 139b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 140b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 141b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 142b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 143b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 144b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 145b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_policycap(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 146b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 147b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_policycap *orig = data; 148b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 149b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 150b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 151b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 152b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 153b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_policycap *new; 154b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_policycap_init(&new); 155b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 156b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 157b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 158b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 159b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 160b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 161b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 162b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 163b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_perm(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 164b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 165b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_perm *orig = data; 166b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 167b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 168b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 169b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 170b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 171b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_perm *new; 172b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_perm_init(&new); 173b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 174b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 175b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 176b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 177b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 178b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 179b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 180b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 181b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_copy_classperms(struct cil_classperms *orig, struct cil_classperms **new) 182b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 183b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_classperms_init(new); 184b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence (*new)->class_str = orig->class_str; 185b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_list(orig->perm_strs, &((*new)->perm_strs)); 186b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 187b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 188b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_copy_classperms_set(struct cil_classperms_set *orig, struct cil_classperms_set **new) 189b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 190b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_classperms_set_init(new); 191b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence (*new)->set_str = orig->set_str; 192b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 193b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 194b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_copy_classperms_list(struct cil_list *orig, struct cil_list **new) 195b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 196b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_list_item *orig_item; 197b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 198b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig == NULL) { 199b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return; 200b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 201b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 202b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_init(new, CIL_LIST_ITEM); 203b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_for_each(orig_item, orig) { 204b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig_item->flavor == CIL_CLASSPERMS) { 205b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classperms *cp; 206b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_classperms(orig_item->data, &cp); 207b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(*new, CIL_CLASSPERMS, cp); 208b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 209b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classperms_set *cp_set; 210b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_classperms_set(orig_item->data, &cp_set); 211b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(*new, CIL_CLASSPERMS_SET, cp_set); 212b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 213b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 214b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 215b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 216b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_classmapping(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 217b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 218b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classmapping *orig = data; 219b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classmapping *new = NULL; 220b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 221b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_classmapping_init(&new); 222b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 223b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->map_class_str = orig->map_class_str; 224b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->map_perm_str = orig->map_perm_str; 225b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 226b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_classperms_list(orig->classperms, &new->classperms); 227b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 228b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 229b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 230b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 231b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 232b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 233b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_class(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 234b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 235b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_class *orig = data; 236b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_class *new = NULL; 237b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 238b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 239b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 240b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 241b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum != NULL) { 242b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_copy_class: class cannot be redefined\n"); 243b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 244b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 245b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 246b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_class_init(&new); 247b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 248b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->common = NULL; 249b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 250b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 251b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 252b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 253b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 254b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 255b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_classorder(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 256b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 257b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classorder *orig = data; 258b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classorder *new = NULL; 259b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 260b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_classorder_init(&new); 261b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->class_list_str != NULL) { 262b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_list(orig->class_list_str, &new->class_list_str); 263b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 264b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 265b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 266b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 267b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 268b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 269b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 270b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_classpermission(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 271b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 272b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classpermission *orig = data; 273b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classpermission *new = NULL; 274b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 275b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 276b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 277b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (key != NULL) { 278b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 279b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum != NULL) { 280b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "classpermission cannot be redefined\n"); 281b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 282b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 283b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 284b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2851fe89056ea918d900c598fd2e384c855826f80aaSteve Lawrence cil_classpermission_init(&new); 2861fe89056ea918d900c598fd2e384c855826f80aaSteve Lawrence 287b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_classperms_list(orig->classperms, &new->classperms); 288b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 289b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 290b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 291b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 292b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 293b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 294b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_classpermissionset(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 295b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 296b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classpermissionset *orig = data; 297b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classpermissionset *new = NULL; 298b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2991fe89056ea918d900c598fd2e384c855826f80aaSteve Lawrence cil_classpermissionset_init(&new); 3001fe89056ea918d900c598fd2e384c855826f80aaSteve Lawrence 301b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->set_str = orig->set_str; 302b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 303b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_classperms_list(orig->classperms, &new->classperms); 304b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 305b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 306b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 307b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 308b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 309b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 310b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_classcommon(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 311b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 312b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classcommon *orig = data; 313b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_classcommon *new = NULL; 314b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 315b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_classcommon_init(&new); 316b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 317b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->class_str = orig->class_str; 318b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->common_str = orig->common_str; 319b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 320b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 321b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 322b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 323b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 324b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 325b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_sid(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 326b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 327b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_sid *orig = data; 328b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 329b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 330b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 331b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 332b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 333b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_sid *new; 334b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_sid_init(&new); 335b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 336b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 337b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 338b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 339b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 340b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 341b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 342b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 343b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_sidcontext(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 344b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 345b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_sidcontext *orig = data; 346b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_sidcontext *new = NULL; 347b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 348b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_sidcontext_init(&new); 349b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 350b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->context_str != NULL) { 351b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->context_str = orig->context_str; 352b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 353b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->context); 354b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->context, new->context); 355b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 356b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 357b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 358b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 359b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 360b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 361b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 362b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_sidorder(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 363b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 364b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_sidorder *orig = data; 365b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_sidorder *new = NULL; 366b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 367b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_sidorder_init(&new); 368b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->sid_list_str != NULL) { 369b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_list(orig->sid_list_str, &new->sid_list_str); 370b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 371b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 372b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 373b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 374b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 375b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 376b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 377b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_user(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 378b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 379b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_user *orig = data; 380b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 381b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 382b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 383b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 384b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 385b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_user *new; 386b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_user_init(&new); 387b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 388b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 389b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 390b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 391b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 392b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 393b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 394b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 39577779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiyint cil_copy_userattribute(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 39677779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy{ 39777779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy struct cil_userattribute *orig = data; 39877779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy struct cil_userattribute *new = NULL; 39977779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy char *key = orig->datum.name; 40077779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy struct cil_symtab_datum *datum = NULL; 40177779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy 40277779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy cil_symtab_get_datum(symtab, key, &datum); 40377779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy if (datum == NULL) { 40477779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy cil_userattribute_init(&new); 40577779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy *copy = new; 40677779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy } else { 40777779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy *copy = datum; 40877779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy } 40977779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy 41077779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy return SEPOL_OK; 41177779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy} 41277779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy 41377779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiyint cil_copy_userattributeset(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 41477779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy{ 41577779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy struct cil_userattributeset *orig = data; 41677779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy struct cil_userattributeset *new = NULL; 41777779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy 41877779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy cil_userattributeset_init(&new); 41977779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy 42077779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy new->attr_str = orig->attr_str; 42177779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy 42277779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy cil_copy_expr(db, orig->str_expr, &new->str_expr); 42377779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy cil_copy_expr(db, orig->datum_expr, &new->datum_expr); 42477779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy 42577779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy *copy = new; 42677779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy 42777779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy return SEPOL_OK; 42877779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy} 42977779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy 430b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_userrole(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 431b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 432b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_userrole *orig = data; 433b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_userrole *new = NULL; 434b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 435b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_userrole_init(&new); 436b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 437b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->user_str = orig->user_str; 438b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->role_str = orig->role_str; 439b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 440b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 441b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 442b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 443b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 444b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 445b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_userlevel(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 446b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 447b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_userlevel *orig = data; 448b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_userlevel *new = NULL; 449b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 450b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_userlevel_init(&new); 451b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 452b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->user_str = orig->user_str; 453b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 454b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->level_str != NULL) { 455b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->level_str = orig->level_str; 456b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 457b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_level(db, orig->level, &new->level); 458b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 459b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 460b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 461b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 462b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 463b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 464b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 465b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_userrange(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 466b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 467b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_userrange *orig = data; 468b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_userrange *new = NULL; 469b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 470b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_userrange_init(&new); 471b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 472b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->user_str = orig->user_str; 473b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 474b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->range_str != NULL) { 475b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->range_str = orig->range_str; 476b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 477b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_levelrange_init(&new->range); 478b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_levelrange(db, orig->range, new->range); 479b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 480b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 481b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 482b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 483b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 484b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 485b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 486b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_userprefix(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 487b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 488b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_userprefix *orig = data; 489b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_userprefix *new = NULL; 490b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 491b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_userprefix_init(&new); 492b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 493b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->user_str = orig->user_str; 494b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->prefix_str = orig->prefix_str; 495b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 496b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 497b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 498b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 499b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 500b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 501b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_role(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 502b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 503b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_role *orig = data; 504b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 505b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 506b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 507b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 508b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 509b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_role *new; 510b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_role_init(&new); 511b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 512b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 513b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 514b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 515b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 516b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 517b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 518b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 519b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_roletype(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 520b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 521b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_roletype *orig = data; 522b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_roletype *new = NULL; 523b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 524b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_roletype_init(&new); 525b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 526b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->role_str = orig->role_str; 527b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->type_str = orig->type_str; 528b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 529b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 530b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 531b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 532b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 533b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 534b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_roleattribute(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 535b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 536b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_roleattribute *orig = data; 537b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 538b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 539b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 540b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 541b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 542b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_roleattribute *new; 543b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_roleattribute_init(&new); 544b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 545b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 546b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 547b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 548b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 549b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 550b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 551b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 552b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_roleattributeset(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 553b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 554b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_roleattributeset *orig = data; 555b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_roleattributeset *new = NULL; 556b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 557b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_roleattributeset_init(&new); 558b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 559b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->attr_str = orig->attr_str; 560b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 561b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->str_expr, &new->str_expr); 562b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->datum_expr, &new->datum_expr); 563b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 564b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 565b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 566b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 567b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 568b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 569b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_roleallow(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 570b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 571b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_roleallow *orig = data; 572b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_roleallow *new = NULL; 573b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 574b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_roleallow_init(&new); 575b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 576b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->src_str = orig->src_str; 577b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->tgt_str = orig->tgt_str; 578b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 579b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 580b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 581b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 582b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 583b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 584b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_type(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 585b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 586b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_type *orig = data; 587b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 588b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 589b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 590b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 591b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 592b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_type *new; 593b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_type_init(&new); 594b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 595b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 596b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 597b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 598b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 599b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 600b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 601b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 602b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_typepermissive(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 603b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 604b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_typepermissive *orig = data; 605b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_typepermissive *new = NULL; 606b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 607b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_typepermissive_init(&new); 608b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 609b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->type_str = orig->type_str; 610b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 611b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 612b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 613b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 614b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 615b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 616b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_typeattribute(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 617b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 618b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_typeattribute *orig = data; 619b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 620b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 621b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 622b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 623b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 624b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_typeattribute *new; 625b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_typeattribute_init(&new); 626b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 627b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 628b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 629b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 630b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 631b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 632b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 633b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 634b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_typeattributeset(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 635b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 636b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_typeattributeset *orig = data; 637b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_typeattributeset *new = NULL; 638b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 639b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_typeattributeset_init(&new); 640b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 641b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->attr_str = orig->attr_str; 642b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 643b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->str_expr, &new->str_expr); 644b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->datum_expr, &new->datum_expr); 645b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 646b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 647b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 648b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 649b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 650b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 6511089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoepint cil_copy_expandtypeattribute(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 6521089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep{ 6531089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep struct cil_expandtypeattribute *orig = data; 6541089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep struct cil_expandtypeattribute *new = NULL; 6551089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep 6561089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep fprintf(stderr, "%s %u\n", __func__, __LINE__); 6571089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep cil_expandtypeattribute_init(&new); 6581089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep 6591089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep if (orig->attr_strs != NULL) { 6601089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep cil_copy_list(orig->attr_strs, &new->attr_strs); 6611089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep } 6621089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep 6631089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep if (orig->attr_datums != NULL) { 6641089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep cil_copy_list(orig->attr_datums, &new->attr_datums); 6651089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep } 6661089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep 6671089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep new->expand = orig->expand; 6681089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep 6691089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep *copy = new; 6701089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep 6711089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep return SEPOL_OK; 6721089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep} 6731089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep 674b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_alias(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 675b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 676b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_alias *orig = data; 677b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_alias *new = NULL; 678b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 679b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 680b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 681b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 682b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum != NULL) { 683b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_copy_alias: alias cannot be redefined\n"); 684b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 685b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 686b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 687b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_alias_init(&new); 688b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 689b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 690b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 691b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 692b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 693b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 694b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_aliasactual(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused))symtab_t *symtab) 695b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 696b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_aliasactual *orig = data; 697b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_aliasactual *new = NULL; 698b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 699b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_aliasactual_init(&new); 700b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 701b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->alias_str = orig->alias_str; 702b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->actual_str = orig->actual_str; 703b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 704b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 705b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 706b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 707b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 708b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 709b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_roletransition(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 710b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 711b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_roletransition *orig = data; 712b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_roletransition *new = NULL; 713b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 714b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_roletransition_init(&new); 715b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 716b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->src_str = orig->src_str; 717b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->tgt_str = orig->tgt_str; 718b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->obj_str = orig->obj_str; 719b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->result_str = orig->result_str; 720b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 721b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 722b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 723b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 724b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 725b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 726b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_nametypetransition(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 727b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 728b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_nametypetransition *orig = data; 729b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_nametypetransition *new = NULL; 730b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 731b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_nametypetransition_init(&new); 732b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 733b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->src_str = orig->src_str; 734b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->tgt_str = orig->tgt_str; 735b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->obj_str = orig->obj_str; 736b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->name_str = orig->name_str; 737b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->result_str = orig->result_str; 738b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 739b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 740b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 741b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 742b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 743b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 744b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 745b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_rangetransition(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 746b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 747b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_rangetransition *orig = data; 748b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_rangetransition *new = NULL; 749b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 750b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_rangetransition_init(&new); 751b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 752b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->src_str = orig->src_str; 753b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->exec_str = orig->exec_str; 754b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->obj_str = orig->obj_str; 755b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 756b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->range_str != NULL) { 757b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->range_str = orig->range_str; 758b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 759b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_levelrange_init(&new->range); 760b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_levelrange(db, orig->range, new->range); 761b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 762b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 763b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 764b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 765b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 766b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 767b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 768b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_bool(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 769b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 770b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_bool *orig = data; 771b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_bool *new = NULL; 772b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 773b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 774b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 775b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 776b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum != NULL) { 777b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_copy_bool: boolean cannot be redefined\n"); 778b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 779b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 780b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 781b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_bool_init(&new); 782b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->value = orig->value; 783b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 784b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 785b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 786b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 787b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 788b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_tunable(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 789b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 790b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_tunable *orig = data; 791b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_tunable *new = NULL; 792b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 793b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 794b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 795b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 796b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum != NULL) { 797b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_copy_tunable: tunable cannot be redefined\n"); 798b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 799b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 800b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 801b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_tunable_init(&new); 802b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->value = orig->value; 803b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 804b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 805b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 806b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 807b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 808f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrencevoid cil_copy_fill_permissionx(struct cil_db *db, struct cil_permissionx *orig, struct cil_permissionx *new) 809f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence{ 810f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence new->kind = orig->kind; 811f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence new->obj_str = orig->obj_str; 812f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence cil_copy_expr(db, orig->expr_str, &new->expr_str); 813f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence} 814f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence 815172ce53ffa793e69632923b5323fc8c2220b3294Nicolas Ioossint cil_copy_avrule(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 816b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 817b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_avrule *orig = data; 818b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_avrule *new = NULL; 819b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 820b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_avrule_init(&new); 821b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 822f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence new->is_extended = orig->is_extended; 823b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->rule_kind = orig->rule_kind; 824b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->src_str = orig->src_str; 825b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->tgt_str = orig->tgt_str; 826f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence 827f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence if (!new->is_extended) { 828f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence cil_copy_classperms_list(orig->perms.classperms, &new->perms.classperms); 829f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence } else { 830f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence if (new->perms.x.permx_str != NULL) { 831f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence new->perms.x.permx_str = orig->perms.x.permx_str; 832f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence } else { 833f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence cil_permissionx_init(&new->perms.x.permx); 834f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence cil_copy_fill_permissionx(db, orig->perms.x.permx, new->perms.x.permx); 835f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence } 836f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence } 837b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 838b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 839b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 840b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 841b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 842b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 843ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrenceint cil_copy_permissionx(struct cil_db *db, void *data, void **copy, symtab_t *symtab) 844ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence{ 845ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence struct cil_permissionx *orig = data; 846ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence struct cil_permissionx *new = NULL; 847ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence char *key = orig->datum.name; 848ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence struct cil_symtab_datum *datum = NULL; 849ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence 850ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence 851ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 852ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence if (datum != NULL) { 853ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence cil_log(CIL_INFO, "cil_copy_permissionx: permissionx cannot be redefined\n"); 854ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence return SEPOL_ERR; 855ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence } 856ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence 857ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence cil_permissionx_init(&new); 858ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence cil_copy_fill_permissionx(db, orig, new); 859ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence 860ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence *copy = new; 861ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence 862ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence return SEPOL_OK; 863ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence} 864ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence 865b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_type_rule(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 866b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 867b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_type_rule *orig = data; 868b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_type_rule *new = NULL; 869b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 870b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_type_rule_init(&new); 871b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 872b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->rule_kind = orig->rule_kind; 873b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->src_str = orig->src_str; 874b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->tgt_str = orig->tgt_str; 875b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->obj_str = orig->obj_str; 876b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->result_str = orig->result_str; 877b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 878b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 879b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 880b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 881b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 882b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 883b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_sens(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 884b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 885b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_sens *orig = data; 886b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 887b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 888b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 889b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 890b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 891b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_sens *new; 892b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_sens_init(&new); 893b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 894b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 895b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 896b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 897b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 898b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 899b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 900b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 901b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_cat(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 902b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 903b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_cat *orig = data; 904b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 905b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 906b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 907b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 908b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 909b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_cat *new; 910b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_cat_init(&new); 911b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 912b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 913b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 914b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 915b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 916b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 917b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 918b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 919b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_copy_cats(struct cil_db *db, struct cil_cats *orig, struct cil_cats **new) 920b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 921b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_cats_init(new); 922b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->str_expr, &(*new)->str_expr); 923b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->datum_expr, &(*new)->datum_expr); 924b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 925b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 926b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_catset(struct cil_db *db, void *data, void **copy, symtab_t *symtab) 927b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 928b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_catset *orig = data; 929b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_catset *new = NULL; 930b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 931b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 932b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 933b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 934b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum != NULL) { 935b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_copy_catset: categoryset cannot be redefined\n"); 936b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 937b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 938b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 939b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_catset_init(&new); 940b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 941b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_cats(db, orig->cats, &new->cats); 942b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 943b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 944b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 945b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 946b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 947b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 948b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_senscat(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 949b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 950b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_senscat *orig = data; 951b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_senscat *new = NULL; 952b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 953b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_senscat_init(&new); 954b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 955b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->sens_str = orig->sens_str; 956b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 957b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_cats(db, orig->cats, &new->cats); 958b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 959b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 960b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 961b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 962b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 963b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 964b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_catorder(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 965b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 966b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_catorder *orig = data; 967b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_catorder *new = NULL; 968b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 969b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_catorder_init(&new); 970b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->cat_list_str != NULL) { 971b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_list(orig->cat_list_str, &new->cat_list_str); 972b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 973b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 974b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 975b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 976b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 977b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 978b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 979b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_sensitivityorder(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 980b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 981b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_sensorder *orig = data; 982b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_sensorder *new = NULL; 983b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 984b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_sensorder_init(&new); 985b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->sens_list_str != NULL) { 986b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_list(orig->sens_list_str, &new->sens_list_str); 987b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 988b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 989b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 990b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 991b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 992b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 993b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 994b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_copy_fill_level(struct cil_db *db, struct cil_level *orig, struct cil_level **new) 995b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 996b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_level_init(new); 997b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 998b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence (*new)->sens_str = orig->sens_str; 999b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1000b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->cats != NULL) { 1001b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_cats(db, orig->cats, &(*new)->cats); 1002b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1003b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1004b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1005b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_level(struct cil_db *db, void *data, void **copy, symtab_t *symtab) 1006b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1007b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_level *orig = data; 1008b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_level *new = NULL; 1009b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 1010b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 1011b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1012b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (key != NULL) { 1013b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 1014b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum != NULL) { 1015b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_copy_level: level cannot be redefined\n"); 1016b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 1017b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1018b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1019b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1020b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_level(db, orig, &new); 1021b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1022b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1023b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1024b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1025b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1026b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1027b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_copy_fill_levelrange(struct cil_db *db, struct cil_levelrange *data, struct cil_levelrange *new) 1028b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1029b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (data->low_str != NULL) { 1030b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->low_str = data->low_str; 1031b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1032b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_level(db, data->low, &new->low); 1033b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1034b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1035b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (data->high_str != NULL) { 1036b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->high_str = data->high_str; 1037b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1038b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_level(db, data->high, &new->high); 1039b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1040b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1041b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1042b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_levelrange(struct cil_db *db, void *data, void **copy, symtab_t *symtab) 1043b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1044b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_levelrange *orig = data; 1045b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_levelrange *new = NULL; 1046b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 1047b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 1048b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1049b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (key != NULL) { 1050b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 1051b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum != NULL) { 1052b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_copy_levelrange: levelrange cannot be redefined\n"); 1053b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 1054b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1055b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1056b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1057b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_levelrange_init(&new); 1058b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_levelrange(db, orig, new); 1059b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1060b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1061b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1062b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1063b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1064b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1065b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_copy_fill_context(struct cil_db *db, struct cil_context *data, struct cil_context *new) 1066b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1067b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->user_str = data->user_str; 1068b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->role_str = data->role_str; 1069b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->type_str = data->type_str; 1070b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1071b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (data->range_str != NULL) { 1072b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->range_str = data->range_str; 1073b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1074b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_levelrange_init(&new->range); 1075b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_levelrange(db, data->range, new->range); 1076b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1077b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1078b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1079b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_context(struct cil_db *db, void *data, void **copy, symtab_t *symtab) 1080b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1081b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_context *orig = data; 1082b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_context *new = NULL; 1083b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 1084b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 1085b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1086b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (key != NULL) { 1087b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 1088b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum != NULL) { 1089b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_copy_context: context cannot be redefined\n"); 1090b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 1091b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1092b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1093b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1094b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new); 1095b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig, new); 1096b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1097b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1098b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1099b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1100b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1101b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1102b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_netifcon(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1103b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1104b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_netifcon *orig = data; 1105b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_netifcon *new = NULL; 1106b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1107b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_netifcon_init(&new); 1108b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1109b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->interface_str = orig->interface_str; 1110b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1111b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->if_context_str != NULL) { 1112b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->if_context_str = orig->if_context_str; 1113b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1114b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->if_context); 1115b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->if_context, new->if_context); 1116b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1117b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1118b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->packet_context_str != NULL) { 1119b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->packet_context_str = orig->packet_context_str; 1120b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1121b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->packet_context); 1122b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->packet_context, new->packet_context); 1123b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1124b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1125b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1126b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1127b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1128b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1129b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1130b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_genfscon(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1131b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1132b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_genfscon *orig = data; 1133b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_genfscon *new = NULL; 1134b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1135b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_genfscon_init(&new); 1136b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1137b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->fs_str = orig->fs_str; 1138b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->path_str = orig->path_str; 1139b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1140b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->context_str != NULL) { 1141b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->context_str = orig->context_str; 1142b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1143b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->context); 1144b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->context, new->context); 1145b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1146b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1147b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1148b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1149b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1150b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1151b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1152b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_filecon(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1153b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1154b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_filecon *orig = data; 1155b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_filecon *new = NULL; 1156b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1157b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_filecon_init(&new); 1158b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1159b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->path_str = orig->path_str; 1160b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->type = orig->type; 1161b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1162b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->context_str != NULL) { 1163b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->context_str = orig->context_str; 1164b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else if (orig->context != NULL) { 1165b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->context); 1166b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->context, new->context); 1167b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1168b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1169b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1170b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1171b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1172b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1173b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1174b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_nodecon(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1175b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1176b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_nodecon *orig = data; 1177b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_nodecon *new = NULL; 1178b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1179b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_nodecon_init(&new); 1180b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1181b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->addr_str != NULL) { 1182b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->addr_str = orig->addr_str; 1183b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1184b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_ipaddr_init(&new->addr); 1185b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_ipaddr(orig->addr, new->addr); 1186b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1187b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1188b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->mask_str != NULL) { 1189b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->mask_str = orig->mask_str; 1190b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1191b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_ipaddr_init(&new->mask); 1192b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_ipaddr(orig->mask, new->mask); 1193b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1194b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1195b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->context_str != NULL) { 1196b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->context_str = orig->context_str; 1197b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1198b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->context); 1199b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->context, new->context); 1200b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1201b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1202b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1203b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1204b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1205b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1206b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1207b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_portcon(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1208b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1209b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_portcon *orig = data; 1210b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_portcon *new = NULL; 1211b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1212b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_portcon_init(&new); 1213b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1214b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->proto = orig->proto; 1215b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->port_low = orig->port_low; 1216b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->port_high = orig->port_high; 1217b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1218b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->context_str != NULL) { 1219b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->context_str = orig->context_str; 1220b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1221b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->context); 1222b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->context, new->context); 1223b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1224b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1225b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1226b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1227b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1228b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1229b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1230b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_pirqcon(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1231b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1232b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_pirqcon *orig = data; 1233b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_pirqcon *new = NULL; 1234b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1235b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_pirqcon_init(&new); 1236b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1237b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->pirq = orig->pirq; 1238b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1239b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->context_str != NULL) { 1240b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->context_str = orig->context_str; 1241b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1242b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->context); 1243b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->context, new->context); 1244b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1245b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1246b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1247b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1248b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1249b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1250b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1251b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_iomemcon(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1252b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1253b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_iomemcon *orig = data; 1254b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_iomemcon *new = NULL; 1255b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1256b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_iomemcon_init(&new); 1257b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1258b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->iomem_low = orig->iomem_low; 1259b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->iomem_high = orig->iomem_high; 1260b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1261b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->context_str != NULL) { 1262b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->context_str = orig->context_str; 1263b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1264b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->context); 1265b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->context, new->context); 1266b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1267b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1268b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1269b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1270b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1271b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1272b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1273b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_ioportcon(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1274b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1275b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_ioportcon *orig = data; 1276b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_ioportcon *new = NULL; 1277b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1278b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_ioportcon_init(&new); 1279b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1280b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->ioport_low = orig->ioport_low; 1281b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->ioport_high = orig->ioport_high; 1282b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1283b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->context_str != NULL) { 1284b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->context_str = orig->context_str; 1285b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1286b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->context); 1287b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->context, new->context); 1288b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1289b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1290b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1291b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1292b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1293b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1294b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1295b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_pcidevicecon(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1296b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1297b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_pcidevicecon *orig = data; 1298b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_pcidevicecon *new = NULL; 1299b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1300b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_pcidevicecon_init(&new); 1301b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1302b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->dev = orig->dev; 1303b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1304b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->context_str != NULL) { 1305b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->context_str = orig->context_str; 1306b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1307b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->context); 1308b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->context, new->context); 1309b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1310b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1311b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1312b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1313b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1314b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1315b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1316f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graafint cil_copy_devicetreecon(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1317f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf{ 1318f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf struct cil_devicetreecon *orig = data; 1319f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf struct cil_devicetreecon *new = NULL; 1320f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf 1321f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf cil_devicetreecon_init(&new); 1322f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf 1323f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf new->path = orig->path; 1324f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf 1325f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf if (orig->context_str != NULL) { 1326f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf new->context_str = orig->context_str; 1327f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf } else { 1328f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf cil_context_init(&new->context); 1329f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf cil_copy_fill_context(db, orig->context, new->context); 1330f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf } 1331f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf 1332f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf *copy = new; 1333f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf 1334f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf return SEPOL_OK; 1335f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf} 1336f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf 1337b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_fsuse(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1338b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1339b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_fsuse *orig = data; 1340b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_fsuse *new = NULL; 1341b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1342b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_fsuse_init(&new); 1343b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1344b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->type = orig->type; 1345b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->fs_str = orig->fs_str; 1346b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1347b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->context_str != NULL) { 1348b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->context_str = orig->context_str; 1349b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1350b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_context_init(&new->context); 1351b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_context(db, orig->context, new->context); 1352b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1353b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1354b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1355b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1356b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1357b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1358b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1359b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_expr(struct cil_db *db, struct cil_list *orig, struct cil_list **new) 1360b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1361b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_list_item *curr; 1362b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1363b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig == NULL) { 1364b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *new = NULL; 1365b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1366b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1367b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1368b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_init(new, orig->flavor); 1369b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1370b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_for_each(curr, orig) { 1371b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence switch (curr->flavor) { 1372b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_LIST: { 1373b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_list *sub_list; 1374b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, curr->data, &sub_list); 1375b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(*new, CIL_LIST, sub_list); 1376b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1377b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1378b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_STRING: 1379b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(*new, CIL_STRING, curr->data); 1380b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1381b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_DATUM: 1382b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(*new, curr->flavor, curr->data); 1383b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1384b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_OP: 1385b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(*new, curr->flavor, curr->data); 1386b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1387b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CONS_OPERAND: 1388b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(*new, curr->flavor, curr->data); 1389b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1390b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence default: 1391b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "Unknown flavor %d in expression being copied\n",curr->flavor); 1392b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_append(*new, curr->flavor, curr->data); 1393b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1394b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1395b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1396b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1397b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1398b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1399b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1400b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_constrain(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1401b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1402b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_constrain *orig = data; 1403b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_constrain *new = NULL; 1404b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1405b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_constrain_init(&new); 1406b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_classperms_list(orig->classperms, &new->classperms); 1407b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1408b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->str_expr, &new->str_expr); 1409b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->datum_expr, &new->datum_expr); 1410b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1411b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1412b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1413b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1414b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1415b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1416b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_validatetrans(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1417b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1418b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_validatetrans *orig = data; 1419b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_validatetrans *new = NULL; 1420b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1421b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_validatetrans_init(&new); 1422b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1423b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->class_str = orig->class_str; 1424b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1425b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->str_expr, &new->str_expr); 1426b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->datum_expr, &new->datum_expr); 1427b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1428b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1429b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1430b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1431b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1432b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1433b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_call(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1434b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1435b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_call *orig = data; 1436b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_call *new = NULL; 1437b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence int rc = SEPOL_ERR; 1438b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1439b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_call_init(&new); 1440b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1441b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->macro_str = orig->macro_str; 144276ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence new->macro = orig->macro; 1443b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1444b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->args_tree != NULL) { 1445b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_tree_init(&new->args_tree); 1446b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence rc = cil_copy_ast(db, orig->args_tree->root, new->args_tree->root); 1447b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (rc != SEPOL_OK) { 1448b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 1449b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1450b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1451b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1452b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->copied = orig->copied; 1453b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1454b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1455b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1456b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1457b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1458b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceexit: 1459b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_destroy_call(new); 1460b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return rc; 1461b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1462b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1463b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_macro(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 1464b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1465b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_macro *orig = data; 1466b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 1467b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 1468b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1469b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 1470b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 1471b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_macro *new; 1472b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_macro_init(&new); 147376ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence if (orig->params != NULL) { 147476ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence cil_copy_list(orig->params, &new->params); 147576ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence } 1476b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1477b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1478b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1479b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1480b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_list_item *curr_orig = NULL; 1481b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_list_item *curr_new = NULL; 1482b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_param *param_orig = NULL; 1483b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_param *param_new = NULL; 1484b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1485b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (((struct cil_macro*)datum)->params != NULL) { 1486b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence curr_new = ((struct cil_macro*)datum)->params->head; 1487b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1488b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1489b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->params != NULL) { 1490b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence curr_orig = orig->params->head; 1491b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1492b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1493b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (curr_orig != NULL && curr_new != NULL) { 1494b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence while (curr_orig != NULL) { 1495b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (curr_new == NULL) { 1496b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 1497b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1498b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1499b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence param_orig = (struct cil_param*)curr_orig->data; 1500b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence param_new = (struct cil_param*)curr_new->data; 1501b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (param_orig->str != param_new->str) { 1502b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 1503b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else if (param_orig->flavor != param_new->flavor) { 1504b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 1505b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1506b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1507b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence curr_orig = curr_orig->next; 1508b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence curr_new = curr_new->next; 1509b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1510b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1511b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (curr_new != NULL) { 1512b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 1513b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1514b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else if (!(curr_orig == NULL && curr_new == NULL)) { 1515b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 1516b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1517b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1518b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 1519b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1520b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1521b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1522b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1523b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceexit: 1524b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_copy_macro: macro cannot be redefined\n"); 1525b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 1526b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1527b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1528b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_optional(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 1529b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1530b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_optional *orig = data; 1531b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char *key = orig->datum.name; 1532b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 1533b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1534b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 1535b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum == NULL) { 1536b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_optional *new; 1537b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_optional_init(&new); 1538b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1539b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 1540b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = datum; 1541b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1542b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1543b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1544b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1545b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1546b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid cil_copy_fill_ipaddr(struct cil_ipaddr *data, struct cil_ipaddr *new) 1547b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1548b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->family = data->family; 1549b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence memcpy(&new->ip, &data->ip, sizeof(data->ip)); 1550b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1551b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1552b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_ipaddr(__attribute__((unused)) struct cil_db *db, void *data, void **copy, symtab_t *symtab) 1553b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1554b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_ipaddr *orig = data; 1555b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_ipaddr *new = NULL; 1556b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence char * key = orig->datum.name; 1557b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_symtab_datum *datum = NULL; 1558b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1559b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_symtab_get_datum(symtab, key, &datum); 1560b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (datum != NULL) { 1561b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_copy_ipaddr: ipaddress cannot be redefined\n"); 1562b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_ERR; 1563b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1564b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1565b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_ipaddr_init(&new); 1566b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_fill_ipaddr(orig, new); 1567b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1568b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1569b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1570b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1571b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1572b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1573b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_condblock(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1574b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1575b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_condblock *orig = data; 1576b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_condblock *new = *copy; 1577b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_condblock_init(&new); 1578b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->flavor = orig->flavor; 1579b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1580b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1581b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1582b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1583b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1584b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_boolif(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1585b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1586b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_booleanif *orig = data; 1587b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_booleanif *new = NULL; 1588b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1589b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_boolif_init(&new); 1590b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1591b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->str_expr, &new->str_expr); 1592b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->datum_expr, &new->datum_expr); 1593b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->preserved_tunable = orig->preserved_tunable; 1594b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1595b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1596b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1597b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1598b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1599b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1600b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_tunif(struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1601b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1602b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_tunableif *orig = data; 1603b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_tunableif *new = NULL; 1604b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1605b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_tunif_init(&new); 1606b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1607b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->str_expr, &new->str_expr); 1608b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_expr(db, orig->datum_expr, &new->datum_expr); 1609b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1610b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1611b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1612b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1613b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1614b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1615b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_default(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1616b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1617b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_default *orig = data; 1618b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_default *new = NULL; 1619b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1620b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_default_init(&new); 1621b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1622b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->flavor = orig->flavor; 1623b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1624b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->class_strs != NULL) { 1625b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_list(orig->class_strs, &new->class_strs); 1626b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1627b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1628b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->object = orig->object; 1629b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1630b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1631b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1632b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1633b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1634b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1635b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_defaultrange(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1636b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1637b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_defaultrange *orig = data; 1638b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_defaultrange *new = NULL; 1639b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1640b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_defaultrange_init(&new); 1641b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1642b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->class_strs != NULL) { 1643b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_copy_list(orig->class_strs, &new->class_strs); 1644b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1645b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1646b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->object_range = orig->object_range; 1647b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1648b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1649b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1650b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1651b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1652b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1653b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_handleunknown(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1654b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1655b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_handleunknown *orig = data; 1656b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_handleunknown *new = NULL; 1657b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1658b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_handleunknown_init(&new); 1659b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->handle_unknown = orig->handle_unknown; 1660b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1661b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1662b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1663b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1664b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1665b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_mls(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1666b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1667b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_mls *orig = data; 1668b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_mls *new = NULL; 1669b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1670b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_mls_init(&new); 1671b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->value = orig->value; 1672b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1673b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1674b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1675b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1676b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1677b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_bounds(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1678b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1679b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_bounds *orig = data; 1680b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_bounds *new = NULL; 1681b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1682b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_bounds_init(&new); 1683b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1684b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->parent_str = orig->parent_str; 1685b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->child_str = orig->child_str; 1686b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1687b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *copy = new; 1688b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1689b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 1690b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 1691b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1692875a6bcbe8885c927122c6931b3a01d821e04b10James Carterint cil_copy_src_info(__attribute__((unused)) struct cil_db *db, void *data, void **copy, __attribute__((unused)) symtab_t *symtab) 1693875a6bcbe8885c927122c6931b3a01d821e04b10James Carter{ 1694875a6bcbe8885c927122c6931b3a01d821e04b10James Carter struct cil_src_info *orig = data; 1695875a6bcbe8885c927122c6931b3a01d821e04b10James Carter struct cil_src_info *new = NULL; 1696875a6bcbe8885c927122c6931b3a01d821e04b10James Carter 1697875a6bcbe8885c927122c6931b3a01d821e04b10James Carter cil_src_info_init(&new); 1698875a6bcbe8885c927122c6931b3a01d821e04b10James Carter 1699875a6bcbe8885c927122c6931b3a01d821e04b10James Carter new->is_cil = orig->is_cil; 1700875a6bcbe8885c927122c6931b3a01d821e04b10James Carter new->path = orig->path; 1701875a6bcbe8885c927122c6931b3a01d821e04b10James Carter 1702875a6bcbe8885c927122c6931b3a01d821e04b10James Carter *copy = new; 1703875a6bcbe8885c927122c6931b3a01d821e04b10James Carter 1704875a6bcbe8885c927122c6931b3a01d821e04b10James Carter return SEPOL_OK; 1705875a6bcbe8885c927122c6931b3a01d821e04b10James Carter} 1706875a6bcbe8885c927122c6931b3a01d821e04b10James Carter 1707b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint __cil_copy_node_helper(struct cil_tree_node *orig, __attribute__((unused)) uint32_t *finished, void *extra_args) 1708b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 1709b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence int rc = SEPOL_ERR; 1710b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_tree_node *parent = NULL; 1711b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_tree_node *new = NULL; 1712b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_db *db = NULL; 1713b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_args_copy *args = NULL; 1714b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_tree_node *namespace = NULL; 1715b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_param *param = NULL; 1716b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence enum cil_sym_index sym_index = CIL_SYM_UNKNOWN; 1717b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence symtab_t *symtab = NULL; 1718b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence void *data = NULL; 1719b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence int (*copy_func)(struct cil_db *db, void *data, void **copy, symtab_t *symtab) = NULL; 172076ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence struct cil_blockinherit *blockinherit = NULL; 1721b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1722b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig == NULL || extra_args == NULL) { 1723b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 1724b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1725b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1726b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence args = extra_args; 1727b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence parent = args->dest; 1728b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence db = args->db; 1729b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1730b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1731b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence switch (orig->flavor) { 1732b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_BLOCK: 1733b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_block; 1734b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1735b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_BLOCKABSTRACT: 1736b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_blockabstract; 1737b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1738b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_BLOCKINHERIT: 1739b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_blockinherit; 1740b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1741b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_POLICYCAP: 1742b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_policycap; 1743b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1744b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_PERM: 1745b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_MAP_PERM: 1746b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_perm; 1747b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1748b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CLASSMAPPING: 1749b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_classmapping; 1750b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1751b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CLASS: 1752b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_COMMON: 1753b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_MAP_CLASS: 1754b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_class; 1755b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1756b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CLASSORDER: 1757b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_classorder; 1758b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1759b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CLASSPERMISSION: 1760b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_classpermission; 1761b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1762b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CLASSPERMISSIONSET: 1763b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_classpermissionset; 1764b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1765b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CLASSCOMMON: 1766b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_classcommon; 1767b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1768b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_SID: 1769b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_sid; 1770b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1771b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_SIDCONTEXT: 1772b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_sidcontext; 1773b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1774b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_SIDORDER: 1775b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_sidorder; 1776b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1777b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_USER: 1778b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_user; 1779b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 178077779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy case CIL_USERATTRIBUTE: 178177779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy copy_func = &cil_copy_userattribute; 178277779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy break; 178377779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy case CIL_USERATTRIBUTESET: 178477779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy copy_func = &cil_copy_userattributeset; 178577779d2ca5a0c6efd113ff34cee432d5bb951f09Yuli Khodorkovskiy break; 1786b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_USERROLE: 1787b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_userrole; 1788b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1789b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_USERLEVEL: 1790b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_userlevel; 1791b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1792b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_USERRANGE: 1793b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_userrange; 1794b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1795b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_USERBOUNDS: 1796b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_bounds; 1797b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1798b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_USERPREFIX: 1799b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_userprefix; 1800b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1801b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_ROLE: 1802b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_role; 1803b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1804b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_ROLETYPE: 1805b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_roletype; 1806b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1807b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_ROLEBOUNDS: 1808b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_bounds; 1809b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1810b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_ROLEATTRIBUTE: 1811b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_roleattribute; 1812b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1813b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_ROLEATTRIBUTESET: 1814b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_roleattributeset; 1815b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1816b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_ROLEALLOW: 1817b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_roleallow; 1818b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1819b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_TYPE: 1820b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_type; 1821b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1822b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_TYPEBOUNDS: 1823b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_bounds; 1824b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1825b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_TYPEPERMISSIVE: 1826b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = cil_copy_typepermissive; 1827b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1828b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_TYPEATTRIBUTE: 1829b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_typeattribute; 1830b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1831b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_TYPEATTRIBUTESET: 1832b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_typeattributeset; 1833b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 18341089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep case CIL_EXPANDTYPEATTRIBUTE: 18351089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep copy_func = &cil_copy_expandtypeattribute; 18361089665e31a647a5f0ba2eabe8ac6232b384bed9Jeff Vander Stoep break; 1837b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_TYPEALIAS: 1838b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_alias; 1839b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1840b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_TYPEALIASACTUAL: 1841b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_aliasactual; 1842b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1843b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_ROLETRANSITION: 1844b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_roletransition; 1845b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1846b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_NAMETYPETRANSITION: 1847b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_nametypetransition; 1848b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1849b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_RANGETRANSITION: 1850b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_rangetransition; 1851b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1852b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_TUNABLE: 1853b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_tunable; 1854b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1855b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_BOOL: 1856b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_bool; 1857b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1858b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_AVRULE: 1859ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence case CIL_AVRULEX: 1860f5602f5ff980435ee2aefed35ba643310ceeac25Steve Lawrence copy_func = &cil_copy_avrule; 1861ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence break; 1862ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence case CIL_PERMISSIONX: 1863ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence copy_func = &cil_copy_permissionx; 1864ef93dfe0393c4a60483c3f7729dd98a2f886606aSteve Lawrence break; 1865b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_TYPE_RULE: 1866b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_type_rule; 1867b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1868b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_SENS: 1869b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_sens; 1870b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1871b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_SENSALIAS: 1872b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_alias; 1873b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1874b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_SENSALIASACTUAL: 1875b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_aliasactual; 1876b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1877b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CAT: 1878b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_cat; 1879b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1880b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CATALIAS: 1881b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_alias; 1882b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1883b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CATALIASACTUAL: 1884b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_aliasactual; 1885b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1886b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CATSET: 1887b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_catset; 1888b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1889b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_SENSCAT: 1890b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_senscat; 1891b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1892b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CATORDER: 1893b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_catorder; 1894b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1895b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_SENSITIVITYORDER: 1896b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_sensitivityorder; 1897b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1898b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_LEVEL: 1899b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_level; 1900b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1901b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_LEVELRANGE: 1902b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_levelrange; 1903b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1904b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CONTEXT: 1905b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_context; 1906b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1907b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_NETIFCON: 1908b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_netifcon; 1909b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1910b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_GENFSCON: 1911b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_genfscon; 1912b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1913b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_FILECON: 1914b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_filecon; 1915b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1916b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_NODECON: 1917b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_nodecon; 1918b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1919b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_PORTCON: 1920b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_portcon; 1921b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1922b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_PIRQCON: 1923b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_pirqcon; 1924b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1925b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_IOMEMCON: 1926b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_iomemcon; 1927b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1928b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_IOPORTCON: 1929b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_ioportcon; 1930b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1931b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_PCIDEVICECON: 1932b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_pcidevicecon; 1933b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1934f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf case CIL_DEVICETREECON: 1935f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf copy_func = &cil_copy_devicetreecon; 1936f0290677091e7eee4a3724a2a86ede9e11f93802Daniel De Graaf break; 1937b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_FSUSE: 1938b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_fsuse; 1939b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1940b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CONSTRAIN: 1941b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_MLSCONSTRAIN: 1942b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_constrain; 1943b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1944b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_VALIDATETRANS: 1945b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_MLSVALIDATETRANS: 1946b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_validatetrans; 1947b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1948b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CALL: 1949b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_call; 1950b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1951b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_MACRO: 1952b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_macro; 1953b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1954b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_NODE: 1955b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_node; 1956b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1957b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_OPTIONAL: 1958b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_optional; 1959b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1960b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_IPADDR: 1961b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_ipaddr; 1962b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1963b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_CONDBLOCK: 1964b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_condblock; 1965b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1966b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_BOOLEANIF: 1967b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_boolif; 1968b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1969b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_TUNABLEIF: 1970b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_tunif; 1971b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1972b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_DEFAULTUSER: 1973b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_DEFAULTROLE: 1974b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_DEFAULTTYPE: 1975b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_default; 1976b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1977b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_DEFAULTRANGE: 1978b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_defaultrange; 1979b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1980b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_HANDLEUNKNOWN: 1981b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_handleunknown; 1982b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1983b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence case CIL_MLS: 1984b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence copy_func = &cil_copy_mls; 1985b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence break; 1986875a6bcbe8885c927122c6931b3a01d821e04b10James Carter case CIL_SRC_INFO: 1987875a6bcbe8885c927122c6931b3a01d821e04b10James Carter copy_func = &cil_copy_src_info; 1988875a6bcbe8885c927122c6931b3a01d821e04b10James Carter break; 1989b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence default: 1990b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 1991b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1992b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 1993b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->flavor >= CIL_MIN_DECLARATIVE) { 1994b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence rc = cil_flavor_to_symtab_index(orig->flavor, &sym_index); 1995b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (rc != SEPOL_OK) { 1996b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 1997b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 1998b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 199980afe7b2ce0b06f93b6b3a07e58cab1aee8afc91Steve Lawrence rc = cil_get_symtab(parent, &symtab, sym_index); 2000b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (rc != SEPOL_OK) { 2001b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 2002b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2003b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2004b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2005b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence rc = (*copy_func)(db, orig->data, &data, symtab); 2006b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (rc == SEPOL_OK) { 2007b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_tree_node_init(&new); 2008b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2009b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->parent = parent; 2010b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->line = orig->line; 2011875a6bcbe8885c927122c6931b3a01d821e04b10James Carter new->hll_line = orig->hll_line; 2012b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->flavor = orig->flavor; 2013b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence new->data = data; 2014b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2015b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->flavor >= CIL_MIN_DECLARATIVE) { 2016eeafde13513b105376f52f93b1fd836d524545f0Nicolas Iooss /* Check the flavor of data if was found in the destination symtab */ 2017eeafde13513b105376f52f93b1fd836d524545f0Nicolas Iooss if (DATUM(data)->nodes->head && FLAVOR(data) != orig->flavor) { 2018eeafde13513b105376f52f93b1fd836d524545f0Nicolas Iooss cil_tree_log(orig, CIL_ERR, "Incompatible flavor when trying to copy %s", DATUM(data)->name); 2019eeafde13513b105376f52f93b1fd836d524545f0Nicolas Iooss cil_tree_log(NODE(data), CIL_ERR, "Note: conflicting declaration"); 2020eeafde13513b105376f52f93b1fd836d524545f0Nicolas Iooss new->flavor = FLAVOR(data); 2021eeafde13513b105376f52f93b1fd836d524545f0Nicolas Iooss rc = SEPOL_ERR; 2022eeafde13513b105376f52f93b1fd836d524545f0Nicolas Iooss goto exit; 2023eeafde13513b105376f52f93b1fd836d524545f0Nicolas Iooss } 2024b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence rc = cil_symtab_insert(symtab, ((struct cil_symtab_datum*)orig->data)->name, ((struct cil_symtab_datum*)data), new); 2025b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2026b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence namespace = new; 2027b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence while (namespace->flavor != CIL_MACRO && namespace->flavor != CIL_BLOCK && namespace->flavor != CIL_ROOT) { 2028b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence namespace = namespace->parent; 2029b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2030b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2031b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (namespace->flavor == CIL_MACRO) { 2032b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_macro *macro = namespace->data; 2033b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_list *param_list = macro->params; 2034b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (param_list != NULL) { 2035b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_list_item *item; 2036b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_list_for_each(item, param_list) { 2037b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence param = item->data; 2038b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (param->flavor == new->flavor) { 2039b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (param->str == ((struct cil_symtab_datum*)new->data)->name) { 204046b3a555981927b47d6a19bd941ccd99085cce18James Carter cil_tree_log(orig, CIL_ERR, "%s %s shadows a macro parameter", cil_node_to_string(new), ((struct cil_symtab_datum*)orig->data)->name); 204146b3a555981927b47d6a19bd941ccd99085cce18James Carter cil_tree_log(namespace, CIL_ERR, "Note: macro declaration"); 2042b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence rc = SEPOL_ERR; 2043b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 2044b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2045b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2046b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2047b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2048b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2049b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2050b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 205176ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence if (new->flavor == CIL_BLOCKINHERIT) { 205276ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence blockinherit = new->data; 2053b6e519e54261d14d553a28bcd1fed88f96752c26Steve Lawrence // if a blockinherit statement is copied before blockinherit are 2054b6e519e54261d14d553a28bcd1fed88f96752c26Steve Lawrence // resolved (like in an in-statement), the block will not have been 2055b6e519e54261d14d553a28bcd1fed88f96752c26Steve Lawrence // resolved yet, so there's nothing to append yet. This is fine, 2056b6e519e54261d14d553a28bcd1fed88f96752c26Steve Lawrence // the copied blockinherit statement will be handled later, as if 2057b6e519e54261d14d553a28bcd1fed88f96752c26Steve Lawrence // it wasn't in an in-statement 2058b6e519e54261d14d553a28bcd1fed88f96752c26Steve Lawrence if (blockinherit->block != NULL) { 2059b6e519e54261d14d553a28bcd1fed88f96752c26Steve Lawrence cil_list_append(blockinherit->block->bi_nodes, CIL_NODE, new); 2060b6e519e54261d14d553a28bcd1fed88f96752c26Steve Lawrence } 206176ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence } 206276ba6eaa7333483a8cc0c73a7880f7acf99c2656Steve Lawrence 2063b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (parent->cl_head == NULL) { 2064b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence parent->cl_head = new; 2065b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence parent->cl_tail = new; 2066b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 2067b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence parent->cl_tail->next = new; 2068b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence parent->cl_tail = new; 2069b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2070b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2071b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (orig->cl_head != NULL) { 2072b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence args->dest = new; 2073b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2074b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } else { 2075b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 2076b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2077b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2078b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 2079b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2080b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceexit: 2081b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_tree_node_destroy(&new); 2082b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return rc; 2083b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 2084b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2085b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint __cil_copy_last_child_helper(__attribute__((unused)) struct cil_tree_node *orig, void *extra_args) 2086b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 2087b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_tree_node *node = NULL; 2088b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_args_copy *args = NULL; 2089b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2090b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence args = extra_args; 2091b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence node = args->dest; 2092b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2093b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (node->flavor != CIL_ROOT) { 2094b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence args->dest = node->parent; 2095b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2096b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2097b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 2098b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 2099b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2100b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence// dest is the parent node to copy into 2101b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence// if the copy is for a call to a macro, dest should be a pointer to the call 2102b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint cil_copy_ast(struct cil_db *db, struct cil_tree_node *orig, struct cil_tree_node *dest) 2103b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{ 2104b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence int rc = SEPOL_ERR; 2105b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence struct cil_args_copy extra_args; 2106b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2107b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence extra_args.dest = dest; 2108b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence extra_args.db = db; 2109b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2110b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence rc = cil_tree_walk(orig, __cil_copy_node_helper, NULL, __cil_copy_last_child_helper, &extra_args); 2111b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence if (rc != SEPOL_OK) { 2112b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence cil_log(CIL_INFO, "cil_tree_walk failed, rc: %d\n", rc); 2113b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence goto exit; 2114b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence } 2115b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2116b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return SEPOL_OK; 2117b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2118b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceexit: 2119b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence return rc; 2120b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence} 2121b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence 2122