LCR now runs as a user.
[lcr.git] / main.c
diff --git a/main.c b/main.c
index b66615f..59343ae 100644 (file)
--- a/main.c
+++ b/main.c
@@ -100,7 +100,7 @@ void debug(const char *function, int line, char *prefix, char *buffer)
 }
 
 
-void _printdebug(const char *function, int line, unsigned long mask, const char *fmt, ...)
+void _printdebug(const char *function, int line, unsigned int mask, const char *fmt, ...)
 {
        char buffer[4096];
        va_list args;
@@ -189,7 +189,7 @@ int main(int argc, char *argv[])
                                created_lock = 0, created_signal = 0, created_debug = 0,
                                created_misdn = 0;
        int                     idletime = 0, idlecheck = 0;
-       char                    tracetext[256];
+       char                    tracetext[256], lock[128];
 
 #if 0
        /* init fdset */
@@ -226,13 +226,6 @@ int main(int argc, char *argv[])
        /* init crc */
        crc_init();
 
-       /* check for root (real or effective) */
-       if (getuid() && geteuid())
-       {
-               fprintf(stderr, "Please run %s as super-user.\n", NAME);
-               goto free;
-       }
-
        /* the mutex init */
        if (pthread_mutex_init(&mutexd, NULL))
        {
@@ -275,7 +268,8 @@ int main(int argc, char *argv[])
        /* query available isdn ports */
        if (!(strcasecmp(argv[1],"query")))
        {
-               mISDN_port_info();
+               fprintf(stderr, "-> Using 'isdninfo'\n");
+               system("isdninfo");
                ret = 0;
                goto free;
        }
@@ -358,9 +352,11 @@ int main(int argc, char *argv[])
        }
 
        /* create lock and lock! */
-       if ((lockfd = open("/var/run/lcr.lock", O_CREAT, 0)) < 0)
+       SPRINT(lock, "%s/lcr.lock", options.lock);
+       if ((lockfd = open(lock, O_CREAT | O_WRONLY)) < 0)
        {
-               fprintf(stderr, "Cannot create lock file: /var/run/lcr.lock\n");
+               fprintf(stderr, "Cannot create lock file: %s\n", lock);
+               fprintf(stderr, "Check options.conf to change to path with permissions for you.\n");
                goto free;
        }
        if (flock(lockfd, LOCK_EX|LOCK_NB) < 0)
@@ -414,18 +410,17 @@ int main(int argc, char *argv[])
                switch(errno)
                {
                        case ENOMEM:
-                       fprintf(stderr, "Not enough memory to lock paging, exitting...\n");
+                       fprintf(stderr, "Warning: Not enough memory to lock paging, exitting...\n");
                        break;
                        case EPERM:
-                       fprintf(stderr, "No permission to lock paging, exitting...\n");
+                       fprintf(stderr, "Warning: No permission to lock paging, exitting...\n");
                        break;
                        case EFAULT:
-                       fprintf(stderr, "'Bad address' while locking paging, exitting...\n");
+                       fprintf(stderr, "Warning: 'Bad address' while locking paging, exitting...\n");
                        break;
                        default:
-                       fprintf(stderr, "Unknown error %d while locking paging, exitting...\n", errno);
+                       fprintf(stderr, "Warning: Unknown error %d while locking paging, exitting...\n", errno);
                }
-               goto free;
        }
 
        /* set real time scheduler & priority */
@@ -716,7 +711,11 @@ free:
        if (created_lock)
                flock(lockfd, LOCK_UN);
        if (lockfd >= 0)
+       {
+               chmod(lock, 0700);
+               unlink(lock);
                close(lockfd);
+       }
 
        /* free rulesets */
        if (ruleset_first)