summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2022-06-10 07:58:11 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-06-22 17:25:57 +0200
commit691575801c02832627d7bbf060c7ff553c12c7b4 (patch)
tree2fddad86471557f0c85c0712d46c445749abdbce
parentracoon: Do not rely on <sys/types.h> (diff)
downloadrtems-libbsd-691575801c02832627d7bbf060c7ff553c12c7b4.tar.bz2
ipsec-tools: Do not use signals
-rw-r--r--ipsec-tools/src/racoon/privsep.c12
-rw-r--r--ipsec-tools/src/racoon/rtems-bsd-racoon-session-data.h3
-rw-r--r--ipsec-tools/src/racoon/session.c23
3 files changed, 24 insertions, 14 deletions
diff --git a/ipsec-tools/src/racoon/privsep.c b/ipsec-tools/src/racoon/privsep.c
index 8efdae84..914d8a44 100644
--- a/ipsec-tools/src/racoon/privsep.c
+++ b/ipsec-tools/src/racoon/privsep.c
@@ -80,7 +80,9 @@ static int privsep_sock[2] = { -1, -1 };
static int privsep_recv(int, struct privsep_com_msg **, size_t *);
static int privsep_send(int, struct privsep_com_msg *, size_t);
static int safety_check(struct privsep_com_msg *, int i);
+#ifndef __rtems__
static int port_check(int);
+#endif /* __rtems__ */
static int unsafe_env(char *const *);
static int unknown_name(int);
static int unsafe_path(char *, int);
@@ -321,7 +323,6 @@ privsep_init(void)
#if defined(__NetBSD__) || defined(__FreeBSD__)
setproctitle("[priv]");
#endif
-#endif /* __rtems__ */
/*
* Don't catch any signal
@@ -334,13 +335,16 @@ privsep_init(void)
signal(SIGUSR1, SIG_DFL);
signal(SIGUSR2, SIG_DFL);
signal(SIGCHLD, SIG_DFL);
+#endif /* __rtems__ */
while (1) {
size_t len;
struct privsep_com_msg *combuf;
struct privsep_com_msg *reply;
char *data;
+#ifndef __rtems__
size_t *buflen;
+#endif /* __rtems__ */
size_t totallen;
char *bufs[PRIVSEP_NBUF_MAX];
int i;
@@ -1067,7 +1071,9 @@ privsep_getpsk(str, keylen)
vchar_t *psk;
struct privsep_com_msg *msg;
size_t len;
+#ifndef __rtems__
int *keylenp;
+#endif /* __rtems__ */
char *data;
if (geteuid() == 0)
@@ -1129,7 +1135,11 @@ privsep_socket(domain, type, protocol)
size_t len;
char *data;
struct socket_args socket_args;
+#ifndef __rtems__
int s, saved_errno = 0;
+#else /* __rtems__ */
+ int s;
+#endif /* __rtems__ */
if (geteuid() == 0)
return socket(domain, type, protocol);
diff --git a/ipsec-tools/src/racoon/rtems-bsd-racoon-session-data.h b/ipsec-tools/src/racoon/rtems-bsd-racoon-session-data.h
index cdf8a74d..51b67d2e 100644
--- a/ipsec-tools/src/racoon/rtems-bsd-racoon-session-data.h
+++ b/ipsec-tools/src/racoon/rtems-bsd-racoon-session-data.h
@@ -5,8 +5,5 @@
RTEMS_LINKER_RWSET_CONTENT(bsd_prog_racoon, static fd_set *allocated_active_mask);
RTEMS_LINKER_RWSET_CONTENT(bsd_prog_racoon, static fd_set *allocated_preset_mask);
RTEMS_LINKER_RWSET_CONTENT(bsd_prog_racoon, static int nfds);
-RTEMS_LINKER_RWSET_CONTENT(bsd_prog_racoon, static int signals[]);
-RTEMS_LINKER_RWSET_CONTENT(bsd_prog_racoon, static sig_atomic_t volatile volatile sigreq[]);
RTEMS_LINKER_RWSET_CONTENT(bsd_prog_racoon, static struct fd_monitor *allocated_fd_monitors);
RTEMS_LINKER_RWSET_CONTENT(bsd_prog_racoon, static struct fd_monitor_list fd_monitor_tree[]);
-RTEMS_LINKER_RWSET_CONTENT(bsd_prog_racoon, static struct sched scflushsa);
diff --git a/ipsec-tools/src/racoon/session.c b/ipsec-tools/src/racoon/session.c
index 90120c76..7ea857ba 100644
--- a/ipsec-tools/src/racoon/session.c
+++ b/ipsec-tools/src/racoon/session.c
@@ -119,6 +119,7 @@ struct fd_monitor {
#define NUM_PRIORITIES 2
+#ifndef __rtems__
static void close_session __P((void));
static void initfds __P((void));
static void init_signal __P((void));
@@ -126,6 +127,7 @@ static int set_signal __P((int sig, RETSIGTYPE (*func) __P((int))));
static void check_sigreq __P((void));
static void check_flushsa __P((void));
static int close_sockets __P((void));
+#endif /* __rtems__ */
#ifndef __rtems__
static fd_set preset_mask, active_mask;
@@ -140,8 +142,10 @@ static struct fd_monitor *allocated_fd_monitors;
static TAILQ_HEAD(fd_monitor_list, fd_monitor) fd_monitor_tree[NUM_PRIORITIES];
static int nfds = 0;
+#ifndef __rtems__
static volatile sig_atomic_t sigreq[NSIG + 1];
static struct sched scflushsa = SCHED_INITIALIZER();
+#endif /* __rtems__ */
void
monitor_fd(int fd, int (*callback)(void *, int), void *ctx, int priority)
@@ -199,9 +203,11 @@ session(void)
{
struct timeval *timeout;
int error;
+#ifndef __rtems__
char pid_file[MAXPATHLEN];
FILE *fp;
pid_t racoon_pid = 0;
+#endif /* __rtems__ */
int i, count;
struct fd_monitor *fdm;
@@ -228,7 +234,9 @@ session(void)
/* initialize schedular */
sched_init();
+#ifndef __rtems__
init_signal();
+#endif /* __rtems__ */
if (pfkey_init() < 0)
errx(1, "failed to initialize pfkey socket");
@@ -325,17 +333,19 @@ session(void)
racoon_pid = getpid();
fprintf(fp, "%ld\n", (long)racoon_pid);
fclose(fp);
-#endif /* __rtems__ */
for (i = 0; i <= NSIG; i++)
sigreq[i] = 0;
+#endif /* __rtems__ */
while (1) {
+#ifndef __rtems__
/*
* asynchronous requests via signal.
* make sure to reset sigreq to 0.
*/
check_sigreq();
+#endif /* __rtems__ */
/* scheduling */
timeout = schedular();
@@ -379,6 +389,7 @@ session(void)
}
}
+#ifndef __rtems__
/* clear all status and exit program. */
static void
close_session()
@@ -391,11 +402,6 @@ close_session()
flushsainfo();
close_sockets();
backupsa_clean();
-#ifdef __rtems__
- free(allocated_preset_mask); allocated_preset_mask = NULL;
- free(allocated_active_mask); allocated_active_mask = NULL;
- free(allocated_fd_monitors); allocated_fd_monitors = NULL;
-#endif /* __rtems__ */
plog(LLV_INFO, LOCATION, NULL, "racoon process %d shutdown\n", getpid());
@@ -565,11 +571,7 @@ set_signal(sig, func)
memset((caddr_t)&sa, 0, sizeof(sa));
sa.sa_handler = func;
-#ifndef __rtems__
sa.sa_flags = SA_RESTART;
-#else /* __rtems__ */
- sa.sa_flags = 0;
-#endif /* __rtems__ */
if (sigemptyset(&sa.sa_mask) < 0)
return -1;
@@ -590,6 +592,7 @@ close_sockets()
#endif
return 0;
}
+#endif /* __rtems__ */
#ifdef __rtems__
#include "rtems-bsd-racoon-session-data.h"