diff --git a/cmd/geth/main.go b/cmd/geth/main.go index c9cc3564f9..f1fdb93cc1 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -64,7 +64,7 @@ var ( utils.KeyStoreDirFlag, utils.ExternalSignerFlag, utils.NoUSBFlag, - utils.SmartCardFlag, + utils.SmartCardDaemonPathFlag, utils.DashboardEnabledFlag, utils.DashboardAddrFlag, utils.DashboardPortFlag, diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index ee5c13f13c..0074e44f1c 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -71,7 +71,7 @@ var AppHelpFlagGroups = []flagGroup{ utils.DataDirFlag, utils.KeyStoreDirFlag, utils.NoUSBFlag, - utils.SmartCardFlag, + utils.SmartCardDaemonPathFlag, utils.NetworkIdFlag, utils.TestnetFlag, utils.RinkebyFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index f0bc8784b0..2f790064f9 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -128,9 +128,9 @@ var ( Name: "nousb", Usage: "Disables monitoring for and managing USB hardware wallets", } - SmartCardFlag = cli.StringFlag{ + SmartCardDaemonPathFlag = cli.StringFlag{ Name: "pcscdpath", - Usage: "Path to the smartcard daemon (pcscd) socket file (unix only, leave empty for platform default)", + Usage: "Path to the smartcard daemon (pcscd) socket file", Value: pcsclite.PCSCDSockName, } NetworkIdFlag = cli.Uint64Flag{ @@ -1151,18 +1151,23 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) { } func setSmartCard(ctx *cli.Context, cfg *node.Config) { - // Use the platform default unless specified on the command line - if len(ctx.GlobalString(SmartCardFlag.Name)) > 0 { - if fi, err := os.Stat(ctx.GlobalString(SmartCardFlag.Name)); err == nil { - if fi.Mode()&os.ModeType == os.ModeSocket { - cfg.SmartCardDaemonPath = ctx.GlobalString(SmartCardFlag.Name) - } else { - log.Error(fmt.Sprintf("%s doesn't seem to be a socket file", ctx.GlobalString(SmartCardFlag.Name))) - } - } else { - log.Error(fmt.Sprintf("%s doesn't exist", ctx.GlobalString(SmartCardFlag.Name))) - } + // Skip enabling smartcards if no path is set + path := ctx.GlobalString(SmartCardDaemonPathFlag.Name) + if path == "" { + return } + // Sanity check that the smartcard path is valid + fi, err := os.Stat(path) + if err != nil { + log.Error("Failed to verify smartcard daemon path", "path", path, "err", err) + return + } + if fi.Mode()&os.ModeType != os.ModeSocket { + log.Error("Invalid smartcard daemon path", "path", path, "type", fi.Mode().String()) + return + } + // Smartcard daemon path exists and is a socket, enable it + cfg.SmartCardDaemonPath = path } func setDataDir(ctx *cli.Context, cfg *node.Config) {