本文整理汇总了Golang中syscall.Umask函数的典型用法代码示例。如果您正苦于以下问题:Golang Umask函数的具体用法?Golang Umask怎么用?Golang Umask使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Umask函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestMknod
func TestMknod(t *testing.T) {
t.Parallel()
if os.Getuid() != 0 {
t.Skip("skipping unless root")
}
f := &mknod1{}
mnt, err := fstestutil.MountedT(t, fstestutil.SimpleFS{f})
if err != nil {
t.Fatal(err)
}
defer mnt.Close()
defer syscall.Umask(syscall.Umask(0))
err = syscall.Mknod(mnt.Dir+"/node", syscall.S_IFIFO|0666, 123)
if err != nil {
t.Fatalf("Mknod: %v", err)
}
want := fuse.MknodRequest{
Name: "node",
Mode: os.FileMode(os.ModeNamedPipe | 0666),
Rdev: uint32(123),
}
if runtime.GOOS == "linux" {
// Linux fuse doesn't echo back the rdev if the node
// isn't a device (we're using a FIFO here, as that
// bit is portable.)
want.Rdev = 0
}
if g, e := f.RecordedMknod(), want; g != e {
t.Fatalf("mknod saw %+v, want %+v", g, e)
}
}
示例2: main
func main() {
if !flag.Parsed() {
flag.Parse()
}
var regexHandler = NewHttpHandlerRegexMatcher()
http.Handle("/", http.StripPrefix(*prefix, regexHandler))
regexHandler.Handle("/test", HttpHandlerRestHandler{5})
regexHandler.Handle("/test/", HttpHandlerRestHandler{5})
regexHandler.Handle("/test/{id}", HttpHandlerRestHandler{5})
regexHandler.Handle("/ses/{request}", oauthFlowHandler{})
var socket = *socket
os.Remove(socket)
oldUmask := syscall.Umask(000)
l, err := net.Listen("unix", socket)
syscall.Umask(oldUmask)
if err != nil {
panic(err)
}
panic(fcgi.Serve(l, http.DefaultServeMux))
}
示例3: UnixAudienceListener
func UnixAudienceListener(sockaddr string, sockmode os.FileMode, sockuid int, sockgid int) {
fi, err := os.Stat(sockaddr)
if err == nil {
if (fi.Mode() & os.ModeSocket) != 0 {
os.Remove(sockaddr)
} else {
o.Fail("%s exists and is not a socket", sockaddr)
}
}
err = os.MkdirAll(path.Dir(sockaddr), 0755)
o.MightFail(err, "Couldn't create socket directory")
laddr, err := net.ResolveUnixAddr("unix", sockaddr)
o.MightFail(err, "Couldn't resolve audience socket address")
old_umask := syscall.Umask(0777)
defer syscall.Umask(old_umask)
l, err := net.ListenUnix("unix", laddr)
o.MightFail(err, "Couldn't start audience unixsock listener")
if sockuid >= 0 || sockgid >= 0 {
err = os.Chown(sockaddr, sockuid, sockgid)
o.MightFail(err, "Couldn't chown audience unixsock listener")
}
err = os.Chmod(sockaddr, sockmode)
o.MightFail(err, "Couldn't chmod audience unixsock listener")
// make sure we clean up the unix socket when we die.
defer l.Close()
defer os.Remove(sockaddr)
AudienceListener(l)
}
示例4: UnpackTar
// UnpackTar unpacks the given tar file into the target directory
func UnpackTar(r io.Reader, targetDir string, fn UnpackTarTransformFunc) error {
// ensure we we extract with the original permissions
oldUmask := syscall.Umask(0)
defer syscall.Umask(oldUmask)
return TarIterate(r, func(tr *tar.Reader, hdr *tar.Header) (err error) {
// run tar transform func
name := hdr.Name
if fn != nil {
name, err = fn(hdr.Name)
if err != nil {
return err
}
}
path := filepath.Join(targetDir, name)
mode := hdr.FileInfo().Mode()
if err := os.MkdirAll(filepath.Dir(path), 0777); err != nil {
return err
}
switch {
case mode.IsDir():
err := os.Mkdir(path, mode)
if err != nil {
return nil
}
case IsSymlink(mode):
if err := os.Symlink(hdr.Linkname, path); err != nil {
return err
}
case IsDevice(mode):
switch {
case (mode & os.ModeCharDevice) != 0:
mode |= syscall.S_IFCHR
case (mode & os.ModeDevice) != 0:
mode |= syscall.S_IFBLK
}
devNum := Makedev(uint32(hdr.Devmajor), uint32(hdr.Devminor))
err = mknod(path, uint32(mode), int(devNum))
if err != nil {
return err
}
case mode.IsRegular():
out, err := os.OpenFile(path, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, mode)
if err != nil {
return err
}
defer out.Close()
_, err = io.Copy(out, tr)
if err != nil {
return err
}
default:
return &ErrUnsupportedFileType{path, mode}
}
return nil
})
}
示例5: Setup
// Setup initializes the proper /dev/console inside the rootfs path
func Setup(rootfs, consolePath, mountLabel string) error {
oldMask := syscall.Umask(0000)
defer syscall.Umask(oldMask)
if err := os.Chmod(consolePath, 0600); err != nil {
return err
}
if err := os.Chown(consolePath, 0, 0); err != nil {
return err
}
if err := label.SetFileLabel(consolePath, mountLabel); err != nil {
return fmt.Errorf("set file label %s %s", consolePath, err)
}
dest := filepath.Join(rootfs, "dev/console")
f, err := os.Create(dest)
if err != nil && !os.IsExist(err) {
return fmt.Errorf("create %s %s", dest, err)
}
if f != nil {
f.Close()
}
if err := syscall.Mount(consolePath, dest, "bind", syscall.MS_BIND, ""); err != nil {
return fmt.Errorf("bind %s to %s %s", consolePath, dest, err)
}
return nil
}
示例6: createBase
func createBase(t *testing.T, driver graphdriver.Driver, name string) {
// We need to be able to set any perms
oldmask := syscall.Umask(0)
defer syscall.Umask(oldmask)
if err := driver.Create(name, ""); err != nil {
t.Fatal(err)
}
dir, err := driver.Get(name, "")
if err != nil {
t.Fatal(err)
}
defer driver.Put(name)
subdir := path.Join(dir, "a subdir")
if err := os.Mkdir(subdir, 0705|os.ModeSticky); err != nil {
t.Fatal(err)
}
if err := os.Chown(subdir, 1, 2); err != nil {
t.Fatal(err)
}
file := path.Join(dir, "a file")
if err := ioutil.WriteFile(file, []byte("Some data"), 0222|os.ModeSetuid); err != nil {
t.Fatal(err)
}
}
示例7: applyLayer
func applyLayer() {
runtime.LockOSThread()
flag.Parse()
if err := chroot(flag.Arg(0)); err != nil {
fatal(err)
}
// We need to be able to set any perms
oldmask := syscall.Umask(0)
defer syscall.Umask(oldmask)
tmpDir, err := ioutil.TempDir("/", "temp-docker-extract")
if err != nil {
fatal(err)
}
os.Setenv("TMPDIR", tmpDir)
size, err := archive.UnpackLayer("/", os.Stdin)
os.RemoveAll(tmpDir)
if err != nil {
fatal(err)
}
encoder := json.NewEncoder(os.Stdout)
if err := encoder.Encode(applyLayerResponse{size}); err != nil {
fatal(fmt.Errorf("unable to encode layerSize JSON: %s", err))
}
flush(os.Stdout)
flush(os.Stdin)
os.Exit(0)
}
示例8: TestCreate
func TestCreate(t *testing.T) {
t.Parallel()
f := &create1{}
mnt, err := fstestutil.MountedT(t, fstestutil.SimpleFS{f})
if err != nil {
t.Fatal(err)
}
defer mnt.Close()
// uniform umask needed to make os.Create's 0666 into something
// reproducible
defer syscall.Umask(syscall.Umask(0022))
ff, err := os.Create(mnt.Dir + "/foo")
if err != nil {
t.Fatalf("create1 WriteFile: %v", err)
}
defer ff.Close()
err = syscall.Fsync(int(ff.Fd()))
if err != nil {
t.Fatalf("Fsync = %v", err)
}
if f.f.RecordedFsync() == (fuse.FsyncRequest{}) {
t.Errorf("never received expected fsync call")
}
ff.Close()
}
示例9: newUnixListener
func newUnixListener(addr string) (net.Listener, error) {
if err := syscall.Unlink(addr); err != nil && !os.IsNotExist(err) {
return nil, err
}
// there is no way to specify the unix rights to use when
// creating the socket with net.Listener, so we use umask
// to create the file without rights and then we chmod
// to the desired unix rights. This prevent unwanted
// connections between the creation and the chmod
mask := syscall.Umask(0777)
defer syscall.Umask(mask)
l, err := newListener("unix", addr)
if err != nil {
return nil, err
}
// only usable by the user who started swarm
if err := os.Chmod(addr, 0600); err != nil {
return nil, err
}
return l, nil
}
示例10: TestUnpackPermissions
func (ts *HTestSuite) TestUnpackPermissions(c *C) {
tarArchive := filepath.Join(c.MkDir(), "foo.tar")
canaryName := "foo"
canaryPerms := os.FileMode(0644)
tmpdir := c.MkDir()
err := ioutil.WriteFile(filepath.Join(tmpdir, canaryName), []byte(nil), canaryPerms)
c.Assert(err, IsNil)
ChDir(tmpdir, func() error {
cmd := exec.Command("tar", "cvf", tarArchive, ".")
_, err = cmd.CombinedOutput()
c.Assert(err, IsNil)
return err
})
// set crazy umask
oldUmask := syscall.Umask(0077)
defer syscall.Umask(oldUmask)
// unpack
unpackdir := c.MkDir()
f, err := os.Open(tarArchive)
c.Assert(err, IsNil)
defer f.Close()
UnpackTar(f, unpackdir, nil)
st, err := os.Stat(filepath.Join(unpackdir, canaryName))
c.Assert(err, IsNil)
c.Assert(st.Mode()&os.ModePerm, Equals, canaryPerms)
}
示例11: main
func main() {
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
fmt.Fprintf(os.Stderr, "\n %s [OPTIONS]\n\nOptions:\n", os.Args[0])
flag.PrintDefaults()
}
flag.Parse()
version := fmt.Sprintf("async %s", Version)
if *printVersion {
fmt.Println(version)
os.Exit(0)
}
log.Printf("Starting %s", version)
// Good housekeeping for Unix sockets: unlink before binding
if *listenNetwork == "unix" {
if err := os.Remove(*listenAddr); err != nil && !os.IsNotExist(err) {
log.Fatal(err)
}
}
// Change the umask only around net.Listen()
oldUmask := syscall.Umask(*listenUmask)
listener, err := net.Listen(*listenNetwork, *listenAddr)
syscall.Umask(oldUmask)
if err != nil {
log.Fatal(err)
}
async := NewASync(*cmdPrefix, *cmdsChanSize)
log.Fatal(http.Serve(listener, async))
}
示例12: test
func (f *mknod1) test(path string, t *testing.T) {
if os.Getuid() != 0 {
t.Logf("skipping unless root")
return
}
defer syscall.Umask(syscall.Umask(0))
err := syscall.Mknod(path+"/node", syscall.S_IFIFO|0666, 123)
if err != nil {
t.Fatalf("Mknod: %v", err)
}
gotr := <-f.seen.gotr
if gotr == nil {
t.Fatalf("no recorded MknodRequest")
}
if g, e := gotr.Name, "node"; g != e {
t.Errorf("got Name = %q; want %q", g, e)
}
if g, e := gotr.Rdev, uint32(123); g != e {
if runtime.GOOS == "linux" {
// Linux fuse doesn't echo back the rdev if the node
// isn't a device (we're using a FIFO here, as that
// bit is portable.)
} else {
t.Errorf("got Rdev = %v; want %v", g, e)
}
}
if g, e := gotr.Mode, os.FileMode(os.ModeNamedPipe|0666); g != e {
t.Errorf("got Mode = %v; want %v", g, e)
}
t.Logf("Got request: %#v", gotr)
}
示例13: setupUnixHttp
func setupUnixHttp(addr string, job *engine.Job) (*HttpServer, error) {
r, err := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version"))
if err != nil {
return nil, err
}
if err := syscall.Unlink(addr); err != nil && !os.IsNotExist(err) {
return nil, err
}
mask := syscall.Umask(0777)
defer syscall.Umask(mask)
l, err := newListener("unix", addr, job.GetenvBool("BufferRequests"))
if err != nil {
return nil, err
}
if err := setSocketGroup(addr, job.Getenv("SocketGroup")); err != nil {
return nil, err
}
if err := os.Chmod(addr, 0660); err != nil {
return nil, err
}
return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil
}
示例14: CopyFileSetPerms
// CopyFileSetPerms copies from src to dst until either EOF is reached
// on src or an error occurs. It will create the destination file with
// the specified permissions and return the number of bytes written (int64)
// and an error (nil if no error).
// Note: if destination file exists it will be removed by this routine
func CopyFileSetPerms(src, dst string, mode os.FileMode) (int64, error) {
cleanSrc := filepath.Clean(src)
cleanDst := filepath.Clean(dst)
if cleanSrc == cleanDst {
return 0, nil
}
sf, err := os.Open(cleanSrc)
if err != nil {
return 0, out.WrapErr(err, "Failed to open source file", 4004)
}
defer sf.Close()
if err := os.Remove(cleanDst); err != nil && !os.IsNotExist(err) {
return 0, out.WrapErr(err, "Failed to clean/remove destination file", 4005)
}
oldUmask := syscall.Umask(0)
defer syscall.Umask(oldUmask)
df, err := os.OpenFile(cleanDst, syscall.O_CREAT|syscall.O_EXCL|syscall.O_APPEND|syscall.O_WRONLY, mode)
if err != nil {
return 0, out.WrapErr(err, "Failed to create destination file", 4006)
}
defer df.Close()
bytes, err := io.Copy(df, sf)
if err != nil {
return bytes, out.WrapErr(err, "Failed to copy source file to destination", 4007)
}
return bytes, nil
}
示例15: TestCachePath
func TestCachePath(t *testing.T) {
home, umask := os.Getenv("HOME"), syscall.Umask(0)
abs, _ := filepath.Abs(".")
defer func() {
syscall.Umask(umask)
_ = os.RemoveAll(filepath.Join(abs, ".cache"))
_ = os.Setenv("HOME", home)
}()
_ = os.Setenv("HOME", abs)
if err := os.Mkdir(filepath.Join(abs, ".cache"), 0777); err != nil {
t.Fatal("Could not initialize test")
}
file := cachePath()
if file == nil {
t.Fatal("The given file should be ok")
}
info, err := file.Stat()
if err != nil {
t.Fatal("I should be able to stat the given file")
}
name, mode := file.Name(), info.Mode().Perm()
_ = file.Close()
_ = os.Remove(name)
if name != filepath.Join(abs, ".cache", cacheName) {
t.Fatal("Unexpected name")
}
if mode != 0666 {
t.Fatal("Given file does not come from hell ;)")
}
}