int ceph_conf_parse_argv(ceph_mount_info *cmount, int argc, const char **argv)
int ceph_chmod(ceph_mount_info *cmount, const char *path, mode_t mode)
int ceph_chown(ceph_mount_info *cmount, const char *path, int uid, int gid)
+ int ceph_lchown(ceph_mount_info *cmount, const char *path, int uid, int gid)
int64_t ceph_lseek(ceph_mount_info *cmount, int fd, int64_t offset, int whence)
void ceph_buffer_free(char *buf)
mode_t ceph_umask(ceph_mount_info *cmount, mode_t mode)
if ret < 0:
raise make_ex(ret, "error in chmod {}".format(path.decode('utf-8')))
- def chown(self, path, uid, gid):
+ def chown(self, path, uid, gid, follow_symlink=True):
"""
Change directory ownership
:param path: the path of the directory to change.
:param uid: the uid to set
:param gid: the gid to set
+ :param follow_symlink: perform the operation on the target file if @path
+ is a symbolic link (default)
"""
self.require_state("mounted")
path = cstr(path, 'path')
char* _path = path
int _uid = uid
int _gid = gid
- with nogil:
- ret = ceph_chown(self.cluster, _path, _uid, _gid)
+ if follow_symlink:
+ with nogil:
+ ret = ceph_chown(self.cluster, _path, _uid, _gid)
+ else:
+ with nogil:
+ ret = ceph_lchown(self.cluster, _path, _uid, _gid)
if ret < 0:
raise make_ex(ret, "error in chown {}".format(path.decode('utf-8')))
+ def lchown(self, path, uid, gid):
+ """
+ Change ownership of a symbolic link
+ :param path: the path of the symbolic link to change.
+ :param uid: the uid to set
+ :param gid: the gid to set
+ """
+ self.chown(path, uid, gid, follow_symlink=False)
+
def mkdirs(self, path, mode):
"""
Create multiple directories at once.