2007-07-04 Marcus Brinkmann <marcus@g10code.de>

* assuan/: Update files to 2007-07-04 version of assuan.
This commit is contained in:
Marcus Brinkmann 2007-07-04 20:03:39 +00:00
parent 1639030a88
commit a63c5c0137
15 changed files with 323 additions and 19 deletions

View File

@ -1,5 +1,7 @@
2007-07-04 Marcus Brinkmann <marcus@g10code.de> 2007-07-04 Marcus Brinkmann <marcus@g10code.de>
* assuan/: Update files to 2007-07-04 version of assuan.
* autogen.sh: Use = not == in test. * autogen.sh: Use = not == in test.
2007-03-05 Werner Koch <wk@g10code.com> 2007-03-05 Werner Koch <wk@g10code.com>

View File

@ -1,3 +1,71 @@
2007-07-04 Marcus Brinkmann <marcus@g10code.de>
Change _WIN32 to HAVE_W32_SYSTEM for consistency.
* assuan-defs.h (struct assuan_context_s): Have full peercred
structure even if not HAVE_SO_PEERCRED, but not if
HAVE_W32_SYSTEM.
2007-06-18 Werner Koch <wk@g10code.com>
* assuan-logging.c (load_libgpg_error, _assuan_gpg_strerror_r)
(_assuan_gpg_strsource): New.
* assuan-handler.c (process_request) [W32]: Use these new
functions for human understable error codes.
2007-06-12 Werner Koch <wk@g10code.com>
* assuan-io.c (_assuan_simple_read): Hack to allow reading from a
socket.
(_assuan_simple_write): Likewise.
2007-06-11 Werner Koch <wk@g10code.com>
* assuan-io-pth.c (_assuan_simple_read, _assuan_simple_write): Use
pth versions also for W32.
2007-05-29 Werner Koch <wk@g10code.com>
* assuan-io-pth.c: Include sys/socket.h only if available. Remove
double inclusion of sys/wait.h
* assuan-pipe-connect.c (build_w32_commandline): Make ARGV const.
* assuan-pipe-server.c (is_valid_socket) [W32]: Do not define.
* assuan-socket-server.c [W32]: Include ws2tcpip.h to define
socklen_t.
* assuan-defs.h (struct assuan_context_s): Define most peercred
members only if we can really set them.
(_assuan_simple_sendmsg, _assuan_simple_recvmsg) [W32]: Use a
different prototype.
* assuan.h (assuan_get_peercred) [W32]: Do not define.
* assuan-io.c (_assuan_simple_sendmsg, _assuan_simple_recvmsg)
[w32]: Use another prototype.
2007-05-09 Werner Koch <wk@g10code.com>
* libassuan.m4: Print found version on success.
2007-05-01 Werner Koch <wk@g10code.com>
* assuan-uds.c (uds_reader): Cast void ptr for arithmetics.
Reported by Peter O'Gorman.
2006-12-03 Marcus Brinkmann <marcus@g10code.de>
* assuan-handler.c (assuan_command_parse_fd): Also allow white
space after FD.
2006-12-02 Marcus Brinkmann <marcus@g10code.de>
* assuan-uds.c (uds_reader): Return 0 if recvmsg returns 0.
2006-12-01 Marcus Brinkmann <marcus@g10code.de>
* assuan-client.c (assuan_transact): Also translate some of the
legacy error codes.
2006-11-22 Werner Koch <wk@g10code.com> 2006-11-22 Werner Koch <wk@g10code.com>
* assuan-handler.c (fun1_cookie_write, fun2_cookie_write): New. * assuan-handler.c (fun1_cookie_write, fun2_cookie_write): New.
@ -328,20 +396,106 @@
* assuan-buffer.c (assuan_write_line): If the line is longer than * assuan-buffer.c (assuan_write_line): If the line is longer than
the maximum line length, bail out early. the maximum line length, bail out early.
2004-04-21 Werner Koch <wk@gnupg.org>
* assuan-socket-server.c (accept_connection_bottom): Save the pid
of the peer if it is available.
* assuan-socket-connect.c (assuan_socket_connect): Do not save the
dummy SERVED_PID arg.
* assuan-pipe-connect.c (do_finish): Don't wait if the pid is 0.
(assuan_pipe_connect2): Store the parents pid in the environment
of the child.
* assuan-pipe-server.c (assuan_init_pipe_server): Initialize the
peer's pid from the environment.
* assuan-connect.c (assuan_get_pid): Do not return 0 as a PID.
2004-04-19 Werner Koch <wk@gnupg.org> 2004-04-19 Werner Koch <wk@gnupg.org>
* assuan-socket-connect.c: Include sys/types.h * assuan-socket-server.c, assuan-socket-connect.c: Includes
* assuan-socket-server.c: Ditto sys/types.h. Reported by Michael Nottebrock.
* assuan-domain-connect.c: Ditto. * assuan-domain-connect.c: Ditto.
2004-04-13 Werner Koch <wk@gnupg.org>
* assuan-util.c (_assuan_log_print_buffer): Relaxed quoting.
(_assuan_log_sanitized_string): Ditto.
2004-03-14 Werner Koch <wk@gnupg.org>
* assuan-handler.c: Include <errno.h>. Reported by Bernd Kuhls.
2004-02-18 Werner Koch <wk@gnupg.org> 2004-02-18 Werner Koch <wk@gnupg.org>
* libassuan-config.in: Ignore setting of --prefix.
* assuan-handler.c (assuan_get_data_fp): Fail with ENOSYS if we * assuan-handler.c (assuan_get_data_fp): Fail with ENOSYS if we
can't implement this. can't implement this.
2004-02-15 Werner Koch <wk@gnupg.org>
* memrchr.c (memrchr): Fixed implementation. Taken from gpgme.
2004-02-13 Werner Koch <wk@gnupg.org> 2004-02-13 Werner Koch <wk@gnupg.org>
* assuan-domain-connect.c: Removed the unneeded alloca.h * assuan-domain-connect.c: Removed the unneeded alloca.h.
2004-01-24 Werner Koch <wk@gnupg.org>
* assuan-pipe-connect.c (assuan_pipe_connect2): New as an
extension of assuan_pipe_connect. Made the latter call this one.
2004-01-14 Werner Koch <wk@gnupg.org>
* assuan-buffer.c (_assuan_cookie_write_data): Return the
requested size to indicate successful operation. Fixes a spurious
bug we previously fixed using fflush().
2003-12-22 Werner Koch <wk@gnupg.org>
* assuan.h (ASSUAN_Locale_Problem): Added.
* assuan-errors.c (assuan_strerror): Ditto.
2003-12-18 Werner Koch <wk@gnupg.org>
* assuan.h (AssuanCommand): Clarified that these are now
deprecated and actually useless.
(assuan_error_t): Clarified and added ASSUAN_USER_ERROR_FIRST,
ASSUAN_USER_ERROR_LAST.
2003-12-16 Werner Koch <wk@gnupg.org>
* assuan-buffer.c: Changed formatting of the debug output prefix.
* assuan-util.c (assuan_set_log_stream): Set global log stream if
it has not been done yet.
* assuan-logging.c (_assuan_set_default_log_stream): New.
(assuan_set_assuan_log_prefix): New.
2003-12-11 Werner Koch <wk@gnupg.org>
* funopen.c (_assuan_funopen): Renamed from funopen, to keep the
name space clean and avoid duplicate definitions if another
library uses the same replacement.
* assuan-defs.h (funopen): Renamed prototype and add a macro.
2003-12-08 Werner Koch <wk@gnupg.org>
* TODO: Removed.
2003-11-12 Werner Koch <wk@gnupg.org>
* assuan-handler.c (process_request): Kludge to print better error
messages for gpg-error enabled programs.
2003-11-06 Werner Koch <wk@gnupg.org>
* assuan.h (assuan_context_t): New. Should be used in favor of
ASSUAN_CONTEXT.
(assuan_error_t): New. To be used instead of AssuanError.
2003-11-11 Moritz Schulte <mo@g10code.com>
* assuan-socket-connect.c (assuan_socket_connect): Fix computation
of socket address length.
2003-08-13 Werner Koch <wk@gnupg.org> 2003-08-13 Werner Koch <wk@gnupg.org>
@ -818,7 +972,7 @@
* assuan-defs.h: Add space in the context for this. * assuan-defs.h: Add space in the context for this.
Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Copyright 2001, 2002, 2006 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

