Undeclaring a user no longer stops the node applying.remove() gains a user case. It never deletes an account. If the shell is still the one the mesh set, the shell the account had before is given back. Otherwise it is left as it is, and the outcome says why. A failed give-back is reported, never fatal.
The shell the account had is recorded the first time the mesh changes it (Applied.Shell: Found/Set/Created), and is never overwritten by a later change.
A shell is refused before anything is touched unless it is executable and listed in /etc/shells. The exception is nologin/false, which need only be executable: the distribution does not list them, and the controller's own account uses one.
Directories the host creates inside an owner's home are the owner's, the home included. Existing directories are never chowned or chmodded. This applies to files, directories, archives, blocks and write-into.
Tests: internal/apply/user_test.go and home_parents_test.go. go build, go vet, go test ./... and gofmt are clean.
hq to-be 41 WP1, issue 228.
- **Undeclaring a `user` no longer stops the node applying.** `remove()` gains a user case. It never deletes an account. If the shell is still the one the mesh set, the shell the account had before is given back. Otherwise it is left as it is, and the outcome says why. A failed give-back is reported, never fatal.
- **The shell the account had is recorded** the first time the mesh changes it (`Applied.Shell`: Found/Set/Created), and is never overwritten by a later change.
- **A shell is refused before anything is touched** unless it is executable and listed in /etc/shells. The exception is `nologin`/`false`, which need only be executable: the distribution does not list them, and the controller's own account uses one.
- **Directories the host creates inside an owner's home are the owner's**, the home included. Existing directories are never chowned or chmodded. This applies to files, directories, archives, blocks and write-into.
Tests: `internal/apply/user_test.go` and `home_parents_test.go`. `go build`, `go vet`, `go test ./...` and `gofmt` are clean.
A user had no removal, so an undeclared one failed as an orphan and
aborted every apply after. Removal now keeps the account, gives back
the shell recorded when the mesh first changed it if it is still the
mesh's and still usable, and says why otherwise (hq ADR 0176 §2).
A shell is refused before it is set unless it is executable and listed
in /etc/shells, since usermod succeeds on a missing one.
A file or archive placed under a fresh account's home with an owner left
the parents it created, such as ~/.config or ~/.local/share, owned by
root, so the person's own programs could not write there. Parents that
already existed, and any outside the owner's home, are left as before.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
hq to-be 41 WP1, issue 228.
userno longer stops the node applying.remove()gains a user case. It never deletes an account. If the shell is still the one the mesh set, the shell the account had before is given back. Otherwise it is left as it is, and the outcome says why. A failed give-back is reported, never fatal.Applied.Shell: Found/Set/Created), and is never overwritten by a later change.nologin/false, which need only be executable: the distribution does not list them, and the controller's own account uses one.Tests:
internal/apply/user_test.goandhome_parents_test.go.go build,go vet,go test ./...andgofmtare clean.