]> git.saurik.com Git - apple/configd.git/blobdiff - get-mobility-info
configd-596.12.tar.gz
[apple/configd.git] / get-mobility-info
index adc3d6a3805d6194b9f41ed1207364fba9d43080..a0b66a9950cabd90ee15ac8fba2b823e43841a95 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# Copyright (c) 2004-2011 Apple Inc.
+# Copyright (c) 2004-2013 Apple Inc.
 #
 # get-mobility-info
 #
@@ -13,12 +13,20 @@ if [ ${EUID} -ne 0 ]; then
        PRIV="sudo"
 fi
 
+if [ -x /usr/bin/tail ]; then
+       TAIL_2000="/usr/bin/tail -n 2000"
+       TAIL_25000="/usr/bin/tail -n 25000"
+else
+       TAIL_2000="/bin/cat"
+       TAIL_25000="/bin/cat"
+fi
+
 OUT="mobility-info-`date +'%m.%d.%Y.%H%M%S'`"
 OUTDIR="/var/tmp"
 if [ -d ~/Desktop ]; then
        OUTDIR=~/Desktop
 elif [ "`readlink /tmp`" = "private/var/tmp" ]; then
-       OUTDIR=/Library/Logs/CrashReporter/SystemConfiguration
+       OUTDIR=/Library/Logs/CrashReporter
        mkdir -p ${OUTDIR}
 fi
 
@@ -46,35 +54,67 @@ fi
 
 cd "${WORKDIR}"
 
+echo ""
+echo "Please wait, collecting information and statistics"
+echo ""
+
+#
+# Execute network reachability/DNS commands early as "mDNSResponder" will block while
+# logging its "state" info.
+#
+scutil -d -v -r www.apple.com "" no-server             > reachability-info     2>&1
+if [ -x /usr/bin/dig -a -f /etc/resolv.conf ]; then
+       /usr/bin/dig -t any -c any www.apple.com        > dig-results           2>/dev/null
+fi
+
+#
+# Signal "networkd" and "mDNSResponder" to log their "state" info. This logging will
+# continue while we execute a few other commands and should be complete by the time
+# we collect the log content.
+#
+if [ -x /usr/bin/killall ]; then
+       ${PRIV} /usr/bin/killall -INFO networkd
+       ${PRIV} /usr/bin/killall -INFO mDNSResponder
+       sleep 1
+fi
+
 #
 # processes
 #
-ps axlww                                               > ps                    2>&1
+if [ -x /bin/ps ]; then
+       /bin/ps axlww                                   > ps                    2>&1
+fi
 
 #
 # network interface configuration
 #
-ifconfig -a -L -b -m -r -v                             > ifconfig              2>&1
-if [ $? -ne 0 ]; then
-       ifconfig -a                                     > ifconfig              2>&1
+if [ -x /sbin/ifconfig ]; then
+       /sbin/ifconfig -a -L -b -m -r -v -v             > ifconfig              2>&1
+       if [ $? -ne 0 ]; then
+               /sbin/ifconfig -a                       > ifconfig              2>&1
+       fi
 fi
 
 #
 # network route configuration
 #
-netstat -n -r -a -l                                    > netstat               2>&1
+if [ -x /usr/sbin/netstat ]; then
+       /usr/sbin/netstat -n -r -a -l                   > netstat               2>&1
+fi
 
 #
 # DHCP configuration
 #
-for if in `ifconfig -l`
-do
-       case ${if} in
-       lo* )   ;;
-       en* )   ipconfig getpacket ${if}                > ipconfig-${if}        2>&1
-               ;;
-       esac
-done
+if [ -x /sbin/ifconfig ]; then
+       for if in `/sbin/ifconfig -l`
+       do
+               case ${if} in
+               lo* )   ;;
+               en* )   ipconfig getpacket ${if}        > ipconfig-${if}        2>&1
+                       ;;
+               esac
+       done
+fi
 
 #
 # AirPort info
