*.deb extraction utility (also *.dsc by wrapping “dpkg-source -x”)
[shellsnippets/shellsnippets.git] / mksh / ldap_user_info.cgi
1 #!/bin/mksh
2 # $Id: ui.cgi 1104 2010-06-18 12:53:21Z tglase $
3 # root@dev:/var/www/tarentpgp/ui.cgi
4
5 # for debugging {{{
6 #print Content-type: text/plain
7 #print
8 #exec 2>&1
9 #set -x
10 # end debugging }}}
11
12 # basic input validation
13 if [[ $AUTH_TYPE != Basic || $HTTPS != on || -z $REMOTE_USER || \
14     $REQUEST_METHOD != GET || -n $QUERY_STRING ]]; then
15         print Status: 400 Bad Request
16         print
17         print Sorry, use the script or leave it.
18         exit 1
19 fi
20
21 ### BEGIN imported code {{{
22 # $MirOS: src/bin/mksh/dot.mkshrc,v 1.43 2009/05/31 17:17:33 tg Rel $
23 #-
24 # Copyright (c) 2002, 2003, 2004, 2006, 2007, 2008, 2009
25 #       Thorsten Glaser <tg@mirbsd.org>
26 #
27 # Provided that these terms and disclaimer and all copyright notices
28 # are retained or reproduced in an accompanying document, permission
29 # is granted to deal in this work without restriction, including un-
30 # limited rights to use, publicly perform, distribute, sell, modify,
31 # merge, give away, or sublicence.
32 #
33 # This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
34 # the utmost extent permitted by applicable law, neither express nor
35 # implied; without malicious intent or gross negligence. In no event
36 # may a licensor, author or contributor be held liable for indirect,
37 # direct, other damage, loss, or other issues arising in any way out
38 # of dealing in the work, even if advised of the possibility of such
39 # damage or existence of a defect, except proven that it results out
40 # of said person's immediate fault when using the work as intended.
41
42 allu=QWERTYUIOPASDFGHJKLZXCVBNM
43 alll=qwertyuiopasdfghjklzxcvbnm
44 alln=0123456789
45
46 function Lb64decode {
47         typeset u=$-
48         set +U
49         typeset c s="$*" t=
50         [[ -n $s ]] || { s=$(cat;print x); s=${s%x}; }
51         typeset -i i=0 n=${#s} p=0 v x
52         typeset -i16 o
53
54         while (( i < n )); do
55                 c=${s:(i++):1}
56                 case $c {
57                 (=)     break ;;
58                 ([A-Z]) (( v = 1#$c - 65 )) ;;
59                 ([a-z]) (( v = 1#$c - 71 )) ;;
60                 ([0-9]) (( v = 1#$c + 4 )) ;;
61                 (+)     v=62 ;;
62                 (/)     v=63 ;;
63                 (*)     continue ;;
64                 }
65                 (( x = (x << 6) | v ))
66                 case $((p++)) {
67                 (0)     continue ;;
68                 (1)     (( o = (x >> 4) & 255 )) ;;
69                 (2)     (( o = (x >> 2) & 255 )) ;;
70                 (3)     (( o = x & 255 ))
71                         p=0
72                         ;;
73                 }
74                 t=$t\\x${o#16#}
75         done
76         print -n $t
77         [[ $u = *U* ]] && set -U
78         :
79 }
80
81 ### END imported code }}}
82
83 # get user information from LDAP
84 v_givenName=
85 v_mailPrimaryAddress=
86 v_o=
87 v_sn=
88 env LDAPTLS_CACERT=/etc/ssl/certs/ucs.tarent.de.cer \
89     ldapsearch -x -LLL -ZZ -H ldap://ugs.tarent.de -b dc=tarent,dc=de \
90     uid="$REMOTE_USER" givenName mailPrimaryAddress o sn | \
91     tr '\n' '\ 1' | sed 's/\ 1 //g' | tr '\ 1' '\n' |&
92 while read -p key value; do
93         # parse ldap "foo:: BARINBASE64" lines
94         [[ $key = *:: ]] && value=$(Lb64decode "$value")
95         # parse ldap "foo: barunencoded" lines
96         key=${key%%*(:)}
97         eval v_$key=\$value
98 done
99
100 # required fields
101 if [[ -z $v_givenName || -z $v_mailPrimaryAddress || -z $v_sn ]]; then
102         print Status: 400 Bad Request
103         print
104         print You don\'t exist. Go away.
105         exit 1
106 fi
107
108 # output the response
109 print Content-type: text/plain
110 print Entropy: $RANDOM
111 print
112 print status ok
113 print name $v_givenName $v_sn
114 print mail $v_mailPrimaryAddress | tr $allu $alll
115 print comm $v_o
116 exit 0