switch pkt.Type {
case nncp.PktTypeExec, nncp.PktTypeExecFat:
path = string(bytes.Replace(
- pkt.Path[:pkt.PathLen],
- []byte{0},
- []byte(" "),
- -1,
+ pkt.Path[:pkt.PathLen], []byte{0}, []byte(" "), -1,
))
case nncp.PktTypeTrns:
path = nncp.Base32Codec.EncodeToString(pkt.Path[:pkt.PathLen])
}
beginning := make([]byte, nncp.PktOverhead)
- if _, err := io.ReadFull(os.Stdin, beginning); err != nil {
+ if _, err := io.ReadFull(os.Stdin, beginning[:nncp.PktEncOverhead]); err != nil {
log.Fatalln("Not enough data to read")
}
- var pkt nncp.Pkt
- if _, err := xdr.Unmarshal(bytes.NewReader(beginning), &pkt); err == nil {
- switch pkt.Magic {
- case nncp.MagicNNCPPv1.B:
- log.Fatalln(nncp.MagicNNCPPv1.TooOld())
- case nncp.MagicNNCPPv2.B:
- log.Fatalln(nncp.MagicNNCPPv2.TooOld())
- case nncp.MagicNNCPPv3.B:
- doPlain(pkt, *dump, *decompress)
- return
- }
- }
var pktEnc nncp.PktEnc
if _, err := xdr.Unmarshal(bytes.NewReader(beginning), &pktEnc); err == nil {
- switch pkt.Magic {
+ switch pktEnc.Magic {
case nncp.MagicNNCPEv1.B:
log.Fatalln(nncp.MagicNNCPEv1.TooOld())
case nncp.MagicNNCPEv2.B:
case nncp.MagicNNCPEv4.B:
log.Fatalln(nncp.MagicNNCPEv4.TooOld())
case nncp.MagicNNCPEv5.B:
- doEncrypted(pktEnc, *dump, *cfgPath, beginning)
+ doEncrypted(pktEnc, *dump, *cfgPath, beginning[:nncp.PktEncOverhead])
+ return
+ }
+ }
+
+ if _, err := io.ReadFull(os.Stdin, beginning[nncp.PktEncOverhead:]); err != nil {
+ log.Fatalln("Not enough data to read")
+ }
+ var pkt nncp.Pkt
+ if _, err := xdr.Unmarshal(bytes.NewReader(beginning), &pkt); err == nil {
+ switch pkt.Magic {
+ case nncp.MagicNNCPPv1.B:
+ log.Fatalln(nncp.MagicNNCPPv1.TooOld())
+ case nncp.MagicNNCPPv2.B:
+ log.Fatalln(nncp.MagicNNCPPv2.TooOld())
+ case nncp.MagicNNCPPv3.B:
+ doPlain(pkt, *dump, *decompress)
return
}
}