From d5e490138e96633dddad6c7a65e917a6ccdc3fba Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Thu, 9 Dec 2004 13:05:41 +0000 Subject: [PATCH] vc_getfilecontext(): as noticed by daniel_hozac in IRC, this function was horribly broken. Fixed and moved it into an own file as it is too complex for an inline function. Documentation was added also. git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1766 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- util-vserver/lib/getfilecontext.c | 38 ++++++++++++++++++++++++++++++++++++++ util-vserver/lib/vserver.h | 23 ++++++++++++++++------- 2 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 util-vserver/lib/getfilecontext.c diff --git a/util-vserver/lib/getfilecontext.c b/util-vserver/lib/getfilecontext.c new file mode 100644 index 0000000..b857d91 --- /dev/null +++ b/util-vserver/lib/getfilecontext.c @@ -0,0 +1,38 @@ +// $Id$ --*- c -*-- + +// Copyright (C) 2004 Enrico Scholz +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// This program 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "vserver.h" +#include + +xid_t vc_getfilecontext(char const *filename) +{ + xid_t res; + uint32_t mask = VC_IATTR_XID; + + if (vc_get_iattr(filename, &res, 0,&mask)==-1) + return VC_NOCTX; + else if ((mask&VC_IATTR_XID) && res!=VC_NOCTX) + return res; + + errno = 0; + return VC_NOCTX; +} diff --git a/util-vserver/lib/vserver.h b/util-vserver/lib/vserver.h index 9a4bf7b..18c0c93 100644 --- a/util-vserver/lib/vserver.h +++ b/util-vserver/lib/vserver.h @@ -258,7 +258,7 @@ extern "C" { * \param remove_cap The linux capabilities which will be \b removed. * \param flags Special flags which will be set. * - * \returns The new context-id, or VC_NOCTX on errors; errno + * \returns The new context-id, or VC_NOCTX on errors; \c errno * will be set appropriately * * See http://vserver.13thfloor.at/Stuff/Logic.txt for details */ @@ -287,7 +287,7 @@ extern "C" { * \param xid The new context; special values are: * - VC_DYNAMIC_XID which means to create a dynamic context * - * \returns the xid of the created context, or VC_NOCTX on errors. errno + * \returns the xid of the created context, or VC_NOCTX on errors. \c errno * will be set appropriately. */ xid_t vc_ctx_create(xid_t xid); @@ -602,11 +602,20 @@ extern "C" { return vc_set_iattr(filename, xid, 0, VC_IATTR_XID); } - inline static xid_t vc_getfilecontext(char const *filename) { - xid_t res; - if (vc_get_iattr(filename, &res, 0,0)==-1) return VC_NOCTX; - return res; - } + /** \brief Returns the context of \c filename + * \ingroup syscalls + * + * This function calls vc_get_iattr() with appropriate arguments to + * determine the context of \c filename. In error-case or when no context + * is assigned, \c VC_NOCTX will be returned. To differ between both cases, + * \c errno must be examined. + * + * \b WARNING: this function can modify \c errno although no error happened. + * + * \param filename The file to check + * \returns The assigned context, or VC_NOCTX when an error occured or no + * such assignment exists. \c errno will be 0 in the latter case */ + xid_t vc_getfilecontext(char const *filename) VC_ATTR_NONNULL((1)); struct vc_set_sched { -- 1.8.1.5