View File

@ -23,6 +23,9 @@ updating this directory, are:
namespace. It also wraps all system functions that are wrapped by namespace. It also wraps all system functions that are wrapped by
GNU Pth to _gpgme wrappers. GNU Pth to _gpgme wrappers.
* assuan-io-pth.c
We don't need this file as GPGME doesn't use sendmsg and recvmsg.
If it would, we would need to pick up the W32 implementation.
Copyright 2004 g10 Code GmbH Copyright 2004 g10 Code GmbH

View File

@ -164,7 +164,7 @@ assuan_transact (assuan_context_t ctx,
rc = atoi (line); rc = atoi (line);
if (rc > 0 && rc < 100) if (rc > 0 && rc < 100)
rc = _assuan_error (ASSUAN_Server_Fault); rc = _assuan_error (ASSUAN_Server_Fault);
else if (rc > 0 && rc <= 128) else if (rc > 0 && rc <= 405)
rc = _assuan_error (rc); rc = _assuan_error (rc);
} }
else if (okay == 2) else if (okay == 2)

View File

@ -62,6 +62,7 @@ assuan_get_pid (assuan_context_t ctx)
/* Return user credentials. PID, UID and GID amy be gived as NULL if /* Return user credentials. PID, UID and GID amy be gived as NULL if
you are not interested in this value. For getting the pid of the you are not interested in this value. For getting the pid of the
peer the assuan_get_pid is usually better suited. */ peer the assuan_get_pid is usually better suited. */
#ifndef HAVE_W32_SYSTEM
assuan_error_t assuan_error_t
assuan_get_peercred (assuan_context_t ctx, pid_t *pid, uid_t *uid, gid_t *gid) assuan_get_peercred (assuan_context_t ctx, pid_t *pid, uid_t *uid, gid_t *gid)
{ {
@ -77,3 +78,4 @@ assuan_get_peercred (assuan_context_t ctx, pid_t *pid, uid_t *uid, gid_t *gid)
*gid = ctx->peercred.gid; *gid = ctx->peercred.gid;
return 0; return 0;
} }
#endif /* HAVE_W32_SYSTEM */

