From e7f503f1f4cc676b8efc20953098ea697e768f18 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Mon, 20 Nov 2017 23:38:40 +0300 Subject: [PATCH] Dryrun nncp-bundle ability --- doc/cmds.texi | 8 +- .../nncp/cmd/nncp-bundle/main.go | 112 +++++++++++------- 2 files changed, 75 insertions(+), 45 deletions(-) diff --git a/doc/cmds.texi b/doc/cmds.texi index a954013..0cc551a 100644 --- a/doc/cmds.texi +++ b/doc/cmds.texi @@ -35,8 +35,8 @@ Nearly all commands have the following common options: @verbatim % nncp-bundle [options] -tx [-delete] NODE [NODE ...] > ... -% nncp-bundle [options] -rx -delete [NODE ...] < ... -% nncp-bundle [options] -rx [-check] [NODE ...] < ... +% nncp-bundle [options] -rx -delete [-dryrun] [NODE ...] < ... +% nncp-bundle [options] -rx [-check] [-dryrun] [NODE ...] < ... @end verbatim With @option{-tx} option, this command creates @ref{Bundles, bundle} of @@ -73,6 +73,10 @@ spool if everything is good. So it is advisable to recheck your streams: % dd if=/dev/cd0 bs=2048 | nncp-bundle -rx -delete @end verbatim +@option{-dryrun} option prevents any writing to the spool. This is +useful when you need to see what packets will pass by and possibly check +their integrity. + @node nncp-call @section nncp-call diff --git a/src/cypherpunks.ru/nncp/cmd/nncp-bundle/main.go b/src/cypherpunks.ru/nncp/cmd/nncp-bundle/main.go index 1068251..e228f2f 100644 --- a/src/cypherpunks.ru/nncp/cmd/nncp-bundle/main.go +++ b/src/cypherpunks.ru/nncp/cmd/nncp-bundle/main.go @@ -46,8 +46,8 @@ func usage() { fmt.Fprintf(os.Stderr, nncp.UsageHeader()) fmt.Fprintln(os.Stderr, "nncp-bundle -- Create/digest stream of NNCP encrypted packets\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] -tx [-delete] NODE [NODE ...] > ...\n", os.Args[0]) - fmt.Fprintf(os.Stderr, " %s [options] -rx -delete [NODE ...] < ...\n", os.Args[0]) - fmt.Fprintf(os.Stderr, " %s [options] -rx [-check] [NODE ...] < ...\n", os.Args[0]) + fmt.Fprintf(os.Stderr, " %s [options] -rx -delete [-dryrun] [NODE ...] < ...\n", os.Args[0]) + fmt.Fprintf(os.Stderr, " %s [options] -rx [-check] [-dryrun] [NODE ...] < ...\n", os.Args[0]) fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() } @@ -60,6 +60,7 @@ func main() { doTx = flag.Bool("tx", false, "Transfer packets") doDelete = flag.Bool("delete", false, "Delete transferred packets") doCheck = flag.Bool("check", false, "Check integrity while receiving") + dryRun = flag.Bool("dryrun", false, "Do not writings") quiet = flag.Bool("quiet", false, "Print only errors") debug = flag.Bool("debug", false, "Print debug messages") version = flag.Bool("version", false, "Print version information") @@ -256,7 +257,9 @@ func main() { } if nncp.ToBase32(hsh.Sum(nil)) == pktName { ctx.LogI("nncp-bundle", sds, "removed") - os.Remove(dstPath) + if !*dryRun { + os.Remove(dstPath) + } } else { ctx.LogE("nncp-bundle", sds, "bad checksum") } @@ -285,50 +288,73 @@ func main() { continue } if *doCheck { - tmp, err := ctx.NewTmpFileWHash() - if err != nil { - log.Fatalln("Error during temporary file creation:", err) - } - if _, err = tmp.W.Write(pktEncBuf); err != nil { - log.Fatalln("Error during writing:", err) - } - if _, err = io.Copy(tmp.W, tarR); err != nil { - log.Fatalln("Error during copying:", err) - } - if err = tmp.W.Flush(); err != nil { - log.Fatalln("Error during flusing:", err) - } - if nncp.ToBase32(tmp.Hsh.Sum(nil)) == pktName { - if err = tmp.Commit(selfPath); err != nil { - log.Fatalln("Error during commiting:", err) + if *dryRun { + hsh, err := blake2b.New256(nil) + if err != nil { + log.Fatalln("Error during hasher creation:", err) + } + if _, err = hsh.Write(pktEncBuf); err != nil { + log.Fatalln("Error during writing:", err) + } + if _, err = io.Copy(hsh, tarR); err != nil { + log.Fatalln("Error during copying:", err) + } + if nncp.ToBase32(hsh.Sum(nil)) != pktName { + ctx.LogE("nncp-bundle", sds, "bad checksum") + continue } } else { - ctx.LogE("nncp-bundle", sds, "bad checksum") - tmp.Cancel() - continue + tmp, err := ctx.NewTmpFileWHash() + if err != nil { + log.Fatalln("Error during temporary file creation:", err) + } + if _, err = tmp.W.Write(pktEncBuf); err != nil { + log.Fatalln("Error during writing:", err) + } + if _, err = io.Copy(tmp.W, tarR); err != nil { + log.Fatalln("Error during copying:", err) + } + if err = tmp.W.Flush(); err != nil { + log.Fatalln("Error during flusing:", err) + } + if nncp.ToBase32(tmp.Hsh.Sum(nil)) == pktName { + if err = tmp.Commit(selfPath); err != nil { + log.Fatalln("Error during commiting:", err) + } + } else { + ctx.LogE("nncp-bundle", sds, "bad checksum") + tmp.Cancel() + continue + } } } else { - tmp, err := ctx.NewTmpFile() - if err != nil { - log.Fatalln("Error during temporary file creation:", err) - } - bufTmp := bufio.NewWriterSize(tmp, CopyBufSize) - if _, err = bufTmp.Write(pktEncBuf); err != nil { - log.Fatalln("Error during writing:", err) - } - if _, err = io.Copy(bufTmp, tarR); err != nil { - log.Fatalln("Error during copying:", err) - } - if err = bufTmp.Flush(); err != nil { - log.Fatalln("Error during flushing:", err) - } - tmp.Sync() - tmp.Close() - if err = os.MkdirAll(selfPath, os.FileMode(0700)); err != nil { - log.Fatalln("Error during mkdir:", err) - } - if err = os.Rename(tmp.Name(), dstPath); err != nil { - log.Fatalln("Error during renaming:", err) + if *dryRun { + if _, err = io.Copy(ioutil.Discard, tarR); err != nil { + log.Fatalln("Error during copying:", err) + } + } else { + tmp, err := ctx.NewTmpFile() + if err != nil { + log.Fatalln("Error during temporary file creation:", err) + } + bufTmp := bufio.NewWriterSize(tmp, CopyBufSize) + if _, err = bufTmp.Write(pktEncBuf); err != nil { + log.Fatalln("Error during writing:", err) + } + if _, err = io.Copy(bufTmp, tarR); err != nil { + log.Fatalln("Error during copying:", err) + } + if err = bufTmp.Flush(); err != nil { + log.Fatalln("Error during flushing:", err) + } + tmp.Sync() + tmp.Close() + if err = os.MkdirAll(selfPath, os.FileMode(0700)); err != nil { + log.Fatalln("Error during mkdir:", err) + } + if err = os.Rename(tmp.Name(), dstPath); err != nil { + log.Fatalln("Error during renaming:", err) + } } } ctx.LogI("nncp-bundle", nncp.SdsAdd(sds, nncp.SDS{ -- 2.48.1