From e13ae9d582f6bfdb1ae394a3231181b4d1c8903a Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Fri, 24 Feb 2023 17:11:48 -0700 Subject: Change keyper to force use of absolute paths --- keyper.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/keyper.c b/keyper.c index a3338c3..7595619 100644 --- a/keyper.c +++ b/keyper.c @@ -34,10 +34,18 @@ static int dump_file(const char* fname) int main(int argc, char** argv) { const char* file = getenv("KEYPER_FILE"); - const char* disable_file = getenv("KEYPER_DISABLE_FILE"); - - if (!disable_file) { - disable_file="keyper-disable"; + const char* disable_file_env = getenv("KEYPER_DISABLE_FILE"); + char disable_file[4096]; + + if (!disable_file_env) { + const char* home = getenv("HOME"); + if (!home) { + fprintf(stderr, "No $HOME environment variable\n"); + return 2; + } + snprintf(disable_file, sizeof(disable_file) - 1, "%s/keyper-disable", home); + } else { + strncpy(disable_file, disable_file_env, sizeof(disable_file) - 1); } if (!file) { @@ -45,6 +53,16 @@ int main(int argc, char** argv) return 1; } + if (disable_file[0] != '/') { + fprintf(stderr, "$KEYPER_DISABLE_FILE must be an absolute path!\n"); + return 1; + } + + if (file[0] != '/') { + fprintf(stderr, "$KEYPER_FILE must be an absolute path!\n"); + return 1; + } + struct stat statbuf; if (!stat(disable_file, &statbuf)) { fprintf(stderr, "Keyper disabled because %s exists.\n", disable_file); -- cgit