WordPress.org

Plugin Directory

Changeset 871129


Ignore:
Timestamp:
03/07/14 09:41:46 (13 months ago)
Author:
askapache
Message:

Lots of tweaks to the server-env.cgi script

File:
1 edited

Legend:

Unmodified
Added
Removed
  • askapache-debug-viewer/trunk/f/f/server-env.cgi

    r653137 r871129  
    11#!/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 
    219 
    2210 
     
    2513# FUNCTIONS 
    2614################################################################################################################ 
    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 
     15function __A () { local __a= __i= __z=; for __a; do __z=\${!${__a}*}; for __i in `eval echo "${__z}"`; do echo -e "${__i:-}: ${!__i:-}"; done; done; } 
     16function __S () { local L= IFS=';';while read -r L;do builtin printf "${#L}@%s\n" "$L";done|sort -n|sed -u 's/^[^@]*@//'; } 
     17function __P () { local l=`builtin printf %${2:-$__WIDTH}s` && echo -e "${l// /${1:-=}}"; } 
     18function __CT () { echo -e "\n"; } 
     19function __TT () { echo -e "\n\n$*"; } 
     20function __T () { echo -e "\n\n+`__P -`+\n| $*\n+`__P '='`+"; } 
     21function __M () { echo -e " >>> $*"; } 
     22function __H () { command builtin type $1 &>/dev/null && local a="yes" || return 1; } 
     23 
     24 
     25 
     26 
     27# MAIN EXECUTION 
    7428################################################################################################################# 
     29 
     30echo -e "Content-Type: text/plain\r\n" 
     31 
     32 
    7533shopt -s dotglob nocaseglob extglob 
    7634 
    7735# -C If set, disallow existing regular files to be overwritte 
    7836# -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 
    8138# +H disable History 
    8239set -C +f +H -B 
    8340 
    84 # make sure we dont create any files 
     41# make sure we cant create any files 
    8542umask 0177 
    8643 
    8744# 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 ################################################################################################################# 
     45exec 2>&1 #/dev/null 
     46 
    9947{ 
    10048 
    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 
    283266 
    284267exit $? 
Note: See TracChangeset for help on using the changeset viewer.