Blob


1 #!/bin/sh
2 # Author: Benjamin Stürz
3 # License: ISC
5 #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_vars
33 log "A: $*"
34 send 'OK Pleased to meet you'
36 while read -r line; do
37 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" in
42 '#')
43 ;;
44 NOP)
45 ok
46 ;;
47 CANCEL)
48 unimp
49 ;;
50 OPTION)
51 # TODO
52 ok
53 ;;
54 BYE)
55 send 'OK closing connection'
56 ;;
57 AUTH)
58 unimp
59 ;;
60 RESET)
61 reset_vars
62 ok
63 ;;
64 END)
65 unimp
66 ;;
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 ok
98 ;;
99 SETDESC)
100 desc=$args
101 ok
102 ;;
103 SETPROMPT)
104 prompt=$args
105 ok
106 ;;
107 SETKEYINFO)
108 # TODO
109 ok
110 ;;
111 SETREPEAT)
112 # TODO
113 ok
114 ;;
115 SETREPEATERROR)
116 # TODO
117 ok
118 ;;
119 SETREPEATOK)
120 # TODO
121 ok
122 ;;
123 SETERROR)
124 # TODO
125 ok
126 ;;
127 SETOK)
128 # TODO
129 ok
130 ;;
131 SETNOTOK)
132 # TODO
133 ok
134 ;;
135 SETCANCEL)
136 # TODO
137 ok
138 ;;
139 GETPIN)
140 _prompt=$prompt
141 [ -z "${_prompt}" ] && _prompt='PIN:'
143 pin=$(dmenu -P -p "$prompt" < /dev/null)
145 if [ $? -eq 0 ]; then
146 [ -n "$pin" ] && send "D ${pin}"
147 ok
148 else
149 send 'ERR 83886179 Operation cancelled <Pinentry>'
150 fi
151 ;;
152 CONFIRM)
153 resp=$(printf 'No\nYes\n' | dmenu -p "$prompt")
155 if [ $? -eq 0 ]; then
156 case "$resp" in
157 Yes)
158 ok
159 ;;
160 No)
161 send 'ERR 114 Not confirmed <Unspecified source>'
162 ;;
163 *)
164 send 'ERR 99 Operation cancelled <Unspecified source>'
165 ;;
166 esac
167 else
168 send 'ERR 99 Operation cancelled <Unspecified source>'
169 fi
170 ;;
171 MESSAGE)
172 # TODO
173 unimp
174 ;;
175 SETQUALITYBAR)
176 # TODO
177 ok
178 ;;
179 SETQUALITYBAR_TT)
180 # TODO
181 ok
182 ;;
183 SETGENPIN)
184 # TODO
185 ok
186 ;;
187 SETGENPIN_TT)
188 # TODO
189 ok
190 ;;
191 GETINFO)
192 arg0=$(echo "$args" | awk '{print $1}')
193 case "${arg0}" in
194 flavor)
195 send 'D dmenu2'
196 ok
197 ;;
198 pid)
199 send "D $$"
200 ok
201 ;;
202 version)
203 send 'D 0.0.0'
204 ok
205 ;;
206 ttyinfo)
207 send "D - - - - $(id -u)/$(id -g) 0"
208 ok
209 ;;
210 *)
211 send 'ERR 83886360 IPC parameter error <Pinentry>'
212 ;;
213 esac
214 ;;
215 SETTITLE)
216 title=$args
217 ok
218 ;;
219 SETTIMEOUT)
220 # TODO
221 ok
222 ;;
223 CLEARPASSPHRASE)
224 # TODO
225 send 'ERR 83886337 General IPC error <Pinentry>'
226 ;;
227 esac
228 done