Changeset 871129
- Timestamp:
- 03/07/2014 09:41:46 AM (12 years ago)
- File:
-
- 1 edited
-
askapache-debug-viewer/trunk/f/f/server-env.cgi (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
askapache-debug-viewer/trunk/f/f/server-env.cgi
r653137 r871129 1 1 #!/bin/sh 2 echo -e "Content-type: text/plain\n\n" 3 4 ################################################################################################################ 5 # RESTRICTED SHEL 6 # -changing directories with c 7 # -setting or unsetting the values of SHELL, PATH, ENV, or BASH_EN 8 # -specifying command names containing 9 # -specifying a file name containing a / as an argument to the . builtin comman 10 # -Specifying a filename containing a slash as an argument to the -p option to the hash builtin comman 11 # -importing function definitions from the shell environment at startu 12 # -parsing the value of SHELLOPTS from the shell environment at startu 13 # -redirecting output using the >, >|, <>, >&, &>, and >> redirection operator 14 # -using the exec builtin command to replace the shell with another comman 15 # -adding or deleting builtin commands with the -f and -d options to the enable builtin comman 16 # -Using the enable builtin command to enable disabled shell builtin 17 # -specifying the -p option to the command builtin comman 18 # -turning off restricted mode with set +r or set +o restricted 19 ################################################################################################################ 20 2 # @ author - http://www.askapache.com/ 3 4 5 6 # GLOBALS 7 ################################################################################################################# 8 __WIDTH=170 TERM=dumb LC_COLLATE=C LC_CTYPE=C LC_ALL=C 21 9 22 10 … … 25 13 # FUNCTIONS 26 14 ################################################################################################################ 27 function __A () 28 { local __a __i __z;for __a;do __z=\${!${__a}*};for __i in `eval echo "${__z}"`;do echo -e "$__i: ${!__i}";done;done; } 29 30 function __S () 31 { local L IFS=';';while read -r L;do builtin printf "${#L}@%s\n" "$L";done|sort -n|sed -u 's/^[^@]*@//'; } 32 33 function __P () 34 { local l=`builtin printf %${2:-$__WIDTH}s` && echo -e "${l// /${1:-=}}"; } 35 36 function __CT () 37 { echo -e "\n"; } 38 39 function __TT () 40 { echo -e "\n\n$*"; } 41 42 function __T () 43 { echo -e "\n\n+`__P -`+\n| $*\n+`__P '='`+"; } 44 45 function __M () 46 { echo -e " >>> $M" $*; } 47 48 function __H () 49 { command builtin type $1 &>/dev/null && local a="yes" || return 1; } 50 51 function LE () 52 { 53 [ ! -r /proc/${1:-$$}/limits ]] && return; 54 sed -e '1z;s/ *$//;:a;$!N;s/\nM.. [a-z]* [a-z]* [a-z]* \{1,\}\([^ ]*\) *\([^ ]*\) *[a-z]* */\1:\2 /;ta;s/u\w\+d/u/g;s/ *$//;s/ / | /g;s/\([^:]\+\):\1/\1:=/g' /proc/${1:-$$}/limits; 55 } 56 57 function LH () 58 { 59 [[ ! -r /proc/${1:-$$}/limits ]] && return; 60 sed -e '1z;s/ *$//;:a;$!N;s/\nM.. \([a-z]\+ [a-z]* [a-z]*\) \{1,\}\([^ ]*\) *\([^ ]*\) *\([a-z]*\) */:\1/;ta;s/ *:/:/g;s/size/sz/g;s/file/f/g;s/ p\w\+y/ pri/g;s/memory/mem/g;s/p\w\+s/procs/g;s/^://;s/:/ | /g' /proc/${1:-$$}/limits 61 } 62 63 64 65 66 # CUSTOM SETTINGS 67 ################################################################################################################ 68 __WIDTH=170 69 LC_COLLATE=C LC_CTYPE=C LC_ALL=C 70 71 72 73 # RUNTIME SETUP 15 function __A () { local __a= __i= __z=; for __a; do __z=\${!${__a}*}; for __i in `eval echo "${__z}"`; do echo -e "${__i:-}: ${!__i:-}"; done; done; } 16 function __S () { local L= IFS=';';while read -r L;do builtin printf "${#L}@%s\n" "$L";done|sort -n|sed -u 's/^[^@]*@//'; } 17 function __P () { local l=`builtin printf %${2:-$__WIDTH}s` && echo -e "${l// /${1:-=}}"; } 18 function __CT () { echo -e "\n"; } 19 function __TT () { echo -e "\n\n$*"; } 20 function __T () { echo -e "\n\n+`__P -`+\n| $*\n+`__P '='`+"; } 21 function __M () { echo -e " >>> $*"; } 22 function __H () { command builtin type $1 &>/dev/null && local a="yes" || return 1; } 23 24 25 26 27 # MAIN EXECUTION 74 28 ################################################################################################################# 29 30 echo -e "Content-Type: text/plain\r\n" 31 32 75 33 shopt -s dotglob nocaseglob extglob 76 34 77 35 # -C If set, disallow existing regular files to be overwritte 78 36 # -f Disable file name generation (globbing 79 # -e Exit immediately if a command exits with a non-zero status 80 # -B enable brace expansion 37 # -B enable brace expansion 81 38 # +H disable History 82 39 set -C +f +H -B 83 40 84 # make sure we dont create any files41 # make sure we cant create any files 85 42 umask 0177 86 43 87 44 # redirect everything to output (no logs or stderr is used) 88 exec 2>/dev/null 89 90 91 92 93 94 95 96 97 # MAIN EXECUTION 98 ################################################################################################################# 45 exec 2>&1 #/dev/null 46 99 47 { 100 48 101 __T "EXPANDING PATH" 102 { 103 __M "ORIG PATH:$PATH" 104 PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/libexec:/usr/local/apache/bin 105 106 for t in ${PATH//:/ }; 107 do 108 [[ -d "$t" ]] && sed -n -e "/:${t//\//\\/}:/Q1" <<< ":${p:=}:" && p=$p:$t || continue; 109 done 110 111 PATH=${p/:/}:. 112 __M "NEW PATH:$PATH" 113 } 114 __CT 115 116 117 118 __T "USER INFO" 119 { 120 __M "UMASK: `(umask 2>/dev/null)` ( `(umask -S 2>/dev/null)` )" 121 __H uname && __M "UNAME: `eval echo $(uname -a 2>/dev/null)`" 122 __H whoami && __M "WHOAMI: `(whoami 2>/dev/null)`" 123 __H id && __M "ID: `(id 2>/dev/null)`" 124 __H logname && __M "LOGNAME: `(logname 2>/dev/null)`" 125 __H groups && __M "GROUPS: `(groups 2>/dev/null)`" 126 __H lastlog && __M "LASTLOG: " && (lastlog 2>/dev/null) 127 } 128 __CT 129 130 131 if __H who; 132 then 133 __T "LOGGED ON USERS" 134 { 135 (who -a 2>/dev/null) 136 } 137 __CT 138 fi; 139 140 141 142 if [[ -r /etc/passwd ]]; 143 then 144 __T "/etc/passwd" 145 { 146 (cat /etc/passwd) 147 } 148 __CT 149 fi; 150 151 152 153 if __H ulimit; 154 then 155 __T "USER LIMITS" 156 { 157 ulimit -a 158 } 159 __CT 160 fi 161 162 163 164 if [[ -d /dev ]] && __H ls; 165 then 166 __T "/dev Directory" 167 { 168 ( ls -vlaph /dev 2>/dev/null | column -c$__WIDTH -t) 169 } 170 __CT 171 172 fi; 173 174 175 176 __T "IP INFORMATION" 177 { 178 __H ip && __M "IP:" && (ip -o -f inet addr 2>/dev/null) | sed 's/^.*inet \([0-9.]*\).*$/\1/g'; 179 __H nmap && __M "NMAP:" && (nmap --iflist 2>/dev/null) | sed 1,4d | sed -n '/ethernet/s/^.*) \([0-9.]*\).*$/\1/gp'; 180 __H ifconfig && __M "IFCONFIG:" && (ifconfig -a 2>/dev/null) | sed -n '/inet a/s/^.*addr:\([0-9.]*\).*$/\1/gp'; 181 [[ -f "$HOME/.cpanel/datastore/_sbin_ifconfig_-a" ]] && __M "CPANEL CACHE:" && sed -e '/inet/!d; s/.*addr:\([0-9\.]*\).*/\1/g' "$HOME/.cpanel/datastore/_sbin_ifconfig_-a" | sort -u 182 183 } 184 __CT 185 186 187 __T "ROUTE / INTERFACE INFO" 188 { 189 __H route && __M "ROUTE" && (route -nv 2>/dev/null) 190 __H ip && ( ip rule && ip route && ip address ) 2>/dev/null 191 __H ifconfig && (ifconfig -a 2>/dev/null) 192 } 193 __CT 194 195 196 197 __T "CGI/1.0 test script report:" 198 { 199 __A SERVER REQUEST GET SERVER PATH REMOTE AUTH CONTENT HTTP TZ GATEWAY QUERY MO 200 } 201 __CT 202 203 204 205 206 __T "HIDDEN VARIABLES" 207 { 208 __A {a..z} {A..Z} _{0..9} _{A..Z} _{a..z} | cat -Tsv 2>/dev/null 209 } 210 __CT 211 212 213 214 __T "DECLARE INFO" 215 { 216 for i in "r" "i" "a" "x" "t" "-"; 217 do 218 builtin eval declare -$i && echo; 219 done | sed 's/^declare //' | cat -Tsv 2>/dev/null 220 } 221 __CT 222 223 224 __T "SHELL OPTIONS" 225 { 226 __A SHELLOPTS BASHOPTS 227 echo -e "\$-: $-" 228 __P '-' && builtin shopt -s -p 229 __P '-' && builtin shopt -u -p 230 } 231 __CT 232 233 234 __T "ENV AND EXPORT" 235 { 236 __H env && command env | cat -Tsv 2>/dev/null && __P '-' 237 builtin export | cat -Tsv 2>/dev/null 238 } 239 __CT 240 241 242 243 if __H perl; 244 then 245 __T "PERL VARIABLES" 246 { 247 perl -e'foreach $v (sort(keys(%ENV))) {$vv = $ENV{$v};$vv =~ s|\n|\\n|g;$vv =~ s|"|\\"|g;print "${v}=\"${vv}\"\n"}' | cat -Tsv 2>/dev/null 248 } 249 __CT 250 fi 251 252 253 if [[ -d /proc ]]; 254 then 255 __T "CURRENT PROCESS LIMITS" 256 { 257 for p in `echo /proc/[0-9]*/limits` 258 do 259 pid=${p:6:$((${#p}-13))} 260 [[ $pid == $PPID || $pid == $$ ]] && continue; 261 echo -e "\n/proc/$pid:" 262 sed '1s/\x00/ /g;n;s/\x00/\n/g;/.\{2,\}/!d' /proc/$pid/cmdline $p 2>/dev/null 263 done 264 } 265 __CT 266 267 __T "CURRENT PROCESS CMDLINE" 268 { 269 for p in `echo /proc/[0-9]*/cmdline`; 270 do 271 pid=${p:6:$((${#p}-13))} 272 [[ $pid == $PPID || $pid == $$ ]] && continue; 273 __M "[ /proc/$pid ]"; 274 sed 's/\x00/ /g;G' $p 2>/dev/null 275 done 276 } 277 __CT 278 fi 279 280 } 281 #| tr -s "\n\t " 282 #| /usr/bin/fold - -w$(($__WIDTH+3)) 49 # PATH 50 __T "EXPANDING PATH" 51 { 52 __M "ORIG PATH:$PATH" 53 PATH=${PATH:-/sbin:/bin:/usr/sbin:/usr/bin:.} 54 PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/pkg/bin:~/bin 55 PATH=$PATH:/usr/bin:/bin:/usr/pkg/bin:/usr/pkg/games:/usr/pkg/X11R6/bin:/usr/local/bin 56 PATH=$PATH:/usr/pkg/sbin:.:/bin:/usr/libexec/bin 57 PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/libexec:/usr/local/apache/bin 58 59 t=;p=; 60 for t in ${PATH//:/ }; 61 do 62 [[ -d "$t" ]] || continue; 63 echo ":${p:=}:" | grep -qc ":${t//\//\\/}:" &>/dev/null || p=$p:$t; 64 #[[ -d "$t" ]] && sed -n -e "/:${t//\//\\/}:/Q1" <<< ":${p:=}:" && p=$p:$t || continue; 65 done; 66 67 export PATH="${p/:/}"; 68 unset -v t p 69 __M "NEW PATH:$PATH" 70 } 71 __CT 72 73 74 75 # {{{2 USER INFO 76 __T "USER INFO" 77 { 78 __M "UMASK: `(umask 2>/dev/null)` ( `(umask -S 2>/dev/null)` )" 79 __H uname && __M "UNAME: `eval echo $(uname -a 2>/dev/null)`" 80 __H whoami && __M "WHOAMI: `(whoami 2>/dev/null)`" 81 __H id && __M "ID: `(id 2>/dev/null)`" 82 __H logname && __M "LOGNAME: `(logname 2>/dev/null)`" 83 __H groups && __M "GROUPS: `(groups 2>/dev/null)`" 84 } 85 __CT 86 87 88 # {{{2 ULIMIT 89 if __H ulimit; 90 then 91 __T "USER LIMITS" 92 { 93 ulimit -a 94 } 95 __CT 96 fi 97 98 99 # {{{2 PROCESSES 100 if __H ps; 101 then 102 __T "PROCESSES"; 103 { 104 ps -Hacl -F S -A f 2>/dev/null || ps -acl -F S -A f 2>/dev/null || ps -acl 2>/dev/null; 105 } 106 __CT 107 fi 108 109 110 # {{{2 LOGGED ON USERS 111 if __H who; 112 then 113 __T "LOGGED ON USERS" 114 { 115 (who -a 2>/dev/null) 116 } 117 118 __H lastlog && echo && __M "LASTLOG: " && (lastlog 2>/dev/null) 119 120 __CT 121 fi; 122 123 124 125 #{{{2 CGI 126 __T "CGI/1.0 test script report:" 127 { 128 __A SERVER REQUEST GET SERVER PATH REMOTE AUTH CONTENT HTTP TZ GATEWAY QUERY MO 129 } 130 __CT 131 132 133 134 # {{{2 PERL 135 if __H perl; 136 then 137 __T "PERL VARIABLES" 138 { 139 perl -e'foreach $v (sort(keys(%ENV))) {$vv = $ENV{$v};$vv =~ s|\n|\\n|g;$vv =~ s|"|\\"|g;print "${v}=\"${vv}\"\n"}' | cat -Tsv 2>/dev/null 140 } 141 __CT 142 fi 143 144 145 146 # {{{2 PASSWD 147 if [[ -r /etc/passwd ]]; 148 then 149 __T "/etc/passwd" 150 { 151 (cat /etc/passwd) 152 } 153 __CT 154 fi; 155 156 157 # {{{2 /dev 158 if [[ -d /dev ]] && __H ls; 159 then 160 __T "/dev Directory" 161 { 162 ( ls -vlaph /dev 2>/dev/null | column -c$__WIDTH -t) 163 } 164 __CT 165 166 fi; 167 168 169 170 171 # {{{2 PROC LIMITS AND CMDLINES 172 if [[ -d /proc ]]; 173 then 174 __T "CURRENT PROCESS LIMITS" 175 { 176 __M $$; 177 sed "s/\x00\x2d/ -/g;s/\([^=]\)=\([^\x00]*\)\x00/\1=\2\n/g" /proc/$$/cmdline 2>/dev/null; echo 178 cat /proc/$$/limits 2>/dev/null; echo; 179 180 __M $PPID; 181 sed "s/\x00\x2d/ -/g;s/\([^=]\)=\([^\x00]*\)\x00/\1=\2\n/g" /proc/$PPID/cmdline 2>/dev/null;echo 182 cat /proc/$PPID/limits 2>/dev/null; echo; 183 } 184 __CT 185 186 __T "CURRENT PROCESS CMDLINE" 187 { 188 for p in /proc/[0-9]* 189 do 190 d=${p/*\/}; 191 echo -en "[${d}]\t " && sed "s/\x00/ /g" /proc/${d}/cmdline;echo; 192 done | sed "/]\t [\t ]*$/d"; 193 } 194 __CT 195 fi 196 197 198 # {{{2 IP 199 __T "IP INFORMATION" 200 { 201 __H ip && __M "IP:" && (ip -o -f inet addr 2>/dev/null) | sed 's/^.*inet \([0-9.]*\).*$/\1/g'; 202 __H nmap && __M "NMAP:" && (nmap --iflist 2>/dev/null) | sed 2d; 203 __H ifconfig && __M "IFCONFIG:" && (ifconfig -a 2>/dev/null) | sed -n '/inet a/s/^.*addr:\([0-9.]*\).*$/\1/gp'; 204 [[ -f "${HOME:-/home/${LOGNAME:-`whoami`}}/.cpanel/datastore/_sbin_ifconfig_-a" ]] && __M "CPANEL CACHE:" && sed -e '/inet/!d; s/.*addr:\([0-9\.]*\).*/\1/g' "$HOME/.cpanel/datastore/_sbin_ifconfig_-a" | sort -u 205 206 } 207 __CT 208 209 210 # {{{2 ROUTE 211 __T "ROUTE / INTERFACE INFO" 212 { 213 __H route && __M "ROUTE" && (route -nv 2>/dev/null) 214 __H ip && ( __M "IP RULE" && ip rule && __M "IP ROUTE" && ip route && __M "IP ADDRESS" && ip address ) 2>/dev/null 215 __H ifconfig && (ifconfig -a 2>/dev/null) 216 } 217 __CT 218 219 220 221 # {{{2 HIDDEN VARS 222 __T "HIDDEN VARIABLES" 223 { 224 __A {a..z} {A..Z} _{0..9} _{A..Z} _{a..z} | cat -Tsv 2>/dev/null 225 } 226 __CT 227 228 229 230 # {{{2 ENV AND EXPORT 231 __T "ENV AND EXPORT" 232 { 233 __H env && command env | cat -Tsv 2>/dev/null && __P '-' 234 builtin export | cat -Tsv 2>/dev/null 235 } 236 __CT 237 238 239 # {{{2 DECLARE 240 __T "DECLARE INFO" 241 { 242 for i in "r" "i" "a" "x" "t" "-"; 243 do 244 builtin eval declare -$i && echo; 245 done | sed 's/^declare //' | cat -Tsv 2>/dev/null 246 } 247 __CT 248 249 250 251 252 # {{{2 SHELL OPTIONS 253 __T "SHELL OPTIONS" 254 { 255 __A SHELLOPTS BASHOPTS 256 echo -e "\$-: $-" 257 __P '-' && builtin shopt -s -p 258 __P '-' && builtin shopt -u -p 259 } 260 __CT 261 262 263 264 } 265 283 266 284 267 exit $?
Note: See TracChangeset
for help on using the changeset viewer.