Announcement

Collapse
No announcement yet.

libc.system als Ersatz für ShellExecute() funzt nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • libc.system als Ersatz für ShellExecute() funzt nicht

    Angeblich kann man mit <br><br>

    idError:= libc.system('emacs');<br><br>

    if idError = -1 then <br>
    ShowMessage('Geht nisch'); <br><br>

    einen Shell-Befehl ausführen. Leider passiert überhaupt
    nichts (auch wenn ich einen Befehl eingebe den es
    überhaupt nicht gibt wird kein -1 zurückgegeben. Was für
    Möglichkeiten hab ich noch Shell-Kommandos
    auszuführen? Ich benutze Kylix 3 und bin als Benutzer
    während der entwicklung auf einem SUSE 8.2-Rechner
    eingeloggt.

  • #2
    Dies hab ich in der Man-Page gefunden: <br><br>
    ==================================<br>
    Do not use system() from a program with suid or sgid
    privileges, because strange values for some environment
    variables might be used to subvert system integrity.
    Use the exec(3) family of functions instead, but not
    execlp(3) or execvp(3). system() will not, in fact, work
    properly from programs with suid or sgid privileges on
    systems on which /bin/sh is bash version 2, since
    bash 2 drops privileges on startup. (Debian uses a
    modified bash which does not do this when invoked as
    sh.) <br><br>

    The check for the availability of /bin/sh is not actually
    performed; it is always assumed to be available. ISO C
    specifies the check, but POSIX.2 specifies that the return
    shall always be non-zero, since a system without the
    shell is not conforming, and it is this that is implemented.
    <br><br>
    It is possible for the shell command to return 127, so
    that code is not a sure indication that the execve() call
    failed.<br><br>
    ===============================<br><br>

    Nun habe ich natürlich keine Ahnung was der
    Unterschied zwischen Programmen mit suid oder
    sgid-Rechten ist... also was habe ich noch für
    Möglichkeiten

    Comment


    • #3
      Hallo,

      Hier ein kleines Beispiel, welches die Funktion "execlp" aus der Unix "Libc" nutzt.

      ...
      uses [...], Libc, [...];

      var
      pid : integer;
      begin
      pid:=fork;
      if pid = 0 then
      begin
      writeln('Prozess-Kopie läuft');
      libc.execlp('xterm', 'xterm', nil);
      writeln('Im Fehlerfall des startens sichtbar!');
      libc._exit(255)');
      end else
      begin
      writeln('Diese Meldung ist vom Original-Prozess!')
      if pid = -1 then ShowMessage('Fehler bei fork!');
      end;
      end;

      ...

      Achtung:
      Hierdurch wird der Aktuelle Prozess durch den zu startenden Prozess ersetzt. Wenn dies nicht gewünscht sein sollte, muss eine waitpid-schleife eingebaut werden!

      Grüsse
      Stepha

      Comment


      • #4
        "Nun habe ich natürlich keine Ahnung was der Unterschied zwischen Programmen mit suid oder sgid-Rechten ist... also was habe ich noch für Möglichkeiten?"<p><BR>

        suid = Wenn eine Datei dieses Recht gesetzt bekommen hat, wird das Programm "immer" unter den Rechten des Dateieigentümers ausgeführt!<p><BR>

        sgid = Wie bei suid nur auf die Gruppenzugehörigkeit bezogen!<p><BR>

        Wie erkennt man sowas:<BR>
        1. mit ls -l das Verzeichnis ansehen<BR>
        2. Die Rechte sind immer in 3-Zeichenschreibweise gruppiert<BR>
        (-rwx---rwx --> Alles für Eigentümer, nichts für Gruppe, alles für "Rest der Welt". <BR>Das erste Zeichen gibt den Eintragstyp an: d=Verzeichnis, -=file ...<BR><BR>

        man chmod hilft weiter ...

        Comment


        • #5
          Das execlp funktioniert schon, kann ich mal ein Beispiel
          für ein waitpid-Schleife sehen

          Comment


          • #6
            Ich tippen hier ein kleines komplettes
            Beispiel ab. Ich muss nur zuhause sein.
            Dauert ein paar Stunden.

            Grüsse
            Stepha

            Comment


            • #7
              Vielen Dank das wäre echt toll ..

              Comment

              Working...
              X