Merge branch 'jk/close-stderr-of-credential-cache-deamon'
Plug fd leaks. * jk/close-stderr-of-credential-cache-deamon: credential-cache: close stderr in daemon processmaint
commit
b33000878a
|
@ -8,7 +8,7 @@ git-credential-cache--daemon - Temporarily store user credentials in memory
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[verse]
|
||||||
git credential-cache--daemon <socket>
|
git credential-cache--daemon [--debug] <socket>
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
|
@ -21,6 +21,10 @@ for `git-credential-cache` clients. Clients may store and retrieve
|
||||||
credentials. Each credential is held for a timeout specified by the
|
credentials. Each credential is held for a timeout specified by the
|
||||||
client; once no credentials are held, the daemon exits.
|
client; once no credentials are held, the daemon exits.
|
||||||
|
|
||||||
|
If the `--debug` option is specified, the daemon does not close its
|
||||||
|
stderr stream, and may output extra diagnostics to it even after it has
|
||||||
|
begun listening for clients.
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
---
|
---
|
||||||
Part of the linkgit:git[1] suite
|
Part of the linkgit:git[1] suite
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "credential.h"
|
#include "credential.h"
|
||||||
#include "unix-socket.h"
|
#include "unix-socket.h"
|
||||||
#include "sigchain.h"
|
#include "sigchain.h"
|
||||||
|
#include "parse-options.h"
|
||||||
|
|
||||||
static const char *socket_path;
|
static const char *socket_path;
|
||||||
|
|
||||||
|
@ -201,7 +202,7 @@ static int serve_cache_loop(int fd)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void serve_cache(const char *socket_path)
|
static void serve_cache(const char *socket_path, int debug)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
|
@ -211,6 +212,10 @@ static void serve_cache(const char *socket_path)
|
||||||
|
|
||||||
printf("ok\n");
|
printf("ok\n");
|
||||||
fclose(stdout);
|
fclose(stdout);
|
||||||
|
if (!debug) {
|
||||||
|
if (!freopen("/dev/null", "w", stderr))
|
||||||
|
die_errno("unable to point stderr to /dev/null");
|
||||||
|
}
|
||||||
|
|
||||||
while (serve_cache_loop(fd))
|
while (serve_cache_loop(fd))
|
||||||
; /* nothing */
|
; /* nothing */
|
||||||
|
@ -252,16 +257,28 @@ static void check_socket_directory(const char *path)
|
||||||
|
|
||||||
int main(int argc, const char **argv)
|
int main(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
socket_path = argv[1];
|
static const char *usage[] = {
|
||||||
|
"git-credential-cache--daemon [opts] <socket_path>",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
int debug = 0;
|
||||||
|
const struct option options[] = {
|
||||||
|
OPT_BOOL(0, "debug", &debug,
|
||||||
|
N_("print debugging messages to stderr")),
|
||||||
|
OPT_END()
|
||||||
|
};
|
||||||
|
|
||||||
|
argc = parse_options(argc, argv, NULL, options, usage, 0);
|
||||||
|
socket_path = argv[0];
|
||||||
|
|
||||||
if (!socket_path)
|
if (!socket_path)
|
||||||
die("usage: git-credential-cache--daemon <socket_path>");
|
usage_with_options(usage, options);
|
||||||
check_socket_directory(socket_path);
|
check_socket_directory(socket_path);
|
||||||
|
|
||||||
atexit(cleanup_socket);
|
atexit(cleanup_socket);
|
||||||
sigchain_push_common(cleanup_socket_on_signal);
|
sigchain_push_common(cleanup_socket_on_signal);
|
||||||
|
|
||||||
serve_cache(socket_path);
|
serve_cache(socket_path, debug);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue