fspath: Implement a connection string parser #4996

This is implemented as a state machine parser so it can emit sensible
error messages.

It does not use the connection strings elsewhere in rclone yet - see
subsequent commits.

An optional fuzzer is implemented for the Parse function.
This commit is contained in:
Nick Craig-Wood
2021-02-09 09:30:40 +00:00
parent 3b21857097
commit 8a46dd1b57
8 changed files with 613 additions and 70 deletions

View File

@ -1206,10 +1206,12 @@ func MustFind(name string) *RegInfo {
// ParseRemote deconstructs a path into configName, fsPath, looking up
// the fsName in the config file (returning NotFoundInConfigFile if not found)
func ParseRemote(path string) (fsInfo *RegInfo, configName, fsPath string, err error) {
configName, fsPath, err = fspath.Parse(path)
parsed, err := fspath.Parse(path)
if err != nil {
return nil, "", "", err
}
configName, fsPath = parsed.Name, parsed.Path
// FIXME do something with parsed.Config
var fsName string
var ok bool
if configName != "" {