@@ -84,6 +124,22 @@ if [ -x /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport
                                                        > airport               2>&1
 fi
 
+#
+# collect wifi dump
+#
+if [ -x /usr/bin/wdutil ]; then
+       ${PRIV} /usr/bin/wdutil dump
+       mkdir -p "wifi_dump"
+       /bin/ls -1 /private/tmp/wifi-*                                          2>/dev/null     \
+       | while read log
+       do
+               if [ -f "${log}" ]; then
+                       b="`basename ${log}`"
+                       ${PRIV} cat "${log}"            > "wifi_dump/${b}"      2>&1
+               fi
+       done
+fi
+
 #
 # OS info
 #
@@ -99,18 +155,34 @@ fi
 #
 # IOKit info
 #
-ioreg -i -l -w 0                                       >  ioreg                2>&1
-ioreg -i -l -p IODeviceTree -w 0                       >> ioreg                2>&1
+if [ -x /usr/sbin/ioreg ]; then
+       /usr/sbin/ioreg -i -l -w 0                      >  ioreg                2>&1
+       /usr/sbin/ioreg -i -l -p IODeviceTree -w 0      >> ioreg                2>&1
+fi
+
+#
+# Power Management info
+#
+if [ -x /usr/bin/pmset ]; then
+       echo "#"                                                        >  pmset
+       echo "# pmset -g everything"                                    >> pmset
+       echo "#"                                                        >> pmset
+       /usr/bin/pmset -g everything 2>/dev/null  | ${TAIL_25000}       >> pmset
+fi
 
 #
 # Host name
 #
-hostname                                               > hostname              2>&1
+if [ -x /bin/hostname ]; then
+       /bin/hostname                                   > hostname              2>&1
+fi
 
 #
 # Host configuration
 #
-hostinfo                                               > hostinfo              2>&1
+if [ -x /usr/bin/hostinfo ]; then
+       /usr/bin/hostinfo                               > hostinfo              2>&1
+fi
 if [ -e /etc/hostconfig ]; then
        cat /etc/hostconfig                             > etc.hostconfig        2>&1
 fi
@@ -125,11 +197,32 @@ fi
 if [ -e /var/run/resolv.conf ]; then
        cat /var/run/resolv.conf                        > var.run.resolv.conf   2>&1
 fi
+if [ -e /etc/resolver ]; then
+       tar -c -H /etc/resolver                         > etc.resolver.tar      2>/dev/null
+fi
 
 #
 # Proxy configuration
 #
-scutil --proxy                                         > proxy-configuration   2>&1
+scutil -d -v --proxy                                   > proxy-configuration   2>&1
+
+#
+# Network information
+#
+if [ -x /sbin/ifconfig ]; then
+       echo "#"                                        >  network-information
+       echo "# scutil --nwi"                           >> network-information
+       echo "#"                                        >> network-information
+       scutil --nwi                                    >> network-information  2>&1
+       for if in `/sbin/ifconfig -l`
+       do
+               echo ""                                 >> network-information
+               echo "#"                                >> network-information
+               echo "# scutil --nwi ${if}"             >> network-information
+               echo "#"                                >> network-information
+               scutil --nwi ${if}                      >> network-information  2>&1
+       done
+fi
 
 #
 # System / network preferences
@@ -139,7 +232,6 @@ for f in                                                                            \
        /Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist        \
        /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist    \
        /Library/Preferences/SystemConfiguration/com.apple.nat.plist                    \
-       /Library/Preferences/SystemConfiguration/com.apple.network.identification.plist \
        /Library/Preferences/SystemConfiguration/com.apple.smb.server.plist             \
        /Library/Preferences/SystemConfiguration/com.apple.wifi.plist                   \
        /Library/Preferences/SystemConfiguration/preferences.plist                      \
@@ -154,25 +246,42 @@ do
        fi
 done
 
+#
+# System / network preferences (from other volumes)
+#
+mount                                                                                  \
+| awk 'BEGIN { FS= "[/ \t]+" } /^\/dev\/disk.* on \/Volumes\// { print $6 }'           \
+| while read volume
+do
+       V_PATH="/Volumes/${volume}"
+       for f in                                                                        \
+               /Library/Preferences/SystemConfiguration/Networkinterfaces.plist        \
+               /Library/Preferences/SystemConfiguration/preferences.plist              \
+
+       do
+               if [ -f "${V_PATH}/${f}" ]; then
+                       mkdir -p "OtherPreferences/${volume}"
+                       b="`basename ${f}`"
+                       cat "${V_PATH}/${f}"            > "OtherPreferences/${volume}/${b}"     2>&1
+               fi
+       done
+done
+
 #
 # InternetSharing
 #
 if   [ -e /etc/bootpd.plist ]; then
        cat /etc/bootpd.plist                                                   > bootpd.plist                  2>&1
-       cat /etc/com.apple.named.proxy.conf                                     > com.apple.named.proxy.conf    2>&1
+       cat /etc/com.apple.named.proxy.conf                                     > com.apple.named.proxy.conf    2>/dev/null
 elif [ -e /Library/Preferences/SystemConfiguration/bootpd.plist ]; then
        cat /Library/Preferences/SystemConfiguration/bootpd.plist               > bootpd.plist                  2>&1
-       cat /Library/Preferences/SystemConfiguration/com.apple.named.proxy.conf > com.apple.named.proxy.conf    2>&1
+       cat /Library/Preferences/SystemConfiguration/com.apple.named.proxy.conf > com.apple.named.proxy.conf    2>/dev/null
 fi
 
 #
 # configd's cache
 #
-${PRIV} scutil -p <<_END_OF_INPUT
-open
-snapshot
-quit
-_END_OF_INPUT
+${PRIV} scutil -p --snapshot
 if [ -f /var/tmp/configd-store.plist ]; then
        cat /var/tmp/configd-store.plist                > configd-store.plist   2>&1
 fi
@@ -185,28 +294,8 @@ fi
 if [ -f /var/tmp/configd-state ]; then
        cat /var/tmp/configd-state                      > configd-state         2>&1
 fi
-
-#
-# check configd's executable
-#
-if [ -x /usr/bin/codesign ]; then
-       echo  "#"                                                                       >> configd-state
-       echo  "# codesign --verbose --display --entitlements - /usr/libexec/configd"    >> configd-state
-       echo  "#"                                                                       >> configd-state
-       /usr/bin/codesign --verbose --display --entitlements - /usr/libexec/configd     >> configd-state 2>&1
-
-       echo  "#"                                                                       >> configd-state
-       echo  "# codesign --verbose --verify /usr/libexec/configd"                      >> configd-state
-       echo  "#"                                                                       >> configd-state
-       /usr/bin/codesign --verbose --verify /usr/libexec/configd                       >> configd-state 2>&1
-fi
-
-#
-# network reachability
-#
-scutil -d -v -r www.apple.com                          > reachability-info     2>&1
-if [ -x /usr/bin/dig -a -f /etc/resolv.conf ]; then
-       /usr/bin/dig -t any -c any www.apple.com        > dig-results           2>/dev/null
+if [ -f /var/tmp/configd-reachability ]; then
+       cat /var/tmp/configd-reachability               > configd-reachability          2>&1
 fi
 
 #
@@ -214,177 +303,149 @@ fi
 #
 mount                                                  > mounted-filesystems   2>&1
 
-#
-# mDNSResponder info
-#
-if [ -x /usr/bin/killall ]; then
-       ${PRIV} killall -INFO mDNSResponder
-
-       # and wait a short amount of time for mDNSResponder
-       # to actually log the requested information
-       sleep 15
-fi
-
-#
-# awacsd info
-#
-if [ -x /usr/sbin/awacsd -a -x /usr/bin/killall ]; then
-       ${PRIV} killall -INFO awacsd                                    2>/dev/null
-
-       # and wait a short amount of time for awacsd
-       # to actually log the requested information
-       sleep 1
-fi
-
-#
-# system log, kernel.log, early boot log messages
-#
-if [ -x /usr/bin/syslog ]; then
-       # save the recent activity
-       ${PRIV} syslog | tail -n 25000                                  > syslog
-
-       # save just the "kernel" activity (in case some of the
-       # interesting/relevant message are before the messages
-       # captured above.
-       ${PRIV} syslog -k Facility kern | tail -n 25000                 > kernel
-
-       if [ -d /var/log/DiagnosticMessages ]; then
-               # save any MessageTracer activity
-               ${PRIV} syslog  -d /var/log/DiagnosticMessages  \
-                               -F raw                          \
-                               -T local                        \
-                       | tail -n 25000                                 > DiagnosticMessages
-       fi
-else
-       if [ -f /var/log/system.log ]; then
-               ${PRIV} tail -n 25000 /var/log/system.log               > system.log
-       fi
-       if [ -f /var/log/kernel.log ]; then
-               ${PRIV} tail -n 25000 /var/log/kernel.log               > kernel.log
-       fi
-fi
-${PRIV} dmesg                                                          > dmesg
-
-#
-# IPConfiguration log
-#
-if [ -f /var/log/com.apple.IPConfiguration.bootp ]; then
-       ${PRIV} tail -n 2000 /var/log/com.apple.IPConfiguration.bootp   \
-                                                       > com.apple.IPConfiguration.bootp
-fi
-
-#
-# ppp log file(s)
-#
-scutil <<_END_OF_INPUT                         \
-| awk -F' *: *'                                        \
-    '                                          \
-     /Logfile : / {                            \
-       if (index($2, "/") == 1) { print $2 }   \
-       else { print "/var/log/ppp/" $2 }       \
-     }                                         \
-     END {                                     \
-       print "/tmp/pppotcp.log"                        \
-     }                                         \
-    '                                          \
-| sort -u                                      \
-| while read logFile
-open
-show Setup:/Network/Service/[^/]+/PPP pattern
-quit
-_END_OF_INPUT
-do
-       if [ -f "${logFile}" ]; then
-               b="`basename ${logFile}`"
-               cat "${logFile}"                        > "${b}"                2>&1
-       fi
-done
-
-#
-# application firewall log
-#
-if [ -f /var/log/appfirewall.log ]; then
-       ${PRIV} tail -n 2000 /var/log/appfirewall.log   > appfirewall.log
-fi
+${PRIV} cat /etc/hosts                                         > etc.hosts             2>/dev/null
 
 #
 # kernel extensions statistic
 #
 if   [ -x /usr/sbin/kextstat ]; then
-       kextstat                                        > kextstat              2>&1
+       /usr/sbin/kextstat                              > kextstat              2>&1
 elif [ -x /usr/sbin/kmodstat ]; then
-       kmodstat                                        > kmodstat              2>&1
+       /usr/sbin/kmodstat                              > kmodstat              2>&1
 fi
 
 #
 # network statistics
 #
-echo "#"                                               >  network-statistics
-echo "# arp -n -a"                                     >> network-statistics
-echo "#"                                               >> network-statistics
-arp -n -a                                              >> network-statistics   2>&1
-
-echo "#"                                               >> network-statistics
-echo "# netstat -n -a -A"                              >> network-statistics
-echo "#"                                               >> network-statistics
-netstat -n -a -A                                       >> network-statistics   2>&1
-
-echo "#"                                               >> network-statistics
-echo "# netstat -s"                                    >> network-statistics
-echo "#"                                               >> network-statistics
-netstat -s                                             >> network-statistics   2>&1
-
-echo "#"                                               >> network-statistics
-echo "# netstat -mmm"                                  >> network-statistics
-echo "#"                                               >> network-statistics
-netstat -mmm                                           >> network-statistics   2>&1
-
-echo "#"                                               >> network-statistics
-echo "# netstat -i -n -d"                              >> network-statistics
-echo "#"                                               >> network-statistics
-netstat -i -n -d                                       >> network-statistics   2>&1
+echo -n ""                                                     >  network-statistics
+
+if   [ -x /usr/sbin/arp ]; then
+       echo "#"                                                >> network-statistics
+       echo "# arp -n -a"                                      >> network-statistics
+       echo "#"                                                >> network-statistics
+       /usr/sbin/arp -n -a                                     >> network-statistics   2>&1
+fi
+
+if [ -x /usr/sbin/netstat ]; then
+       echo "#"                                                >> network-statistics
+       echo "# netstat -n -a -A"                               >> network-statistics
+       echo "#"                                                >> network-statistics
+       /usr/sbin/netstat -n -a -A                              >> network-statistics   2>&1
+
+       echo "#"                                                >> network-statistics
+       echo "# netstat -s"                                     >> network-statistics
+       echo "#"                                                >> network-statistics
+       /usr/sbin/netstat -s                                    >> network-statistics   2>&1
+
+       echo "#"                                                >> network-statistics
+       echo "# netstat -mmm"                                   >> network-statistics
+       echo "#"                                                >> network-statistics
+       /usr/sbin/netstat -mmm                                  >> network-statistics   2>&1
+
+       echo "#"                                                >> network-statistics
+       echo "# netstat -i -n -d"                               >> network-statistics
+       echo "#"                                                >> network-statistics
+       /usr/sbin/netstat -i -n -d                              >> network-statistics   2>&1
+
+       echo "#"                                                >> network-statistics
+       echo "# netstat -g -n -s"                               >> network-statistics
+       echo "#"                                                >> network-statistics
+       /usr/sbin/netstat -g -n -s                              >> network-statistics   2>&1
+
+       echo "#"                                                >> network-statistics
+       echo "# netstat -i -x R"                                >> network-statistics
+       echo "#"                                                >> network-statistics
+       /usr/sbin/netstat -i -x R                               >> network-statistics   2>&1
+       echo "#"                                                >> network-statistics
+
+       echo "# netstat -a -n -p mptcp"                         >> network-statistics
+       echo "#"                                                >> network-statistics
+       /usr/sbin/netstat -a -n -p mptcp                        >> network-statistics   2>/dev/null
+
+       echo "#"                                                >> network-statistics
+       echo "# netstat -s -p mptcp"                            >> network-statistics
+       echo "#"                                                >> network-statistics
+       /usr/sbin/netstat -s -p mptcp                           >> network-statistics   2>/dev/null
+
+       if [ -x /sbin/ifconfig ]; then
+               for if in `/sbin/ifconfig -l`
+               do
+                       `/sbin/ifconfig -v ${if} | grep -q TXSTART`
+                       if [ $? -eq 0 ]; then
+                               echo "#"                        >> network-statistics
+                               echo "# netstat -qq -I ${if}"   >> network-statistics
+                               echo "#"                        >> network-statistics
+                               /usr/sbin/netstat -qq -I ${if}  >> network-statistics   2>&1
+                       fi
+                       `/sbin/ifconfig -v ${if} | grep -q RXPOLL`
+                       if [ $? -eq 0 ]; then
+                               echo "#"                        >> network-statistics
+                               echo "# netstat -Q -I ${if}"    >> network-statistics
+                               echo "#"                        >> network-statistics
+                               /usr/sbin/netstat -Q -I ${if}   >> network-statistics   2>&1
+                       fi
+               done
+       fi
+fi
 
 if [ -x /usr/sbin/ndp ]; then
        echo "#"                                        >> network-statistics
        echo "# ndp -n -a"                              >> network-statistics
        echo "#"                                        >> network-statistics
-       ndp -n -a                                       >> network-statistics   2>&1
+       /usr/sbin/ndp -n -a                             >> network-statistics   2>&1
 
        echo "#"                                        >> network-statistics
        echo "# ndp -n -p"                              >> network-statistics
        echo "#"                                        >> network-statistics
-       ndp -n -p                                       >> network-statistics   2>&1
+       /usr/sbin/ndp -n -p                             >> network-statistics   2>&1
 
        echo "#"                                        >> network-statistics
        echo "# ndp -n -r"                              >> network-statistics
        echo "#"                                        >> network-statistics
-       ndp -n -r                                       >> network-statistics   2>&1
+       /usr/sbin/ndp -n -r                             >> network-statistics   2>&1
+
+       if [ -x /sbin/ifconfig ]; then
+               for if in `/sbin/ifconfig -l`
+               do
+                       echo "#"                        >> network-statistics
+                       echo "# ndp -i ${if}"           >> network-statistics
+                       echo "#"                        >> network-statistics
+                       /usr/sbin/ndp -i ${if}          >> network-statistics   2>&1
+               done
+       fi
 fi
 
 if [ -x /sbin/ipfw ]; then
        echo "#"                                        >> network-statistics
        echo "# ipfw -at show"                          >> network-statistics
        echo "#"                                        >> network-statistics
-       ${PRIV} ipfw -at show                           >> network-statistics   2>&1
+       ${PRIV} /sbin/ipfw -at show                     >> network-statistics   2>&1
+fi
+
+if [ -x /sbin/ip6fw ]; then
+       echo "#"                                        >> network-statistics
+       echo "# ip6fw -at show"                         >> network-statistics
+       echo "#"                                        >> network-statistics
+       ${PRIV} /sbin/ip6fw -at show                    >> network-statistics   2>&1
 fi
 
 if [ -x /sbin/pfctl ]; then
        echo "#"                                        >  pf
        echo "# pfctl -s all"                           >> pf
        echo "#"                                        >> pf
-       ${PRIV} pfctl -s all                            >> pf                   2>&1
+       ${PRIV} /sbin/pfctl -s all                      >> pf                   2>&1
        echo "=============================="           >> pf
        echo "#"                                        >> pf
        echo "# pfctl -s References"                    >> pf
        echo "#"                                        >> pf
-       ${PRIV} pfctl -s References                     >> pf                   2>&1
-       for ANCHOR in `pfctl -s Anchors 2>/dev/null`
+       ${PRIV} /sbin/pfctl -s References               >> pf                   2>&1
+       for ANCHOR in `${PRIV} pfctl -s Anchors -v 2>/dev/null`
        do
                echo "=============================="   >> pf
                echo "#"                                >> pf
                echo "# pfctl -a ${ANCHOR} -s all"      >> pf
                echo "#"                                >> pf
-               ${PRIV} pfctl -a ${ANCHOR} -s all       >> pf                   2>&1
+               ${PRIV} /sbin/pfctl -a ${ANCHOR} -s all >> pf                   2>&1
        done
 fi
 
@@ -392,7 +453,7 @@ if [ -x /usr/sbin/lsof ]; then
        echo "#"                                        >> network-statistics
        echo "# lsof -i -U -n -P"                       >> network-statistics
        echo "#"                                        >> network-statistics
-       ${PRIV} lsof -i -U -n -P                        >> network-statistics   2>&1
+       ${PRIV} /usr/sbin/lsof -i -U -n -P              >> network-statistics   2>&1
 fi
 
 #
@@ -402,399 +463,390 @@ if [ -x /usr/bin/odutil ]; then
        echo "#"                                        >  od-info
        echo "# odutil show all"                        >> od-info
        echo "#"                                        >> od-info
-       ${PRIV} odutil show all                         >> od-info              2>&1
+       ${PRIV} /usr/bin/odutil show all                >> od-info              2>&1
 elif [ -x /usr/bin/dscacheutil ]; then
        echo "#"                                        >  ds-info
        echo "# dscacheutil -configuration"             >> ds-info
        echo "#"                                        >> ds-info
-       dscacheutil -configuration                      >> ds-info              2>&1
+       /usr/bin/dscacheutil -configuration             >> ds-info              2>&1
 
        echo "#"                                        >> ds-info
        echo "# dscacheutil -statistics"                >> ds-info
        echo "#"                                        >> ds-info
-       dscacheutil -statistics                         >> ds-info              2>&1
+       /usr/bin/dscacheutil -statistics                >> ds-info              2>&1
 
        echo "#"                                        >> ds-info
        echo "# dscacheutil -cachedump -entries"        >> ds-info
        echo "#"                                        >> ds-info
-       dscacheutil -cachedump -entries                 >> ds-info              2>&1
+       /usr/bin/dscacheutil -cachedump -entries        >> ds-info              2>&1
 fi
 
 #
 # IPsec configuration
 #
-echo "#"                                               >  ipsec
-echo "# setkey -D"                                     >> ipsec
-echo "#"                                               >> ipsec
-${PRIV} setkey -D                                      \
-| perl -nle '
-       if (/^(\s+[AE]:\s+\S+\s+)"?(.*)"?\s*$/) {
-               chop($sha1=`echo "$2" | openssl sha1`);
-               printf "%s[SHA-1:%s]\n", $1, $sha1;
-       } else {
-               printf "%s\n", $_;
-       }
-'                                                      >> ipsec
-
-echo ""                                                        >> ipsec
-echo "#"                                               >> ipsec
-echo "# setkey -Pp -D"                                 >> ipsec
-echo "#"                                               >> ipsec
-${PRIV} setkey -Pp -D                                  >> ipsec
-
-for CF in /var/run/racoon/*.conf
-do
-       if [ ! -r "${CF}" ]; then
-               continue
-       fi
-
-       echo ""                                         >> ipsec
-       echo "#"                                        >> ipsec
-       echo "# ${CF}"                                  >> ipsec
-       echo "#"                                        >> ipsec
-       ${PRIV} cat ${CF}                               \
-       | perl -nle '
-               if (/^(\s+shared_secret\s+use\s+)"?([^\s;"]+)"?(.*)/) {
-                       chop($sha1=`echo "$2" | openssl sha1`);
-                       printf "%s[SHA-1:%s]%s\n", $1, $sha1, $3;
+if [ -x /usr/sbin/setkey -a -x /usr/bin/perl ]; then
+       echo "#"                                                >  ipsec
+       echo "# setkey -D"                                      >> ipsec
+       echo "#"                                                >> ipsec
+       ${PRIV} /usr/sbin/setkey -D                             \
+       | /usr/bin/perl -M'Digest::MD5 qw(md5_hex)' -l -n -e '
+               if (/^(\s+[AE]:\s+\S+\s+)"?(.*)"?\s*$/) {
+                       printf "%s[MD5:%s]%s\n", $1, md5_hex($2 . "\n"), $3;
                } else {
                        printf "%s\n", $_;
                }
-       '                                               >> ipsec
-done
+       '                                                       >> ipsec
+
+       echo ""                                                 >> ipsec
+       echo "#"                                                >> ipsec
+       echo "# setkey -Pp -D"                                  >> ipsec
+       echo "#"                                                >> ipsec
+       ${PRIV} /usr/sbin/setkey -Pp -D                         >> ipsec
+
+       for CF in /var/run/racoon/*.conf
+       do
+               if [ ! -r "${CF}" ]; then
+                       continue
+               fi
+
+               echo ""                                         >> ipsec
+               echo "#"                                        >> ipsec
+               echo "# ${CF}"                                  >> ipsec
+               echo "#"                                        >> ipsec
+               ${PRIV} cat ${CF}                               \
+               | /usr/bin/perl -M'Digest::MD5 qw(md5_hex)' -l -n -e '
+                       if (/^(\s+shared_secret\s+use\s+)"?([^\s;"]+)"?(.*)/) {
+                               printf "%s[MD5:%s]%s\n", $1, md5_hex($2 . "\n"), $3;
+                       } else {
+                               printf "%s\n", $_;
+                       }
+               '                                               >> ipsec
+       done
+fi
 
 #
 # Kerberos configuration
 #
 if [ -x /usr/bin/klist ]; then
        echo "#"                                        >  kerberos
-       echo "# klist -e -c -A -f -a -n"                >> kerberos
+       echo "# klist --verbose --all-content"          >> kerberos
        echo "#"                                        >> kerberos
-       ${PRIV} klist -e -c -A -f -a -n                 >> kerberos     2>&1
+       klist --verbose --all-content                   >> kerberos     2>&1
 
        echo "#"                                        >> kerberos
-       echo "# klist -e -k -t -K"                      >> kerberos
+       echo "# ktutil list"                            >> kerberos
        echo "#"                                        >> kerberos
-       ${PRIV} klist -e -k -t -K                       >> kerberos     2>&1
+       ${PRIV} /usr/sbin/ktutil --verbose list         >> kerberos     2>&1
+
+       echo "#"                                        >> kerberos
+       echo "# gsstool list --verbose"                 >> kerberos
+       echo "#"                                        >> kerberos
+       /System/Library/PrivateFrameworks/Heimdal.framework/Helpers/gsstool list --verbose >> kerberos  2>&1
 fi
 
 #
-# BTMM configuration
+# system profiler
 #
+if [ -x /usr/sbin/system_profiler ]; then
+       system_profiler -xml    SPEthernetDataType      \
+                               SPFibreChannelDataType  \
+                               SPFireWireDataType      \
+                               SPFirewallDataType      \
+                               SPModemDataType         \
+                               SPNetworkDataType       \
+                               SPThunderboltDataType   \
+                               SPWWANDataType          \
+                               SPAirPortDataType       > system_profiler.spx   2>/dev/null
+fi
 
-BTMM_CLEANUP()
-{
-       rm -f .btmmfifo .btmminfo .digsync
-}
+#
+# system usage statistics
+#
+echo -n ""                                             > system-statistics
 
-BTMM_SETUP()
-{
-       BTMM_CLEANUP
-       mkfifo .btmmfifo
+if [ -x /usr/bin/uptime ]; then
+       echo "#"                                        >> system-statistics
+       echo "# uptime"                                 >> system-statistics
+       echo "#"                                        >> system-statistics
+       /usr/bin/uptime                                 >> system-statistics    2>&1
+fi
 
-       BTMMPORT=40000
-       while nc -6z ::1 "${PORT}"                      > /dev/null     2>&1
-       do
-               BTMMPORT=$((PORT + 1))
-       done
-}
+if [ -x /usr/sbin/sysctl ]; then
+       echo "#"                                        >> system-statistics
+       echo "# sysctl -a"                              >> system-statistics
+       echo "#"                                        >> system-statistics
+       /usr/sbin/sysctl -a                             >> system-statistics    2>&1
+fi
 
-BTMM_CHECKMACDOTCOM()
+if [ -x /usr/bin/zprint ]; then
+       echo "#"                                        >> system-statistics
+       echo "# zprint"                                 >> system-statistics
+       echo "#"                                        >> system-statistics
+       ${PRIV} /usr/bin/zprint                         >> system-statistics    2>&1
+fi
+
+#
+# collect executable and plugin info
+#
+report_binary_info()
 {
-       TAIL=`echo "${1}" | cut -d. -f2-`
-       if [ "${TAIL}" = "members.mac.com" ]; then
-               return 0
-       fi
+    if [ ! -f ${1} ]; then
+       return
+    fi
+
+    VERSION=`what ${1}`
+    echo "${VERSION}"                                  >> versions     2>&1
+
+    SUM=`sum ${1}`
+    echo "\tsum: ${SUM}"                               >> versions     2>&1
 
-       return 1
+    LSINFO=`ls -lu ${1}`
+    echo "\tadditional info: ${LSINFO}"                        >> versions     2>&1
+
+    echo ""                                            >> versions     2>&1
 }
 
-# get DNS info
-# params: QUERYNAME QUERYTYPE
-BTMM_DIG()
+get_binary_info()
 {
-       rm -f .digsync
-       
-       nc -6 -l "${BTMMPORT}" < .btmmfifo                      \
-       | openssl s_client      -connect "${HOSTPORT}" -quiet   > .btmmfifo     2>.digsync &
-       
-       N_RETRY=0
-       while [ $N_RETRY -lt 50 -a ! -s .digsync ]
-       do
-               N_RETRY=$((N_RETRY + 1))
-               sleep 0.1
-       done
-       
-       dig @::1        -p "${BTMMPORT}"                \
-                       -y "${TSIG}"                    \
-                       +short                          \
-                       +tcp                            \
-                       "${1}" "${2}"                   2>/dev/null
-       
-       wait %1
+    for BIN in                                                                         \
+       /usr/libexec/bootpd                                                             \
+       /usr/libexec/configd                                                            \
+       /usr/sbin/mDNSResponder                                                         \
+       /usr/sbin/awacsd                                                                \
+       /usr/sbin/pppd                                                                  \
+       /usr/sbin/racoon                                                                \
+       /usr/libexec/misd                                                               \
+       /usr/libexec/InternetSharing                                                    \
+       /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration    \
+
+    do
+       report_binary_info "${BIN}"
+    done
+
+    if [ -x /usr/bin/xcodebuild ]; then
+           /usr/bin/xcodebuild -showsdks                       \
+           | grep iphone                                       \
+           | awk '{print $NF}'                                 \
+           | while read IOS
+           do
+               SDKPATH="`xcrun --sdk $IOS --show-sdk-path`"
+               for BIN in                                                                              \
+                   /usr/libexec/configd_sim                                                            \
+                   /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration        \
+
+               do
+                   report_binary_info "${SDKPATH}${BIN}"
+               done
+           done
+    fi
 }
 
-# get the unique identifier used to lookup the keychain item for a zone
-# params: ZONE
-BTMM_UNIQUEIDFROMZONE()
+get_plugins_info()
 {
-       BTMM_CHECKMACDOTCOM "${1}"
-       if [ $? -eq 0 ]; then
-               echo "dns:${1}"
-       else
-               echo "btmmdns:${1}"
+    num=0
+    cd ${ROOT}/System/Library/SystemConfiguration
+    for PLUGIN in *.bundle
+    do
+       plugins[$num]=$PLUGIN
+       num=$(( $num + 1 ))
+    done
+
+    cd "${WORKDIR}"
+
+    for PLUGIN in "${plugins[@]}"
+    do
+       PLUGIN_DIR="${ROOT}/System/Library/SystemConfiguration/${PLUGIN}"
+       PLUGIN_INF=${PLUGIN_DIR}/Contents/Info.plist
+       if [ ! -f ${PLUGIN_INF} ]; then
+           PLUGIN_INF=${PLUGIN_DIR}/Info.plist
+           if [ ! -f ${PLUGIN_INF} ]; then
+               echo "${PLUGIN_INF}: No Info.plist"             >> versions             2>&1
+           fi
        fi
-}
 
-# get hostname, port, TSIG name and TSIG data from keychain 
-# params: UNIQUEID
-BTMM_GETINFO()
-{
-       ${PRIV} security find-generic-password          \
-               -s "${1}"                               \
-               -g /Library/Keychains/System.keychain   > .btmminfo     2>/dev/null
-       ${PRIV} security find-generic-password          \
-               -s "${1}"                               \
-               -g /Library/Keychains/System.keychain   \
-               2>&1                                    \
-       | sed -n 's/^password: \"\(.*\)\"$/\1/p'
-}
+       echo "${PLUGIN}"                                        >> versions             2>&1
 
-# params: ZONE
-BTMM_URLISH()
-{
-       BTMM_CHECKMACDOTCOM "${1}"
+       ENABLED="Enabled"
+       BOOL=`scutil --get ${PLUGIN_INF} / Enabled                                      2>/dev/null`
        if [ $? -eq 0 ]; then
-               echo "pm-members.mac.com.:443"
-       else
-               cat .btmminfo | sed -n 's/.*0x00000007 <blob>=\"\(.*\)\"/\1/p'
+           if [ ${BOOL} = "TRUE" ]; then
+               ENABLED="Enabled*"
+           else
+               ENABLED="Disabled"
+           fi
        fi
-}
+       echo "\t${ENABLED}"                                     >> versions             2>&1
 
-BTMM_RELAYINFO()
-{
-       BTMM_CHECKMACDOTCOM "${1}"
+       VERBOSE=""
+       BOOL=`scutil --get ${PLUGIN_INF} / Verbose                                      2>/dev/null`
        if [ $? -eq 0 ]; then
-               return
-       fi
-       
-       SECRET=`BTMM_GETINFO "btmmrelay:${1}"`
-       
-       if [ -z "${SECRET}" ]; then
-               echo "  No Relay keychain item."                >> btmm
-               return
+           if [ ${BOOL} = "TRUE" ]; then
+               VERBOSE="Verbose"
+           fi
        fi
-       
-       if [ `echo "${SECRET}" | wc -l` -ne 1 ]; then
-               echo "  More than one Relay keychain item."     >> btmm
-               return
+       if [ -n "${VERBOSE}" ]; then
+               echo "\t${VERBOSE}"                             >> versions             2>&1
        fi
-       
-       URLISH=`BTMM_URLISH "${DOMAIN}"`
-       ACCOUNT=`cat .btmminfo | sed -n 's/.*\"acct\"<blob>=\"\(.*\)\"/\1/p'`
-       KEYHASH="[SHA-1:`echo ${SECRET} | openssl sha1`]"
-       echo "  RHP: ${URLISH}"                                 >> btmm
-       echo "  RAC: ${ACCOUNT}"                                >> btmm
-       echo "  RKY: ${KEYHASH}"                                >> btmm
-}
 
-BTMM_REPORTZONE()
-{
-       DOMAIN="${1}"
-       
-       echo                                                    >> btmm
-       echo "${DOMAIN}"                                        >> btmm
-       
-       DNSID=`BTMM_UNIQUEIDFROMZONE "${DOMAIN}"`
-       SECRET=`BTMM_GETINFO "${DNSID}"`
-
-       if [ -z "${SECRET}" ]; then
-               echo "  No DNS keychain item."                  >> btmm
-               return
+       VERSION=`scutil --get ${PLUGIN_INF} / CFBundleVersion                           2>/dev/null`
+       if [ $? -eq 1 ]; then
+               VERSION=`scutil --get ${PLUGIN_INF} / CFBundleShortVersionString        2>/dev/null`
        fi
-       
-       if [ `echo "${SECRET}" | wc -l` -ne 1 ]; then
-               echo "  More than one DNS keychain item."       >> btmm
-               return
-       fi
-       
-       URLISH=`BTMM_URLISH "${DOMAIN}"`
-       HOSTPORT=`echo "${URLISH}" | cut -d@ -f2`
-       ACCOUNT=`cat .btmminfo | sed -n 's/.*\"acct\"<blob>=\"\(.*\)\"/\1/p'`
-       TSIG="${ACCOUNT}:${SECRET}"
-
-       KEYHASH="[SHA-1:`echo ${SECRET} | openssl sha1`]"
-       echo ""                                                 >> btmm
-       echo "  DHP: ${URLISH}"                                 >> btmm
-       echo "  DAC: ${ACCOUNT}"                                >> btmm
-       echo "  DKY: ${KEYHASH}"                                >> btmm
-       
-       BTMM_RELAYINFO "${DOMAIN}"
-
-       for TYPE in                     \
-               _afpovertcp._tcp        \
-               _airport._tcp           \
-               _adisk._tcp             \
-               _http._tcp              \
-               _rfb._tcp               \
-               _smb._tcp               \
-               _ssh._tcp
-       do
-               BTMM_DIG "${TYPE}.${DOMAIN}" ptr        \
-               | while read -r REG
-               do
-                       echo ""                                 >> btmm
-                       /bin/echo "  ${REG}"                    >> btmm
-                       echo ""                                 >> btmm
-
-                       INF_Q=`/bin/echo "${REG}" | sed -e "s/${TYPE}/_device-info._tcp/"`
-                       INF=`BTMM_DIG "${INF_Q}" txt`
-                       echo "    INF: ${INF}"                  >> btmm
-
-                       SRV=`BTMM_DIG ${REG} srv`
-                       SRV1=`/bin/echo "${SRV}" | head -1`
-                       echo "    SRV: ${SRV1}"                 >> btmm
-                       SRV2=`/bin/echo "${SRV}" | tail +2`
-                       if [ -n "${SRV2}" ]; then
-                               SRV="${SRV1}"
-                               /bin/echo "${SRV2}"             \
-                               | sed -e 's/^/  *****: /'       >> btmm
-                       fi
+       echo "\tVersion: ${VERSION}"                            >> versions             2>&1
 
-                       TXT=`BTMM_DIG ${REG} txt`
-                       TXT1=`/bin/echo "${TXT}" | head -1`
-                       echo "    TXT: ${TXT1}"                 >> btmm
-                       TXT2=`/bin/echo "${TXT}" | tail +2`
-                       if [ -n "${TXT2}" ]; then
-                               /bin/echo "${TXT2}"             \
-                               | sed -e 's/^/  *****: /'       >> btmm
-                       fi
+       if [ -f ${PLUGIN_DIR}/Contents/MacOS/${PLUGIN%.*} ]; then
+           SUM=`sum ${PLUGIN_DIR}/Contents/MacOS/${PLUGIN%.*}`
+           echo "\tsum: ${SUM}"                                >> versions             2>&1
 
-                       HOST=`/bin/echo "${SRV}" | cut -d ' ' -f 4-`
-                       if [ -n "${HOST}" ]; then
-                               V4=`BTMM_DIG ${HOST} a`
-                               V6=`BTMM_DIG ${HOST} aaaa`
-                               KRB=`BTMM_DIG _kerberos.${HOST} txt`
-                               TUN=`BTMM_DIG _autotunnel._udp.${HOST} srv`
-                               AT6=`BTMM_DIG _autotunnel6.${HOST} aaaa`
-                       else
-                               V4=""
-                               V6=""
-                               KRB=""
-                               TUN=""
-                               AT6=""
-                       fi
-                       if [ -n "${V4}" ]; then
-                               echo "     v4: ${V4}"           >> btmm
-                       fi
-                       if [ -n "${V6}" ]; then
-                               echo "     v6: ${V6}"           >> btmm
-                       fi
-                       if [ -n "${KRB}" ]; then
-                               echo "    KRB: ${KRB}"          >> btmm
-                       fi
-                       if [ -n "${TUN}" ]; then
-                               echo "    TUN: ${TUN}"          >> btmm
-
-                               HOST=`/bin/echo "${TUN}" | cut -d ' ' -f 4-`
-                               if [ -n "${HOST}" ]; then
-                                       V4=`BTMM_DIG ${HOST} a`
-                                       V6=`BTMM_DIG ${HOST} aaaa`
-                               fi
-                               if [ -n "${V4}" ]; then
-                                       echo "     v4: ${V4}"   >> btmm
-                               fi
-                               if [ -n "${V6}" ]; then
-                                       echo "     v6: ${V6}"   >> btmm
-                               fi
-                       fi
-                       if [ -n "${AT6}" ]; then
-                               echo "    AT6: ${AT6}"          >> btmm
-                       fi
-               done
-       done
+           LSINFO=`ls -lu ${PLUGIN_DIR}/Contents/MacOS/${PLUGIN%.*}`
+           echo "\tadditional info: ${LSINFO}"                 >> versions             2>&1
+       elif [ -f ${PLUGIN_DIR}/${PLUGIN%.*} ]; then
+           SUM=`sum ${PLUGIN_DIR}/${PLUGIN%.*}`
+           echo "\tsum: ${SUM}"                                >> versions             2>&1
+
+           LSINFO=`ls -lu ${PLUGIN_DIR}/${PLUGIN%.*}`
+           echo "\tadditional info: ${LSINFO}"                 >> versions             2>&1
+       fi
+
+       echo ""                                                 >> versions             2>&1
+    done
 }
 
-BTMM_SETUP
+if [ -x /usr/bin/what -a -x /usr/bin/sum -a -x /bin/ls ]; then
+       get_binary_info
+       get_plugins_info
+fi
 
-scutil <<_END_OF_INPUT \
-| sed -n 's@.* : *\(.*\)$@\1@p' \
-| sort \
-| while read DOMAIN
+#
+# Last thing is to collect the logs to give a chance for networkd and mDNSResponder
+# to finish dumping their state
+#
+
+#
+# system log, kernel.log, early boot log messages
+#
+if [ -x /usr/bin/syslog ]; then
+       # save the recent activity
+       ${PRIV} /usr/bin/syslog | ${TAIL_25000}                         > syslog
+
+       # save just the "kernel" activity (in case some of the
+       # interesting/relevant message are before the messages
+       # captured above.
+       ${PRIV} /usr/bin/syslog -k Facility kern | ${TAIL_25000}        > kernel
+
+       if [ -d /var/log/DiagnosticMessages ]; then
+               # save any MessageTracer activity
+               ${PRIV} /usr/bin/syslog -d /var/log/DiagnosticMessages  \
+                                       -F raw                          \
+                                       -T local                        \
+                       | ${TAIL_25000}                                 > DiagnosticMessages
+       fi
+else
+       if [ -f /var/log/system.log ]; then
+               ${PRIV} ${TAIL_25000} /var/log/system.log               > system.log
+       fi
+       if [ -f /var/log/kernel.log ]; then
+               ${PRIV} ${TAIL_25000} /var/log/kernel.log               > kernel.log
+       fi
+fi
+if [ -x /sbin/dmesg ]; then
+       ${PRIV} /sbin/dmesg                                             > dmesg
+fi
+
+#
+# IPConfiguration log
+#
+if [ -f /var/log/com.apple.IPConfiguration.bootp ]; then
+       ${PRIV} ${TAIL_2000} /var/log/com.apple.IPConfiguration.bootp   \
+                                                       > com.apple.IPConfiguration.bootp
+fi
+
+#
+# ppp log file(s)
+#
+scutil <<_END_OF_INPUT                         \
+| awk -F' *: *'                                        \
+    '                                          \
+     /Logfile : / {                            \
+       if (index($2, "/") == 1) { print $2 }   \
+       else { print "/var/log/ppp/" $2 }       \
+     }                                         \
+     END {                                     \
+       print "/tmp/pppotcp.log"                        \
+     }                                         \
+    '                                          \
+| sort -u                                      \
+| while read logFile
 open
-show Setup:/Network/BackToMyMac
+show Setup:/Network/Service/[^/]+/PPP pattern
 quit
 _END_OF_INPUT
 do
-       BTMM_REPORTZONE "$DOMAIN"
+       if [ -f "${logFile}" ]; then
+               b="`basename ${logFile}`"
+               cat "${logFile}"                        > "${b}"                2>&1
+       fi
 done
 
-BTMM_CLEANUP
-
 #
-# collect crash reports
+# application firewall log
 #
-for daemon in                          \
-               bootpd                  \
-               configd                 \
-               eapolclient             \
-               mDNSResponder           \
-               mDNSResponderHelper     \
-               awacsd                  \
-               pppd                    \
-               racoon                  \
-               socketfilterfw          \
-               SCHelper                \
-               SCMonitor               \
+if [ -f /var/log/appfirewall.log ]; then
+       ${PRIV} ${TAIL_2000} /var/log/appfirewall.log   > appfirewall.log
+fi
+
+if [ -x /bin/ls ]; then
+       #
+       # collect crash reports
+       #
+       for daemon in                           \
+                       bootpd                  \
+                       configd                 \
+                       eapolclient             \
+                       mDNSResponder           \
+                       mDNSResponderHelper     \
+                       awacsd                  \
+                       pppd                    \
+                       racoon                  \
+                       socketfilterfw          \
+                       InternetSharing         \
+                       SCHelper                \
+                       SCMonitor               \
 
-do
-       /bin/ls -1      /Library/Logs/DiagnosticReports/${daemon}_*.crash       \
-                       /Library/Logs/CrashReporter/${daemon}_*.crash           \
-                       2>/dev/null                                             \
+       do
+               /bin/ls -1      /Library/Logs/DiagnosticReports/${daemon}_*.crash       \
+                               /Library/Logs/CrashReporter/${daemon}_*.crash           \
+                               /Library/Logs/CrashReporter/${daemon}_*.plist           \
+                               2>/dev/null                                             \
+               | while read log
+               do
+                       if [ -f "${log}" ]; then
+                               b="`basename ${log}`"
+                               ${PRIV} cat "${log}"            > "${b}"                2>&1
+                       fi
+               done
+       done
+
+       #
+       # collect any verbose logging output
+       #
+       /bin/ls -1      /Library/Logs/CrashReporter/com.apple.networking.*.log*         \
+                       2>/dev/null                                                     \
        | while read log
        do
                if [ -f "${log}" ]; then
                        b="`basename ${log}`"
-                       ${PRIV} cat "${log}"            > "${b}"                2>&1
+                       ${PRIV} cat "${log}"                    > "${b}"                2>&1
                fi
        done
-done
-
-#
-# system usage statistics
-#
-echo "#"                                               >  system-statistics
-echo "# uptime"                                                >> system-statistics
-echo "#"                                               >> system-statistics
-uptime                                                 >> system-statistics    2>&1
-
-echo "#"                                               >> system-statistics
-echo "# sysctl -a"                                     >> system-statistics
-echo "#"                                               >> system-statistics
-sysctl -a                                              >> system-statistics    2>&1
-
-echo "#"                                               >> system-statistics
-echo "# zprint"                                                >> system-statistics
-echo "#"                                               >> system-statistics
-zprint                                                 >> system-statistics    2>&1
+fi
 
-echo "#"                                               >> system-statistics
-echo "# top -l5 -s2"                                   >> system-statistics
-echo "#"                                               >> system-statistics
-echo ""
-echo "Please wait, collecting statistics"
-echo ""
-top -s 2 -l 5                                          >> system-statistics    2>&1
 
 #
 # collect everything into a single archive
 #
 cd "${WORKDIR}/.."
-if [ -x /usr/bin/tar ]; then
-       tar -c ${GZ_OPT} -f "${ARCHIVE}" "${OUT}"
-else
-       pax -w ${GZ_OPT} -f "${ARCHIVE}" "${OUT}"
-fi
+tar -c ${GZ_OPT} -f "${ARCHIVE}" "${OUT}"
 rm -rf "${WORKDIR}"
 
 if [ ${UID} -eq 0 ]; then
@@ -807,10 +859,3 @@ fi
 
 echo "Network data collected to \"${ARCHIVE}\""
 
-#
-# if requested, generate a crash report
-#
-if [ "${OUTDIR}" = "/Library/Logs/CrashReporter/SystemConfiguration" -a "${1}" = "CRASH" ]; then
-       kill -ABRT $$
-fi
-