Comment résoudre `bootpd` en panne constante sur Mac OS X 10.6.4 Snow Leopard Server?

J'ai un Mac Pro exécutant Mac OS X 10.6.4 Snow Leopard Server et il a récemment commencé à get de nombreux 'kNetworkError's dans Server Admin.app lors de la consultation des services. C'est en tant que passerelle w / NAT et ça l'a fait depuis un certain time.

Il y a un problème flagrant, bootpd bloque tout le time avec les erreurs suivantes dans `/var/log/system.log/:

 Aug 12 16:54:59 servername bootpd[3572]: server starting Aug 12 16:54:59 servername bootpd[3572]: server name servername.domain.tld Aug 12 16:54:59 servername bootpd[3572]: interface en0: ip 10.0.1.9 mask 255.255.255.0 Aug 12 16:54:59 servername bootpd[3572]: bsdpd: re-reading configuration Aug 12 16:54:59 servername bootpd[3572]: bsdpd: shadow file size will be set to 48 megabytes Aug 12 16:54:59 servername bootpd[3572]: bsdpd: age time 00:15:00 Aug 12 16:54:59 servername bootpd[3572]: [3572] detected buffer overflow Aug 12 16:54:59 servername com.apple.launchd[1] (com.apple.bootpd[3572]): Job appears to have crashed: Abort trap Aug 12 16:54:59 servername com.apple.ReportCrash.Root[3571]: 2010-08-12 16:54:59.828 ReportCrash[3571:2807] Saved crash report for bootpd[3572] version ??? (???) to /Library/Logs/DiagnosticReports/bootpd_2010-08-12-165459_localhost.crash 

Il est correctement configuré pour servir DHCP via en1 (not en0), le port "LAN". Cela se produit même sans matériel (interrupteurs pairs) connecté au port "LAN". Il n'y a pas de clients DHCP répertoriés. Curieusement, la «Vue d'set» montre 1 carte statique, mais rien n'est répertorié dans «Cartes statiques» et il n'y a pas de «Ordinateurs» dans Open Directory. /var/db/dhcp_leases est vide.

/Library/Logs/DiagnosticReports/bootpd_2010-08-12-165459_localhost.crash est comme suit:

 Process: bootpd [3572] Path: /usr/libexec/bootpd Identifier: bootpd Version: ??? (???) Code Type: X86-64 (Native) Parent Process: launchd [1] Date/Time: 2010-08-12 16:54:59.713 -0400 OS Version: Mac OS X Server 10.6.4 (10F569) Report Version: 6 Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Application Specific Information: __abort() called Thread 0 Crashed: Dispatch queue: com.apple.main-thread 0 libSystem.B.dylib 0x00007fff803c13d6 __kill + 10 1 libSystem.B.dylib 0x00007fff80461913 __abort + 103 2 libSystem.B.dylib 0x00007fff80456157 mach_msg_receive + 0 3 libSystem.B.dylib 0x00007fff803b92cf __strncpy_chk + 14 4 bootpd 0x0000000100014e5d PLCache_read + 782 5 bootpd 0x0000000100004a3d BSDPClients_init + 68 6 bootpd 0x00000001000053b5 bsdp_init + 2396 7 bootpd 0x000000010000200b S_update_services + 1228 8 bootpd 0x0000000100002344 S_server_loop + 571 9 bootpd 0x0000000100003963 main + 1766 10 bootpd 0x0000000100000984 start + 52 Thread 0 crashed with X86 Thread State (64-bit): rax: 0x0000000000000000 rbx: 0x00007fff5fbfe220 rcx: 0x00007fff5fbfe218 rdx: 0x0000000000000000 rdi: 0x0000000000000df4 rsi: 0x0000000000000006 rbp: 0x00007fff5fbfe240 rsp: 0x00007fff5fbfe218 r8: 0x0000000000000001 r9: 0x0000000100114280 r10: 0x00007fff803bd412 r11: 0xffffff80002e1680 r12: 0xffffffffffffffff r13: 0x00007fff5fbfe330 r14: 0x00007fff5fbfe33b r15: 0x00007fff7009bec0 rip: 0x00007fff803c13d6 rfl: 0x0000000000000202 cr2: 0x000000010004c000 

Des idées ou des suggestions pour résoudre ce problème?

D'accord, une solution trouvée.

J'ai googlé 'PLCache_read' (la dernière fonction répertoriée dans /Library/Logs/DiagnosticReports/bootpd_2010-08-12-165459_localhost.crash comme exécutée par bootpd avant le débordement de la memory tampon) et le deuxième coup était dans la source d'Apple pour bootpd ( bsdpd .c , specificall). BSDP_CLIENTS_FILE() passe la constante BSDP_CLIENTS_FILE , qui, en regardant le haut du file, est codée en dur comme /var/db/bsdpd_clients .

Vérification, /var/db/bsdpd_clients , j'ai trouvé un pseudo-plist contenant tous les clients NetBoot (callbackez-vous, NetBoot est construit sur bootp) et-bien sûr! -la dernière input a été coupée comme suit, laissant le file incomplet:

 { name=NetBoot060 identifier= 

Stoppé bootpd ( sudo serveradmin stop dhcp ), sauvegardé /var/db/bsdpd_clients et l'a vidé, puis démarré bootpd ( sudo serveradmin start dhcp ) et pas de panne!

Après un redémarrage, tous les autres services connexes (y compris NetBoot) sont maintenant sauvegardés et Server Admin.app ne lance plus les 'kNetworkError's.

Hmm … Le journal de crash montre que bootpd exécute une fonction appelée PLCache_read qui copy une string et qui, en quelque sorte, provoque le débordement de la memory tampon. (Par ailleurs, il semble que la source de bootpd soit disponible ici .)

Je suppose que bootpd lit un mauvais file de configuration ou reçoit de mauvaises données sur le réseau. J'essayerais d'exécuter:

 sudo fs_usage -w bootpd 

et voyez si cela donne un indice quant à la source du problème.

Il est clair que quelqu'un d'autre a eu ce problème , mais, n'étant pas enregistré, je ne sais pas s'ils ont eu une réponse utile. Le déplacement /etc/bootpd.plist peut aider.

Ah, vous avez trouvé une réponse pendant que je tapeais ceci. Eh bien, je publierai cette réponse de toute façon; Peut-être sera-t-il utile pour quelqu'un d'autre.

Je viens de résoudre exactement le même problème avec de légères différences.

J'utilise le client 10.6.5 (pas le server). Même message d'erreur (ou le même que j'ai pu voir).

PLCache_read était également le coupable, sauf que je n'avais aucun file / var / db / bsdpd_clients, et que créer un n'a pas résolu le problème.

Googling PLCache_read me conduit également au code Apple, sauf dans ce cas, il était dhcpd.c , ce qui m'a conduit à la variable codée

#define DHCP_LEASES_FILE "/var/db/dhcpd_leases"

et voici que / var / db / dhcpd_leases semblait être plein de déchets. Je l'ai déplacé vers un nom de file temporaire et maintenant le partage d'Internet fonctionne très bien.

Morgant, merci pour votre solution en profondeur. J'ai appris quelque chose sur la façon de lire les journaux de crash!