os.Chmod
and os.Stat
interact on Windows
go.mod | ||
go.sum | ||
main_windows.go | ||
modes.db | ||
README.md |
Go file permissions test
by Brandon Dyck brandon@dyck.us
This is an experiment to see how os.Chmod
and os.Stat
interact on Windows. The program creates a temporary file, then for each possible set of permissions (0–0777), sets those permissions on the file with os.Chmod
and checks the resulting permissions with os.Stat
.
Usage
go-perm-test <filename>
Inserts the results into an SQLite database called filename
.
There are four objects in the DB schema: tables named {file,dir}_result_raw(expected INT, actual INT)
and views named {file,dir}_result
.
The result
views breaks down the permissions into separate fields: The raw data are in the expected
and actual
columns, 3-bit fields are in {expected,actual}_{u,g,o}
columns, and 1-bit fields are in {expected,actual}_{u,g,o}{r,w,x}
columns.
Findings
Permissions as observed through os.Stat
depend entirely upon the owner's write bit set through os.Chmod
:
sqlite> select distinct format('%o', actual), expected_uw from dir_result;
20000000555|0
20000000777|1
sqlite> select distinct format('%o', actual), expected_uw from file_result;
444|0
666|1
This obviously isn't an exhaustive treatment of the subject, and I'm not really interested in doing one, but it corraborates Michal Pristas’s findings.