accounts/scwallet: flag to specify path to smartcard daemon (#19439)
* accounts/scwallet: Add a switch to enable smartcard support * accounts: change the meaning of the switch * disable card support in windows until tested * only activate account if pcscd socket file is present * the switch is now the path to the socket file * accounts/scwallet: holiman's review feedback * accounts/scwallet: send the path to go-pcsclite * accounts/scwallet: add default, per platform path * accounts/scwallet: fix error log warning * accounts/scwallet: update pcsc lib to latest * accounts/scwallet: use default path from pcsclite * scwallet: forgot to change switch name * cmd: minor style cleanups (error handling first, then happy path)
This commit is contained in:
		
				
					committed by
					
						
						Péter Szilágyi
					
				
			
			
				
	
			
			
			
						parent
						
							30263ad37d
						
					
				
				
					commit
					7a22da98b9
				
			
							
								
								
									
										2
									
								
								vendor/github.com/gballet/go-libpcsclite/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/gballet/go-libpcsclite/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -61,8 +61,6 @@ const (
 | 
			
		||||
	SCardPowever    = 0x0010 /* Card is powered */
 | 
			
		||||
	SCardNegotiable = 0x0020 /* Ready for PTS */
 | 
			
		||||
	SCardSpecific   = 0x0040 /* PTS has been set */
 | 
			
		||||
 | 
			
		||||
	PCSCDSockName = "/run/pcscd/pcscd.comm"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// List of commands to send to the daemon
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/github.com/gballet/go-libpcsclite/doc_bsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/gballet/go-libpcsclite/doc_bsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
// BSD 3-Clause License
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2019, Guillaume Ballet
 | 
			
		||||
// All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without
 | 
			
		||||
// modification, are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
// * Redistributions of source code must retain the above copyright notice, this
 | 
			
		||||
//   list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
// * Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
//   this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//   and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
// * Neither the name of the copyright holder nor the names of its
 | 
			
		||||
//   contributors may be used to endorse or promote products derived from
 | 
			
		||||
//   this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
// +build dragonfly darwin freebsd netbsd openbsd solaris
 | 
			
		||||
 | 
			
		||||
package pcsc
 | 
			
		||||
 | 
			
		||||
const PCSCDSockName string = "/var/run/pcscd/pcscd.comm"
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/github.com/gballet/go-libpcsclite/doc_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/gballet/go-libpcsclite/doc_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
// BSD 3-Clause License
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2019, Guillaume Ballet
 | 
			
		||||
// All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without
 | 
			
		||||
// modification, are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
// * Redistributions of source code must retain the above copyright notice, this
 | 
			
		||||
//   list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
// * Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
//   this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//   and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
// * Neither the name of the copyright holder nor the names of its
 | 
			
		||||
//   contributors may be used to endorse or promote products derived from
 | 
			
		||||
//   this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
// +build linux
 | 
			
		||||
 | 
			
		||||
package pcsc
 | 
			
		||||
 | 
			
		||||
const PCSCDSockName string = "/run/pcscd/pcscd.comm"
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/github.com/gballet/go-libpcsclite/doc_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/gballet/go-libpcsclite/doc_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
// BSD 3-Clause License
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2019, Guillaume Ballet
 | 
			
		||||
// All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without
 | 
			
		||||
// modification, are permitted provided that the following conditions are met:
 | 
			
		||||
//
 | 
			
		||||
// * Redistributions of source code must retain the above copyright notice, this
 | 
			
		||||
//   list of conditions and the following disclaimer.
 | 
			
		||||
//
 | 
			
		||||
// * Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
//   this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
//   and/or other materials provided with the distribution.
 | 
			
		||||
//
 | 
			
		||||
// * Neither the name of the copyright holder nor the names of its
 | 
			
		||||
//   contributors may be used to endorse or promote products derived from
 | 
			
		||||
//   this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
// +build windows
 | 
			
		||||
 | 
			
		||||
package pcsc
 | 
			
		||||
 | 
			
		||||
const PCSCDSockName string = ""
 | 
			
		||||
							
								
								
									
										10
									
								
								vendor/github.com/gballet/go-libpcsclite/msg.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/gballet/go-libpcsclite/msg.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -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)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								vendor/github.com/gballet/go-libpcsclite/winscard.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/gballet/go-libpcsclite/winscard.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -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
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user