View File

@ -140,12 +140,14 @@ struct assuan_context_s
int listen_fd; /* The fd we are listening on (used by socket servers) */ int listen_fd; /* The fd we are listening on (used by socket servers) */
int connected_fd; /* helper */ int connected_fd; /* helper */
#ifndef HAVE_W32_SYSTEM
struct { struct {
int valid; /* Whether this structure has valid information. */ int valid; /* Whether this structure has valid information. */
pid_t pid; /* The pid of the peer. */ pid_t pid; /* The pid of the peer. */
uid_t uid; /* The uid of the peer. */ uid_t uid; /* The uid of the peer. */
gid_t gid; /* The gid of the peer. */ gid_t gid; /* The gid of the peer. */
} peercred; } peercred;
#endif /* HAVE_W32_SYSTEM */
/* Used for Unix domain sockets. */ /* Used for Unix domain sockets. */
struct sockaddr_un myaddr; struct sockaddr_un myaddr;
@ -259,6 +261,8 @@ void _assuan_free (void *p);
#ifdef HAVE_W32_SYSTEM #ifdef HAVE_W32_SYSTEM
const char *_assuan_w32_strerror (int ec); const char *_assuan_w32_strerror (int ec);
#define w32_strerror(e) _assuan_w32_strerror ((e)) #define w32_strerror(e) _assuan_w32_strerror ((e))
int _assuan_gpg_strerror_r (unsigned int err, char *buf, size_t buflen);
const char *_assuan_gpg_strsource (unsigned int err);
#endif /*HAVE_W32_SYSTEM*/ #endif /*HAVE_W32_SYSTEM*/
@ -280,8 +284,13 @@ pid_t _assuan_waitpid (pid_t pid, int *status, int options);
ssize_t _assuan_simple_read (assuan_context_t ctx, void *buffer, size_t size); ssize_t _assuan_simple_read (assuan_context_t ctx, void *buffer, size_t size);
ssize_t _assuan_simple_write (assuan_context_t ctx, const void *buffer, ssize_t _assuan_simple_write (assuan_context_t ctx, const void *buffer,
size_t size); size_t size);
#ifdef HAVE_W32_SYSTEM
int _assuan_simple_sendmsg (assuan_context_t ctx, void *msg);
int _assuan_simple_recvmsg (assuan_context_t ctx, void *msg);
#else
ssize_t _assuan_simple_sendmsg (assuan_context_t ctx, struct msghdr *msg); ssize_t _assuan_simple_sendmsg (assuan_context_t ctx, struct msghdr *msg);
ssize_t _assuan_simple_recvmsg (assuan_context_t ctx, struct msghdr *msg); ssize_t _assuan_simple_recvmsg (assuan_context_t ctx, struct msghdr *msg);
#endif
/*-- assuan-socket.c --*/ /*-- assuan-socket.c --*/
int _assuan_close (int fd); int _assuan_close (int fd);

