syncthing/lib/model/folder_sendrecv_unix.go

46 lines
1.1 KiB
Go

// Copyright (C) 2022 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
//go:build !windows
// +build !windows
package model
import (
"os/user"
"strconv"
"github.com/syncthing/syncthing/lib/protocol"
)
func (f *sendReceiveFolder) syncOwnership(file *protocol.FileInfo, path string) error {
if file.Platform.Unix == nil {
// No owner data, nothing to do
return nil
}
// Try to look up the user and group by name, defaulting to the
// numerical UID and GID if there is no match.
uid := strconv.Itoa(file.Platform.Unix.UID)
if file.Platform.Unix.OwnerName != "" {
us, err := user.Lookup(file.Platform.Unix.OwnerName)
if err == nil && us.Uid != "" {
uid = us.Uid
}
}
gid := strconv.Itoa(file.Platform.Unix.GID)
if file.Platform.Unix.GroupName != "" {
gr, err := user.LookupGroup(file.Platform.Unix.GroupName)
if err == nil && gr.Gid != "" {
gid = gr.Gid
}
}
return f.mtimefs.Lchown(path, uid, gid)
}