12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- // 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)
- }
|