Linux/Android: Option to set LAD working dir permissions
authorArnie Reynoso <arnier@ti.com>
Thu, 15 May 2014 16:46:59 +0000 (09:46 -0700)
committerRobert Tivy <rtivy@ti.com>
Tue, 20 May 2014 22:26:46 +0000 (15:26 -0700)
Added an optional flag (-p) to LAD, to allow users to set the permissions
of LAD's working directory at launch.

This is critical, if applications using IPC stack (MessageQ) are executed
in user-space while LAD is started as root.  Without proper directory
permissions the user application will be unable to talk to the LAD daemon.

linux/include/_lad.h
linux/src/daemon/lad.c

index 5f00a988198154e553049138040d10f82250d432..a0a52925ee7410e1ea7d2916a8c7654effea7c42 100644 (file)
@@ -111,9 +111,11 @@ extern struct timeval start_tv;
 /* LAD commmand FIFO strings: */
 #if defined (IPC_BUILDOS_ANDROID)
 #define LAD_COMMANDFIFO         "/data/lad/LAD/LADCMDS"
+#define LAD_ROOTDIR             "/data/lad/"
 #define LAD_WORKINGDIR          "/data/lad/LAD/"
 #else
 #define LAD_COMMANDFIFO         "/tmp/LAD/LADCMDS"
+#define LAD_ROOTDIR             "/tmp/"
 #define LAD_WORKINGDIR          "/tmp/LAD/"
 #endif
 
index 80d662a414e71ba2bf547f56885e4e992971d119..11b37fd0c01843f43c02e76d1517a3244cc26183 100644 (file)
@@ -95,10 +95,12 @@ Options:\n\
     h            : print this help message\n\
     g            : enable GateMP support \n\
     l <logfile>  : name of logfile for LAD\n\
+    p <oct value>: set LAD's directory permissions\n\
 \n\
 Examples:\n\
     lad_<platform> -h\n\
     lad_<platform> -l log.txt\n\
+    lad_<platform> -l log.txt -p 777\n\
     lad_<platform> -g -l log.txt\n\
 \n"
 
@@ -125,6 +127,15 @@ int main(int argc, char * argv[])
     pid_t sid;
 #endif
 
+    /* change to LAD's root directory */
+    if ((chdir(LAD_ROOTDIR)) < 0) {
+        /* if can't change directory assume it needs to be created, do it */
+        if ((mkdir(LAD_ROOTDIR, 0666)) < 0) {
+            printf("\nERROR: Failed to create LAD's root directory!\n");
+            exit(EXIT_FAILURE);
+        }
+    }
+
     /* change to LAD's working directory */
     if ((chdir(LAD_WORKINGDIR)) < 0) {
 
@@ -142,7 +153,7 @@ int main(int argc, char * argv[])
 
     /* process command line args */
     while (1) {
-        c = getopt(argc, argv, "ghl:");
+        c = getopt(argc, argv, "ghl:p:");
         if (c == -1) {
             break;
         }
@@ -169,7 +180,7 @@ int main(int argc, char * argv[])
                 else {
                     logFile = TRUE;
                     gettimeofday(&start_tv, NULL);
-                    printf("\nOpened log file: %s", optarg);
+                    printf("\nOpened log file: %s\n", optarg);
                     /* close log file upon LAD termination */
                     flags = fcntl(fileno(logPtr), F_GETFD);
                     if (flags != -1) {
@@ -177,6 +188,11 @@ int main(int argc, char * argv[])
                     }
                 }
                 break;
+            case 'p':
+                printf("\nSet LAD's directory permissions to '%s'\n", optarg);
+                chmod(LAD_ROOTDIR, strtol(optarg, NULL, 8));
+                chmod(LAD_WORKINGDIR, strtol(optarg, NULL, 8));
+                break;
             default:
                 fprintf (stderr, "\nUnrecognized argument\n");
                 exit(EXIT_FAILURE);