Implement /run/user/UID/gnupg based sockets.
authorWerner Koch <wk@gnupg.org>
Wed, 8 Jun 2016 08:12:32 +0000 (10:12 +0200)
committerWerner Koch <wk@gnupg.org>
Wed, 8 Jun 2016 11:59:28 +0000 (13:59 +0200)
commitaab8a0b05292b0d06e3001a0b289224cb7156dbd
tree894ca78abb9159b48419f06e28aca851a9588abd
parentdef512eb67c8a380f3b873cee0f156deef0b6dda
Implement /run/user/UID/gnupg based sockets.

* common/homedir.c: Include sys/stat.h and zb32.h.
(w32_portable_app, w32_bin_is_bin): Change type from int to byte.
(non_default_homedir): New.
(is_gnupg_default_homedir): New.
(default_homedir): Set non_default_homedir.
(gnupg_set_homedir): Set non_default_homedir and make
the_gnupg_homedir and absolute directory name.
(gnupg_homedir): Return an absolute directory name.
(_gnupg_socketdir_internal): New.
(gnupg_socketdir): Implement /run/user/ based sockets.
* tools/gpg-connect-agent.c (get_var_ext): Replace now obsolete
make_filename by xstrdup.
* tools/gpgconf.c (main): Sue gnupg_homedir for the "homedir:" output.
--

If a [/var]/run/user/$(id -u)/ directory exists, a gnupg subdir is
created as needed and the permissions of the directories are checked.
If that all matches that directory name is returned instead of the
homedir.

To cope with non standard homedirs (via GNUPGHOME or --homedir) the
SHA-1 hash of the homedir is computed, left truncated to 120 bits,
zBase-32 encoded, prefixed with "d.", and appended to
"[/var]/run/user/$(id -u)/gnupg/".  If that directory exists and has
proper permissions it is returned as socket dir - if not the homedir
is used.  Due to cleanup issues, this directory will not be
auto-created but needs to be created by the user in advance.

The required permissions are: directory owned by the user, group and
others bits not set.

Signed-off-by: Werner Koch <wk@gnupg.org>
agent/gpg-agent.c
common/homedir.c
common/util.h
tools/gpg-connect-agent.c
tools/gpgconf.c