diff options
author | Werner Koch <[email protected]> | 2017-03-23 08:38:19 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2017-03-23 16:57:31 +0000 |
commit | 26086b362ff47d21b1abefaf674a6464bf0a8921 (patch) | |
tree | 5d2df07237146923ad64ad04ded0452be5aaa79e /common/homedir.c | |
parent | tests: Use gpgconf to stop the agent. (diff) | |
download | gnupg-26086b362ff47d21b1abefaf674a6464bf0a8921.tar.gz gnupg-26086b362ff47d21b1abefaf674a6464bf0a8921.zip |
common: Implicitly do a gpgconf --create-socketdir.
* common/homedir.c (_gnupg_socketdir_internal): Create the
sub-directory.
--
Although there is no auto cleanup (yet) this should be helpful. Let's
see whether possibly leaving stale directories around is better than
running into trouble when --create-socketdir was not used.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'common/homedir.c')
-rw-r--r-- | common/homedir.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/common/homedir.c b/common/homedir.c index 3055a322e..ee4438c1c 100644 --- a/common/homedir.c +++ b/common/homedir.c @@ -542,7 +542,7 @@ _gnupg_socketdir_internal (int skip_checks, unsigned *r_info) /* If a non default homedir is used, we check whether an * corresponding sub directory below the socket dir is available - * and use that. We has the non default homedir to keep the new + * and use that. We hash the non default homedir to keep the new * subdir short enough. */ if (non_default_homedir) { @@ -566,16 +566,27 @@ _gnupg_socketdir_internal (int skip_checks, unsigned *r_info) goto leave; } - /* Stat that directory and check constraints. Note that we - * do not auto create such a directory because we would not - * have a way to remove it. Thus the directory needs to be - * pre-created. The command - * gpgconf --create-socketdir - * can be used tocreate that directory. */ + /* Stat that directory and check constraints. + * The command + * gpgconf --remove-socketdir + * can be used to remove that directory. */ if (stat (name, &sb)) { if (errno != ENOENT) *r_info |= 1; /* stat failed. */ + else if (!skip_checks) + { + /* Try to create the directory and check again. */ + if (gnupg_mkdir (name, "-rwx")) + *r_info |= 16; /* mkdir failed. */ + else if (stat (prefix, &sb)) + { + if (errno != ENOENT) + *r_info |= 1; /* stat failed. */ + else + *r_info |= 64; /* Subdir does not exist. */ + } + } else *r_info |= 64; /* Subdir does not exist. */ if (!skip_checks) |