mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-02 12:01:32 +01:00
* gpg-agent.c (main): Tell the logging code taht we are runnign
detached. * logging.h (JNLIB_LOG_WITH_PREFIX): Add constants for the flag values. * logging.c (log_set_prefix): New flag DETACHED. (fun_writer): Take care of this flag. (log_test_fd): New.
This commit is contained in:
parent
aaac5dd2dc
commit
e21bf7b9e0
@ -1,3 +1,8 @@
|
|||||||
|
2004-04-16 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* gpg-agent.c (main): Tell the logging code taht we are runnign
|
||||||
|
detached.
|
||||||
|
|
||||||
2004-04-06 Werner Koch <wk@gnupg.org>
|
2004-04-06 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* gpg-agent.c (main): Use new libgcrypt thread library register
|
* gpg-agent.c (main): Use new libgcrypt thread library register
|
||||||
|
@ -389,7 +389,7 @@ main (int argc, char **argv )
|
|||||||
/* Please note that we may running SUID(ROOT), so be very CAREFUL
|
/* Please note that we may running SUID(ROOT), so be very CAREFUL
|
||||||
when adding any stuff between here and the call to INIT_SECMEM()
|
when adding any stuff between here and the call to INIT_SECMEM()
|
||||||
somewhere after the option parsing */
|
somewhere after the option parsing */
|
||||||
log_set_prefix ("gpg-agent", 1|4);
|
log_set_prefix ("gpg-agent", JNLIB_LOG_WITH_PREFIX|JNLIB_LOG_WITH_PID);
|
||||||
|
|
||||||
/* Try to auto set the character set. */
|
/* Try to auto set the character set. */
|
||||||
set_native_charset (NULL);
|
set_native_charset (NULL);
|
||||||
@ -652,11 +652,13 @@ main (int argc, char **argv )
|
|||||||
bind_textdomain_codeset (PACKAGE_GT, "UTF-8");
|
bind_textdomain_codeset (PACKAGE_GT, "UTF-8");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* now start with logging to a file if this is desired */
|
/* Now start with logging to a file if this is desired. */
|
||||||
if (logfile)
|
if (logfile)
|
||||||
{
|
{
|
||||||
log_set_file (logfile);
|
log_set_file (logfile);
|
||||||
log_set_prefix (NULL, 1|2|4);
|
log_set_prefix (NULL, (JNLIB_LOG_WITH_PREFIX
|
||||||
|
|JNLIB_LOG_WITH_TIME
|
||||||
|
|JNLIB_LOG_WITH_PID));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure that we have a default ttyname. */
|
/* Make sure that we have a default ttyname. */
|
||||||
@ -754,7 +756,7 @@ main (int argc, char **argv )
|
|||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
else if (pid)
|
else if (pid)
|
||||||
{ /* we are the parent */
|
{ /* We are the parent */
|
||||||
char *infostr;
|
char *infostr;
|
||||||
|
|
||||||
close (fd);
|
close (fd);
|
||||||
@ -803,17 +805,20 @@ main (int argc, char **argv )
|
|||||||
} /* end parent */
|
} /* end parent */
|
||||||
|
|
||||||
|
|
||||||
/* this is the child */
|
/*
|
||||||
|
This is the child
|
||||||
|
*/
|
||||||
|
|
||||||
/* detach from tty and put process into a new session */
|
/* Detach from tty and put process into a new session */
|
||||||
if (!nodetach )
|
if (!nodetach )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
unsigned int oldflags;
|
||||||
|
|
||||||
/* close stdin, stdout and stderr unless it is the log stream */
|
/* Close stdin, stdout and stderr unless it is the log stream */
|
||||||
for (i=0; i <= 2; i++)
|
for (i=0; i <= 2; i++)
|
||||||
{
|
{
|
||||||
if ( log_get_fd () != i)
|
if (!log_test_fd (i) )
|
||||||
close (i);
|
close (i);
|
||||||
}
|
}
|
||||||
if (setsid() == -1)
|
if (setsid() == -1)
|
||||||
@ -822,6 +827,9 @@ main (int argc, char **argv )
|
|||||||
cleanup ();
|
cleanup ();
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log_get_prefix (&oldflags);
|
||||||
|
log_set_prefix (NULL, oldflags | JNLIB_LOG_RUN_DETACHED);
|
||||||
opt.running_detached = 1;
|
opt.running_detached = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2004-04-16 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* logging.h (JNLIB_LOG_WITH_PREFIX): Add constants for the flag
|
||||||
|
values.
|
||||||
|
* logging.c (log_set_prefix): New flag DETACHED.
|
||||||
|
(fun_writer): Take care of this flag.
|
||||||
|
(log_test_fd): New.
|
||||||
|
|
||||||
2004-02-18 Werner Koch <wk@gnupg.org>
|
2004-02-18 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* stringhelp.c (print_sanitized_buffer): Don't care about
|
* stringhelp.c (print_sanitized_buffer): Don't care about
|
||||||
@ -181,7 +189,7 @@ Mon Jan 24 13:04:28 CET 2000 Werner Koch <wk@gnupg.de>
|
|||||||
* You may find it source-copied in other packages. *
|
* You may find it source-copied in other packages. *
|
||||||
***********************************************************
|
***********************************************************
|
||||||
|
|
||||||
Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
Copyright 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is free software; as a special exception the author gives
|
This file is free software; as a special exception the author gives
|
||||||
unlimited permission to copy and/or distribute it, with or without
|
unlimited permission to copy and/or distribute it, with or without
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/* logging.c - useful logging functions
|
/* logging.c - useful logging functions
|
||||||
* Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
|
* Copyright (C) 1998, 1999, 2000, 2001, 2003,
|
||||||
|
* 2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This file is part of GnuPG.
|
* This file is part of GnuPG.
|
||||||
*
|
*
|
||||||
@ -46,10 +47,12 @@
|
|||||||
|
|
||||||
|
|
||||||
static FILE *logstream;
|
static FILE *logstream;
|
||||||
|
static int log_socket = -1;
|
||||||
static char prefix_buffer[80];
|
static char prefix_buffer[80];
|
||||||
static int with_time;
|
static int with_time;
|
||||||
static int with_prefix;
|
static int with_prefix;
|
||||||
static int with_pid;
|
static int with_pid;
|
||||||
|
static int running_detached;
|
||||||
static int force_prefixes;
|
static int force_prefixes;
|
||||||
|
|
||||||
static int missing_lf;
|
static int missing_lf;
|
||||||
@ -125,9 +128,14 @@ fun_writer (void *cookie_arg, const char *buffer, size_t size)
|
|||||||
{
|
{
|
||||||
struct fun_cookie_s *cookie = cookie_arg;
|
struct fun_cookie_s *cookie = cookie_arg;
|
||||||
|
|
||||||
/* Note that we always try to reconnect to the socket but print error
|
/* Note that we always try to reconnect to the socket but print
|
||||||
messages only the first time an error occured. */
|
error messages only the first time an error occured. IF
|
||||||
if (cookie->fd == -1 )
|
RUNNING_DETACHED is set we don't fall back to stderr and even do
|
||||||
|
not print any error messages. This is needed becuase detached
|
||||||
|
processes often close stderr and my printing to fiel descriptor 2
|
||||||
|
we might send the log message to a file not intended for logging
|
||||||
|
(e.g. a pipe or network connection). */
|
||||||
|
if (cookie->fd == -1)
|
||||||
{
|
{
|
||||||
/* Note yet open or meanwhile closed due to an error. */
|
/* Note yet open or meanwhile closed due to an error. */
|
||||||
struct sockaddr_un addr;
|
struct sockaddr_un addr;
|
||||||
@ -136,11 +144,12 @@ fun_writer (void *cookie_arg, const char *buffer, size_t size)
|
|||||||
cookie->fd = socket (PF_LOCAL, SOCK_STREAM, 0);
|
cookie->fd = socket (PF_LOCAL, SOCK_STREAM, 0);
|
||||||
if (cookie->fd == -1)
|
if (cookie->fd == -1)
|
||||||
{
|
{
|
||||||
if (!cookie->quiet)
|
if (!cookie->quiet && !running_detached)
|
||||||
fprintf (stderr, "failed to create socket for logging: %s\n",
|
fprintf (stderr, "failed to create socket for logging: %s\n",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
goto failure;
|
goto failure;
|
||||||
}
|
}
|
||||||
|
log_socket = cookie->fd;
|
||||||
|
|
||||||
memset (&addr, 0, sizeof addr);
|
memset (&addr, 0, sizeof addr);
|
||||||
addr.sun_family = PF_LOCAL;
|
addr.sun_family = PF_LOCAL;
|
||||||
@ -151,7 +160,8 @@ fun_writer (void *cookie_arg, const char *buffer, size_t size)
|
|||||||
|
|
||||||
if (connect (cookie->fd, (struct sockaddr *) &addr, addrlen) == -1)
|
if (connect (cookie->fd, (struct sockaddr *) &addr, addrlen) == -1)
|
||||||
{
|
{
|
||||||
if (!cookie->quiet)
|
log_socket = -1;
|
||||||
|
if (!cookie->quiet && !running_detached)
|
||||||
fprintf (stderr, "can't connect to `%s': %s\n",
|
fprintf (stderr, "can't connect to `%s': %s\n",
|
||||||
cookie->name, strerror(errno));
|
cookie->name, strerror(errno));
|
||||||
close (cookie->fd);
|
close (cookie->fd);
|
||||||
@ -165,19 +175,24 @@ fun_writer (void *cookie_arg, const char *buffer, size_t size)
|
|||||||
if (!writen (cookie->fd, buffer, size))
|
if (!writen (cookie->fd, buffer, size))
|
||||||
return size; /* Okay. */
|
return size; /* Okay. */
|
||||||
|
|
||||||
fprintf (stderr, "error writing to `%s': %s\n",
|
log_socket = -1;
|
||||||
cookie->name, strerror(errno));
|
if (!running_detached)
|
||||||
|
fprintf (stderr, "error writing to `%s': %s\n",
|
||||||
|
cookie->name, strerror(errno));
|
||||||
close (cookie->fd);
|
close (cookie->fd);
|
||||||
cookie->fd = -1;
|
cookie->fd = -1;
|
||||||
|
|
||||||
failure:
|
failure:
|
||||||
if (!cookie->quiet)
|
if (!running_detached)
|
||||||
{
|
{
|
||||||
fputs ("switching logging to stderr\n", stderr);
|
if (!cookie->quiet)
|
||||||
cookie->quiet = 1;
|
{
|
||||||
|
fputs ("switching logging to stderr\n", stderr);
|
||||||
|
cookie->quiet = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fwrite (buffer, size, 1, stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
fwrite (buffer, size, 1, stderr);
|
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,9 +312,10 @@ log_set_prefix (const char *text, unsigned int flags)
|
|||||||
prefix_buffer[sizeof (prefix_buffer)-1] = 0;
|
prefix_buffer[sizeof (prefix_buffer)-1] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
with_prefix = (flags & 1);
|
with_prefix = (flags & JNLIB_LOG_WITH_PREFIX);
|
||||||
with_time = (flags & 2);
|
with_time = (flags & JNLIB_LOG_WITH_TIME);
|
||||||
with_pid = (flags & 4);
|
with_pid = (flags & JNLIB_LOG_WITH_PID);
|
||||||
|
running_detached = (flags & JNLIB_LOG_RUN_DETACHED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -310,30 +326,45 @@ log_get_prefix (unsigned int *flags)
|
|||||||
{
|
{
|
||||||
*flags = 0;
|
*flags = 0;
|
||||||
if (with_prefix)
|
if (with_prefix)
|
||||||
*flags |= 1;
|
*flags |= JNLIB_LOG_WITH_PREFIX;
|
||||||
if (with_time)
|
if (with_time)
|
||||||
*flags |= 2;
|
*flags |= JNLIB_LOG_WITH_TIME;
|
||||||
if (with_pid)
|
if (with_pid)
|
||||||
*flags |=4;
|
*flags |= JNLIB_LOG_WITH_PID;
|
||||||
|
if (running_detached)
|
||||||
|
*flags |= JNLIB_LOG_RUN_DETACHED;
|
||||||
}
|
}
|
||||||
return prefix_buffer;
|
return prefix_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This function returns true if the file descriptor FD is in use for
|
||||||
|
logging. This is preferable over a test using log_get_fd in that
|
||||||
|
it allows the logging code to use more then one file descriptor. */
|
||||||
int
|
int
|
||||||
log_get_fd()
|
log_test_fd (int fd)
|
||||||
{
|
{
|
||||||
return fileno(logstream?logstream:stderr);
|
if (fileno (logstream?logstream:stderr) == fd)
|
||||||
|
return 1;
|
||||||
|
if (log_socket == fd)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
log_get_fd ()
|
||||||
|
{
|
||||||
|
return fileno(logstream?logstream:stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE *
|
FILE *
|
||||||
log_get_stream ()
|
log_get_stream ()
|
||||||
{
|
{
|
||||||
return logstream?logstream:stderr;
|
return logstream?logstream:stderr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_logv( int level, const char *fmt, va_list arg_ptr )
|
do_logv (int level, const char *fmt, va_list arg_ptr)
|
||||||
{
|
{
|
||||||
if (!logstream)
|
if (!logstream)
|
||||||
logstream = stderr;
|
logstream = stderr;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* logging.h
|
/* logging.h
|
||||||
* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
|
* Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This file is part of GnuPG.
|
* This file is part of GnuPG.
|
||||||
*
|
*
|
||||||
@ -24,6 +24,11 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "mischelp.h"
|
#include "mischelp.h"
|
||||||
|
|
||||||
|
/* Flag values for log_set_prefix. */
|
||||||
|
#define JNLIB_LOG_WITH_PREFIX 1
|
||||||
|
#define JNLIB_LOG_WITH_TIME 2
|
||||||
|
#define JNLIB_LOG_WITH_PID 4
|
||||||
|
#define JNLIB_LOG_RUN_DETACHED 256
|
||||||
|
|
||||||
int log_get_errorcount (int clear);
|
int log_get_errorcount (int clear);
|
||||||
void log_inc_errorcount (void);
|
void log_inc_errorcount (void);
|
||||||
@ -31,6 +36,7 @@ void log_set_file( const char *name );
|
|||||||
void log_set_fd (int fd);
|
void log_set_fd (int fd);
|
||||||
void log_set_prefix (const char *text, unsigned int flags);
|
void log_set_prefix (const char *text, unsigned int flags);
|
||||||
const char *log_get_prefix (unsigned int *flags);
|
const char *log_get_prefix (unsigned int *flags);
|
||||||
|
int log_test_fd (int fd);
|
||||||
int log_get_fd(void);
|
int log_get_fd(void);
|
||||||
FILE *log_get_stream (void);
|
FILE *log_get_stream (void);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user