|
|
990e34 |
From 4951286eb634c00c11883b851c91f3a21975eabd Mon Sep 17 00:00:00 2001
|
|
|
990e34 |
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
|
|
990e34 |
Date: Tue, 18 Jan 2022 18:03:57 +0100
|
|
|
990e34 |
Subject: [PATCH 171/174] tests/secontext: add secontext field getters
|
|
|
990e34 |
|
|
|
990e34 |
* tests/secontext.h (get_secontext_field, get_secontext_field_file): New
|
|
|
990e34 |
declarations.
|
|
|
990e34 |
* tests/secontext.c (get_type_from_context): Rename to...
|
|
|
990e34 |
(get_secontext_field): ...this; remove "static" qualifier; add "field"
|
|
|
990e34 |
argument, use it.
|
|
|
990e34 |
(raw_expected_secontext_short_file, raw_secontext_short_pid): Replace
|
|
|
990e34 |
get_type_from_context call with get_secontext_field.
|
|
|
990e34 |
(get_secontext_field_file): New function.
|
|
|
990e34 |
(raw_secontext_short_file): Replace body with get_secontext_field_file
|
|
|
990e34 |
call.
|
|
|
990e34 |
---
|
|
|
990e34 |
tests/secontext.c | 27 +++++++++++++++------------
|
|
|
990e34 |
tests/secontext.h | 20 ++++++++++++++++++++
|
|
|
990e34 |
2 files changed, 35 insertions(+), 12 deletions(-)
|
|
|
990e34 |
|
|
|
990e34 |
diff --git a/tests/secontext.c b/tests/secontext.c
|
|
|
990e34 |
index 848eea9..52211ed 100644
|
|
|
990e34 |
--- a/tests/secontext.c
|
|
|
990e34 |
+++ b/tests/secontext.c
|
|
|
990e34 |
@@ -56,8 +56,8 @@ strip_trailing_newlines(char *context)
|
|
|
990e34 |
return context;
|
|
|
990e34 |
}
|
|
|
990e34 |
|
|
|
990e34 |
-static char *
|
|
|
990e34 |
-get_type_from_context(const char *full_context)
|
|
|
990e34 |
+char *
|
|
|
990e34 |
+get_secontext_field(const char *full_context, enum secontext_field field)
|
|
|
990e34 |
{
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
|
|
|
990e34 |
@@ -72,7 +72,7 @@ get_type_from_context(const char *full_context)
|
|
|
990e34 |
char *context = NULL;
|
|
|
990e34 |
for (token = strtok_r(ctx_copy, ":", &saveptr), i = 0;
|
|
|
990e34 |
token; token = strtok_r(NULL, ":", &saveptr), i++) {
|
|
|
990e34 |
- if (i == 2) {
|
|
|
990e34 |
+ if (i == field) {
|
|
|
990e34 |
context = xstrdup(token);
|
|
|
990e34 |
break;
|
|
|
990e34 |
}
|
|
|
990e34 |
@@ -122,7 +122,7 @@ raw_expected_secontext_short_file(const char *filename)
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
|
|
|
990e34 |
char *ctx = raw_expected_secontext_full_file(filename);
|
|
|
990e34 |
- char *type = get_type_from_context(ctx);
|
|
|
990e34 |
+ char *type = get_secontext_field(ctx, SECONTEXT_TYPE);
|
|
|
990e34 |
free(ctx);
|
|
|
990e34 |
|
|
|
990e34 |
errno = saved_errno;
|
|
|
990e34 |
@@ -144,20 +144,23 @@ raw_secontext_full_file(const char *filename)
|
|
|
990e34 |
return full_secontext;
|
|
|
990e34 |
}
|
|
|
990e34 |
|
|
|
990e34 |
-static char *
|
|
|
990e34 |
-raw_secontext_short_file(const char *filename)
|
|
|
990e34 |
+char *
|
|
|
990e34 |
+get_secontext_field_file(const char *file, enum secontext_field field)
|
|
|
990e34 |
{
|
|
|
990e34 |
- int saved_errno = errno;
|
|
|
990e34 |
-
|
|
|
990e34 |
- char *ctx = raw_secontext_full_file(filename);
|
|
|
990e34 |
- char *type = get_type_from_context(ctx);
|
|
|
990e34 |
+ char *ctx = raw_secontext_full_file(file);
|
|
|
990e34 |
+ char *type = get_secontext_field(ctx, field);
|
|
|
990e34 |
free(ctx);
|
|
|
990e34 |
|
|
|
990e34 |
- errno = saved_errno;
|
|
|
990e34 |
return type;
|
|
|
990e34 |
}
|
|
|
990e34 |
|
|
|
990e34 |
static char *
|
|
|
990e34 |
+raw_secontext_short_file(const char *filename)
|
|
|
990e34 |
+{
|
|
|
990e34 |
+ return get_secontext_field_file(filename, SECONTEXT_TYPE);
|
|
|
990e34 |
+}
|
|
|
990e34 |
+
|
|
|
990e34 |
+static char *
|
|
|
990e34 |
raw_secontext_full_pid(pid_t pid)
|
|
|
990e34 |
{
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
@@ -178,7 +181,7 @@ raw_secontext_short_pid(pid_t pid)
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
|
|
|
990e34 |
char *ctx = raw_secontext_full_pid(pid);
|
|
|
990e34 |
- char *type = get_type_from_context(ctx);
|
|
|
990e34 |
+ char *type = get_secontext_field(ctx, SECONTEXT_TYPE);
|
|
|
990e34 |
free(ctx);
|
|
|
990e34 |
|
|
|
990e34 |
errno = saved_errno;
|
|
|
990e34 |
diff --git a/tests/secontext.h b/tests/secontext.h
|
|
|
990e34 |
index 1d0251a..e5571d5 100644
|
|
|
990e34 |
--- a/tests/secontext.h
|
|
|
990e34 |
+++ b/tests/secontext.h
|
|
|
990e34 |
@@ -23,6 +23,15 @@ enum secontext_field {
|
|
|
990e34 |
|
|
|
990e34 |
#if defined TEST_SECONTEXT && defined HAVE_SELINUX_RUNTIME
|
|
|
990e34 |
|
|
|
990e34 |
+/**
|
|
|
990e34 |
+ * Parse a SELinux context string and return a specified field, duplicated
|
|
|
990e34 |
+ * in a separate string. The caller is responsible for freeing the memory
|
|
|
990e34 |
+ * pointed by the returned value.
|
|
|
990e34 |
+ */
|
|
|
990e34 |
+char *get_secontext_field(const char *full_context, enum secontext_field field);
|
|
|
990e34 |
+
|
|
|
990e34 |
+char *get_secontext_field_file(const char *file, enum secontext_field field);
|
|
|
990e34 |
+
|
|
|
990e34 |
void update_secontext_field(const char *file, enum secontext_field field,
|
|
|
990e34 |
const char *newvalue);
|
|
|
990e34 |
|
|
|
990e34 |
@@ -48,6 +57,17 @@ void update_secontext_field(const char *file, enum secontext_field field,
|
|
|
990e34 |
|
|
|
990e34 |
#else
|
|
|
990e34 |
|
|
|
990e34 |
+static inline char *
|
|
|
990e34 |
+get_secontext_field(const char *ctx, enum secontext_field field)
|
|
|
990e34 |
+{
|
|
|
990e34 |
+ return NULL;
|
|
|
990e34 |
+}
|
|
|
990e34 |
+static inline char *
|
|
|
990e34 |
+get_secontext_field_file(const char *file, enum secontext_field field)
|
|
|
990e34 |
+{
|
|
|
990e34 |
+ return NULL;
|
|
|
990e34 |
+}
|
|
|
990e34 |
+
|
|
|
990e34 |
static inline void
|
|
|
990e34 |
update_secontext_field(const char *file, enum secontext_field field,
|
|
|
990e34 |
const char *newvalue)
|
|
|
990e34 |
diff --git a/tests-m32/secontext.c b/tests-m32/secontext.c
|
|
|
990e34 |
index 848eea9..52211ed 100644
|
|
|
990e34 |
--- a/tests-m32/secontext.c
|
|
|
990e34 |
+++ b/tests-m32/secontext.c
|
|
|
990e34 |
@@ -56,8 +56,8 @@ strip_trailing_newlines(char *context)
|
|
|
990e34 |
return context;
|
|
|
990e34 |
}
|
|
|
990e34 |
|
|
|
990e34 |
-static char *
|
|
|
990e34 |
-get_type_from_context(const char *full_context)
|
|
|
990e34 |
+char *
|
|
|
990e34 |
+get_secontext_field(const char *full_context, enum secontext_field field)
|
|
|
990e34 |
{
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
|
|
|
990e34 |
@@ -72,7 +72,7 @@ get_type_from_context(const char *full_context)
|
|
|
990e34 |
char *context = NULL;
|
|
|
990e34 |
for (token = strtok_r(ctx_copy, ":", &saveptr), i = 0;
|
|
|
990e34 |
token; token = strtok_r(NULL, ":", &saveptr), i++) {
|
|
|
990e34 |
- if (i == 2) {
|
|
|
990e34 |
+ if (i == field) {
|
|
|
990e34 |
context = xstrdup(token);
|
|
|
990e34 |
break;
|
|
|
990e34 |
}
|
|
|
990e34 |
@@ -122,7 +122,7 @@ raw_expected_secontext_short_file(const char *filename)
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
|
|
|
990e34 |
char *ctx = raw_expected_secontext_full_file(filename);
|
|
|
990e34 |
- char *type = get_type_from_context(ctx);
|
|
|
990e34 |
+ char *type = get_secontext_field(ctx, SECONTEXT_TYPE);
|
|
|
990e34 |
free(ctx);
|
|
|
990e34 |
|
|
|
990e34 |
errno = saved_errno;
|
|
|
990e34 |
@@ -144,20 +144,23 @@ raw_secontext_full_file(const char *filename)
|
|
|
990e34 |
return full_secontext;
|
|
|
990e34 |
}
|
|
|
990e34 |
|
|
|
990e34 |
-static char *
|
|
|
990e34 |
-raw_secontext_short_file(const char *filename)
|
|
|
990e34 |
+char *
|
|
|
990e34 |
+get_secontext_field_file(const char *file, enum secontext_field field)
|
|
|
990e34 |
{
|
|
|
990e34 |
- int saved_errno = errno;
|
|
|
990e34 |
-
|
|
|
990e34 |
- char *ctx = raw_secontext_full_file(filename);
|
|
|
990e34 |
- char *type = get_type_from_context(ctx);
|
|
|
990e34 |
+ char *ctx = raw_secontext_full_file(file);
|
|
|
990e34 |
+ char *type = get_secontext_field(ctx, field);
|
|
|
990e34 |
free(ctx);
|
|
|
990e34 |
|
|
|
990e34 |
- errno = saved_errno;
|
|
|
990e34 |
return type;
|
|
|
990e34 |
}
|
|
|
990e34 |
|
|
|
990e34 |
static char *
|
|
|
990e34 |
+raw_secontext_short_file(const char *filename)
|
|
|
990e34 |
+{
|
|
|
990e34 |
+ return get_secontext_field_file(filename, SECONTEXT_TYPE);
|
|
|
990e34 |
+}
|
|
|
990e34 |
+
|
|
|
990e34 |
+static char *
|
|
|
990e34 |
raw_secontext_full_pid(pid_t pid)
|
|
|
990e34 |
{
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
@@ -178,7 +181,7 @@ raw_secontext_short_pid(pid_t pid)
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
|
|
|
990e34 |
char *ctx = raw_secontext_full_pid(pid);
|
|
|
990e34 |
- char *type = get_type_from_context(ctx);
|
|
|
990e34 |
+ char *type = get_secontext_field(ctx, SECONTEXT_TYPE);
|
|
|
990e34 |
free(ctx);
|
|
|
990e34 |
|
|
|
990e34 |
errno = saved_errno;
|
|
|
990e34 |
diff --git a/tests-m32/secontext.h b/tests-m32/secontext.h
|
|
|
990e34 |
index 1d0251a..e5571d5 100644
|
|
|
990e34 |
--- a/tests-m32/secontext.h
|
|
|
990e34 |
+++ b/tests-m32/secontext.h
|
|
|
990e34 |
@@ -23,6 +23,15 @@ enum secontext_field {
|
|
|
990e34 |
|
|
|
990e34 |
#if defined TEST_SECONTEXT && defined HAVE_SELINUX_RUNTIME
|
|
|
990e34 |
|
|
|
990e34 |
+/**
|
|
|
990e34 |
+ * Parse a SELinux context string and return a specified field, duplicated
|
|
|
990e34 |
+ * in a separate string. The caller is responsible for freeing the memory
|
|
|
990e34 |
+ * pointed by the returned value.
|
|
|
990e34 |
+ */
|
|
|
990e34 |
+char *get_secontext_field(const char *full_context, enum secontext_field field);
|
|
|
990e34 |
+
|
|
|
990e34 |
+char *get_secontext_field_file(const char *file, enum secontext_field field);
|
|
|
990e34 |
+
|
|
|
990e34 |
void update_secontext_field(const char *file, enum secontext_field field,
|
|
|
990e34 |
const char *newvalue);
|
|
|
990e34 |
|
|
|
990e34 |
@@ -48,6 +57,17 @@ void update_secontext_field(const char *file, enum secontext_field field,
|
|
|
990e34 |
|
|
|
990e34 |
#else
|
|
|
990e34 |
|
|
|
990e34 |
+static inline char *
|
|
|
990e34 |
+get_secontext_field(const char *ctx, enum secontext_field field)
|
|
|
990e34 |
+{
|
|
|
990e34 |
+ return NULL;
|
|
|
990e34 |
+}
|
|
|
990e34 |
+static inline char *
|
|
|
990e34 |
+get_secontext_field_file(const char *file, enum secontext_field field)
|
|
|
990e34 |
+{
|
|
|
990e34 |
+ return NULL;
|
|
|
990e34 |
+}
|
|
|
990e34 |
+
|
|
|
990e34 |
static inline void
|
|
|
990e34 |
update_secontext_field(const char *file, enum secontext_field field,
|
|
|
990e34 |
const char *newvalue)
|
|
|
990e34 |
diff --git a/tests-mx32/secontext.c b/tests-mx32/secontext.c
|
|
|
990e34 |
index 848eea9..52211ed 100644
|
|
|
990e34 |
--- a/tests-mx32/secontext.c
|
|
|
990e34 |
+++ b/tests-mx32/secontext.c
|
|
|
990e34 |
@@ -56,8 +56,8 @@ strip_trailing_newlines(char *context)
|
|
|
990e34 |
return context;
|
|
|
990e34 |
}
|
|
|
990e34 |
|
|
|
990e34 |
-static char *
|
|
|
990e34 |
-get_type_from_context(const char *full_context)
|
|
|
990e34 |
+char *
|
|
|
990e34 |
+get_secontext_field(const char *full_context, enum secontext_field field)
|
|
|
990e34 |
{
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
|
|
|
990e34 |
@@ -72,7 +72,7 @@ get_type_from_context(const char *full_context)
|
|
|
990e34 |
char *context = NULL;
|
|
|
990e34 |
for (token = strtok_r(ctx_copy, ":", &saveptr), i = 0;
|
|
|
990e34 |
token; token = strtok_r(NULL, ":", &saveptr), i++) {
|
|
|
990e34 |
- if (i == 2) {
|
|
|
990e34 |
+ if (i == field) {
|
|
|
990e34 |
context = xstrdup(token);
|
|
|
990e34 |
break;
|
|
|
990e34 |
}
|
|
|
990e34 |
@@ -122,7 +122,7 @@ raw_expected_secontext_short_file(const char *filename)
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
|
|
|
990e34 |
char *ctx = raw_expected_secontext_full_file(filename);
|
|
|
990e34 |
- char *type = get_type_from_context(ctx);
|
|
|
990e34 |
+ char *type = get_secontext_field(ctx, SECONTEXT_TYPE);
|
|
|
990e34 |
free(ctx);
|
|
|
990e34 |
|
|
|
990e34 |
errno = saved_errno;
|
|
|
990e34 |
@@ -144,20 +144,23 @@ raw_secontext_full_file(const char *filename)
|
|
|
990e34 |
return full_secontext;
|
|
|
990e34 |
}
|
|
|
990e34 |
|
|
|
990e34 |
-static char *
|
|
|
990e34 |
-raw_secontext_short_file(const char *filename)
|
|
|
990e34 |
+char *
|
|
|
990e34 |
+get_secontext_field_file(const char *file, enum secontext_field field)
|
|
|
990e34 |
{
|
|
|
990e34 |
- int saved_errno = errno;
|
|
|
990e34 |
-
|
|
|
990e34 |
- char *ctx = raw_secontext_full_file(filename);
|
|
|
990e34 |
- char *type = get_type_from_context(ctx);
|
|
|
990e34 |
+ char *ctx = raw_secontext_full_file(file);
|
|
|
990e34 |
+ char *type = get_secontext_field(ctx, field);
|
|
|
990e34 |
free(ctx);
|
|
|
990e34 |
|
|
|
990e34 |
- errno = saved_errno;
|
|
|
990e34 |
return type;
|
|
|
990e34 |
}
|
|
|
990e34 |
|
|
|
990e34 |
static char *
|
|
|
990e34 |
+raw_secontext_short_file(const char *filename)
|
|
|
990e34 |
+{
|
|
|
990e34 |
+ return get_secontext_field_file(filename, SECONTEXT_TYPE);
|
|
|
990e34 |
+}
|
|
|
990e34 |
+
|
|
|
990e34 |
+static char *
|
|
|
990e34 |
raw_secontext_full_pid(pid_t pid)
|
|
|
990e34 |
{
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
@@ -178,7 +181,7 @@ raw_secontext_short_pid(pid_t pid)
|
|
|
990e34 |
int saved_errno = errno;
|
|
|
990e34 |
|
|
|
990e34 |
char *ctx = raw_secontext_full_pid(pid);
|
|
|
990e34 |
- char *type = get_type_from_context(ctx);
|
|
|
990e34 |
+ char *type = get_secontext_field(ctx, SECONTEXT_TYPE);
|
|
|
990e34 |
free(ctx);
|
|
|
990e34 |
|
|
|
990e34 |
errno = saved_errno;
|
|
|
990e34 |
diff --git a/tests-mx32/secontext.h b/tests-mx32/secontext.h
|
|
|
990e34 |
index 1d0251a..e5571d5 100644
|
|
|
990e34 |
--- a/tests-mx32/secontext.h
|
|
|
990e34 |
+++ b/tests-mx32/secontext.h
|
|
|
990e34 |
@@ -23,6 +23,15 @@ enum secontext_field {
|
|
|
990e34 |
|
|
|
990e34 |
#if defined TEST_SECONTEXT && defined HAVE_SELINUX_RUNTIME
|
|
|
990e34 |
|
|
|
990e34 |
+/**
|
|
|
990e34 |
+ * Parse a SELinux context string and return a specified field, duplicated
|
|
|
990e34 |
+ * in a separate string. The caller is responsible for freeing the memory
|
|
|
990e34 |
+ * pointed by the returned value.
|
|
|
990e34 |
+ */
|
|
|
990e34 |
+char *get_secontext_field(const char *full_context, enum secontext_field field);
|
|
|
990e34 |
+
|
|
|
990e34 |
+char *get_secontext_field_file(const char *file, enum secontext_field field);
|
|
|
990e34 |
+
|
|
|
990e34 |
void update_secontext_field(const char *file, enum secontext_field field,
|
|
|
990e34 |
const char *newvalue);
|
|
|
990e34 |
|
|
|
990e34 |
@@ -48,6 +57,17 @@ void update_secontext_field(const char *file, enum secontext_field field,
|
|
|
990e34 |
|
|
|
990e34 |
#else
|
|
|
990e34 |
|
|
|
990e34 |
+static inline char *
|
|
|
990e34 |
+get_secontext_field(const char *ctx, enum secontext_field field)
|
|
|
990e34 |
+{
|
|
|
990e34 |
+ return NULL;
|
|
|
990e34 |
+}
|
|
|
990e34 |
+static inline char *
|
|
|
990e34 |
+get_secontext_field_file(const char *file, enum secontext_field field)
|
|
|
990e34 |
+{
|
|
|
990e34 |
+ return NULL;
|
|
|
990e34 |
+}
|
|
|
990e34 |
+
|
|
|
990e34 |
static inline void
|
|
|
990e34 |
update_secontext_field(const char *file, enum secontext_field field,
|
|
|
990e34 |
const char *newvalue)
|
|
|
990e34 |
--
|
|
|
990e34 |
2.1.4
|
|
|
990e34 |
|