All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joshua Brindle <method@manicmethod.com>
To: Stephen Smalley <sds@tycho.nsa.gov>
Cc: Joshua Brindle <jbrindle@tresys.com>,
	selinux@tycho.nsa.gov, Daniel J Walsh <dwalsh@redhat.com>
Subject: Re: [PATCH] libsemanage:  Add semanage_mls_enabled interface
Date: Tue, 11 Nov 2008 15:10:35 -0500	[thread overview]
Message-ID: <4919E6BB.6080107@manicmethod.com> (raw)
In-Reply-To: <1226349176.8814.62.camel@moss-spartans.epoch.ncsc.mil>

Stephen Smalley wrote:
> Add a semanage_mls_enabled() interface to libsemanage so that
> semanage/seobject can be rewritten to use it to test whether MLS is
> enabled for a given policy store rather than checking the runtime MLS
> enabled status, which can be misleading when using semanage on a
> SELinux-disabled host or when using semanage on a store other than the
> active one.  Sample usage:
> 	from semanage import *
> 	handle = semanage_handle_create()
> 	rc = semanage_connect(handle)
> 	rc = semanage_mls_enabled(handle)
>
> diff --git a/libsemanage/include/semanage/handle.h b/libsemanage/include/semanage/handle.h
> index e065070..0123d1d 100644
> --- a/libsemanage/include/semanage/handle.h
> +++ b/libsemanage/include/semanage/handle.h
> @@ -117,6 +117,9 @@ int semanage_access_check(semanage_handle_t * sh);
>  /* returns 0 if not connected, 1 if connected */
>  int semanage_is_connected(semanage_handle_t * sh);
>  
> +/* returns 1 if policy is MLS, 0 otherwise. */
> +int semanage_mls_enabled(semanage_handle_t *sh);
> +
>  /* META NOTES
>   *
>   * For all functions a non-negative number indicates success. For some
> diff --git a/libsemanage/src/direct_api.c b/libsemanage/src/direct_api.c
> index 1732758..88f35a6 100644
> --- a/libsemanage/src/direct_api.c
> +++ b/libsemanage/src/direct_api.c
> @@ -1050,3 +1050,22 @@ int semanage_direct_access_check(semanage_handle_t * sh)
>  
>  	return semanage_store_access_check(sh);
>  }
> +
> +int semanage_direct_mls_enabled(semanage_handle_t * sh)
> +{
> +	sepol_policydb_t *p = NULL;
> +	int retval;
> +
> +	retval = sepol_policydb_create(&p);
> +	if (retval < 0)
> +		goto cleanup;
> +	
> +	retval = semanage_read_policydb(sh, p);
> +	if (retval < 0)
> +		goto cleanup;
> +
> +	retval = sepol_policydb_mls_enabled(p);
> +cleanup:
> +	sepol_policydb_free(p);
> +	return retval;
> +}
> diff --git a/libsemanage/src/direct_api.h b/libsemanage/src/direct_api.h
> index 8f625f5..ffd428e 100644
> --- a/libsemanage/src/direct_api.h
> +++ b/libsemanage/src/direct_api.h
> @@ -37,4 +37,6 @@ int semanage_direct_is_managed(struct semanage_handle *sh);
>  
>  int semanage_direct_access_check(struct semanage_handle *sh);
>  
> +int semanage_direct_mls_enabled(struct semanage_handle *sh);
> +
>  #endif
> diff --git a/libsemanage/src/handle.c b/libsemanage/src/handle.c
> index b94db11..95e10c1 100644
> --- a/libsemanage/src/handle.c
> +++ b/libsemanage/src/handle.c
> @@ -157,6 +157,20 @@ int semanage_is_managed(semanage_handle_t * sh)
>  	return -1;
>  }
>  
> +int semanage_mls_enabled(semanage_handle_t * sh)
> +{
> +	assert(sh != NULL);
> +	switch (sh->conf->store_type) {
> +	case SEMANAGE_CON_DIRECT:
> +		return semanage_direct_mls_enabled(sh);
> +	default:
> +		ERR(sh,
> +		    "The connection type specified within your semanage.conf file has not been implemented yet.");
> +		/* fall through */
> +	}
> +	return -1;
> +}
> +
>  int semanage_connect(semanage_handle_t * sh)
>  {
>  	assert(sh != NULL);
> diff --git a/libsemanage/src/libsemanage.map b/libsemanage/src/libsemanage.map
> index 56a83f0..ae11ade 100644
> --- a/libsemanage/src/libsemanage.map
> +++ b/libsemanage/src/libsemanage.map
> @@ -14,5 +14,6 @@ LIBSEMANAGE_1.0 {
>  	  semanage_node_*;
>  	  semanage_fcontext_*; semanage_access_check; semanage_set_create_store;
>  	  semanage_is_connected; semanage_set_disable_dontaudit;
> +	  semanage_mls_enabled;
>    local: *;
>  };
> diff --git a/libsemanage/src/semanage.py b/libsemanage/src/semanage.py
> index 6a2327a..56e5a14 100644
> --- a/libsemanage/src/semanage.py
> +++ b/libsemanage/src/semanage.py
> @@ -76,6 +76,7 @@ SEMANAGE_CAN_READ = _semanage.SEMANAGE_CAN_READ
>  SEMANAGE_CAN_WRITE = _semanage.SEMANAGE_CAN_WRITE
>  semanage_access_check = _semanage.semanage_access_check
>  semanage_is_connected = _semanage.semanage_is_connected
> +semanage_mls_enabled = _semanage.semanage_mls_enabled
>  semanage_module_install = _semanage.semanage_module_install
>  semanage_module_upgrade = _semanage.semanage_module_upgrade
>  semanage_module_install_base = _semanage.semanage_module_install_base
> diff --git a/libsemanage/src/semanageswig_wrap.c b/libsemanage/src/semanageswig_wrap.c
> index 86736b0..afa3dc2 100644
> --- a/libsemanage/src/semanageswig_wrap.c
> +++ b/libsemanage/src/semanageswig_wrap.c
> @@ -3400,6 +3400,28 @@ fail:
>  }
>  
>  
> +SWIGINTERN PyObject *_wrap_semanage_mls_enabled(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
> +  PyObject *resultobj = 0;
> +  semanage_handle_t *arg1 = (semanage_handle_t *) 0 ;
> +  int result;
> +  void *argp1 = 0 ;
> +  int res1 = 0 ;
> +  PyObject * obj0 = 0 ;
> +  
> +  if (!PyArg_ParseTuple(args,(char *)"O:semanage_mls_enabled",&obj0)) SWIG_fail;
> +  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_semanage_handle, 0 |  0 );
> +  if (!SWIG_IsOK(res1)) {
> +    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "semanage_mls_enabled" "', argument " "1"" of type '" "semanage_handle_t *""'"); 
> +  }
> +  arg1 = (semanage_handle_t *)(argp1);
> +  result = (int)semanage_mls_enabled(arg1);
> +  resultobj = SWIG_From_int((int)(result));
> +  return resultobj;
> +fail:
> +  return NULL;
> +}
> +
> +
>  SWIGINTERN PyObject *_wrap_semanage_module_install(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
>    PyObject *resultobj = 0;
>    semanage_handle_t *arg1 = (semanage_handle_t *) 0 ;
> @@ -11391,6 +11413,7 @@ static PyMethodDef SwigMethods[] = {
>  	 { (char *)"semanage_commit", _wrap_semanage_commit, METH_VARARGS, NULL},
>  	 { (char *)"semanage_access_check", _wrap_semanage_access_check, METH_VARARGS, NULL},
>  	 { (char *)"semanage_is_connected", _wrap_semanage_is_connected, METH_VARARGS, NULL},
> +	 { (char *)"semanage_mls_enabled", _wrap_semanage_mls_enabled, METH_VARARGS, NULL},
>  	 { (char *)"semanage_module_install", _wrap_semanage_module_install, METH_VARARGS, NULL},
>  	 { (char *)"semanage_module_upgrade", _wrap_semanage_module_upgrade, METH_VARARGS, NULL},
>  	 { (char *)"semanage_module_install_base", _wrap_semanage_module_install_base, METH_VARARGS, NULL},
>
>
>   

Signed-off-by: Joshua Brindle <method@manicmethod.com>

Merge at will.


--
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.

  reply	other threads:[~2008-11-11 20:10 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-10 20:32 [PATCH] libsemanage: Add semanage_mls_enabled interface Stephen Smalley
2008-11-11 20:10 ` Joshua Brindle [this message]
2008-11-12 14:43 ` [PATCH] semanage: Use semanage_mls_enabled Stephen Smalley
2008-11-12 20:57   ` Joshua Brindle
2008-11-14 22:17   ` Daniel J Walsh
2008-11-17 13:54     ` Stephen Smalley

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=4919E6BB.6080107@manicmethod.com \
    --to=method@manicmethod.com \
    --cc=dwalsh@redhat.com \
    --cc=jbrindle@tresys.com \
    --cc=sds@tycho.nsa.gov \
    --cc=selinux@tycho.nsa.gov \
    /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.