summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-09-17 18:34:47 -0500
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-09-17 18:37:32 -0500
commit0a7b53bdd2bb36c9543830c087954f184cd06535 (patch)
tree64f58fe3545bdb2a3d599e6e3d1e6ad4a364b172 /src/shared
parent1dc2ced4646a78b3dee9e3ea44130f938d6425bc (diff)
util: restore get_process_capeff behaviour
69ab8088 unified parsing of status files and removed the logic of skipping extra '0's when getting the effective capabilities. Restore that logic, so that the same capabilities are always mapped to the same strings in the journal.
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/fileio.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/shared/fileio.c b/src/shared/fileio.c
index 4e2b4442db..23bc742e75 100644
--- a/src/shared/fileio.c
+++ b/src/shared/fileio.c
@@ -650,9 +650,9 @@ int executable_is_script(const char *path, char **interpreter) {
}
/**
- * Retrieve one field from a file like /proc/self/status.
- * pattern should start with '\n' and end with ':'. Whitespace
- * after ':' will be skipped. field must be freed afterwards.
+ * Retrieve one field from a file like /proc/self/status. pattern
+ * should start with '\n' and end with a ':'. Whitespace and zeros
+ * after the ':' will be skipped. field must be freed afterwards.
*/
int get_status_field(const char *filename, const char *pattern, char **field) {
_cleanup_free_ char *status = NULL;
@@ -672,7 +672,12 @@ int get_status_field(const char *filename, const char *pattern, char **field) {
return -ENOENT;
t += strlen(pattern);
- t += strspn(t, WHITESPACE);
+ /* Also skip zeros, because when this is used for capabilities,
+ * we don't want the zeros. This way the same cabality set
+ * always maps to the same string, irrespective of the total
+ * capability set size. For other numbers it shouldn't matter.
+ */
+ t += strspn(t, WHITESPACE "0");
len = strcspn(t, WHITESPACE);