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