]> git.saurik.com Git - apple/configd.git/blobdiff - get-mobility-info
configd-802.20.7.tar.gz
[apple/configd.git] / get-mobility-info
index 403b317c8515d53f21c853bc00e01197ddb43cbe..f802b937c779e520591151b4ee1ad7281e2e4af8 100755 (executable)
 #!/bin/sh
+# Copyright (c) 2004-2015 Apple Inc.
+#
 # get-mobility-info
 #
 # Collect system & network configuration information.
 #
 
-OUT=mobility-config-$$
-
 PATH=/bin:/usr/bin:/sbin:/usr/sbin
 
+#
+# Disclaimer
+#
+cat <<_END_OF_DISCLAIMER
+
+This diagnostic tool generates files that allow Apple to investigate issues
+with your computer and help Apple to improve its products. The generated files
+may contain some of your personal information, which may include, but not be
+limited to, the serial number or similar unique number for your device, your
+user name, or your computer name. The information is used by Apple in
+accordance with its privacy policy (www.apple.com/privacy) and is not shared
+with any third party. By enabling this diagnostic tool and sending a copy of
+the generated files to Apple, you are consenting to Apple's use of the content
+of such files.
+
+_END_OF_DISCLAIMER
+
+/bin/echo "Press 'Enter' to continue."
+read reply
+
+#
+# Setup
+#
 PRIV=""
 if [ ${EUID} -ne 0 ]; then
        PRIV="sudo"
 fi
 
