2004-01-30 Werner Koch <wk@gnupg.org>
authorWerner Koch <wk@gnupg.org>
Tue, 20 Apr 2004 04:48:06 +0000 (04:48 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 20 Apr 2004 04:48:06 +0000 (04:48 +0000)
* assuan-inquire.c, assuan-connect.c, assuan-client.c
* assuan-socket-server.c, assuan-pipe-connect.c
* assuan-socket-connect.c: Removed.
* assuan-handler.c (assuan_get_data_fp): Removed.

assuan/ChangeLog
assuan/Makefile.am
assuan/assuan-client.c [deleted file]
assuan/assuan-connect.c [deleted file]
assuan/assuan-handler.c
assuan/assuan-inquire.c [deleted file]
assuan/assuan-pipe-connect.c [deleted file]
assuan/assuan-socket-connect.c [deleted file]
assuan/assuan-socket-server.c [deleted file]
assuan/assuan.h

index f4c6661..65e3f23 100644 (file)
@@ -1,3 +1,10 @@
+2004-01-30  Werner Koch  <wk@gnupg.org>
+
+       * assuan-inquire.c, assuan-connect.c, assuan-client.c
+       * assuan-socket-server.c, assuan-pipe-connect.c
+       * assuan-socket-connect.c: Removed.
+       * assuan-handler.c (assuan_get_data_fp): Removed.
+
 2003-12-23  Werner Koch  <wk@gnupg.org>
 
        * Makefile.am (EXTRA_DIST): Added Manifest.
 
        
      ************************************************************
-     * Please note that Assuan is source copied from libassuan. *
+     * Please note that this is a stripped down Assuan version.  *
      ************************************************************      
        
- Copyright 2001, 2002 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 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
index 6616b87..df06ecf 100644 (file)
@@ -35,14 +35,8 @@ libassuan_a_SOURCES = \
        assuan-errors.c \
        assuan-buffer.c \
        assuan-handler.c \
-       assuan-inquire.c \
        assuan-listen.c \
-       assuan-connect.c \
-       assuan-client.c \
-       assuan-pipe-server.c \
-       assuan-socket-server.c \
-       assuan-pipe-connect.c \
-       assuan-socket-connect.c 
+       assuan-pipe-server.c
 
 
 assuan-errors.c : assuan.h
diff --git a/assuan/assuan-client.c b/assuan/assuan-client.c
deleted file mode 100644 (file)
index 6c7a6e3..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/* assuan-client.c - client functions
- *     Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG 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 General Public License for more details.
- *
- * You should have received a copy of the GNU 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 <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <assert.h>
-
-#include "assuan-defs.h"
-
-#define xtoi_1(p)   (*(p) <= '9'? (*(p)- '0'): \
-                     *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p)   ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-
-AssuanError
-_assuan_read_from_server (ASSUAN_CONTEXT ctx, int *okay, int *off)
-{
-  char *line;
-  int linelen;
-  AssuanError rc;
-
-  *okay = 0;
-  *off = 0;
-  do 
-    {
-      rc = _assuan_read_line (ctx);
-      if (rc)
-        return rc;
-      line = ctx->inbound.line;
-      linelen = ctx->inbound.linelen;
-    }    
-  while (*line == '#' || !linelen);
-
-  if (linelen >= 1
-      && line[0] == 'D' && line[1] == ' ')
-    {
-      *okay = 2; /* data line */
-      *off = 2;
-    }
-  else if (linelen >= 1
-           && line[0] == 'S' 
-           && (line[1] == '\0' || line[1] == ' '))
-    {
-      *okay = 4;
-      *off = 1;
-      while (line[*off] == ' ')
-        ++*off;
-    }  
-  else if (linelen >= 2
-           && line[0] == 'O' && line[1] == 'K'
-           && (line[2] == '\0' || line[2] == ' '))
-    {
-      *okay = 1;
-      *off = 2;
-      while (line[*off] == ' ')
-        ++*off;
-    }
-  else if (linelen >= 3
-           && line[0] == 'E' && line[1] == 'R' && line[2] == 'R'
-           && (line[3] == '\0' || line[3] == ' '))
-    {
-      *okay = 0;
-      *off = 3;
-      while (line[*off] == ' ')
-        ++*off;
-    }  
-  else if (linelen >= 7
-           && line[0] == 'I' && line[1] == 'N' && line[2] == 'Q'
-           && line[3] == 'U' && line[4] == 'I' && line[5] == 'R'
-           && line[6] == 'E' 
-           && (line[7] == '\0' || line[7] == ' '))
-    {
-      *okay = 3;
-      *off = 7;
-      while (line[*off] == ' ')
-        ++*off;
-    }
-  else if (linelen >= 3
-           && line[0] == 'E' && line[1] == 'N' && line[2] == 'D'
-           && (line[3] == '\0' || line[3] == ' '))
-    {
-      *okay = 5; /* end line */
-      *off = 3;
-    }
-  else
-    rc = ASSUAN_Invalid_Response;
-  return rc;
-}
-
-
-\f
-/**
- * assuan_transact:
- * @ctx: The Assuan context
- * @command: Coimmand line to be send to server
- * @data_cb: Callback function for data lines
- * @data_cb_arg: first argument passed to @data_cb
- * @inquire_cb: Callback function for a inquire response
- * @inquire_cb_arg: first argument passed to @inquire_cb
- * @status_cb: Callback function for a status response
- * @status_cb_arg: first argument passed to @status_cb
- * 
- * FIXME: Write documentation
- * 
- * Return value: 0 on success or error code.  The error code may be
- * the one one returned by the server in error lines or from the
- * callback functions.
- **/
-AssuanError
-assuan_transact (ASSUAN_CONTEXT ctx,
-                 const char *command,
-                 AssuanError (*data_cb)(void *, const void *, size_t),
-                 void *data_cb_arg,
-                 AssuanError (*inquire_cb)(void*, const char *),
-                 void *inquire_cb_arg,
-                 AssuanError (*status_cb)(void*, const char *),
-                 void *status_cb_arg)
-{
-  int rc, okay, off;
-  unsigned char *line;
-  int linelen;
-
-  rc = assuan_write_line (ctx, command);
-  if (rc)
-    return rc;
-
- again:
-  rc = _assuan_read_from_server (ctx, &okay, &off);
-  if (rc)
-    return rc; /* error reading from server */
-
-  line = ctx->inbound.line + off;
-  linelen = ctx->inbound.linelen - off;
-
-  if (!okay)
-    {
-      rc = atoi (line);
-      if (rc < 100)
-        rc = ASSUAN_Server_Fault;
-    }
-  else if (okay == 2)
-    {
-      if (!data_cb)
-        rc = ASSUAN_No_Data_Callback;
-      else 
-        {
-          unsigned char *s, *d;
-
-          for (s=d=line; linelen; linelen--)
-            {
-              if (*s == '%' && linelen > 2)
-                { /* handle escaping */
-                  s++;
-                  *d++ = xtoi_2 (s);
-                  s += 2;
-                  linelen -= 2;
-                }
-              else
-                *d++ = *s++;
-            }
-          *d = 0; /* add a hidden string terminator */
-          rc = data_cb (data_cb_arg, line, d - line);
-          if (!rc)
-            goto again;
-        }
-    }
-  else if (okay == 3)
-    {
-      if (!inquire_cb)
-        {
-          assuan_write_line (ctx, "END"); /* get out of inquire mode */
-          _assuan_read_from_server (ctx, &okay, &off); /* dummy read */
-          rc = ASSUAN_No_Inquire_Callback;
-        }
-      else
-        {
-          rc = inquire_cb (inquire_cb_arg, line);
-          if (!rc)
-            rc = assuan_send_data (ctx, NULL, 0); /* flush and send END */
-          if (!rc)
-            goto again;
-        }
-    }
-  else if (okay == 4)
-    {
-      if (status_cb)
-        rc = status_cb (status_cb_arg, line);
-      if (!rc)
-        goto again;
-    }
-  else if (okay == 5)
-    {
-      if (!data_cb)
-        rc = ASSUAN_No_Data_Callback;
-      else 
-        {
-          rc = data_cb (data_cb_arg, NULL, 0);
-          if (!rc)
-            goto again;
-        }
-    }
-
-  return rc;
-}
-
diff --git a/assuan/assuan-connect.c b/assuan/assuan-connect.c
deleted file mode 100644 (file)
index 49d4aac..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* assuan-connect.c - Establish a connection (client) 
- *     Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG 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 General Public License for more details.
- *
- * You should have received a copy of the GNU 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <signal.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "assuan-defs.h"
-
-/* Disconnect and release the context CTX. */
-void
-assuan_disconnect (ASSUAN_CONTEXT ctx)
-{
-  if (ctx)
-    {
-      assuan_write_line (ctx, "BYE");
-      ctx->finish_handler (ctx);
-      ctx->deinit_handler (ctx);
-      ctx->deinit_handler = NULL;
-      _assuan_release_context (ctx);
-    }
-}
-
-pid_t
-assuan_get_pid (ASSUAN_CONTEXT ctx)
-{
-  return ctx ? ctx->pid : -1;
-}
index 69b34b4..6c40442 100644 (file)
@@ -593,32 +593,6 @@ assuan_get_active_fds (ASSUAN_CONTEXT ctx, int what,
   return n;
 }
 
