shadow: sendmail programm Pfad per Perl ermitteln

Wie oben genannt, ist es möglich per Perl den Pfad des Sendmail programmes zu ermitteln?

Danke im Vorraus

  1. Moin.

    $perlPath = which perl;
    print $perlPath;

    Geht aber nur, wenn Du Perl ausführen kannst - und der Pfed zu Perl schon bekannt ist ;-)

    Gruß Frank

    1. Moin.

      Oh - bin wohl noch nicht ganz wach...

      $sendmailPath = which sendmail;
      print $sendmailPath;

      Wichtig: die BackTicks um das Kommando.

      Gruß Frank

      1. Moin.

        Oh - bin wohl noch nicht ganz wach...

        $sendmailPath = which sendmail;
        print $sendmailPath;

        Wichtig: die BackTicks um das Kommando.

        Gruß Frank

        Danke Frank, das sollte mir helfen, werd das mal testen ;-)

        1. so, hab mal schnell was geschrieben:

          #!/usr/bin/perl

          print "Content-type: text/html\n\n";
          print "<html><body>";
          $sendmailPath = which sendmail;
          print $sendmailPath;
          print "</body></html>";

          was dabei rauskommt:

          <html><body></body></html>

          Was ist daran falsch???

          1. Hallo,

            nimm mal

            #!/usr/bin/perl

            use strict;
            use warnings;
            use CGI::Carp qw(fatalsToBrowser);

            print "Content-type: text/html\n\n";
            print "<html><body>";
            $sendmailPath = which sendmail;
            print $sendmailPath;
            print "</body></html>";

            Bert

            --
            E492: Not an editor command: Wq
            ln -s /dev/brain
            Selbst ist der Mann, wenn er sich verdoppeln kann
            1. Hallo,

              nimm mal

              #!/usr/bin/perl
              use strict;
              use warnings;
              use CGI::Carp qw(fatalsToBrowser);
              print "Content-type: text/html\n\n";
              print "<html><body>";
              my $sendmailPath = which sendmail;
              print $sendmailPath;
              print "</body></html>";

              Bert

              Bring nichts, auf der dann erscheinen Seite ist wieder der gleiche Source !!!

              (<html><body></body></html>)

              1. Hallo,

                vielleicht ist kein sendmail installiert?!

                Bert

                --
                E492: Not an editor command: Wq
                ln -s /dev/brain
                Selbst ist der Mann, wenn er sich verdoppeln kann
                1. Hallo,

                  vielleicht ist kein sendmail installiert?!

                  Bert

                  Ich hab das auf zwei Systemen durchprobiert, und auf beiden weiß ich ganz sicher das Sendmail installiert ist, da ich es auch schon benutzt hab, ich brauch das nur um ein Install-Programm zu schreiben, damit man den Pfad des Sendmail Programmes nicht mehr angeben muss

          2. Moin.

            Bei mir geht das Script so - mit einer Einschränkung: ich krieg den Pfad von sendmail nicht raus :(

            Ein which perl geht ohne Probleme. Ich muß mich mal auf'ner anderen UNIX-Maschine einloggen und es da probieren...

            <html><body></body></html>
            Was ist daran falsch???

            Eigentlich nix, jedenfalls am Script. Es sieht so aus, wäre der Header nicht richtig und Dein Browser kriegt nicht mit, daß es HTML ist...

            Gruß Frank

            1. Moin.

              Bei mir geht das Script so - mit einer Einschränkung: ich krieg den Pfad von sendmail nicht raus :(

              Ein which perl geht ohne Probleme. Ich muß mich mal auf'ner anderen UNIX-Maschine einloggen und es da probieren...

              <html><body></body></html>
              Was ist daran falsch???
              Eigentlich nix, jedenfalls am Script. Es sieht so aus, wäre der Header nicht richtig und Dein Browser kriegt nicht mit, daß es HTML ist...

              Gruß Frank

              ich hab mal which sendmail direkt in der Konsole ausprobiert, dabei bekomme ich nichts als Antwort, mache ich jedoch which joe, bekomme ich den Pfad.

              Anmerkung:

              sendmail liegt in /usr/sbin/

              joe liegt in /usr/bin/

              kann es daran liegen ???

              1. Moin.

                ich hab mal which sendmail direkt in der Konsole ausprobiert, dabei bekomme ich nichts als Antwort, mache ich jedoch which joe, bekomme ich den Pfad.

                kann es daran liegen ???

                Which durchsucht nur den Path des users.

                DESCRIPTION
                     which takes a list of names and looks for  the  files  which
                     would  be  executed  had these names been given as commands.
                     Each argument is expanded if it is aliased, and searched for
                     along  the user's path. Both aliases and path are taken from
                     the user's .cshrc file.

                Da bleibt nur ein  `find / -name sendmail'. Da wir Dir der Admin aber gleich was auf die Finger geben ;)

                Oder so (Aufruf von der Kommandozeile, Start-Pfad als Parameter übergeben, ohne Parameter suchts von /):

                use File::Find;
                @ARGV = qw(/) unless @ARGV;

                #File-Liste erstellen (incl. Verzeichnissen)
                find sub { push (@flist, $File::Find::name) }, @ARGV;

                #alle Files aus Liste durchsuchen
                foreach ( @flist){
                   if ((-f $_) and ($_ =~ /sendmail/)){
                      print "$1 \n";
                   }
                }

                Problem: Auch das Progrämmchen kann ein Langläufer werden, wenn DU von / suchst, und da wird möglicher Weise das time out vom Webserver zuschlagen.

                Gruß Frank

                1. Also, ich werd das erstmal auf meinem Home System versuchen, wo ich selber der Admin bin ;-)

                2. Das will auch nicht so wirklich.

                  Hab da nen Skript gefunden, der wie folgt aussieht !!!

                  #!/usr/local/bin/perl -w

                  use Net::SMTP;

                  $smtp = Net::SMTP->new('mailhost');

                  $smtp->mail($ENV{USER});
                      $smtp->to('postmaster');

                  $smtp->data();
                      $smtp->datasend("To: postmaster\n");
                      $smtp->datasend("\n");
                      $smtp->datasend("A simple test message\n");
                      $smtp->dataend();

                  $smtp->quit;

                  muss ich an der Stelle wo mailhost steht dessen Pfad angeben oder nicht ???

                  1. ok, das hätte sich auch geklärt, das muss ich, gibt es nicht irgendein Standart-Modul, welches den Mailhost von selber ermittelt?

                    1. Hallo shadow,

                      ok, das hätte sich auch geklärt, das muss ich, gibt es nicht irgendein Standart-Modul, welches den Mailhost von selber ermittelt?

                      Nein, eine solche Standarte gibt es nicht :-)

                      Deswegen teilen Hoster einem standardmäßig mit, welche Pfade zu verwenden sind.

                      Hingegen könnte auf vielen Systemen

                      whereis

                      vorhanden sein, das in vielen Fällen zum Erfolg führen kann, in speziellen auch versagen wird, siehe

                      man whereis

                      Du könntest auch die Ausgabe von

                      locate

                      auswerten.

                      Freundliche Grüsse,

                      Vinzenz

                      1. Danke, das mit whereis hat wunderbar geklappt !!!

                        1. Moin.

                          Danke, das mit whereis hat wunderbar geklappt !!!

                          Habe ich auch wieder was gelernt! Biete aber bei Deinem Installationsscript trotzdem an, den Pfad händisch einzugeben.

                          Der Grund: es kann sein, daß sendmail nicht gefunden wird, weil "whereis" nur in einer vordefinierten Liste sucht (Beispiel SunOS 5.8):

                          DESCRIPTION
                               The whereis utility locates source/binary and  manuals  sec-
                               tions  for  specified  files.  The  supplied names are first
                               stripped of leading pathname  components  and  any  (single)
                               trailing  extension  of the form .ext, for example, .c. Pre-
                               fixes of s. resulting from use of source  code  control  are
                               also dealt with. whereis then attempts to locate the desired
                               program in a list of standard places:

                          /usr/bin
                               /usr/bin
                               /usr/5bin
                               /usr/games
                               /usr/hosts
                               /usr/include
                               /usr/local
                               /usr/etc
                               /usr/lib
                               /usr/share/man
                               /usr/src
                               /usr/ucb

                          Beispiel FreeBSD 4.8:

                          The default path searched is the string returned by the sysctl(8) utility for the ``user.cs_path'' string, with /usr/libexec and the current user's $PATH appended.  Manual pages are searched by default along the $MANPATH. Program sources are located in a list of known standard places, including all the subdirectories of /usr/src and /usr/ports.

                          Oder: "whereis" findet mehrere Ergebnisse (sucht ja nach source, binary und manuals):

                          agapanthus % whereis sendmail
                          sendmail: /usr/sbin/sendmail /usr/share/man/man8/sendmail.8.gz /usr/ports/mail/sendmail
                          agapanthus %

                          Dann muß der User doch noch wählen bzw. editieren können.

                          Gruß Frank

                          1. agapanthus % whereis sendmail
                            sendmail: /usr/sbin/sendmail /usr/share/man/man8/sendmail.8.gz /usr/ports/mail/sendmail
                            agapanthus %

                            Ich nehme auf jeden Fall die mans und ports raus, weil das ja nicht das Programm ist, ich wollte sowieso die Manuelle eingabe als möglichkeit geben, nur das das Feld schon ausgefüllt ist, wenn sendmail über den Befehl gefunden wurde !!!

                            1. Hallo shadow,

                              Ich nehme auf jeden Fall die mans und ports raus, weil das ja nicht das Programm ist, ich wollte sowieso die Manuelle eingabe als möglichkeit geben, nur das das Feld schon ausgefüllt ist, wenn sendmail über den Befehl gefunden wurde !!!

                              Freundliche Grüsse,

                              und das geht am einfachsten mit

                              whereis -b sendmail

                              siehe "man whereis"

                              OPTIONS
                                     -b    Search only for binaries

                              Vinzenz