doc/admin.texi | 9 +++++---- doc/building.texi | 8 ++++---- doc/cfg/general.texi | 7 ++++++- doc/cmd/index.texi | 6 +++--- doc/cmd/nncp-file.texi | 2 +- doc/download.texi | 7 ++++++- doc/index.texi | 2 ++ doc/install.texi | 2 +- doc/log.texi | 25 +++++++++++++++++++++++++ doc/mirrors.texi | 34 ++++++++++++++++++++++++++++++++++ doc/news.ru.texi | 23 +++++++++++++++++++---- doc/news.texi | 25 ++++++++++++++++++++----- doc/pkt/plain.texi | 2 +- doc/sources.texi | 4 +--- doc/thanks.texi | 3 ++- makedist.sh | 11 +++++++++-- ports/nncp/Makefile | 2 +- src/call.go | 4 ++-- src/cfg.go | 8 ++++++-- src/check.go | 2 +- src/cmd/nncp-bundle/main.go | 2 +- src/cmd/nncp-caller/main.go | 3 +++ src/cmd/nncp-cfgenc/main.go | 10 +++++----- src/cmd/nncp-daemon/main.go | 6 +++--- src/cmd/nncp-reass/main.go | 8 ++++---- src/cmd/nncp-xfer/main.go | 26 +++++++++++++------------- src/ctx.go | 14 ++++++++++++++ src/jobs.go | 2 +- src/lockdir.go | 6 +++--- src/log.go | 12 ++++++++++-- src/nncp.go | 2 +- src/pipe.go | 2 +- src/sp.go | 19 +++++++++++-------- src/tmp.go | 12 ++++++------ src/toss.go | 4 ++-- src/tx.go | 30 +++++++++++++++--------------- diff --git a/doc/admin.texi b/doc/admin.texi index ba70cb70ac42682cc7cdb50690a6b88393472086e5680ada9d375516b27ed640..d9b348e98f3fcae030892ce35cb745d2d9492dc7549cc2cc80960c155cbd74a0 100644 --- a/doc/admin.texi +++ b/doc/admin.texi @@ -100,7 +100,8 @@ @end example @item Or it can be also run as a @command{daemontools} daemon under - @url{http://cr.yp.to/ucspi-tcp.html, UCSPI-TCP}: + @url{http://cr.yp.to/ucspi-tcp.html, UCSPI-TCP}. In the example + below it uses native daemontools's logging capability: @example # mkdir -p /var/service/.nncp-daemon/log @@ -108,13 +109,13 @@ # cd /var/service/.nncp-daemon # cat > run <&1 EOF # cat > log/run < doc/download.texi < Fingerprint: 92C2 F0AE FE73 208E 46BF F3DE 2B25 868E 75A1 A953 +There are mirrors where you can also get the source code tarballs: +http://www.nncpgo.org/Mirrors.html + Please send questions regarding the use of NNCP, bug reports and patches to mailing list: http://lists.cypherpunks.ru/nncp_002ddevel.html EOF @@ -218,6 +222,9 @@ SHA256 хэш: $hash Идентификатор GPG ключа: 0x2B25868E75A1A953 NNCP releases Отпечаток: 92C2 F0AE FE73 208E 46BF F3DE 2B25 868E 75A1 A953 + +Есть и зеркала где вы также можете получить архивы с исходным кодом: +http://www.nncpgo.org/Mirrors.html Пожалуйста, все вопросы касающиеся использования NNCP, отчёты об ошибках и патчи отправляйте в nncp-devel почтовую рассылку: diff --git a/ports/nncp/Makefile b/ports/nncp/Makefile index 13f72b837d22a5c14d4f740ff6d04ec6c781eb80ff4312868d4260c12990d119..e0de38eff635ec6d95dffcf0181487f4b4cfc4228eade7952436921f54618a7a 100644 --- a/ports/nncp/Makefile +++ b/ports/nncp/Makefile @@ -1,5 +1,5 @@ PORTNAME= nncp -DISTVERSION= 7.4.0 +DISTVERSION= 7.6.0 CATEGORIES= net MASTER_SITES= http://www.nncpgo.org/download/ diff --git a/src/call.go b/src/call.go index f1bc5ddc181befd14a46b2a2cf02a28c24f94edc5b0811fe69eed0c25922f978..e0328efd6da900ac21d94b9ff51e386dc0106d2f963296d1bd6c7f12f29187be 100644 --- a/src/call.go +++ b/src/call.go @@ -134,13 +134,13 @@ humanize.IBytes(uint64(state.TxSpeed)), ) }) isGood = true - conn.Close() // #nosec G104 + conn.Close() break } else { ctx.LogE("call-started", les, err, func(les LEs) string { return fmt.Sprintf("Connection to %s (%s)", node.Name, addr) }) - conn.Close() // #nosec G104 + conn.Close() } } return diff --git a/src/cfg.go b/src/cfg.go index b4caab9d5219c235ebc2bf21ee493c3521e91252f1e6adbd1fcc0f2458487e43..2d90a1a2748b05bc2c6952394f672af1bfd04eb61b1bd0a86150f49d7820debb 100644 --- a/src/cfg.go +++ b/src/cfg.go @@ -21,6 +21,7 @@ import ( "bytes" "encoding/json" "errors" + "fmt" "log" "os" "path" @@ -445,6 +446,9 @@ area.Pub = new([32]byte) copy(area.Pub[:], pub) } if cfg.Prv != nil { + if area.Pub == nil { + return nil, fmt.Errorf("area %s: prv requires pub presence", name) + } prv, err := Base32Codec.DecodeString(*cfg.Prv) if err != nil { return nil, err @@ -462,12 +466,12 @@ func CfgParse(data []byte) (*CfgJSON, error) { var err error if bytes.Compare(data[:8], MagicNNCPBv3.B[:]) == 0 { - os.Stderr.WriteString("Passphrase:") // #nosec G104 + os.Stderr.WriteString("Passphrase:") password, err := term.ReadPassword(0) if err != nil { log.Fatalln(err) } - os.Stderr.WriteString("\n") // #nosec G104 + os.Stderr.WriteString("\n") data, err = DeEBlob(data, password) if err != nil { return nil, err diff --git a/src/check.go b/src/check.go index 3ef3ef3bfdb393118ab3d4c1e98d5bba2d317bb94f6ada29a1c67dc1125384b2..ddec761972bf66d6d77a2f541710953af3f6cf3040cf31557380ac4fffc06bf4 100644 --- a/src/check.go +++ b/src/check.go @@ -62,7 +62,7 @@ ctx.LogE("checking", les, err, logMsg) return true } gut, err := Check(fd, job.Size, job.HshValue[:], les, ctx.ShowPrgrs) - fd.Close() // #nosec G104 + fd.Close() if err != nil { ctx.LogE("checking", les, err, logMsg) return true diff --git a/src/cmd/nncp-bundle/main.go b/src/cmd/nncp-bundle/main.go index 5bf0d5685206e2a1326b5032cfd022a0a23e6e1df93c891c6266e66df0dfb0e9..4f8e366f2556eabaf27205d2744489bfae564a91c9575ea8ac77666b5061ba57 100644 --- a/src/cmd/nncp-bundle/main.go +++ b/src/cmd/nncp-bundle/main.go @@ -221,7 +221,7 @@ if prefixIdx == -1 { if err == io.EOF { break } - bufStdin.Discard(bufStdin.Buffered() - (len(nncp.NNCPBundlePrefix) - 1)) // #nosec G104 + bufStdin.Discard(bufStdin.Buffered() - (len(nncp.NNCPBundlePrefix) - 1)) continue } if _, err = bufStdin.Discard(prefixIdx); err != nil { diff --git a/src/cmd/nncp-caller/main.go b/src/cmd/nncp-caller/main.go index 9530881fd403e583e3b71dcfed0d953b1ae8d71458b2d188d4f519e5234c8664..b75b251049d9a467aa970e56ad5d235d04ef0e08d10e342120bd196fc836bd82 100644 --- a/src/cmd/nncp-caller/main.go +++ b/src/cmd/nncp-caller/main.go @@ -94,6 +94,9 @@ node, err := ctx.FindNode(nodeId) if err != nil { log.Fatalln("Invalid NODE specified:", err) } + if node.NoisePub == nil { + log.Fatalln("Node", nodeId, "does not have online communication capability") + } if len(node.Calls) == 0 { ctx.LogD( "caller-no-calls", diff --git a/src/cmd/nncp-cfgenc/main.go b/src/cmd/nncp-cfgenc/main.go index afcaeb6a2e8ad3c960eaf9b6087a4547c5d205b42b2455b30651e823d2fbea87..48ea7e5009588d2c2facebf87353b809568067ff4bc1c6df82c0ed4f7dcad1a6 100644 --- a/src/cmd/nncp-cfgenc/main.go +++ b/src/cmd/nncp-cfgenc/main.go @@ -96,7 +96,7 @@ fmt.Printf("Blob size: %d\n", len(eblob.Blob)) return } - os.Stderr.WriteString("Passphrase:") // #nosec G104 + os.Stderr.WriteString("Passphrase:") password1, err := term.ReadPassword(0) if err != nil { log.Fatalln(err) @@ -106,15 +106,15 @@ cfgRaw, err := nncp.DeEBlob(data, password1) if err != nil { log.Fatalln(err) } - os.Stdout.Write(cfgRaw) // #nosec G104 + os.Stdout.Write(cfgRaw) return } - os.Stderr.WriteString("\nRepeat passphrase:") // #nosec G104 + os.Stderr.WriteString("\nRepeat passphrase:") password2, err := term.ReadPassword(0) if err != nil { log.Fatalln(err) } - os.Stderr.WriteString("\n") // #nosec G104 + os.Stderr.WriteString("\n") if bytes.Compare(password1, password2) != 0 { log.Fatalln(errors.New("Passphrases do not match")) } @@ -122,5 +122,5 @@ eblob, err := nncp.NewEBlob(*sOpt, *tOpt, *pOpt, password1, data) if err != nil { log.Fatalln(err) } - os.Stdout.Write(eblob) // #nosec G104 + os.Stdout.Write(eblob) } diff --git a/src/cmd/nncp-daemon/main.go b/src/cmd/nncp-daemon/main.go index 90afea3e80def24c6f508bab64f8c55851691a74435ececc0a474009bf9509a5..f4fa5eb3f882a87d837a594b2efbdba773b12137a6be4ec16ce0ddd6f86509dc 100644 --- a/src/cmd/nncp-daemon/main.go +++ b/src/cmd/nncp-daemon/main.go @@ -168,7 +168,7 @@ } ctx.Umask() if *ucspi { - os.Stderr.Close() // #nosec G104 + os.Stderr.Close() conn := &nncp.UCSPIConn{R: os.Stdin, W: os.Stdout} nodeIdC := make(chan *nncp.NodeId) addr := nncp.UCSPITCPRemoteAddr() @@ -196,7 +196,7 @@ if *autoToss { close(autoTossFinish) <-autoTossBadCode } - conn.Close() // #nosec G104 + conn.Close() return } @@ -262,7 +262,7 @@ if *autoToss { close(autoTossFinish) <-autoTossBadCode } - conn.Close() // #nosec G104 + conn.Close() }(conn) } } diff --git a/src/cmd/nncp-reass/main.go b/src/cmd/nncp-reass/main.go index 03bf16f6dbaa537e36d85448596fc8af6f9a8b95539900cbf2b586486da6f2c0..03a03ebc15a5cff22753df85da212dd248f6e2bed4ede450a5f9344f4d0ccce7 100644 --- a/src/cmd/nncp-reass/main.go +++ b/src/cmd/nncp-reass/main.go @@ -66,7 +66,7 @@ return logMsg(les) + ": bad meta" }) return false } - fd.Close() // #nosec G104 + fd.Close() if metaPkt.Magic == nncp.MagicNNCPMv1.B { ctx.LogE("reass", les, nncp.MagicNNCPMv1.TooOld(), logMsg) return false @@ -163,7 +163,7 @@ ctx.ShowPrgrs, ); err != nil { log.Fatalln(err) } - fd.Close() // #nosec G104 + fd.Close() if bytes.Compare(hsh.Sum(nil), metaPkt.Checksums[chunkNum][:]) != 0 { ctx.LogE( "reass-chunk", @@ -219,7 +219,7 @@ ctx.ShowPrgrs, ); err != nil { log.Fatalln(err) } - fd.Close() // #nosec G104 + fd.Close() if !keep { if err = os.Remove(chunkPath); err != nil { ctx.LogE( @@ -298,7 +298,7 @@ ctx.LogE("reass", nncp.LEs{{K: "Path", V: dirPath}}, err, logMsg) return nil } fis, err := dir.Readdir(0) - dir.Close() // #nosec G104 + dir.Close() if err != nil { ctx.LogE("reass", nncp.LEs{{K: "Path", V: dirPath}}, err, logMsg) return nil diff --git a/src/cmd/nncp-xfer/main.go b/src/cmd/nncp-xfer/main.go index 2e2487c6ea151be80ec374d3cc2a4634953896179c50cdfd0115cf0837bb868f..59b036ee65636481ec2b94324080bf4439c8195dd63ae1d573334c729bfe0d82 100644 --- a/src/cmd/nncp-xfer/main.go +++ b/src/cmd/nncp-xfer/main.go @@ -141,7 +141,7 @@ isBad = true goto Tx } fis, err = dir.Readdir(0) - dir.Close() // #nosec G104 + dir.Close() if err != nil { ctx.LogE("xfer-self-read", les, err, func(les nncp.LEs) string { return logMsg(les) + ": reading" @@ -185,7 +185,7 @@ isBad = true continue } fisInt, err := dir.Readdir(0) - dir.Close() // #nosec G104 + dir.Close() if err != nil { ctx.LogE("xfer-rx-read", les, err, func(les nncp.LEs) string { return logMsg(les) + ": reading" @@ -241,14 +241,14 @@ func(les nncp.LEs) string { return logMsg(les) + ": not valid packet: " + err.Error() }, ) - fd.Close() // #nosec G104 + fd.Close() continue } if pktEnc.Nice > nice { ctx.LogD("xfer-rx-too-nice", les, func(les nncp.LEs) string { return logMsg(les) + ": too nice" }) - fd.Close() // #nosec G104 + fd.Close() continue } les = append(les, nncp.LE{K: "Size", V: fiInt.Size()}) @@ -261,7 +261,7 @@ ) } if !ctx.IsEnoughSpace(fiInt.Size()) { ctx.LogE("xfer-rx", les, errors.New("is not enough space"), logMsg) - fd.Close() // #nosec G104 + fd.Close() continue } if _, err = fd.Seek(0, 0); err != nil { @@ -279,7 +279,7 @@ err = w.Close() } if err != nil { ctx.LogE("xfer-rx", les, err, logMsg) - w.CloseWithError(err) // #nosec G104 + w.CloseWithError(err) } }() if _, err = nncp.CopyProgressed( @@ -294,7 +294,7 @@ ); err != nil { ctx.LogE("xfer-rx", les, err, logMsg) isBad = true } - fd.Close() // #nosec G104 + fd.Close() if isBad { tmp.Cancel() continue @@ -446,7 +446,7 @@ if err != nil { ctx.LogE("xfer-tx-open", les, err, func(les nncp.LEs) string { return logMsg(les) + ": opening" }) - tmp.Close() // #nosec G104 + tmp.Close() isBad = true continue } @@ -456,17 +456,17 @@ bufW, bufio.NewReader(fd), "Tx", append(les, nncp.LE{K: "FullSize", V: job.Size}), ctx.ShowPrgrs, ) - fd.Close() // #nosec G104 + fd.Close() if err != nil { ctx.LogE("xfer-tx-copy", les, err, func(les nncp.LEs) string { return logMsg(les) + ": copying" }) - tmp.Close() // #nosec G104 + tmp.Close() isBad = true continue } if err = bufW.Flush(); err != nil { - tmp.Close() // #nosec G104 + tmp.Close() ctx.LogE("xfer-tx-flush", les, err, func(les nncp.LEs) string { return logMsg(les) + ": flushing" }) @@ -474,7 +474,7 @@ isBad = true continue } if err = tmp.Sync(); err != nil { - tmp.Close() // #nosec G104 + tmp.Close() ctx.LogE("xfer-tx-sync", les, err, func(les nncp.LEs) string { return logMsg(les) + ": syncing" }) @@ -500,7 +500,7 @@ }) isBad = true continue } - os.Remove(filepath.Join(dstPath, pktName+".part")) // #nosec G104 + os.Remove(filepath.Join(dstPath, pktName+".part")) les = les[:len(les)-1] ctx.LogI( "xfer-tx", diff --git a/src/ctx.go b/src/ctx.go index f85ce1a125561eaa1c406f730285e805db4bec7fd39c032b7744f2249d214d35..1777a12a865ec238667f4cbeb347b84dea020202a2391d7544501c9ac3633421 100644 --- a/src/ctx.go +++ b/src/ctx.go @@ -23,6 +23,8 @@ "fmt" "io/ioutil" "os" "path/filepath" + "strconv" + "strings" "syscall" ) @@ -134,6 +136,18 @@ ctx.LogPath = env } } else { ctx.LogPath = logPath + } + if strings.HasPrefix(ctx.LogPath, LogFdPrefix) { + ptr, err := strconv.ParseUint( + strings.TrimPrefix(ctx.LogPath, LogFdPrefix), 10, 64, + ) + if err != nil { + return nil, err + } + LogFd = os.NewFile(uintptr(ptr), CfgLogEnv) + if LogFd == nil { + return nil, errors.New("can not open:" + ctx.LogPath) + } } if showPrgrs { ctx.ShowPrgrs = true diff --git a/src/jobs.go b/src/jobs.go index 5d7c9721c33d4e47f3c82135e1afb3785459b7dc84e9b989bcf243181d47bcef..a1197f64c8a2c7745afb9f8e00dee2e784911154ba9107232c48db4faec44eb1 100644 --- a/src/jobs.go +++ b/src/jobs.go @@ -99,7 +99,7 @@ if err != nil { return } fis, err := dir.Readdir(0) - dir.Close() // #nosec G104 + dir.Close() if err != nil { return } diff --git a/src/lockdir.go b/src/lockdir.go index d81c975d4c33035fd5615c88e7a85fb43c93e96be01df8e2d423fde5b7c8b585..5c2c5f8c928bf97817101e3ae07eb291782d4681841cbf075cfad8456c6a27de 100644 --- a/src/lockdir.go +++ b/src/lockdir.go @@ -45,7 +45,7 @@ if err != nil { ctx.LogE("lockdir-flock", LEs{{"Path", lockPath}}, err, func(les LEs) string { return "Locking directory: locking " + lockPath }) - dirLock.Close() // #nosec G104 + dirLock.Close() return nil, err } return dirLock, nil @@ -53,7 +53,7 @@ } func (ctx *Ctx) UnlockDir(fd *os.File) { if fd != nil { - unix.Flock(int(fd.Fd()), unix.LOCK_UN) // #nosec G104 - fd.Close() // #nosec G104 + unix.Flock(int(fd.Fd()), unix.LOCK_UN) + fd.Close() } } diff --git a/src/log.go b/src/log.go index 7048291d750d61c980c56cc05912c4c11a1bc2f64a313c64bcef0f57f5945509..72452bf5c40ea9d8069cb1d3ff6e6e6f8331ae8bea6305b02ca2555b3234612f 100644 --- a/src/log.go +++ b/src/log.go @@ -27,6 +27,10 @@ "go.cypherpunks.ru/recfile" "golang.org/x/sys/unix" ) +const LogFdPrefix = "FD:" + +var LogFd *os.File + type LE struct { K string V interface{} @@ -64,6 +68,10 @@ return b.String() } func (ctx *Ctx) Log(rec string) { + if LogFd != nil { + LogFd.WriteString(rec) + return + } fdLock, err := os.OpenFile( ctx.LogPath+".lock", os.O_CREATE|os.O_WRONLY, @@ -90,8 +98,8 @@ if err != nil { fmt.Fprintln(os.Stderr, "Can not open log:", err) return } - fd.WriteString(rec) // #nosec G104 - fd.Close() // #nosec G104 + fd.WriteString(rec) + fd.Close() } func (ctx *Ctx) LogD(who string, les LEs, msg func(LEs) string) { diff --git a/src/nncp.go b/src/nncp.go index b0b272bcdb9fac5b9720e34379d396cdba2cef89b89b55254864ee164e0827f8..f3cf518c8636dd77c4a1d80c745715cb9af61249b3e15b178c750e1c73eeee25 100644 --- a/src/nncp.go +++ b/src/nncp.go @@ -40,7 +40,7 @@ const Base32Encoded32Len = 52 var ( - Version string = "7.5.1" + Version string = "7.6.0" Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding) ) diff --git a/src/pipe.go b/src/pipe.go index 27c2cf16f0f51ce044b9b1b2f1643f34a4b5d4cd10720b01d9cb39ab7483d285..4b898328f9cebfab5e1c17179c92cdd462144b8878f1bc6b650c3ea494e7f41b 100644 --- a/src/pipe.go +++ b/src/pipe.go @@ -69,7 +69,7 @@ err = c.r.Close() err = c.w.Close() go c.cmd.Wait() time.AfterFunc(time.Duration(10*time.Second), func() { - c.cmd.Process.Kill() // #nosec G104 + c.cmd.Process.Kill() }) return } diff --git a/src/sp.go b/src/sp.go index e6be9747b404456260416ca43470bb292f020863ea43f9cde31420c457e12d2e..8c77031da21b9edea428094224b48774dac5dbf10251210b4e564d30b3d190ea 100644 --- a/src/sp.go +++ b/src/sp.go @@ -438,7 +438,7 @@ state.Node.Name, NicenessFmt(state.Nice), ) }) - conn.SetWriteDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104 + conn.SetWriteDeadline(time.Now().Add(DefaultDeadline)) if err = state.WriteSP(conn, buf, false); err != nil { state.Ctx.LogE("sp-startI", les, err, func(les LEs) string { return fmt.Sprintf( @@ -457,7 +457,7 @@ state.Node.Name, NicenessFmt(state.Nice), ) }) - conn.SetReadDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104 + conn.SetReadDeadline(time.Now().Add(DefaultDeadline)) if buf, err = state.ReadSP(conn); err != nil { state.Ctx.LogE("sp-startI-read", les, err, func(les LEs) string { return fmt.Sprintf( @@ -537,7 +537,7 @@ ) } les := LEs{{"Nice", int(state.Nice)}} state.Ctx.LogD("sp-startR", les, logMsg) - conn.SetReadDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104 + conn.SetReadDeadline(time.Now().Add(DefaultDeadline)) if buf, err = state.ReadSP(conn); err != nil { state.Ctx.LogE("sp-startR-read", les, err, logMsg) return err @@ -549,6 +549,9 @@ } var node *Node for _, n := range state.Ctx.Neigh { + if n.NoisePub == nil { + continue + } if subtle.ConstantTimeCompare(state.hs.PeerStatic(), n.NoisePub[:]) == 1 { node = n break @@ -611,7 +614,7 @@ if err != nil { state.dirUnlock() return err } - conn.SetWriteDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104 + conn.SetWriteDeadline(time.Now().Add(DefaultDeadline)) if err = state.WriteSP(conn, buf, false); err != nil { state.Ctx.LogE("sp-startR-write", les, err, func(les LEs) string { return fmt.Sprintf( @@ -752,7 +755,7 @@ } break Deadlined: state.SetDead() - conn.Close() // #nosec G104 + conn.Close() case now := <-pingTicker.C: if now.After(state.TxLastSeen.Add(PingTimeout)) { state.wg.Add(1) @@ -986,7 +989,7 @@ humanize.IBytes(uint64(len(payload))), ) } state.Ctx.LogD("sp-sending", append(les, LE{"Size", int64(len(payload))}), logMsg) - conn.SetWriteDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104 + conn.SetWriteDeadline(time.Now().Add(DefaultDeadline)) ct, err := state.csOur.Encrypt(nil, nil, payload) if err != nil { state.Ctx.LogE("sp-encrypting", les, err, logMsg) @@ -1013,7 +1016,7 @@ state.Node.Name, NicenessFmt(state.Nice), ) } state.Ctx.LogD("sp-recv-wait", les, logMsg) - conn.SetReadDeadline(time.Now().Add(DefaultDeadline)) // #nosec G104 + conn.SetReadDeadline(time.Now().Add(DefaultDeadline)) payload, err := state.ReadSP(conn) if err != nil { if err == io.EOF { @@ -1087,7 +1090,7 @@ } state.SetDead() state.wg.Done() state.SetDead() - conn.Close() // #nosec G104 + conn.Close() }() return nil diff --git a/src/tmp.go b/src/tmp.go index 9d3e3a03435e75481bd7d57532449c8520d11487a5bd2c81a372e3651fc699da..dac13781403a1e81d61eb5ddd32533387f9d878f1a0b6c6d6e6a65305b97d232 100644 --- a/src/tmp.go +++ b/src/tmp.go @@ -71,9 +71,9 @@ }, nil } func (tmp *TmpFileWHash) Cancel() { - tmp.Fd.Truncate(0) // #nosec G104 - tmp.Fd.Close() // #nosec G104 - os.Remove(tmp.Fd.Name()) // #nosec G104 + tmp.Fd.Truncate(0) + tmp.Fd.Close() + os.Remove(tmp.Fd.Name()) } func DirSync(dirPath string) error { @@ -83,7 +83,7 @@ return err } err = fd.Sync() if err != nil { - fd.Close() // #nosec G104 + fd.Close() return err } return fd.Close() @@ -99,11 +99,11 @@ if err = os.MkdirAll(dir, os.FileMode(0777)); err != nil { return err } if err = tmp.W.Flush(); err != nil { - tmp.Fd.Close() // #nosec G104 + tmp.Fd.Close() return err } if err = tmp.Fd.Sync(); err != nil { - tmp.Fd.Close() // #nosec G104 + tmp.Fd.Close() return err } if err = tmp.Fd.Close(); err != nil { diff --git a/src/toss.go b/src/toss.go index d17c5461fd87c0df935db4dd126229df3a3575331495bd3715ab6398e1954748..bbc14cd2193b9f4eeccef0e98bd456bb3036d73f0b02cadab93affa8d4704298 100644 --- a/src/toss.go +++ b/src/toss.go @@ -309,7 +309,7 @@ }) return err } if err = bufW.Flush(); err != nil { - tmp.Close() // #nosec G104 + tmp.Close() ctx.LogE("rx-flush", les, err, func(les LEs) string { return fmt.Sprintf( "Tossing file %s/%s (%s): %s: flushing", @@ -320,7 +320,7 @@ }) return err } if err = tmp.Sync(); err != nil { - tmp.Close() // #nosec G104 + tmp.Close() ctx.LogE("rx-sync", les, err, func(les LEs) string { return fmt.Sprintf( "Tossing file %s/%s (%s): %s: syncing", diff --git a/src/tx.go b/src/tx.go index 1b51ac3b505785ce4499da7d9b87c2352cb2d8e688b1aa0ec26fa1a7e39ae5cf..ebad936a60f9f21cc0d1fb8a9b506ed71b57bbc1a937dfee0074c9aa4ec80075 100644 --- a/src/tx.go +++ b/src/tx.go @@ -60,7 +60,7 @@ var area *Area if areaId != nil { area = ctx.AreaId2Area[*areaId] if area.Prv == nil { - return nil, errors.New("unknown area id") + return nil, errors.New("area has no encryption keys") } } hops := make([]*Node, 0, 1+len(node.Via)) @@ -116,7 +116,7 @@ ctx.Self, hops[0], pkt, nice, size, padSize, src, dst, ) pktEncRaws <- pktEncRaw errs <- err - dst.Close() // #nosec G104 + dst.Close() }(curSize, src, pipeW) curSize = PktEncOverhead + PktSizeOverhead + sizeWithTags(PktOverhead+curSize) curSize += padSize @@ -142,7 +142,7 @@ ctx.Self, &areaNode, pkt, nice, size, padSize, src, dst, ) pktEncRaws <- pktEncRaw errs <- err - dst.Close() // #nosec G104 + dst.Close() }(curSize, padSize, src, pipeW) curSize = PktEncOverhead + PktSizeOverhead + sizeWithTags(PktOverhead+curSize) curSize += padSize @@ -170,7 +170,7 @@ ctx.Self, hops[0], pktArea, nice, size, 0, src, dst, ) pktEncRaws <- pktEncRaw errs <- err - dst.Close() // #nosec G104 + dst.Close() }(curSize, pipeRPrev, pipeW) curSize = PktEncOverhead + PktSizeOverhead + sizeWithTags(PktOverhead+curSize) } @@ -197,7 +197,7 @@ }) pktEncRaw, err := PktEncWrite(ctx.Self, node, pkt, nice, size, 0, src, dst) pktEncRaws <- pktEncRaw errs <- err - dst.Close() // #nosec G104 + dst.Close() }(hops[i], pktTrns, curSize, pipeRPrev, pipeW) curSize = PktEncOverhead + PktSizeOverhead + sizeWithTags(PktOverhead+curSize) } @@ -220,13 +220,13 @@ } for i := 0; i <= wrappers; i++ { err = <-errs if err != nil { - tmp.Fd.Close() // #nosec G104 + tmp.Fd.Close() return nil, err } } nodePath := filepath.Join(ctx.Spool, lastNode.Id.String()) err = tmp.Commit(filepath.Join(nodePath, string(TTx))) - os.Symlink(nodePath, filepath.Join(ctx.Spool, lastNode.Name)) // #nosec G104 + os.Symlink(nodePath, filepath.Join(ctx.Spool, lastNode.Name)) if err != nil { return lastNode, err } @@ -288,7 +288,7 @@ if err != nil { rerr = err return } - os.Remove(src.Name()) // #nosec G104 + os.Remove(src.Name()) tmpW := bufio.NewWriter(src) tmpKey := make([]byte, chacha20poly1305.KeySize) if _, rerr = rand.Read(tmpKey[:]); rerr != nil { @@ -320,7 +320,7 @@ for i := 0; i < aead.NonceSize(); i++ { nonce[i] = 0 } if _, err := aeadProcess(aead, nonce, nil, false, bufio.NewReader(src), w); err != nil { - w.CloseWithError(err) // #nosec G104 + w.CloseWithError(err) } }() reader = r @@ -439,14 +439,14 @@ return w.CloseWithError(err) } fd, err := os.Open(e.path) if err != nil { - fd.Close() // #nosec G104 + fd.Close() return w.CloseWithError(err) } if _, err = io.Copy(tarWr, bufio.NewReader(fd)); err != nil { - fd.Close() // #nosec G104 + fd.Close() return w.CloseWithError(err) } - fd.Close() // #nosec G104 + fd.Close() } if err = tarWr.Close(); err != nil { return w.CloseWithError(err) @@ -706,7 +706,7 @@ if err != nil { return err } if _, err = io.Copy(compressor, in); err != nil { - compressor.Close() // #nosec G104 + compressor.Close() return err } if err = compressor.Close(); err != nil { @@ -733,7 +733,7 @@ copyErr := make(chan error) go func() { _, err := io.Copy(compressor, in) if err != nil { - compressor.Close() // #nosec G104 + compressor.Close() copyErr <- err } err = compressor.Close() @@ -828,6 +828,6 @@ ctx.LogI("tx", les, logMsg) } else { ctx.LogI("tx", append(les, LE{"Err", err}), logMsg) } - os.Symlink(nodePath, filepath.Join(ctx.Spool, node.Name)) // #nosec G104 + os.Symlink(nodePath, filepath.Join(ctx.Spool, node.Name)) return err }