mirror of
https://github.com/syncthing/syncthing.git
synced 2024-11-15 18:08:45 -07:00
46 lines
1.1 KiB
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)
|
||
|
}
|