[Linux] Dateiattribute mit FileCreate

Antworten
KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

[Linux] Dateiattribute mit FileCreate

Beitrag von KOBOLD Messring GmbH »

Syntax der OS-Funktion FileCreate ist laut (importierter) "Kylix"-Hilfe:

Code: Alles auswählen

FileHandle := FileCreate (FileName, Rights);
wobei FileName der String zum Dateinamen und Rights ein Integer, der die Attribute (unter Linux, bei Windows ignoriert) festlegt.
Ich habe naiv folgendes gemacht (will ein Script erstellen, was jeder ausführen und bearbeiten kann, also 777):

Code: Alles auswählen

fh := FileCreate (sScript, 777);
FileClose (fh);
... und erwartete nachher rwxrwxrwx (also das was bei chmod 777 rauskommt)
¡¿¡¿¡ Da kam aber r----x--t raus !?!?! (also total unsinnige Kombination von Zugriffsrechten)
¿Wer weiss wie diese FileCreate Rights mit den normalen chmod Konstanten zusammenhängen?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Rechtsklick -> Find Declaration
Umschalt+Strg+Pfeil Runter

Dann sieht man das Mode in der FPC RTL momentan komplett ignoriert wird
mit Mode ist hier auch eher der Modus gemeint mit dem die Datei geäffnet wird Attribute werden auch im englischen recht selten mit Mode bezeichnet.

Die Attribute kannst du mit FileSetAttr ändern wobei man faReadOnly, faHidden,faSysFile,faVolumeId,faDirectory,faArchive,faSymLink benutzen kann
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

chmod geht so http://www.freepascal.org/docs-html/rtl ... chmod.html" onclick="window.open(this.href);return false;

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Re: [Linux] Dateiattribute mit FileCreate

Beitrag von _Bernd »

KOBOLD Messring GmbH hat geschrieben: ¿Wer weiss wie diese FileCreate Rights mit den normalen chmod Konstanten zusammenhängen?
Bin selber Linux-Neuling und kämpfe noch mit den Zugriffsrechten, aber
Du mußt den Parameter "Rights" oktal angeben. Also z. B.

FileCreate('laber', &777);


Gruß, Bernd.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Also nochmal FileCreate setzt KEINE Zugriffsrechte
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Beitrag von _Bernd »

Christian hat geschrieben:Also nochmal FileCreate setzt KEINE Zugriffsrechte
Sorry, bin wie gesagt Linux-Neuling und Deine Aussage verwirrt mich dann doch etwas.
Bei mir setzt FileCreate über Mode die Zugriffsrechte. Allerdings darf die Datei vorher nicht existiert haben. Mit FileDelete könnte man das sicherstellen.

Christian hat geschrieben:Dann sieht man das Mode in der FPC RTL momentan komplett ignoriert wird
Da wäre ich mir nicht so sicher. FileCreate ist überladen:

Function FileCreate (Const FileName : String;Mode : Longint) : Longint;

aus SysUtils.pp

Oder mache ich irgendwo einen Denkfehler?

Gruß, Bernd.

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

_Bernd hat geschrieben: Oder mache ich irgendwo einen Denkfehler?
Ja, das ist der Modus, wie du die Datei für dein Programm öffnest.
Zum Schreiben, Lesen, ob andere Prozesse auch lesen dürfen während du sie geöffnet hast etc.
Siehe auch hier alle die mit fm (File Mode) beginnen : http://www.freepascal.org/docs-html/rtl ... dex-2.html" onclick="window.open(this.href);return false;
Das hat mit den Gruppen, Owner etc -Rechten und Executable nichts zu tun.
http://www.freepascal.org/docs-html/rtl ... chmod.html" onclick="window.open(this.href);return false;

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Beitrag von _Bernd »

theo hat geschrieben:
_Bernd hat geschrieben: Oder mache ich irgendwo einen Denkfehler?
Ja, das ist der Modus, wie du die Datei für dein Programm öffnest.
Zum Schreiben, Lesen, ob andere Prozesse auch lesen dürfen während du sie geöffnet hast etc.
Siehe auch hier alle die mit fm (File Mode) beginnen : http://www.freepascal.org/docs-html/rtl ... dex-2.html" onclick="window.open(this.href);return false;
Das hat mit den Gruppen, Owner etc -Rechten und Executable nichts zu tun.
http://www.freepascal.org/docs-html/rtl ... chmod.html" onclick="window.open(this.href);return false;
Danke für Deine ausführliche Antwort.

Bitte führe trotzdem mal folgendes aus:

FileDelete('laber');
FileCreate('laber', &000);

Bei mir waren (habe hier jetzt kein Linux) anschließend alle Rechte für Owner, Group und Other zurückgesetzt.

Dann bitte mal:

FileDelete('laber');
FileCreate('laber', &555); { ich bin mir da jetzt nicht ganz sicher }

Ich hatte dann für Owner, Group und Other jeweils die Rechte zum Lesen und Ausführen gesetzt. Das kann doch kein Zufall sein oder?

In SysUtils ist FileCreate folgendermaßen implementiert:

Code: Alles auswählen

Function FileCreate (Const FileName : String;Mode : Longint) : Longint;
BEGIN
  FileCreate:=fpOpen(FileName,O_RdWr or O_Creat or O_Trunc,Mode);
end;
Zu dem Mode-Parameter (bei fpOpen) steht folgendes in der RTL-Doku:

"...The optional mode argument specifies the permissions to set when opening the file. This is modified by the umask setting. The real permissions are Mode and not umask..."

Also ich steige noch nicht ganz durch ;-)

Gruß, Bernd.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

OK, dann hatt ich mich wohl auf die schnelle verguckt Sorry
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Tja, dann wird's wohl so sein wie du vermutest.
Hab ich vielleicht mit FileOpen verwechselt.
Ganz klar ist die Doku da nicht.

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Beitrag von KOBOLD Messring GmbH »

¡¡ VIELEN DANK, _Bernd !!
Das mit dem & davor (Octale Angabe) hat mir gefehlt, jetzt geht's mit den Zugriffsrechten.
Merkwürdig ist aber, dass das höchste der Gefühle ein &755 ist. Auch wenn ich &777 setze, erhält die Datei nur ein &755 also (rwxr-xr-x), das reicht mir, ¿Ob das wohl ein Sicherheits-feature und kein Bug ist? (Das übergeordnete Verzeichnis ist auf &777 gesetzt)

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Beitrag von _Bernd »

KOBOLD Messring GmbH hat geschrieben: Merkwürdig ist aber, dass das höchste der Gefühle ein &755 ist. Auch wenn ich &777 setze, erhält die Datei nur ein &755 also (rwxr-xr-x), das reicht mir, ¿Ob das wohl ein Sicherheits-feature und kein Bug ist? (Das übergeordnete Verzeichnis ist auf &777 gesetzt)
Ehrlich gesagt, darüber bin ich auch schon gestolpert und habe auch (noch) keine Erklärung dafür. Vielleicht kann uns einer der Linux-Spezis hier weiterhelfen.

Gruß, Bernd.

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Beitrag von KOBOLD Messring GmbH »

Hola _Bernd,
ich glaube die umask spielt hier mit. Die ist default auf 0022 gesetzt, also ein 777 im FileCreate "abzüglich" umask gibt genau die 755.
Wahrscheinlich ist's aber einfacher gemäss des Hinweises von theo mit FpChmod die Zugriffsrechte nachher so einzustellen wie man will.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Villeicht versucht ihr das auch nicht als root ? Und als benutzer ist 755 das höchste zulässige ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten