merged.

On 04/01/2011 09:32 AM, Nils Carlson wrote:
Set the mode when creating the personal socket directory,
this way all app sockets are private.

Signed-off-by: Nils Carlson<[email protected]>
---
  libust/tracectl.c               |    2 +-
  libustcomm/ustcomm.c            |   20 +++++++++++++-------
  libustcomm/ustcomm.h            |    2 +-
  libustconsumer/libustconsumer.c |    2 +-
  4 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/libust/tracectl.c b/libust/tracectl.c
index ae92b7e..58b567f 100644
--- a/libust/tracectl.c
+++ b/libust/tracectl.c
@@ -1236,7 +1236,7 @@ static struct ustcomm_sock * init_app_socket(int epoll_fd)
                goto free_dir_name;
        }

-       result = ensure_dir_exists(dir_name);
+       result = ensure_dir_exists(dir_name, S_IRWXU);
        if (result == -1) {
                ERR("Unable to create socket directory %s, UST thread bailing",
                    dir_name);
diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c
index dce1e52..e401c42 100644
--- a/libustcomm/ustcomm.c
+++ b/libustcomm/ustcomm.c
@@ -588,28 +588,34 @@ free_dir_name:
        return retval;
  }

-int ensure_dir_exists(const char *dir)
+int ensure_dir_exists(const char *dir, mode_t mode)
  {
        struct stat st;
        int result;

-       if(!strcmp(dir, ""))
+       if (!strcmp(dir, ""))
                return -1;

        result = stat(dir,&st);
-       if(result == -1&&  errno != ENOENT) {
+       if (result<  0&&  errno != ENOENT) {
                return -1;
-       }
-       else if(result == -1) {
+       } else if (result<  0) {
                /* ENOENT */
                int result;

-               /* mkdir mode to 0777 */
-               result = mkdir_p(dir, S_IRWXU | S_IRWXG | S_IRWXO);
+               result = mkdir_p(dir, mode);
                if(result != 0) {
                        ERR("executing in recursive creation of directory %s", 
dir);
                        return -1;
                }
+       } else {
+               if (st.st_mode != mode) {
+                       result = chmod(dir, mode);
+                       if (result<  0) {
+                               ERR("couldn't set directory mode on %s", dir);
+                               return -1;
+                       }
+               }
        }

        return 0;
diff --git a/libustcomm/ustcomm.h b/libustcomm/ustcomm.h
index db38119..d16aec7 100644
--- a/libustcomm/ustcomm.h
+++ b/libustcomm/ustcomm.h
@@ -119,7 +119,7 @@ struct ustcomm_notify_buf_mapped {
  };

  /* Ensure directory existence, usefull for unix sockets */
-extern int ensure_dir_exists(const char *dir);
+extern int ensure_dir_exists(const char *dir, mode_t mode);

  /* Create and delete sockets */
  extern struct ustcomm_sock * ustcomm_init_sock(int fd, int epoll_fd,
diff --git a/libustconsumer/libustconsumer.c b/libustconsumer/libustconsumer.c
index 8eb4424..eaee1fa 100644
--- a/libustconsumer/libustconsumer.c
+++ b/libustconsumer/libustconsumer.c
@@ -846,7 +846,7 @@ static int init_ustconsumer_socket(struct 
ustconsumer_instance *instance)
                int result;

                /* Only check if socket dir exists if we are using the default 
directory */
-               result = ensure_dir_exists(SOCK_DIR);
+               result = ensure_dir_exists(SOCK_DIR, S_IRWXU | S_IRWXG | 
S_IRWXO);
                if (result == -1) {
                        ERR("Unable to create socket directory %s", SOCK_DIR);
                        return -1;


_______________________________________________
ltt-dev mailing list
[email protected]
http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev

Reply via email to