Re: Mail von Cron kommen nicht an

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Tue, 21 Jun 2005 10:27:14 +0200 (CEST)

Matthias Fechner <idefix(at)fechner.net> wrote:
> Ich bekomme das folgende, mit der Originalversion von cron:
> --- cut ---
> basename: /usr/local/sbin/exim
> arg: -FCronDaemon
> arg: -odi
> arg: -oem
> arg: -oi
> arg: -t
> reading from stdin
> caller closed stdin
> --- cut ---

Kann es sein, daß der Child-Prozeß vom cron mit irgendeinem
Signal (SIGSEGV o.ä.) stirbt? Hast Du mal geschaut, ob ein
coredump herumliegt (in »/« oder in »/root«), oder ob sowas
in /var/log/messages geloggt wurde? (Du solltest coredumps
natürlich nicht ausgeschaltet haben [per login.conf oder
sysctl].)

> Wenn ich die Flags ganz raus nehme, ändert das nichts.
> Mit -O1 und -00 das gleiche Problem.
> -march habe ich da komplett weggelassen, keine Besserung.
> -pipe wegelassen, macht auch keinen Unterschied.

OK, also wohl kein Compiler-bug.

> > Falls das nichts ändert: Kannst Du mal von einem funktio-
> > nierenden und einem nicht funktionierenden cron-Binary ein
> > Disassembly-Listing der betreffenden Funktion machen, und
> > dann von beiden ein diff? (Am besten nur mit -O0 -g compi-
> > liert.)
>
> wie kann ich den ein Disassembly-Listing machen?

Ganz einfach: objdump -d cron

Wie gesagt, Du solltest beide Binaries mit denselben Flags
compiliert haben (damit man sie überhaupt miteinander ver-
gleichen kann), am besten -O0 -g. In der Ausgabe findest
Du die Funktion »child_process« ziemlich einfach. Bei mir
beginnt sie mit folgenden Zeilen:

0804ad74 <child_process>:
 804ad74: 55 push %ebp
 804ad75: 89 e5 mov %esp,%ebp
 804ad77: 81 ec 9c 05 00 00 sub $0x59c,%esp
 804ad7d: 57 push %edi
 804ad7e: 56 push %esi
 804ad7f: 53 push %ebx
 804ad80: c7 45 e4 00 00 00 00 movl $0x0,0xffffffe4(%ebp)
 804ad87: a1 cc 31 05 08 mov 0x80531cc,%eax
 804ad8c: 83 e0 04 and $0x4,%eax
 [...]

Für das diff mußt Du evtl. die Adreßspalte und die Hex-
Codes weglassen, da sie eh unterschiedlich sein können.
Im Zweifelsfall tu einfach mal beide Disassembly-Listings
auf einen Webserver oder so.

> > Noch 'ne Idee: Versuch mal ein cron-Binary aus einer be-
> > kannt funktionierenden Quelle, z.B. von einer FreeBSD-CD
> > (oder DVD) oder von einem FreeBSD-FTP-Server.
>
> das ändert auch nichts, genau das gleiche Verhalten.

Dann kann es _eigentlich_ nicht am cron liegen. Mysteriös.

Hmm. Vielleicht eine Art Resourcenkonflikt. Dein »Patch«
hat ja im Grunde genommen nur folgende Wirkungen:

1. Es wird eine zusätzliche automatische Variable belegt,
   d.h. das Stack-Layout ändert sich. Dies allein _sollte_
   keinen Effekt haben, es sei denn, es existiert ein Bug
   (z.B. eine uninitialisierte Variable oder ein Überlauf),
   der durch das geänderte Stack-layout zu verändertem Ver-
   halten führen kann.

   Gegen diese Theorie spricht aber, daß das Problem nur
   bei Dir auftritt, aber bei niemandem sonst, trotz iden-
   tischem Binary.

2. Es findet ein zusätzlicher Aufruf von fopen() statt, wo-
   durch ein weiterer Dateideskriptor belegt wird (bis zum
   späteren fclose()). Dadurch gibt es eine Verschiebung
   im Descriptor-table; auch dies _sollte_ keinen Effekt
   haben. Im Gegenteil, im Falle eines Resourcenengpasses
   sollte es mit dem zusätzlichen fopen() schiefgehen.

Was anderes tut der Patch eigentlich nicht.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
It's trivial to make fun of Microsoft products,
but it takes a real man to make them work,
and a God to make them do anything useful.
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 21 Jun 2005 - 10:28:08 CEST

search this site