]> git.saurik.com Git - apple/configd.git/blob - get-mobility-info
configd-453.18.tar.gz
[apple/configd.git] / get-mobility-info
1 #!/bin/sh
2 # Copyright (c) 2004-2012 Apple Inc.
3 #
4 # get-mobility-info
5 #
6 # Collect system & network configuration information.
7 #
8
9 PATH=/bin:/usr/bin:/sbin:/usr/sbin
10
11 PRIV=""
12 if [ ${EUID} -ne 0 ]; then
13 PRIV="sudo"
14 fi
15
16 OUT="mobility-info-`date +'%m.%d.%Y.%H%M%S'`"
17 OUTDIR="/var/tmp"
18 if [ -d ~/Desktop ]; then
19 OUTDIR=~/Desktop
20 elif [ "`readlink /tmp`" = "private/var/tmp" ]; then
21 OUTDIR=/Library/Logs/CrashReporter/SystemConfiguration
22 mkdir -p ${OUTDIR}
23 fi
24
25 umask 077
26
27 WORKDIR=`mktemp -d -q "/tmp/${OUT}"`
28 if [ $? -ne 0 ]; then
29 echo "Could not create snapshot directory"
30 exit 1
31 fi
32
33 GZ_EXT=""
34 GZ_OPT=""
35 if [ -x /usr/bin/gzip ]; then
36 GZ_EXT=".gz"
37 GZ_OPT="-z"
38 fi
39
40 ARCHIVE=`mktemp -q "${OUTDIR}/${OUT}.tar${GZ_EXT}"`
41 if [ $? -ne 0 ]; then
42 echo "Could not create snapshot archive"
43 rm -rf "${WORKDIR}"
44 exit 1
45 fi
46
47 cd "${WORKDIR}"
48
49 echo ""
50 echo "Please wait, collecting information and statistics"
51 echo ""
52
53 #
54 # processes
55 #
56 ps axlww > ps 2>&1
57
58 #
59 # network interface configuration
60 #
61 ifconfig -a -L -b -m -r -v > ifconfig 2>&1
62 if [ $? -ne 0 ]; then
63 ifconfig -a > ifconfig 2>&1
64 fi
65
66 #
67 # network route configuration
68 #
69 netstat -n -r -a -l > netstat 2>&1
70
71 #
72 # DHCP configuration
73 #
74 for if in `ifconfig -l`
75 do
76 case ${if} in
77 lo* ) ;;
78 en* ) ipconfig getpacket ${if} > ipconfig-${if} 2>&1
79 ;;
80 esac
81 done
82
83 #
84 # AirPort info
85 #
86 if [ -x /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport ]; then
87 /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport --getinfo \
88 > airport 2>&1
89 fi
90
91 #
92 # OS info
93 #
94 if [ -e /System/Library/CoreServices/SystemVersion.plist ]; then
95 cat /System/Library/CoreServices/SystemVersion.plist \
96 > SystemVersion.plist 2>&1
97 fi
98 if [ -e /System/Library/CoreServices/ServerVersion.plist ]; then
99 cat /System/Library/CoreServices/ServerVersion.plist \
100 > ServerVersion.plist 2>&1
101 fi
102
103 #
104 # IOKit info
105 #
106 ioreg -i -l -w 0 > ioreg 2>&1
107 ioreg -i -l -p IODeviceTree -w 0 >> ioreg 2>&1
108
109 #
110 # Power Management info
111 #
112 echo "#" > pmset
113 echo "# pmset -g" >> pmset
114 echo "#" >> pmset
115 pmset -g >> pmset 2>&1
116
117 echo "#" >> pmset
118 echo "# pmset -g ps" >> pmset
119 echo "#" >> pmset
120 pmset -g ps >> pmset 2>&1
121
122 echo "#" >> pmset
123 echo "# pmset -g assertions" >> pmset
124 echo "#" >> pmset
125 pmset -g assertions >> pmset 2>&1
126
127 echo "#" >> pmset
128 echo "# pmset -g log" >> pmset
129 echo "#" >> pmset
130 pmset -g log | tail -n 25000 >> pmset 2>&1
131
132 #
133 # Host name
134 #
135 hostname > hostname 2>&1
136
137 #
138 # Host configuration
139 #
140 hostinfo > hostinfo 2>&1
141 if [ -e /etc/hostconfig ]; then
142 cat /etc/hostconfig > etc.hostconfig 2>&1
143 fi
144
145 #
146 # DNS configuration
147 #
148 scutil --dns > dns-configuration 2>&1
149 if [ -e /etc/resolv.conf ]; then
150 cat /etc/resolv.conf > etc.resolv.conf 2>&1
151 fi
152 if [ -e /var/run/resolv.conf ]; then
153 cat /var/run/resolv.conf > var.run.resolv.conf 2>&1
154 fi
155
156 #
157 # Proxy configuration
158 #
159 scutil -d -v --proxy > proxy-configuration 2>&1
160
161 #
162 # Network information
163 #
164 scutil --nwi > network-information 2>&1
165
166 #
167 # System / network preferences
168 #
169 for f in \
170 /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist \
171 /Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist \
172 /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist \
173 /Library/Preferences/SystemConfiguration/com.apple.nat.plist \
174 /Library/Preferences/SystemConfiguration/com.apple.smb.server.plist \
175 /Library/Preferences/SystemConfiguration/com.apple.wifi.plist \
176 /Library/Preferences/SystemConfiguration/preferences.plist \
177 /Library/Preferences/com.apple.alf.plist \
178 /Library/Preferences/com.apple.sharing.firewall.plist \
179 /Library/Preferences/com.apple.wwand.plist \
180
181 do
182 if [ -e "${f}" ]; then
183 b="`basename ${f}`"
184 cat "${f}" > "${b}" 2>&1
185 fi
186 done
187
188 #
189 # InternetSharing
190 #
191 if [ -e /etc/bootpd.plist ]; then
192 cat /etc/bootpd.plist > bootpd.plist 2>&1
193 cat /etc/com.apple.named.proxy.conf > com.apple.named.proxy.conf 2>/dev/null
194 elif [ -e /Library/Preferences/SystemConfiguration/bootpd.plist ]; then
195 cat /Library/Preferences/SystemConfiguration/bootpd.plist > bootpd.plist 2>&1
196 cat /Library/Preferences/SystemConfiguration/com.apple.named.proxy.conf > com.apple.named.proxy.conf 2>/dev/null
197 fi
198
199 #
200 # configd's cache
201 #
202 ${PRIV} scutil -p --snapshot
203 if [ -f /var/tmp/configd-store.plist ]; then
204 cat /var/tmp/configd-store.plist > configd-store.plist 2>&1
205 fi
206 if [ -f /var/tmp/configd-pattern.plist ]; then
207 cat /var/tmp/configd-pattern.plist > configd-pattern.plist 2>&1
208 fi
209 if [ -f /var/tmp/configd-session.plist ]; then
210 cat /var/tmp/configd-session.plist > configd-session.plist 2>&1
211 fi
212 if [ -f /var/tmp/configd-state ]; then
213 cat /var/tmp/configd-state > configd-state 2>&1
214 fi
215 if [ -f /var/tmp/configd-reachability ]; then
216 cat /var/tmp/configd-reachability > configd-reachability 2>&1
217 fi
218
219 #
220 # network reachability
221 #
222 scutil -d -v -r www.apple.com "" no-server > reachability-info 2>&1
223 if [ -x /usr/bin/dig -a -f /etc/resolv.conf ]; then
224 /usr/bin/dig -t any -c any www.apple.com > dig-results 2>/dev/null
225 fi
226
227 #
228 # mounted filesystems
229 #
230 mount > mounted-filesystems 2>&1
231
232 #
233 # mDNSResponder, networkd info
234 #
235 if [ -x /usr/bin/killall ]; then
236 ${PRIV} killall -INFO mDNSResponder
237 ${PRIV} killall -INFO networkd
238
239 # and wait a short amount of time for mDNSResponder
240 # to actually log the requested information
241 sleep 15
242 fi
243
244 #
245 # awacsd info
246 #
247 if [ -x /usr/sbin/awacsd -a -x /usr/bin/killall ]; then
248 ${PRIV} killall -INFO awacsd 2>/dev/null
249
250 # and wait a short amount of time for awacsd
251 # to actually log the requested information
252 sleep 1
253 fi
254
255 #
256 # system log, kernel.log, early boot log messages
257 #
258 if [ -x /usr/bin/syslog ]; then
259 # save the recent activity
260 ${PRIV} syslog | tail -n 25000 > syslog
261
262 # save just the "kernel" activity (in case some of the
263 # interesting/relevant message are before the messages
264 # captured above.
265 ${PRIV} syslog -k Facility kern | tail -n 25000 > kernel
266
267 if [ -d /var/log/DiagnosticMessages ]; then
268 # save any MessageTracer activity
269 ${PRIV} syslog -d /var/log/DiagnosticMessages \
270 -F raw \
271 -T local \
272 | tail -n 25000 > DiagnosticMessages
273 fi
274 else
275 if [ -f /var/log/system.log ]; then
276 ${PRIV} tail -n 25000 /var/log/system.log > system.log
277 fi
278 if [ -f /var/log/kernel.log ]; then
279 ${PRIV} tail -n 25000 /var/log/kernel.log > kernel.log
280 fi
281 fi
282 ${PRIV} dmesg > dmesg
283
284 #
285 # IPConfiguration log
286 #
287 if [ -f /var/log/com.apple.IPConfiguration.bootp ]; then
288 ${PRIV} tail -n 2000 /var/log/com.apple.IPConfiguration.bootp \
289 > com.apple.IPConfiguration.bootp
290 fi
291
292 #
293 # ppp log file(s)
294 #
295 scutil <<_END_OF_INPUT \
296 | awk -F' *: *' \
297 ' \
298 /Logfile : / { \
299 if (index($2, "/") == 1) { print $2 } \
300 else { print "/var/log/ppp/" $2 } \
301 } \
302 END { \
303 print "/tmp/pppotcp.log" \
304 } \
305 ' \
306 | sort -u \
307 | while read logFile
308 open
309 show Setup:/Network/Service/[^/]+/PPP pattern
310 quit
311 _END_OF_INPUT
312 do
313 if [ -f "${logFile}" ]; then
314 b="`basename ${logFile}`"
315 cat "${logFile}" > "${b}" 2>&1
316 fi
317 done
318
319 #
320 # application firewall log
321 #
322 if [ -f /var/log/appfirewall.log ]; then
323 ${PRIV} tail -n 2000 /var/log/appfirewall.log > appfirewall.log
324 fi
325
326 #
327 # kernel extensions statistic
328 #
329 if [ -x /usr/sbin/kextstat ]; then
330 kextstat > kextstat 2>&1
331 elif [ -x /usr/sbin/kmodstat ]; then
332 kmodstat > kmodstat 2>&1
333 fi
334
335 #
336 # network statistics
337 #
338 echo "#" > network-statistics
339 echo "# arp -n -a" >> network-statistics
340 echo "#" >> network-statistics
341 arp -n -a >> network-statistics 2>&1
342
343 echo "#" >> network-statistics
344 echo "# netstat -n -a -A" >> network-statistics
345 echo "#" >> network-statistics
346 netstat -n -a -A >> network-statistics 2>&1
347
348 echo "#" >> network-statistics
349 echo "# netstat -s" >> network-statistics
350 echo "#" >> network-statistics
351 netstat -s >> network-statistics 2>&1
352
353 echo "#" >> network-statistics
354 echo "# netstat -mmm" >> network-statistics
355 echo "#" >> network-statistics
356 netstat -mmm >> network-statistics 2>&1
357
358 echo "#" >> network-statistics
359 echo "# netstat -i -n -d" >> network-statistics
360 echo "#" >> network-statistics
361 netstat -i -n -d >> network-statistics 2>&1
362
363 echo "#" >> network-statistics
364 echo "# netstat -g -n -s" >> network-statistics
365 echo "#" >> network-statistics
366 netstat -g -n -s >> network-statistics 2>&1
367
368 if [ -x /usr/sbin/ndp ]; then
369 echo "#" >> network-statistics
370 echo "# ndp -n -a" >> network-statistics
371 echo "#" >> network-statistics
372 ndp -n -a >> network-statistics 2>&1
373
374 echo "#" >> network-statistics
375 echo "# ndp -n -p" >> network-statistics
376 echo "#" >> network-statistics
377 ndp -n -p >> network-statistics 2>&1
378
379 echo "#" >> network-statistics
380 echo "# ndp -n -r" >> network-statistics
381 echo "#" >> network-statistics
382 ndp -n -r >> network-statistics 2>&1
383
384 for if in `ifconfig -l`
385 do
386 echo "#" >> network-statistics
387 echo "# ndp -i ${if}" >> network-statistics
388 echo "#" >> network-statistics
389 ndp -i ${if} >> network-statistics 2>&1
390 done
391 fi
392
393 if [ -x /sbin/ipfw ]; then
394 echo "#" >> network-statistics
395 echo "# ipfw -at show" >> network-statistics
396 echo "#" >> network-statistics
397 ${PRIV} ipfw -at show >> network-statistics 2>&1
398 fi
399
400 if [ -x /sbin/ip6fw ]; then
401 echo "#" >> network-statistics
402 echo "# ip6fw -at show" >> network-statistics
403 echo "#" >> network-statistics
404 ${PRIV} ip6fw -at show >> network-statistics 2>&1
405 fi
406
407 if [ -x /sbin/pfctl ]; then
408 echo "#" > pf
409 echo "# pfctl -s all" >> pf
410 echo "#" >> pf
411 ${PRIV} pfctl -s all >> pf 2>&1
412 echo "==============================" >> pf
413 echo "#" >> pf
414 echo "# pfctl -s References" >> pf
415 echo "#" >> pf
416 ${PRIV} pfctl -s References >> pf 2>&1
417 for ANCHOR in `${PRIV} pfctl -s Anchors -v 2>/dev/null`
418 do
419 echo "==============================" >> pf
420 echo "#" >> pf
421 echo "# pfctl -a ${ANCHOR} -s all" >> pf
422 echo "#" >> pf
423 ${PRIV} pfctl -a ${ANCHOR} -s all >> pf 2>&1
424 done
425 fi
426
427 if [ -x /usr/sbin/lsof ]; then
428 echo "#" >> network-statistics
429 echo "# lsof -i -U -n -P" >> network-statistics
430 echo "#" >> network-statistics
431 ${PRIV} lsof -i -U -n -P >> network-statistics 2>&1
432 fi
433
434 #
435 # DirectoryService info
436 #
437 if [ -x /usr/bin/odutil ]; then
438 echo "#" > od-info
439 echo "# odutil show all" >> od-info
440 echo "#" >> od-info
441 ${PRIV} odutil show all >> od-info 2>&1
442 elif [ -x /usr/bin/dscacheutil ]; then
443 echo "#" > ds-info
444 echo "# dscacheutil -configuration" >> ds-info
445 echo "#" >> ds-info
446 dscacheutil -configuration >> ds-info 2>&1
447
448 echo "#" >> ds-info
449 echo "# dscacheutil -statistics" >> ds-info
450 echo "#" >> ds-info
451 dscacheutil -statistics >> ds-info 2>&1
452
453 echo "#" >> ds-info
454 echo "# dscacheutil -cachedump -entries" >> ds-info
455 echo "#" >> ds-info
456 dscacheutil -cachedump -entries >> ds-info 2>&1
457 fi
458
459 #
460 # IPsec configuration
461 #
462 echo "#" > ipsec
463 echo "# setkey -D" >> ipsec
464 echo "#" >> ipsec
465 ${PRIV} setkey -D \
466 | perl -M'Digest::MD5 qw(md5_hex)' -l -n -e '
467 if (/^(\s+[AE]:\s+\S+\s+)"?(.*)"?\s*$/) {
468 printf "%s[MD5:%s]%s\n", $1, md5_hex($2 . "\n"), $3;
469 } else {
470 printf "%s\n", $_;
471 }
472 ' >> ipsec
473
474 echo "" >> ipsec
475 echo "#" >> ipsec
476 echo "# setkey -Pp -D" >> ipsec
477 echo "#" >> ipsec
478 ${PRIV} setkey -Pp -D >> ipsec
479
480 for CF in /var/run/racoon/*.conf
481 do
482 if [ ! -r "${CF}" ]; then
483 continue
484 fi
485
486 echo "" >> ipsec
487 echo "#" >> ipsec
488 echo "# ${CF}" >> ipsec
489 echo "#" >> ipsec
490 ${PRIV} cat ${CF} \
491 | perl -M'Digest::MD5 qw(md5_hex)' -l -n -e '
492 if (/^(\s+shared_secret\s+use\s+)"?([^\s;"]+)"?(.*)/) {
493 printf "%s[MD5:%s]%s\n", $1, md5_hex($2 . "\n"), $3;
494 } else {
495 printf "%s\n", $_;
496 }
497 ' >> ipsec
498 done
499
500 #
501 # Kerberos configuration
502 #
503 if [ -x /usr/bin/klist ]; then
504 echo "#" > kerberos
505 echo "# klist -e -c -A -f -a -n" >> kerberos
506 echo "#" >> kerberos
507 ${PRIV} klist -e -c -A -f -a -n >> kerberos 2>&1
508
509 echo "#" >> kerberos
510 echo "# klist -e -k -t -K" >> kerberos
511 echo "#" >> kerberos
512 ${PRIV} klist -e -k -t -K >> kerberos 2>&1
513 fi
514
515 #
516 # BTMM configuration
517 #
518
519 BTMM_CLEANUP()
520 {
521 rm -f .btmmfifo .btmminfo .digsync
522 }
523
524 BTMM_SETUP()
525 {
526 BTMM_CLEANUP
527 mkfifo .btmmfifo
528
529 BTMMPORT=40000
530 while nc -6z ::1 "${PORT}" > /dev/null 2>&1
531 do
532 BTMMPORT=$((PORT + 1))
533 done
534 }
535
536 BTMM_CHECKMACDOTCOM()
537 {
538 TAIL=`echo "${1}" | cut -d. -f2-`
539 if [ "${TAIL}" = "members.mac.com" ]; then
540 return 0
541 fi
542
543 return 1
544 }
545
546 # get DNS info
547 # params: QUERYNAME QUERYTYPE
548 BTMM_DIG()
549 {
550 rm -f .digsync
551
552 nc -6 -l "${BTMMPORT}" < .btmmfifo \
553 | openssl s_client -connect "${HOSTPORT}" -quiet > .btmmfifo 2>.digsync &
554
555 N_RETRY=0
556 while [ $N_RETRY -lt 50 -a ! -s .digsync ]
557 do
558 N_RETRY=$((N_RETRY + 1))
559 sleep 0.1
560 done
561
562 dig @::1 -p "${BTMMPORT}" \
563 -y "${TSIG}" \
564 +short \
565 +tcp \
566 "${1}" "${2}" 2>/dev/null
567
568 wait %1
569 }
570
571 # get the unique identifier used to lookup the keychain item for a zone
572 # params: ZONE
573 BTMM_UNIQUEIDFROMZONE()
574 {
575 BTMM_CHECKMACDOTCOM "${1}"
576 if [ $? -eq 0 ]; then
577 echo "dns:${1}"
578 else
579 echo "btmmdns:${1}"
580 fi
581 }
582
583 # get hostname, port, TSIG name and TSIG data from keychain
584 # params: UNIQUEID
585 BTMM_GETINFO()
586 {
587 ${PRIV} security find-generic-password \
588 -s "${1}" \
589 -g /Library/Keychains/System.keychain > .btmminfo 2>/dev/null
590 ${PRIV} security find-generic-password \
591 -s "${1}" \
592 -g /Library/Keychains/System.keychain \
593 2>&1 > /dev/null \
594 | sed -n 's/^password: \"\(.*\)\"$/\1/p'
595 }
596
597 # params: ZONE
598 BTMM_URLISH()
599 {
600 BTMM_CHECKMACDOTCOM "${1}"
601 if [ $? -eq 0 ]; then
602 echo "pm-members.mac.com.:443"
603 else
604 cat .btmminfo | sed -n 's/.*0x00000007 <blob>=\"\(.*\)\"/\1/p'
605 fi
606 }
607
608 BTMM_RELAYINFO()
609 {
610 BTMM_CHECKMACDOTCOM "${1}"
611 if [ $? -eq 0 ]; then
612 return
613 fi
614
615 SECRET=`BTMM_GETINFO "btmmrelay:${1}"`
616
617 if [ -z "${SECRET}" ]; then
618 echo " No Relay keychain item." >> btmm
619 return
620 fi
621
622 if [ `echo "${SECRET}" | wc -l` -ne 1 ]; then
623 echo " More than one Relay keychain item." >> btmm
624 return
625 fi
626
627 URLISH=`BTMM_URLISH "${DOMAIN}"`
628 ACCOUNT=`cat .btmminfo | sed -n 's/.*\"acct\"<blob>=\"\(.*\)\"/\1/p'`
629 KEYHASH="`perl -M'Digest::SHA1 qw(sha1_hex)' -l -e '
630 printf "[SHA1:%s]\n", sha1_hex($ARGV[0] . "\n");
631 ' ${SECRET}`"
632 echo " RHP: ${URLISH}" >> btmm
633 echo " RAC: ${ACCOUNT}" >> btmm
634 echo " RKY: ${KEYHASH}" >> btmm
635 }
636
637 BTMM_REPORTZONE()
638 {
639 DOMAIN="${1}"
640
641 echo >> btmm
642 echo "${DOMAIN}" >> btmm
643
644 DNSID=`BTMM_UNIQUEIDFROMZONE "${DOMAIN}"`
645 SECRET=`BTMM_GETINFO "${DNSID}"`
646
647 if [ -z "${SECRET}" ]; then
648 echo " No DNS keychain item." >> btmm
649 return
650 fi
651
652 if [ `echo "${SECRET}" | wc -l` -ne 1 ]; then
653 echo " More than one DNS keychain item." >> btmm
654 return
655 fi
656
657 URLISH=`BTMM_URLISH "${DOMAIN}"`
658 HOSTPORT=`echo "${URLISH}" | cut -d@ -f2`
659 ACCOUNT=`cat .btmminfo | sed -n 's/.*\"acct\"<blob>=\"\(.*\)\"/\1/p'`
660 TSIG="${ACCOUNT}:${SECRET}"
661
662 KEYHASH="`perl -M'Digest::SHA1 qw(sha1_hex)' -l -e '
663 printf "[SHA1:%s]\n", sha1_hex($ARGV[0] . "\n");
664 ' ${SECRET}`"
665 echo "" >> btmm
666 echo " DHP: ${URLISH}" >> btmm
667 echo " DAC: ${ACCOUNT}" >> btmm
668 echo " DKY: ${KEYHASH}" >> btmm
669
670 BTMM_RELAYINFO "${DOMAIN}"
671
672 REACHHOST=`echo "${HOSTPORT}" | cut -d: -f1`
673 STATUSES=`scutil -r "${REACHHOST}"`
674 for REACHSTATUS in `echo ${STATUSES} | tr -d ' ' | tr ',' ' '`; do
675 if [ "$REACHSTATUS" == "NotReachable" ] \
676 || [ "$REACHSTATUS" == "ConnectionRequired" ]; then
677 echo " Skipping DNS queries, no connectivity" >> btmm
678 return
679 fi
680 done
681
682 for TYPE in \
683 _afpovertcp._tcp \
684 _airport._tcp \
685 _adisk._tcp \
686 _http._tcp \
687 _rfb._tcp \
688 _smb._tcp \
689 _ssh._tcp
690 do
691 BTMM_DIG "${TYPE}.${DOMAIN}" ptr \
692 | while read -r REG
693 do
694 echo "" >> btmm
695 /bin/echo " ${REG}" >> btmm
696 echo "" >> btmm
697
698 INF_Q=`/bin/echo "${REG}" | sed -e "s/${TYPE}/_device-info._tcp/"`
699 INF=`BTMM_DIG "${INF_Q}" txt`
700 echo " INF: ${INF}" >> btmm
701
702 SRV=`BTMM_DIG ${REG} srv`
703 SRV1=`/bin/echo "${SRV}" | head -1`
704 echo " SRV: ${SRV1}" >> btmm
705 SRV2=`/bin/echo "${SRV}" | tail +2`
706 if [ -n "${SRV2}" ]; then
707 SRV="${SRV1}"
708 /bin/echo "${SRV2}" \
709 | sed -e 's/^/ *****: /' >> btmm
710 fi
711
712 TXT=`BTMM_DIG ${REG} txt`
713 TXT1=`/bin/echo "${TXT}" | head -1`
714 echo " TXT: ${TXT1}" >> btmm
715 TXT2=`/bin/echo "${TXT}" | tail +2`
716 if [ -n "${TXT2}" ]; then
717 /bin/echo "${TXT2}" \
718 | sed -e 's/^/ *****: /' >> btmm
719 fi
720
721 HOST=`/bin/echo "${SRV}" | cut -d ' ' -f 4-`
722 if [ -n "${HOST}" ]; then
723 V4=`BTMM_DIG ${HOST} a`
724 V6=`BTMM_DIG ${HOST} aaaa`
725 KRB=`BTMM_DIG _kerberos.${HOST} txt`
726 TUN=`BTMM_DIG _autotunnel._udp.${HOST} srv`
727 AT6=`BTMM_DIG _autotunnel6.${HOST} aaaa`
728 else
729 V4=""
730 V6=""
731 KRB=""
732 TUN=""
733 AT6=""
734 fi
735 if [ -n "${V4}" ]; then
736 echo " v4: ${V4}" >> btmm
737 fi
738 if [ -n "${V6}" ]; then
739 echo " v6: ${V6}" >> btmm
740 fi
741 if [ -n "${KRB}" ]; then
742 echo " KRB: ${KRB}" >> btmm
743 fi
744 if [ -n "${TUN}" ]; then
745 echo " TUN: ${TUN}" >> btmm
746
747 HOST=`/bin/echo "${TUN}" | cut -d ' ' -f 4-`
748 if [ -n "${HOST}" ]; then
749 V4=`BTMM_DIG ${HOST} a`
750 V6=`BTMM_DIG ${HOST} aaaa`
751 fi
752 if [ -n "${V4}" ]; then
753 echo " v4: ${V4}" >> btmm
754 fi
755 if [ -n "${V6}" ]; then
756 echo " v6: ${V6}" >> btmm
757 fi
758 fi
759 if [ -n "${AT6}" ]; then
760 echo " AT6: ${AT6}" >> btmm
761 fi
762 done
763 done
764 }
765
766 BTMM_SETUP
767
768 scutil <<_END_OF_INPUT \
769 | sed -n 's@.* : *\(.*\)$@\1@p' \
770 | sort \
771 | while read DOMAIN
772 open
773 show Setup:/Network/BackToMyMac
774 quit
775 _END_OF_INPUT
776 do
777 BTMM_REPORTZONE "$DOMAIN"
778 done
779
780 BTMM_CLEANUP
781
782 #
783 # collect crash reports
784 #
785 for daemon in \
786 bootpd \
787 configd \
788 eapolclient \
789 mDNSResponder \
790 mDNSResponderHelper \
791 awacsd \
792 pppd \
793 racoon \
794 socketfilterfw \
795 InternetSharing \
796 SCHelper \
797 SCMonitor \
798
799 do
800 /bin/ls -1 /Library/Logs/DiagnosticReports/${daemon}_*.crash \
801 /Library/Logs/CrashReporter/${daemon}_*.crash \
802 /Library/Logs/CrashReporter/${daemon}_*.plist \
803 2>/dev/null \
804 | while read log
805 do
806 if [ -f "${log}" ]; then
807 b="`basename ${log}`"
808 ${PRIV} cat "${log}" > "${b}" 2>&1
809 fi
810 done
811 done
812
813 #
814 # system profiler
815 #
816 if [ -x /usr/sbin/system_profiler ]; then
817 system_profiler -xml SPEthernetDataType \
818 SPFibreChannelDataType \
819 SPFireWireDataType \
820 SPFirewallDataType \
821 SPModemDataType \
822 SPNetworkDataType \
823 SPThunderboltDataType \
824 SPWWANDataType \
825 SPAirPortDataType > system_profiler.spx 2>&1
826 fi
827
828 #
829 # system usage statistics
830 #
831 echo "#" > system-statistics
832 echo "# uptime" >> system-statistics
833 echo "#" >> system-statistics
834 uptime >> system-statistics 2>&1
835
836 echo "#" >> system-statistics
837 echo "# sysctl -a" >> system-statistics
838 echo "#" >> system-statistics
839 sysctl -a >> system-statistics 2>&1
840
841 echo "#" >> system-statistics
842 echo "# zprint" >> system-statistics
843 echo "#" >> system-statistics
844 zprint >> system-statistics 2>&1
845
846 echo "#" >> system-statistics
847 echo "# top -l5 -s2" >> system-statistics
848 echo "#" >> system-statistics
849 top -s 2 -l 5 >> system-statistics 2>&1
850
851 #
852 # collect everything into a single archive
853 #
854 cd "${WORKDIR}/.."
855 if [ -x /usr/bin/tar ]; then
856 tar -c ${GZ_OPT} -f "${ARCHIVE}" "${OUT}"
857 else
858 pax -w ${GZ_OPT} -f "${ARCHIVE}" "${OUT}"
859 fi
860 rm -rf "${WORKDIR}"
861
862 if [ ${UID} -eq 0 ]; then
863 if [ -n "${SUDO_UID}" -a -n "${SUDO_GID}" ]; then
864 if [ ${UID} -ne ${SUDO_UID} ]; then
865 chown ${SUDO_UID}:${SUDO_GID} "${ARCHIVE}"
866 fi
867 fi
868 fi
869
870 echo "Network data collected to \"${ARCHIVE}\""
871
872 #
873 # if requested, generate a crash report
874 #
875 if [ "${OUTDIR}" = "/Library/Logs/CrashReporter/SystemConfiguration" -a "${1}" = "CRASH" ]; then
876 kill -ABRT $$
877 fi
878