I think I’m going to rewrite pwmd to work with a filesystem rather than an XML document. This would allow for better access control by using filesystem ACL’s and permissions and would be easier to use and less bug-prone. The idea is borrowed from the pass(1) shell script but that method uses gpg(1) for decryption of an encrypted file and doesn’t support passphrase caching as well as pwmd.
This would also allow for caching of a single file path rather than an entire XML document containing passphrases. It would also handle symbolic links (target attributes), NFS, SSHFS (fuse), among other things, better.
As an example, the libpwmd ‘pwmc’ client would basically be the same:
echo 'GET /some/file/path' | pwmc --cache-timeout 300 --rootdir ~/.store
echo 'GET /http:\/\/host.com/username | pwmc
Pwmc would connect to a (default) pwmd socket. Pwmd then determines whether the file path is cached or not. If not, calls gpg/2 to decrypt the file using gpg-agent for prompting of passphrase input if needed, then returns the decrypted data back to pwmc while optionally caching the data.
A better GUI client could be written to behave more like a file manager. A hidden file could replace what is an XML element attribute now.
The only real drawback I can tell is performance. Pwmd would use GPGME for encryption and decryption and that requires forking a new gpg/2 process for each file path. May not be too bad, though. We’ll see how it goes…
UPDATE (Sat Sep 6 12:26): I’m going to stick with the way it’s done now rather than using the filesystem. Caching multiple files (and even secret keys) is just too cumbersome. I will add per-element ACL support obtained via SO_PEERCRED or a TLS fingerprint hash, though. I may also add OpenPGP support but that will be a major version bump would remove the native pwmd file format.
This version lets element (attribute) name requirements be less strict. It pretty much reverts the changes made in version 3.0.5 that required them to conform to the XML standard which made pwmd less useful. Download it here.
There was a reason why I made that change but I don’t remember why. If you get a parsing error when trying to re-open the data file then an invalid character is probably the reason. I have tested it and can’t find a problem with the way it is now. Bug reports are appreciated. And I’ll make a test case or a more verbose commit message next time.
Fixes issues when a retrieved string contains a circumflex (^) character. Also fixes dangling pointers in the connection list. Download it here.
Here’s the NEWS for this release:
Fixed the trayicon "Clear clipboard" option really clear the clipboard no matter of the clipboard contents belong to QPwmc or not.
Set the application icon.
Show a balloon message upon error over the tray icon.
Ignore SIGPIPE in QPwmc since by default it would exit the application.
Added sub-menus for shortcuts. Only a single depth is supported but should be good enough to group things together.
Download it here.
This version fixes linking with some versions of Qt when not using CLang as the compiler. Fixes some clipboard bugs and notifies the user when the attribute cache needs refreshing. Download it here.
Here’s the NEWS entry:
The plugin name has changed to shoutcastbrowserplugin.so.
Pressing Enter in the Search genre box will do the search.
Remember the search text for the Search genre between instances.
Fixed showing the stations when changing between sub/genres.
Cached files are now stored in ~/.cache/gmpc/shoutcastbrowser.
Added parsing of the Bitrate, Listeners and stream Type fields.
Remember the Genre column width between sessions. Other columns are not
remembered for the moment. But you can change which are shown and their sizes
by editing ~/.config/gmpc/gmpc.cfg. Look for shoutcastbrowser-colsize and
Now chooses the stream from the retrieved playlist with the least amount of
If you have a Debian based distribution installed, you can do ‘./configure && make deb’ to build a .deb package. You’ll need to have the dpkg-dev package installed to let this work.
For users of the Gnome Music Player Client, I’ve written a plugin to browse SHOUTcast.com genres and stations. Right-click on the SHOUTcast button in the left pane, then click “Refresh” to download the available genres. Then click on a genre to show sub-genres and stations. Double-clicking on a station will play it and right-clicking on one will show other options. See the gmpc-shoutcastbrowser homepage for a screenshot and download links.
I’m not sure how long this version will work since it parses the HTML of SHOUTcast.com with regular expressions and these change from time-to-time. I’ve wrritten a couple other frontends (ncast and EZXRadio) that do the same and have had this problem before. But it should be easy enough to update since usually its only the regex that needs to be fixed.
This patch revision adds support for QTM 1.3.17. Download it here.
This version includes a port to Qt5, adds a mail client form and fixes CMake linking rules. Download it here.
This makes the local pinentry thread-safe. Download it here.