diff options
-rw-r--r-- | src/ChangeLog | 51 | ||||
-rw-r--r-- | src/Makefile.am | 9 | ||||
-rw-r--r-- | src/assuan-buffer.c | 65 | ||||
-rw-r--r-- | src/assuan-domain-connect.c | 81 | ||||
-rw-r--r-- | src/assuan-inquire.c | 3 | ||||
-rw-r--r-- | src/assuan-io.c | 2 | ||||
-rw-r--r-- | src/assuan-listen.c | 2 | ||||
-rw-r--r-- | src/assuan-logging.c | 42 | ||||
-rw-r--r-- | src/assuan-pipe-connect.c | 68 | ||||
-rw-r--r-- | src/assuan-socket-connect.c | 71 | ||||
-rw-r--r-- | src/assuan-util.c | 15 | ||||
-rw-r--r-- | src/assuan.h | 31 |
12 files changed, 232 insertions, 208 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 3fbe19d..0e65c29 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,49 @@ +2003-02-17 Neal H. Walfield <[email protected]> + + * Makefile.am (lib_LIBRARIES): Use this instead of . . . + (noinst_LIBRARIES): . . . this. + (include_HEADERS): New variable. + (libassuan_a_SOURCES): Remove assuan.h, add assuan-logging.c. + + * assuan.h (assuan_set_assuan_log_stream): New prototype. + (assuan_get_assuan_log_stream): Likewise. + (assuan_get_assuan_log_prefix): Likewise. + * assuan-logging.c: New file. + + * assuan-buffer.c [HAVE_JNLIB_LOGGIN]: Do not include + "../jnlib/logging.h". + (my_log_prefix): Remove function. + (_assuan_read_line): Use assuan_get_assuan_log_prefix in lieu of + my_log_prefix. + (assuan_write_line): Likewise. + (_assuan_cookie_write_data): Likewise. + (_assuan_cookie_write_flush): Likewise. + * assuan-domain-connect.c (LOGERROR, LOGERROR1, LOGERROR2, + LOGERRORX): Remove. + (LOG): New macro. + (domain_reader): Use it. + (domain_writer): Likewise. + (domain_sendfd): Likewise. + (domain_receivefd): Likewise. + (_assuan_domain_init): Likewise. + (assuan_domain_connect): Likewise. + * assuan-pipe-connect.c [HAVE_JNLIB_LOGGIN]: Do not include + "../jnlib/logging.h". + (LOGERROR, LOGERROR1, LOGERROR2, LOGERRORX): Remove. + (LOG): New macro. + (assuan_pipe_connect): Use it. + * assuan-socket-connect.c [HAVE_JNLIB_LOGGIN]: Do not include + "../jnlib/logging.h". + (LOGERROR, LOGERROR1, LOGERROR2, LOGERRORX): Remove. + (LOG): New macro. + (assuan_socket_connect): Use it. + (socket_reader): Remove dead code. + (socket_writer): Likewise. + * assuan-util.c [HAVE_JNLIB_LOGGIN]: Do not include + "../jnlib/logging.h". + (_assuan_log_sanitized_string): Use assuan_get_assuan_log_stream, + not jnlib. + 2002-11-24 Neal H. Walfield <[email protected]> * assuan.h (assuan_command_parse_fd): New prototype. @@ -378,11 +424,6 @@ * assuan-defs.h: Add space in the context for this. - *********************************************************** - * Please note that Assuan is maintained as part of GnuPG. * - * You may find it source-copied in other packages. * - *********************************************************** - Copyright 2001, 2002 Free Software Foundation, Inc. This file is free software; as a special exception the author gives diff --git a/src/Makefile.am b/src/Makefile.am index f741a25..7948802 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,5 @@ # Assuan Makefile -# Copyright (C) 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. # # This file is part of Assuan. # @@ -24,12 +24,12 @@ INCLUDES = -I.. -I$(top_srcdir)/include BUILT_SOURCES = assuan-errors.c MOSTLYCLEANFILES = assuan-errors.c -noinst_LIBRARIES = libassuan.a +lib_LIBRARIES = libassuan.a +include_HEADERS = assuan.h #libassuan_a_LDFLAGS = libassuan_a_SOURCES = \ - assuan.h \ assuan-defs.h \ assuan-util.c \ assuan-errors.c \ @@ -45,7 +45,8 @@ libassuan_a_SOURCES = \ assuan-socket-connect.c \ assuan-io.c \ assuan-domain-connect.c \ - assuan-domain-server.c + assuan-domain-server.c \ + assuan-logging.c assuan-errors.c : assuan.h $(srcdir)/mkerrors < $(srcdir)/assuan.h > assuan-errors.c diff --git a/src/assuan-buffer.c b/src/assuan-buffer.c index bbe3990..59518f2 100644 --- a/src/assuan-buffer.c +++ b/src/assuan-buffer.c @@ -1,5 +1,5 @@ /* assuan-buffer.c - read and send data - * Copyright (C) 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. * * This file is part of Assuan. * @@ -27,22 +27,6 @@ #include <assert.h> #include "assuan-defs.h" -#ifdef HAVE_JNLIB_LOGGING -#include "../jnlib/logging.h" -#endif - - -static const char * -my_log_prefix (void) -{ -#ifdef HAVE_JNLIB_LOGGING - return log_get_prefix (NULL); -#else - return ""; -#endif -} - - static int writen (ASSUAN_CONTEXT ctx, const char *buffer, size_t length) { @@ -141,16 +125,17 @@ _assuan_read_line (ASSUAN_CONTEXT ctx) if (rc) { if (ctx->log_fp) - fprintf (ctx->log_fp, "%s[%p] <- [Error: %s]\n", - my_log_prefix (), ctx, strerror (errno)); + fprintf (ctx->log_fp, "%s[%p] <- [Error: %s]\n", + assuan_get_assuan_log_prefix (), ctx, strerror (errno)); return ASSUAN_Read_Error; } if (!nread) { assert (ctx->inbound.eof); if (ctx->log_fp) - fprintf (ctx->log_fp, "%s[%p] <- [EOF]\n", my_log_prefix (),ctx); - return -1; + fprintf (ctx->log_fp, "%s[%p] <- [EOF]\n", + assuan_get_assuan_log_prefix (), ctx); + return -1; } ctx->inbound.attic.pending = 0; @@ -180,11 +165,12 @@ _assuan_read_line (ASSUAN_CONTEXT ctx) ctx->inbound.linelen = endp - line; if (ctx->log_fp) { - fprintf (ctx->log_fp, "%s[%p] <- ", my_log_prefix (), ctx); + fprintf (ctx->log_fp, "%s[%p] <- ", + assuan_get_assuan_log_prefix (), ctx); if (ctx->confidential) fputs ("[Confidential data not shown]", ctx->log_fp); else - _assuan_log_print_buffer (ctx->log_fp, + _assuan_log_print_buffer (ctx->log_fp, ctx->inbound.line, ctx->inbound.linelen); putc ('\n', ctx->log_fp); @@ -195,7 +181,7 @@ _assuan_read_line (ASSUAN_CONTEXT ctx) { if (ctx->log_fp) fprintf (ctx->log_fp, "%s[%p] <- [Invalid line]\n", - my_log_prefix (), ctx); + assuan_get_assuan_log_prefix (), ctx); *line = 0; ctx->inbound.linelen = 0; return ctx->inbound.eof ? ASSUAN_Line_Not_Terminated @@ -255,13 +241,14 @@ assuan_write_line (ASSUAN_CONTEXT ctx, const char *line) /* fixme: we should do some kind of line buffering. */ if (ctx->log_fp) { - fprintf (ctx->log_fp, "%s[%p] -> ", my_log_prefix (), ctx); + fprintf (ctx->log_fp, "%s[%p] -> ", + assuan_get_assuan_log_prefix (), ctx); if (s) - fputs ("[supplied line contained a LF]", ctx->log_fp); + fputs ("[supplied line contained a LF]", ctx->log_fp); if (ctx->confidential) - fputs ("[Confidential data not shown]", ctx->log_fp); + fputs ("[Confidential data not shown]", ctx->log_fp); else - _assuan_log_print_buffer (ctx->log_fp, line, len); + _assuan_log_print_buffer (ctx->log_fp, line, len); putc ('\n', ctx->log_fp); } @@ -327,7 +314,9 @@ _assuan_cookie_write_data (void *cookie, const char *buffer, size_t size) { if (ctx->log_fp) { - fprintf (ctx->log_fp, "%s[%p] -> ", my_log_prefix (), ctx); + fprintf (ctx->log_fp, "%s[%p] -> ", + assuan_get_assuan_log_prefix (), ctx); + if (ctx->confidential) fputs ("[Confidential data not shown]", ctx->log_fp); else @@ -371,15 +360,15 @@ _assuan_cookie_write_flush (void *cookie) if (linelen) { if (ctx->log_fp) - { - fprintf (ctx->log_fp, "%s[%p] -> ", my_log_prefix (), ctx); - if (ctx->confidential) - fputs ("[Confidential data not shown]", ctx->log_fp); - else - _assuan_log_print_buffer (ctx->log_fp, - ctx->outbound.data.line, - linelen); - putc ('\n', ctx->log_fp); + { + fprintf (ctx->log_fp, "%s[%p] -> ", + assuan_get_assuan_log_prefix (), ctx); + if (ctx->confidential) + fputs ("[Confidential data not shown]", ctx->log_fp); + else + _assuan_log_print_buffer (ctx->log_fp, + ctx->outbound.data.line, linelen); + putc ('\n', ctx->log_fp); } *line++ = '\n'; linelen++; diff --git a/src/assuan-domain-connect.c b/src/assuan-domain-connect.c index b4ce519..49dcb55 100644 --- a/src/assuan-domain-connect.c +++ b/src/assuan-domain-connect.c @@ -1,5 +1,5 @@ /* assuan-domain-connect.c - Assuan unix domain socket based client - * Copyright (C) 2002 Free Software Foundation, Inc. + * Copyright (C) 2002, 2003 Free Software Foundation, Inc. * * This file is part of Assuan. * @@ -36,18 +36,11 @@ #include "assuan-defs.h" -#ifdef HAVE_JNLIB_LOGGING -#include "../jnlib/logging.h" -#define LOGERROR(a) log_error ((a)) -#define LOGERROR1(a,b) log_error ((a), (b)) -#define LOGERROR2(a,b,c) log_error ((a), (b), (c)) -#define LOGERRORX(a) log_printf ((a)) -#else -#define LOGERROR(a) fprintf (stderr, (a)) -#define LOGERROR1(a,b) fprintf (stderr, (a), (b)) -#define LOGERROR2(a,b,c) fprintf (stderr, (a), (b), (c)) -#define LOGERRORX(a) fputs ((a), stderr) -#endif +#define LOG(format, args...) \ + fprintf (assuan_get_assuan_log_stream (), \ + assuan_get_assuan_log_prefix (), \ + "%s" format , ## args) + static void do_deinit (ASSUAN_CONTEXT ctx) @@ -91,11 +84,12 @@ domain_reader (ASSUAN_CONTEXT ctx, void *buf, size_t buflen) struct msghdr msg; struct iovec iovec; struct sockaddr_un sender; - struct + struct { struct cmsghdr hdr; int fd; - } cmsg; + } + cmsg; memset (&msg, 0, sizeof (msg)); @@ -169,15 +163,15 @@ domain_reader (ASSUAN_CONTEXT ctx, void *buf, size_t buflen) /* XXX: Arg. Not from whom we expected! What do we want to do? Should we just ignore it? We shall do the latter for the moment. */ - LOGERROR1 ("Not setup to receive messages from: `%s'.", - ((struct sockaddr_un *) msg.msg_name)->sun_path); + LOG ("Not setup to receive messages from: `%s'.", + ((struct sockaddr_un *) msg.msg_name)->sun_path); goto start; } len = recvmsg (ctx->inbound.fd, &msg, 0); if (len < 0) { - LOGERROR1 ("domain_reader: %s\n", strerror (errno)); + LOG ("domain_reader: %s\n", strerror (errno)); return -1; } @@ -193,16 +187,16 @@ domain_reader (ASSUAN_CONTEXT ctx, void *buf, size_t buflen) sizeof (int) * (ctx->pendingfdscount + 1)); if (! tmp) { - LOGERROR1 ("domain_reader: %s\n", strerror (errno)); + LOG ("domain_reader: %s\n", strerror (errno)); return -1; } ctx->pendingfds = tmp; - ctx->pendingfds[ctx->pendingfdscount ++] - = * (int *) CMSG_DATA (&cmsg.hdr); + ctx->pendingfds[ctx->pendingfdscount++] + = *(int *) CMSG_DATA (&cmsg.hdr); - LOGERROR1 ("Received file descriptor %d from peer.\n", - ctx->pendingfds[ctx->pendingfdscount - 1]); + LOG ("Received file descriptor %d from peer.\n", + ctx->pendingfds[ctx->pendingfdscount - 1]); } if (len == 0) @@ -247,7 +241,7 @@ domain_writer (ASSUAN_CONTEXT ctx, const void *buf, size_t buflen) len = sendmsg (ctx->outbound.fd, &msg, 0); if (len < 0) - LOGERROR1 ("domain_writer: %s\n", strerror (errno)); + LOG ("domain_writer: %s\n", strerror (errno)); return len; } @@ -256,11 +250,12 @@ static AssuanError domain_sendfd (ASSUAN_CONTEXT ctx, int fd) { struct msghdr msg; - struct + struct { struct cmsghdr hdr; int fd; - } cmsg; + } + cmsg; int len; memset (&msg, 0, sizeof (msg)); @@ -279,12 +274,12 @@ domain_sendfd (ASSUAN_CONTEXT ctx, int fd) msg.msg_control = &cmsg; msg.msg_controllen = sizeof (cmsg); - * (int *) CMSG_DATA (&cmsg.hdr) = fd; + *(int *) CMSG_DATA (&cmsg.hdr) = fd; len = sendmsg (ctx->outbound.fd, &msg, 0); if (len < 0) { - LOGERROR1 ("domain_sendfd: %s\n", strerror (errno)); + LOG ("domain_sendfd: %s\n", strerror (errno)); return ASSUAN_General_Error; } else @@ -296,7 +291,7 @@ domain_receivefd (ASSUAN_CONTEXT ctx, int *fd) { if (ctx->pendingfds == 0) { - LOGERROR ("No pending file descriptors!\n"); + LOG ("No pending file descriptors!\n"); return ASSUAN_General_Error; } @@ -324,9 +319,7 @@ domain_receivefd (ASSUAN_CONTEXT ctx, int *fd) Assuan context in CTX. SERVER_PID is currently not used but may become handy in the future. */ AssuanError -_assuan_domain_init (ASSUAN_CONTEXT *r_ctx, - int rendezvousfd, - pid_t peer) +_assuan_domain_init (ASSUAN_CONTEXT *r_ctx, int rendezvousfd, pid_t peer) { static struct assuan_io io = { domain_reader, domain_writer, domain_sendfd, domain_receivefd }; @@ -356,7 +349,7 @@ _assuan_domain_init (ASSUAN_CONTEXT *r_ctx, fd = socket (PF_LOCAL, SOCK_DGRAM, 0); if (fd == -1) { - LOGERROR1 ("can't create socket: %s\n", strerror (errno)); + LOG ("can't create socket: %s\n", strerror (errno)); _assuan_release_context (ctx); return ASSUAN_General_Error; } @@ -387,13 +380,13 @@ _assuan_domain_init (ASSUAN_CONTEXT *r_ctx, p = tmpnam (buf); if (! p) { - LOGERROR ("cannot determine an appropriate temporary file " - "name. DOS in progress?\n"); + LOG ("cannot determine an appropriate temporary file " + "name. DOS in progress?\n"); _assuan_release_context (ctx); close (fd); return ASSUAN_General_Error; } - + memset (&ctx->myaddr, 0, sizeof ctx->myaddr); ctx->myaddr.sun_family = AF_LOCAL; len = strlen (buf) + 1; @@ -407,8 +400,8 @@ _assuan_domain_init (ASSUAN_CONTEXT *r_ctx, if (err) { - LOGERROR2 ("can't bind to `%s': %s\n", ctx->myaddr.sun_path, - strerror (errno)); + LOG ("can't bind to `%s': %s\n", ctx->myaddr.sun_path, + strerror (errno)); _assuan_release_context (ctx); close (fd); return ASSUAN_Connect_Failed; @@ -422,7 +415,7 @@ _assuan_domain_init (ASSUAN_CONTEXT *r_ctx, fp = fdopen (rendezvousfd, "w+"); if (! fp) { - LOGERROR1 ("can't open rendezvous port: %s\n", strerror (errno)); + LOG ("can't open rendezvous port: %s\n", strerror (errno)); return ASSUAN_Connect_Failed; } @@ -452,9 +445,7 @@ _assuan_domain_init (ASSUAN_CONTEXT *r_ctx, } AssuanError -assuan_domain_connect (ASSUAN_CONTEXT *r_ctx, - int rendezvousfd, - pid_t peer) +assuan_domain_connect (ASSUAN_CONTEXT * r_ctx, int rendezvousfd, pid_t peer) { AssuanError aerr; int okay, off; @@ -466,12 +457,12 @@ assuan_domain_connect (ASSUAN_CONTEXT *r_ctx, /* Initial handshake. */ aerr = _assuan_read_from_server (*r_ctx, &okay, &off); if (aerr) - LOGERROR1 ("can't connect to server: %s\n", assuan_strerror (aerr)); + LOG ("can't connect to server: %s\n", assuan_strerror (aerr)); else if (okay != 1) { - LOGERROR ("can't connect to server: `"); + LOG ("can't connect to server: `"); _assuan_log_sanitized_string ((*r_ctx)->inbound.line); - LOGERRORX ("'\n"); + fprintf (assuan_get_assuan_log_stream (), "'\n"); aerr = ASSUAN_Connect_Failed; } diff --git a/src/assuan-inquire.c b/src/assuan-inquire.c index 197e210..f4336cb 100644 --- a/src/assuan-inquire.c +++ b/src/assuan-inquire.c @@ -31,7 +31,8 @@ #define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1)) -struct membuf { +struct membuf +{ size_t len; size_t size; char *buf; diff --git a/src/assuan-io.c b/src/assuan-io.c index 924a4ec..b10571b 100644 --- a/src/assuan-io.c +++ b/src/assuan-io.c @@ -1,4 +1,4 @@ -/* assuan-buffer.c - Wraps the read and write functions. +/* assuan-io.c - Wraps the read and write functions. * Copyright (C) 2002 Free Software Foundation, Inc. * * This file is part of Assuan. diff --git a/src/assuan-listen.c b/src/assuan-listen.c index 3d4ee5f..aae3f7b 100644 --- a/src/assuan-listen.c +++ b/src/assuan-listen.c @@ -54,7 +54,7 @@ assuan_set_hello_line (ASSUAN_CONTEXT ctx, const char *line) * assuan_accept: * @ctx: context * - * Cancel any existing connectiion and wait for a connection from a + * Cancel any existing connection and wait for a connection from a * client. The initial handshake is performed which may include an * initial authentication or encryption negotiation. * diff --git a/src/assuan-logging.c b/src/assuan-logging.c new file mode 100644 index 0000000..340ce72 --- /dev/null +++ b/src/assuan-logging.c @@ -0,0 +1,42 @@ +/* assuan-logging.c - Default logging function. + * Copyright (C) 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Assuan. + * + * Assuan is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Assuan is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include "assuan-defs.h" +#include <stdio.h> + +static FILE *_assuan_log; + +void +assuan_set_assuan_log_stream (FILE *fp) +{ + _assuan_log = fp; +} + +FILE * +assuan_get_assuan_log_stream (void) +{ + return _assuan_log ? _assuan_log : stderr; +} + +const char * +assuan_get_assuan_log_prefix (void) +{ + return ""; +} diff --git a/src/assuan-pipe-connect.c b/src/assuan-pipe-connect.c index d7595c9..d30c106 100644 --- a/src/assuan-pipe-connect.c +++ b/src/assuan-pipe-connect.c @@ -1,5 +1,5 @@ /* assuan-pipe-connect.c - Establish a pipe connection (client) - * Copyright (C) 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. * * This file is part of Assuan. * @@ -40,17 +40,13 @@ #define MAX_OPEN_FDS 20 #endif -#ifdef HAVE_JNLIB_LOGGING -#include "../jnlib/logging.h" -#define LOGERROR1(a,b) log_error ((a), (b)) -#else -#define LOGERROR1(a,b) fprintf (stderr, (a), (b)) -#endif - - +#define LOG(format, args...) \ + fprintf (assuan_get_assuan_log_stream (), \ + assuan_get_assuan_log_prefix (), \ + "%s" format , ## args) static int -writen ( int fd, const char *buffer, size_t length ) +writen (int fd, const char *buffer, size_t length) { while (length) { @@ -174,21 +170,21 @@ assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[], /* Dup handles to stdin/stdout. */ if (rp[1] != STDOUT_FILENO) - { - if (dup2 (rp[1], STDOUT_FILENO) == -1) - { - LOGERROR1 ("dup2 failed in child: %s\n", strerror (errno)); - _exit (4); - } - } + { + if (dup2 (rp[1], STDOUT_FILENO) == -1) + { + LOG ("dup2 failed in child: %s\n", strerror (errno)); + _exit (4); + } + } if (wp[0] != STDIN_FILENO) - { - if (dup2 (wp[0], STDIN_FILENO) == -1) - { - LOGERROR1 ("dup2 failed in child: %s\n", strerror (errno)); - _exit (4); - } - } + { + if (dup2 (wp[0], STDIN_FILENO) == -1) + { + LOG ("dup2 failed in child: %s\n", strerror (errno)); + _exit (4); + } + } /* Dup stderr to /dev/null unless it is in the list of FDs to be passed to the child. */ @@ -203,15 +199,15 @@ assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[], int fd = open ("/dev/null", O_WRONLY); if (fd == -1) { - LOGERROR1 ("can't open `/dev/null': %s\n", strerror (errno)); + LOG ("can't open `/dev/null': %s\n", strerror (errno)); _exit (4); - } - if (dup2 (fd, STDERR_FILENO) == -1) - { - LOGERROR1 ("dup2(dev/null, 2) failed: %s\n", strerror (errno)); - _exit (4); - } - } + } + if (dup2 (fd, STDERR_FILENO) == -1) + { + LOG ("dup2(dev/null, 2) failed: %s\n", strerror (errno)); + _exit (4); + } + } /* Close all files which will not be duped and are not in the @@ -253,13 +249,11 @@ assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[], err = _assuan_read_from_server (*ctx, &okay, &off); if (err) - { - LOGERROR1 ("can't connect server: %s\n", assuan_strerror (err)); - } + LOG ("can't connect server: %s\n", assuan_strerror (err)); else if (okay != 1) { - LOGERROR1 ("can't connect server: `%s'\n", (*ctx)->inbound.line); - err = ASSUAN_Connect_Failed; + LOG ("can't connect server: `%s'\n", (*ctx)->inbound.line); + err = ASSUAN_Connect_Failed; } } diff --git a/src/assuan-socket-connect.c b/src/assuan-socket-connect.c index a1bec84..a7246cc 100644 --- a/src/assuan-socket-connect.c +++ b/src/assuan-socket-connect.c @@ -1,5 +1,5 @@ /* assuan-socket-connect.c - Assuan socket based client - * Copyright (C) 2002 Free Software Foundation, Inc. + * Copyright (C) 2002, 2003 Free Software Foundation, Inc. * * This file is part of Assuan. * @@ -29,20 +29,10 @@ #include "assuan-defs.h" -#ifdef HAVE_JNLIB_LOGGING -#include "../jnlib/logging.h" -#define LOGERROR(a) log_error ((a)) -#define LOGERROR1(a,b) log_error ((a), (b)) -#define LOGERROR2(a,b,c) log_error ((a), (b), (c)) -#define LOGERRORX(a) log_printf ((a)) -#else -#define LOGERROR(a) fprintf (stderr, (a)) -#define LOGERROR1(a,b) fprintf (stderr, (a), (b)) -#define LOGERROR2(a,b,c) fprintf (stderr, (a), (b), (c)) -#define LOGERRORX(a) fputs ((a), stderr) -#endif - - +#define LOG(format, args...) \ + fprintf (assuan_get_assuan_log_stream (), \ + assuan_get_assuan_log_prefix (), \ + "%s" format , ## args) static int do_finish (ASSUAN_CONTEXT ctx) @@ -61,29 +51,6 @@ do_deinit (ASSUAN_CONTEXT ctx) { do_finish (ctx); } - - -/* Read from the socket server. */ -static ssize_t -socket_reader (ASSUAN_CONTEXT ctx, void *buf, size_t buflen) -{ -#pragma weak pth_read - extern ssize_t pth_read (int, void *, size_t); - - return (pth_read ? pth_read : read) (ctx->inbound.fd, buf, buflen); -} - -/* Write to the pipe server. */ -static ssize_t -socket_writer (ASSUAN_CONTEXT ctx, const void *buf, size_t buflen) -{ -#pragma weak pth_write - - extern ssize_t pth_write (int, const void *, size_t); - - return (pth_write ? pth_write : write) (ctx->outbound.fd, buf, buflen); -} - /* Make a connection to the Unix domain socket NAME and return a new Assuan context in CTX. SERVER_PID is currently not used but may become handy in the future. */ @@ -121,22 +88,22 @@ assuan_socket_connect (ASSUAN_CONTEXT *r_ctx, fd = socket (PF_LOCAL, SOCK_STREAM, 0); if (fd == -1) { - LOGERROR1 ("can't create socket: %s\n", strerror (errno)); + LOG ("can't create socket: %s\n", strerror (errno)); _assuan_release_context (ctx); return ASSUAN_General_Error; } - - memset (&srvr_addr, 0, sizeof srvr_addr ); + + memset (&srvr_addr, 0, sizeof srvr_addr); srvr_addr.sun_family = AF_LOCAL; len = strlen (srvr_addr.sun_path) + 1; memcpy (srvr_addr.sun_path, name, len); len += (offsetof (struct sockaddr_un, sun_path)); - - if (connect (fd, (struct sockaddr*)&srvr_addr, len) == -1) + + if (connect (fd, (struct sockaddr *) &srvr_addr, len) == -1) { - LOGERROR2 ("can't connect to `%s': %s\n", name, strerror (errno)); + LOG ("can't connect to `%s': %s\n", name, strerror (errno)); _assuan_release_context (ctx); - close (fd ); + close (fd); return ASSUAN_Connect_Failed; } @@ -150,15 +117,13 @@ assuan_socket_connect (ASSUAN_CONTEXT *r_ctx, err = _assuan_read_from_server (ctx, &okay, &off); if (err) - { - LOGERROR1 ("can't connect server: %s\n", assuan_strerror (err)); - } + LOG ("can't connect to server: %s\n", assuan_strerror (err)); else if (okay != 1) { - LOGERROR ("can't connect server: `"); - _assuan_log_sanitized_string (ctx->inbound.line); - LOGERRORX ("'\n"); - err = ASSUAN_Connect_Failed; + LOG ("can't connect to server: `"); + _assuan_log_sanitized_string (ctx->inbound.line); + fprintf (assuan_get_assuan_log_stream (), "'\n"); + err = ASSUAN_Connect_Failed; } } @@ -170,5 +135,3 @@ assuan_socket_connect (ASSUAN_CONTEXT *r_ctx, *r_ctx = ctx; return 0; } - - diff --git a/src/assuan-util.c b/src/assuan-util.c index 76f7f06..fc0beed 100644 --- a/src/assuan-util.c +++ b/src/assuan-util.c @@ -1,5 +1,5 @@ /* assuan-util.c - Utility functions for Assuan - * Copyright (C) 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. * * This file is part of Assuan. * @@ -26,10 +26,6 @@ #include "assuan-defs.h" -#ifdef HAVE_JNLIB_LOGGING -#include "../jnlib/logging.h" -#endif - static void *(*alloc_func)(size_t n) = malloc; static void *(*realloc_func)(void *p, size_t n) = realloc; static void (*free_func)(void*) = free; @@ -159,18 +155,13 @@ _assuan_log_print_buffer (FILE *fp, const void *buffer, size_t length) } } - /* Log a user supplied string. Escapes non-printable before printing. */ void _assuan_log_sanitized_string (const char *string) { const unsigned char *s = string; -#ifdef HAVE_JNLIB_LOGGING - FILE *fp = log_get_stream (); -#else - FILE *fp = stderr; -#endif + FILE *fp = assuan_get_assuan_log_stream (); if (! *s) return; @@ -226,5 +217,3 @@ _assuan_log_sanitized_string (const char *string) funlockfile (fp); #endif } - - diff --git a/src/assuan.h b/src/assuan.h index 37bdd69..5f53827 100644 --- a/src/assuan.h +++ b/src/assuan.h @@ -1,5 +1,5 @@ /* assuan.c - Definitions for the Assuan protocol - * Copyright (C) 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. * * This file is part of Assuan. * @@ -26,18 +26,17 @@ #include <unistd.h> #ifdef __cplusplus -extern "C" { -#if 0 - } -#endif +extern "C" +{ #endif -typedef enum { +typedef enum +{ ASSUAN_No_Error = 0, ASSUAN_General_Error = 1, ASSUAN_Out_Of_Core = 2, ASSUAN_Invalid_Value = 3, - ASSUAN_Timeout = 4, + ASSUAN_Timeout = 4, ASSUAN_Read_Error = 5, ASSUAN_Write_Error = 6, ASSUAN_Problem_Starting_Server = 7, @@ -105,7 +104,8 @@ typedef enum { } AssuanError; /* This is a list of pre-registered ASSUAN commands */ -typedef enum { +typedef enum +{ ASSUAN_CMD_NOP = 0, ASSUAN_CMD_CANCEL, /* cancel the current request */ ASSUAN_CMD_BYE, @@ -257,8 +257,21 @@ void assuan_end_confidential (ASSUAN_CONTEXT ctx); /*-- assuan-errors.c (built) --*/ const char *assuan_strerror (AssuanError err); +/*-- assuan-logging.c --*/ + +/* Set the stream to which assuan should log. By default, this is + stderr. */ +extern void assuan_set_assuan_log_stream (FILE *fp); + +/* Return the stream which is currently being using for logging. */ +extern FILE *assuan_get_assuan_log_stream (void); + +/* User defined call back. Return a prefix to be used at the start of + a line emitted by assuan on the log stream. The default + implementation returns the empty string, i.e. "" */ +extern const char *assuan_get_assuan_log_prefix (void); #ifdef __cplusplus } #endif -#endif /*ASSUAN_H*/ +#endif /* ASSUAN_H */ |