diff --git a/pcsc-lite/README b/pcsc-lite/README new file mode 100644 index 0000000..758de4c --- /dev/null +++ b/pcsc-lite/README @@ -0,0 +1,19 @@ +PC/SC-lite is a middleware to access a smart card using SCard API +(PC/SC) Its purpose is to provide a Windows(R) SCard interface in a +very small form factor for communicating to smart cards and readers. + +Compiling with "DEBUGATR=1 ./pcsc-lite.SlackBuild" enables ATR parsing +debug output messages. + +On-demand power on (auto power off) feature for an inserted card is +disabled, now. If you want it re-enabled, so the card is powered off +after a few seconds of inactivity (upstream's default since version +1.6.5) you can compile with "AUTOPOFF=1 ./pcsc-lite.SlackBuild". + +pcsc-lite no longer uses (deprecated) libhal for smart-card reader's +detection. By default libudev is used now. + +You need to add a user pcscd (257) and a group pcscd (257). + +Please see README.SLACKWARE in pcsc-lite's documentation directory +for notes. diff --git a/pcsc-lite/README.SLACKWARE b/pcsc-lite/README.SLACKWARE new file mode 100644 index 0000000..6628c01 --- /dev/null +++ b/pcsc-lite/README.SLACKWARE @@ -0,0 +1,32 @@ +You must have a "pcscd" user and a "pcscd" group to run this script. +To create the user and group you can run these two commands +(uid/gid are set accordingly to http://slackbuilds.org/uid_gid.txt): + # groupadd -g 257 pcscd + # useradd -u 257 -g pcscd -d /var/run/pcscd -s /bin/false pcscd + +To start PC/SC-lite daemon, run "/etc/rc.d/rc.pcscd start". This is most +easily accomplished by adding the following to /etc/rc.d/rc.local: + if [ -x /etc/rc.d/rc.pcscd ]; then + /etc/rc.d/rc.pcscd start + fi +For pcmcia readers, this daemon should be started after rc.pcmcia. + +Beware! +- PC/SC-lite daemon is meant as _alternative_ to openct: running rc.openctd +and rc.pcscd at the same time can and will lead to unforseeable problems +(specially with usb devices that can be managed by both of them, one daemon +can claim one device, making it unavailable for other daemon). + +Smartcard reader's drivers are not included and must be compiled and installed +separately. See DRIVERS file in pcsc-lite's doc directory for more information +on getting and installing specific drivers. pcsc-lite is compiled with the +--enable-usbdropdir=/pcsc/drivers flag -- this directory will be the +destination for usb readers' drivers (e.g. ccid, cardman, ...). + +Since version 1.6.0, serial support is not really maintained. Upstream +developer deems serial readers as rare, so he no longer provides reader.conf +file: if it's still required, you will have to manually create it in +/etc/reader.conf.d (please see 'man 5 reader.conf' for details). + +Since version 1.6.0, events are sent through the socket, so you have to +manually remove unused /var/run/pcscd/pcscd.events/ directory. diff --git a/pcsc-lite/doinst.sh b/pcsc-lite/doinst.sh new file mode 100644 index 0000000..8a2aa3a --- /dev/null +++ b/pcsc-lite/doinst.sh @@ -0,0 +1,26 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ -e $OLD ]; then + cp -a $OLD ${NEW}.incoming + cat $NEW > ${NEW}.incoming + mv ${NEW}.incoming $NEW + fi + config $NEW +} + +preserve_perms etc/rc.d/rc.pcscd.new + diff --git a/pcsc-lite/pcsc-lite.SlackBuild b/pcsc-lite/pcsc-lite.SlackBuild new file mode 100644 index 0000000..0b90e0f --- /dev/null +++ b/pcsc-lite/pcsc-lite.SlackBuild @@ -0,0 +1,180 @@ +#!/bin/bash + +# Slackware build script for pcsc-lite + +# Copyright 2007-2015 LukenShiro, Italy +# Copyright 2020-2023 Matteo Bernardini , Pisa, Italy +# Copyright 2025 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''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 AUTHOR 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. + +# 20230801 bkw: Modified by SlackBuilds.org, BUILD=2: +# - handle user and group detection better. +# - get rid of generic GNU INSTALL from doc dir. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=pcsc-lite +VERSION=${VERSION:-1.9.9} +BUILD=${BUILD:-4} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/$TAG} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +# Bail out if user or group isn't valid on your system +# For slackbuilds.org, assigned pcscd uid/gid are 257/257 +# See http://slackbuilds.org/uid_gid.txt +# 20230801 bkw: grepping /etc/passwd and /etc/group may fail if e.g. NIS +# or LDAP is in use; always use getent. Also, print both messages (for user +# and group) if either doesn't exist. +if ! getent group pcscd &>/dev/null || ! getent passwd pcscd &>/dev/null; then + echo " You must have a \"pcscd\" user and group to run this script." + echo " # groupadd -g 257 pcscd" + echo " # useradd -u 257 -g pcscd -d /var/run/pcscd -s /bin/false pcscd" + exit 1 +fi + +# Debug is off by default +DEBUGATR=${DEBUGATR:-0} +# Inserted card's automatic poweroff (on-demand power on) +AUTOPOFF=${AUTOPOFF:-0} # disabled by default + +# README and README.DAEMON are not useful and partly outdated. +DOCFILES="SECURITY ChangeLog* COPYING HELP NEWS TODO AUTHORS" + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.bz2 +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} + -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} + + +# ATR (answer to reset) debug parsing output +case "$DEBUGATR" in + 0) DEBUGATR_FLAG="dis" ;; + *) DEBUGATR_FLAG="en" ;; +esac + +# disabling/enabling card's automatic power off +case "$AUTOPOFF" in + 0) sed -i "s|^\/\* #define DISABLE_ON_DEMAND_POWER_ON \*\/|#define DISABLE_ON_DEMAND_POWER_ON|" \ + src/pcscd.h.in + ;; + *) ;; +esac + +# --enable-runpid=/var/run/pcscd.pid, and +# --enable-muscledropdir="/pcsc/services" are not supported anymore; +# pid directory changed to /var/run/pcscd for consistency +# libhal support is gone +# API docs not included anymore +export CFLAGS="$SLKCFLAGS -rdynamic" +export CXXFLAGS="$CFLAGS" +export LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-s " +./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --localstatedir=/var \ + --enable-ipcdir=/var/run/pcscd \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --enable-usbdropdir="/usr/lib${LIBDIRSUFFIX}/pcsc/drivers" \ + --enable-confdir=/etc/reader.conf.d \ + --${DEBUGATR_FLAG}able-debugatr \ + --enable-libusb \ + --disable-libudev \ + --disable-libsystemd \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +# formaticc manpage is not automatically installed +install -Dpm 0644 doc/formaticc.1 $PKG/usr/man/man1/ + +# PC/SC-lite slackware-compliant daemon +install -Dpm 0755 $CWD/rc.pcscd $PKG/etc/rc.d/rc.pcscd.new + +# Correct manpages in reader.conf.5 and pcscd.8 +sed -i "s|@confdir@|/etc/reader.conf.d|g" $PKG/usr/man/man5/reader.conf.5 || exit 1 +sed -i "s|@sysconfdir_exp@/init.d/pcscd|/etc/rc.d/rc.pcscd|g" $PKG/usr/man/man8/pcscd.8 || exit 1 +sed -i "s|@sysconfdir_exp@|/etc/reader.conf.d|g" $PKG/usr/man/man8/pcscd.8 || exit 1 + +# Create the directory for drivers and such (not included with this package) +mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/pcsc/{drivers,services} + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/ +cp -a $DOCFILES $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +cat $CWD/README.SLACKWARE > $PKG/usr/doc/$PRGNAM-$VERSION/README.SLACKWARE +# remove README.DAEMON, automatically installed by doc/Makefile. +rm -f $PKG/usr/doc/$PRGNAM-$VERSION/README.DAEMON + +rm -f $PKG/usr/lib*/*.la + +install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc +install -Dpm 0644 $CWD/doinst.sh $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/pcsc-lite/pcsc-lite.info b/pcsc-lite/pcsc-lite.info new file mode 100644 index 0000000..46c90a5 --- /dev/null +++ b/pcsc-lite/pcsc-lite.info @@ -0,0 +1,10 @@ +PRGNAM="pcsc-lite" +VERSION="1.9.9" +HOMEPAGE="https://pcsclite.apdu.fr/" +DOWNLOAD="https://pcsclite.apdu.fr/files/pcsc-lite-1.9.9.tar.bz2" +MD5SUM="23db832115db702e902baccf21da13aa" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Matteo Bernardini" +EMAIL="ponce@slackbuilds.org" diff --git a/pcsc-lite/rc.pcscd b/pcsc-lite/rc.pcscd new file mode 100644 index 0000000..779ec84 --- /dev/null +++ b/pcsc-lite/rc.pcscd @@ -0,0 +1,66 @@ +#!/bin/sh +# +# Start/Stop/Restart the PC/SC-lite smart card daemon. +# +# pcscd should be started after pcmcia and shut down +# before it for smooth experience with PCMCIA readers. +# + +PIDFILE=/var/run/pcscd/pcscd.pid +PCSCD_OPTS="" + +# Start +pcscd_start() { + if [ -x /usr/sbin/pcscd ]; then + if [ -e "$PIDFILE" ]; then + echo "PC/SC-lite daemon already started!" + else + echo "Starting PC/SC-lite smart card daemon..." + /usr/sbin/pcscd $PCSCD_OPTS + fi + fi +} + +# Stop +pcscd_stop() { + echo "Stopping PC/SC-lite smart card daemon..." + if [ -e "$PIDFILE" ]; then + kill $(cat $PIDFILE) + rm -f $PIDFILE 2>&1 >/dev/null + fi + # Just in case: + killall pcscd 2>&1 >/dev/null +} + +# Restart +pcscd_restart() { + pcscd_stop + sleep 3 + pcscd_start +} + +# Status +pcscd_status() { + if [ -e "$PIDFILE" ]; then + echo "pcscd is running." + else + echo "pcscd is stopped." + fi +} + +case "$1" in +'start') + pcscd_start + ;; +'stop') + pcscd_stop + ;; +'restart') + pcscd_restart + ;; +'status') + pcscd_status + ;; +*) + echo "usage: $0 start|stop|restart|status" +esac diff --git a/pcsc-lite/slack-desc b/pcsc-lite/slack-desc new file mode 100644 index 0000000..db16618 --- /dev/null +++ b/pcsc-lite/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +pcsc-lite: pcsc-lite (Middleware to access a smart card using SCard API) +pcsc-lite: +pcsc-lite: Middleware to access a smart card using SCard API (PC/SC) +pcsc-lite: Its purpose is to provide a Windows(R) SCard interface in a +pcsc-lite: very small form factor for communicating to smart cards and +pcsc-lite: readers. +pcsc-lite: +pcsc-lite: Homepage: https://pcsclite.apdu.fr/ +pcsc-lite: +pcsc-lite: +pcsc-lite: