mirror of
git://git.gnupg.org/gnupg.git
synced 2024-11-10 21:38:50 +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>
|
||||
|
||||
* 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
|
||||
when adding any stuff between here and the call to INIT_SECMEM()
|
||||
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. */
|
||||
set_native_charset (NULL);
|
||||
@ -652,11 +652,13 @@ main (int argc, char **argv )
|
||||
bind_textdomain_codeset (PACKAGE_GT, "UTF-8");
|
||||
#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)
|
||||
{
|
||||
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. */
|
||||
@ -754,7 +756,7 @@ main (int argc, char **argv )
|
||||
exit (1);
|
||||
}
|
||||
else if (pid)
|
||||
{ /* we are the parent */
|
||||
{ /* We are the parent */
|
||||
char *infostr;
|
||||
|
||||
close (fd);
|
||||
@ -803,17 +805,20 @@ main (int argc, char **argv )
|
||||
} /* 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 )
|
||||
{
|
||||
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++)
|
||||
{
|
||||
if ( log_get_fd () != i)
|
||||
if (!log_test_fd (i) )
|
||||
close (i);
|
||||
}
|
||||
if (setsid() == -1)
|
||||
@ -822,6 +827,9 @@ main (int argc, char **argv )
|
||||
cleanup ();
|
||||
exit (1);
|
||||
}
|
||||
|
||||
log_get_prefix (&oldflags);
|
||||
log_set_prefix (NULL, oldflags | JNLIB_LOG_RUN_DETACHED);
|
||||
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>
|
||||
|
||||
* 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. *
|
||||
***********************************************************
|
||||
|
||||
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
|
||||
unlimited permission to copy and/or distribute it, with or without
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* 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.
|
||||
*
|
||||
@ -46,10 +47,12 @@
|
||||
|
||||
|
||||
static FILE *logstream;
|
||||
static int log_socket = -1;
|
||||
static char prefix_buffer[80];
|
||||
static int with_time;
|
||||
static int with_prefix;
|
||||
static int with_pid;
|
||||
static int running_detached;
|
||||
static int force_prefixes;
|
||||
|
||||
static int missing_lf;
|
||||
@ -125,8 +128,13 @@ fun_writer (void *cookie_arg, const char *buffer, size_t size)
|
||||
{
|
||||
struct fun_cookie_s *cookie = cookie_arg;
|
||||
|
||||
/* Note that we always try to reconnect to the socket but print error
|
||||
messages only the first time an error occured. */
|
||||
/* Note that we always try to reconnect to the socket but print
|
||||
error messages only the first time an error occured. IF
|
||||
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. */
|
||||
@ -136,11 +144,12 @@ fun_writer (void *cookie_arg, const char *buffer, size_t size)
|
||||
cookie->fd = socket (PF_LOCAL, SOCK_STREAM, 0);
|
||||
if (cookie->fd == -1)
|
||||
{
|
||||
if (!cookie->quiet)
|
||||
if (!cookie->quiet && !running_detached)
|
||||
fprintf (stderr, "failed to create socket for logging: %s\n",
|
||||
strerror(errno));
|
||||
goto failure;
|
||||
}
|
||||
log_socket = cookie->fd;
|
||||
|
||||
memset (&addr, 0, sizeof addr);
|
||||
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 (!cookie->quiet)
|
||||
log_socket = -1;
|
||||
if (!cookie->quiet && !running_detached)
|
||||
fprintf (stderr, "can't connect to `%s': %s\n",
|
||||
cookie->name, strerror(errno));
|
||||
close (cookie->fd);
|
||||
@ -165,12 +175,16 @@ fun_writer (void *cookie_arg, const char *buffer, size_t size)
|
||||
if (!writen (cookie->fd, buffer, size))
|
||||
return size; /* Okay. */
|
||||
|
||||
log_socket = -1;
|
||||
if (!running_detached)
|
||||
fprintf (stderr, "error writing to `%s': %s\n",
|
||||
cookie->name, strerror(errno));
|
||||
close (cookie->fd);
|
||||
cookie->fd = -1;
|
||||
|
||||
failure:
|
||||
if (!running_detached)
|
||||
{
|
||||
if (!cookie->quiet)
|
||||
{
|
||||
fputs ("switching logging to stderr\n", stderr);
|
||||
@ -178,6 +192,7 @@ fun_writer (void *cookie_arg, const char *buffer, size_t size)
|
||||
}
|
||||
|
||||
fwrite (buffer, size, 1, stderr);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
@ -297,9 +312,10 @@ log_set_prefix (const char *text, unsigned int flags)
|
||||
prefix_buffer[sizeof (prefix_buffer)-1] = 0;
|
||||
}
|
||||
|
||||
with_prefix = (flags & 1);
|
||||
with_time = (flags & 2);
|
||||
with_pid = (flags & 4);
|
||||
with_prefix = (flags & JNLIB_LOG_WITH_PREFIX);
|
||||
with_time = (flags & JNLIB_LOG_WITH_TIME);
|
||||
with_pid = (flags & JNLIB_LOG_WITH_PID);
|
||||
running_detached = (flags & JNLIB_LOG_RUN_DETACHED);
|
||||
}
|
||||
|
||||
|
||||
@ -310,15 +326,30 @@ log_get_prefix (unsigned int *flags)
|
||||
{
|
||||
*flags = 0;
|
||||
if (with_prefix)
|
||||
*flags |= 1;
|
||||
*flags |= JNLIB_LOG_WITH_PREFIX;
|
||||
if (with_time)
|
||||
*flags |= 2;
|
||||
*flags |= JNLIB_LOG_WITH_TIME;
|
||||
if (with_pid)
|
||||
*flags |=4;
|
||||
*flags |= JNLIB_LOG_WITH_PID;
|
||||
if (running_detached)
|
||||
*flags |= JNLIB_LOG_RUN_DETACHED;
|
||||
}
|
||||
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
|
||||
log_test_fd (int fd)
|
||||
{
|
||||
if (fileno (logstream?logstream:stderr) == fd)
|
||||
return 1;
|
||||
if (log_socket == fd)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
log_get_fd ()
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* 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.
|
||||
*
|
||||
@ -24,6 +24,11 @@
|
||||
#include <stdio.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);
|
||||
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_prefix (const char *text, unsigned int flags);
|
||||
const char *log_get_prefix (unsigned int *flags);
|
||||
int log_test_fd (int fd);
|
||||
int log_get_fd(void);
|
||||
FILE *log_get_stream (void);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user