diff options
| author | Joe Marcus Clarke <marcus@FreeBSD.org> | 2009-01-10 05:22:13 +0000 |
|---|---|---|
| committer | Joe Marcus Clarke <marcus@FreeBSD.org> | 2009-01-10 05:22:13 +0000 |
| commit | 610ae5681637c1051a0c17b54e29d97f53da2f3a (patch) | |
| tree | c231a1eb74b07e444fa7363012cb84bf23d83ce0 /devel/libgtop/files/patch-sysdeps_freebsd_suid_open.c | |
| parent | Add a new framework for browser plugins, USE_WEBPLUGINS. It is for which foo (diff) | |
Presenting GNOME 2.24 for FreeBSD.
See http://library.gnome.org/misc/release-notes/2.24/ for the general
release notes. On the FreeBSD front, this release introduces Fuse support
in HAL, adds multi-CPU support to libgtop, WebKit updates, and fixes some
long-standing seahorse and gnome-keyring bugs. The documentation updates
to the website are forthcoming.
This release features commits by adamw, ahze, kwm, mezz, and myself. It would
not have been possible without are contributors and testers:
Alexander Loginov
Craig Butler [1]
Dmitry Marakasov [6]
Eric L. Chen
Joseph S. Atkinson
Kris Moore
Lapo Luchini [7]
Nikos Ntarmos
Pawel Worach
Romain Tartiere
TAOKA Fumiyoshi [3]
Yasuda Keisuke
Zyl
aZ [4]
bf [2] [5]
Florent Thoumie
Peter Wemm
pluknet
PR: 125857 [1]
126993 [2]
130031 [3]
127399 [4]
127661 [5]
124302 [6]
129570 [7]
129936
123790
Diffstat (limited to 'devel/libgtop/files/patch-sysdeps_freebsd_suid_open.c')
| -rw-r--r-- | devel/libgtop/files/patch-sysdeps_freebsd_suid_open.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/devel/libgtop/files/patch-sysdeps_freebsd_suid_open.c b/devel/libgtop/files/patch-sysdeps_freebsd_suid_open.c new file mode 100644 index 000000000000..a188b364cbcd --- /dev/null +++ b/devel/libgtop/files/patch-sysdeps_freebsd_suid_open.c @@ -0,0 +1,94 @@ +--- sysdeps/freebsd/suid_open.c.orig 2008-09-29 17:22:12.000000000 -0400 ++++ sysdeps/freebsd/suid_open.c 2008-09-29 17:23:35.000000000 -0400 +@@ -0,0 +1,91 @@ ++/* Copyright (C) 1998 Joshua Sled ++ This file is part of LibGTop 1.0. ++ ++ Contributed by Joshua Sled <jsled@xcf.berkeley.edu>, July 1998. ++ ++ LibGTop is free software; you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, ++ or (at your option) any later version. ++ ++ LibGTop is distributed in the hope that it will be useful, but WITHOUT ++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with LibGTop; see the file COPYING. If not, write to the ++ Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ Boston, MA 02111-1307, USA. ++*/ ++ ++#include <config.h> ++#include <glibtop.h> ++#include <glibtop/error.h> ++#include <glibtop/cpu.h> ++#include <glibtop/open.h> ++#include <glibtop/init_hooks.h> ++ ++ ++/* !!! THIS FUNCTION RUNS SUID ROOT - CHANGE WITH CAUTION !!! */ ++ ++void ++glibtop_init_p (glibtop *server, const unsigned long features, ++ const unsigned flags) ++{ ++ const _glibtop_init_func_t *init_fkt; ++ ++ if (server == NULL) ++ glibtop_error_r (NULL, "glibtop_init_p (server == NULL)"); ++ ++ /* Do the initialization, but only if not already initialized. */ ++ ++ if ((server->flags & _GLIBTOP_INIT_STATE_SYSDEPS) == 0) { ++ glibtop_open_p (server, "glibtop", features, flags); ++ ++ for (init_fkt = _glibtop_init_hook_p; *init_fkt; init_fkt++) ++ (*init_fkt) (server); ++ ++ server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS; ++ } ++} ++ ++void ++glibtop_open_p (glibtop *server, const char *program_name, ++ const unsigned long features, ++ const unsigned flags) ++{ ++#ifdef DEBUG ++ fprintf (stderr, "DEBUG (%d): glibtop_open_p ()\n", getpid ()); ++#endif ++ ++ /* !!! WE ARE ROOT HERE - CHANGE WITH CAUTION !!! */ ++ server->machine.uid = getuid (); ++ server->machine.euid = geteuid (); ++ server->machine.gid = getgid (); ++ server->machine.egid = getegid (); ++ /* Setup machine-specific data */ ++ server->machine.kd = kvm_open (NULL, NULL, NULL, O_RDONLY, "kvm_open"); ++ ++ if (server->machine.kd == NULL) ++ glibtop_error_io_r (server, "kvm_open"); ++ ++ /* Drop priviledges. */ ++ ++ if (setreuid (server->machine.euid, server->machine.uid)) ++ _exit (1); ++ ++ if (setregid (server->machine.egid, server->machine.gid)) ++ _exit (1); ++ ++ /* !!! END OF SUID ROOT PART !!! */ ++ ++ /* Our effective uid is now those of the user invoking the server, ++ * so we do no longer have any priviledges. */ ++ ++ /* NOTE: On FreeBSD, we do not need to be suid root, we just need to ++ * be sgid kmem. ++ * ++ * The server will only use setegid() to get back it's priviledges, ++ * so it will fail if it is suid root and not sgid kmem. */ ++} |
