]> Cypherpunks.ru repositories - nncp.git/commitdiff
umask friendly permissions for newly created files/directories
authorSergey Matveev <stargrave@stargrave.org>
Thu, 7 Nov 2019 08:10:37 +0000 (11:10 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Thu, 7 Nov 2019 08:10:37 +0000 (11:10 +0300)
doc/news.ru.texi
doc/news.texi
src/cmd/nncp-bundle/main.go
src/cmd/nncp-reass/main.go
src/cmd/nncp-xfer/main.go
src/ctx.go
src/lockdir.go
src/log.go
src/sp.go
src/tmp.go
src/toss.go

index 4f15cd776ed0d3b6456539b221a48b9c44c3655c..71a0b8e4f12c5f8ddc803ad81ef16e69bebf90a3 100644 (file)
@@ -4,6 +4,8 @@
 @node Релиз 4.2.0
 @subsection Релиз 4.2.0
 @itemize
+@item По умолчанию файлы и директории создаются с 666/777 правами
+    доступа, позволяя управлять ими @command{umask}-ом.
 @item Обновлены зависимости.
 @item Полное использование go модулей для управления зависимостями
     (используется @code{go.cypherpunks.ru/nncp/v4} namespace).
index b1e4e4088cf0067bdf2decb9176267d154207f30..7a8b9b94896d6eb51b360eb2b4881c609a174c08 100644 (file)
@@ -6,6 +6,8 @@ See also this page @ref{Новости, on russian}.
 @node Release 4.2.0
 @section Release 4.2.0
 @itemize
+@item Files and directories are created with 666/777 permissions by
+    default, allowing control with @command{umask}.
 @item Updated dependencies.
 @item Full usage of go modules for dependencies management
     (@code{go.cypherpunks.ru/nncp/v4} namespace is used).
index 05d7dc9db1fdadbf50961e21f75688952b04a530..cdeef4fe071d18812fedd79f6af9f87a2fb5e512 100644 (file)
@@ -370,7 +370,7 @@ func main() {
                                                log.Fatalln("Error during syncing:", err)
                                        }
                                        tmp.Close()
-                                       if err = os.MkdirAll(selfPath, os.FileMode(0700)); err != nil {
+                                       if err = os.MkdirAll(selfPath, os.FileMode(0777)); err != nil {
                                                log.Fatalln("Error during mkdir:", err)
                                        }
                                        if err = os.Rename(tmp.Name(), dstPath); err != nil {
index a798bd37f0e02f2044fb4de036b45e9c7ad7dfb2..bc8f0348b2b96cdadfd689bc4592d1c3c57d4e3e 100644 (file)
@@ -26,7 +26,6 @@ import (
        "fmt"
        "hash"
        "io"
-       "io/ioutil"
        "log"
        "os"
        "path/filepath"
@@ -172,7 +171,7 @@ func process(ctx *nncp.Ctx, path string, keep, dryRun, stdout, dumpMeta bool) bo
                dst = os.Stdout
                sds = nncp.SDS{"path": path}
        } else {
-               tmp, err = ioutil.TempFile(mainDir, "nncp-reass")
+               tmp, err = nncp.TempFile(mainDir, "reass")
                if err != nil {
                        log.Fatalln(err)
                }
index dc6811c13a953b7cc61f6f35acd29439cd8e3055..a2d1d29658cd30e9b9152f90c25d686d739bf9fd 100644 (file)
@@ -23,7 +23,6 @@ import (
        "flag"
        "fmt"
        "io"
-       "io/ioutil"
        "log"
        "os"
        "path/filepath"
@@ -244,7 +243,7 @@ Tx:
                                        ctx.UnlockDir(dirLock)
                                        continue
                                }
-                               if err = os.Mkdir(nodePath, os.FileMode(0700)); err != nil {
+                               if err = os.Mkdir(nodePath, os.FileMode(0777)); err != nil {
                                        ctx.UnlockDir(dirLock)
                                        ctx.LogE("nncp-xfer", nncp.SdsAdd(sds, nncp.SDS{"err": err}), "mkdir")
                                        isBad = true
@@ -262,7 +261,7 @@ Tx:
                _, err = os.Stat(dstPath)
                if err != nil {
                        if os.IsNotExist(err) {
-                               if err = os.Mkdir(dstPath, os.FileMode(0700)); err != nil {
+                               if err = os.Mkdir(dstPath, os.FileMode(0777)); err != nil {
                                        ctx.UnlockDir(dirLock)
                                        ctx.LogE("nncp-xfer", nncp.SdsAdd(sds, nncp.SDS{"err": err}), "mkdir")
                                        isBad = true
@@ -294,7 +293,7 @@ Tx:
                                job.Fd.Close()
                                continue
                        }
-                       tmp, err := ioutil.TempFile(dstPath, "nncp-xfer")
+                       tmp, err := nncp.TempFile(dstPath, "xfer")
                        if err != nil {
                                ctx.LogE("nncp-xfer", nncp.SdsAdd(sds, nncp.SDS{"err": err}), "mktemp")
                                job.Fd.Close()
index 28c9b38de1bfcaa5083a9b1ad82c28ac91c0f136..03fe80e2cff2c73b05d9437b1c725b8d910beb77 100644 (file)
@@ -59,7 +59,7 @@ func (ctx *Ctx) FindNode(id string) (*Node, error) {
 
 func (ctx *Ctx) ensureRxDir(nodeId *NodeId) error {
        dirPath := filepath.Join(ctx.Spool, nodeId.String(), string(TRx))
-       if err := os.MkdirAll(dirPath, os.FileMode(0700)); err != nil {
+       if err := os.MkdirAll(dirPath, os.FileMode(0777)); err != nil {
                ctx.LogE("dir-ensure", SDS{"dir": dirPath, "err": err}, "")
                return err
        }
index 3a9afdccb61713c53c45c432a1ab5704b7709338..32f9f6465efd9e3fe04f35452a3014f91392b9bb 100644 (file)
@@ -30,7 +30,7 @@ func (ctx *Ctx) LockDir(nodeId *NodeId, xx TRxTx) (*os.File, error) {
        dirLock, err := os.OpenFile(
                lockPath,
                os.O_CREATE|os.O_WRONLY,
-               os.FileMode(0600),
+               os.FileMode(0666),
        )
        if err != nil {
                ctx.LogE("lockdir", SDS{"path": lockPath, "err": err}, "")
index 05093c5aa2660ea6d0812ff67c403b567eca5c75..b83db340170668ead8821ac96f67ea2903e8ebee 100644 (file)
@@ -62,7 +62,7 @@ func (ctx *Ctx) Log(msg string) {
        fdLock, err := os.OpenFile(
                ctx.LogPath+".lock",
                os.O_CREATE|os.O_WRONLY,
-               os.FileMode(0600),
+               os.FileMode(0666),
        )
        if err != nil {
                fmt.Fprintln(os.Stderr, "Can not open lock for log:", err)
@@ -78,7 +78,7 @@ func (ctx *Ctx) Log(msg string) {
        fd, err := os.OpenFile(
                ctx.LogPath,
                os.O_CREATE|os.O_WRONLY|os.O_APPEND,
-               os.FileMode(0600),
+               os.FileMode(0666),
        )
        if err != nil {
                fmt.Fprintln(os.Stderr, "Can not open log:", err)
index 7e2f7c3be104029977f94fa6e1cdc7b52aa89273..5590b022d6d199b72e1420e43816d02026baf677 100644 (file)
--- a/src/sp.go
+++ b/src/sp.go
@@ -848,7 +848,7 @@ func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) {
                        fd, err := os.OpenFile(
                                filePath+PartSuffix,
                                os.O_RDWR|os.O_CREATE,
-                               os.FileMode(0600),
+                               os.FileMode(0666),
                        )
                        if err != nil {
                                state.Ctx.LogE("sp-file", SdsAdd(sdsp, SDS{"err": err}), "")
index 3c305ce36a54d7ec4432d8d98c1c43392a1311a5..95e45ee4a6162a3eb01ea084ecce9c6606f804e6 100644 (file)
@@ -21,20 +21,28 @@ import (
        "bufio"
        "hash"
        "io"
-       "io/ioutil"
        "os"
        "path/filepath"
+       "strconv"
+       "time"
 
        "golang.org/x/crypto/blake2b"
 )
 
+func TempFile(dir, prefix string) (*os.File, error) {
+       // Assume that probability of suffix collision is negligible
+       suffix := strconv.FormatInt(time.Now().UnixNano()+int64(os.Getpid()), 16)
+       name := filepath.Join(dir, "nncp"+prefix+suffix)
+       return os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, os.FileMode(0666))
+}
+
 func (ctx *Ctx) NewTmpFile() (*os.File, error) {
        jobsPath := filepath.Join(ctx.Spool, "tmp")
        var err error
-       if err = os.MkdirAll(jobsPath, os.FileMode(0700)); err != nil {
+       if err = os.MkdirAll(jobsPath, os.FileMode(0777)); err != nil {
                return nil, err
        }
-       fd, err := ioutil.TempFile(jobsPath, "")
+       fd, err := TempFile(jobsPath, "")
        if err == nil {
                ctx.LogD("tmp", SDS{"src": fd.Name()}, "created")
        }
@@ -73,7 +81,7 @@ func (tmp *TmpFileWHash) Cancel() {
 
 func (tmp *TmpFileWHash) Commit(dir string) error {
        var err error
-       if err = os.MkdirAll(dir, os.FileMode(0700)); err != nil {
+       if err = os.MkdirAll(dir, os.FileMode(0777)); err != nil {
                return err
        }
        if err = tmp.W.Flush(); err != nil {
index c180ed9554c6c1d6b9c5b4fc4fc068f0df596546..6422ac7a8ccb7e575f923262fb6e9dd122bdedcb 100644 (file)
@@ -176,13 +176,13 @@ func (ctx *Ctx) Toss(
                                goto Closing
                        }
                        dir := filepath.Join(*incoming, path.Dir(dst))
-                       if err = os.MkdirAll(dir, os.FileMode(0700)); err != nil {
+                       if err = os.MkdirAll(dir, os.FileMode(0777)); err != nil {
                                ctx.LogE("rx", SdsAdd(sds, SDS{"err": err}), "mkdir")
                                isBad = true
                                goto Closing
                        }
                        if !dryRun {
-                               tmp, err := ioutil.TempFile(dir, "nncp-file")
+                               tmp, err := TempFile(dir, "file")
                                if err != nil {
                                        ctx.LogE("rx", SdsAdd(sds, SDS{"err": err}), "mktemp")
                                        isBad = true