mirror of
https://github.com/zrepl/zrepl.git
synced 2024-11-23 00:43:51 +01:00
27 lines
585 B
Go
27 lines
585 B
Go
package cmd
|
|
|
|
import (
|
|
"github.com/pkg/errors"
|
|
"net"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func ListenUnixPrivate(sockaddr *net.UnixAddr) (*net.UnixListener, error) {
|
|
|
|
sockdir := filepath.Dir(sockaddr.Name)
|
|
sdstat, err := os.Stat(sockdir)
|
|
if err != nil {
|
|
return nil, errors.Wrapf(err, "cannot stat(2) '%s'", sockdir)
|
|
}
|
|
if !sdstat.IsDir() {
|
|
return nil, errors.Errorf("%s is not a directory: %s", sockdir)
|
|
}
|
|
p := sdstat.Mode().Perm()
|
|
if p&0007 != 0 {
|
|
return nil, errors.Errorf("%s must not be world-accessible (permissions are %#o)", p)
|
|
}
|
|
|
|
return net.ListenUnix("unix", sockaddr)
|
|
}
|