From ebc007322b19f76de99265014f4e397ec542b3f5 Mon Sep 17 00:00:00 2001 From: Sean Bright Date: Mon, 5 Jun 2023 18:17:47 -0400 Subject: [PATCH] res_crypto.c: Avoid using the non-portable ALLPERMS macro. ALLPERMS is not POSIX and it's trivial enough to not jump through autoconf hoops to check for it. Fixes #149. --- res/res_crypto.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/res/res_crypto.c b/res/res_crypto.c index 2f7868cb62..838e3a3de3 100644 --- a/res/res_crypto.c +++ b/res/res_crypto.c @@ -217,10 +217,15 @@ static struct ast_key *try_load_key(const char *dir, const char *fname, int ifd, return NULL; } + /* FILE_MODE_BITS is a bitwise OR of all possible file mode bits encoded in + * the `st_mode` member of `struct stat`. For POSIX compatible systems this + * will be 07777. */ +#define FILE_MODE_BITS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) + /* only user read or read/write modes allowed */ if (ktype == AST_KEY_PRIVATE && - ((st.st_mode & ALLPERMS) & ~(S_IRUSR | S_IWUSR)) != 0) { - ast_log(LOG_ERROR, "Private key file has bad permissions: %s: %#4o\n", ffname, st.st_mode & ALLPERMS); + ((st.st_mode & FILE_MODE_BITS) & ~(S_IRUSR | S_IWUSR)) != 0) { + ast_log(LOG_ERROR, "Private key file has bad permissions: %s: %#4o\n", ffname, st.st_mode & FILE_MODE_BITS); fclose(f); return NULL; }