diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bindfs.c | 45 | ||||
-rw-r--r-- | src/misc.c | 11 | ||||
-rw-r--r-- | src/permchain.c | 14 | ||||
-rw-r--r-- | src/usermap.c | 4 |
4 files changed, 58 insertions, 16 deletions
diff --git a/src/bindfs.c b/src/bindfs.c index b4a1f5a..5f52395 100644 --- a/src/bindfs.c +++ b/src/bindfs.c @@ -446,9 +446,9 @@ static int getattr_common(const char *procpath, struct stat *stbuf) } /* Report user-defined owner/group if specified */ - if (settings.new_uid != -1) + if (settings.new_uid != (uid_t)-1) stbuf->st_uid = settings.new_uid; - if (settings.new_gid != -1) + if (settings.new_gid != (gid_t)-1) stbuf->st_gid = settings.new_gid; /* Mirrored user? */ @@ -549,12 +549,12 @@ static int chown_new_file(const char *path, struct fuse_context *fc, int (*chown } } - if (settings.create_for_uid != -1) + if (settings.create_for_uid != (uid_t)-1) file_owner = settings.create_for_uid; - if (settings.create_for_gid != -1) + if (settings.create_for_gid != (gid_t)-1) file_group = settings.create_for_gid; - if ((file_owner != -1) || (file_group != -1)) { + if ((file_owner != (uid_t)-1) || (file_group != (gid_t)-1)) { if (chown_func(path, file_owner, file_group) == -1) { DPRINTF("Failed to chown new file or directory (%d)", errno); } @@ -750,6 +750,7 @@ static void *bindfs_init() static void bindfs_destroy(void *private_data) { + (void)private_data; } #ifdef HAVE_FUSE_3 @@ -761,6 +762,9 @@ static int bindfs_getattr(const char *path, struct stat *stbuf) { int res; char *real_path; +#ifdef HAVE_FUSE_3 + (void)fi; +#endif real_path = process_path(path, true); if (real_path == NULL) @@ -827,6 +831,11 @@ static int bindfs_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) #endif { + (void)offset; + (void)fi; +#ifdef HAVE_FUSE_3 + (void)flags; +#endif char *real_path = process_path(path, true); if (real_path == NULL) { return -errno; @@ -1116,6 +1125,9 @@ static int bindfs_chmod(const char *path, mode_t mode) struct stat st; mode_t diff = 0; char *real_path; +#ifdef HAVE_FUSE_3 + (void)fi; +#endif real_path = process_path(path, true); if (real_path == NULL) @@ -1181,8 +1193,11 @@ static int bindfs_chown(const char *path, uid_t uid, gid_t gid) { int res; char *real_path; +#ifdef HAVE_FUSE_3 + (void)fi; +#endif - if (uid != -1) { + if (uid != (uid_t)-1) { switch (settings.chown_policy) { case CHOWN_NORMAL: uid = usermap_get_uid_or_default(settings.usermap_reverse, uid, uid); @@ -1198,7 +1213,7 @@ static int bindfs_chown(const char *path, uid_t uid, gid_t gid) } } - if (gid != -1) { + if (gid != (gid_t)-1) { switch (settings.chgrp_policy) { case CHGRP_NORMAL: gid = usermap_get_gid_or_default(settings.usermap_reverse, gid, gid); @@ -1214,7 +1229,7 @@ static int bindfs_chown(const char *path, uid_t uid, gid_t gid) } } - if (uid != -1 || gid != -1) { + if (uid != (uid_t)-1 || gid != (gid_t)-1) { real_path = process_path(path, true); if (real_path == NULL) return -errno; @@ -1237,6 +1252,9 @@ static int bindfs_truncate(const char *path, off_t size) { int res; char *real_path; +#ifdef HAVE_FUSE_3 + (void)fi; +#endif real_path = process_path(path, true); if (real_path == NULL) @@ -1273,6 +1291,9 @@ static int bindfs_utimens(const char *path, const struct timespec ts[2]) { int res; char *real_path; +#ifdef HAVE_FUSE_3 + (void)fi; +#endif real_path = process_path(path, true); if (real_path == NULL) @@ -1437,6 +1458,7 @@ static int bindfs_write(const char *path, const char *buf, size_t size, static int bindfs_lock(const char *path, struct fuse_file_info *fi, int cmd, struct flock *lock) { + (void)path; int res = fcntl(fi->fh, cmd, lock); if (res == -1) { return -errno; @@ -1447,6 +1469,7 @@ static int bindfs_lock(const char *path, struct fuse_file_info *fi, int cmd, /* This callback is only installed if lock forwarding is enabled. */ static int bindfs_flock(const char *path, struct fuse_file_info *fi, int op) { + (void)path; int res = flock(fi->fh, op); if (res == -1) { return -errno; @@ -1464,6 +1487,9 @@ static int bindfs_ioctl(const char *path, int cmd, void *arg, void *data) #endif { + (void)path; + (void)arg; + (void)flags; int res = ioctl(fi->fh, cmd, data); if (res == -1) { return -errno; @@ -1891,6 +1917,8 @@ enum OptionKey { static int process_option(void *data, const char *arg, int key, struct fuse_args *outargs) { + (void)data; + (void)outargs; switch ((enum OptionKey)key) { case OPTKEY_HELP: @@ -2322,6 +2350,7 @@ static void setup_signal_handling() static void signal_handler(int sig) { + (void)sig; invalidate_user_cache(); } @@ -19,6 +19,7 @@ #include "misc.h" #include <stdarg.h> +#include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -166,7 +167,7 @@ bool path_starts_with(const char *path, const char* prefix, size_t prefix_len) const char* path_part = path + (prefix_part - prefix); const char* path_slash = strchr(path_part, '/'); - size_t path_part_len = path_slash ? path_slash - path_part : path_len - (path_part - path); + size_t path_part_len = path_slash ? (size_t)(path_slash - path_part) : path_len - (path_part - path); return prefix_part_len == path_part_len; } @@ -328,12 +329,12 @@ void grow_memory_block(struct memory_block *a, size_t amount) if (new_cap == 0) { new_cap = 8; } else { + if (new_cap > SIZE_MAX / 2) { + fprintf(stderr, "Memory block too large."); + abort(); + } new_cap *= 2; } - if (new_cap < 0) { // Overflow - fprintf(stderr, "Memory block too large."); - abort(); - } } a->ptr = (char *)realloc(a->ptr, new_cap); a->capacity = new_cap; diff --git a/src/permchain.c b/src/permchain.c index b95bd8b..d101aa1 100644 --- a/src/permchain.c +++ b/src/permchain.c @@ -67,6 +67,8 @@ static int add_chmod_rule_to_permchain(const char *start, const char *end, int len = end - start; char *buf = malloc((len + 1) * sizeof(char)); + if (buf == NULL) + return -1; const char *p = buf; enum {LHS, RHS} state = LHS; @@ -149,8 +151,18 @@ error: static int add_octal_rule_to_permchain(const char *start, const char *end, struct permchain *pc) { + // Make [start..end[ available as a null-terminated string to `strtol` + const int len = end - start; + char * const buf = malloc((len + 1) * sizeof(char)); + if (buf == NULL) + return -1; + memcpy(buf, start, len); + buf[len] = '\0'; + struct permchain *newpc = permchain_create(); - long mode = strtol(start, NULL, 8); + + long mode = strtol(buf, NULL, 8); + free(buf); if (mode < 0 || mode > 0777) { permchain_destroy(newpc); diff --git a/src/usermap.c b/src/usermap.c index f745e74..eb7b61c 100644 --- a/src/usermap.c +++ b/src/usermap.c @@ -52,7 +52,7 @@ UsermapStatus usermap_add_uid(UserMap *map, uid_t from, uid_t to) map->user_from = (uid_t*)realloc(map->user_from, map->user_capacity * sizeof(uid_t)); map->user_to = (uid_t*)realloc(map->user_to, map->user_capacity * sizeof(uid_t)); } - if (usermap_get_uid_or_default(map, from, -1) != -1) { + if (usermap_get_uid_or_default(map, from, -1) != (uid_t)-1) { return usermap_status_duplicate_key; } i = map->user_size; @@ -77,7 +77,7 @@ UsermapStatus usermap_add_gid(UserMap *map, gid_t from, gid_t to) map->group_from = (gid_t*)realloc(map->group_from, map->group_capacity * sizeof(gid_t)); map->group_to = (gid_t*)realloc(map->group_to, map->group_capacity * sizeof(gid_t)); } - if (usermap_get_gid_or_default(map, from, -1) != -1) { + if (usermap_get_gid_or_default(map, from, -1) != (gid_t)-1) { return usermap_status_duplicate_key; } i = map->group_size; |