nsflsgs: drop namespace_flag_{from,to}_string()

This also drops namespace_flag_to_string_many_with_check(), and
renames namespace_flag_{from,to}_string_many() to
namespace_flags_{from,to}_string().
This commit is contained in:
Yu Watanabe
2018-05-01 10:48:21 +09:00
parent a3f8b0ef45
commit 86c2a9f1c2
9 changed files with 43 additions and 63 deletions

View File

@@ -1207,7 +1207,7 @@ static BUS_DEFINE_SET_TRANSIENT_PARSE_PTR(personality, unsigned long, parse_pers
static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(secure_bits, "i", int32_t, int, "%" PRIi32, secure_bits_to_string_alloc_with_check);
static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(capability, "t", uint64_t, uint64_t, "%" PRIu64, capability_set_to_string_alloc);
static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(sched_policy, "i", int32_t, int, "%" PRIi32, sched_policy_to_string_alloc_with_check);
static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(namespace_flag, "t", uint64_t, unsigned long, "%" PRIu64, namespace_flag_to_string_many);
static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(namespace_flag, "t", uint64_t, unsigned long, "%" PRIu64, namespace_flags_to_string);
static BUS_DEFINE_SET_TRANSIENT_TO_STRING(mount_flags, "t", uint64_t, unsigned long, "%" PRIu64, mount_propagation_flags_to_string_with_check);
int bus_exec_context_set_transient_property(

View File

@@ -4265,7 +4265,7 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
if (exec_context_restrict_namespaces_set(c)) {
_cleanup_free_ char *s = NULL;
r = namespace_flag_to_string_many(c->restrict_namespaces, &s);
r = namespace_flags_to_string(c->restrict_namespaces, &s);
if (r >= 0)
fprintf(f, "%sRestrictNamespaces: %s\n",
prefix, s);

View File

@@ -3145,7 +3145,7 @@ int config_parse_restrict_namespaces(
else {
/* Not a boolean argument, in this case it's a list of namespace types. */
r = namespace_flag_from_string_many(rvalue, &c->restrict_namespaces);
r = namespace_flags_from_string(rvalue, &c->restrict_namespaces);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse namespace type string, ignoring: %s", rvalue);
return 0;

View File

@@ -1016,7 +1016,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
else if (r == 0)
flags = NAMESPACE_FLAGS_ALL;
else {
r = namespace_flag_from_string_many(eq, &flags);
r = namespace_flags_from_string(eq, &flags);
if (r < 0)
return log_error_errno(r, "Failed to parse %s value %s.", field, eq);
}

View File

@@ -716,7 +716,7 @@ int bus_print_property(const char *name, sd_bus_message *m, bool value, bool all
else if ((u & NAMESPACE_FLAGS_ALL) == NAMESPACE_FLAGS_ALL)
result = "no";
else {
r = namespace_flag_to_string_many(u, &s);
r = namespace_flags_to_string(u, &s);
if (r < 0)
return r;

View File

@@ -25,32 +25,7 @@ const struct namespace_flag_map namespace_flag_map[] = {
{}
};
const char* namespace_flag_to_string(unsigned long flag) {
unsigned i;
flag &= NAMESPACE_FLAGS_ALL;
for (i = 0; namespace_flag_map[i].name; i++)
if (flag == namespace_flag_map[i].flag)
return namespace_flag_map[i].name;
return NULL; /* either unknown namespace flag, or a combination of many. This call supports neither. */
}
unsigned long namespace_flag_from_string(const char *name) {
unsigned i;
if (isempty(name))
return 0;
for (i = 0; namespace_flag_map[i].name; i++)
if (streq(name, namespace_flag_map[i].name))
return namespace_flag_map[i].flag;
return 0;
}
int namespace_flag_from_string_many(const char *name, unsigned long *ret) {
int namespace_flags_from_string(const char *name, unsigned long *ret) {
unsigned long flags = 0;
int r;
@@ -58,7 +33,8 @@ int namespace_flag_from_string_many(const char *name, unsigned long *ret) {
for (;;) {
_cleanup_free_ char *word = NULL;
unsigned long f;
unsigned long f = 0;
unsigned i;
r = extract_first_word(&name, &word, NULL, 0);
if (r < 0)
@@ -66,7 +42,12 @@ int namespace_flag_from_string_many(const char *name, unsigned long *ret) {
if (r == 0)
break;
f = namespace_flag_from_string(word);
for (i = 0; namespace_flag_map[i].name; i++)
if (streq(word, namespace_flag_map[i].name)) {
f = namespace_flag_map[i].flag;
break;
}
if (f == 0)
return -EINVAL;
@@ -77,7 +58,7 @@ int namespace_flag_from_string_many(const char *name, unsigned long *ret) {
return 0;
}
int namespace_flag_to_string_many(unsigned long flags, char **ret) {
int namespace_flags_to_string(unsigned long flags, char **ret) {
_cleanup_free_ char *s = NULL;
unsigned i;
@@ -85,14 +66,8 @@ int namespace_flag_to_string_many(unsigned long flags, char **ret) {
if ((flags & namespace_flag_map[i].flag) != namespace_flag_map[i].flag)
continue;
if (!s) {
s = strdup(namespace_flag_map[i].name);
if (!s)
return -ENOMEM;
} else {
if (!strextend(&s, " ", namespace_flag_map[i].name, NULL))
return -ENOMEM;
}
if (!strextend_with_separator(&s, " ", namespace_flag_map[i].name, NULL))
return -ENOMEM;
}
if (!s) {

View File

@@ -24,10 +24,8 @@
CLONE_NEWUSER| \
CLONE_NEWUTS))
const char* namespace_flag_to_string(unsigned long flag);
unsigned long namespace_flag_from_string(const char *name);
int namespace_flag_from_string_many(const char *name, unsigned long *ret);
int namespace_flag_to_string_many(unsigned long flags, char **ret);
int namespace_flags_from_string(const char *name, unsigned long *ret);
int namespace_flags_to_string(unsigned long flags, char **ret);
struct namespace_flag_map {
unsigned long flag;

View File

@@ -1007,7 +1007,7 @@ int seccomp_restrict_namespaces(unsigned long retain) {
if (DEBUG_LOGGING) {
_cleanup_free_ char *s = NULL;
(void) namespace_flag_to_string_many(retain, &s);
(void) namespace_flags_to_string(retain, &s);
log_debug("Restricting namespace to: %s.", strna(s));
}

View File

@@ -133,29 +133,36 @@ static void test_filter_sets(void) {
}
static void test_restrict_namespace(void) {
_cleanup_free_ char *s = NULL;
char *s = NULL;
unsigned long ul;
pid_t pid;
assert_se(namespace_flag_to_string(0) == NULL);
assert_se(streq(namespace_flag_to_string(CLONE_NEWNS), "mnt"));
assert_se(namespace_flag_to_string(CLONE_NEWNS|CLONE_NEWIPC) == NULL);
assert_se(streq(namespace_flag_to_string(CLONE_NEWCGROUP), "cgroup"));
assert_se(namespace_flags_to_string(0, &s) == 0 && streq(s, ""));
s = mfree(s);
assert_se(namespace_flags_to_string(CLONE_NEWNS, &s) == 0 && streq(s, "mnt"));
s = mfree(s);
assert_se(namespace_flags_to_string(CLONE_NEWNS|CLONE_NEWIPC, &s) == 0 && streq(s, "ipc mnt"));
s = mfree(s);
assert_se(namespace_flags_to_string(CLONE_NEWCGROUP, &s) == 0 && streq(s, "cgroup"));
s = mfree(s);
assert_se(namespace_flag_from_string("mnt") == CLONE_NEWNS);
assert_se(namespace_flag_from_string(NULL) == 0);
assert_se(namespace_flag_from_string("") == 0);
assert_se(namespace_flag_from_string("uts") == CLONE_NEWUTS);
assert_se(namespace_flag_from_string(namespace_flag_to_string(CLONE_NEWUTS)) == CLONE_NEWUTS);
assert_se(streq(namespace_flag_to_string(namespace_flag_from_string("ipc")), "ipc"));
assert_se(namespace_flags_from_string("mnt", &ul) == 0 && ul == CLONE_NEWNS);
assert_se(namespace_flags_from_string(NULL, &ul) == 0 && ul == 0);
assert_se(namespace_flags_from_string("", &ul) == 0 && ul == 0);
assert_se(namespace_flags_from_string("uts", &ul) == 0 && ul == CLONE_NEWUTS);
assert_se(namespace_flags_from_string("mnt uts ipc", &ul) == 0 && ul == (CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWIPC));
assert_se(namespace_flag_from_string_many(NULL, &ul) == 0 && ul == 0);
assert_se(namespace_flag_from_string_many("", &ul) == 0 && ul == 0);
assert_se(namespace_flag_from_string_many("mnt uts ipc", &ul) == 0 && ul == (CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWIPC));
assert_se(namespace_flags_to_string(CLONE_NEWUTS, &s) == 0 && streq(s, "uts"));
assert_se(namespace_flags_from_string(s, &ul) == 0 && ul == CLONE_NEWUTS);
s = mfree(s);
assert_se(namespace_flags_from_string("ipc", &ul) == 0 && ul == CLONE_NEWIPC);
assert_se(namespace_flags_to_string(ul, &s) == 0 && streq(s, "ipc"));
s = mfree(s);
assert_se(namespace_flag_to_string_many(NAMESPACE_FLAGS_ALL, &s) == 0);
assert_se(namespace_flags_to_string(NAMESPACE_FLAGS_ALL, &s) == 0);
assert_se(streq(s, "cgroup ipc net mnt pid user uts"));
assert_se(namespace_flag_from_string_many(s, &ul) == 0 && ul == NAMESPACE_FLAGS_ALL);
assert_se(namespace_flags_from_string(s, &ul) == 0 && ul == NAMESPACE_FLAGS_ALL);
s = mfree(s);
if (!is_seccomp_available())
return;