예제 #1
0
파일: chirp_multi.c 프로젝트: liblit/Murphy
INT64_T chirp_multi_lchown(const char *volume, const char *path, INT64_T uid, INT64_T gid, time_t stoptime)
{
	struct file_info info;
	if(chirp_multi_lookup(volume, path, &info, stoptime)) {
		return chirp_reli_lchown(info.rhost, info.rpath, uid, gid, stoptime);
	} else if(errno == EISDIR) {
		return chirp_reli_lchown(current_volume->host, info.lpath, uid, gid, stoptime);
	} else {
		return -1;
	}
}
예제 #2
0
INT64_T chirp_global_lchown(const char *host, const char *path, INT64_T uid, INT64_T gid, time_t stoptime)
{
	if(is_multi_path(host)) {
		char mhost[CHIRP_PATH_MAX];
		char mpath[CHIRP_PATH_MAX];
		parse_multi_path(path, mhost, mpath);
		return chirp_multi_lchown(mhost, mpath, uid, gid, stoptime);
	} else if(not_empty(path)) {
		return chirp_reli_lchown(host, path, uid, gid, stoptime);
	} else if(not_empty(host)) {
		if(server_lookup(host, stoptime)) {
			errno = EACCES;
			return -1;
		} else {
			errno = ENOENT;
			return -1;
		}
	} else {
		errno = EACCES;
		return -1;
	}
}