X-Git-Url: https://git.saurik.com/apple/configd.git/blobdiff_plain/dbf6a266c384fc8b55e00a396eebe5cb62e21547..77a550b625b42f93d03018146bc3f0751ff2eed8:/get-mobility-info diff --git a/get-mobility-info b/get-mobility-info index 403b317..f802b93 100755 --- a/get-mobility-info +++ b/get-mobility-info @@ -1,236 +1,700 @@ #!/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"