-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 This patch looks good to me. acked. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.13 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iEYEARECAAYFAlD+qS4ACgkQrlYvE4MpobMKgACg3LqyOtNOYMtxJ5uIPSHHYwrw QsMAoKZdq7bviKsXaVJ1J6AhZ+7kW8u3 =K78H -----END PGP SIGNATURE-----
>From ab51c7260ee375c8094c72d54aab86289133b7d8 Mon Sep 17 00:00:00 2001 From: Eric Paris <eparis@xxxxxxxxxx> Date: Fri, 21 Dec 2012 16:56:10 -0500 Subject: [PATCH 77/84] libselinux: audit2why: use the new constraint information Signed-off-by: Eric Paris <eparis@xxxxxxxxxx> --- libselinux/src/audit2why.c | 58 ++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/libselinux/src/audit2why.c b/libselinux/src/audit2why.c index df8a54c..8d52c78 100644 --- a/libselinux/src/audit2why.c +++ b/libselinux/src/audit2why.c @@ -286,10 +286,12 @@ static PyObject *init(PyObject *self __attribute__((unused)), PyObject *args) { } #define RETURN(X) \ - PyTuple_SetItem(result, 0, Py_BuildValue("i", X)); \ - return result; + { \ + return Py_BuildValue("iO", (X), Py_None); \ + } static PyObject *analyze(PyObject *self __attribute__((unused)) , PyObject *args) { + char *reason_buf = NULL; security_context_t scon; security_context_t tcon; char *tclassstr; @@ -304,10 +306,6 @@ static PyObject *analyze(PyObject *self __attribute__((unused)) , PyObject *args struct sepol_av_decision avd; int rc; int i=0; - PyObject *result = PyTuple_New(2); - if (!result) return NULL; - Py_INCREF(Py_None); - PyTuple_SetItem(result, 1, Py_None); if (!PyArg_ParseTuple(args,(char *)"sssO!:audit2why",&scon,&tcon,&tclassstr,&PyList_Type, &listObj)) return NULL; @@ -318,22 +316,21 @@ static PyObject *analyze(PyObject *self __attribute__((unused)) , PyObject *args /* should raise an error here. */ if (numlines < 0) return NULL; /* Not a list */ - if (!avc) { + if (!avc) RETURN(NOPOLICY) - } rc = sepol_context_to_sid(scon, strlen(scon) + 1, &ssid); - if (rc < 0) { + if (rc < 0) RETURN(BADSCON) - } + rc = sepol_context_to_sid(tcon, strlen(tcon) + 1, &tsid); - if (rc < 0) { + if (rc < 0) RETURN(BADTCON) - } + tclass = string_to_security_class(tclassstr); - if (!tclass) { + if (!tclass) RETURN(BADTCLASS) - } + /* Convert the permission list to an AV. */ av = 0; @@ -353,21 +350,20 @@ static PyObject *analyze(PyObject *self __attribute__((unused)) , PyObject *args #endif perm = string_to_av_perm(tclass, permstr); - if (!perm) { + if (!perm) RETURN(BADPERM) - } + av |= perm; } /* Reproduce the computation. */ - rc = sepol_compute_av_reason(ssid, tsid, tclass, av, &avd, &reason); - if (rc < 0) { + rc = sepol_compute_av_reason_buffer(ssid, tsid, tclass, av, &avd, &reason, &reason_buf, 0); + if (rc < 0) RETURN(BADCOMPUTE) - } - if (!reason) { + if (!reason) RETURN(ALLOW) - } + if (reason & SEPOL_COMPUTEAV_TE) { avc->ssid = ssid; avc->tsid = tsid; @@ -380,28 +376,34 @@ static PyObject *analyze(PyObject *self __attribute__((unused)) , PyObject *args RETURN(TERULE) } } else { - PyTuple_SetItem(result, 0, Py_BuildValue("i", BOOLEAN)); + PyObject *outboollist; struct boolean_t *b = bools; int len=0; while (b->name) { len++; b++; } b = bools; - PyObject *outboollist = PyTuple_New(len); + outboollist = PyList_New(len); len=0; while(b->name) { - PyObject *bool = Py_BuildValue("(si)", b->name, b->active); - PyTuple_SetItem(outboollist, len++, bool); + PyObject *bool_ = Py_BuildValue("(si)", b->name, b->active); + PyList_SetItem(outboollist, len++, bool_); b++; } free(bools); - PyTuple_SetItem(result, 1, outboollist); - return result; + /* 'N' steals the reference to outboollist */ + return Py_BuildValue("iN", BOOLEAN, outboollist); } } if (reason & SEPOL_COMPUTEAV_CONS) { - RETURN(CONSTRAINT); + if (reason_buf) { + PyObject *result = NULL; + result = Py_BuildValue("is", CONSTRAINT, reason_buf); + free(reason_buf); + return result; + } + RETURN(CONSTRAINT) } if (reason & SEPOL_COMPUTEAV_RBAC) -- 1.8.1