summaryrefslogtreecommitdiff
path: root/src/irmd/main.c
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@intec.ugent.be>2016-06-20 20:57:25 +0200
committerSander Vrijders <sander.vrijders@intec.ugent.be>2016-06-20 20:57:25 +0200
commit16323dcc9df15020e368d4324cf1c1d9dceac805 (patch)
treec70e36289153d37f4c642b33d5003e5709d788d0 /src/irmd/main.c
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/main.c')
-rw-r--r--src/irmd/main.c28
1 files changed, 25 insertions, 3 deletions
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);