From: Joshua Brindle <method@manicmethod.com>
To: selinux@tycho.nsa.gov
Cc: sds@tycho.nsa.gov, kmacmillan@mentalrootkit.com, tmiller@tresys.com
Subject: [POLICYREP] [patch 2/7] remove policy_package
Date: Tue, 22 Jan 2008 14:43:33 -0500 [thread overview]
Message-ID: <20080121160225.881198213@manicmethod.com> (raw)
In-Reply-To: 20080121160031.792610312@manicmethod.com
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.
next prev parent reply other threads:[~2008-01-22 19:43 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-22 19:43 [POLICYREP] [patch 0/7] various cleanups and base symbol class Joshua Brindle
2008-01-22 19:43 ` [POLICYREP] [patch 1/7] remove makefile targets that dont build Joshua Brindle
2008-01-22 19:43 ` Joshua Brindle [this message]
2008-01-22 19:43 ` [POLICYREP] [patch 3/7] remove duplicated optional.hpp data Joshua Brindle
2008-01-22 19:43 ` [POLICYREP] [patch 4/7] symbol base class Joshua Brindle
2008-01-22 19:43 ` [POLICYREP] [patch 5/7] fix operator= calls to return pointer Joshua Brindle
2008-01-22 19:43 ` [POLICYREP] [patch 6/7] add negset to idset Joshua Brindle
2008-01-22 19:43 ` [POLICYREP] [patch 7/7] remove unused copy/init functions Joshua Brindle
2008-01-22 21:29 ` Joshua Brindle
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080121160225.881198213@manicmethod.com \
--to=method@manicmethod.com \
--cc=kmacmillan@mentalrootkit.com \
--cc=sds@tycho.nsa.gov \
--cc=selinux@tycho.nsa.gov \
--cc=tmiller@tresys.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.