diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2019-02-04 11:42:28 +0100 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2019-02-04 11:42:28 +0100 |
commit | 3f993746b2ad674f204f23daa85ada0e0c84865a (patch) | |
tree | 95d48ecfce4f99e7a47e9730e032a1233dda574a /src/blogc/sysinfo.c | |
parent | 013a37c8738d671d9d5f8381146d7d1e8f651762 (diff) | |
download | blogc-3f993746b2ad674f204f23daa85ada0e0c84865a.tar.gz blogc-3f993746b2ad674f204f23daa85ada0e0c84865a.tar.bz2 blogc-3f993746b2ad674f204f23daa85ada0e0c84865a.zip |
blogc: added "inside docker" template variable
Diffstat (limited to 'src/blogc/sysinfo.c')
-rw-r--r-- | src/blogc/sysinfo.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/blogc/sysinfo.c b/src/blogc/sysinfo.c index 61c8b1d..9d03b61 100644 --- a/src/blogc/sysinfo.c +++ b/src/blogc/sysinfo.c @@ -26,7 +26,11 @@ #include <time.h> #endif /* HAVE_TIME_H */ +#include <stdbool.h> #include <stdlib.h> +#include <string.h> +#include "../common/error.h" +#include "../common/file.h" #include "../common/utils.h" #include "sysinfo.h" @@ -116,3 +120,38 @@ blogc_sysinfo_inject_datetime(bc_trie_t *global) bc_trie_insert(global, "BLOGC_SYSINFO_DATETIME", t); } + + +// it is obviously impossible that the same process runs inside and outside +// docker at the same time, then an unprotected global variable should be fine +// here +static bool inside_docker_evaluated = false; +static bool inside_docker = false; + +bool +blogc_sysinfo_get_inside_docker(void) +{ + if (inside_docker_evaluated) + return inside_docker; + inside_docker_evaluated = true; + + size_t len; + bc_error_t *err = NULL; + char *contents = bc_file_get_contents("/proc/1/cgroup", false, &len, &err); + if (err != NULL) { + inside_docker = false; + return inside_docker; + } + + bool inside_docker = NULL != strstr(contents, "/docker/"); + free(contents); + return inside_docker; +} + + +void +blogc_sysinfo_inject_inside_docker(bc_trie_t *global) +{ + if (blogc_sysinfo_get_inside_docker()) + bc_trie_insert(global, "BLOGC_SYSINFO_INSIDE_DOCKER", bc_strdup("1")); +} |