aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2019-04-07 11:31:50 -0700
committerChris Lu <chris.lu@gmail.com>2019-04-07 11:31:50 -0700
commitd14b614407a96e3d81bc655e5164d202c7e3b959 (patch)
tree67887ff6d6e5ac78cb46546575a878a693303fd1
parenta32abda1a3fb696687739805faa1f5444d86c5fa (diff)
downloadseaweedfs-d14b614407a96e3d81bc655e5164d202c7e3b959.tar.xz
seaweedfs-d14b614407a96e3d81bc655e5164d202c7e3b959.zip
weed filer.copy: use existing file owner and gropu id
-rw-r--r--weed/command/filer_copy.go14
-rw-r--r--weed/util/file_util_non_posix.go12
-rw-r--r--weed/util/file_util_posix.go11
3 files changed, 33 insertions, 4 deletions
diff --git a/weed/command/filer_copy.go b/weed/command/filer_copy.go
index 18b641ae5..777e52ab6 100644
--- a/weed/command/filer_copy.go
+++ b/weed/command/filer_copy.go
@@ -170,11 +170,15 @@ func genFileCopyTask(fileOrDir string, destPath string, fileCopyTaskChan chan Fi
return nil
}
+ uid, gid := util.GetFileUidGid(fi)
+
fileCopyTaskChan <- FileCopyTask{
sourceLocation: fileOrDir,
destinationUrlPath: destPath,
fileSize: fi.Size(),
fileMode: fi.Mode(),
+ uid: uid,
+ gid: gid,
}
return nil
@@ -200,6 +204,8 @@ type FileCopyTask struct {
destinationUrlPath string
fileSize int64
fileMode os.FileMode
+ uid uint32
+ gid uint32
}
func (worker *FileCopyWorker) doEachCopy(ctx context.Context, task FileCopyTask) error {
@@ -287,8 +293,8 @@ func (worker *FileCopyWorker) uploadFileAsOne(ctx context.Context, task FileCopy
Attributes: &filer_pb.FuseAttributes{
Crtime: time.Now().Unix(),
Mtime: time.Now().Unix(),
- Gid: uint32(os.Getgid()),
- Uid: uint32(os.Getuid()),
+ Gid: task.gid,
+ Uid: task.uid,
FileSize: uint64(task.fileSize),
FileMode: uint32(task.fileMode),
Mime: mimeType,
@@ -361,8 +367,8 @@ func (worker *FileCopyWorker) uploadFileInChunks(ctx context.Context, task FileC
Attributes: &filer_pb.FuseAttributes{
Crtime: time.Now().Unix(),
Mtime: time.Now().Unix(),
- Gid: uint32(os.Getgid()),
- Uid: uint32(os.Getuid()),
+ Gid: task.gid,
+ Uid: task.uid,
FileSize: uint64(task.fileSize),
FileMode: uint32(task.fileMode),
Mime: mimeType,
diff --git a/weed/util/file_util_non_posix.go b/weed/util/file_util_non_posix.go
new file mode 100644
index 000000000..ffcfef6d5
--- /dev/null
+++ b/weed/util/file_util_non_posix.go
@@ -0,0 +1,12 @@
+// +build linux darwin freebsd netbsd openbsd plan9 solaris zos
+
+package util
+
+import (
+ "os"
+ "syscall"
+)
+
+func GetFileUidGid(fi os.FileInfo) (uid, gid uint32) {
+ return fi.Sys().(*syscall.Stat_t).Uid, fi.Sys().(*syscall.Stat_t).Gid
+}
diff --git a/weed/util/file_util_posix.go b/weed/util/file_util_posix.go
new file mode 100644
index 000000000..22ca60b3b
--- /dev/null
+++ b/weed/util/file_util_posix.go
@@ -0,0 +1,11 @@
+// +build windows
+
+package util
+
+import (
+ "os"
+)
+
+func GetFileUidGid(fi os.FileInfo) (uid, gid uint32) {
+ return 0, 0
+}