summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/anastasis.pdfbin1775690 -> 0 bytes
-rw-r--r--src/authorization/anastasis_authorization_plugin_email.c10
-rw-r--r--src/authorization/anastasis_authorization_plugin_post.c10
-rw-r--r--src/authorization/anastasis_authorization_plugin_sms.c10
-rw-r--r--src/util/Makefile.am12
-rw-r--r--src/util/child_management.c212
-rwxr-xr-xsrc/util/child_management_test.sh2
-rw-r--r--src/util/test_anastasis_child_management.c178
8 files changed, 16 insertions, 418 deletions
diff --git a/doc/anastasis.pdf b/doc/anastasis.pdf
deleted file mode 100644
index fd96681..0000000
--- a/doc/anastasis.pdf
+++ /dev/null
Binary files differ
diff --git a/src/authorization/anastasis_authorization_plugin_email.c b/src/authorization/anastasis_authorization_plugin_email.c
index 46c8eb2..586460b 100644
--- a/src/authorization/anastasis_authorization_plugin_email.c
+++ b/src/authorization/anastasis_authorization_plugin_email.c
@@ -94,7 +94,7 @@ struct ANASTASIS_AUTHORIZATION_State
/**
* Handle to wait for @e child
*/
- struct ANASTASIS_ChildWaitHandle *cwh;
+ struct GNUNET_ChildWaitHandle *cwh;
/**
* Our client connection, set if suspended.
@@ -388,9 +388,9 @@ email_process (struct ANASTASIS_AUTHORIZATION_State *as,
}
GNUNET_DISK_file_close (pipe_stdin);
}
- as->cwh = ANASTASIS_wait_child (as->child,
- &email_done_cb,
- as);
+ as->cwh = GNUNET_wait_child (as->child,
+ &email_done_cb,
+ as);
as->connection = connection;
MHD_suspend_connection (connection);
return ANASTASIS_AUTHORIZATION_RES_SUSPENDED;
@@ -490,7 +490,7 @@ email_cleanup (struct ANASTASIS_AUTHORIZATION_State *as)
{
if (NULL != as->cwh)
{
- ANASTASIS_wait_child_cancel (as->cwh);
+ GNUNET_wait_child_cancel (as->cwh);
as->cwh = NULL;
}
if (NULL != as->child)
diff --git a/src/authorization/anastasis_authorization_plugin_post.c b/src/authorization/anastasis_authorization_plugin_post.c
index c77ac03..ac1e738 100644
--- a/src/authorization/anastasis_authorization_plugin_post.c
+++ b/src/authorization/anastasis_authorization_plugin_post.c
@@ -88,7 +88,7 @@ struct ANASTASIS_AUTHORIZATION_State
/**
* Handle to wait for @e child
*/
- struct ANASTASIS_ChildWaitHandle *cwh;
+ struct GNUNET_ChildWaitHandle *cwh;
/**
* Our client connection, set if suspended.
@@ -460,9 +460,9 @@ post_process (struct ANASTASIS_AUTHORIZATION_State *as,
}
GNUNET_DISK_file_close (pipe_stdin);
}
- as->cwh = ANASTASIS_wait_child (as->child,
- &post_done_cb,
- as);
+ as->cwh = GNUNET_wait_child (as->child,
+ &post_done_cb,
+ as);
as->connection = connection;
MHD_suspend_connection (connection);
return ANASTASIS_AUTHORIZATION_RES_SUSPENDED;
@@ -545,7 +545,7 @@ post_cleanup (struct ANASTASIS_AUTHORIZATION_State *as)
{
if (NULL != as->cwh)
{
- ANASTASIS_wait_child_cancel (as->cwh);
+ GNUNET_wait_child_cancel (as->cwh);
as->cwh = NULL;
}
if (NULL != as->child)
diff --git a/src/authorization/anastasis_authorization_plugin_sms.c b/src/authorization/anastasis_authorization_plugin_sms.c
index 70bcff7..e59d3e0 100644
--- a/src/authorization/anastasis_authorization_plugin_sms.c
+++ b/src/authorization/anastasis_authorization_plugin_sms.c
@@ -93,7 +93,7 @@ struct ANASTASIS_AUTHORIZATION_State
/**
* Handle to wait for @e child
*/
- struct ANASTASIS_ChildWaitHandle *cwh;
+ struct GNUNET_ChildWaitHandle *cwh;
/**
* Our client connection, set if suspended.
@@ -385,9 +385,9 @@ sms_process (struct ANASTASIS_AUTHORIZATION_State *as,
}
GNUNET_DISK_file_close (pipe_stdin);
}
- as->cwh = ANASTASIS_wait_child (as->child,
- &sms_done_cb,
- as);
+ as->cwh = GNUNET_wait_child (as->child,
+ &sms_done_cb,
+ as);
as->connection = connection;
MHD_suspend_connection (connection);
return ANASTASIS_AUTHORIZATION_RES_SUSPENDED;
@@ -482,7 +482,7 @@ sms_cleanup (struct ANASTASIS_AUTHORIZATION_State *as)
{
if (NULL != as->cwh)
{
- ANASTASIS_wait_child_cancel (as->cwh);
+ GNUNET_wait_child_cancel (as->cwh);
as->cwh = NULL;
}
if (NULL != as->child)
diff --git a/src/util/Makefile.am b/src/util/Makefile.am
index 36ee196..fdc92c9 100644
--- a/src/util/Makefile.am
+++ b/src/util/Makefile.am
@@ -31,7 +31,6 @@ lib_LTLIBRARIES = \
libanastasisutil_la_SOURCES = \
anastasis_crypto.c \
- child_management.c \
os_installation.c
libanastasisutil_la_LIBADD = \
-lgnunetutil \
@@ -44,20 +43,11 @@ libanastasisutil_la_LDFLAGS = \
-export-dynamic -no-undefined
check_PROGRAMS = \
- test_anastasis_crypto \
- test_anastasis_child_management
+ test_anastasis_crypto
TESTS = \
$(check_PROGRAMS)
-test_anastasis_child_management_SOURCES = \
- test_anastasis_child_management.c
-test_anastasis_child_management_LDADD = \
- -lgnunetutil \
- -ltalerutil \
- libanastasisutil.la \
- $(XLIB)
-
test_anastasis_crypto_SOURCES = \
test_anastasis_crypto.c
test_anastasis_crypto_LDADD = \
diff --git a/src/util/child_management.c b/src/util/child_management.c
deleted file mode 100644
index 267b4db..0000000
--- a/src/util/child_management.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- This file is part of Anastasis
- Copyright (C) 2020 Taler Systems SA
-
- Anastasis 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 3, or (at your option) any later version.
-
- Anastasis 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
- Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file util/child_management.c
- * @brief anastasis child management
- * @author Christian Grothoff
- * @author Dominik Meister
- */
-#include "platform.h"
-#include "anastasis_util_lib.h"
-
-
-/**
- * Struct which defines a Child Wait handle
- */
-struct ANASTASIS_ChildWaitHandle
-{
- /**
- * Linked list to the next child
- */
- struct ANASTASIS_ChildWaitHandle *next;
- /**
- * Linked list to the previous child
- */
- struct ANASTASIS_ChildWaitHandle *prev;
- /**
- * Child process which is managed
- */
- struct GNUNET_OS_Process *proc;
- /**
- * Callback which is called upon completion/death of the child task
- */
- ANASTASIS_ChildCompletedCallback cb;
- /**
- * Closure for the handle
- */
- void *cb_cls;
-};
-
-
-/**
- * Pipe used to communicate shutdown via signal.
- */
-static struct GNUNET_DISK_PipeHandle *sigpipe;
-
-static struct GNUNET_SIGNAL_Context *shc_chld;
-
-static struct GNUNET_SCHEDULER_Task *sig_task;
-
-static struct ANASTASIS_ChildWaitHandle *cwh_head;
-
-static struct ANASTASIS_ChildWaitHandle *cwh_tail;
-
-/**
- * Task triggered whenever we receive a SIGCHLD (child
- * process died) or when user presses CTRL-C.
- *
- * @param cls closure, NULL
- */
-static void
-maint_child_death (void *cls)
-{
- char buf[16];
- const struct GNUNET_DISK_FileHandle *pr;
- struct ANASTASIS_ChildWaitHandle *nxt;
-
- (void) cls;
- sig_task = NULL;
- /* drain pipe */
- pr = GNUNET_DISK_pipe_handle (sigpipe,
- GNUNET_DISK_PIPE_END_READ);
- GNUNET_assert (! GNUNET_DISK_handle_invalid (pr));
-
- (void) GNUNET_DISK_file_read (pr,
- buf,
- sizeof(buf));
-
- /* find applicable processes that exited */
- for (struct ANASTASIS_ChildWaitHandle *cwh = cwh_head;
- NULL != cwh;
- cwh = nxt)
- {
- enum GNUNET_OS_ProcessStatusType type;
- long unsigned int exit_code = 0;
-
- nxt = cwh->next;
- if (GNUNET_OK ==
- GNUNET_OS_process_status (cwh->proc,
- &type,
- &exit_code))
- {
- GNUNET_CONTAINER_DLL_remove (cwh_head,
- cwh_tail,
- cwh);
- cwh->cb (cwh->cb_cls,
- type,
- exit_code);
- GNUNET_free (cwh);
- }
- }
- if (NULL == cwh_head)
- return;
- /* wait for more */
- sig_task = GNUNET_SCHEDULER_add_read_file (
- GNUNET_TIME_UNIT_FOREVER_REL,
- GNUNET_DISK_pipe_handle (sigpipe,
- GNUNET_DISK_PIPE_END_READ),
- &maint_child_death,
- NULL);
-}
-
-
-/**
- * Signal handler called for SIGCHLD. Triggers the
- * respective handler by writing to the trigger pipe.
- */
-static void
-sighandler_child_death (void)
-{
- static char c;
- int old_errno = errno; /* back-up errno */
-
- GNUNET_break (
- 1 ==
- GNUNET_DISK_file_write (GNUNET_DISK_pipe_handle (sigpipe,
- GNUNET_DISK_PIPE_END_WRITE),
- &c,
- sizeof(c)));
- errno = old_errno; /* restore errno */
-}
-
-
-void __attribute__ ((constructor))
-child_management_start ()
-{
- if (NULL != sigpipe)
- return; /* already initialized */
- sigpipe = GNUNET_DISK_pipe (GNUNET_DISK_PF_NONE);
- GNUNET_assert (sigpipe != NULL);
- shc_chld =
- GNUNET_SIGNAL_handler_install (GNUNET_SIGCHLD, &sighandler_child_death);
-}
-
-
-struct ANASTASIS_ChildWaitHandle *
-ANASTASIS_wait_child (struct GNUNET_OS_Process *proc,
- ANASTASIS_ChildCompletedCallback cb,
- void *cb_cls)
-{
- struct ANASTASIS_ChildWaitHandle *cwh;
-
- child_management_start ();
- cwh = GNUNET_new (struct ANASTASIS_ChildWaitHandle);
- cwh->proc = proc;
- cwh->cb = cb;
- cwh->cb_cls = cb_cls;
- GNUNET_CONTAINER_DLL_insert (cwh_head,
- cwh_tail,
- cwh);
- if (NULL == sig_task)
- {
- sig_task = GNUNET_SCHEDULER_add_read_file (
- GNUNET_TIME_UNIT_FOREVER_REL,
- GNUNET_DISK_pipe_handle (sigpipe,
- GNUNET_DISK_PIPE_END_READ),
- &maint_child_death,
- NULL);
- }
- return cwh;
-}
-
-
-void
-ANASTASIS_wait_child_cancel (struct ANASTASIS_ChildWaitHandle *cwh)
-{
- GNUNET_CONTAINER_DLL_remove (cwh_head,
- cwh_tail,
- cwh);
- if (NULL == cwh_head)
- {
- GNUNET_SCHEDULER_cancel (sig_task);
- sig_task = NULL;
- }
- GNUNET_free (cwh);
-}
-
-
-/**
- * Clean up.
- */
-void __attribute__ ((destructor))
-ANASTASIS_CM_done ()
-{
- GNUNET_assert (NULL == sig_task);
- GNUNET_SIGNAL_handler_uninstall (shc_chld);
- shc_chld = NULL;
- GNUNET_DISK_pipe_close (sigpipe);
- sigpipe = NULL;
-}
diff --git a/src/util/child_management_test.sh b/src/util/child_management_test.sh
deleted file mode 100755
index a35b865..0000000
--- a/src/util/child_management_test.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env bash
-echo "$1$2" >> child_management_test.txt
diff --git a/src/util/test_anastasis_child_management.c b/src/util/test_anastasis_child_management.c
deleted file mode 100644
index c16670a..0000000
--- a/src/util/test_anastasis_child_management.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2014-2020 Taler Systems SA
-
- TALER 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 3, or
- (at your option) any later version.
-
- TALER 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 TALER; see the file COPYING. If not, see
- <http://www.gnu.org/licenses/>
-*/
-
-/**
- * @file lib/test_anastasis_child_management.c
- * @brief testcase to test the child management
- * @author Christian Grothoff
- * @author Dominik Meister
- */
-#include "platform.h"
-#include <gnunet/gnunet_util_lib.h>
-#include "anastasis_util_lib.h"
-
-
-static struct ANASTASIS_ChildWaitHandle *cwh;
-
-static int global_ret;
-
-static struct GNUNET_OS_Process *pid;
-
-
-static void
-child_completed_callback (void *cls,
- enum GNUNET_OS_ProcessStatusType type,
- long unsigned int exit_code)
-{
- cwh = NULL;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Process extided with code: %lu \n",
- exit_code);
- FILE *file;
- char code[9];
-
- file = fopen ("child_management_test.txt", "r");
- if (NULL == file)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "could not find file: child_management_test.txt in %s:%u\n",
- __FILE__,
- __LINE__);
- global_ret = 1;
- return;
- }
- if (0 == fscanf (file,
- "%8s",
- code))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "could not read file: child_management_test.txt in %s:%u\n",
- __FILE__,
- __LINE__);
- global_ret = 1;
- return;
- }
-
- if (0 != strcmp ("12345678", code))
- {
- global_ret = 1;
- return;
- }
- GNUNET_OS_process_destroy (pid);
- pid = NULL;
- GNUNET_break (0 == unlink ("child_management_test.txt"));
- GNUNET_SCHEDULER_shutdown ();
- global_ret = 0;
-}
-
-
-static void
-do_shutdown (void *cls)
-{
- if (NULL != cwh)
- {
- ANASTASIS_wait_child_cancel (cwh);
- cwh = NULL;
- }
- if (NULL != pid)
- {
- GNUNET_assert (0 ==
- GNUNET_OS_process_kill (pid,
- SIGKILL));
- GNUNET_assert (GNUNET_OK ==
- GNUNET_OS_process_wait (pid));
- GNUNET_OS_process_destroy (pid);
- pid = NULL;
- }
-}
-
-
-static void
-test_child_management (void *cls)
-{
- const char *command = "./child_management_test.sh";
- struct GNUNET_DISK_PipeHandle *p;
- struct GNUNET_DISK_FileHandle *out;
-
- (void) cls;
- p = GNUNET_DISK_pipe (GNUNET_DISK_PF_NONE);
- if (NULL == p)
- {
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
- "pipe");
- global_ret = 2;
- return;
- }
- pid = GNUNET_OS_start_process (0,
- p,
- NULL,
- NULL,
- command,
- command,
- "1234",
- "5678",
- NULL);
- if (NULL == pid)
- {
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
- "fork");
- GNUNET_break (GNUNET_OK ==
- GNUNET_DISK_pipe_close (p));
- global_ret = 1;
- return;
- }
- GNUNET_break (GNUNET_OK ==
- GNUNET_DISK_pipe_close_end (p,
- GNUNET_DISK_PIPE_END_READ));
- out = GNUNET_DISK_pipe_detach_end (p,
- GNUNET_DISK_PIPE_END_WRITE);
- GNUNET_assert (NULL != out);
- GNUNET_break (GNUNET_OK ==
- GNUNET_DISK_pipe_close (p));
-
- GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
- NULL);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Alright");
- cwh = ANASTASIS_wait_child (pid,
- &child_completed_callback,
- cls);
- GNUNET_break (NULL != cwh);
- GNUNET_assert (5 ==
- GNUNET_DISK_file_write (out,
- "Hello",
- 5));
- GNUNET_break (GNUNET_OK ==
- GNUNET_DISK_file_close (out));
-}
-
-
-int
-main (int argc,
- const char *const argv[])
-{
- GNUNET_log_setup (argv[0],
- "DEBUG",
- NULL);
- GNUNET_SCHEDULER_run (&test_child_management,
- NULL);
- return global_ret;
-}
-
-
-/* end of test_anastasis_child_management.c */