Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Linux: Besitzer einer Datei ermitteln (https://www.delphipraxis.net/131014-linux-besitzer-einer-datei-ermitteln.html)

S - tefano 17. Mär 2009 14:20


Linux: Besitzer einer Datei ermitteln
 
Hi,

ich mache mir mit FreePascal ein kleines Tool, das unter Ubuntu laufen soll. Jetzt stehe ich irgendwie vor dem Problem, dass ich entweder zu blöd bin zum Gucken, oder dass die Delphi-/Pascal-Befehlsreferenzen nicht mehr so gut sind wie zu Zeiten, als es diese RAD Studios noch nicht gab.
Ich suche nach einer Möglichkeit, den Besitzer einer Datei zu ermitteln, werde aber einfach nicht fündig. Geht das überhaupt? Oder müsste ich mir dafür irgendeine Art Shellscript machen?

Danke schonmal,

Stefan

Dax 17. Mär 2009 14:21

Re: Linux: Besitzer einer Datei ermitteln
 
Es gibt eines Systemcall namens chown: http://linux.die.net/man/3/chown

DevilsCamp 17. Mär 2009 14:30

Re: Linux: Besitzer einer Datei ermitteln
 
Zitat:

Zitat von Dax
Es gibt eines Systemcall namens chown: http://linux.die.net/man/3/chown

Er will den Besitzer herausfinden, nicht ändern.


@S - tefano:
Versuche es mal mit FpStat aus der Unit BaseUnix

S - tefano 17. Mär 2009 14:33

Re: Linux: Besitzer einer Datei ermitteln
 
Wow, das ging schnell :)
Ich probiers nachher aus und melde mich dann.

Dankeschön,

Stefan

H4ndy 17. Mär 2009 14:42

Re: Linux: Besitzer einer Datei ermitteln
 
Du könntest auch die Ausgabe von "ls -l" parsen.
Spuckt dann sowas hier aus:
Code:
insgesamt 44
-rw------- 1 root root 10849 2009-03-17 14:33 .bash_history
-rw-r--r-- 1 root root   19 2007-10-11 10:57 .bash_profile
drwxr-xr-x 2 root root 4096 2006-04-23 03:51 bin
-rw-r--r-- 1 root root 1332 2005-11-23 17:06 .exrc
drwx------ 2 root root 4096 2007-09-29 23:24 .gnupg
-rw-r--r-- 1 root root  541 2009-01-23 14:19 .htoprc
drwxr-xr-x 3 root root 4096 2009-02-04 19:37 .mc
-rw------- 1 root root  760 2007-10-11 10:52 .viminfo
drwxr-xr-x 2 root root 4096 2007-10-09 17:50 .wapi

Valle 17. Mär 2009 15:02

Re: Linux: Besitzer einer Datei ermitteln
 
Zitat:

Zitat von H4ndy
Du könntest auch die Ausgabe von "ls -l" parsen.

Das ist aber sehr dreckig! Zumal ls -l auch nicht zwingend funktioniert. Wenn ich einem Ordner die Rechte "111" gebe (Nur Execution Bit), dann gib ls folgende Fehlermeldung aus.

Code:
ls: cannot open directory .: Permission denied
Also wofür gibt es Funktionen dafür? ;-)

Achja, eines wäre noch. Der Eigentümer einer Datei ist immer nur seine UID. Das heißt, du solltest dich nicht wundern, wenn du eine Zahl als Rückgabe bekommst. Um den Namen des Users mit dieser UID herauszufinden, gibt es auch einen System-Call. Ich weiß allerdings nicht, wie dieser heißt, da ich nichts mit Lazarus und Delphi zutun habe. :gruebel:

Edit:// Schau dir das hier mal an.

Mit freundlichen Grüßen,

Valle

S - tefano 17. Mär 2009 16:37

Re: Linux: Besitzer einer Datei ermitteln
 
Jo, für den Namen hatte ich schon überlegt ob ich dazu vllt in der Users-Datei nachgucken kann. Zumindest wenn man die als normaler User zum Lesen öffnen kann... ausprobieren ;)

ls -l? Das wirft die Frage auf (weil ich zum ersten mal mit FreePascal arbeite): Kann ich etwa auf irgendeine Weise ganz normale Konsolenbefehle in den Code einbauen?

Valle 17. Mär 2009 16:43

Re: Linux: Besitzer einer Datei ermitteln
 
Zitat:

Zitat von S - tefano
Jo, für den Namen hatte ich schon überlegt ob ich dazu vllt in der Users-Datei nachgucken kann. Zumindest wenn man die als normaler User zum Lesen öffnen kann... ausprobieren ;)

Users-Datei? Meinst du /etc/passwd? Auch davon würde ich dir abraten! Das funktioniert nicht immer, zum Beispiel bei mir. Es gibt Umgebungen, in denen die System-Benutzer in einer Datenbank oder zum Beispiel auf einem LDAP-Server gespeichert sind. In /etc/passwd wirst du dann nicht viel finden. Benutze also am besten die System-Calls! ;-)

Zitat:

Zitat von S - tefano
ls -l? Das wirft die Frage auf (weil ich zum ersten mal mit FreePascal arbeite): Kann ich etwa auf irgendeine Weise ganz normale Konsolenbefehle in den Code einbauen?

Ja, du kannst Konsolenbefehle über den Code ausführen. Unter Linux und Lazarus geht das auch relativ einfach, da es dafür einige Befehle gibt. Aber: Bitte benutze nicht die Ausgabe von ls. Das ist sehr schlechter Coding-Stil und muss eben auch nicht immer funktionieren. ;-)

Mit freundlichen Grüßen,

Valle

DeddyH 17. Mär 2009 16:44

Re: Linux: Besitzer einer Datei ermitteln
 
Das kannst Du mit TProcess. Hier ein Beispiel aus meinem einzigen Linux-Programm (Prüfung, ob der ausführende Benutzer Root-Rechte hat):
Delphi-Quellcode:
function CheckRoot: Boolean;
var aProcess: TProcess;
    sl     : TStringList;
begin
  Result := false;
  aProcess := TProcess.Create(nil);
  try
    aProcess.CommandLine := 'id -u';
    aProcess.Options := aProcess.Options + [poWaitOnExit, poUsePipes];
    sl := TStringList.Create;
    try
      aProcess.Execute;
      sl.LoadFromStream(aProcess.Output);
      if sl.Count > 0 then
        Result := StrToIntDef(sl[0],1) = 0;
    finally
      sl.Free;
    end;
  finally
    aProcess.Free;
  end;
end;

Valle 17. Mär 2009 16:48

Re: Linux: Besitzer einer Datei ermitteln
 
Ui. :shock:

Wie wäre's damit?

Delphi-Quellcode:
if geteuid() == 0 then
Mit freundlichen Grüßen,

Valle


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz