secmod: use umask, as fchmod is undefined on sockets
This commit is contained in:
parent
32f3391be1
commit
9624d92a65
@ -26,6 +26,15 @@ struct GNUNET_NETWORK_Handle *
|
||||
TES_open_socket (const char *unixpath)
|
||||
{
|
||||
int sock;
|
||||
mode_t old_umask;
|
||||
struct GNUNET_NETWORK_Handle *ret = NULL;
|
||||
|
||||
/* Change permissions so that group read/writes are allowed.
|
||||
* We need this for multi-user exchange deployment with privilege
|
||||
* separation, where taler-exchange-httpd is part of a group
|
||||
* that allows it to talk to secmod.
|
||||
*/
|
||||
old_umask = umask (S_IROTH | S_IWOTH | S_IXOTH);
|
||||
|
||||
sock = socket (PF_UNIX,
|
||||
SOCK_DGRAM,
|
||||
@ -34,16 +43,8 @@ TES_open_socket (const char *unixpath)
|
||||
{
|
||||
GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
|
||||
"socket");
|
||||
return NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
/* Change permissions so that group read/writes are allowed.
|
||||
* We need this for multi-user exchange deployment with privilege
|
||||
* separation, where taler-exchange-httpd is part of a group
|
||||
* that allows it to talk to secmod.
|
||||
*
|
||||
* Importantly, we do this before binding the socket.
|
||||
*/
|
||||
GNUNET_assert (0 == fchmod (sock, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP));
|
||||
{
|
||||
struct sockaddr_un un;
|
||||
|
||||
@ -76,8 +77,11 @@ TES_open_socket (const char *unixpath)
|
||||
"bind",
|
||||
unixpath);
|
||||
GNUNET_break (0 == close (sock));
|
||||
return NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
ret = GNUNET_NETWORK_socket_box_native (sock);
|
||||
}
|
||||
return GNUNET_NETWORK_socket_box_native (sock);
|
||||
cleanup:
|
||||
(void) umask (old_umask);
|
||||
return ret;
|
||||
}
|
||||
|
@ -28,6 +28,9 @@
|
||||
/**
|
||||
* Create the listen socket for a secmod daemon.
|
||||
*
|
||||
* This function is not thread-safe, as it changes and
|
||||
* restores the process umask.
|
||||
*
|
||||
* @param unixpath socket path
|
||||
*/
|
||||
struct GNUNET_NETWORK_Handle *
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include <sys/eventfd.h>
|
||||
#include "taler_error_codes.h"
|
||||
#include "taler_signatures.h"
|
||||
#include "secmod_common.h"
|
||||
|
||||
|
||||
/**
|
||||
@ -1633,6 +1634,9 @@ main (int argc,
|
||||
};
|
||||
int ret;
|
||||
|
||||
/* Restrict permissions for the key files that we create. */
|
||||
(void) umask (S_IWGRP | S_IROTH | S_IWOTH | S_IXOTH);
|
||||
|
||||
/* force linker to link against libtalerutil; if we do
|
||||
not do this, the linker may "optimize" libtalerutil
|
||||
away and skip #TALER_OS_init(), which we do need */
|
||||
|
@ -2031,7 +2031,9 @@ main (int argc,
|
||||
};
|
||||
int ret;
|
||||
|
||||
/* Restrict permissions for the key files that we create. */
|
||||
(void) umask (S_IWGRP | S_IROTH | S_IWOTH | S_IXOTH);
|
||||
|
||||
/* force linker to link against libtalerutil; if we do
|
||||
not do this, the linker may "optimize" libtalerutil
|
||||
away and skip #TALER_OS_init(), which we do need */
|
||||
|
Loading…
Reference in New Issue
Block a user