aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-04-25 20:22:06 +0200
committerFlorian Dold <florian.dold@gmail.com>2016-04-25 20:22:06 +0200
commit57728835cf9caad0c4db5bd5df63d69a4003f7ca (patch)
treeab43ececf0878f487d500bb7771c0f6e2e5ee66b
parentc2c2b92ed489dfdc856a6e683564e10ef539a12d (diff)
use GNUnet helpers
-rw-r--r--src/exchange/exchange.conf1
-rw-r--r--src/exchange/taler-exchange-httpd.c91
2 files changed, 19 insertions, 73 deletions
diff --git a/src/exchange/exchange.conf b/src/exchange/exchange.conf
index f0cd424ae..674f86df2 100644
--- a/src/exchange/exchange.conf
+++ b/src/exchange/exchange.conf
@@ -17,6 +17,7 @@ SERVE = tcp
# Unix domain socket to listen on,
# only effective with "SERVE = unix"
UNIXPATH = ${TALER_SOCKET_DIR}/exchange
+# UNIXPATH_MODE = 660
# HTTP port the exchange listens to
# PORT = 8081
diff --git a/src/exchange/taler-exchange-httpd.c b/src/exchange/taler-exchange-httpd.c
index 9a687cd57..a4e71f753 100644
--- a/src/exchange/taler-exchange-httpd.c
+++ b/src/exchange/taler-exchange-httpd.c
@@ -685,63 +685,6 @@ handle_mhd_logs (void *cls,
/**
- * Make a socket non-inheritable to child processes
- *
- * @param fd the socket to make non-inheritable
- * @return #GNUNET_OK on success, #GNUNET_SYSERR otherwise
- */
-static int
-socket_set_inheritable (int fd)
-{
- int i;
- i = fcntl (fd, F_GETFD);
- if (i < 0)
- return GNUNET_SYSERR;
- if (i == (i | FD_CLOEXEC))
- return GNUNET_OK;
- i |= FD_CLOEXEC;
- if (fcntl (fd, F_SETFD, i) < 0)
- return GNUNET_SYSERR;
- return GNUNET_OK;
-}
-
-
-
-/**
- * Set if a socket should use blocking or non-blocking IO.
- *
- * @param fd socket
- * @param doBlock blocking mode
- * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
- */
-int
-socket_set_blocking (int fd,
- int doBlock)
-{
- int flags = fcntl (fd, F_GETFL);
- if (flags == -1)
- {
- GNUNET_break (0);
- return GNUNET_SYSERR;
- }
- if (doBlock)
- flags &= ~O_NONBLOCK;
-
- else
- flags |= O_NONBLOCK;
- if (0 != fcntl (fd,
- F_SETFL,
- flags))
-
- {
- GNUNET_break (0);
- return GNUNET_SYSERR;
- }
- return GNUNET_OK;
-}
-
-
-/**
* The main function of the taler-exchange-httpd server ("the exchange").
*
* @param argc number of arguments from the command line
@@ -799,39 +742,40 @@ main (int argc,
if (NULL != serve_unixpath)
{
- int sock;
+ struct GNUNET_NETWORK_Handle *nh;
struct sockaddr_un *un;
+ if (sizeof (un->sun_path) <= strlen (serve_unixpath))
+ {
+ fprintf (stderr, "unixpath too long\n");
+ return 1;
+ }
+
un = GNUNET_new (struct sockaddr_un);
un->sun_family = AF_UNIX;
- sock = socket (AF_UNIX, SOCK_STREAM, 0);
- if (-1 == sock)
+ strncpy (un->sun_path, serve_unixpath, sizeof (un->sun_path) - 1);
+
+ if (NULL == (nh = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_STREAM, 0)))
{
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
- "socket");
+ fprintf (stderr, "create failed for AF_UNIX\n");
return 1;
}
- strncpy (un->sun_path, serve_unixpath, sizeof (un->sun_path) - 1);
- socket_set_inheritable (sock);
- socket_set_blocking (sock, GNUNET_NO);
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Binding to unix-domain socket '%s'\n", serve_unixpath);
- if (0 != bind (sock, un, sizeof (*un)))
+ if (GNUNET_OK != GNUNET_NETWORK_socket_bind (nh, (void *) un, sizeof (struct sockaddr_un)))
{
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
- "bind");
+ fprintf (stderr, "bind failed for AF_UNIX\n");
return 1;
}
- if (0 != listen (sock, UNIX_BACKLOG))
+ if (GNUNET_OK != GNUNET_NETWORK_socket_listen (nh, UNIX_BACKLOG))
{
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
- "listen");
+ fprintf (stderr, "listen failed for AF_UNIX\n");
return 1;
}
+
mydaemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
0,
NULL, NULL,
&handle_mhd_request, NULL,
- MHD_OPTION_LISTEN_SOCKET, sock,
+ MHD_OPTION_LISTEN_SOCKET, GNUNET_NETWORK_get_fd (nh),
MHD_OPTION_EXTERNAL_LOGGER, &handle_mhd_logs, NULL,
MHD_OPTION_NOTIFY_COMPLETED, &handle_mhd_completion_callback, NULL,
MHD_OPTION_CONNECTION_TIMEOUT, connection_timeout,
@@ -839,6 +783,7 @@ main (int argc,
MHD_OPTION_NOTIFY_CONNECTION, &connection_done, NULL,
#endif
MHD_OPTION_END);
+ GNUNET_NETWORK_socket_free_memory_only_ (nh);
}
else
{