Research
.
Skip Search Box

SELinux Mailing List

[POLICYREP] [patch 2/7] remove policy_package

From: Joshua Brindle <method_at_manicmethod.com>
Date: Tue, 22 Jan 2008 14:43:33 -0500


We chose to go with a flat text file format rather than an archive so remove the xar package bits

---

 libpolicyrep/include/policyrep/policy_package.hpp |   72 ---
 libpolicyrep/src/policy_package.cpp               |  463 ----------------------
 policycoreutils/semodule_package/Makefile         |    2 
 3 files changed, 1 insertion(+), 536 deletions(-)
  • policyrep.new.orig/libpolicyrep/include/policyrep/policy_package.hpp +++ /dev/null @@ -1,72 +0,0 @@
    -/* Author: Joshua Brindle <method@manicmethod.com> */
    -
    -#ifndef __policy_package_hpp__
    -#define __policy_package_hpp__
    -
    -#include <policyrep/policy.hpp>
    -
    -namespace policyrep {
    -
    -struct PolicyPackageImpl;
    -
    -class PolicyPackage {
    -public:
    • PolicyPackage();
    • virtual ~ PolicyPackage();
      -
    • virtual Module & get_policy_module() const;
    • virtual void set_policy_module(Module & module);
      -
    • virtual char *get_file_contexts() const;
    • virtual void set_file_contexts(char *fc);
    • virtual char *get_seusers() const;
    • virtual void set_seusers(char *su);
    • virtual char *get_user_extra() const;
    • virtual void set_user_extra(char *ue);
    • virtual char *get_netfilter_contexts() const;
    • virtual void set_netfilter_contexts(char *nf);
      -
    • virtual void read(char *filename);
    • // PolicyPackage.write does not currently work pending
    • // a bug fix in xar
    • virtual void write(char *filename);
      -
      -protected:
    • void init();
    • PolicyPackageImpl *impl;
      -
      -};
      -
      -// This is a simple archival class that allows a dumb packager
      -// e.g., semodule_package to simply set the pathnames for each
      -// file in the policy package and call create_archive.
      -
      -struct PolicyPackageArchiveImpl;
      -
      -class PolicyPackageArchive {
      -public:
    • PolicyPackageArchive();
    • virtual ~ PolicyPackageArchive();
      -
    • virtual void set_mod_file(char *mod);
    • virtual char *get_mod_file() const;
    • virtual void set_fc_file(char *fc);
    • virtual char *get_fc_file() const;
    • virtual void set_seusers_file(char *su);
    • virtual char *get_seusers_file() const;
    • virtual void set_user_extra_file(char *ue);
    • virtual char *get_user_extra_file() const;
    • virtual void set_nc_file(char *nf);
    • virtual char *get_nc_file() const;
      -
    • virtual void create_archive(char *filename);
      -
      -protected:
    • void init();
    • PolicyPackageArchiveImpl *impl;
      -
      -};
      -
      -} // namespace policyrep
      -
      -#endif
  • policyrep.new.orig/libpolicyrep/src/policy_package.cpp +++ /dev/null @@ -1,463 +0,0 @@
    -/*
    • * Author : Joshua Brindle <method@manicmethod.com>
    • *
    • * Copyright (C) 2007 Tresys Technology, llc.
    • *
    • * This library is free software; you can redistribute it and/or
    • * modify it under the terms of the GNU Lesser General Public
    • * License as published by the Free Software Foundation; either
    • * version 2.1 of the License, or (at your option) any later version.
    • *
    • * This library is distributed in the hope that it will be useful,
    • * but WITHOUT ANY WARRANTY; without even the implied warranty of
    • * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    • * Lesser General Public License for more details.
    • *
    • * You should have received a copy of the GNU Lesser General Public
    • * License along with this library; if not, write to the Free Software
    • * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    • */
      -
      -extern "C" {
      -#include <xar/xar.h>
      -#include <string.h>
      -}
      -
      -#define SELINUX_XAR_PROPERTY "selinuxfiletype"
      -
      -#include <policyrep/parse.hpp>
      -#include <policyrep/policy_package.hpp>
      -#include <sstream>
      -#include <iostream>
      -#include <stdexcept>
      -
      -namespace policyrep {
      -
      -struct PolicyPackageImpl {
    • Module & policy_module;
    • char *file_contexts;
    • char *seusers;
    • char *user_extra;
    • char *netfilter_contexts;
      -};
      -
      -void PolicyPackage::init() {
    • impl = new PolicyPackageImpl;
    • impl->file_contexts = NULL;
    • impl->seusers = NULL;
    • impl->user_extra = NULL;
    • impl->netfilter_contexts = NULL;
      -}
      -
      -PolicyPackage::PolicyPackage() {
    • init();
      -}
      -
      -Module & PolicyPackage::get_policy_module() const {
    • return impl->policy_module;
      -}
      -
      -void PolicyPackage::set_policy_module(Module & module) {
    • impl->policy_module = module;
      -}
      -
      -char *PolicyPackage::get_file_contexts() const {
    • return impl->file_contexts;
      -}
      -
      -void PolicyPackage::set_file_contexts(char *fc) {
    • impl->file_contexts = fc;
      -}
      -
      -char *PolicyPackage::get_seusers() const {
    • return impl->seusers;
      -}
      -
      -void PolicyPackage::set_seusers(char *se) {
    • impl->seusers = se;
      -}
      -
      -char *PolicyPackage::get_user_extra() const {
    • return impl->user_extra;
      -}
      -
      -void PolicyPackage::set_user_extra(char *ue) {
    • impl->user_extra = ue;
      -}
      -
      -char *PolicyPackage::get_netfilter_contexts() const {
    • return impl->netfilter_contexts;
      -}
      -
      -void PolicyPackage::set_netfilter_contexts(char *nc) {
    • impl->netfilter_contexts = nc;
      -}
      -
      -void PolicyPackage::read(char *filename) {
    • xar_t x;
    • xar_file_t f;
    • xar_iter_t i;
      -
    • i = xar_iter_new();
      -
    • if (i == NULL) {
    • throw std::bad_alloc();
    • }
      -
    • x = xar_open(filename, READ);
      -
    • if (x == NULL) {
    • throw std::
    • runtime_error("Unable to open policy package");
    • }
      -
    • for (f = xar_file_first(x, i); f; f = xar_file_next(i)) {
    • size_t sz;
    • char *fbuf;
    • const char *filetype;
    • int32_t ret;
      -
    • ret = xar_extract_tobuffersz(x, f, &fbuf, &sz);
      -
    • if (ret) {
    • // This can happen if the file is 0 bytes
    • // or is a symlink, directory, etc. We might want
    • // to put code here to check those cases and bail
    • // but for now we just ignore them and continue.
    • continue;
    • }
      -
    • ret = xar_prop_get(f, SELINUX_XAR_PROPERTY, &filetype);
      -
    • if (ret) {
    • xar_close(x);
    • throw std::runtime_error("Error getting name property of file");
    • }
      -
    • if (strcmp(filetype, "policy_module") == 0) {
    • Parser p;
    • // TODO add parser constructor that takes a char * and call here
    • continue;
    • } else if (strcmp(filetype, "file_contexts") == 0) {
    • if (impl->file_contexts) {
    • xar_close(x);
    • throw std::range_error("Multiple file_contexts files in policy package");
    • }
      -
    • impl->file_contexts = fbuf;
      -
    • continue;
    • } else if (strcmp(filetype, "seusers") == 0) {
    • if (impl->seusers) {
    • xar_close(x);
    • throw std::range_error("Multiple seusers files in policy package");
    • }
      -
    • impl->seusers = fbuf;
      -
    • continue;
    • } else if (strcmp(filetype, "user_extra") == 0) {
    • if (impl->user_extra) {
    • xar_close(x);
    • throw std::range_error("Multiple user_extra files in policy package");
    • }
      -
    • impl->user_extra = fbuf;
      -
    • continue;
    • } else if (strcmp(filetype, "netfilter_contexts") == 0) {
    • if (impl->netfilter_contexts) {
    • xar_close(x);
    • throw std::range_error("Multiple netfilter_contexts files in policy package");
    • }
      -
    • impl->netfilter_contexts = fbuf;
      -
    • continue;
    • } else {
    • // unrecognized file, just skip it
    • free(fbuf);
    • continue;
    • }
      -
    • }
      -
    • xar_close(x);
      -}
      -
      -void PolicyPackage::write(char *filename) {
      -
    • // just return -1 for now, this method exposes a xar bug and won't
    • // work until the bug is fixed.
      -
    • return;
      -
    • xar_t x;
    • xar_file_t f;
      -
    • x = xar_open(filename, WRITE);
      -
    • if (x == NULL) {
    • throw std::
    • runtime_error("Unable to open policy package");
    • }
      -
    • if (!impl->policy_module.get_name().empty()) {
    • std::stringstream s;
    • char *buf;
      -
    • // TODO fix this when the output system has been updated - jjb
      -#if 0
    • output_tree(s, impl->policy_module);
      -
    • if (s.str().empty()) {
    • throw std::runtime_error("Error serializing module");
    • }
      -
    • buf = strdup(s.str().c_str());
      -
    • f = xar_add_frombuffer(x, NULL, "policy_module", buf, s.str().length());
    • free(buf);
      -
    • if (!f) {
    • xar_close(x);
    • throw std::runtime_error("Error writing policy module to policy package");
    • }
      -
    • if (xar_prop_set(f, SELINUX_XAR_PROPERTY, "policy_module")) {
    • xar_close(x);
    • throw std::runtime_error("Error setting policy_module property in policy package");
    • }
      -
      -#endif
    • }
      -
    • if (impl->file_contexts) {
    • f = xar_add_frombuffer(x, NULL, "file_contexts",
    • impl->file_contexts,
    • strlen(impl->file_contexts));
      -
    • if (!f) {
    • xar_close(x);
    • throw std::runtime_error("Error writing file_contexts to policy package");
    • }
      -
    • if (xar_prop_set(f, SELINUX_XAR_PROPERTY, "file_contexts")) {
    • xar_close(x);
    • throw std::runtime_error("Error setting file_contexts property in policy package");
    • }
    • }
      -
    • if (impl->seusers) {
    • f = xar_add_frombuffer(x, NULL, "seusers",
    • impl->seusers,
    • strlen(impl->seusers));
      -
    • if (!f) {
    • xar_close(x);
    • throw std::runtime_error("Error writing seusers to policy package");
    • }
      -
    • if (xar_prop_set(f, SELINUX_XAR_PROPERTY, "seusers")) {
    • xar_close(x);
    • throw std::runtime_error("Error setting seusers property in policy package");
    • }
    • }
      -
    • if (impl->user_extra) {
    • f = xar_add_frombuffer(x, NULL, "user_extra",
    • impl->user_extra,
    • strlen(impl->user_extra));
      -
    • if (!f) {
    • xar_close(x);
    • throw std::runtime_error("Error writing user_extra to policy package");
    • }
      -
    • if (xar_prop_set(f, SELINUX_XAR_PROPERTY, "user_extra")) {
    • xar_close(x);
    • throw std::runtime_error("Error setting user_extra property in policy package");
    • }
    • }
      -
    • if (impl->netfilter_contexts) {
    • f = xar_add_frombuffer(x, NULL, "netfilter_contexts",
    • impl->netfilter_contexts,
    • strlen(impl->
    • netfilter_contexts));
      -
    • if (!f) {
    • xar_close(x);
    • throw std::runtime_error("Error writing netfilter_contexts to policy package");
    • }
      -
    • if (xar_prop_set(f, SELINUX_XAR_PROPERTY, "netfilter_contexts")) {
    • xar_close(x);
    • throw std::runtime_error("Error setting netfilter_contexts property in policy package");
    • }
    • }
      -
    • xar_close(x);
      -}
      -
      -PolicyPackage::~PolicyPackage() {
    • delete impl;
      -}
      -
      -//
      -// PolicyPackageArchive
      -// This class is used for creating a policy package file from individual files.
      -// Set the filenames for each kind of file (module, file_contexts, etc) then
      -// call create_archive.
      -
      -struct PolicyPackageArchiveImpl {
    • char *mod_file;
    • char *fc_file;
    • char *seusers_file;
    • char *user_extra_file;
    • char *nc_file;
      -};
      -
      -void PolicyPackageArchive::init() {
    • impl = new PolicyPackageArchiveImpl;
    • impl->mod_file = NULL;
    • impl->fc_file = NULL;
    • impl->seusers_file = NULL;
    • impl->user_extra_file = NULL;
    • impl->nc_file = NULL;
      -}
      -
      -PolicyPackageArchive::PolicyPackageArchive() {
    • init();
      -}
      -
      -void PolicyPackageArchive::set_mod_file(char *mod) {
    • impl->mod_file = mod;
      -}
      -
      -char *PolicyPackageArchive::get_mod_file() const {
    • return impl->mod_file;
      -}
      -
      -void PolicyPackageArchive::set_fc_file(char *fc) {
    • impl->fc_file = fc;
      -}
      -
      -char *PolicyPackageArchive::get_fc_file() const {
    • return impl->fc_file;
      -}
      -
      -void PolicyPackageArchive::set_seusers_file(char *su) {
    • impl->seusers_file = su;
      -}
      -
      -char *PolicyPackageArchive::get_seusers_file() const {
    • return impl->seusers_file;
      -}
      -
      -void PolicyPackageArchive::set_user_extra_file(char *ue) {
    • impl->user_extra_file = ue;
      -}
      -
      -char *PolicyPackageArchive::get_user_extra_file() const {
    • return impl->user_extra_file;
      -}
      -
      -void PolicyPackageArchive::set_nc_file(char *nc) {
    • impl->nc_file = nc;
      -}
      -
      -char *PolicyPackageArchive::get_nc_file() const {
    • return impl->nc_file;
      -}
      -
      -void PolicyPackageArchive::create_archive(char *filename) {
    • xar_t x;
    • xar_file_t f;
      -
    • x = xar_open(filename, WRITE);
      -
    • if (x == NULL) {
    • throw std::runtime_error("Unable to open policy package");
    • }
      -
    • if (impl->mod_file) {
    • f = xar_add(x, impl->mod_file);
      -
    • if (!f) {
    • xar_close(x);
    • throw std::runtime_error("Error writing module to policy package");
    • }
      -
    • if (xar_prop_set(f, SELINUX_XAR_PROPERTY, "module")) {
    • xar_close(x);
    • throw std::runtime_error("Error setting module property in policy package");
    • }
    • }
      -
    • if (impl->fc_file) {
    • f = xar_add(x, impl->fc_file);
      -
    • if (!f) {
    • xar_close(x);
    • throw std::runtime_error("Error writing file_contexts to policy package");
    • }
      -
    • if (xar_prop_set
    • (f, SELINUX_XAR_PROPERTY, "file_contexts")) {
    • xar_close(x);
    • throw std::runtime_error("Error setting file_contexts property in policy package");
    • }
    • }
      -
    • if (impl->seusers_file) {
    • f = xar_add(x, impl->seusers_file);
      -
    • if (!f) {
    • xar_close(x);
    • throw std::runtime_error("Error writing seusers to policy package");
    • }
      -
    • if (xar_prop_set(f, SELINUX_XAR_PROPERTY, "seusers")) {
    • xar_close(x);
    • throw std::runtime_error("Error setting seusers property in policy package");
    • }
    • }
      -
    • if (impl->user_extra_file) {
    • f = xar_add(x, impl->user_extra_file);
      -
    • if (!f) {
    • xar_close(x);
    • throw std::runtime_error("Error writing user_extra to policy package");
    • }
      -
    • if (xar_prop_set(f, SELINUX_XAR_PROPERTY, "user_extra")) {
    • xar_close(x);
    • throw std::runtime_error("Error setting user_extra property in policy package");
    • }
    • }
      -
    • if (impl->nc_file) {
    • f = xar_add(x, impl->nc_file);
      -
    • if (!f) {
    • xar_close(x);
    • throw std::runtime_error("Error writing netfilter_contexts to policy package");
    • }
      -
    • if (xar_prop_set
    • (f, SELINUX_XAR_PROPERTY, "netfilter_contexts")) {
    • xar_close(x);
    • throw std::runtime_error("Error setting netfilter_contexts property in policy package");
    • }
    • }
      -
    • xar_close(x);
      -}
      -
      -PolicyPackageArchive::~PolicyPackageArchive() {
    • delete impl;
      -}
      -
      -} // namespace policyrep
  • policyrep.new.orig/policycoreutils/semodule_package/Makefile +++ policyrep.new/policycoreutils/semodule_package/Makefile @@ -7,7 +7,7 @@ MANDIR ?= $(PREFIX)/share/man

 CFLAGS ?= -Werror -Wall -W
 override CFLAGS += -I$(INCLUDEDIR)
-LDLIBS = -lpolicyrep -lxar -lselinux -L$(LIBDIR)
+LDLIBS = -lpolicyrep -lselinux -L$(LIBDIR)  

 all: semodule_package  

--

--

This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with the words "unsubscribe selinux" without quotes as the message. Received on Tue 22 Jan 2008 - 14:44:18 EST

 

Date Posted: Jan 15, 2009 | Last Modified: Jan 15, 2009 | Last Reviewed: Jan 15, 2009

 
bottom

National Security Agency / Central Security Service