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_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
Notes
Notes:
svn path=/head/; revision=225629
Diffstat (limited to 'devel/libgtop/files/patch-sysdeps_freebsd_open.c')
| -rw-r--r-- | devel/libgtop/files/patch-sysdeps_freebsd_open.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/devel/libgtop/files/patch-sysdeps_freebsd_open.c b/devel/libgtop/files/patch-sysdeps_freebsd_open.c new file mode 100644 index 000000000000..f7bf0e3b1488 --- /dev/null +++ b/devel/libgtop/files/patch-sysdeps_freebsd_open.c @@ -0,0 +1,91 @@ +--- sysdeps/freebsd/open.c.orig 2008-05-23 18:13:23.000000000 -0400 ++++ sysdeps/freebsd/open.c 2008-09-29 17:23:22.000000000 -0400 +@@ -20,76 +20,33 @@ + */ + + #include <config.h> ++#include <sys/types.h> ++#include <sys/sysctl.h> + #include <glibtop.h> +-#include <glibtop/error.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); ++#include <glibtop/cpu.h> ++#include <glibtop/error.h> + +- for (init_fkt = _glibtop_init_hook_p; *init_fkt; init_fkt++) +- (*init_fkt) (server); ++#include <glibtop_private.h> + +- server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS; +- } +-} + + void +-glibtop_open_p (glibtop *server, const char *program_name, ++glibtop_open_s (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 ++ int ncpus; ++ size_t len; + +- /* !!! WE ARE ROOT HERE - CHANGE WITH CAUTION !!! */ ++ len = sizeof (ncpus); ++ sysctlbyname ("hw.ncpu", &ncpus, &len, NULL, 0); ++ server->real_ncpu = ncpus - 1; ++ server->ncpu = MIN(GLIBTOP_NCPU - 1, server->real_ncpu); + +- server->machine.uid = getuid (); +- server->machine.euid = geteuid (); +- server->machine.gid = getgid (); +- server->machine.egid = getegid (); + #if defined(__FreeBSD_kernel__) + server->os_version_code = __FreeBSD_kernel_version; + #else + server->os_version_code = __FreeBSD_version; + #endif +- /* 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. */ + } |
