bin/build | 15 --------------- bin/cmd.list => cmd.list | 0 build | 18 ++++++++++++++++++ doc/about.texi | 2 +- doc/building.texi | 4 ++-- doc/download.texi | 8 +++++++- doc/index.texi | 8 ++++---- doc/install.texi | 2 +- doc/integration/warc.texi | 6 +++--- doc/mirrors.texi | 6 +++--- doc/news.ru.texi | 15 +++++++++++++++ doc/news.texi | 17 ++++++++++++++++- doc/sources.texi | 10 +++++++--- doc/thanks.texi | 3 +++ doc/usecases/index.texi | 2 +- install | 7 ++++--- install-strip | 4 +--- makedist | 2 +- src/area.go | 2 +- src/call.go | 2 +- src/cfg.go | 2 +- src/cfgdir.go | 2 +- src/check.go | 2 +- src/chunked.go | 2 +- src/cmd/nncp-ack/main.go => src/cmd/nncp/ack.go | 14 +++++++------- src/cmd/nncp-bundle/main.go => src/cmd/nncp/bundle.go | 8 ++++---- src/cmd/nncp-call/main.go => src/cmd/nncp/call.go | 10 +++++----- src/cmd/nncp-caller/main.go => src/cmd/nncp/caller.go | 8 ++++---- src/cmd/nncp-cfgdir/main.go => src/cmd/nncp/cfgdir.go | 10 +++++----- src/cmd/nncp-cfgenc/main.go => src/cmd/nncp/cfgenc.go | 10 +++++----- src/cmd/nncp-cfgmin/main.go => src/cmd/nncp/cfgmin.go | 8 ++++---- src/cmd/nncp-cfgnew/main.go => src/cmd/nncp/cfgnew.go | 8 ++++---- src/cmd/nncp-check/main.go => src/cmd/nncp/check.go | 8 ++++---- src/cmd/nncp-cronexpr/main.go => src/cmd/nncp/cronexpr.go | 8 ++++---- src/cmd/nncp-daemon/main.go => src/cmd/nncp/daemon.go | 8 ++++---- src/cmd/nncp-exec/main.go => src/cmd/nncp/exec.go | 10 +++++----- src/cmd/nncp-file/main.go => src/cmd/nncp/file.go | 14 +++++++------- src/cmd/nncp-freq/main.go => src/cmd/nncp/freq.go | 12 ++++++------ src/cmd/nncp-hash/main.go => src/cmd/nncp/hash.go | 8 ++++---- src/cmd/nncp-log/main.go => src/cmd/nncp/log.go | 10 +++++----- src/cmd/nncp-pkt/main.go => src/cmd/nncp/pkt.go | 8 ++++---- src/cmd/nncp-reass/main.go => src/cmd/nncp/reass.go | 22 +++++++++++----------- src/cmd/nncp-rm/main.go => src/cmd/nncp/rm.go | 10 +++++----- src/cmd/nncp-stat/main.go => src/cmd/nncp/stat.go | 8 ++++---- src/cmd/nncp-toss/main.go => src/cmd/nncp/toss.go | 8 ++++---- src/cmd/nncp-trns/main.go => src/cmd/nncp/trns.go | 10 +++++----- src/cmd/nncp-xfer/main.go => src/cmd/nncp/xfer.go | 10 +++++----- src/cmd/nncp/main.go | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ctx.go | 2 +- src/dirwatch.go | 2 +- src/dirwatch_dummy.go | 2 +- src/eblob.go | 2 +- src/go.mod | 8 +++----- src/go.sum | 4 ++-- src/humanizer.go | 4 ++-- src/jobs.go | 2 +- src/lockdir.go | 2 +- src/log.go | 22 +++++++++++----------- src/magic.go | 2 +- src/mcd.go | 2 +- src/mth.go | 2 +- src/mth_test.go | 2 +- src/nice.go | 2 +- src/nncp.go | 6 +++--- src/node.go | 2 +- src/pipe.go | 2 +- src/pkt.go | 2 +- src/pkt_test.go | 2 +- src/progress.go | 2 +- src/sp.go | 2 +- src/tmp.go | 2 +- src/toss.go | 30 ++++++++++++++++++++++++++++-- src/toss_test.go | 2 +- src/tx.go | 2 +- src/tx_test.go | 2 +- src/ucspi.go | 2 +- src/via.go | 2 +- src/yggdrasil/tcpip.go | 2 +- src/yggdrasil/yggdrasil.go | 2 +- src/yggdrasil/yggdrasil_dummy.go | 2 +- uninstall | 3 ++- diff --git a/bin/build b/bin/build deleted file mode 100755 index 8d568e923f43e92c119f1ef678f0cd8fa781457a4e6f53fc0f83c4cb44dfb95d..0000000000000000000000000000000000000000 --- a/bin/build +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -e - -cd "$(realpath -- $(dirname "$0"))"/../src -GO=${GO:-go} -. ../config -[ -d vendor ] && vendor="-mod=vendor" || : -mod=`$GO list $vendor -m` -GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultCfgPath=$CFGPATH" -GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultSendmailPath=$SENDMAIL" -GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultSpoolPath=$SPOOLPATH" -GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultLogPath=$LOGPATH" -for cmd in `cat ../bin/cmd.list` ; do - $GO build $vendor -o ../bin/$cmd $GO_CFLAGS -ldflags "$GO_LDFLAGS" ./cmd/$cmd -done -$GO build $vendor -o ../bin/hjson-cli $GO_CFLAGS github.com/hjson/hjson-go/v4/hjson-cli diff --git a/bin/cmd.list b/cmd.list rename from bin/cmd.list rename to cmd.list diff --git a/build b/build new file mode 100755 index 0000000000000000000000000000000000000000..86c347247d6afe8c9c082136eb1bac1cd29a4b8bc88b296c2617e4c43f969eac --- /dev/null +++ b/build @@ -0,0 +1,18 @@ +#!/bin/sh -e + +cd "$(realpath -- $(dirname "$0"))"/src +mkdir -p ../bin +GO=${GO:-go} +. ../config +[ -d vendor ] && vendor="-mod=vendor" || : +mod=`$GO list $vendor -m` +GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultCfgPath=$CFGPATH" +GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultSendmailPath=$SENDMAIL" +GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultSpoolPath=$SPOOLPATH" +GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultLogPath=$LOGPATH" +$GO build $vendor -o ../bin/nncp $GO_CFLAGS -ldflags "$GO_LDFLAGS" ./cmd/nncp +$GO build $vendor -o ../bin/hjson-cli $GO_CFLAGS github.com/hjson/hjson-go/v4/hjson-cli +cd ../bin +for cmd in `cat ../cmd.list` ; do + ln -fs nncp $cmd +done diff --git a/doc/about.texi b/doc/about.texi index 52ba48d946c9c3a8333e4ce157a4f799e1ef63337cb791fdf951eeec5828948b..30abbc23c267005524f911984fd5092baab9dd14ee99a69a898f5971964be1dc 100644 --- a/doc/about.texi +++ b/doc/about.texi @@ -2,7 +2,7 @@ @cindex about @strong{NNCP} (Node to Node copy) is a collection of utilities simplifying secure store-and-forward files, mail and command exchanging. -See also this page @ref{Об утилитах, on russian}. +See also this page @ref{Об утилитах, in russian}. @cindex F2F @cindex friend-to-friend diff --git a/doc/building.texi b/doc/building.texi index 4008be595d556ea3d13f08672aa4afe919d88ef2aab55781e2b0fdeefbdd7407..4c82fecf8df11c6440ec3745c64ecbdf58979595fdf4523073e85bc334b7cc24 100644 --- a/doc/building.texi +++ b/doc/building.texi @@ -20,7 +20,7 @@ [verify signature] $ xz -d nncp-"$release".tar.xz diff --git a/src/area.go b/src/area.go index 3611309409dcce64f6907b7e1c443fe1cc6405ea6522b2958507a098aef22bf3..b1d62b1b4e44a7eaa6b6c17e77e759ce27ffc1cc622f425cc090dcbce60a765a 100644 --- a/src/area.go +++ b/src/area.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/call.go b/src/call.go index 751a5986a85207043fc23425e4bbe9d90142e5e1650103263f88912b0c3f608c..511fb39dd680ef2a358ac7479e2c24e70374ef7361386ef4c31f4a8da0b5e412 100644 --- a/src/call.go +++ b/src/call.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/cfg.go b/src/cfg.go index 111b81f5e9348c2a6986b19580804ba20be74f584487bbf07b76d6f5a29cb1f5..33939eaa958cdd012bfd97f03e17ded7d0206319ff4b91d5d968d5248f45c8c6 100644 --- a/src/cfg.go +++ b/src/cfg.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/cfgdir.go b/src/cfgdir.go index a7028b86e275819aa1a97b2192ab8149b5065ac02ba513620bee26e0c9dc1687..68b40d0b30b3ddcddfb8659a4f6d2c986b18f21e9945ee17d1eb983c0b9075aa 100644 --- a/src/cfgdir.go +++ b/src/cfgdir.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/check.go b/src/check.go index 0b05af25262150f17957de315fe2ed3814adbed755cc33a959f4438d537c53ba..69391fbe914739beecb763cccbf39313b92182d206d8c09e191951a4ac9445a9 100644 --- a/src/check.go +++ b/src/check.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/chunked.go b/src/chunked.go index cf672b376c4813599227d9668b236e6558aa338ad4297c6b52c30e486d03ce63..4b57e43e565d3dd58a4a88f7eecfc717122ebb6040dc0baf04dfa74ede5e4236 100644 --- a/src/chunked.go +++ b/src/chunked.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/cmd/nncp-ack/main.go b/src/cmd/nncp/ack.go rename from src/cmd/nncp-ack/main.go rename to src/cmd/nncp/ack.go index 9937461534f6fca69fc663624c6218d808c8fe8bc553a4db8e57136cb00b0808..45165d0f2f4e3210cebba72ccb19ab949a9c342199a9ff8974dba1e58176656a 100644 --- a/src/cmd/nncp-ack/main.go +++ b/src/cmd/nncp/ack.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -31,7 +31,7 @@ xdr "github.com/davecgh/go-xdr/xdr2" "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageACK() { fmt.Fprint(os.Stderr, "nncp-ack -- send packet receipt acknowledgement\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] -all\n", os.Args[0]) fmt.Fprintf(os.Stderr, "Usage: %s [options] -node NODE[,...]\n", os.Args[0]) @@ -40,7 +40,7 @@ fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() } -func main() { +func mainACK() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") niceRaw = flag.String("nice", nncp.NicenessFmt(nncp.DefaultNiceFreq), @@ -60,7 +60,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageACK flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -105,14 +105,14 @@ } } if *doAll { if len(nodes) != 0 { - usage() + usageACK() os.Exit(1) } for _, node := range ctx.Neigh { nodes = append(nodes, node) } } else if len(nodes) == 0 { - usage() + usageACK() os.Exit(1) } @@ -123,7 +123,7 @@ } if *pktRaw != "" { if len(nodes) != 1 { - usage() + usageACK() os.Exit(1) } nncp.ViaOverride(*viaOverride, ctx, nodes[0]) diff --git a/src/cmd/nncp-bundle/main.go b/src/cmd/nncp/bundle.go rename from src/cmd/nncp-bundle/main.go rename to src/cmd/nncp/bundle.go index 25525176cb61bf6326b7eacfb91aafeef262109e46713bca18568ebfead7c918..0fdcfd71dc99634445a1a3d82efc62728e3bb7cae2baf5f2a6e9f65fd7c3e17c 100644 --- a/src/cmd/nncp-bundle/main.go +++ b/src/cmd/nncp/bundle.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -35,7 +35,7 @@ "github.com/dustin/go-humanize" "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageBundle() { fmt.Fprint(os.Stderr, "nncp-bundle -- Create/digest stream of NNCP encrypted packets\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] -tx [-delete] NODE [NODE ...] >...\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -rx -delete [-dryrun] [NODE ...] <...\n", os.Args[0]) @@ -44,7 +44,7 @@ fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() } -func main() { +func mainBundle() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") niceRaw = flag.String("nice", nncp.NicenessFmt(255), "Minimal required niceness") @@ -63,7 +63,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageBundle flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-call/main.go b/src/cmd/nncp/call.go rename from src/cmd/nncp-call/main.go rename to src/cmd/nncp/call.go index f9e864b18862af075f25024358db8242e3185239f5a1869c3404a0b68c6002dc..a901e6eb567db0c83ebaeb4d7a0f35ba9246f080a3b6977a5e0f2e6c003391ec 100644 --- a/src/cmd/nncp-call/main.go +++ b/src/cmd/nncp/call.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -29,14 +29,14 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageCall() { fmt.Fprint(os.Stderr, "nncp-call -- call TCP daemon\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] NODE[:ADDR] [FORCEADDR]\n", os.Args[0]) fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() } -func main() { +func mainCall() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") ucspi = flag.Bool("ucspi", false, "Is it started as UCSPI-TCP client") @@ -83,7 +83,7 @@ autoTossGenACK = flag.Bool("autotoss-gen-ack", false, "Generate ACK packets") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageCall flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -94,7 +94,7 @@ fmt.Println(nncp.VersionGet()) return } if flag.NArg() < 1 { - usage() + usageCall() os.Exit(1) } nice, err := nncp.NicenessParse(*niceRaw) diff --git a/src/cmd/nncp-caller/main.go b/src/cmd/nncp/caller.go rename from src/cmd/nncp-caller/main.go rename to src/cmd/nncp/caller.go index eb4795f1e6f2eae2771b6c24ca9a1ca30be3e1cc8776a2d45dff4b6ad9fa254f..d1a5f1b0b6366401d054c60c4b70eaf7b16b5f52048389217de0f1b1cbe40cc2 100644 --- a/src/cmd/nncp-caller/main.go +++ b/src/cmd/nncp/caller.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -30,14 +30,14 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageCaller() { fmt.Fprint(os.Stderr, "nncp-caller -- croned NNCP TCP daemon caller\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [NODE ...]\n", os.Args[0]) fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() } -func main() { +func mainCaller() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") spoolPath = flag.String("spool", "", "Override path to spool") @@ -69,7 +69,7 @@ autoTossGenACK = flag.Bool("autotoss-gen-ack", false, "Generate ACK packets") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageCaller flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-cfgdir/main.go b/src/cmd/nncp/cfgdir.go rename from src/cmd/nncp-cfgdir/main.go rename to src/cmd/nncp/cfgdir.go index eabbca86885cc9c043bda2e3c9456852894fbc51f3c3cb345bd594cc4cc2aaae..b0e36e53f848e2ea9f99e37a128e457ed9a6037b20be14d5e7c1c356a23530ad 100644 --- a/src/cmd/nncp-cfgdir/main.go +++ b/src/cmd/nncp/cfgdir.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -26,14 +26,14 @@ "github.com/hjson/hjson-go/v4" "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageCfgDir() { fmt.Fprint(os.Stderr, "nncp-cfgdir -- Convert configuration file to the directory layout.\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [-cfg ...] -dump /path/to/dir\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -load /path/to/dir >cfg.hjson\nOptions:\n", os.Args[0]) flag.PrintDefaults() } -func main() { +func mainCfgDir() { var ( doDump = flag.Bool("dump", false, "Dump configuration file to the directory") doLoad = flag.Bool("load", false, "Load directory to create configuration file") @@ -42,7 +42,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageCfgDir flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -54,7 +54,7 @@ return } if (!*doDump && !*doLoad) || flag.NArg() != 1 { - usage() + usageCfgDir() os.Exit(1) } diff --git a/src/cmd/nncp-cfgenc/main.go b/src/cmd/nncp/cfgenc.go rename from src/cmd/nncp-cfgenc/main.go rename to src/cmd/nncp/cfgenc.go index 3c6b797a96d009ad55b3c944784559d4674c53b2112babd7ce6a6750d60cb02a..f49ac3fdf3e18cfb1b92a7b160e8f1c6051f6b271449d92268e8c4552d66b8c5 100644 --- a/src/cmd/nncp-cfgenc/main.go +++ b/src/cmd/nncp/cfgenc.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ "golang.org/x/crypto/blake2b" "golang.org/x/term" ) -func usage() { +func usageCfgEnc() { fmt.Fprint(os.Stderr, "nncp-cfgenc -- encrypt/decrypt configuration file\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] cfg.hjson >cfg.hjson.eblob\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -d cfg.hjson.eblob >cfg.hjson\n", os.Args[0]) @@ -39,7 +39,7 @@ fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() } -func main() { +func mainCfgEnc() { var ( decrypt = flag.Bool("d", false, "Decrypt the file") dump = flag.Bool("dump", false, "Print human-readable eblob information") @@ -50,7 +50,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageCfgEnc flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -62,7 +62,7 @@ return } if flag.NArg() != 1 { - usage() + usageCfgEnc() os.Exit(1) } diff --git a/src/cmd/nncp-cfgmin/main.go b/src/cmd/nncp/cfgmin.go rename from src/cmd/nncp-cfgmin/main.go rename to src/cmd/nncp/cfgmin.go index 9df5516b669db1ec7d9640da449f8865024825883127e522e59d64f43c703f96..beafcb5f7175184dc919182f9dd807c1ea2f11b99d5b38691a8767c22a7e1b64 100644 --- a/src/cmd/nncp-cfgmin/main.go +++ b/src/cmd/nncp/cfgmin.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -26,20 +26,20 @@ "github.com/hjson/hjson-go/v4" "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageCfgMin() { fmt.Fprint(os.Stderr, "nncp-cfgmin -- print stripped configuration\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } -func main() { +func mainCfgMin() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageCfgMin flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-cfgnew/main.go b/src/cmd/nncp/cfgnew.go rename from src/cmd/nncp-cfgnew/main.go rename to src/cmd/nncp/cfgnew.go index 387a7209796eb541557e03c80b60caa7f95c2caa659378f4571999c9c949657c..28e3e816b0212c338a2db181ab62e1a010c65c9f4ea2b93d7fdea3c2c442c92f 100644 --- a/src/cmd/nncp-cfgnew/main.go +++ b/src/cmd/nncp/cfgnew.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -33,12 +33,12 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageCfgNew() { fmt.Fprintln(os.Stderr, "nncp-cfgnew -- generate new configuration and keys\nOptions:") flag.PrintDefaults() } -func main() { +func mainCfgNew() { var ( areaName = flag.String("area", "", "Generate area's keypairs") yggdrasil = flag.Bool("yggdrasil", false, "Generate Yggdrasil keypair") @@ -47,7 +47,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageCfgNew flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-check/main.go b/src/cmd/nncp/check.go rename from src/cmd/nncp-check/main.go rename to src/cmd/nncp/check.go index 28663c519520ed080ba256d628511e653be8da86907aa8d3e775957ba3209862..f11ab0a48e1a30f2c22f6e188d15b14eb7101c81f289e25a6651a96446ef3d29 100644 --- a/src/cmd/nncp-check/main.go +++ b/src/cmd/nncp/check.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -27,13 +27,13 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageCheck() { fmt.Fprint(os.Stderr, "nncp-check -- verify Rx/Tx packets checksum\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [-nock] [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } -func main() { +func mainCheck() { var ( nock = flag.Bool("nock", false, "Process .nock files") cycle = flag.Uint("cycle", 0, "Repeat check after N seconds in infinite loop") @@ -49,7 +49,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageCheck flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-cronexpr/main.go b/src/cmd/nncp/cronexpr.go rename from src/cmd/nncp-cronexpr/main.go rename to src/cmd/nncp/cronexpr.go index a1a386cf28d994b07f40b3cac6a803d4a6d7c4b57232b7bd56182b6f5e582403..0e88e4c822d22196e74f12460918e3a1eb3eeb94f47f667524b9352d1a5e8315 100644 --- a/src/cmd/nncp-cronexpr/main.go +++ b/src/cmd/nncp/cronexpr.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -28,20 +28,20 @@ "github.com/gorhill/cronexpr" "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageCronExpr() { fmt.Fprint(os.Stderr, "nncp-cronexpr -- cron expression checker\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [-num XXX] CRON-EXPRESSION\n", os.Args[0]) flag.PrintDefaults() } -func main() { +func mainCronExpr() { var ( num = flag.Uint("num", 10, "Number of future entries to print") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageCronExpr flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-daemon/main.go b/src/cmd/nncp/daemon.go rename from src/cmd/nncp-daemon/main.go rename to src/cmd/nncp/daemon.go index 0276edd732bf8ac5ec53d913625dd62ef8c891463cc3c8d90216703cb117d652..309cf06f6f1980cb05eadb9990ee9e57926576c6a790190b5ce8ee3644537dbf 100644 --- a/src/cmd/nncp-daemon/main.go +++ b/src/cmd/nncp/daemon.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ nncpYggdrasil "go.cypherpunks.su/nncp/v8/yggdrasil" "golang.org/x/net/netutil" ) -func usage() { +func usageDaemon() { fmt.Fprint(os.Stderr, "nncp-daemon -- TCP daemon\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() @@ -128,7 +128,7 @@ } return nil } -func main() { +func mainDaemon() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") niceRaw = flag.String("nice", nncp.NicenessFmt(255), "Minimal required niceness") @@ -169,7 +169,7 @@ autoTossGenACK = flag.Bool("autotoss-gen-ack", false, "Generate ACK packets") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageDaemon flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-exec/main.go b/src/cmd/nncp/exec.go rename from src/cmd/nncp-exec/main.go rename to src/cmd/nncp/exec.go index effa7e2bbdda6d3e9c3ca50afbdc30238029cabc93e4473ac29ff73bb0a87f1d..54da79703c6a490e146664aad810aa59b718041f4a77b97b6e95bada925d3ac5 100644 --- a/src/cmd/nncp-exec/main.go +++ b/src/cmd/nncp/exec.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageExec() { fmt.Fprint(os.Stderr, "nncp-exec -- send execution command\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] NODE HANDLE [ARG0 ARG1 ...]\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] %s:AREA HANDLE [ARG0 ARG1 ...]\nOptions:\n", @@ -35,7 +35,7 @@ os.Args[0], nncp.AreaDir) flag.PrintDefaults() } -func main() { +func mainExec() { var ( noCompress = flag.Bool("nocompress", false, "Do not compress input data") cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") @@ -56,7 +56,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageExec flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -67,7 +67,7 @@ fmt.Println(nncp.VersionGet()) return } if flag.NArg() < 2 { - usage() + usageExec() os.Exit(1) } nice, err := nncp.NicenessParse(*niceRaw) diff --git a/src/cmd/nncp-file/main.go b/src/cmd/nncp/file.go rename from src/cmd/nncp-file/main.go rename to src/cmd/nncp/file.go index f84403ca4f7acccb1972ce34249421bbfa73ee7b4651a46c98e842c923315526..3ee6069078e3ab4be93a107a95a2f4c32ee63cdcc945b24e646b55c309f937ac 100644 --- a/src/cmd/nncp-file/main.go +++ b/src/cmd/nncp/file.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageFile() { fmt.Fprint(os.Stderr, "nncp-file -- send file\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] SRC NODE:[DST]\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] SRC %s:AREA:[DST]\nOptions:\n", @@ -41,7 +41,7 @@ options by default. You can forcefully turn them off by specifying 0 value. `) } -func main() { +func mainFile() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") niceRaw = flag.String("nice", nncp.NicenessFmt(nncp.DefaultNiceFile), @@ -60,7 +60,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageFile flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -71,7 +71,7 @@ fmt.Println(nncp.VersionGet()) return } if flag.NArg() != 2 { - usage() + usageFile() os.Exit(1) } nice, err := nncp.NicenessParse(*niceRaw) @@ -97,14 +97,14 @@ } splitted := strings.Split(flag.Arg(1), ":") if len(splitted) < 2 { - usage() + usageFile() os.Exit(1) } var areaId *nncp.AreaId var node *nncp.Node if splitted[0] == nncp.AreaDir { if len(splitted) < 3 { - usage() + usageFile() os.Exit(1) } areaId = ctx.AreaName2Id[splitted[1]] diff --git a/src/cmd/nncp-freq/main.go b/src/cmd/nncp/freq.go rename from src/cmd/nncp-freq/main.go rename to src/cmd/nncp/freq.go index f08d30578beb8631106ec6b1b484018046653f4a1033273cdd2d62ebf7e027e8..64ec1f8922a22e34a8e5a14ecedd8b560a6262b698a16656d47828b859a410cc 100644 --- a/src/cmd/nncp-freq/main.go +++ b/src/cmd/nncp/freq.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -27,13 +27,13 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageFreq() { fmt.Fprint(os.Stderr, "nncp-freq -- send file request\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] NODE:SRC [DST]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } -func main() { +func mainFreq() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") niceRaw = flag.String("nice", nncp.NicenessFmt(nncp.DefaultNiceFreq), @@ -52,7 +52,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageFreq flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -63,7 +63,7 @@ fmt.Println(nncp.VersionGet()) return } if flag.NArg() == 0 { - usage() + usageFreq() os.Exit(1) } nice, err := nncp.NicenessParse(*niceRaw) @@ -93,7 +93,7 @@ } splitted := strings.SplitN(flag.Arg(0), ":", 2) if len(splitted) != 2 { - usage() + usageFreq() os.Exit(1) } node, err := ctx.FindNode(splitted[0]) diff --git a/src/cmd/nncp-hash/main.go b/src/cmd/nncp/hash.go rename from src/cmd/nncp-hash/main.go rename to src/cmd/nncp/hash.go index 29a87d7b165ab5e57c3ca7d3a60e87bf657194b1184d188ba0903e781d439efa..94f0f3e34b9a2ffccb0b979acfc626488642e06539d3a08cc42aad8e43811c57 100644 --- a/src/cmd/nncp-hash/main.go +++ b/src/cmd/nncp/hash.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -29,13 +29,13 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageHash() { fmt.Fprint(os.Stderr, "nncp-hash -- calculate MTH hash of the file\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [-file ...] [-seek X] [-debug] [-progress] [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } -func main() { +func mainHash() { var ( fn = flag.String("file", "", "Read the file instead of stdin") seek = flag.Uint64("seek", 0, "Seek the file, hash, rewind, hash remaining") @@ -46,7 +46,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageHash flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-log/main.go b/src/cmd/nncp/log.go rename from src/cmd/nncp-log/main.go rename to src/cmd/nncp/log.go index 347ba535c02c2dacaf1249c813d84e3953e846e69a8db540fd2265281001f58b..2eecdffb0d76f061e581dce774aa7ef617945321d747f2a16546ab42be2bc59b 100644 --- a/src/cmd/nncp-log/main.go +++ b/src/cmd/nncp/log.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -24,16 +24,16 @@ "log" "os" "go.cypherpunks.su/nncp/v8" - "go.cypherpunks.su/recfile/v2" + "go.cypherpunks.su/recfile/v3" ) -func usage() { +func usageLog() { fmt.Fprint(os.Stderr, "nncp-log -- read logs\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } -func main() { +func mainLog() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") logPath = flag.String("log", "", "Override path to logfile") @@ -42,7 +42,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageLog flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-pkt/main.go b/src/cmd/nncp/pkt.go rename from src/cmd/nncp-pkt/main.go rename to src/cmd/nncp/pkt.go index 728eedcce62692715f9c096f2490f05fe922674cc6423f0ff28c7b2478b4ad2c..c2c37c0638056a456ae4ed76e6a404da2460f71bf4d3f32e53f4c4954375d6e5 100644 --- a/src/cmd/nncp-pkt/main.go +++ b/src/cmd/nncp/pkt.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ "github.com/klauspost/compress/zstd" "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usagePkt() { fmt.Fprint(os.Stderr, "nncp-pkt -- parse raw packet\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() @@ -167,7 +167,7 @@ log.Fatalln(err) } } -func main() { +func mainPkt() { var ( overheads = flag.Bool("overheads", false, "Print packet overheads") dump = flag.Bool("dump", false, "Write decrypted/parsed payload to stdout") @@ -177,7 +177,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usagePkt flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-reass/main.go b/src/cmd/nncp/reass.go rename from src/cmd/nncp-reass/main.go rename to src/cmd/nncp/reass.go index 8b5d18fedfad3cd53b1cad5c17e90589e32f126e327e45f27ea99bcfda9b2fb1..d4547cdddbb0cef4a67954777e8a4f2a17db09af6c81c9ea275d40e9e244b936 100644 --- a/src/cmd/nncp-reass/main.go +++ b/src/cmd/nncp/reass.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -37,7 +37,7 @@ "github.com/dustin/go-humanize" "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageReass() { fmt.Fprint(os.Stderr, "nncp-reass -- reassemble chunked files\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [FILE.nncp.meta]\nOptions:\n", os.Args[0]) flag.PrintDefaults() @@ -47,7 +47,7 @@ but at least one of them must be specified. `) } -func process(ctx *nncp.Ctx, path string, keep, dryRun, stdout, dumpMeta bool) bool { +func reassProcess(ctx *nncp.Ctx, path string, keep, dryRun, stdout, dumpMeta bool) bool { fd, err := os.Open(path) if err != nil { log.Fatalln("Can not open file:", err) @@ -313,7 +313,7 @@ } return metaPaths } -func main() { +func mainReass() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") allNodes = flag.Bool("all", false, "Process all found chunked files for all nodes") @@ -332,7 +332,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageReass flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -365,22 +365,22 @@ } } if !(*allNodes || nodeOnly != nil || flag.NArg() > 0) { - usage() + usageReass() os.Exit(1) } if flag.NArg() > 0 && (*allNodes || nodeOnly != nil) { - usage() + usageReass() os.Exit(1) } if *allNodes && nodeOnly != nil { - usage() + usageReass() os.Exit(1) } ctx.Umask() if flag.NArg() > 0 { - if process(ctx, flag.Arg(0), *keep, *dryRun, *stdout, *dumpMeta) { + if reassProcess(ctx, flag.Arg(0), *keep, *dryRun, *stdout, *dumpMeta) { return } os.Exit(1) @@ -397,7 +397,7 @@ for _, metaPath := range findMetas(ctx, *node.Incoming) { if _, seen := seenMetaPaths[metaPath]; seen { continue } - if !process(ctx, metaPath, *keep, *dryRun, false, false) { + if !reassProcess(ctx, metaPath, *keep, *dryRun, false, false) { hasErrors = true } seenMetaPaths[metaPath] = struct{}{} @@ -408,7 +408,7 @@ if nodeOnly.Incoming == nil { log.Fatalln("Specified -node does not allow incoming") } for _, metaPath := range findMetas(ctx, *nodeOnly.Incoming) { - if !process(ctx, metaPath, *keep, *dryRun, false, false) { + if !reassProcess(ctx, metaPath, *keep, *dryRun, false, false) { hasErrors = true } } diff --git a/src/cmd/nncp-rm/main.go b/src/cmd/nncp/rm.go rename from src/cmd/nncp-rm/main.go rename to src/cmd/nncp/rm.go index a1b49a18d339537efd88b17d699158b416e17999d0310f7c726c1d9d94d970d5..0418796c00b08f557f57bdd7edf06dd0b81db01bff4d4a6e907714028cb5b3bd 100644 --- a/src/cmd/nncp-rm/main.go +++ b/src/cmd/nncp/rm.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageRm() { fmt.Fprint(os.Stderr, "nncp-rm -- remove packet\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [-older X] -tmp\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -lock\n", os.Args[0]) @@ -49,7 +49,7 @@ fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() } -func main() { +func mainRm() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") doTmp = flag.Bool("tmp", false, "Remove temporary files") @@ -74,7 +74,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageRm flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -189,7 +189,7 @@ var nodeId *nncp.NodeId if *nodeRaw == "" { if !*doAll { - usage() + usageRm() os.Exit(1) } } else { diff --git a/src/cmd/nncp-stat/main.go b/src/cmd/nncp/stat.go rename from src/cmd/nncp-stat/main.go rename to src/cmd/nncp/stat.go index abb9503a1e451afe33b7a9d8f5f843eb54632f1cb4ece8d3da36f17250af0e68..5908e75dd6e3b2ed4e41614500d16a3796cdd8464c8b33ecdf64429325520c89 100644 --- a/src/cmd/nncp-stat/main.go +++ b/src/cmd/nncp/stat.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ "github.com/dustin/go-humanize" "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageStat() { fmt.Fprint(os.Stderr, "nncp-stat -- show queued Rx/Tx stats\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [-pkt] [-node NODE]\nOptions:\n", os.Args[0]) flag.PrintDefaults() @@ -43,7 +43,7 @@ nncp.NicenessFmt(job.PktEnc.Nice), ) } -func main() { +func mainStat() { var ( showPkt = flag.Bool("pkt", false, "Show packets listing") cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") @@ -54,7 +54,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageStat flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-toss/main.go b/src/cmd/nncp/toss.go rename from src/cmd/nncp-toss/main.go rename to src/cmd/nncp/toss.go index 728dd91263908bb0ddabf4d1ba40d1f5a99ed0a3ee57971636a0c44a3af1d0e5..934c8b1de7b3a7980287b258986b9c4af94090429274c724109f71dc94b79836 100644 --- a/src/cmd/nncp-toss/main.go +++ b/src/cmd/nncp/toss.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -27,13 +27,13 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageToss() { fmt.Fprint(os.Stderr, "nncp-toss -- process inbound packets\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } -func main() { +func mainToss() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") nodeRaw = flag.String("node", "", "Process only that node") @@ -58,7 +58,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageToss flag.Parse() if *warranty { fmt.Println(nncp.Warranty) diff --git a/src/cmd/nncp-trns/main.go b/src/cmd/nncp/trns.go rename from src/cmd/nncp-trns/main.go rename to src/cmd/nncp/trns.go index 4a9f20cd094aa6ebc25ea004a4bd498854e66e93bfb2579b4ec406963aa48ed2..382c88b78e574ca657af7549bc2cf4a3da4dd5cedd4aa25e4345f23c5e71af21 100644 --- a/src/cmd/nncp-trns/main.go +++ b/src/cmd/nncp/trns.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -28,7 +28,7 @@ "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageTrns() { fmt.Fprint(os.Stderr, "nncp-trns -- transit existing encrypted packet\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] -via NODEx[,...] NODE:PKT\n", os.Args[0]) fmt.Fprintf(os.Stderr, " (to transit SPOOL/NODE/tx/PKT)\n") @@ -37,7 +37,7 @@ os.Args[0]) flag.PrintDefaults() } -func main() { +func mainTrns() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") niceRaw = flag.String("nice", nncp.NicenessFmt(nncp.DefaultNiceFile), @@ -53,7 +53,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageTrns flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -64,7 +64,7 @@ fmt.Println(nncp.VersionGet()) return } if flag.NArg() != 1 { - usage() + usageTrns() os.Exit(1) } nice, err := nncp.NicenessParse(*niceRaw) diff --git a/src/cmd/nncp-xfer/main.go b/src/cmd/nncp/xfer.go rename from src/cmd/nncp-xfer/main.go rename to src/cmd/nncp/xfer.go index 0b6d3a8d3acaa55071a64512e0259fe62c08e38fc074f006abba674be2308adf..34fe0fc84536e477d56d0169d7c88303e671c5283afe5c6063f01810f8c4305a 100644 --- a/src/cmd/nncp-xfer/main.go +++ b/src/cmd/nncp/xfer.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -31,13 +31,13 @@ "github.com/dustin/go-humanize" "go.cypherpunks.su/nncp/v8" ) -func usage() { +func usageXfer() { fmt.Fprint(os.Stderr, "nncp-xfer -- copy inbound and outbounds packets\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] DIR\nOptions:\n", os.Args[0]) flag.PrintDefaults() } -func main() { +func mainXfer() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") nodeRaw = flag.String("node", "", "Process only that node") @@ -56,7 +56,7 @@ version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) log.SetFlags(log.Lshortfile) - flag.Usage = usage + flag.Usage = usageXfer flag.Parse() if *warranty { fmt.Println(nncp.Warranty) @@ -67,7 +67,7 @@ fmt.Println(nncp.VersionGet()) return } if flag.NArg() != 1 { - usage() + usageXfer() os.Exit(1) } nice, err := nncp.NicenessParse(*niceRaw) diff --git a/src/cmd/nncp/main.go b/src/cmd/nncp/main.go new file mode 100644 index 0000000000000000000000000000000000000000..efcd6aa5cf20dd49d332f434436a667ec2ac82f852501eec824273e2a5b45943 --- /dev/null +++ b/src/cmd/nncp/main.go @@ -0,0 +1,101 @@ +package main + +import ( + "flag" + "fmt" + "os" + "path" + + "go.cypherpunks.su/nncp/v8" +) + +const ( + CmdNameACK = "nncp-ack" + CmdNameBundle = "nncp-bundle" + CmdNameCall = "nncp-call" + CmdNameCaller = "nncp-caller" + CmdNameCfgDir = "nncp-cfgdir" + CmdNameCfgEnc = "nncp-cfgenc" + CmdNameCfgMin = "nncp-cfgmin" + CmdNameCfgNew = "nncp-cfgnew" + CmdNameCheck = "nncp-check" + CmdNameCronExpr = "nncp-cronexpr" + CmdNameDaemon = "nncp-daemon" + CmdNameExec = "nncp-exec" + CmdNameFile = "nncp-file" + CmdNameFreq = "nncp-freq" + CmdNameHash = "nncp-hash" + CmdNameLog = "nncp-log" + CmdNameMain = "nncp-main" + CmdNamePkt = "nncp-pkt" + CmdNameReass = "nncp-reass" + CmdNameRm = "nncp-rm" + CmdNameStat = "nncp-stat" + CmdNameToss = "nncp-toss" + CmdNameTrns = "nncp-trns" + CmdNameXfer = "nncp-xfer" +) + +func main() { + cmdName := path.Base(os.Args[0]) + switch cmdName { + case CmdNameACK: + mainACK() + case CmdNameBundle: + mainBundle() + case CmdNameCall: + mainCall() + case CmdNameCaller: + mainCaller() + case CmdNameCfgDir: + mainCfgDir() + case CmdNameCfgEnc: + mainCfgEnc() + case CmdNameCfgMin: + mainCfgMin() + case CmdNameCfgNew: + mainCfgNew() + case CmdNameCheck: + mainCheck() + case CmdNameCronExpr: + mainCronExpr() + case CmdNameDaemon: + mainDaemon() + case CmdNameExec: + mainExec() + case CmdNameFile: + mainFile() + case CmdNameFreq: + mainFreq() + case CmdNameHash: + mainHash() + case CmdNameLog: + mainLog() + case CmdNamePkt: + mainPkt() + case CmdNameReass: + mainReass() + case CmdNameRm: + mainRm() + case CmdNameStat: + mainStat() + case CmdNameToss: + mainToss() + case CmdNameTrns: + mainTrns() + case CmdNameXfer: + mainXfer() + default: + version := flag.Bool("version", false, "Print version information") + warranty := flag.Bool("warranty", false, "Print warranty information") + flag.Parse() + if *warranty { + fmt.Println(nncp.Warranty) + return + } + if *version { + fmt.Println(nncp.VersionGet()) + return + } + } +} diff --git a/src/ctx.go b/src/ctx.go index c9c3cc3c494e94f5a3f8c39d8f3aba039f960a1286f2829a3b9bdb0bc54adabd..4d9f03c0c8e42218612ea59f7c2c243893a02a2a157260bbb8a42cd981c31fec 100644 --- a/src/ctx.go +++ b/src/ctx.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/dirwatch.go b/src/dirwatch.go index 18f4f65d8ad20d1a845536e6986c5397103aecae235ffa73f9ce7502a9ab3bd1..b6f9f502184e336a274141c745ef5e5a7d5f16e98946acc08fb2d79ddc573c31 100644 --- a/src/dirwatch.go +++ b/src/dirwatch.go @@ -2,7 +2,7 @@ //go:build !nofsnotify // +build !nofsnotify // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/dirwatch_dummy.go b/src/dirwatch_dummy.go index caac3118841f9fbab11a25cb429878a334cb9defdb86a541ec540fa235f83b00..f254134fd150ce17df0fb7745789944e8471bec45ab46c82b4681d06c0bbf689 100644 --- a/src/dirwatch_dummy.go +++ b/src/dirwatch_dummy.go @@ -2,7 +2,7 @@ //go:build nofsnotify // +build nofsnotify // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/eblob.go b/src/eblob.go index 8549b9b9ea1fe60815fc2ff1c1b1adcd56ace0a00f4cf9cec8ebae50ceada57d..0783b4f0cd06fea7a8320ce2ab26de0088028ba438e2764b2ff3a0ad8e08647b 100644 --- a/src/eblob.go +++ b/src/eblob.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/go.mod b/src/go.mod index db9b11f8fbe7612fcb8146d9b0fda2d2106f3cfdb695874b34125c80fd237248..7e039988b8474cdd993605b2c5391c55f96a233de6b97259ceb938f06fe42bd7 100644 --- a/src/go.mod +++ b/src/go.mod @@ -1,5 +1,7 @@ module go.cypherpunks.su/nncp/v8 +go 1.22.0 + require ( github.com/Arceliar/ironwood v0.0.0-20240529054413-b8e59574e2b2 github.com/davecgh/go-xdr v0.0.0-20161123171359-e6a2ba005892 @@ -12,7 +14,7 @@ github.com/hjson/hjson-go/v4 v4.4.0 github.com/klauspost/compress v1.17.9 github.com/yggdrasil-network/yggdrasil-go v0.5.6 go.cypherpunks.ru/balloon v1.1.1 - go.cypherpunks.su/recfile/v2 v2.0.0 + go.cypherpunks.su/recfile/v3 v3.1.0 golang.org/x/crypto v0.25.0 golang.org/x/net v0.27.0 golang.org/x/sys v0.22.0 @@ -38,7 +40,3 @@ golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect ) - -go 1.22.0 - -toolchain go1.22.5 diff --git a/src/go.sum b/src/go.sum index 8c02c0e408de58b607431525fa12735e3feaf0669f304c4ce495c873894a5f6c..2eda71691cd9e66c5c4d2ee1a19d5aab0f7bd49c7c23659e564e47e9d02ab207 100644 --- a/src/go.sum +++ b/src/go.sum @@ -67,8 +67,8 @@ github.com/yggdrasil-network/yggdrasil-go v0.5.6/go.mod h1:WAqMZ4e1QSf/EKbzfD77XXTSAIRO/0nWKCVpHsKLg40= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.cypherpunks.ru/balloon v1.1.1 h1:ypHM1DRf/XuCrp9pDkTHg00CqZX/Np/APb//iHvDJTA= go.cypherpunks.ru/balloon v1.1.1/go.mod h1:k4s4ozrIrhpBjj78Z7LX8ZHxMQ+XE7DZUWl8gP2ojCo= -go.cypherpunks.su/recfile/v2 v2.0.0 h1:Q2o+OzM1H2O1WnshU88r+waBqylkqZj8plBdBWZitcU= -go.cypherpunks.su/recfile/v2 v2.0.0/go.mod h1:36EnyBwx6VpsSM5MMcYGTDiKrVEP49S09p33EFuhQYU= +go.cypherpunks.su/recfile/v3 v3.1.0 h1:ZWO7Q6taGkaEl5X0oL+/5LOyoufzH0LRU2dee7RwZFg= +go.cypherpunks.su/recfile/v3 v3.1.0/go.mod h1:KK9cp7tYNWcHnTIaGso2H6PCJne8cVWk5VYB02b9ffI= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= diff --git a/src/humanizer.go b/src/humanizer.go index 59cebed0a21fa244be513d760478e0acac6f9fcb47f33a4520d8f83e06553a1e..e3379127ddd3e26babe374e663174793b6af6fe50614f39e25ab047a4ab4f607 100644 --- a/src/humanizer.go +++ b/src/humanizer.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -20,7 +20,7 @@ "fmt" "strings" "time" - "go.cypherpunks.su/recfile/v2" + "go.cypherpunks.su/recfile/v3" ) func (ctx *Ctx) HumanizeRec(rec string) string { diff --git a/src/jobs.go b/src/jobs.go index b194e41b2770513595b1cfee4dfba7ff04448681ff985001bd581724054773f5..08f08744068aa91735266930163422a387113a1bcbc51e2cc86d18d6b91ad7c9 100644 --- a/src/jobs.go +++ b/src/jobs.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/lockdir.go b/src/lockdir.go index d1931c82a67488a69a53877530aeeae9e32c4f30eaf089b46ce6f2de643cdabc..52eefd50ebb2a94d9f38df42b5d6ec3d9e911956e3b9f3d6bd3dc9c5ee345898 100644 --- a/src/lockdir.go +++ b/src/lockdir.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/log.go b/src/log.go index 16b1f92b6af4242a670302e0f39f90129b0bfff6900c8e2a65068a201f159abe..5e0b679b2395830223b10dd60bdce127ebcced7f3da154f8a9430e3562fb587f 100644 --- a/src/log.go +++ b/src/log.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -22,7 +22,7 @@ "os" "sync" "time" - "go.cypherpunks.su/recfile/v2" + "go.cypherpunks.su/recfile/v3" "golang.org/x/sys/unix" ) @@ -47,8 +47,8 @@ if err != nil { panic(err) } _, err = w.WriteFields(recfile.Field{ - Name: "When", - Value: time.Now().UTC().Format(time.RFC3339Nano), + F: "When", + V: time.Now().UTC().Format(time.RFC3339Nano), }) if err != nil { panic(err) @@ -57,22 +57,22 @@ for _, le := range les { switch v := le.V.(type) { case int, int8, uint8, int64, uint64: _, err = w.WriteFields(recfile.Field{ - Name: le.K, - Value: fmt.Sprintf("%d", v), + F: le.K, + V: fmt.Sprintf("%d", v), }) case bool: _, err = w.WriteFields(recfile.Field{ - Name: le.K, - Value: fmt.Sprintf("%v", v), + F: le.K, + V: fmt.Sprintf("%v", v), }) case []string: if len(v) > 0 { - _, err = w.WriteFieldMultiline(le.K, v) + _, err = w.WriteField(le.K, v) } default: _, err = w.WriteFields(recfile.Field{ - Name: le.K, - Value: fmt.Sprintf("%s", v), + F: le.K, + V: fmt.Sprintf("%s", v), }) } if err != nil { diff --git a/src/magic.go b/src/magic.go index b12b7e21bf4f24fc09ee81dc2b734496803b0d949085cfa97342d377d3436725..f791b09fc4aba9285b8223849ae680aff51576a3cc458e80dbc166a8f3b3709d 100644 --- a/src/magic.go +++ b/src/magic.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/mcd.go b/src/mcd.go index 2fe839ef8bc5e9e66631e2d272208e922f8ae58dd3c48f9856900a5d94833f48..aee684017449d3900e95d761cacad448f74b3b15790f481e0ab215ac8f5497dd 100644 --- a/src/mcd.go +++ b/src/mcd.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/mth.go b/src/mth.go index ded679c50cec52427331bc61416e3b602e670ef303ef3bf4fdf55b317ddb08e7..f7b2d256294fd81c2894a6ce4719d90a037fc91758ba91d7b5bbd4be69049c88 100644 --- a/src/mth.go +++ b/src/mth.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/mth_test.go b/src/mth_test.go index 8c794eec6e887ca98da3699df80c5a981a644ac57b7bab7a500379e09a9d72dc..794776282dc5116c287a3f3b2eda04eb50f60de599c8c1729cf79bad24051883 100644 --- a/src/mth_test.go +++ b/src/mth_test.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/nice.go b/src/nice.go index a7868af316f58d1bab071c75e7b9f1414e5c4e5821d88c6d560512c2ddbcb4a3..2a8fc14b9c005f53e33a39a77a2762d3f9037ba1b2cc7e721275af13c7f1d50f 100644 --- a/src/nice.go +++ b/src/nice.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/nncp.go b/src/nncp.go index d597a690baeca96e4bf26016055deb523599f539c25394235429d3bedafb305e..7c1015d02eea82f3066af65790591ae6227ac5d8d646f3973a1e108e1aed8bb3 100644 --- a/src/nncp.go +++ b/src/nncp.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -22,7 +22,7 @@ "runtime" ) const ( - Warranty = `Copyright (C) 2016-2024 Sergey Matveev + Warranty = `Copyright (C) 2016-2025 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -39,7 +39,7 @@ Base32Encoded32Len = 52 ) var ( - Version string = "8.11.0" + Version string = "8.12.0" Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding) ) diff --git a/src/node.go b/src/node.go index 9097f47c0d85a73a05211c4c3d82ab2b2fa7152ea2b904116a32fa8c235c972c..742e3e48c3aa6ed9803f1a787745a26e1efc05c21ed725c65921b5f203bff76b 100644 --- a/src/node.go +++ b/src/node.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/pipe.go b/src/pipe.go index 442756df024c49978f4171fb85254c03c89d12c15de6f1223534212a8de66209..400fb148fd588e2eb955edcf9dc07ede1e3a9cb130a41663ea9f3b1a5f3b419e 100644 --- a/src/pipe.go +++ b/src/pipe.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/pkt.go b/src/pkt.go index 8d321dd6568a096aebea85d74906860f59f93151699ac5480d6cca01638c68bd..224b57413640aaa9f051e3de8e562d409322385f41681583b43b31210874fa4a 100644 --- a/src/pkt.go +++ b/src/pkt.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/pkt_test.go b/src/pkt_test.go index 9f35ca6cd1cf1bc2775ba4cbca9d2c1cb4a4ad698e309ae2c830786dbdfc1e27..18be37581199c91e7ca0d9e71d15503aaf43722740a6c6e46e5fe831dfb6aa0e 100644 --- a/src/pkt_test.go +++ b/src/pkt_test.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/progress.go b/src/progress.go index 07c5d9a25b9363ce7bb5b129c852aab1a624c2d90f322802d96404c1cb59ef79..c1b679e18b9a6a12ef5fec571792f78599e25dc39d73a05295f5c90919939e53 100644 --- a/src/progress.go +++ b/src/progress.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/sp.go b/src/sp.go index f834530850a1cf16ad7ad7e9849ed4939a20a064f57689af092c8e3b9f95b9f4..bf493fb5ab1ec0dc326caa92256a20cfd649d815ec18ba8d55481b2b3cbb3dcd 100644 --- a/src/sp.go +++ b/src/sp.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/tmp.go b/src/tmp.go index bbefee43c5f5000ac940a8c9a2a32e169a0cd26dd46a4bf0e89e183c1b22488a..57e9b0dd4b7090195a50b9bc5475a817c4b60f9ae38bea56b23cb2663e20b3ef 100644 --- a/src/tmp.go +++ b/src/tmp.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/toss.go b/src/toss.go index b29e2fe958cf72d7bc5e435f634d4df5d91ba4173ffb32dc8280920074ca8b15..f81ce375540c5a681a68da4dd0abf67215733dfa0d5a9e91223edfaed1ca3005 100644 --- a/src/toss.go +++ b/src/toss.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -312,6 +312,17 @@ ) return err } dir := filepath.Join(*incoming, path.Dir(dst)) + if !strings.HasPrefix(dir, *incoming) { + err = errors.New("incoming path traversal") + ctx.LogE("rx-traversal", les, err, func(les LEs) string { + return fmt.Sprintf( + "Tossing file %s/%s (%s): %s: traversal", + sender.Name, pktName, + humanize.IBytes(pktSize), dst, + ) + }) + return err + } if err = os.MkdirAll(dir, os.FileMode(0777)); err != nil { ctx.LogE("rx-mkdir", les, err, func(les LEs) string { return fmt.Sprintf( @@ -542,11 +553,26 @@ }, ) return err } + srcPath := filepath.Join(*freqPath, src) + if !strings.HasPrefix(srcPath, *freqPath) { + err = errors.New("freqing path traversal") + ctx.LogE( + "rx-no-freq", les, err, + func(les LEs) string { + return fmt.Sprintf( + "Tossing freq %s/%s (%s): %s -> %s", + sender.Name, pktName, + humanize.IBytes(pktSize), src, dst, + ) + }, + ) + return err + } if !opts.DryRun { err = ctx.TxFile( sender, pkt.Nice, - filepath.Join(*freqPath, src), + srcPath, dst, sender.FreqChunked, sender.FreqMinSize, diff --git a/src/toss_test.go b/src/toss_test.go index 799eb0241ba273b6dfbfe987f2a8a6770280e0fda33289b68a4004748ef54daf..7e9b16516d4a929e7549d91eab1ee945e4e557a55ce61516986fc5a925e481bd 100644 --- a/src/toss_test.go +++ b/src/toss_test.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/tx.go b/src/tx.go index 637693e13f06c2c950eaddcdd84ad275df843704c84c4aa42ebfc82e0ad49be5..79b058afd17e660c68a1610798a96f909162285190e6b6cb032a97cf1fbb2eed 100644 --- a/src/tx.go +++ b/src/tx.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/tx_test.go b/src/tx_test.go index 1ac9ab13408fb18198442a34c9c8017ffefa9d3b91dccce4616338fe05f6d8f5..eee429cfe17ccf21b53790d1939b847ef671f354ef7829267b9731242c181051 100644 --- a/src/tx_test.go +++ b/src/tx_test.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/ucspi.go b/src/ucspi.go index 7cbc28e4bd03a1b9b3b3f133fd6fac0aa4e01a9d5ab535023da0a12d00e1bc1c..50645c856913f54a0ac070f9261473eb024d4b9350924161f412034739c2ddcd 100644 --- a/src/ucspi.go +++ b/src/ucspi.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/via.go b/src/via.go index 5a5f52a063cf2ff8645f9638b4a0b0b732da601c1d793adb5ba6972df2fc9922..2adf5b76ca179c3a465a8087d1114618e46e26682f883445248e3fdd2bec1438 100644 --- a/src/via.go +++ b/src/via.go @@ -1,5 +1,5 @@ // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/yggdrasil/tcpip.go b/src/yggdrasil/tcpip.go index 72035bbe4c13da17f2ffbc00e00881910b51dbd991776ebbc5b235077d9bec69..e8f93b5bd2b2941b03db5113d1c8c32275b81c9a1a89fe228080721d22403fee 100644 --- a/src/yggdrasil/tcpip.go +++ b/src/yggdrasil/tcpip.go @@ -2,7 +2,7 @@ //go:build !noyggdrasil // +build !noyggdrasil // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/yggdrasil/yggdrasil.go b/src/yggdrasil/yggdrasil.go index 20f52acfa30288ca975139e971b8e35d432e6190c98e13d0ee662268ae88db5a..49b6bff794a2daf9660efbd5421913033a2e8ff0bf33dc88daf00c21a172f0f4 100644 --- a/src/yggdrasil/yggdrasil.go +++ b/src/yggdrasil/yggdrasil.go @@ -2,7 +2,7 @@ //go:build !noyggdrasil // +build !noyggdrasil // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/yggdrasil/yggdrasil_dummy.go b/src/yggdrasil/yggdrasil_dummy.go index 1e785a16524d01a82f7341ede324c23501493455903ac8cb0cdc7ea7310a9d0d..d7600641b6898ce8c3ea6dccac18a6c9ebffd616bd12940ad2ffe1437d26ec08 100644 --- a/src/yggdrasil/yggdrasil_dummy.go +++ b/src/yggdrasil/yggdrasil_dummy.go @@ -2,7 +2,7 @@ //go:build noyggdrasil // +build noyggdrasil // NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2024 Sergey Matveev +// Copyright (C) 2016-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/uninstall b/uninstall index c0e2fc7779477364b7054cdbfe8968f69479d2b64a8eab57848b28b3f99dd8e8..d277f5d37ae630e951bdf304cde6be8b20fb3b6d342118aa99e212c2d3ddda4d 100755 --- a/uninstall +++ b/uninstall @@ -3,6 +3,7 @@ root="$(realpath -- $(dirname "$0"))" . "$root"/config cd "$BINDIR" -rm -f `cat "$root"/bin/cmd.list` +xargs rm -f <"$root"/cmd.list +rm -f nncp rm -f "$INFODIR"/nncp.info rm -fr "$DOCDIR"