Commit Diff


commit - bf04304b7d9c83a06eb91300bb5e6293c46e66cd
commit + 6f0a03b88dab13c5b9dbb264ad6087abda50c90a
blob - 46d97573ed2e8331f836b354ea3e2a1fe6950016
blob + 186e69be0ae503732e3a9db3d3456a3041bd5276
--- Makefile
+++ Makefile
@@ -41,10 +41,11 @@ HDR_PD		= master.h					\
 		  pinentry-dmenu/pinentry/secmem-util.h		\
 		  pinentry-dmenu/pinentry/pinentry.h
 
+SRC_PD2 =	pinentry-dmenu2.sh
 
 MAN		= dwm/dwm.1 st/st.1 dmenu/dmenu.1 dmenu/stest.1 slock/slock.1 pinentry-dmenu/pinentry-dmenu.1
 
-all: bin/dwm bin/st bin/bedstatus bin/dmenu bin/stest bin/xbgcd bin/slock bin/pinentry-dmenu
+all: bin/dwm bin/st bin/bedstatus bin/dmenu bin/stest bin/xbgcd bin/slock bin/pinentry-dmenu bin/pinentry-dmenu2
 
 check:
 	find etc/common etc/$$(uname) -not -type d | awk '{a=$$0; sub(/etc\/[^\/]+/, "/etc", a); system("diff -u " $$0 " " a)}'
@@ -110,4 +111,9 @@ bin/pinentry-dmenu: ${SRC_PD} ${HDR_PD}
 	@mkdir -p bin
 	${CC} -o $@ ${SRC_PD} ${CFLAGS} `pkg-config --cflags --libs libassuan gpg-error fontconfig freetype2 x11 xft xinerama`
 
+bin/pinentry-dmenu2: ${SRC_PD2}
+	@mkdir -p bin
+	cp -f ${SRC_PD2} $@
+	chmod +x $@
+
 .PHONY: all clean install
blob - /dev/null
blob + 427c988e0c24ae43fd79d1a359083d8dd58d4256 (mode 644)
--- /dev/null
+++ pinentry-dmenu2.sh
@@ -0,0 +1,228 @@
+#!/bin/sh
+# Author: Benjamin Stürz
+# License: ISC
+
+#logfile="$HOME/pinentry.log"
+logfile="/dev/null"
+
+log() {
+	echo "$*" >> "$logfile"
+}
+
+send() {
+	log "P: $*"
+	echo "$*"
+}
+
+ok() {
+	send 'OK'
+}
+
+unimp() {
+	send 'ERR 536870981 Not implemented <User defined source 1>'
+}
+
+reset_vars() {
+	title=
+	prompt=
+	desc=
+}
+
+reset_vars
+
+log "A: $*"
+send 'OK Pleased to meet you'
+
+while read -r line; do
+	log "C: $line"
+	cmd=$(echo "$line" | awk '{print $1}' | tr '[[:lower:]]' '[[:upper:]]')
+	args=$(echo "$line" | awk '{for (i=2; i<NF; ++i) printf "%s ", $i; print $NF}')
+
+	case "$cmd" in
+	'#')
+		;;
+	NOP)
+		ok
+		;;
+	CANCEL)
+		unimp
+		;;
+	OPTION)
+		# TODO
+		ok
+		;;
+	BYE)
+		send 'OK closing connection'
+		;;
+	AUTH)
+		unimp
+		;;
+	RESET)
+		reset_vars
+		ok
+		;;
+	END)
+		unimp
+		;;
+	HELP)
+		send '# NOP'
+		send '# CANCEL'
+		send '# OPTION'
+		send '# BYE'
+		send '# AUTH'
+		send '# RESET'
+		send '# END'
+		send '# HELP'
+		send '# SETDESC'
+		send '# SETPROMPT'
+		send '# SETKEYINFO'
+		send '# SETREPEAT'
+		send '# SETREPEATERROR'
+		send '# SETREPEATOK'
+		send '# SETERROR'
+		send '# SETOK'
+		send '# SETNOTOK'
+		send '# SETCANCEL'
+		send '# GETPIN'
+		send '# CONFIRM'
+		send '# MESSAGE'
+		send '# SETQUALITYBAR'
+		send '# SETQUALITYBAR_TT'
+		send '# SETGENPIN'
+		send '# SETGENPIN_TT'
+		send '# GETINFO'
+		send '# SETTITLE'
+		send '# SETTIMEOUT'
+		send '# CLEARPASSPHRASE'
+		ok
+		;;
+	SETDESC)
+		desc=$args
+		ok
+		;;
+	SETPROMPT)
+		prompt=$args
+		ok
+		;;
+	SETKEYINFO)
+		# TODO
+		ok
+		;;
+	SETREPEAT)
+		# TODO
+		ok
+		;;
+	SETREPEATERROR)
+		# TODO
+		ok
+		;;
+	SETREPEATOK)
+		# TODO
+		ok
+		;;
+	SETERROR)
+		# TODO
+		ok
+		;;
+	SETOK)
+		# TODO
+		ok
+		;;
+	SETNOTOK)
+		# TODO
+		ok
+		;;
+	SETCANCEL)
+		# TODO
+		ok
+		;;
+	GETPIN)
+		_prompt=$prompt
+		[ -z "${_prompt}" ] && _prompt='PIN:'
+
+		pin=$(dmenu -P -p "$prompt" < /dev/null)
+
+		if [ $? -eq 0 ]; then
+			[ -n "$pin" ] && send "D ${pin}"
+			ok
+		else
+			send 'ERR 83886179 Operation cancelled <Pinentry>'
+		fi
+		;;
+	CONFIRM)
+		resp=$(printf 'No\nYes\n' | dmenu -p "$prompt")
+
+		if [ $? -eq 0 ]; then
+			case "$resp" in
+			Yes)
+				ok
+				;;
+			No)
+				send 'ERR 114 Not confirmed <Unspecified source>'
+				;;
+			*)
+				send 'ERR 99 Operation cancelled <Unspecified source>'
+				;;
+			esac
+		else
+			send 'ERR 99 Operation cancelled <Unspecified source>'
+		fi
+		;;
+	MESSAGE)
+		# TODO
+		unimp
+		;;
+	SETQUALITYBAR)
+		# TODO
+		ok
+		;;
+	SETQUALITYBAR_TT)
+		# TODO
+		ok
+		;;
+	SETGENPIN)
+		# TODO
+		ok
+		;;
+	SETGENPIN_TT)
+		# TODO
+		ok
+		;;
+	GETINFO)
+		arg0=$(echo "$args" | awk '{print $1}')
+		case "${arg0}" in
+		flavor)
+			send 'D dmenu2'
+			ok
+			;;
+		pid)
+			send "D $$"
+			ok
+			;;
+		version)
+			send 'D 0.0.0'
+			ok
+			;;
+		ttyinfo)
+			send "D - - - - $(id -u)/$(id -g) 0"
+			ok
+			;;
+		*)
+			send 'ERR 83886360 IPC parameter error <Pinentry>'
+			;;
+		esac
+		;;
+	SETTITLE)
+		title=$args
+		ok
+		;;
+	SETTIMEOUT)
+		# TODO
+		ok
+		;;
+	CLEARPASSPHRASE)
+		# TODO
+		send 'ERR 83886337 General IPC error <Pinentry>'
+		;;
+	esac
+done