This repo has seen little activity over the last four to five years so I am not sure if it is still actively maintained. This is why I will suggest different solutions that
- leave the code as is and instead focus on client side configuration or
- make some tiny modifications in the
python-qpass code.
Background on the error
macOS ships with a different find command (BSD find) than the one pre-installed on most Linux distributions (GNU find). One key difference is that GNU find automatically defaults to the current directory when searching for files - BSD find, on the other hand, requires a mandatory path argument.
To run a recursive search of all password entries contained in the password store python-qpass uses the following command:
find -type f -name '*.gpg' -print0
As no path argument is provided, this command will
- default to the password store directory on Linux
- fail on macOS.
The following potential fixes should all work. My personal preference is on 3.
Solution 1: Install GNU find, rearrange $PATH
Install GNU find via
and follow the instructions provided in this Stack Overflow answer. You now have access to BSD find (via find) as well as GNU find (via gfind). If you have set up your $PATH variable correctly, all calls to find should now use GNU find.
Solution 2: Install GNU find, modify python-qpass to use GNU find instead
Install GNU find via
and leave your $PATH as is. You now have access to BSD find (via find) as well as GNU find (via gfind). All you need to do is tell python-qpass to use gfind instead of find if you are on macOS.
Change this line
|
listing = self.context.capture("find", "-type", "f", "-name", "*.gpg", "-print0") |
to
+ find_command = "gfind" if platform.system().lower() == "darwin" else "find"
- listing = self.context.capture("find", "-type", "f", "-name", "*.gpg", "-print0")
+ listing = self.context.capture(find_command, "-type", "f", "-name", "*.gpg", "-print0")
Solution 3: Modify python-qpass to provide path argument
Provide the required path argument to find. This will fix the issue on macOS and will not have any effect on Linux (where the path argument is optional).
Change this line
|
listing = self.context.capture("find", "-type", "f", "-name", "*.gpg", "-print0") |
to
- listing = self.context.capture("find", "-type", "f", "-name", "*.gpg", "-print0")
+ listing = self.context.capture("find", self.directory, "-type", "f", "-name", "*.gpg", "-print0")
I am planning to submit a pull request containing this last solution.
This repo has seen little activity over the last four to five years so I am not sure if it is still actively maintained. This is why I will suggest different solutions that
python-qpasscode.Background on the error
macOS ships with a different
findcommand (BSD find) than the one pre-installed on most Linux distributions (GNU find). One key difference is thatGNU findautomatically defaults to the current directory when searching for files -BSD find, on the other hand, requires a mandatory path argument.To run a recursive search of all password entries contained in the password store
python-qpassuses the following command:find -type f -name '*.gpg' -print0As no path argument is provided, this command will
The following potential fixes should all work. My personal preference is on 3.
Solution 1: Install
GNU find, rearrange$PATHInstall
GNU findviaand follow the instructions provided in this Stack Overflow answer. You now have access to
BSD find(viafind) as well asGNU find(viagfind). If you have set up your$PATHvariable correctly, all calls tofindshould now useGNU find.Solution 2: Install
GNU find, modifypython-qpassto useGNU findinsteadInstall
GNU findviaand leave your
$PATHas is. You now have access toBSD find(viafind) as well asGNU find(viagfind). All you need to do is tellpython-qpassto usegfindinstead offindif you are on macOS.Change this line
python-qpass/qpass/__init__.py
Line 306 in 43ce447
to
Solution 3: Modify
python-qpassto provide path argumentProvide the required path argument to
find. This will fix the issue on macOS and will not have any effect on Linux (where the path argument is optional).Change this line
python-qpass/qpass/__init__.py
Line 306 in 43ce447
to
I am planning to submit a pull request containing this last solution.