Debugger support: introduce LTTNG_DEBUG_NOCLONE env. var.
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 24 Feb 2012 16:39:52 +0000 (11:39 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 24 Feb 2012 16:39:52 +0000 (11:39 -0500)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
doc/man/lttng-sessiond.8
src/common/runas.c

index 8a235f94130dcb2c5353807d374cd49719d4526a..50a03b029d54bf0f45b4744310ac5c2b7a512bc4 100644 (file)
@@ -129,6 +129,9 @@ Allow to specifiy the 64-bit library path containing libconsumer.so.
 .IP "LTTNG_CONSUMERD64_LIBDIR"
 Allow to specifiy the 32-bit library path containing libconsumer.so.
 \fB--consumerd64-libdir\fP override this variable.
+.IP "LTTNG_DEBUG_NOCLONE"
+Debug-mode disabling use of clone/fork. Insecure, but required to allow
+debuggers to work with sessiond on some operating systems.
 .SH "SEE ALSO"
 
 .PP
index 7dee28abedc6ce1f2d518e32a7d64d5c1a6cd3f4..4742a792eca105f35f1a8e2d194db9aeecd55a66 100644 (file)
@@ -200,7 +200,7 @@ int child_run_as(void *_data)
 }
 
 static
-int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
+int run_as_clone(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
 {
        struct run_as_data run_as_data;
        int ret = 0;
@@ -292,6 +292,29 @@ end:
        return retval.i;
 }
 
+/*
+ * To be used on setups where gdb has issues debugging programs using
+ * clone/rfork. Note that this is for debuging ONLY, and should not be
+ * considered secure.
+ */
+static
+int run_as_noclone(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
+{
+       return cmd(data);
+}
+
+static
+int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
+{
+       if (!getenv("LTTNG_DEBUG_NOCLONE")) {
+               DBG("Using run_as_clone");
+               return run_as_clone(cmd, data, uid, gid);
+       } else {
+               DBG("Using run_as_noclone");
+               return run_as_noclone(cmd, data, uid, gid);
+       }
+}
+
 int run_as_mkdir_recursive(const char *path, mode_t mode, uid_t uid, gid_t gid)
 {
        struct run_as_mkdir_data data;
This page took 0.02756 seconds and 5 git commands to generate.