-/* Return a FP to be used for data output.  The FILE pointer is valid
-   until the end of a handler.  So a close is not needed.  Assuan does
-   all the buffering needed to insert the status line as well as the
-   required line wappping and quoting for data lines.
-
-   We use GNU's custom streams here.  There should be an alternative
-   implementaion for systems w/o a glibc, a simple implementation
-   could use a child process */
-FILE *
-assuan_get_data_fp (ASSUAN_CONTEXT ctx)
-{
-  cookie_io_functions_t cookie_fnc;
-
-  if (ctx->outbound.data.fp)
-    return ctx->outbound.data.fp;
-  
-  cookie_fnc.read = NULL; 
-  cookie_fnc.write = _assuan_cookie_write_data;
-  cookie_fnc.seek = NULL;
-  cookie_fnc.close = _assuan_cookie_write_flush;
-
-  ctx->outbound.data.fp = fopencookie (ctx, "wb", cookie_fnc);
-  ctx->outbound.data.error = 0;
-  return ctx->outbound.data.fp;
-}
-
 
 /* Set the text used for the next OK reponse.  This string is
    automatically reset to NULL after the next command. */
diff --git a/assuan/assuan-inquire.c b/assuan/assuan-inquire.c
deleted file mode 100644 (file)
index 2bac130..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-/* assuan-inquire.c - handle inquire stuff
- *     Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG 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 General Public License for more details.
- *
- * You should have received a copy of the GNU 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 <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "assuan-defs.h"
-
-#define digitp(a) ((a) >= '0' && (a) <= '9')
-#define xtoi_1(p)   (*(p) <= '9'? (*(p)- '0'): \
-                     *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p)   ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-
-struct membuf {
-  size_t len;
-  size_t size;
-  char *buf;
-  int out_of_core;
-  int too_large;
-  size_t maxlen;
-};
-
-
-\f
-/* A simple implemnation of a dynamic buffer.  Use init_membuf() to
-   create a buffer, put_membuf to append bytes and get_membuf to
-   release and return the buffer.  Allocation errors are detected but
-   only returned at the final get_membuf(), this helps not to clutter
-   the code with out of core checks.  */
-
-static void
-init_membuf (struct membuf *mb, int initiallen, size_t maxlen)
-{
-  mb->len = 0;
-  mb->size = initiallen;
-  mb->out_of_core = 0;
-  mb->too_large = 0;
-  mb->maxlen = maxlen;
-  /* we need to allocate one byte more for get_membuf */
-  mb->buf = xtrymalloc (initiallen+1);
-  if (!mb->buf)
-      mb->out_of_core = 1;
-}
-
-static void
-put_membuf (struct membuf *mb, const void *buf, size_t len)
-{
-  if (mb->out_of_core || mb->too_large)
-    return;
-
-  if (mb->maxlen && mb->len + len > mb->maxlen)
-    {
-      mb->too_large = 1;
-      return;
-    }
-
-  if (mb->len + len >= mb->size)
-    {
-      char *p;
-      
-      mb->size += len + 1024;
-      /* we need to allocate one byte more for get_membuf */
-      p = xtryrealloc (mb->buf, mb->size+1);
-      if (!p)
-        {
-          mb->out_of_core = 1;
-          return;
-        }
-      mb->buf = p;
-    }
-  memcpy (mb->buf + mb->len, buf, len);
-  mb->len += len;
-}
-
-static void *
-get_membuf (struct membuf *mb, size_t *len)
-{
-  char *p;
-
-  if (mb->out_of_core || mb->too_large)
-    {
-      xfree (mb->buf);
-      mb->buf = NULL;
-      return NULL;
-    }
-
-  mb->buf[mb->len] = 0; /* there is enough space for the hidden eos */
-  p = mb->buf;
-  *len = mb->len;
-  mb->buf = NULL;
-  mb->out_of_core = 1; /* don't allow a reuse */
-  return p;
-}
-
-static void
-free_membuf (struct membuf *mb)
-{
-  xfree (mb->buf);
-  mb->buf = NULL;
-}
-
-
-/**
- * assuan_inquire:
- * @ctx: An assuan context
- * @keyword: The keyword used for the inquire
- * @r_buffer: Returns an allocated buffer
- * @r_length: Returns the length of this buffer
- * @maxlen: If not 0, the size limit of the inquired data.
- * 
- * A Server may use this to Send an inquire.  r_buffer, r_length and
- * maxlen may all be NULL/0 to indicate that no real data is expected.
- * 
- * Return value: 0 on success or an ASSUAN error code
- **/
-AssuanError
-assuan_inquire (ASSUAN_CONTEXT ctx, const char *keyword,
-                char **r_buffer, size_t *r_length, size_t maxlen)
-{
-  AssuanError rc;
-  struct membuf mb;
-  char cmdbuf[100];
-  unsigned char *line, *p;
-  int linelen;
-  int nodataexpected;
-
-  if (!ctx || !keyword || (10 + strlen (keyword) >= sizeof (cmdbuf)))
-    return ASSUAN_Invalid_Value;
-  nodataexpected = !r_buffer && !r_length && !maxlen;
-  if (!nodataexpected && (!r_buffer || !r_length))
-    return ASSUAN_Invalid_Value;
-  if (!ctx->is_server)
-    return ASSUAN_Not_A_Server;
-  if (ctx->in_inquire)
-    return ASSUAN_Nested_Commands;
-  
-  ctx->in_inquire = 1;
-  if (nodataexpected)
-    memset (&mb, 0, sizeof mb); /* avoid compiler warnings */
-  else
-    init_membuf (&mb, maxlen? maxlen:1024, maxlen);
-
-  strcpy (stpcpy (cmdbuf, "INQUIRE "), keyword);
-  rc = assuan_write_line (ctx, cmdbuf);
-  if (rc)
-    goto leave;
-
-  for (;;)
-    {
-      do 
-        {
-          rc = _assuan_read_line (ctx);
-          if (rc)
-            goto leave;
-          line = ctx->inbound.line;
-          linelen = ctx->inbound.linelen;
-        }    
-      while (*line == '#' || !linelen);
-      if (line[0] == 'E' && line[1] == 'N' && line[2] == 'D'
-          && (!line[3] || line[3] == ' '))
-        break; /* END command received*/
-      if (line[0] == 'C' && line[1] == 'A' && line[2] == 'N')
-        {
-          rc = ASSUAN_Canceled;
-          goto leave;
-        }
-      if (line[0] != 'D' || line[1] != ' ' || nodataexpected)
-        {
-          rc = ASSUAN_Unexpected_Command;
-          goto leave;
-        }
-      if (linelen < 3)
-        continue;
-      line += 2;
-      linelen -= 2;
-
-      p = line;
-      while (linelen)
-        {
-          for (;linelen && *p != '%'; linelen--, p++)
-            ;
-          put_membuf (&mb, line, p-line);
-          if (linelen > 2)
-            { /* handle escaping */
-              unsigned char tmp[1];
-              p++;
-              *tmp = xtoi_2 (p);
-              p += 2;
-              linelen -= 3;
-              put_membuf (&mb, tmp, 1);
-            }
-          line = p;
-        }
-      if (mb.too_large)
-        {
-          rc = ASSUAN_Too_Much_Data;
-          goto leave;
-        }
-    }
-
-  if (!nodataexpected)
-    {
-      *r_buffer = get_membuf (&mb, r_length);
-      if (!*r_buffer)
-        rc = ASSUAN_Out_Of_Core;
-    }
-
- leave:
-  if (!nodataexpected)
-    free_membuf (&mb);
-  ctx->in_inquire = 0;
-  return rc;
-}
-
-
-
-
-
-
diff --git a/assuan/assuan-pipe-connect.c b/assuan/assuan-pipe-connect.c
deleted file mode 100644 (file)
index ccfc1f0..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-/* assuan-pipe-connect.c - Establish a pipe connection (client) 
- *     Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG 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 General Public License for more details.
- *
- * You should have received a copy of the GNU 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <signal.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "assuan-defs.h"
-
-#ifdef _POSIX_OPEN_MAX
-#define MAX_OPEN_FDS _POSIX_OPEN_MAX
-#else
-#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
-
-
-
-static int
-writen ( int fd, const char *buffer, size_t length )
-{
-  while (length)
-    {
-      int nwritten = write (fd, buffer, length);
-      
-      if (nwritten < 0)
-        {
-          if (errno == EINTR)
-            continue;
-          return -1; /* write error */
-        }
-      length -= nwritten;
-      buffer += nwritten;
-    }
-  return 0;  /* okay */
-}
-
-
-static int
-do_finish (ASSUAN_CONTEXT ctx)
-{
-  if (ctx->inbound.fd != -1)
-    {
-      close (ctx->inbound.fd);
-      ctx->inbound.fd = -1;
-    }
-  if (ctx->outbound.fd != -1)
-    {
-      close (ctx->outbound.fd);
-      ctx->outbound.fd = -1;
-    }
-  if (ctx->pid != -1)
-    {
-      waitpid (ctx->pid, NULL, 0);  /* FIXME Check return value.  */
-      ctx->pid = -1;
-    }
-  return 0;
-}
-
-static void
-do_deinit (ASSUAN_CONTEXT ctx)
-{
-  do_finish (ctx);
-}
-
-
-
-/* Connect to a server over a pipe, creating the assuan context and
-   returning it in CTX.  The server filename is NAME, the argument
-   vector in ARGV.  FD_CHILD_LIST is a -1 terminated list of file
-   descriptors not to close in the child.  */
-AssuanError
-assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[],
-                    int *fd_child_list)
-{
-  static int fixed_signals = 0;
-  AssuanError err;
-  int rp[2];
-  int wp[2];
-
-  if (!ctx || !name || !argv || !argv[0])
-    return ASSUAN_Invalid_Value;
-
-  if (!fixed_signals)
-    { 
-      struct sigaction act;
-        
-      sigaction (SIGPIPE, NULL, &act);
-      if (act.sa_handler == SIG_DFL)
-       {
-         act.sa_handler = SIG_IGN;
-         sigemptyset (&act.sa_mask);
-         act.sa_flags = 0;
-         sigaction (SIGPIPE, &act, NULL);
-        }
-      fixed_signals = 1;
-      /* FIXME: This is not MT safe */
-    }
-
-  if (pipe (rp) < 0)
-    return ASSUAN_General_Error;
-
-  if (pipe (wp) < 0)
-    {
-      close (rp[0]);
-      close (rp[1]);
-      return ASSUAN_General_Error;
-    }
-  
-  err = _assuan_new_context (ctx);
-  if (err)
-    {
-      close (rp[0]);
-      close (rp[1]);
-      close (wp[0]);
-      close (wp[1]);
-      return err;
-    }
-  (*ctx)->pipe_mode = 1;
-  (*ctx)->inbound.fd  = rp[0];  /* Our inbound is read end of read pipe. */
-  (*ctx)->outbound.fd = wp[1];  /* Our outbound is write end of write pipe. */
-  (*ctx)->deinit_handler = do_deinit;
-  (*ctx)->finish_handler = do_finish;
-
-  (*ctx)->pid = fork ();
-  if ((*ctx)->pid < 0)
-    {
-      close (rp[0]);
-      close (rp[1]);
-      close (wp[0]);
-      close (wp[1]);
-      _assuan_release_context (*ctx); 
-      return ASSUAN_General_Error;
-    }
-
-  if ((*ctx)->pid == 0)
-    {
-      int i, n;
-      char errbuf[512];
-#ifdef HAVE_JNLIB_LOGGING
-      int log_fd = log_get_fd (); 
-#endif
-      /* close all files which will not be duped but keep stderr
-         and log_stream for now */
-      n = sysconf (_SC_OPEN_MAX);
-      if (n < 0)
-        n = MAX_OPEN_FDS;
-      for (i=0; i < n; i++)
-        {
-         int *fdp = fd_child_list;
-
-         if (fdp)
-           {
-             while (*fdp != -1 && *fdp != i)
-               fdp++;
-           }
-
-          if (!(fdp && *fdp != -1)
-             && i != fileno (stderr) 
-#ifdef HAVE_JNLIB_LOGGING
-              && i != log_fd
-#endif
-              && i != rp[1] && i != wp[0])
-            close(i);
-        }
-      errno = 0;
-
-      /* Dup handles and to stdin/stdout and exec */
-      if (rp[1] != STDOUT_FILENO)
-        {
-          if (dup2 (rp[1], STDOUT_FILENO) == -1)
-            {
-              LOGERROR1 ("dup2 failed in child: %s\n", strerror (errno));
-              _exit (4);
-            }
-          close (rp[1]);
-        }
-      if (wp[0] != STDIN_FILENO)
-        {
-          if (dup2 (wp[0], STDIN_FILENO) == -1)
-            {
-              LOGERROR1 ("dup2 failed in child: %s\n", strerror (errno));
-              _exit (4);
-            }
-          close (wp[0]);
-        }
-
-      execv (name, argv); 
-      /* oops - use the pipe to tell the parent about it */
-      snprintf (errbuf, sizeof(errbuf)-1, "ERR %d can't exec `%s': %.50s\n",
-                ASSUAN_Problem_Starting_Server, name, strerror (errno));
-      errbuf[sizeof(errbuf)-1] = 0;
-      writen (1, errbuf, strlen (errbuf));
-      _exit (4);
-    }
-
-  close (rp[1]);
-  close (wp[0]);
-
-  /* initial handshake */
-  {
-    int okay, off;
-
-    err = _assuan_read_from_server (*ctx, &okay, &off);
-    if (err)
-      {
-        LOGERROR1 ("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;
-      }
-  }
-
-  if (err)
-    {
-      assuan_disconnect (*ctx);
-      *ctx = NULL;
-    }
-
-  return err;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/assuan/assuan-socket-connect.c b/assuan/assuan-socket-connect.c
deleted file mode 100644 (file)
index 748a91f..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/* assuan-socket-connect.c - Assuan socket based client
- *     Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG 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 General Public License for more details.
- *
- * You should have received a copy of the GNU 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 <config.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-
-#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
-
-
-
-static int
-do_finish (ASSUAN_CONTEXT ctx)
-{
-  if (ctx->inbound.fd != -1)
-    {
-      close (ctx->inbound.fd);
-    }
-  ctx->inbound.fd = -1;
-  ctx->outbound.fd = -1;
-  return 0;
-}
-
-static void
-do_deinit (ASSUAN_CONTEXT ctx)
-{
-  do_finish (ctx);
-}
-
-
-
-/* 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
-   becode handy in future. */
-AssuanError
-assuan_socket_connect (ASSUAN_CONTEXT *r_ctx,
-                       const char *name, pid_t server_pid)
-{
-  AssuanError err;
-  ASSUAN_CONTEXT ctx;
-  int fd;
-  struct sockaddr_un srvr_addr;
-  size_t len;
-
-  if (!r_ctx || !name)
-    return ASSUAN_Invalid_Value;
-  *r_ctx = NULL;
-
-  /* we require that the name starts with a slash, so that we can
-     alter reuse this function for other socket types */
-  if (*name != '/')
-    return ASSUAN_Invalid_Value;
-  if (strlen (name)+1 >= sizeof srvr_addr.sun_path)
-    return ASSUAN_Invalid_Value;
-
-  err = _assuan_new_context (&ctx); 
-  if (err)
-      return err;
-  ctx->pid = server_pid; /* save it in case we need it later */
-  ctx->deinit_handler = do_deinit;
-  ctx->finish_handler = do_finish;
-
-  fd = socket (AF_UNIX, SOCK_STREAM, 0);
-  if (fd == -1)
-    {
-      LOGERROR1 ("can't create socket: %s\n", strerror (errno));
-      _assuan_release_context (ctx);
-      return ASSUAN_General_Error;
-    }
-    
-  memset (&srvr_addr, 0, sizeof srvr_addr );
-  srvr_addr.sun_family = AF_UNIX;
-  strcpy (srvr_addr.sun_path, name);
-  len = (offsetof (struct sockaddr_un, sun_path)
-         + strlen (srvr_addr.sun_path) + 1);
-    
-  if (connect (fd, (struct sockaddr*)&srvr_addr, len) == -1)
-    {
-      LOGERROR2 ("can't connect to `%s': %s\n", name, strerror (errno));
-      _assuan_release_context (ctx);
-      close (fd );
-      return ASSUAN_Connect_Failed;
-    }
-
-  ctx->inbound.fd = fd;
-  ctx->outbound.fd = fd;
-
-  /* initial handshake */
-  {
-    int okay, off;
-
-    err = _assuan_read_from_server (ctx, &okay, &off);
-    if (err)
-      {
-        LOGERROR1 ("can't connect 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;
-      }
-  }
-
-  if (err)
-    {
-      assuan_disconnect (ctx); 
-    }
-  else
-    *r_ctx = ctx;
-  return 0;
-}
-
-
diff --git a/assuan/assuan-socket-server.c b/assuan/assuan-socket-server.c
deleted file mode 100644 (file)
index 39dd84a..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/* assuan-socket-server.c - Assuan socket based server
- *     Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG 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 General Public License for more details.
- *
- * You should have received a copy of the GNU 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 <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-#ifdef USE_GNU_PTH
-# include <pth.h>
-#endif
-
-#include "assuan-defs.h"
-
-static int
-accept_connection (ASSUAN_CONTEXT ctx)
-{
-  int fd;
-  struct sockaddr_un clnt_addr;
-  size_t len = sizeof clnt_addr;
-
-  ctx->client_pid = (pid_t)-1;
-#ifdef USE_GNU_PTH
-  fd = pth_accept (ctx->listen_fd, (struct sockaddr*)&clnt_addr, &len );
-#else
-  fd = accept (ctx->listen_fd, (struct sockaddr*)&clnt_addr, &len );
-#endif
-  if (fd == -1)
-    {
-      ctx->os_errno = errno;
-      return ASSUAN_Accept_Failed;
-    }
-
-#ifdef HAVE_SO_PEERCRED
-  {
-    struct ucred cr; 
-    int cl = sizeof cr;
-
-    if ( !getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cl) ) 
-      ctx->client_pid = cr.pid;
-  }
-#endif
-
-  ctx->inbound.fd = fd;
-  ctx->inbound.eof = 0;
-  ctx->inbound.linelen = 0;
-  ctx->inbound.attic.linelen = 0;
-  ctx->inbound.attic.pending = 0;
-
-  ctx->outbound.fd = fd;
-  ctx->outbound.data.linelen = 0;
-  ctx->outbound.data.error = 0;
-  
-  ctx->confidential = 0;
-
-  return 0;
-}
-
-static int
-finish_connection (ASSUAN_CONTEXT ctx)
-{
-  if (ctx->inbound.fd != -1)
-    {
-      close (ctx->inbound.fd);
-    }
-  ctx->inbound.fd = -1;
-  ctx->outbound.fd = -1;
-  return 0;
-}
-
-
-static void
-deinit_socket_server (ASSUAN_CONTEXT ctx)
-{
-  finish_connection (ctx);
-}
-
-
-
-/* Initialize a server for the socket LISTEN_FD which has already be
-   put into listen mode */
-int
-assuan_init_socket_server (ASSUAN_CONTEXT *r_ctx, int listen_fd)
-{
-  ASSUAN_CONTEXT ctx;
-  int rc;
-
-  *r_ctx = NULL;
-  ctx = xtrycalloc (1, sizeof *ctx);
-  if (!ctx)
-    return ASSUAN_Out_Of_Core;
-  ctx->is_server = 1;
-  ctx->input_fd = -1;
-  ctx->output_fd = -1;
-
-  ctx->inbound.fd = -1;
-  ctx->outbound.fd = -1;
-
-  ctx->listen_fd = listen_fd;
-  ctx->deinit_handler = deinit_socket_server;
-  ctx->accept_handler = accept_connection;
-  ctx->finish_handler = finish_connection;
-
-  rc = _assuan_register_std_commands (ctx);
-  if (rc)
-    xfree (ctx);
-  else
-    *r_ctx = ctx;
-  return rc;
-}
-
-
-
-
-
-
-
-
-
-
index 44fd005..c3f2e32 100644 (file)
@@ -149,7 +149,6 @@ int assuan_get_active_fds (ASSUAN_CONTEXT ctx, int what,
                            int *fdarray, int fdarraysize);
 
 
-FILE *assuan_get_data_fp (ASSUAN_CONTEXT ctx);
 AssuanError assuan_set_okay_line (ASSUAN_CONTEXT ctx, const char *line);
 void assuan_write_status (ASSUAN_CONTEXT ctx,
                           const char *keyword, const char *text);