-
Notifications
You must be signed in to change notification settings - Fork 104
Description
I'm scripting the creation of some encrypted ext4 folders by calling the fscrypt CLI.
While most of the CLI seems designed for scriptability (prompts can be overridden by passing the information with CLI arguments), an unresolved pain point seems to be key names:
- Using
fscrypt metadata create protectoras described here, or usingfscrypt encrypt, requires passing--name. - Passing an existing name give error
there is already a protector named "myname". - But there is no way to programmatically query existing key names.
The only workaround seems to be parsing the output of fscrypt status /, which does not look very stable at all.
The bash completion currently does that in this ugly parsing hack:
fscrypt/cmd/fscrypt/fscrypt_bash_completion
Lines 86 to 94 in 9770081
| # Output list of possible policy or protector IDs | |
| # $1: the mount point on which policies are looked for. | |
| # $2: the section (policy or protector) to retrieve | |
| _fscrypt_status_section() | |
| { | |
| local section=${2^^} | |
| fscrypt status "$1" 2>/dev/null | \ | |
| command awk '/^[[:xdigit:]]{16}/ && section == "'"$section"'" { print $1; next; } | |
| { section = $1 }' |
Other parts of fscrypt provide programmatic queries of whether something already exists, e.g. to check whether a dir is already encrypted one can check the status code of fscrypt status, which as per --help
will fail if PATH is not setup for encryption with fscrypt
Some ideas to improve scriptability:
- Add a way to check if a key name is already taken.
- Or add e.g. a
--jsonflag that turns all output into JSON, similar to how Hashicorp tools likeconsulprovide it.
There's the request for Stable library API #175 but things as simple as key creation should be possible also from the command line.
- Or add e.g. a
- Make
fscrypt metadata create protectorsucceed instead of fail if the key name already exists AND the given--source raw_key --keyis the same as the one already stored (that is, make it idempotent), or add a flag to get that behaviour.