diff options
Diffstat (limited to 'userspace/setkey.c')
-rw-r--r-- | userspace/setkey.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/userspace/setkey.c b/userspace/setkey.c index 2642b90..535773d 100644 --- a/userspace/setkey.c +++ b/userspace/setkey.c @@ -14,21 +14,37 @@ #include <sys/stat.h> #include "../ncr.h" #include <stdlib.h> - - +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> int main(int argc, char** argv) { int fd = -1; FILE* fp; struct ncr_master_key_st key; - int size; + int size, ret; + struct stat st; if (argc != 2) { fprintf(stderr, "Usage: setkey [filename]\n"); exit(1); } + /* check permissions */ + ret = stat(argv[1], &st); + if (ret < 0) { + fprintf(stderr, "Cannot find key: %s\n", argv[1]); + exit(1); + } + + if (st.st_mode & S_IROTH || st.st_mode & S_IRGRP || st.st_uid != 0) { + fprintf(stderr, "Key file must belong to root and must be readable by him only.\n"); + exit(1); + } + + /* read key */ + memset(&key, 0, sizeof(key)); fp = fopen(argv[1], "r"); size = fread(key.key, 1, sizeof(key.key), fp); |