@node Релиз 4.2.0
@subsection Релиз 4.2.0
@itemize
+@item По умолчанию файлы и директории создаются с 666/777 правами
+ доступа, позволяя управлять ими @command{umask}-ом.
@item Обновлены зависимости.
@item Полное использование go модулей для управления зависимостями
(используется @code{go.cypherpunks.ru/nncp/v4} namespace).
@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).
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 {
"fmt"
"hash"
"io"
- "io/ioutil"
"log"
"os"
"path/filepath"
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)
}
"flag"
"fmt"
"io"
- "io/ioutil"
"log"
"os"
"path/filepath"
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
_, 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
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()
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
}
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}, "")
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)
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)
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}), "")
"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")
}
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 {
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