From: Christian Brauner Date: Tue, 28 Nov 2017 12:39:15 +0000 (+0100) Subject: storage: constify where possible X-Git-Tag: lxc-3.0.0.beta1~127^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=41dc71558ec372f6e422a46948f35e69ff1cc5d9;p=thirdparty%2Flxc.git storage: constify where possible This was made necessary by changes to the overlay driver. Signed-off-by: Christian Brauner Signed-off-by: Adrian Reber --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 275d0aae8..10ce9f45d 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -2735,7 +2735,7 @@ int chown_mapped_root_exec_wrapper(void *args) * root is privileged with respect to hostuid/hostgid X, allowing * him to do the chown. */ -int chown_mapped_root(char *path, struct lxc_conf *conf) +int chown_mapped_root(const char *path, struct lxc_conf *conf) { uid_t rootuid, rootgid; unsigned long val; @@ -2743,14 +2743,14 @@ int chown_mapped_root(char *path, struct lxc_conf *conf) struct stat sb; char map1[100], map2[100], map3[100], map4[100], map5[100]; char ugid[100]; - char *args1[] = {"lxc-usernsexec", + const char *args1[] = {"lxc-usernsexec", "-m", map1, "-m", map2, "-m", map3, "-m", map5, "--", "chown", ugid, path, NULL}; - char *args2[] = {"lxc-usernsexec", + const char *args2[] = {"lxc-usernsexec", "-m", map1, "-m", map2, "-m", map3, diff --git a/src/lxc/conf.h b/src/lxc/conf.h index 58302cf30..4af5190ba 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h @@ -396,7 +396,7 @@ extern int setup_resource_limits(struct lxc_list *limits, pid_t pid); extern int find_unmapped_nsid(struct lxc_conf *conf, enum idtype idtype); extern int mapped_hostid(unsigned id, struct lxc_conf *conf, enum idtype idtype); -extern int chown_mapped_root(char *path, struct lxc_conf *conf); +extern int chown_mapped_root(const char *path, struct lxc_conf *conf); extern int lxc_ttys_shift_ids(struct lxc_conf *c); extern int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, const char *fn_name); diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 38985ecb1..d7f8bb5c9 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -1315,7 +1315,7 @@ static bool create_run_template(struct lxc_container *c, char *tpath, bool need_ } } } else { /* TODO come up with a better way here! */ - char *src; + const char *src; free(bdev->dest); src = lxc_storage_get_path(bdev->src, bdev->type); bdev->dest = strdup(src); diff --git a/src/lxc/storage/btrfs.c b/src/lxc/storage/btrfs.c index 29b44dfdf..47f199b94 100644 --- a/src/lxc/storage/btrfs.c +++ b/src/lxc/storage/btrfs.c @@ -187,7 +187,8 @@ bool btrfs_detect(const char *path) int btrfs_mount(struct lxc_storage *bdev) { unsigned long mntflags; - char *mntdata, *src; + char *mntdata; + const char *src; int ret; if (strcmp(bdev->type, "btrfs")) @@ -348,7 +349,7 @@ out: int btrfs_snapshot_wrapper(void *data) { - char *src; + const char *src; struct rsync_data_char *arg = data; if (setgid(0) < 0) { @@ -372,7 +373,7 @@ int btrfs_clonepaths(struct lxc_storage *orig, struct lxc_storage *new, const char *oldpath, const char *lxcpath, int snap, uint64_t newsize, struct lxc_conf *conf) { - char *src; + const char *src; if (!orig->dest || !orig->src) return -1; @@ -821,7 +822,7 @@ bool btrfs_try_remove_subvol(const char *path) int btrfs_destroy(struct lxc_storage *orig) { - char *src; + const char *src; src = lxc_storage_get_path(orig->src, "btrfs"); diff --git a/src/lxc/storage/dir.c b/src/lxc/storage/dir.c index 9a050b227..fd2e07526 100644 --- a/src/lxc/storage/dir.c +++ b/src/lxc/storage/dir.c @@ -39,7 +39,7 @@ int dir_clonepaths(struct lxc_storage *orig, struct lxc_storage *new, const char *lxcpath, int snap, uint64_t newsize, struct lxc_conf *conf) { - char *src_no_prefix; + const char *src_no_prefix; int ret; size_t len; @@ -121,7 +121,7 @@ int dir_create(struct lxc_storage *bdev, const char *dest, const char *n, int dir_destroy(struct lxc_storage *orig) { int ret; - char *src; + const char *src; src = lxc_storage_get_path(orig->src, orig->src); @@ -149,7 +149,8 @@ int dir_mount(struct lxc_storage *bdev) { int ret; unsigned long mflags, mntflags; - char *src, *mntdata; + char *mntdata; + const char *src; if (strcmp(bdev->type, "dir")) return -22; diff --git a/src/lxc/storage/loop.c b/src/lxc/storage/loop.c index f98ebcb27..c4d393452 100644 --- a/src/lxc/storage/loop.c +++ b/src/lxc/storage/loop.c @@ -235,7 +235,7 @@ int loop_mount(struct lxc_storage *bdev) { int ret, loopfd; char loname[MAXPATHLEN]; - char *src; + const char *src; if (strcmp(bdev->type, "loop")) return -22; diff --git a/src/lxc/storage/lvm.c b/src/lxc/storage/lvm.c index 86ca7670a..e18ba8424 100644 --- a/src/lxc/storage/lvm.c +++ b/src/lxc/storage/lvm.c @@ -235,7 +235,7 @@ bool lvm_detect(const char *path) int lvm_mount(struct lxc_storage *bdev) { - char *src; + const char *src; if (strcmp(bdev->type, "lvm")) return -22; @@ -330,11 +330,12 @@ static int lvm_snapshot_create_new_uuid_wrapper(void *data) static int lvm_snapshot(struct lxc_storage *orig, const char *path, uint64_t size) { int ret; - char *origsrc, *pathdup, *lv; + char *lv, *pathdup; char sz[24]; char fstype[100]; char cmd_output[MAXPATHLEN]; char repairchar; + const char *origsrc; struct lvcreate_args cmd_args = {0}; ret = snprintf(sz, 24, "%" PRIu64 "b", size); @@ -433,7 +434,8 @@ int lvm_clonepaths(struct lxc_storage *orig, struct lxc_storage *new, (const char *[]){"lvm:", "dev", vg, cname, NULL}, false); } else { - char *dup, *slider, *src; + const char *src; + char *dup, *slider; src = lxc_storage_get_path(orig->src, orig->type); @@ -497,11 +499,11 @@ int lvm_clonepaths(struct lxc_storage *orig, struct lxc_storage *new, bool lvm_create_clone(struct lxc_conf *conf, struct lxc_storage *orig, struct lxc_storage *new, uint64_t newsize) { - char *src; - const char *thinpool; int ret; + const char *src; + const char *thinpool; struct rsync_data data; - char *cmd_args[2]; + const char *cmd_args[2]; char cmd_output[MAXPATHLEN] = {0}; char fstype[100] = "ext4"; uint64_t size = newsize; @@ -560,7 +562,7 @@ bool lvm_create_snapshot(struct lxc_conf *conf, struct lxc_storage *orig, struct lxc_storage *new, uint64_t newsize) { int ret; - char *newsrc; + const char *newsrc; uint64_t size = newsize; if (is_blktype(orig)) { diff --git a/src/lxc/storage/nbd.c b/src/lxc/storage/nbd.c index 1fff5b60e..5262e4e1f 100644 --- a/src/lxc/storage/nbd.c +++ b/src/lxc/storage/nbd.c @@ -118,7 +118,7 @@ bool nbd_detect(const char *path) int nbd_mount(struct lxc_storage *bdev) { int ret = -1, partition; - char *src; + const char *src; char path[50]; if (strcmp(bdev->type, "nbd")) diff --git a/src/lxc/storage/overlay.c b/src/lxc/storage/overlay.c index 81fd80f98..03e02f603 100644 --- a/src/lxc/storage/overlay.c +++ b/src/lxc/storage/overlay.c @@ -54,7 +54,7 @@ int ovl_clonepaths(struct lxc_storage *orig, struct lxc_storage *new, const char int snap, uint64_t newsize, struct lxc_conf *conf) { int ret; - char *src; + const char *src; if (!snap) { ERROR("The overlay storage driver can only be used for " @@ -683,14 +683,14 @@ int ovl_umount(struct lxc_storage *bdev) return ret; } -char *ovl_get_lower(const char *rootfs_path) +const char *ovl_get_lower(const char *rootfs_path) { - char *s1; + const char *s1 = rootfs_path; - s1 = strstr(rootfs_path, ":/"); - if (!s1) - return NULL; - s1++; + if (strncmp(rootfs_path, "overlay:", 8) == 0) + s1 += 8; + else if (strncmp(rootfs_path, "overlayfs:", 10) == 0) + s1 += 10; s1 = strstr(s1, ":/"); if (!s1) @@ -714,16 +714,20 @@ char *ovl_get_rootfs(const char *rootfs_path, size_t *rootfslen) if (!s1) return NULL; - s2 = strstr(s1, ":/"); - if (s2) { - s2 = s2 + 1; - if ((s3 = strstr(s2, ":/"))) - *s3 = '\0'; - rootfsdir = strdup(s2); - if (!rootfsdir) { - free(s1); - return NULL; - } + s2 = s1; + if (strncmp(rootfs_path, "overlay:", 8) == 0) + s2 += 8; + else if (strncmp(rootfs_path, "overlayfs:", 10) == 0) + s2 += 10; + + s3 = strstr(s2, ":/"); + if (s3) + *s3 = '\0'; + + rootfsdir = strdup(s2); + if (!rootfsdir) { + free(s1); + return NULL; } if (!rootfsdir) diff --git a/src/lxc/storage/overlay.h b/src/lxc/storage/overlay.h index 0aa3cb1cc..7eeb3513d 100644 --- a/src/lxc/storage/overlay.h +++ b/src/lxc/storage/overlay.h @@ -66,7 +66,7 @@ extern int ovl_update_abs_paths(struct lxc_conf *lxc_conf, const char *lxc_path, /* To be called from functions in lxccontainer.c: Get lower directory for * overlay rootfs. */ -extern char *ovl_get_lower(const char *rootfs_path); +extern const char *ovl_get_lower(const char *rootfs_path); /* Get rootfs path for overlay backed containers. Allocated memory must be freed * by caller. diff --git a/src/lxc/storage/rbd.c b/src/lxc/storage/rbd.c index e64e80d31..570de53da 100644 --- a/src/lxc/storage/rbd.c +++ b/src/lxc/storage/rbd.c @@ -189,7 +189,7 @@ int rbd_create(struct lxc_storage *bdev, const char *dest, const char *n, int rbd_destroy(struct lxc_storage *orig) { int ret; - char *src; + const char *src; char *rbdfullname; char cmd_output[MAXPATHLEN]; struct rbd_args args = {0}; @@ -233,7 +233,7 @@ bool rbd_detect(const char *path) int rbd_mount(struct lxc_storage *bdev) { - char *src; + const char *src; if (strcmp(bdev->type, "rbd")) return -22; diff --git a/src/lxc/storage/rsync.c b/src/lxc/storage/rsync.c index 55c9504e7..59aaa05c1 100644 --- a/src/lxc/storage/rsync.c +++ b/src/lxc/storage/rsync.c @@ -86,7 +86,7 @@ int lxc_rsync_exec(const char *src, const char *dest) int lxc_rsync(struct rsync_data *data) { int ret; - char *dest, *src; + const char *dest, *src; struct lxc_storage *orig = data->orig, *new = data->new; ret = unshare(CLONE_NEWNS); diff --git a/src/lxc/storage/storage.c b/src/lxc/storage/storage.c index 734773ffa..98aa031b7 100644 --- a/src/lxc/storage/storage.c +++ b/src/lxc/storage/storage.c @@ -338,7 +338,7 @@ struct lxc_storage *storage_copy(struct lxc_container *c, const char *cname, uint64_t newsize, bool *needs_rdep) { int ret; - char *src_no_prefix; + const char *src_no_prefix; struct lxc_storage *new, *orig; bool snap = (flags & LXC_CLONE_SNAPSHOT); bool maybe_snap = (flags & LXC_CLONE_MAYBE_SNAPSHOT); @@ -718,7 +718,7 @@ bool rootfs_is_blockdev(struct lxc_conf *conf) return false; } -char *lxc_storage_get_path(char *src, const char *prefix) +const char *lxc_storage_get_path(char *src, const char *prefix) { size_t prefix_len; diff --git a/src/lxc/storage/storage.h b/src/lxc/storage/storage.h index efc963e3c..fb3b54293 100644 --- a/src/lxc/storage/storage.h +++ b/src/lxc/storage/storage.h @@ -137,6 +137,6 @@ extern struct lxc_storage *storage_create(const char *dest, const char *type, extern void storage_put(struct lxc_storage *bdev); extern bool storage_destroy(struct lxc_conf *conf); extern bool rootfs_is_blockdev(struct lxc_conf *conf); -extern char *lxc_storage_get_path(char *src, const char *prefix); +extern const char *lxc_storage_get_path(char *src, const char *prefix); #endif /* #define __LXC_STORAGE_H */ diff --git a/src/lxc/storage/storage_utils.c b/src/lxc/storage/storage_utils.c index 787f13854..61b2707e1 100644 --- a/src/lxc/storage/storage_utils.c +++ b/src/lxc/storage/storage_utils.c @@ -133,7 +133,7 @@ bool attach_block_device(struct lxc_conf *conf) int blk_getsize(struct lxc_storage *bdev, uint64_t *size) { int fd, ret; - char *src; + const char *src; src = lxc_storage_get_path(bdev->src, bdev->type); fd = open(src, O_RDONLY); @@ -162,11 +162,15 @@ void detach_block_device(struct lxc_conf *conf) */ int detect_fs(struct lxc_storage *bdev, char *type, int len) { - int p[2], ret; + int ret; + int p[2]; size_t linelen; pid_t pid; FILE *f; - char *sp1, *sp2, *sp3, *srcdev, *line = NULL; + char *sp1, *sp2, *sp3; + const char *l, *srcdev; + char devpath[MAXPATHLEN]; + char *line = NULL; if (!bdev || !bdev->src || !bdev->dest) return -1; @@ -218,9 +222,7 @@ int detect_fs(struct lxc_storage *bdev, char *type, int len) exit(1); } - /* if symlink, get the real dev name */ - char devpath[MAXPATHLEN]; - char *l = linkderef(srcdev, devpath); + l = linkderef(srcdev, devpath); if (!l) exit(1); f = fopen("/proc/self/mounts", "r"); @@ -383,7 +385,7 @@ int find_fstype_cb(char *buffer, void *data) return 1; } -char *linkderef(char *path, char *dest) +const char *linkderef(const char *path, char *dest) { struct stat sbuf; ssize_t ret; diff --git a/src/lxc/storage/storage_utils.h b/src/lxc/storage/storage_utils.h index 6f53d6f73..3c6bbb0d7 100644 --- a/src/lxc/storage/storage_utils.h +++ b/src/lxc/storage/storage_utils.h @@ -45,7 +45,7 @@ extern int is_blktype(struct lxc_storage *b); extern int mount_unknown_fs(const char *rootfs, const char *target, const char *options); extern int find_fstype_cb(char *buffer, void *data); -extern char *linkderef(char *path, char *dest); +extern const char *linkderef(const char *path, char *dest); extern bool unpriv_snap_allowed(struct lxc_storage *b, const char *t, bool snap, bool maybesnap); extern bool is_valid_storage_type(const char *type); diff --git a/src/lxc/storage/zfs.c b/src/lxc/storage/zfs.c index be90e5a11..5ee81575e 100644 --- a/src/lxc/storage/zfs.c +++ b/src/lxc/storage/zfs.c @@ -180,7 +180,8 @@ int zfs_mount(struct lxc_storage *bdev) { int ret; size_t oldlen, newlen, totallen; - char *mntdata, *src, *tmp; + char *mntdata, *tmp; + const char *src; unsigned long mntflags; char cmd_output[MAXPATHLEN] = {0}; @@ -287,13 +288,13 @@ bool zfs_copy(struct lxc_conf *conf, struct lxc_storage *orig, char cmd_output[MAXPATHLEN], option[MAXPATHLEN]; struct rsync_data data = {0, 0}; struct zfs_args cmd_args = {0}; - char *argv[] = {"zfs", /* 0 */ - "create", /* 1 */ - "-o", "", /* 2, 3 */ - "-o", "canmount=noauto", /* 4, 5 */ - "-p", /* 6 */ - "", /* 7 */ - NULL}; + const char *argv[] = {"zfs", /* 0 */ + "create", /* 1 */ + "-o", "", /* 2, 3 */ + "-o", "canmount=noauto", /* 4, 5 */ + "-p", /* 6 */ + "", /* 7 */ + NULL}; /* mountpoint */ ret = snprintf(option, MAXPATHLEN, "mountpoint=%s", new->dest); @@ -342,7 +343,8 @@ bool zfs_snapshot(struct lxc_conf *conf, struct lxc_storage *orig, { int ret; size_t snapshot_len, len; - char *orig_src, *tmp, *snap_name, *snapshot; + char *tmp, *snap_name, *snapshot; + const char *orig_src; struct zfs_args cmd_args = {0}; char cmd_output[MAXPATHLEN] = {0}, option[MAXPATHLEN]; @@ -447,8 +449,9 @@ int zfs_clonepaths(struct lxc_storage *orig, struct lxc_storage *new, const char *lxcpath, int snap, uint64_t newsize, struct lxc_conf *conf) { - char *dataset, *orig_src, *tmp; int ret; + char *dataset, *tmp; + const char *orig_src; size_t dataset_len, len; char cmd_output[MAXPATHLEN] = {0}; @@ -576,7 +579,8 @@ int zfs_clonepaths(struct lxc_storage *orig, struct lxc_storage *new, int zfs_destroy(struct lxc_storage *orig) { int ret; - char *dataset, *src, *tmp; + char *dataset, *tmp; + const char *src; bool found; char *parent_snapshot = NULL; struct zfs_args cmd_args = {0}; @@ -709,13 +713,13 @@ int zfs_create(struct lxc_storage *bdev, const char *dest, const char *n, size_t len; struct zfs_args cmd_args = {0}; char cmd_output[MAXPATHLEN], option[MAXPATHLEN]; - char *argv[] = {"zfs", /* 0 */ - "create", /* 1 */ - "-o", "", /* 2, 3 */ - "-o", "canmount=noauto", /* 4, 5 */ - "-p", /* 6 */ - "", /* 7 */ - NULL}; + const char *argv[] = {"zfs", /* 0 */ + "create", /* 1 */ + "-o", "", /* 2, 3 */ + "-o", "canmount=noauto", /* 4, 5 */ + "-p", /* 6 */ + "", /* 7 */ + NULL}; if (!specs || !specs->zfs.zfsroot) zfsroot = lxc_global_config_value("lxc.bdev.zfs.root"); diff --git a/src/lxc/utils.c b/src/lxc/utils.c index 19e6c2ee6..dd8e40d53 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -65,7 +65,7 @@ lxc_log_define(lxc_utils, lxc); */ extern bool btrfs_try_remove_subvol(const char *path); -static int _recursive_rmdir(char *dirname, dev_t pdev, +static int _recursive_rmdir(const char *dirname, dev_t pdev, const char *exclude, int level, bool onedev) { struct dirent *direntp; @@ -180,18 +180,18 @@ static bool is_native_overlayfs(const char *path) } /* returns 0 on success, -1 if there were any failures */ -extern int lxc_rmdir_onedev(char *path, const char *exclude) +extern int lxc_rmdir_onedev(const char *path, const char *exclude) { struct stat mystat; bool onedev = true; - if (is_native_overlayfs(path)) { + if (is_native_overlayfs(path)) onedev = false; - } if (lstat(path, &mystat) < 0) { if (errno == ENOENT) return 0; + ERROR("Failed to stat %s", path); return -1; } diff --git a/src/lxc/utils.h b/src/lxc/utils.h index 94646326f..53c23b816 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h @@ -93,7 +93,7 @@ #define LXC_IDMAPLEN 4096 /* returns 1 on success, 0 if there were any failures */ -extern int lxc_rmdir_onedev(char *path, const char *exclude); +extern int lxc_rmdir_onedev(const char *path, const char *exclude); extern int get_u16(unsigned short *val, const char *arg, int base); extern int mkdir_p(const char *dir, mode_t mode); extern char *get_rundir(void);