summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/login/test-login-shared.c3
-rw-r--r--src/shared/fileio.c17
-rw-r--r--src/test/test-fileio.c62
3 files changed, 62 insertions, 20 deletions
diff --git a/src/login/test-login-shared.c b/src/login/test-login-shared.c
index 2df60292bf..d29d7e7921 100644
--- a/src/login/test-login-shared.c
+++ b/src/login/test-login-shared.c
@@ -32,6 +32,9 @@ static void test_session_id_valid(void) {
}
int main(int argc, char* argv[]) {
+ log_parse_environment();
+ log_open();
+
test_session_id_valid();
return 0;
diff --git a/src/shared/fileio.c b/src/shared/fileio.c
index 01b803c82f..603a1c7b38 100644
--- a/src/shared/fileio.c
+++ b/src/shared/fileio.c
@@ -24,6 +24,7 @@
#include "util.h"
#include "strv.h"
#include "utf8.h"
+#include "ctype.h"
int write_string_to_file(FILE *f, const char *line) {
errno = 0;
@@ -672,16 +673,18 @@ int get_status_field(const char *filename, const char *pattern, char **field) {
return -ENOENT;
t += strlen(pattern);
- /* Also skip zeros, because when this is used for capabilities,
- * we don't want the zeros. This way the same capability set
- * always maps to the same string, irrespective of the total
- * capability set size. For other numbers it shouldn't matter.
- */
if (*t) {
- t += strspn(t, WHITESPACE "0");
+ t += strspn(t, " \t");
+
+ /* Also skip zeros, because when this is used for
+ * capabilities, we don't want the zeros. This way the
+ * same capability set always maps to the same string,
+ * irrespective of the total capability set size. For
+ * other numbers it shouldn't matter. */
+ t += strspn(t, "0");
/* Back off one char if there's nothing but whitespace
and zeros */
- if (!*t)
+ if (!*t || isspace(*t))
t --;
}
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
index 525354b9cb..06f3e28288 100644
--- a/src/test/test-fileio.c
+++ b/src/test/test-fileio.c
@@ -27,6 +27,8 @@
#include "fileio.h"
#include "strv.h"
#include "env-util.h"
+#include "def.h"
+#include "ctype.h"
static void test_parse_env_file(void) {
char t[] = "/tmp/test-fileio-in-XXXXXX",
@@ -230,8 +232,8 @@ static void test_executable_is_script(void) {
}
static void test_status_field(void) {
- _cleanup_free_ char *t = NULL, *p = NULL, *s = NULL;
- unsigned long long total, buffers;
+ _cleanup_free_ char *t = NULL, *p = NULL, *s = NULL, *z = NULL;
+ unsigned long long total = 0, buffers = 0;
int r;
assert_se(get_status_field("/proc/self/status", "\nThreads:", &t) == 0);
@@ -239,26 +241,60 @@ static void test_status_field(void) {
assert_se(streq(t, "1"));
r = get_status_field("/proc/meminfo", "MemTotal:", &p);
- if (r == -ENOENT)
- return;
- assert(r == 0);
- puts(p);
- assert_se(safe_atollu(p, &total) == 0);
+ if (r != -ENOENT) {
+ assert(r == 0);
+ puts(p);
+ assert_se(safe_atollu(p, &total) == 0);
+ }
r = get_status_field("/proc/meminfo", "\nBuffers:", &s);
- if (r == -ENOENT)
- return;
- assert(r == 0);
- puts(s);
- assert_se(safe_atollu(s, &buffers) == 0);
+ if (r != -ENOENT) {
+ assert(r == 0);
+ puts(s);
+ assert_se(safe_atollu(s, &buffers) == 0);
+ }
- assert(buffers < total);
+ if (p && t)
+ assert(buffers < total);
+
+ /* Seccomp should be a good test for field full of zeros. */
+ r = get_status_field("/proc/meminfo", "\nSeccomp:", &z);
+ if (r != -ENOENT) {
+ assert(r == 0);
+ puts(z);
+ assert_se(safe_atollu(z, &buffers) == 0);
+ }
+}
+
+static void test_capeff(void) {
+ int pid, p;
+
+ for (pid = 0; pid < 2; pid++) {
+ _cleanup_free_ char *capeff = NULL;
+ int r;
+
+ r = get_process_capeff(0, &capeff);
+ log_info("capeff: '%s' (r=%d)", capeff, r);
+
+ if (r == -ENOENT || r == -EPERM)
+ return;
+
+ assert(r == 0);
+ assert(*capeff);
+ p = capeff[strspn(capeff, DIGITS "abcdefABCDEF")];
+ assert(!p || isspace(p));
+ }
}
int main(int argc, char *argv[]) {
+ log_parse_environment();
+ log_open();
+
test_parse_env_file();
test_parse_multiline_env_file();
test_executable_is_script();
test_status_field();
+ test_capeff();
+
return 0;
}