accounts/scwallet: send the path to go-pcsclite

This commit is contained in:
Guillaume Ballet 2019-05-17 13:49:51 +02:00
parent c65f617a0d
commit b038a6a727
6 changed files with 22 additions and 11 deletions

View file

@ -152,8 +152,8 @@ func (hub *Hub) setPairing(wallet *Wallet, pairing *smartcardPairing) error {
}
// NewHub creates a new hardware wallet manager for smartcards.
func NewHub(scheme string, datadir string) (*Hub, error) {
context, err := pcsc.EstablishContext(pcsc.ScopeSystem)
func NewHub(daemonPath string, scheme string, datadir string) (*Hub, error) {
context, err := pcsc.EstablishContext(daemonPath, pcsc.ScopeSystem)
if err != nil {
return nil, err
}

View file

@ -1159,6 +1159,10 @@ func setSmartCard(ctx *cli.Context, cfg *node.Config) {
// caught at the daemon initialization level, though.
if fi, err := os.Stat(ctx.GlobalString(SmartCardFlag.Name)); err == nil {
cfg.SmartCard = fi.Mode()&os.ModeType == os.ModeSocket
cfg.SmartCardDaemonPath = ctx.GlobalString(SmartCardFlag.Name)
fmt.Println(ctx.GlobalString(SmartCardFlag.Name))
} else {
log.Error(ctx.GlobalString(SmartCardFlag.Name), "doesn't seem to be a socket file")
}
} else {
log.Info("Smartcard support disabled on this platform")

View file

@ -98,6 +98,9 @@ type Config struct {
// SmartCard activates smartcard wallet monitoring and connectivity.
SmartCard bool `toml:",omitempty"`
// SmartCardDaemonPath is the path to the smartcard daemon's socket
SmartCardDaemonPath string `toml:",omitempty"`
// IPCPath is the requested location to place the IPC endpoint. If the path is
// a simple file name, it is placed inside the data directory (or on the root
// pipe path on Windows), whereas if it's a resolvable path name (absolute or
@ -510,7 +513,7 @@ func makeAccountManager(conf *Config) (*accounts.Manager, string, error) {
}
if conf.SmartCard {
// Start a smart card hub
if schub, err := scwallet.NewHub(scwallet.Scheme, keydir); err != nil {
if schub, err := scwallet.NewHub(conf.SmartCardDaemonPath, scwallet.Scheme, keydir); err != nil {
log.Warn(fmt.Sprintf("Failed to start smart card hub, disabling: %v", err))
} else {
backends = append(backends, schub)

View file

@ -62,7 +62,7 @@ func messageSendWithHeader(command uint32, conn net.Conn, data []byte) error {
return err
}
// ClientSetupSession prepares a communication channel for the client to talk to the server.
// clientSetupSession prepares a communication channel for the client to talk to the server.
// This is called by the application to create a socket for local IPC with the
// server. The socket is associated to the file \c PCSCLITE_CSOCK_NAME.
/*
@ -73,6 +73,10 @@ func messageSendWithHeader(command uint32, conn net.Conn, data []byte) error {
* @retval -1 The socket can not open a connection.
* @retval -1 Can not set the socket to non-blocking.
*/
func clientSetupSession() (net.Conn, error) {
return net.Dial("unix", PCSCDSockName)
func clientSetupSession(daemonPath string) (net.Conn, error) {
path := PCSCDSockName
if len(daemonPath) > 0 {
path = daemonPath
}
return net.Dial("unix", path)
}

View file

@ -56,10 +56,10 @@ type Client struct {
// EstablishContext asks the PCSC daemon to create a context
// handle for further communication with connected cards and
// readers.
func EstablishContext(scope uint32) (*Client, error) {
func EstablishContext(path string, scope uint32) (*Client, error) {
client := &Client{}
conn, err := clientSetupSession()
conn, err := clientSetupSession(path)
if err != nil {
return nil, err
}

6
vendor/vendor.json vendored
View file

@ -135,10 +135,10 @@
"revisionTime": "2018-04-18T12:24:29Z"
},
{
"checksumSHA1": "GXqHzd0XkPLX/iulpOncaxbxzZo=",
"checksumSHA1": "aG2cEBkWshLrW0snEymuR6vNZYs=",
"path": "github.com/gballet/go-libpcsclite",
"revision": "312b5175032f98274685a4dd81935a92ad2412a5",
"revisionTime": "2019-04-03T18:15:18Z"
"revision": "c11b1ec2c86bc1d38a95f14ae6662f23bf17bc37",
"revisionTime": "2019-05-17T11:38:18Z"
},
{
"checksumSHA1": "gxV/cPPLkByTdY8y172t7v4qcZA=",