Skip to content

Commit

Permalink
receiver: map remote names to local uid/gid
Browse files Browse the repository at this point in the history
related to #9
  • Loading branch information
stapelberg committed Feb 23, 2025
1 parent efe6514 commit 0b5df60
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 6 deletions.
4 changes: 2 additions & 2 deletions internal/receiver/flist.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,8 @@ func (rt *Transfer) ReceiveFileList() ([]*File, error) {
if err != nil {
return nil, err
}
_ = users
_ = groups
rt.Users = users
rt.Groups = groups
}

// read the i/o error flag
Expand Down
2 changes: 2 additions & 0 deletions internal/receiver/transfer.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ type Transfer struct {
Conn *rsyncwire.Conn
Seed int32
IOErrors int32
Users map[int32]mapping
Groups map[int32]mapping
}

func (rt *Transfer) listOnly() bool { return rt.Dest == "" }
24 changes: 20 additions & 4 deletions internal/receiver/uidlist.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package receiver
import (
"io"
"log"
"os/user"
"strconv"
)

type mapping struct {
Expand Down Expand Up @@ -41,8 +43,15 @@ func (rt *Transfer) RecvIdList() (users map[int32]mapping, groups map[int32]mapp
if rt.Opts.PreserveUid {
var err error
users, err = rt.recvIdMapping1(func(remoteUid int32, remoteUsername string) int32 {
// TODO: look up local uid by username
return remoteUid
u, err := user.Lookup(remoteUsername)
if err != nil {
return remoteUid
}
uid, err := strconv.ParseInt(u.Uid, 0, 32)
if err != nil {
return remoteUid
}
return int32(uid)
})
if err != nil {
return nil, nil, err
Expand All @@ -55,8 +64,15 @@ func (rt *Transfer) RecvIdList() (users map[int32]mapping, groups map[int32]mapp
if rt.Opts.PreserveGid {
var err error
groups, err = rt.recvIdMapping1(func(remoteGid int32, remoteGroupname string) int32 {
// TODO: look up local gid by groupname
return remoteGid
g, err := user.LookupGroup(remoteGroupname)
if err != nil {
return remoteGid
}
gid, err := strconv.ParseInt(g.Gid, 0, 32)
if err != nil {
return remoteGid
}
return int32(gid)
})
if err != nil {
return nil, nil, err
Expand Down

0 comments on commit 0b5df60

Please sign in to comment.