-cd /tmp
-mkdir ${OUT}
+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 +'%Y.%m.%d.%H%M%S'`"
+OUTDIR="/var/tmp"
+if [ -d ~/Desktop ]; then
+       OUTDIR=~/Desktop
+elif [ "`readlink /tmp`" = "private/var/tmp" ]; then
+       OUTDIR=/Library/Logs/CrashReporter
+       mkdir -p ${OUTDIR}
+fi
+
+umask 077
+
+WORKDIR=`mktemp -d -q "/tmp/${OUT}"`
+if [ $? -ne 0 ]; then
+       echo "Could not create snapshot directory"
+       exit 1
+fi
+
+GZ_EXT=""
+GZ_OPT=""
+if [ -x /usr/bin/gzip ]; then
+       GZ_EXT=".gz"
+       GZ_OPT="-z"
+fi
+
+ARCHIVE=`mktemp -q "${OUTDIR}/${OUT}.tar${GZ_EXT}"`
+if [ $? -ne 0 ]; then
+       echo "Could not create snapshot archive"
+       rm -rf "${WORKDIR}"
+       exit 1
+fi
+
+cd "${WORKDIR}"
+
+echo ""
+echo "Please wait, collecting information and statistics"
+echo ""
 
 #
-# processes
+# get-network-info
 #
-ps axlww                                               > ${OUT}/ps                     2>&1
+if [ -x /System/Library/Frameworks/SystemConfiguration.framework/Resources/get-network-info ]; then
+       /System/Library/Frameworks/SystemConfiguration.framework/Resources/get-network-info -s -c "${WORKDIR}"
+elif [ -x /System/Library/Frameworks/SystemConfiguration.framework/get-network-info ]; then
+       /System/Library/Frameworks/SystemConfiguration.framework/get-network-info -s -c "${WORKDIR}"
+elif [ -x /System/Library/PrivateFrameworks/SystemConfiguration.framework/get-network-info ]; then
+       /System/Library/PrivateFrameworks/SystemConfiguration.framework/get-network-info -s -c "${WORKDIR}"
+fi
 
 #
-# network interface configuration
+# processes
 #
-ifconfig -a -b                                         > ${OUT}/ifconfig               2>&1
+if [ -x /bin/ps ]; then
+       /bin/ps axlww                                   > ps                    2>&1
+fi
 
 #
-# network route configuration
+# AirPort info
 #
-netstat -n -r                                          >> ${OUT}/netstat               2>&1
+if [ -x /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport ]; then
+       /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport --getinfo      \
+                                                       > airport               2>&1
+fi
 
 #
-# DHCP configuration
-#
-for if in `ifconfig -l`
-do
-       case ${if} in
-       lo* )   ;;
-       en* )   ipconfig getpacket ${if}                > ${OUT}/ipconfig-${if}         2>&1
-               ;;
-       esac
-done
+# collect wifi dump
+#
+if [ -x /usr/bin/wdutil -a -x /bin/ls ]; 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
 #
 if [ -e /System/Library/CoreServices/SystemVersion.plist ]; then
        cat /System/Library/CoreServices/SystemVersion.plist    \
-                                                       > ${OUT}/SystemVersion.plist    2>&1
-fi
-if [ -e /System/Library/CoreServices/ServerVersion.plist ]; then
-       cat /System/Library/CoreServices/ServerVersion.plist    \
-                                                       > ${OUT}/ServerVersion.plist    2>&1
+                                                       > SystemVersion.plist   2>&1
 fi
 
 #
 # IOKit info
 #
-ioreg -l                                               > ${OUT}/ioreg                  2>&1
-
-#
-# Host configuration
-#
-hostinfo                                               > ${OUT}/hostinfo               2>&1
-if [ -e /etc/hostconfig ]; then
-       cat /etc/hostconfig                             > ${OUT}/etc.hostconfig         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
 
 #
-# DNS configuration
+# Power Management info
 #
-scutil --dns                                           > ${OUT}/dns-configuration      2>&1
-if [ -e /etc/resolv.conf ]; then
-       cat /etc/resolv.conf                            > ${OUT}/etc.resolv.conf        2>&1
-fi
-if [ -e /var/run/resolv.conf ]; then
-       cat /var/run/resolv.conf                        > ${OUT}/var.run.resolv.conf    2>&1
+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
 
 #
-# NetInfo configuration
+# Host configuration
 #
-niutil -statistics .                                   > ${OUT}/netinfo-statistics     2>&1
-if [ -f /var/run/niconfig_local.xml ]; then
-       cat /var/run/niconfig_local.xml                 > ${OUT}/niconfig_local.xml     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
 
 #
 # System / network preferences
 #
 for f in                                                                               \
-       /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist                \
        /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/preferences.plist                      \
+       /Library/Preferences/SystemConfiguration/com.apple.wifi.plist                   \
+       /Library/Preferences/com.apple.alf.plist                                        \
        /Library/Preferences/com.apple.sharing.firewall.plist                           \
+       /Library/Preferences/com.apple.wwand.plist                                      \
 
 do
-       if [ -e ${f} ]; then
-               b=`basename $f`
-               cat ${f}                                > ${OUT}/${b}                   2>&1
+       if [ -e "${f}" ]; then
+               b="`basename ${f}`"
+               cat "${f}"                              > "${b}"                2>&1
        fi
 done
 
 #
-# configd's cache
+# Install log
 #
-${PRIV} scutil -p <<_END_OF_INPUT
-open
-snapshot
-quit
-_END_OF_INPUT
-if [ -f /var/tmp/configd-store.xml ]; then
-       cp /var/tmp/configd-store.xml                   ${OUT}/configd-store.xml
-fi
-if [ -f /var/tmp/configd-pattern.xml ]; then
-       cp /var/tmp/configd-pattern.xml                 ${OUT}/configd-pattern.xml
-fi
-if [ -f /var/tmp/configd-session.xml ]; then
-       cp /var/tmp/configd-session.xml                 ${OUT}/configd-session.xml
+if [ -e /var/log/install.log ]; then
+       cat /var/log/install.log                        > install.log           2>&1
 fi
 
 #
-# network reachability
+# System / network preferences (from other volumes)
+#
+mount -t hfs | grep "/Volumes/" | sed -e 's:^.* on /Volumes/::' -e 's: ([^(]*$::'      \
+| while read volume
+do
+       V_PATH="/Volumes/${volume}"
+       if [ -h "${V_PATH}" ]; then
+               # if the path is a symlink
+               continue
+       fi
+
+       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
 #
-scutil -d -v -r www.apple.com                          > ${OUT}/reachability-info      2>&1
-if [ -f /usr/bin/dig ]; then
-       dig -t any -c any www.apple.com                 > ${OUT}/dig-results            2>&1
+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>/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>/dev/null
 fi
 
 #
 # mounted filesystems
 #
-mount                                                  > ${OUT}/mounted-filesystems    2>&1
+mount                                                  > mounted-filesystems   2>&1
+
+${PRIV} cat /etc/hosts                                         > etc.hosts             2>/dev/null
 
 #
-# system log
+# kernel extensions statistic
 #
-tail -1000 /var/log/system.log                         > ${OUT}/system.log
+if   [ -x /usr/sbin/kextstat ]; then
+       /usr/sbin/kextstat                              > kextstat              2>&1
+fi
+
+if [ -x /sbin/pfctl ]; then
+       echo "#"                                        >  pf
+       echo "# pfctl -s all"                           >> pf
+       echo "#"                                        >> pf
+       ${PRIV} /sbin/pfctl -s all                      >> pf                   2>&1
+       echo "=============================="           >> pf
+       echo "#"                                        >> pf
+       echo "# pfctl -s References"                    >> pf
+       echo "#"                                        >> pf
+       ${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} /sbin/pfctl -a ${ANCHOR} -s all >> pf                   2>&1
+       done
+fi
 
 #
-# ppp log
+# mach port info
 #
-if [ -f /var/log/ppp.log ]; then
-       cp /var/log/ppp.log                             ${OUT}/ppp.log
+if [ -x /usr/local/bin/lsmp ]; then
+       ${PRIV} /usr/local/bin/lsmp -a -v               > lsmp                  2>&1
 fi
 
 #
-# kernel extensions statistic
+# open files
+#
+if [ -x /usr/sbin/lsof ]; then
+       ${PRIV} /usr/sbin/lsof -n -O -P -T q            > lsof                  2>&1    &
+       LSOF_PID=$!
+       # Init a watchdog for lsof
+       (
+               WAIT_TIME=5
+               while [ $WAIT_TIME -gt 0 ]
+               do
+                       ${PRIV} kill -0 ${LSOF_PID}     2>/dev/null
+                       if [ $? -eq 0 ]; then
+                               sleep 1
+                               # lsof is gathering data..
+                               WAIT_TIME=$((WAIT_TIME-1))
+                               continue
+                       fi
+
+                       # lsof completed gathering data
+                       break
+               done
+
+               if [ $WAIT_TIME -eq 0 ]; then
+                       # lsof timed out
+                       ${PRIV} kill ${LSOF_PID}        2>/dev/null
+               fi
+       ) &
+fi
+
+#
+# [lib]dispatch info
+#
+if [ -x /usr/local/bin/ddt ]; then
+    /bin/echo -n ""                                    >  dispatch-info
+    for BIN in         \
+       configd         \
+       discoveryd      \
+
+    do
+       echo "#"                                        >> dispatch-info
+       echo "# ddt -vkp ${BIN}"                        >> dispatch-info
+       echo "#"                                        >> dispatch-info
+       ${PRIV} /usr/local/bin/ddt -vkp ${BIN}          >> dispatch-info        2>&1
+    done
+fi
+
+#
+# OpenDirectory info
+#
+if [ -x /usr/bin/odutil ]; then
+       echo "#"                                        >  od-info
+       echo "# odutil show all"                        >> od-info
+       echo "#"                                        >> od-info
+       ${PRIV} /usr/bin/odutil show all                >> od-info              2>&1
+fi
+
+#
+# Kerberos configuration
+#
+if [ -x /usr/bin/klist ]; then
+       echo "#"                                        >  kerberos
+       echo "# klist --verbose --all-content"          >> kerberos
+       echo "#"                                        >> kerberos
+       klist --verbose --all-content                   >> kerberos     2>&1
+
+       echo "#"                                        >> kerberos
+       echo "# ktutil list"                            >> kerberos
+       echo "#"                                        >> kerberos
+       ${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
+
 #
-if   [ -f /usr/sbin/kextstat ]; then
-       kextstat                                        > ${OUT}/kextstat               2>&1
-elif [ -f /usr/sbin/kmodstat ]; then
-       kmodstat                                        > ${OUT}/kmodstat               2>&1
-fi
-
-#
-# network statistics
-#
-echo "#"                                               >> ${OUT}/network-statistics
-echo "# netstat -n -a -A -f inet"                      >> ${OUT}/network-statistics
-echo "#"                                               >> ${OUT}/network-statistics
-netstat -n -a -A -f inet                               >> ${OUT}/network-statistics    2>&1
-echo "#"                                               >> ${OUT}/network-statistics
-echo "# lsof -n -i -P"                                 >> ${OUT}/network-statistics
-echo "#"                                               >> ${OUT}/network-statistics
-lsof -n -i -P                                          >> ${OUT}/network-statistics    2>&1
-echo "#"                                               >> ${OUT}/network-statistics
-echo "# netstat -s"                                    >> ${OUT}/network-statistics
-echo "#"                                               >> ${OUT}/network-statistics
-netstat -s                                             >> ${OUT}/network-statistics    2>&1
-echo "#"                                               >> ${OUT}/network-statistics
-echo "# netstat -m"                                    >> ${OUT}/network-statistics
-echo "#"                                               >> ${OUT}/network-statistics
-netstat -m                                             >> ${OUT}/network-statistics    2>&1
-echo "#"                                               >> ${OUT}/network-statistics
-echo "# netstat -i -n -d"                              >> ${OUT}/network-statistics
-echo "#"                                               >> ${OUT}/network-statistics
-netstat -i -n -d                                       >> ${OUT}/network-statistics    2>&1
-echo "#"                                               >> ${OUT}/network-statistics
-echo "# ipfw -at show"                                 >> ${OUT}/network-statistics
-echo "#"                                               >> ${OUT}/network-statistics
-ipfw -at show                                          >> ${OUT}/network-statistics    2>&1
-echo "#"                                               >> ${OUT}/network-statistics
-echo "# appletalk -s"                                  >> ${OUT}/network-statistics
-echo "#"                                               >> ${OUT}/network-statistics
-appletalk -s                                           >> ${OUT}/network-statistics    2>&1
+# 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
 
 #
 # system usage statistics
 #
-echo "#"                                               >  ${OUT}/system-statistics
-echo "# uptime"                                                >> ${OUT}/system-statistics
-echo "#"                                               >> ${OUT}/system-statistics
-uptime                                                 >> ${OUT}/system-statistics     2>&1
-echo "#"                                               >> ${OUT}/system-statistics
-echo "# pstat -t"                                      >> ${OUT}/system-statistics
-echo "#"                                               >> ${OUT}/system-statistics
-pstat -t                                               >> ${OUT}/system-statistics     2>&1
-echo "#"                                               >> ${OUT}/system-statistics
-echo "# sysctl -a"                                     >> ${OUT}/system-statistics
-echo "#"                                               >> ${OUT}/system-statistics
-sysctl -a                                              >> ${OUT}/system-statistics     2>&1
-echo "#"                                               >> ${OUT}/system-statistics
-echo "# zprint"                                                >> ${OUT}/system-statistics
-echo "#"                                               >> ${OUT}/system-statistics
-zprint                                                 >> ${OUT}/system-statistics     2>&1
-echo "#"                                               >> ${OUT}/system-statistics
-echo "# top -l5 -s2"                                   >> ${OUT}/system-statistics
-echo "#"                                               >> ${OUT}/system-statistics
-  echo ""
-  echo "Please wait, collecting statistics"
-  echo ""
-top -s 2 -l 5                                          >> ${OUT}/system-statistics     2>&1
-
-#
-# collect crash reports
-#
-for daemon in bootpd configd pppd
+/bin/echo -n ""                                                > system-statistics
+
+if [ -x /usr/bin/uptime ]; then
+       echo "#"                                        >> system-statistics
+       echo "# uptime"                                 >> system-statistics
+       echo "#"                                        >> system-statistics
+       /usr/bin/uptime                                 >> system-statistics    2>&1
+fi
+
+if [ -x /usr/sbin/sysctl ]; then
+       echo "#"                                        >> system-statistics
+       echo "# sysctl kern hw net debug"               >> system-statistics
+       echo "#"                                        >> system-statistics
+       /usr/sbin/sysctl kern hw net debug              >> system-statistics    2>&1
+fi
+
+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
+
+if [ -x /usr/sbin/lsof -a -x /bin/ls ]; then
+       N=0
+       /bin/ls -1      /Library/Preferences/SystemConfiguration/*-lock         \
+                       2>/dev/null                                             \
+       | while read lock
+       do
+               if [ ${N} -eq 0 ]; then
+                       echo "#"                                        >> system-statistics
+                       echo "# lsof [SCPreferences lock files]"        >> system-statistics
+               fi
+               N=`expr ${N} + 1`
+
+               echo "#"                                                >> system-statistics
+               ${PRIV} /usr/sbin/lsof -- ${lock}                       >> system-statistics    2>&1
+       done
+fi
+
+#
+# collect executable and plugin info
+#
+report_binary_info()
+{
+    if [ ! -f "${1}" ]; then
+       return
+    fi
+
+    VERSION=`what "${1}"`
+    echo "${VERSION}"                                  >> versions     2>&1
+
+    SUM=`sum "${1}"`
+    echo "\tsum: ${SUM}"                               >> versions     2>&1
+
+    LSINFO=`ls -lu "${1}"`
+    echo "\tadditional info: ${LSINFO}"                        >> versions     2>&1
+
+    echo ""                                            >> versions     2>&1
+}
+
+get_binary_info()
+{
+    for BIN in                                                                         \
+       /usr/libexec/bootpd                                                             \
+       /usr/libexec/configd                                                            \
+       /usr/libexec/discoveryd                                                         \
+       /usr/sbin/awacsd                                                                \
+       /usr/sbin/mDNSResponder                                                         \
+       /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/xcode-select -a -x /usr/bin/xcodebuild -a -x /usr/bin/xcrun ]; then
+       SDKPATH="`xcode-select --print-path 2>/dev/null`"
+       if [ $? -eq 0 -a -n "${SDKPATH}" ]; then
+           /usr/bin/xcodebuild -showsdks 2>/dev/null   \
+           | grep iphone                               \
+           | awk '{ print $NF }'                       \
+           | while read SDK
+           do
+               SDKPATH="`xcrun --sdk $SDK --show-sdk-path`"
+               for BIN in                                                                              \
+                   /usr/libexec/configd_sim                                                            \
+                   /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration        \
+
+               do
+                   report_binary_info "${SDKPATH}${BIN}"
+               done
+           done
+       else
+           echo "*** NO SDKs ***"      >> versions
+           echo ""                     >> versions
+       fi
+    fi
+}
+
+get_plugins_info()
+{
+    num=0
+    cd /System/Library/SystemConfiguration
+    for PLUGIN in *.bundle
+    do
+       plugins[$num]="${PLUGIN}"
+       num=$(( $num + 1 ))
+    done
+
+    cd "${WORKDIR}"
+
+    for PLUGIN in "${plugins[@]}"
+    do
+       PLUGIN_DIR="/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
+
+       echo "${PLUGIN}"                                        >> versions             2>&1
+
+       ENABLED="Enabled"
+       BOOL=`scutil --get "${PLUGIN_INF}" / Enabled                                    2>/dev/null`
+       if [ $? -eq 0 ]; then
+           if [ ${BOOL} = "TRUE" ]; then
+               ENABLED="Enabled*"
+           else
+               ENABLED="Disabled"
+           fi
+       fi
+       echo "\t${ENABLED}"                                     >> versions             2>&1
+
+       VERBOSE=""
+       BOOL=`scutil --get "${PLUGIN_INF}" / Verbose                                    2>/dev/null`
+       if [ $? -eq 0 ]; then
+           if [ ${BOOL} = "TRUE" ]; then
+               VERBOSE="Verbose"
+           fi
+       fi
+       if [ -n "${VERBOSE}" ]; then
+               echo "\t${VERBOSE}"                             >> versions             2>&1
+       fi
+
+       VERSION=`scutil --get "${PLUGIN_INF}" / CFBundleVersion                         2>/dev/null`
+       if [ $? -eq 1 ]; then
+               VERSION=`scutil --get "${PLUGIN_INF}" / CFBundleShortVersionString      2>/dev/null`
+       fi
+       echo "\tVersion: ${VERSION}"                            >> versions             2>&1
+
+       if [ -f "${PLUGIN_DIR}/Contents/MacOS/${PLUGIN%.*}" ]; then
+           SUM=`sum "${PLUGIN_DIR}/Contents/MacOS/${PLUGIN%.*}"`
+           echo "\tsum: ${SUM}"                                >> versions             2>&1
+
+           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
+}
+
+if [ -x /usr/bin/what -a -x /usr/bin/sum -a -x /bin/ls ]; then
+       get_binary_info
+       get_plugins_info
+fi
+
+#
+# to give a chance for "networkd" and the DNS service to finish dumping their
+# state, the last thing we do is collect the logs
+#
+
+#
+# system log, kernel.log, early boot log messages
+#
+if [ -x /usr/bin/syslog ]; then
+       #
+       # save the recent activity
+       #
+       ${PRIV} /usr/bin/syslog -T local.3                                      \
+               | ${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 -T local.3 -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.3                              \
+                       | ${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/Service/[^/]+/PPP pattern
+quit
+_END_OF_INPUT
 do
-       LOG=${daemon}.crash.log
-       if [ -e /Library/Logs/CrashReporter/${LOG} ]; then
-               cat /Library/Logs/CrashReporter/${LOG}  > ${OUT}/${LOG}                 2>&1
+       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_2000} /var/log/appfirewall.log   > appfirewall.log
+fi
+
+if [ -x /bin/ls ]; then
+       #
+       # collect crash reports
+       #
+       for daemon in                           \
+                       InternetSharing         \
+                       SCHelper                \
+                       SCMonitor               \
+                       awacsd                  \
+                       bootpd                  \
+                       configd                 \
+                       discoveryd              \
+                       discoveryd_helper       \
+                       eapolclient             \
+                       mDNSResponder           \
+                       mDNSResponderHelper     \
+                       pppd                    \
+                       racoon                  \
+                       socketfilterfw          \
+
+       do
+               /bin/ls -1      /Library/Logs/DiagnosticReports/${daemon}_*.crash       \
+                               /Library/Logs/DiagnosticReports/${daemon}_*.ips         \
+                               /Library/Logs/CrashReporter/${daemon}_*.crash           \
+                               /Library/Logs/CrashReporter/${daemon}_*.ips             \
+                               /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
+               fi
+       done
+fi
+
+#
+# stackshot
+#
+if [ -x /usr/local/bin/crstackshot ]; then
+       /usr/local/bin/crstackshot                              2>/dev/null
+fi
+
+#
+# wait for background activity (eg: lsof)
+#
+wait
+
 #
 # collect everything into a single archive
 #
-tar cfz ${OUT}.tar.gz ${OUT}
-rm -rf ${OUT}
+cd "${WORKDIR}/.."
+tar -c ${GZ_OPT} -f "${ARCHIVE}" "${OUT}"
+rm -rf "${WORKDIR}"
+
+if [ ${UID} -eq 0 ]; then
+       if [ -n "${SUDO_UID}" -a -n "${SUDO_GID}" ]; then
+               if [ ${UID} -ne ${SUDO_UID} ]; then
+                       chown ${SUDO_UID}:${SUDO_GID} "${ARCHIVE}"
+               fi
+       fi
+fi
+
+echo "Network data collected to \"${ARCHIVE}\""
 
-echo "Network data collected to /tmp/${OUT}.tar.gz"