
Hallo,

ich experimentiere gegenwärtig mit der Klasse Stat (gb).

Zuerst wird in allen drei Fällen eine temporäre Datei mit einem zufälligen Dateinamen erzeugt.
Dann werden der Besitzer und die Gruppe mit den Instruktionen Chown und Chgrp geändert.
Danach werden unterschiedliche Datei-Rechte vergeben.
Abschließend werden die Datei-Eigenschaften mit einem Stat-Objekt (FileInfo = Stat(sFilePath)) und Access(Pfad [, Modus ] ) ausgelesen und angezeigt.

sRandomFileName = SetRandomFileName()
sFilePath = Temp(sRandomFileName)

Shell Subst$("touch &1; echo 'ZEILE 1\nZEILE 2' > &1", sFilePath) Wait
Chown sFilePath To User.Name
Chgrp sFilePath To sGroup

(1)
Chmod sFilePath To "rwxrw-r--"
Path = /tmp/gambas.1000/5750/f4ec9844.tmp
File-Type (Integer) = 1
File-Type = Regular file
Permissions (Symbolic notation) = rwxrw-r--
File-Modus (Numeric Notation)   = 764
Sticky-Bit set? = False
SetUID set? = False
SetGID set? = False

hans@mint-183 ~ $ stat -c "%a %A" /tmp/gambas.1000/5750/f4ec9844.tmp
764 -rwxrw-r--

------------------------------------------------------------------------

(2)
Chmod sFilePath To "rwSrwSr-T"
Path = /tmp/gambas.1000/5180/161632d2.tmp
File-Type (Integer) = 1
File-Type = Regular file
Permissions (Symbolic notation) = rwSrwSr-T
File-Modus (Numeric Notation)   = 7664
Sticky-Bit set? = True
SetUID set? = True
SetGID set? = True

hans@mint-183 ~ $ stat -c "%a %A" /tmp/gambas.1000/5180/161632d2.tmp
7664 -rwSrwSr-T

------------------------------------------------------------------------

(3)
Chmod sFilePath To "rwsrwsrwt"
Path = /tmp/gambas.1000/5829/fb60cd7b.tmp
File-Type (Integer) = 1
File-Type = Regular file
Permissions (Symbolic notation) = rw-rw-rw-
File-Modus (Numeric Notation)   = 666
Sticky-Bit set? = False
SetUID set? = False
SetGID set? = False

hans@mint-183 ~ $ stat -c "%a %A" /tmp/gambas.1000/5829/fb60cd7b.tmp
666 -rw-rw-rw-

In den ersten beiden Fälle ergaben sich die Werte der Eigenschaften, die erwartet wurden. Ungereimtheiten gibt es nur für den Fall 3. Die angezeigten Datei-Rechte als String sollten die gleiche Syntax wie CHMOD in der Dokumentation auf http://gambaswiki.org/wiki/cat/mode besitzen. Das ist nicht so.

In der Dokumentation steht sinngemäß:

... wenn an der 3. Position (Besitzer) ein s oder S steht, dann wird immer das SetUID.Bit gesetzt,
... wenn an der 6. Position (Gruppe) ein s oder S steht, dann wird immer das SetGID.Bit gesetzt,
... wenn an der 9. Position (Andere) ein t oder T steht, dann wird immer das Sticky-Bit gesetzt.

Im 3. Fall ergeben sich aber drei Widersprüche. Es wird angezeigt, dass weder das SetUID.Bit, SetGID.Bit noch das Sticky-Bit gesetzt wurden. Liegt hier ein Fehler vor oder liege ich mit mienen Algorithmen falsch. Bevor ich das an die große Glocke hänge, bitte ich Dich als Entwwickler, da mal drüberzuschauen.

Das eingesetzte Projekt liegt im Anhang.

Mit flotten Grüßen

Hans

