Blob
1 #!/bin/sh2 # Author: Benjamin Stürz3 # License: ISC5 #logfile="$HOME/pinentry.log"6 logfile="/dev/null"8 log() {9 echo "$*" >> "$logfile"10 }12 send() {13 log "P: $*"14 echo "$*"15 }17 ok() {18 send 'OK'19 }21 unimp() {22 send 'ERR 536870981 Not implemented <User defined source 1>'23 }25 reset_vars() {26 title=27 prompt=28 desc=29 }31 reset_vars33 log "A: $*"34 send 'OK Pleased to meet you'36 while read -r line; do37 log "C: $line"38 cmd=$(echo "$line" | awk '{print $1}' | tr '[[:lower:]]' '[[:upper:]]')39 args=$(echo "$line" | awk '{for (i=2; i<NF; ++i) printf "%s ", $i; print $NF}')41 case "$cmd" in42 '#')43 ;;44 NOP)45 ok46 ;;47 CANCEL)48 unimp49 ;;50 OPTION)51 # TODO52 ok53 ;;54 BYE)55 send 'OK closing connection'56 ;;57 AUTH)58 unimp59 ;;60 RESET)61 reset_vars62 ok63 ;;64 END)65 unimp66 ;;67 HELP)68 send '# NOP'69 send '# CANCEL'70 send '# OPTION'71 send '# BYE'72 send '# AUTH'73 send '# RESET'74 send '# END'75 send '# HELP'76 send '# SETDESC'77 send '# SETPROMPT'78 send '# SETKEYINFO'79 send '# SETREPEAT'80 send '# SETREPEATERROR'81 send '# SETREPEATOK'82 send '# SETERROR'83 send '# SETOK'84 send '# SETNOTOK'85 send '# SETCANCEL'86 send '# GETPIN'87 send '# CONFIRM'88 send '# MESSAGE'89 send '# SETQUALITYBAR'90 send '# SETQUALITYBAR_TT'91 send '# SETGENPIN'92 send '# SETGENPIN_TT'93 send '# GETINFO'94 send '# SETTITLE'95 send '# SETTIMEOUT'96 send '# CLEARPASSPHRASE'97 ok98 ;;99 SETDESC)100 desc=$args101 ok102 ;;103 SETPROMPT)104 prompt=$args105 ok106 ;;107 SETKEYINFO)108 # TODO109 ok110 ;;111 SETREPEAT)112 # TODO113 ok114 ;;115 SETREPEATERROR)116 # TODO117 ok118 ;;119 SETREPEATOK)120 # TODO121 ok122 ;;123 SETERROR)124 # TODO125 ok126 ;;127 SETOK)128 # TODO129 ok130 ;;131 SETNOTOK)132 # TODO133 ok134 ;;135 SETCANCEL)136 # TODO137 ok138 ;;139 GETPIN)140 _prompt=$prompt141 [ -z "${_prompt}" ] && _prompt='PIN:'143 pin=$(dmenu -P -p "$prompt" < /dev/null)145 if [ $? -eq 0 ]; then146 [ -n "$pin" ] && send "D ${pin}"147 ok148 else149 send 'ERR 83886179 Operation cancelled <Pinentry>'150 fi151 ;;152 CONFIRM)153 resp=$(printf 'No\nYes\n' | dmenu -p "$prompt")155 if [ $? -eq 0 ]; then156 case "$resp" in157 Yes)158 ok159 ;;160 No)161 send 'ERR 114 Not confirmed <Unspecified source>'162 ;;163 *)164 send 'ERR 99 Operation cancelled <Unspecified source>'165 ;;166 esac167 else168 send 'ERR 99 Operation cancelled <Unspecified source>'169 fi170 ;;171 MESSAGE)172 # TODO173 unimp174 ;;175 SETQUALITYBAR)176 # TODO177 ok178 ;;179 SETQUALITYBAR_TT)180 # TODO181 ok182 ;;183 SETGENPIN)184 # TODO185 ok186 ;;187 SETGENPIN_TT)188 # TODO189 ok190 ;;191 GETINFO)192 arg0=$(echo "$args" | awk '{print $1}')193 case "${arg0}" in194 flavor)195 send 'D dmenu2'196 ok197 ;;198 pid)199 send "D $$"200 ok201 ;;202 version)203 send 'D 0.0.0'204 ok205 ;;206 ttyinfo)207 send "D - - - - $(id -u)/$(id -g) 0"208 ok209 ;;210 *)211 send 'ERR 83886360 IPC parameter error <Pinentry>'212 ;;213 esac214 ;;215 SETTITLE)216 title=$args217 ok218 ;;219 SETTIMEOUT)220 # TODO221 ok222 ;;223 CLEARPASSPHRASE)224 # TODO225 send 'ERR 83886337 General IPC error <Pinentry>'226 ;;227 esac228 done