Skip to content

Commit

Permalink
Fixed sockets etc.
Browse files Browse the repository at this point in the history
  • Loading branch information
lkarlslund committed Nov 9, 2023
1 parent 9ab5720 commit d271c32
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 22 deletions.
30 changes: 17 additions & 13 deletions client.go
Expand Up @@ -235,8 +235,8 @@ func (c *Client) Run(client *rpc.Client) error {
}
}

if !create_file && uint32(localfi.Permissions)&^uint32(os.ModePerm) != uint32(remotefi.Permissions)&^uint32(os.ModePerm) {
logger.Debug().Msgf("File %s is indicating type change from %X to %X, unlinking", localpath, uint32(localfi.Permissions)&^uint32(os.ModePerm), remotefi.Permissions&^uint32(os.ModePerm))
if !create_file && localfi.Mode&os.ModeType != remotefi.Mode&os.ModeType {
logger.Debug().Msgf("File %s is indicating type change from %v to %v, unlinking", localpath, localfi.Mode.String(), remotefi.Mode.String())
err = os.Remove(localpath)
if err != nil {
logger.Error().Msgf("Error unlinking %s: %v", localpath, err)
Expand Down Expand Up @@ -326,6 +326,18 @@ func (c *Client) Run(client *rpc.Client) error {
continue
}
}
} else if remotefi.Mode&fs.ModeNamedPipe != 0 {
err = mkNod(localpath, syscall.S_IFIFO, remotefi.Rdev)
if err != nil {
logger.Error().Msgf("Error creating fifo %s: %v", localpath, err)
continue
}
} else if remotefi.Mode&fs.ModeSocket != 0 {
err = mkNod(localpath, syscall.S_IFSOCK, remotefi.Rdev)
if err != nil {
logger.Error().Msgf("Error creating socket %s: %v", localpath, err)
continue
}
} else if remotefi.Mode&fs.ModeSymlink != 0 {
err = syscall.Symlink(remotefi.LinkTo, localpath)
if err != nil {
Expand Down Expand Up @@ -477,17 +489,9 @@ func (c *Client) Run(client *rpc.Client) error {
}
if donewithdirectory {
localname := filepath.Join(c.BasePath, lookupdirectory.name)
localfi, err := os.Stat(localname)
if err != nil {
logger.Error().Msgf("Error getting file info for directory %s: %v", lookupdirectory.name, err)
}
localstat, ok := localfi.Sys().(*syscall.Stat_t)
if !ok {
logger.Error().Msgf("Error getting file info for directory %s: %v", lookupdirectory.name, err)
}
localatim, localmtim, _ := getAMtime(*localstat)
if atim != localatim || mtim != localmtim {
logger.Debug().Msgf("Updating metadata for directory %s", localname)
localfi, err := PathToFileInfo(localname)
if localfi.Atim != atim || localfi.Mtim != mtim {
logger.Trace().Msgf("Updating metadata for directory %s", localname)
err = unix.UtimesNanoAt(unix.AT_FDCWD, localname, []unix.Timespec{unix.Timespec(atim), unix.Timespec(mtim)}, unix.AT_SYMLINK_NOFOLLOW)
if err != nil {
logger.Error().Msgf("Error changing times for directory %s: %v", lookupdirectory.name, err)
Expand Down
19 changes: 10 additions & 9 deletions fileinfo.go
Expand Up @@ -62,28 +62,28 @@ func InfoToFileInfo(info os.FileInfo, absolutepath string) (FileInfo, error) {
fi.Ctim = ctim

if fi.Mode&os.ModeSymlink != 0 {
logger.Debug().Msgf("Detected %v as symlink", fi.Name)
logger.Trace().Msgf("Detected %v as symlink", fi.Name)
// Symlink - read link and store in fi variable
linkto := make([]byte, 65536)
n, err := syscall.Readlink(absolutepath, linkto)
if err != nil {
logger.Error().Msgf("Error reading link to %v: %v", fi.Name, err)
} else {
logger.Debug().Msgf("Detected %v as symlink to %v", fi.Name, string(linkto))
logger.Trace().Msgf("Detected %v as symlink to %v", fi.Name, string(linkto))
}
fi.LinkTo = string(linkto[0:n])
} else if fi.Mode&os.ModeCharDevice != 0 && fi.Mode&os.ModeDevice != 0 {
logger.Debug().Msgf("Detected %v as character device", fi.Name)
logger.Trace().Msgf("Detected %v as character device", fi.Name)
} else if fi.Mode&os.ModeDir != 0 {
logger.Debug().Msgf("Detected %v as directory", fi.Name)
logger.Trace().Msgf("Detected %v as directory", fi.Name)
} else if fi.Mode&os.ModeSocket != 0 {
logger.Debug().Msgf("Detected %v as socket", fi.Name)
logger.Trace().Msgf("Detected %v as socket", fi.Name)
} else if fi.Mode&os.ModeNamedPipe != 0 {
logger.Debug().Msgf("Detected %v as FIFO", fi.Name)
logger.Trace().Msgf("Detected %v as FIFO", fi.Name)
} else if fi.Mode&os.ModeDevice != 0 {
logger.Debug().Msgf("Detected %v as device", fi.Name)
logger.Trace().Msgf("Detected %v as device", fi.Name)
} else {
logger.Debug().Msgf("Detected %v as regular file", fi.Name)
logger.Trace().Msgf("Detected %v as regular file", fi.Name)
}
} else {
return fi, fmt.Errorf("stat failed, I got a %T", info.Sys())
Expand Down Expand Up @@ -126,7 +126,8 @@ func (fi FileInfo) ApplyChanges(fi2 FileInfo) error {
logger.Error().Msgf("Error changing owner for %s: %v", fi.Name, err)
}
if fi2.Mode&fs.ModeSymlink == 0 {
err = unix.Chmod(fi.Name, fi2.Permissions)
// err = unix.Chmod(fi.Name, fi2.Permissions)
err = os.Chmod(fi.Name, fi2.Mode)
if err != nil {
logger.Error().Msgf("Error changing mode for %s: %v", fi.Name, err)
}
Expand Down

0 comments on commit d271c32

Please sign in to comment.