patches/glib-03-trusted-extensions.diff
author yippi
Mon, 27 Sep 2010 21:07:51 +0000
changeset 20108 51df67ca9307
parent 15766 4015b1e83531
permissions -rw-r--r--
I had these modules listed as being owned by me, but they are really owned by wangke, correcting.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15766
4015b1e83531 2009-05-14 Erwann Chenede - <[email protected]>
erwannc
parents: 11350
diff changeset
     1
diff -rup ../i386/glib-2.20.1/gmodule/gmodule-dl.c glib-2.20.1/gmodule/gmodule-dl.c
4015b1e83531 2009-05-14 Erwann Chenede - <[email protected]>
erwannc
parents: 11350
diff changeset
     2
--- ../i386/glib-2.20.1/gmodule/gmodule-dl.c	2009-05-14 16:42:09.667625600 +0200
4015b1e83531 2009-05-14 Erwann Chenede - <[email protected]>
erwannc
parents: 11350
diff changeset
     3
+++ glib-2.20.1/gmodule/gmodule-dl.c	2009-05-14 16:42:41.085074835 +0200
11350
b882c0a98c18 2007-12-23 Damien Carbery <[email protected]>
dcarbery
parents: 11346
diff changeset
     4
@@ -30,6 +30,8 @@
b882c0a98c18 2007-12-23 Damien Carbery <[email protected]>
dcarbery
parents: 11346
diff changeset
     5
 #include "config.h"
9500
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
     6
 
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
     7
 #include <dlfcn.h>
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
     8
+#include <string.h>
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
     9
+#include <limits.h>
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    10
 
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    11
 /* Perl includes <nlist.h> and <link.h> instead of <dlfcn.h> on some systmes? */
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    12
 
15766
4015b1e83531 2009-05-14 Erwann Chenede - <[email protected]>
erwannc
parents: 11350
diff changeset
    13
@@ -89,6 +91,22 @@ fetch_dlerror (gboolean replace_null)
9500
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    14
   return msg;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    15
 }
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    16
 
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    17
+static gboolean
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    18
+g_tsol_is_multi_label_session (void)
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    19
+{
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    20
+        static int trusted = -1;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    21
+
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    22
+        if (trusted < 0) {
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    23
+		if (getenv("TRUSTED_SESSION")) {
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    24
+			trusted = 1;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    25
+		} else { 
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    26
+			trusted = 0;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    27
+		}
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    28
+	}
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    29
+
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    30
+	return trusted ? TRUE : FALSE;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    31
+}
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    32
+
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    33
 static gpointer
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    34
 _g_module_open (const gchar *file_name,
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    35
 		gboolean     bind_lazy,
15766
4015b1e83531 2009-05-14 Erwann Chenede - <[email protected]>
erwannc
parents: 11350
diff changeset
    36
@@ -101,7 +119,46 @@ _g_module_open (const gchar *file_name,
9880
ad99395cbe92 2007-05-11 Damien Carbery <[email protected]>
dcarbery
parents: 9500
diff changeset
    37
      performed immediately in all dynamic dependencies */
9500
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    38
   bind_lazy = 1;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    39
   #endif
9880
ad99395cbe92 2007-05-11 Damien Carbery <[email protected]>
dcarbery
parents: 9500
diff changeset
    40
-  
ad99395cbe92 2007-05-11 Damien Carbery <[email protected]>
dcarbery
parents: 9500
diff changeset
    41
+
9500
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    42
+  if (g_tsol_is_multi_label_session()) {
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    43
+     Dl_serinfo     _info, *info = &_info;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    44
+     Dl_serpath     *path;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    45
+     uint_t         cnt;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    46
+     gboolean       found = FALSE;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    47
+
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    48
+     if (strstr(file_name, "../")) 
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    49
+     {
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    50
+        g_module_set_error("relative paths in module names are not allowed");
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    51
+        return NULL;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    52
+     } 
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    53
+     else
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    54
+     {
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    55
+       /* determine search path count and required buffer size */
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    56
+       dlinfo(RTLD_SELF, RTLD_DI_SERINFOSIZE, (void *)info);
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    57
+       /* allocate new buffer and initialize */
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    58
+       info = malloc(_info.dls_size);
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    59
+       info->dls_size = _info.dls_size;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    60
+       info->dls_cnt = _info.dls_cnt;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    61
+
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    62
+       /* obtain sarch path information */
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    63
+       dlinfo(RTLD_SELF, RTLD_DI_SERINFO, (void *)info);
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    64
+
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    65
+       path = &info->dls_serpath[0];
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    66
+       for (cnt = 1; cnt <= info->dls_cnt; cnt++, path++) {
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    67
+         if (strncmp(file_name, path->dls_name, strlen(path->dls_name)) == 0)
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    68
+	   found = TRUE;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    69
+       }
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    70
+
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    71
+       if ( ! found &&
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    72
+            strncmp(file_name, "/usr/lib/", strlen("/usr/lib/")) &&
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    73
+            strncmp(file_name, "/usr/sfw/lib/", strlen("/usr/sfw/lib/")))
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    74
+       {
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    75
+         g_module_set_error("module is not in a trusted directory");
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    76
+         return NULL;
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    77
+       }
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    78
+    }
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    79
+  }
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    80
+
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    81
   handle = dlopen (file_name,
15766
4015b1e83531 2009-05-14 Erwann Chenede - <[email protected]>
erwannc
parents: 11350
diff changeset
    82
 		   (bind_local ? 0 : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY | RTLD_FIRST: RTLD_NOW));
9500
aacbdd347cf9 2007-03-08 Damien Carbery <[email protected]>
dcarbery
parents:
diff changeset
    83
   if (!handle)