View File

@ -142,8 +142,8 @@ assuan_command_parse_fd (assuan_context_t ctx, char *line, int *rfd)
{ {
char *endp; char *endp;
if ( (strncmp (line, "FD", 2) && strncmp (line, "fd", 2)) if ((strncmp (line, "FD", 2) && strncmp (line, "fd", 2))
|| (line[2] != '=' && line[2] != '\0')) || (line[2] != '=' && line[2] != '\0' && !spacep(&line[2])))
return set_error (ctx, Syntax_Error, "FD[=<n>] expected"); return set_error (ctx, Syntax_Error, "FD[=<n>] expected");
line += 2; line += 2;
if (*line == '=') if (*line == '=')
@ -509,7 +509,24 @@ process_request (assuan_context_t ctx)
{ {
const char *text = ctx->err_no == rc? ctx->err_str:NULL; const char *text = ctx->err_no == rc? ctx->err_str:NULL;
#if defined(__GNUC__) && defined(__ELF__) #if defined(HAVE_W32_SYSTEM)
unsigned int source, code;
char ebuf[50];
const char *esrc;
source = ((rc >> 24) & 0xff);
code = (rc & 0x00ffffff);
if (source
&& !_assuan_gpg_strerror_r (rc, ebuf, sizeof ebuf)
&& (esrc=_assuan_gpg_strsource (rc)))
{
/* Assume this is an libgpg-error. */
sprintf (errline, "ERR %d %.50s <%.30s>%s%.100s",
rc, ebuf, esrc,
text? " - ":"", text?text:"");
}
else
#elif defined(__GNUC__) && defined(__ELF__)
/* If we have weak symbol support we try to use the error /* If we have weak symbol support we try to use the error
strings from libgpg-error without creating a dependency. strings from libgpg-error without creating a dependency.
They are used for debugging purposes only, so there is no They are used for debugging purposes only, so there is no
@ -526,7 +543,7 @@ process_request (assuan_context_t ctx)
__attribute__ ((weak)); __attribute__ ((weak));
const char *gpg_strsource (unsigned int err) const char *gpg_strsource (unsigned int err)
__attribute__ ((weak)); __attribute__ ((weak));
#if !defined(HAVE_W32_SYSTEM) && __GNUC__ < 3 #if __GNUC__ < 3
#pragma weak gpg_strerror_r #pragma weak gpg_strerror_r
#pragma weak gpg_strsource #pragma weak gpg_strsource
#endif #endif

View File

@ -25,7 +25,9 @@
#include <sys/time.h> #include <sys/time.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/socket.h> #ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#ifdef HAVE_W32_SYSTEM #ifdef HAVE_W32_SYSTEM
@ -49,18 +51,69 @@ _assuan_waitpid (pid_t pid, int *status, int options)
ssize_t ssize_t
_assuan_simple_read (assuan_context_t ctx, void *buffer, size_t size) _assuan_simple_read (assuan_context_t ctx, void *buffer, size_t size)
{ {
#ifdef HAVE_W32_SYSTEM
/* Due to the peculiarities of the W32 API we can't use read for a
network socket and thus we try to use recv first and fallback to
read if recv detects that it is not a network socket. */
int n;
n = recv (ctx->inbound.fd, buffer, size, 0);
if (n == -1 && WSAGetLastError () == WSAENOTSOCK)
{
DWORD nread = 0;
n = ReadFile ((HANDLE)ctx->inbound.fd, buffer, size, &nread, NULL);
if (!n)
{
errno = EIO; /* FIXME: We should have a proper mapping. */
n = -1;
}
else
n = (int)nread;
}
return n;
#else /*!HAVE_W32_SYSTEM*/
return read (ctx->inbound.fd, buffer, size); return read (ctx->inbound.fd, buffer, size);
#endif /*!HAVE_W32_SYSTEM*/
} }
ssize_t ssize_t
_assuan_simple_write (assuan_context_t ctx, const void *buffer, size_t size) _assuan_simple_write (assuan_context_t ctx, const void *buffer, size_t size)
{ {
#ifdef HAVE_W32_SYSTEM
/* Due to the peculiarities of the W32 API we can't use write for a
network socket and thus we try to use send first and fallback to
write if send detects that it is not a network socket. */
int n;
n = send (ctx->outbound.fd, buffer, size, 0);
if (n == -1 && WSAGetLastError () == WSAENOTSOCK)
{
DWORD nwrite;
n = WriteFile ((HANDLE)ctx->outbound.fd, buffer, size, &nwrite, NULL);
if (!n)
{
errno = EIO; /* FIXME: We should have a proper mapping. */
n = -1;
}
else
n = (int)nwrite;
}
return n;
#else /*!HAVE_W32_SYSTEM*/
return write (ctx->outbound.fd, buffer, size); return write (ctx->outbound.fd, buffer, size);
#endif /*!HAVE_W32_SYSTEM*/
} }
#ifdef HAVE_W32_SYSTEM
int
_assuan_simple_sendmsg (assuan_context_t ctx, void *msg)
#else
ssize_t ssize_t
_assuan_simple_sendmsg (assuan_context_t ctx, struct msghdr *msg) _assuan_simple_sendmsg (assuan_context_t ctx, struct msghdr *msg)
#endif
{ {
#ifdef HAVE_W32_SYSTEM #ifdef HAVE_W32_SYSTEM
return _assuan_error (ASSUAN_Not_Implemented); return _assuan_error (ASSUAN_Not_Implemented);
@ -73,8 +126,13 @@ _assuan_simple_sendmsg (assuan_context_t ctx, struct msghdr *msg)
} }
#ifdef HAVE_W32_SYSTEM
int
_assuan_simple_recvmsg (assuan_context_t ctx, void *msg)
#else
ssize_t ssize_t
_assuan_simple_recvmsg (assuan_context_t ctx, struct msghdr *msg) _assuan_simple_recvmsg (assuan_context_t ctx, struct msghdr *msg)
#endif
{ {
#ifdef HAVE_W32_SYSTEM #ifdef HAVE_W32_SYSTEM
return _assuan_error (ASSUAN_Not_Implemented); return _assuan_error (ASSUAN_Not_Implemented);

View File

@ -1,5 +1,5 @@
/* assuan-logging.c - Default logging function. /* assuan-logging.c - Default logging function.
* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. * Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
* *
* This file is part of Assuan. * This file is part of Assuan.
* *
@ -238,4 +238,51 @@ _assuan_w32_strerror (int ec)
strerr, sizeof (strerr)-1, NULL); strerr, sizeof (strerr)-1, NULL);
return strerr; return strerr;
} }
static int (*my_strerror_r) (unsigned int err, char *buf, size_t buflen);
static const char * (*my_strsource) (unsigned int err);
static int
load_libgpg_error (void)
{
/* This code is not race free but suitable for our purpose. */
static volatile int initialized;
void *handle;
if (initialized)
return (my_strerror_r && my_strsource)? 0:-1;
handle = LoadLibrary ("libgpg-error-0.dll");
if (handle)
{
void *foo, *bar;
foo = GetProcAddress (handle, "gpg_strerror_r");
bar = GetProcAddress (handle, "gpg_strsource");
if (foo && bar)
{
my_strerror_r = foo;
my_strsource = bar;
}
else
CloseHandle (handle);
}
initialized = 1;
return 0;
}
int
_assuan_gpg_strerror_r (unsigned int err, char *buf, size_t buflen)
{
if (load_libgpg_error ())
return -1;
return my_strerror_r (err, buf, buflen);
}
const char *
_assuan_gpg_strsource (unsigned int err)
{
if (load_libgpg_error ())
return NULL;
return my_strsource (err);
}
#endif /*HAVE_W32_SYSTEM*/ #endif /*HAVE_W32_SYSTEM*/

View File

@ -554,7 +554,7 @@ socketpair_connect (assuan_context_t *ctx,
/* Build a command line for use with W32's CreateProcess. On success /* Build a command line for use with W32's CreateProcess. On success
CMDLINE gets the address of a newly allocated string. */ CMDLINE gets the address of a newly allocated string. */
static int static int
build_w32_commandline (char * const *argv, char **cmdline) build_w32_commandline (const char * const *argv, char **cmdline)
{ {
int i, n; int i, n;
const char *s; const char *s;

View File

@ -92,6 +92,7 @@ _assuan_new_context (assuan_context_t *r_ctx)
/* Returns true if atoi(S) denotes a valid socket. */ /* Returns true if atoi(S) denotes a valid socket. */
#ifndef HAVE_W32_SYSTEM
static int static int
is_valid_socket (const char *s) is_valid_socket (const char *s)
{ {
@ -101,6 +102,7 @@ is_valid_socket (const char *s)
return 0; return 0;
return S_ISSOCK (buf.st_mode); return S_ISSOCK (buf.st_mode);
} }
#endif /*!HAVE_W32_SYSTEM*/
int int

View File

@ -25,13 +25,19 @@
#include <errno.h> #include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <sys/types.h> #include <sys/types.h>
#ifndef HAVE_W32_SYSTEM #ifdef HAVE_W32_SYSTEM
#include <sys/socket.h> # include <windows.h>
#include <sys/un.h> # if HAVE_SYS_SOCKET_H
# include <sys/socket.h>
# elif HAVE_WS2TCPIP_H
# include <ws2tcpip.h>
# endif
#else #else
#include <windows.h> # include <sys/socket.h>
# include <sys/un.h>
#endif #endif
#include "assuan-defs.h" #include "assuan-defs.h"
static struct assuan_io io = { _assuan_simple_read, static struct assuan_io io = { _assuan_simple_read,

View File

@ -111,6 +111,8 @@ uds_reader (assuan_context_t ctx, void *buf, size_t buflen)
len = _assuan_simple_recvmsg (ctx, &msg); len = _assuan_simple_recvmsg (ctx, &msg);
if (len < 0) if (len < 0)
return -1; return -1;
if (len == 0)
return 0;
ctx->uds.buffersize = len; ctx->uds.buffersize = len;
ctx->uds.bufferoffset = 0; ctx->uds.bufferoffset = 0;
@ -150,7 +152,7 @@ uds_reader (assuan_context_t ctx, void *buf, size_t buflen)
if (len > buflen) /* We have more than the user requested. */ if (len > buflen) /* We have more than the user requested. */
len = buflen; len = buflen;
memcpy (buf, ctx->uds.buffer + ctx->uds.bufferoffset, len); memcpy (buf, (char*)ctx->uds.buffer + ctx->uds.bufferoffset, len);
ctx->uds.buffersize -= len; ctx->uds.buffersize -= len;
assert (ctx->uds.buffersize >= 0); assert (ctx->uds.buffersize >= 0);
ctx->uds.bufferoffset += len; ctx->uds.bufferoffset += len;

View File

@ -460,8 +460,10 @@ assuan_error_t assuan_socket_connect_ext (assuan_context_t *ctx,
/*-- assuan-connect.c --*/ /*-- assuan-connect.c --*/
void assuan_disconnect (assuan_context_t ctx); void assuan_disconnect (assuan_context_t ctx);
pid_t assuan_get_pid (assuan_context_t ctx); pid_t assuan_get_pid (assuan_context_t ctx);
#ifndef HAVE_W32_SYSTEM
assuan_error_t assuan_get_peercred (assuan_context_t ctx, assuan_error_t assuan_get_peercred (assuan_context_t ctx,
pid_t *pid, uid_t *uid, gid_t *gid); pid_t *pid, uid_t *uid, gid_t *gid);
#endif
/*-- assuan-client.c --*/ /*-- assuan-client.c --*/
assuan_error_t assuan_error_t

View File

@ -31,7 +31,7 @@ check_version () {
DIE=no DIE=no
FORCE= FORCE=
if test "$1" == "--force"; then if test "$1" = "--force"; then
FORCE=" --force" FORCE=" --force"
shift shift
fi fi