diff options
author | Jon Griffiths <jon_p_griffiths@yahoo.com> | 2016-02-23 02:15:15 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-02-23 12:56:26 -0800 |
commit | a6e5e2864f96ebce9ec6656841c8965bcdf1b37f (patch) | |
tree | 0afda1518a217c67b7691f6ab357ba9136d103b8 /credential-cache--daemon.c | |
parent | 326e5bc91eecf73234ead29636207bc516573e79 (diff) | |
download | git-a6e5e2864f96ebce9ec6656841c8965bcdf1b37f.tar.gz |
credential-cache--daemon: refactor check_socket_directory
This function does an early return, and therefore has to
repeat its cleanup. We can stick the later bit of the
function into an "else" and avoid duplicating the shared
part (which will get bigger in a future patch).
Let's also rename the function to init_socket_directory. It
not only checks the directory but also creates it. Saying
"init" is more accurate.
Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'credential-cache--daemon.c')
-rw-r--r-- | credential-cache--daemon.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/credential-cache--daemon.c b/credential-cache--daemon.c index 9365f2ce5c..118d04f137 100644 --- a/credential-cache--daemon.c +++ b/credential-cache--daemon.c @@ -215,7 +215,7 @@ static const char permissions_advice[] = "users may be able to read your cached credentials. Consider running:\n" "\n" " chmod 0700 %s"; -static void check_socket_directory(const char *path) +static void init_socket_directory(const char *path) { struct stat st; char *path_copy = xstrdup(path); @@ -224,20 +224,18 @@ static void check_socket_directory(const char *path) if (!stat(dir, &st)) { if (st.st_mode & 077) die(permissions_advice, dir); - free(path_copy); - return; + } else { + /* + * We must be sure to create the directory with the correct mode, + * not just chmod it after the fact; otherwise, there is a race + * condition in which somebody can chdir to it, sleep, then try to open + * our protected socket. + */ + if (safe_create_leading_directories_const(dir) < 0) + die_errno("unable to create directories for '%s'", dir); + if (mkdir(dir, 0700) < 0) + die_errno("unable to mkdir '%s'", dir); } - - /* - * We must be sure to create the directory with the correct mode, - * not just chmod it after the fact; otherwise, there is a race - * condition in which somebody can chdir to it, sleep, then try to open - * our protected socket. - */ - if (safe_create_leading_directories_const(dir) < 0) - die_errno("unable to create directories for '%s'", dir); - if (mkdir(dir, 0700) < 0) - die_errno("unable to mkdir '%s'", dir); free(path_copy); } @@ -264,7 +262,7 @@ int main(int argc, const char **argv) if (!socket_path) usage_with_options(usage, options); - check_socket_directory(socket_path); + init_socket_directory(socket_path); register_tempfile(&socket_file, socket_path); if (ignore_sighup) |