]> git.saurik.com Git - apple/configd.git/blame_incremental - get-mobility-info
configd-699.1.5.tar.gz
[apple/configd.git] / get-mobility-info
... / ...
CommitLineData
1#!/bin/sh
2# Copyright (c) 2004-2014 Apple Inc.
3#
4# get-mobility-info
5#
6# Collect system & network configuration information.
7#
8
9PATH=/bin:/usr/bin:/sbin:/usr/sbin
10
11#
12# Disclaimer
13#
14cat <<_END_OF_DISCLAIMER
15
16This diagnostic tool generates files that allow Apple to investigate issues
17with your computer and help Apple to improve its products. The generated files
18may contain some of your personal information, which may include, but not be
19limited to, the serial number or similar unique number for your device, your
20user name, or your computer name. The information is used by Apple in
21accordance with its privacy policy (www.apple.com/privacy) and is not shared
22with any third party. By enabling this diagnostic tool and sending a copy of
23the generated files to Apple, you are consenting to Apple's use of the content
24of such files.
25
26_END_OF_DISCLAIMER
27
28/bin/echo "Press 'Enter' to continue."
29read reply
30
31#
32# Setup
33#
34PRIV=""
35if [ ${EUID} -ne 0 ]; then
36 PRIV="sudo"
37fi
38
39if [ -x /usr/bin/tail ]; then
40 TAIL_2000="/usr/bin/tail -n 2000"
41 TAIL_25000="/usr/bin/tail -n 25000"
42else
43 TAIL_2000="/bin/cat"
44 TAIL_25000="/bin/cat"
45fi
46
47OUT="mobility-info-`date +'%m.%d.%Y.%H%M%S'`"
48OUTDIR="/var/tmp"
49if [ -d ~/Desktop ]; then
50 OUTDIR=~/Desktop
51elif [ "`readlink /tmp`" = "private/var/tmp" ]; then
52 OUTDIR=/Library/Logs/CrashReporter
53 mkdir -p ${OUTDIR}
54fi
55
56umask 077
57
58WORKDIR=`mktemp -d -q "/tmp/${OUT}"`
59if [ $? -ne 0 ]; then
60 echo "Could not create snapshot directory"
61 exit 1
62fi
63
64GZ_EXT=""
65GZ_OPT=""
66if [ -x /usr/bin/gzip ]; then
67 GZ_EXT=".gz"
68 GZ_OPT="-z"
69fi
70
71ARCHIVE=`mktemp -q "${OUTDIR}/${OUT}.tar${GZ_EXT}"`
72if [ $? -ne 0 ]; then
73 echo "Could not create snapshot archive"
74 rm -rf "${WORKDIR}"
75 exit 1
76fi
77
78cd "${WORKDIR}"
79
80echo ""
81echo "Please wait, collecting information and statistics"
82echo ""
83
84#
85# Execute network reachability/DNS commands early
86#
87echo "#" > reachability-info
88echo '# scutil -d -v -r www.apple.com "" no-server' >> reachability-info
89echo "#" >> reachability-info
90scutil -d -v -r www.apple.com "" no-server >> reachability-info 2>&1
91
92echo "#" >> reachability-info
93echo '# scutil -d -v -r 0.0.0.0 no-server' >> reachability-info
94echo "#" >> reachability-info
95scutil -d -v -r 0.0.0.0 no-server >> reachability-info 2>&1
96
97if [ -x /usr/bin/dig -a -f /etc/resolv.conf ]; then
98 /usr/bin/dig -t any -c any www.apple.com > dig-results 2>/dev/null
99fi
100
101#
102# Signal "networkd" to log its "state" info. This logging will continue while
103# we execute a few other commands and should be complete by the time we collect
104# the log content.
105#
106if [ -x /usr/bin/killall ]; then
107 #
108 # request networkd state
109 #
110 ${PRIV} /usr/bin/killall -INFO networkd 2>/dev/null
111
112 #
113 # discoveryd info
114 #
115 if [ -x /usr/libexec/discoveryd -a -x /usr/sbin/discoveryutil ]; then
116 ${PRIV} pgrep -q -x discoveryd
117 if [ $? -eq 0 ]; then
118 P_ARG=""
119 case "`${PRIV} discoveryutil help 2>&1`" in
120 Warning:* )
121 P_ARG="--priv"
122 ;;
123 esac
124 #
125 # upgrade logging (if needed)
126 #
127 CLASS_o=`${PRIV} discoveryutil ${P_ARG} logclass`
128 CLASS_n=`${PRIV} discoveryutil ${P_ARG} logclass Cache`
129
130 LEVEL_o=`${PRIV} discoveryutil ${P_ARG} loglevel | awk '{ print $5 }'`
131 if [ ${LEVEL_o} -le 1 ]; then
132 LEVEL_n=`${PRIV} discoveryutil ${P_ARG} loglevel Intermediate | awk '{ print $5 }'`
133 else
134 LEVEL_n=${LEVEL_o}
135 fi
136
137 cp /dev/null discoveryd-info
138 for c in \
139 clientlisteners \
140 configinterfaces \
141 configresolvers \
142 dnsproxystate \
143 mdnsbrowses \
144 mdnscachecontents \
145 mdnscachestats \
146 mdnslisteners \
147 mdnsregistrations \
148 nattraversals \
149 udnscachecontents \
150 udnscachestats \
151 udnsresolvers \
152 udnsunanswered \
153
154 do
155 echo "#" >> discoveryd-info
156 echo "# discoveryutil ${c}" >> discoveryd-info
157 echo "#" >> discoveryd-info
158 ${PRIV} discoveryutil ${P_ARG} --timeout ${c} >> discoveryd-info
159 done
160
161 if [ "$CLASS_o" != "$CLASS_n" ]; then
162 #
163 # restore log settings
164 #
165 ${PRIV} discoveryutil ${P_ARG} lognoclass Cache >/dev/null
166 fi
167
168 if [ "$LEVEL_o" != "$LEVEL_n" ]; then
169 ${PRIV} discoveryutil ${P_ARG} loglevel ${LEVEL_o} >/dev/null
170 fi
171
172 ${PRIV} cat /var/run/com.apple.discoveryd-trace.sb > com.apple.discoveryd-trace.sb 2>/dev/null
173 fi
174 fi
175
176 sleep 1
177fi
178
179#
180# processes
181#
182if [ -x /bin/ps ]; then
183 /bin/ps axlww > ps 2>&1
184fi
185
186#
187# network interface configuration
188#
189if [ -x /sbin/ifconfig ]; then
190 /sbin/ifconfig -a -L -b -m -r -v -v > ifconfig 2>&1
191 if [ $? -ne 0 ]; then
192 /sbin/ifconfig -a > ifconfig 2>&1
193 fi
194fi
195
196#
197# network route configuration
198#
199if [ -x /usr/sbin/netstat ]; then
200 /usr/sbin/netstat -n -r -a -l > netstat 2>&1
201fi
202
203#
204# DHCP configuration
205#
206if [ -x /sbin/ifconfig ]; then
207 for if in `/sbin/ifconfig -l`
208 do
209 case ${if} in
210 lo* ) ;;
211 en* ) ipconfig getpacket ${if} > ipconfig-${if} 2>&1
212 ;;
213 esac
214 done
215fi
216
217#
218# AirPort info
219#
220if [ -x /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport ]; then
221 /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport --getinfo \
222 > airport 2>&1
223fi
224
225#
226# collect wifi dump
227#
228if [ -x /usr/bin/wdutil -a -x /bin/ls ]; then
229 ${PRIV} /usr/bin/wdutil dump
230 mkdir -p "wifi_dump"
231 /bin/ls -1 /private/tmp/wifi-* 2>/dev/null \
232 | while read log
233 do
234 if [ -f "${log}" ]; then
235 b="`basename ${log}`"
236 ${PRIV} cat "${log}" > "wifi_dump/${b}" 2>&1
237 fi
238 done
239fi
240
241#
242# OS info
243#
244if [ -e /System/Library/CoreServices/SystemVersion.plist ]; then
245 cat /System/Library/CoreServices/SystemVersion.plist \
246 > SystemVersion.plist 2>&1
247fi
248
249#
250# IOKit info
251#
252if [ -x /usr/sbin/ioreg ]; then
253 /usr/sbin/ioreg -i -l -w 0 > ioreg 2>&1
254 /usr/sbin/ioreg -i -l -p IODeviceTree -w 0 >> ioreg 2>&1
255fi
256
257#
258# Power Management info
259#
260if [ -x /usr/bin/pmset ]; then
261 echo "#" > pmset
262 echo "# pmset -g everything" >> pmset
263 echo "#" >> pmset
264 /usr/bin/pmset -g everything 2>/dev/null | ${TAIL_25000} >> pmset
265fi
266
267#
268# Host name
269#
270if [ -x /bin/hostname ]; then
271 /bin/hostname > hostname 2>&1
272fi
273
274#
275# Host configuration
276#
277if [ -x /usr/bin/hostinfo ]; then
278 /usr/bin/hostinfo > hostinfo 2>&1
279fi
280if [ -e /etc/hostconfig ]; then
281 cat /etc/hostconfig > etc.hostconfig 2>&1
282fi
283
284#
285# DNS configuration
286#
287scutil --dns > dns-configuration 2>&1
288if [ -e /etc/resolv.conf ]; then
289 cat /etc/resolv.conf > etc.resolv.conf 2>&1
290fi
291if [ -e /var/run/resolv.conf ]; then
292 cat /var/run/resolv.conf > var.run.resolv.conf 2>&1
293fi
294if [ -e /etc/resolver ]; then
295 tar -c -H /etc/resolver > etc.resolver.tar 2>/dev/null
296fi
297
298#
299# Proxy configuration
300#
301scutil -d -v --proxy > proxy-configuration 2>&1
302
303#
304# Network information
305#
306if [ -x /sbin/ifconfig ]; then
307 echo "#" > network-information
308 echo "# scutil --nwi" >> network-information
309 echo "#" >> network-information
310 scutil --nwi >> network-information 2>&1
311 for if in `/sbin/ifconfig -l`
312 do
313 echo "" >> network-information
314 echo "#" >> network-information
315 echo "# scutil --nwi ${if}" >> network-information
316 echo "#" >> network-information
317 scutil --nwi ${if} >> network-information 2>&1
318 done
319fi
320
321#
322# System / network preferences
323#
324for f in \
325 /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist \
326 /Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist \
327 /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist \
328 /Library/Preferences/SystemConfiguration/com.apple.nat.plist \
329 /Library/Preferences/SystemConfiguration/com.apple.smb.server.plist \
330 /Library/Preferences/SystemConfiguration/com.apple.wifi.plist \
331 /Library/Preferences/SystemConfiguration/preferences.plist \
332 /Library/Preferences/com.apple.alf.plist \
333 /Library/Preferences/com.apple.sharing.firewall.plist \
334 /Library/Preferences/com.apple.networkextension.plist \
335 /Library/Preferences/com.apple.networkextension.control.plist \
336 /Library/Preferences/com.apple.networkextension.necp.plist \
337 /Library/Preferences/com.apple.wwand.plist \
338
339do
340 if [ -e "${f}" ]; then
341 b="`basename ${f}`"
342 cat "${f}" > "${b}" 2>&1
343 fi
344done
345
346#
347# System / network preferences (from other volumes)
348#
349/bin/ls /Volumes 2>/dev/null \
350| while read volume
351do
352 V_PATH="/Volumes/${volume}"
353 if [ -h "${V_PATH}" ]; then
354 # if the path is a symlink
355 continue
356 fi
357 for f in \
358 /Library/Preferences/SystemConfiguration/Networkinterfaces.plist \
359 /Library/Preferences/SystemConfiguration/preferences.plist \
360
361 do
362 if [ -f "${V_PATH}/${f}" ]; then
363 mkdir -p "OtherPreferences/${volume}"
364 b="`basename ${f}`"
365 cat "${V_PATH}/${f}" > "OtherPreferences/${volume}/${b}" 2>&1
366 fi
367 done
368done
369
370#
371# InternetSharing
372#
373if [ -e /etc/bootpd.plist ]; then
374 cat /etc/bootpd.plist > bootpd.plist 2>&1
375 cat /etc/com.apple.named.proxy.conf > com.apple.named.proxy.conf 2>/dev/null
376elif [ -e /Library/Preferences/SystemConfiguration/bootpd.plist ]; then
377 cat /Library/Preferences/SystemConfiguration/bootpd.plist > bootpd.plist 2>&1
378 cat /Library/Preferences/SystemConfiguration/com.apple.named.proxy.conf > com.apple.named.proxy.conf 2>/dev/null
379fi
380
381#
382# configd's cache
383#
384${PRIV} scutil -p --snapshot
385if [ -f /var/tmp/configd-store.plist ]; then
386 cat /var/tmp/configd-store.plist > configd-store.plist 2>&1
387fi
388if [ -f /var/tmp/configd-pattern.plist ]; then
389 cat /var/tmp/configd-pattern.plist > configd-pattern.plist 2>&1
390fi
391if [ -f /var/tmp/configd-session.plist ]; then
392 cat /var/tmp/configd-session.plist > configd-session.plist 2>&1
393fi
394if [ -f /var/tmp/configd-state ]; then
395 cat /var/tmp/configd-state > configd-state 2>&1
396fi
397if [ -f /var/tmp/configd-reachability ]; then
398 cat /var/tmp/configd-reachability > configd-reachability 2>&1
399fi
400
401#
402# mounted filesystems
403#
404mount > mounted-filesystems 2>&1
405
406${PRIV} cat /etc/hosts > etc.hosts 2>/dev/null
407
408#
409# kernel extensions statistic
410#
411if [ -x /usr/sbin/kextstat ]; then
412 /usr/sbin/kextstat > kextstat 2>&1
413fi
414
415#
416# network statistics
417#
418/bin/echo -n "" > network-statistics
419
420if [ -x /usr/sbin/arp ]; then
421 echo "#" >> network-statistics
422 echo "# arp -n -a" >> network-statistics
423 echo "#" >> network-statistics
424 /usr/sbin/arp -n -a >> network-statistics 2>&1
425fi
426
427if [ -x /usr/sbin/netstat ]; then
428 echo "#" >> network-statistics
429 echo "# netstat -A -a -l -n" >> network-statistics
430 echo "#" >> network-statistics
431 /usr/sbin/netstat -A -a -l -n >> network-statistics 2>&1
432
433 echo "#" >> network-statistics
434 echo "# netstat -s" >> network-statistics
435 echo "#" >> network-statistics
436 /usr/sbin/netstat -s >> network-statistics 2>&1
437
438 echo "#" >> network-statistics
439 echo "# netstat -mmm" >> network-statistics
440 echo "#" >> network-statistics
441 /usr/sbin/netstat -mmm >> network-statistics 2>&1
442
443 echo "#" >> network-statistics
444 echo "# netstat -i -n -d" >> network-statistics
445 echo "#" >> network-statistics
446 /usr/sbin/netstat -i -n -d >> network-statistics 2>&1
447
448 echo "#" >> network-statistics
449 echo "# netstat -g -n -s" >> network-statistics
450 echo "#" >> network-statistics
451 /usr/sbin/netstat -g -n -s >> network-statistics 2>&1
452
453 echo "#" >> network-statistics
454 echo "# netstat -i -x R" >> network-statistics
455 echo "#" >> network-statistics
456 /usr/sbin/netstat -i -x R >> network-statistics 2>&1
457 echo "#" >> network-statistics
458
459 echo "# netstat -a -n -p mptcp" >> network-statistics
460 echo "#" >> network-statistics
461 /usr/sbin/netstat -a -n -p mptcp >> network-statistics 2>/dev/null
462
463 echo "#" >> network-statistics
464 echo "# netstat -s -p mptcp" >> network-statistics
465 echo "#" >> network-statistics
466 /usr/sbin/netstat -s -p mptcp >> network-statistics 2>/dev/null
467
468 if [ -x /sbin/ifconfig ]; then
469 for if in `/sbin/ifconfig -l`
470 do
471 `/sbin/ifconfig -v ${if} | grep -q TXSTART`
472 if [ $? -eq 0 ]; then
473 echo "#" >> network-statistics
474 echo "# netstat -qq -I ${if}" >> network-statistics
475 echo "#" >> network-statistics
476 /usr/sbin/netstat -qq -I ${if} >> network-statistics 2>&1
477 fi
478 `/sbin/ifconfig -v ${if} | grep -q RXPOLL`
479 if [ $? -eq 0 ]; then
480 echo "#" >> network-statistics
481 echo "# netstat -Q -I ${if}" >> network-statistics
482 echo "#" >> network-statistics
483 /usr/sbin/netstat -Q -I ${if} >> network-statistics 2>&1
484 fi
485 done
486 fi
487fi
488
489if [ -x /usr/sbin/ndp ]; then
490 echo "#" >> network-statistics
491 echo "# ndp -n -a" >> network-statistics
492 echo "#" >> network-statistics
493 /usr/sbin/ndp -n -a >> network-statistics 2>&1
494
495 echo "#" >> network-statistics
496 echo "# ndp -n -p" >> network-statistics
497 echo "#" >> network-statistics
498 /usr/sbin/ndp -n -p >> network-statistics 2>&1
499
500 echo "#" >> network-statistics
501 echo "# ndp -n -r" >> network-statistics
502 echo "#" >> network-statistics
503 /usr/sbin/ndp -n -r >> network-statistics 2>&1
504
505 if [ -x /sbin/ifconfig ]; then
506 for if in `/sbin/ifconfig -l`
507 do
508 echo "#" >> network-statistics
509 echo "# ndp -i ${if}" >> network-statistics
510 echo "#" >> network-statistics
511 /usr/sbin/ndp -i ${if} >> network-statistics 2>&1
512 done
513 fi
514fi
515
516if [ -x /sbin/pfctl ]; then
517 echo "#" > pf
518 echo "# pfctl -s all" >> pf
519 echo "#" >> pf
520 ${PRIV} /sbin/pfctl -s all >> pf 2>&1
521 echo "==============================" >> pf
522 echo "#" >> pf
523 echo "# pfctl -s References" >> pf
524 echo "#" >> pf
525 ${PRIV} /sbin/pfctl -s References >> pf 2>&1
526 for ANCHOR in `${PRIV} pfctl -s Anchors -v 2>/dev/null`
527 do
528 echo "==============================" >> pf
529 echo "#" >> pf
530 echo "# pfctl -a ${ANCHOR} -s all" >> pf
531 echo "#" >> pf
532 ${PRIV} /sbin/pfctl -a ${ANCHOR} -s all >> pf 2>&1
533 done
534fi
535
536#
537# mach port info
538#
539if [ -x /usr/local/bin/lsmp ]; then
540 ${PRIV} /usr/local/bin/lsmp -a -v > lsmp 2>&1
541fi
542
543#
544# open files
545#
546if [ -x /usr/sbin/lsof ]; then
547 ${PRIV} /usr/sbin/lsof -n -P -T q > lsof 2>&1
548fi
549
550#
551# [lib]dispatch info
552#
553if [ -x /usr/local/bin/ddt ]; then
554 /bin/echo -n "" > dispatch-info
555 for BIN in \
556 configd \
557 discoveryd \
558
559 do
560 echo "#" >> dispatch-info
561 echo "# ddt -vkp ${BIN}" >> dispatch-info
562 echo "#" >> dispatch-info
563 ${PRIV} /usr/local/bin/ddt -vkp ${BIN} >> dispatch-info 2>&1
564 done
565fi
566
567#
568# OpenDirectory info
569#
570if [ -x /usr/bin/odutil ]; then
571 echo "#" > od-info
572 echo "# odutil show all" >> od-info
573 echo "#" >> od-info
574 ${PRIV} /usr/bin/odutil show all >> od-info 2>&1
575fi
576
577#
578# IPsec configuration
579#
580if [ -x /usr/sbin/setkey -a -x /usr/bin/perl ]; then
581 echo "#" > ipsec
582 echo "# setkey -D" >> ipsec
583 echo "#" >> ipsec
584 ${PRIV} /usr/sbin/setkey -D \
585 | /usr/bin/perl -M'Digest::MD5 qw(md5_hex)' -l -n -e '
586 if (/^(\s+[AE]:\s+\S+\s+)"?(.*)"?\s*$/) {
587 printf "%s[MD5:%s]%s\n", $1, md5_hex($2 . "\n"), $3;
588 } else {
589 printf "%s\n", $_;
590 }
591 ' >> ipsec
592
593 echo "" >> ipsec
594 echo "#" >> ipsec
595 echo "# setkey -Pp -D" >> ipsec
596 echo "#" >> ipsec
597 ${PRIV} /usr/sbin/setkey -Pp -D >> ipsec
598
599 for CF in /var/run/racoon/*.conf
600 do
601 if [ ! -r "${CF}" ]; then
602 continue
603 fi
604
605 echo "" >> ipsec
606 echo "#" >> ipsec
607 echo "# ${CF}" >> ipsec
608 echo "#" >> ipsec
609 ${PRIV} cat ${CF} \
610 | /usr/bin/perl -M'Digest::MD5 qw(md5_hex)' -l -n -e '
611 if (/^(\s+shared_secret\s+use\s+)"?([^\s;"]+)"?(.*)/) {
612 printf "%s[MD5:%s]%s\n", $1, md5_hex($2 . "\n"), $3;
613 } else {
614 printf "%s\n", $_;
615 }
616 ' >> ipsec
617 done
618fi
619
620#
621# Kerberos configuration
622#
623if [ -x /usr/bin/klist ]; then
624 echo "#" > kerberos
625 echo "# klist --verbose --all-content" >> kerberos
626 echo "#" >> kerberos
627 klist --verbose --all-content >> kerberos 2>&1
628
629 echo "#" >> kerberos
630 echo "# ktutil list" >> kerberos
631 echo "#" >> kerberos
632 ${PRIV} /usr/sbin/ktutil --verbose list >> kerberos 2>&1
633
634 echo "#" >> kerberos
635 echo "# gsstool list --verbose" >> kerberos
636 echo "#" >> kerberos
637 /System/Library/PrivateFrameworks/Heimdal.framework/Helpers/gsstool list --verbose >> kerberos 2>&1
638fi
639
640#
641# system profiler
642#
643if [ -x /usr/sbin/system_profiler ]; then
644 system_profiler -xml SPEthernetDataType \
645 SPFibreChannelDataType \
646 SPFireWireDataType \
647 SPFirewallDataType \
648 SPModemDataType \
649 SPNetworkDataType \
650 SPThunderboltDataType \
651 SPWWANDataType \
652 SPAirPortDataType > system_profiler.spx 2>/dev/null
653fi
654
655#
656# system usage statistics
657#
658/bin/echo -n "" > system-statistics
659
660if [ -x /usr/bin/uptime ]; then
661 echo "#" >> system-statistics
662 echo "# uptime" >> system-statistics
663 echo "#" >> system-statistics
664 /usr/bin/uptime >> system-statistics 2>&1
665fi
666
667if [ -x /usr/sbin/sysctl ]; then
668 echo "#" >> system-statistics
669 echo "# sysctl kern hw net debug" >> system-statistics
670 echo "#" >> system-statistics
671 /usr/sbin/sysctl kern hw net debug >> system-statistics 2>&1
672fi
673
674if [ -x /usr/bin/zprint ]; then
675 echo "#" >> system-statistics
676 echo "# zprint" >> system-statistics
677 echo "#" >> system-statistics
678 ${PRIV} /usr/bin/zprint >> system-statistics 2>&1
679fi
680
681if [ -x /usr/sbin/lsof -a -x /bin/ls ]; then
682 N=0
683 /bin/ls -1 /Library/Preferences/SystemConfiguration/*-lock \
684 2>/dev/null \
685 | while read lock
686 do
687 if [ ${N} -eq 0 ]; then
688 echo "#" >> system-statistics
689 echo "# lsof [SCPreferences lock files]" >> system-statistics
690 fi
691 N=`expr ${N} + 1`
692
693 echo "#" >> system-statistics
694 ${PRIV} /usr/sbin/lsof -- ${lock} >> system-statistics 2>&1
695 done
696fi
697
698#
699# collect executable and plugin info
700#
701report_binary_info()
702{
703 if [ ! -f "${1}" ]; then
704 return
705 fi
706
707 VERSION=`what "${1}"`
708 echo "${VERSION}" >> versions 2>&1
709
710 SUM=`sum "${1}"`
711 echo "\tsum: ${SUM}" >> versions 2>&1
712
713 LSINFO=`ls -lu "${1}"`
714 echo "\tadditional info: ${LSINFO}" >> versions 2>&1
715
716 echo "" >> versions 2>&1
717}
718
719get_binary_info()
720{
721 for BIN in \
722 /usr/libexec/bootpd \
723 /usr/libexec/configd \
724 /usr/libexec/discoveryd \
725 /usr/sbin/awacsd \
726 /usr/sbin/pppd \
727 /usr/sbin/racoon \
728 /usr/libexec/misd \
729 /usr/libexec/InternetSharing \
730 /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration \
731
732 do
733 report_binary_info "${BIN}"
734 done
735
736 if [ -x /usr/bin/xcode-select -a -x /usr/bin/xcodebuild -a -x /usr/bin/xcrun ]; then
737 SDKPATH="`xcode-select --print-path 2>/dev/null`"
738 if [ $? -eq 0 -a -n "${SDKPATH}" ]; then
739 /usr/bin/xcodebuild -showsdks 2>/dev/null \
740 | grep iphone \
741 | awk '{ print $NF }' \
742 | while read SDK
743 do
744 SDKPATH="`xcrun --sdk $SDK --show-sdk-path`"
745 for BIN in \
746 /usr/libexec/configd_sim \
747 /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration \
748
749 do
750 report_binary_info "${SDKPATH}${BIN}"
751 done
752 done
753 else
754 echo "*** NO SDKs ***" >> versions
755 echo "" >> versions
756 fi
757 fi
758}
759
760get_plugins_info()
761{
762 num=0
763 cd /System/Library/SystemConfiguration
764 for PLUGIN in *.bundle
765 do
766 plugins[$num]="${PLUGIN}"
767 num=$(( $num + 1 ))
768 done
769
770 cd "${WORKDIR}"
771
772 for PLUGIN in "${plugins[@]}"
773 do
774 PLUGIN_DIR="/System/Library/SystemConfiguration/${PLUGIN}"
775 PLUGIN_INF="${PLUGIN_DIR}/Contents/Info.plist"
776 if [ ! -f "${PLUGIN_INF}" ]; then
777 PLUGIN_INF="${PLUGIN_DIR}/Info.plist"
778 if [ ! -f "${PLUGIN_INF}" ]; then
779 echo "${PLUGIN_INF}: No Info.plist" >> versions 2>&1
780 fi
781 fi
782
783 echo "${PLUGIN}" >> versions 2>&1
784
785 ENABLED="Enabled"
786 BOOL=`scutil --get "${PLUGIN_INF}" / Enabled 2>/dev/null`
787 if [ $? -eq 0 ]; then
788 if [ ${BOOL} = "TRUE" ]; then
789 ENABLED="Enabled*"
790 else
791 ENABLED="Disabled"
792 fi
793 fi
794 echo "\t${ENABLED}" >> versions 2>&1
795
796 VERBOSE=""
797 BOOL=`scutil --get "${PLUGIN_INF}" / Verbose 2>/dev/null`
798 if [ $? -eq 0 ]; then
799 if [ ${BOOL} = "TRUE" ]; then
800 VERBOSE="Verbose"
801 fi
802 fi
803 if [ -n "${VERBOSE}" ]; then
804 echo "\t${VERBOSE}" >> versions 2>&1
805 fi
806
807 VERSION=`scutil --get "${PLUGIN_INF}" / CFBundleVersion 2>/dev/null`
808 if [ $? -eq 1 ]; then
809 VERSION=`scutil --get "${PLUGIN_INF}" / CFBundleShortVersionString 2>/dev/null`
810 fi
811 echo "\tVersion: ${VERSION}" >> versions 2>&1
812
813 if [ -f "${PLUGIN_DIR}/Contents/MacOS/${PLUGIN%.*}" ]; then
814 SUM=`sum "${PLUGIN_DIR}/Contents/MacOS/${PLUGIN%.*}"`
815 echo "\tsum: ${SUM}" >> versions 2>&1
816
817 LSINFO=`ls -lu "${PLUGIN_DIR}/Contents/MacOS/${PLUGIN%.*}"`
818 echo "\tadditional info: ${LSINFO}" >> versions 2>&1
819 elif [ -f "${PLUGIN_DIR}/${PLUGIN%.*}" ]; then
820 SUM=`sum "${PLUGIN_DIR}/${PLUGIN%.*}"`
821 echo "\tsum: ${SUM}" >> versions 2>&1
822
823 LSINFO=`ls -lu "${PLUGIN_DIR}/${PLUGIN%.*}"`
824 echo "\tadditional info: ${LSINFO}" >> versions 2>&1
825 fi
826
827 echo "" >> versions 2>&1
828 done
829}
830
831if [ -x /usr/bin/what -a -x /usr/bin/sum -a -x /bin/ls ]; then
832 get_binary_info
833 get_plugins_info
834fi
835
836#
837# to give a chance for "networkd" to finish dumping its state, the last
838# thing we do is collect the logs
839#
840
841#
842# system log, kernel.log, early boot log messages
843#
844if [ -x /usr/bin/syslog ]; then
845 #
846 # save the recent activity
847 #
848 ${PRIV} /usr/bin/syslog -T local.3 \
849 | ${TAIL_25000} > syslog
850
851 #
852 # save just the "kernel" activity (in case some of the
853 # interesting/relevant message are before the messages
854 # captured above.
855 #
856 ${PRIV} /usr/bin/syslog -T local.3 -k Facility kern \
857 | ${TAIL_25000} > kernel
858
859 if [ -d /var/log/DiagnosticMessages ]; then
860 # save any MessageTracer activity
861 ${PRIV} /usr/bin/syslog -d /var/log/DiagnosticMessages \
862 -F raw \
863 -T local.3 \
864 | ${TAIL_25000} > DiagnosticMessages
865 fi
866else
867 if [ -f /var/log/system.log ]; then
868 ${PRIV} ${TAIL_25000} /var/log/system.log > system.log
869 fi
870 if [ -f /var/log/kernel.log ]; then
871 ${PRIV} ${TAIL_25000} /var/log/kernel.log > kernel.log
872 fi
873fi
874if [ -x /sbin/dmesg ]; then
875 ${PRIV} /sbin/dmesg > dmesg
876fi
877
878#
879# IPConfiguration log
880#
881if [ -f /var/log/com.apple.IPConfiguration.bootp ]; then
882 ${PRIV} ${TAIL_2000} /var/log/com.apple.IPConfiguration.bootp \
883 > com.apple.IPConfiguration.bootp
884fi
885
886#
887# ppp log file(s)
888#
889scutil <<_END_OF_INPUT \
890| awk -F' *: *' \
891 ' \
892 /Logfile : / { \
893 if (index($2, "/") == 1) { print $2 } \
894 else { print "/var/log/ppp/" $2 } \
895 } \
896 END { \
897 print "/tmp/pppotcp.log" \
898 } \
899 ' \
900| sort -u \
901| while read logFile
902open
903show Setup:/Network/Service/[^/]+/PPP pattern
904quit
905_END_OF_INPUT
906do
907 if [ -f "${logFile}" ]; then
908 b="`basename ${logFile}`"
909 cat "${logFile}" > "${b}" 2>&1
910 fi
911done
912
913#
914# application firewall log
915#
916if [ -f /var/log/appfirewall.log ]; then
917 ${PRIV} ${TAIL_2000} /var/log/appfirewall.log > appfirewall.log
918fi
919
920if [ -x /bin/ls ]; then
921 #
922 # collect crash reports
923 #
924 for daemon in \
925 InternetSharing \
926 SCHelper \
927 SCMonitor \
928 awacsd \
929 bootpd \
930 configd \
931 discoveryd \
932 discoveryd_helper \
933 eapolclient \
934 pppd \
935 racoon \
936 socketfilterfw \
937
938 do
939 /bin/ls -1 /Library/Logs/DiagnosticReports/${daemon}_*.crash \
940 /Library/Logs/DiagnosticReports/${daemon}_*.ips \
941 /Library/Logs/CrashReporter/${daemon}_*.crash \
942 /Library/Logs/CrashReporter/${daemon}_*.ips \
943 /Library/Logs/CrashReporter/${daemon}_*.plist \
944 2>/dev/null \
945 | while read log
946 do
947 if [ -f "${log}" ]; then
948 b="`basename ${log}`"
949 ${PRIV} cat "${log}" > "${b}" 2>&1
950 fi
951 done
952 done
953
954 #
955 # collect any verbose logging output
956 #
957 /bin/ls -1 /Library/Logs/CrashReporter/com.apple.networking.*.log* \
958 2>/dev/null \
959 | while read log
960 do
961 if [ -f "${log}" ]; then
962 b="`basename ${log}`"
963 ${PRIV} cat "${log}" > "${b}" 2>&1
964 fi
965 done
966fi
967
968#
969# stackshot
970#
971if [ -x /usr/local/bin/crstackshot ]; then
972 /usr/local/bin/crstackshot 2>/dev/null
973fi
974
975#
976# collect everything into a single archive
977#
978cd "${WORKDIR}/.."
979tar -c ${GZ_OPT} -f "${ARCHIVE}" "${OUT}"
980rm -rf "${WORKDIR}"
981
982if [ ${UID} -eq 0 ]; then
983 if [ -n "${SUDO_UID}" -a -n "${SUDO_GID}" ]; then
984 if [ ${UID} -ne ${SUDO_UID} ]; then
985 chown ${SUDO_UID}:${SUDO_GID} "${ARCHIVE}"
986 fi
987 fi
988fi
989
990echo "Network data collected to \"${ARCHIVE}\""
991