-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathkwalletaskpass
75 lines (69 loc) · 2.4 KB
/
kwalletaskpass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env mksh
# $MirOS: contrib/hosted/tg/code/kwalletcli/kwalletaskpass,v 1.9 2016/08/30 17:37:56 tg Exp $
#-
# Copyright © 2009, 2010, 2011, 2014
# mirabilos <[email protected]>
#
# Provided that these terms and disclaimer and all copyright notices
# are retained or reproduced in an accompanying document, permission
# is granted to deal in this work without restriction, including un‐
# limited rights to use, publicly perform, distribute, sell, modify,
# merge, give away, or sublicence.
#
# This work is provided “AS IS” and WITHOUT WARRANTY of any kind, to
# the utmost extent permitted by applicable law, neither express nor
# implied; without malicious intent or gross negligence. In no event
# may a licensor, author or contributor be held liable for indirect,
# direct, other damage, loss, or other issues arising in any way out
# of dealing in the work, even if advised of the possibility of such
# damage or existence of a defect, except proven that it results out
# of said person’s immediate fault when using the work as intended.
unset LC_ALL LANGUAGE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES \
LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION
export LANG=C LC_CTYPE=en_US.UTF-8
set -U
if (( $# != 1 )); then
print -u2 wrong number of arguments
exit 127
fi
rv=1
trywallet=0
[[ -n $DISPLAY ]] && [[ $1 = 'Enter passphrase for '* || \
$1 = 'Password for '* ]] && trywallet=1
if (( trywallet )); then
blist=$(kwalletcli -q -f kwalletaskpass-blacklist -e "${1#Enter }")
[[ $blist = yes* ]] && trywallet=0
fi
if (( trywallet )); then
pw=$(kwalletcli -q -f kwalletaskpass -e "${1#Enter }")
rv=$?
fi
# whitelist of known binary queries
barg=
[[ $1 = 'Allow shared connection to '* || \
$1 = 'Terminate shared connection to '* || \
$1 = 'Open '*' on '*'?' || \
$1 = 'Something behind the ssh-agent-filter '*'requested use of the key named '* || \
$1 = 'Allow forward to '* || \
$1 = 'Allow use of key '* ]] && barg=-b
if (( rv )); then
pw=$(kwalletcli_getpin -q $barg -t "$1")
rv=$?
if (( rv == 0 && trywallet )); then
q=${1#Enter }
q=${q%%:*([ ])}
if kwalletcli_getpin -qb -t "Store $q in the KDE Wallet?"; then
kwalletcli -q -f kwalletaskpass \
-e "${1#Enter }" -p "$pw"
else
kwalletcli -q -f kwalletaskpass-blacklist \
-e "${1#Enter }" -p yes
fi
fi
fi
case $rv {
(0) print -r -- "$pw"
exit 0 ;;
(1) exit 1 ;;
(*) exit 3 ;;
}