go-perm-test/README.md
2024-08-19 16:30:30 -06:00

34 lines
1.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 (00777), sets those permissions on the file with `os.Chmod` and checks the resulting permissions with `os.Stat`.
## Usage
### `go-perm-test`
Prints the results as a CSV in the format
```<expected permissions>,<actual permissions>```
where each set of permissions is an octal integer.
### `go-perm-test <filename>`
Inserts the results into an SQLite database called `filename`.
There are two objects in the DB schema: a table `result_raw(expected INT, actual INT)` and a view `result`.
The `result` view 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 actual, expected_uw from result;
actual|expected_uw
292|0
438|1
```
This obviously isn't an exhaustive treatment of the subject, and I'm not really interested in doing one, but it corraborates [Michal Pristass findings.](https://archive.is/RZ8WP)