summaryrefslogtreecommitdiff
path: root/src/irmd
diff options
context:
space:
mode:
authorSander Vrijders <[email protected]>2016-06-20 20:57:25 +0200
committerSander Vrijders <[email protected]>2016-06-20 20:57:25 +0200
commit16323dcc9df15020e368d4324cf1c1d9dceac805 (patch)
treec70e36289153d37f4c642b33d5003e5709d788d0 /src/irmd
parentc4d614e041c693d95d1b62d3e33911b53fabf2c2 (diff)
downloadouroboros-16323dcc9df15020e368d4324cf1c1d9dceac805.tar.gz
ouroboros-16323dcc9df15020e368d4324cf1c1d9dceac805.zip
build: Change install directories and set correct permissions
This sets the correct install directories for all the binaries, library and header files. It also sets the right permissions on the sockets and shared memory so that regular users can also use the ouroboros library. Root privileges are required to run the irmd. Fixes #7
Diffstat (limited to 'src/irmd')
-rw-r--r--src/irmd/CMakeLists.txt2
-rw-r--r--src/irmd/main.c28
2 files changed, 26 insertions, 4 deletions
diff --git a/src/irmd/CMakeLists.txt b/src/irmd/CMakeLists.txt
index 75d65ba3..a402b242 100644
--- a/src/irmd/CMakeLists.txt
+++ b/src/irmd/CMakeLists.txt
@@ -19,7 +19,7 @@ if (CMAKE_BUILD_TYPE MATCHES Debug)
MACRO_ADD_COMPILE_FLAGS(irmd -DCONFIG_OUROBOROS_DEBUG)
endif (CMAKE_BUILD_TYPE MATCHES Debug)
-install(TARGETS irmd RUNTIME DESTINATION bin)
+install(TARGETS irmd RUNTIME DESTINATION sbin)
# Enable once irmd has tests
# add_subdirectory(tests)
diff --git a/src/irmd/main.c b/src/irmd/main.c
index 7ad7a23a..68789e94 100644
--- a/src/irmd/main.c
+++ b/src/irmd/main.c
@@ -49,6 +49,7 @@
#include <string.h>
#include <limits.h>
#include <pthread.h>
+#include <sys/stat.h>
#ifndef IRMD_MAX_FLOWS
#define IRMD_MAX_FLOWS 4096
@@ -1571,11 +1572,13 @@ void * mainloop()
static struct irm * irm_create()
{
+ struct stat st = {0};
+
struct irm * i = malloc(sizeof(*i));
if (i == NULL)
return NULL;
- if (access("/dev/shm/" SHM_DU_MAP_FILENAME, F_OK) != -1) {
+ if (access(INSTALL_DIR "dev/shm/" SHM_DU_MAP_FILENAME, F_OK) != -1) {
struct shm_du_map * dum = shm_du_map_open();
if (dum == NULL) {
LOG_ERR("Could not examine existing shm file.");
@@ -1592,6 +1595,11 @@ static struct irm * irm_create()
}
}
+ if (rw_lock_init(&i->state_lock)) {
+ irm_destroy(i);
+ return NULL;
+ }
+
i->threadpool = malloc(sizeof(pthread_t) * IRMD_THREADPOOL_SIZE);
if (i->threadpool == NULL) {
irm_destroy(i);
@@ -1613,13 +1621,22 @@ static struct irm * irm_create()
return NULL;
}
+ if (stat(SOCK_PATH, &st) == -1) {
+ if (mkdir(SOCK_PATH, 0777)) {
+ LOG_ERR("Failed to create sockets directory.");
+ irm_destroy(i);
+ return NULL;
+ }
+ }
+
i->sockfd = server_socket_open(IRM_SOCK_PATH);
if (i->sockfd < 0) {
irm_destroy(i);
return NULL;
}
- if (rw_lock_init(&i->state_lock)) {
+ if (chmod(IRM_SOCK_PATH, 0666)) {
+ LOG_ERR("Failed to chmod socket.");
irm_destroy(i);
return NULL;
}
@@ -1643,6 +1660,11 @@ int main()
int t = 0;
+ if (geteuid() != 0) {
+ LOG_ERR("IPC Resource Manager must be run as root.");
+ exit(EXIT_FAILURE);
+ }
+
/* init sig_act */
memset(&sig_act, 0, sizeof sig_act);
@@ -1661,7 +1683,7 @@ int main()
instance = irm_create();
if (instance == NULL)
- return 1;
+ exit(EXIT_FAILURE);
pthread_create(&instance->cleanup_flows, NULL, irm_flow_cleaner, NULL);