serve/sftp: support empty "md5sum" and "sha1sum" commands

This is to enable the new command detection to work with the sftp
backend.
This commit is contained in:
Nick Craig-Wood 2019-06-26 13:32:50 +01:00
parent 6929f5d6e6
commit 71e172a139

View file

@ -97,22 +97,33 @@ func (c *conn) execCommand(ctx context.Context, out io.Writer, command string) (
if binary == "sha1sum" { if binary == "sha1sum" {
ht = hash.SHA1 ht = hash.SHA1
} }
node, err := c.vfs.Stat(args) var hashSum string
if err != nil { if args == "" {
return errors.Wrapf(err, "hash failed finding file %q", args) // empty hash for no input
if ht == hash.MD5 {
hashSum = "d41d8cd98f00b204e9800998ecf8427e"
} else {
hashSum = "da39a3ee5e6b4b0d3255bfef95601890afd80709"
}
args = "-"
} else {
node, err := c.vfs.Stat(args)
if err != nil {
return errors.Wrapf(err, "hash failed finding file %q", args)
}
if node.IsDir() {
return errors.New("can't hash directory")
}
o, ok := node.DirEntry().(fs.ObjectInfo)
if !ok {
return errors.New("unexpected non file")
}
hashSum, err = o.Hash(ctx, ht)
if err != nil {
return errors.Wrap(err, "hash failed")
}
} }
if node.IsDir() { _, err = fmt.Fprintf(out, "%s %s\n", hashSum, args)
return errors.New("can't hash directory")
}
o, ok := node.DirEntry().(fs.ObjectInfo)
if !ok {
return errors.New("unexpected non file")
}
hash, err := o.Hash(ctx, ht)
if err != nil {
return errors.Wrap(err, "hash failed")
}
_, err = fmt.Fprintf(out, "%s %s\n", hash, args)
if err != nil { if err != nil {
return errors.Wrap(err, "send output failed") return errors.Wrap(err, "send output failed")
} }