aboutsummaryrefslogtreecommitdiffstats
path: root/common/homedir.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2017-03-23 08:38:19 +0000
committerWerner Koch <[email protected]>2017-03-23 16:57:31 +0000
commit26086b362ff47d21b1abefaf674a6464bf0a8921 (patch)
tree5d2df07237146923ad64ad04ded0452be5aaa79e /common/homedir.c
parenttests: Use gpgconf to stop the agent. (diff)
downloadgnupg-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.c25
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)