Turn glibtop::machine from a value to a pointer, allocated on init.
This hides the glibtop_machine implementation.
This commit is contained in:
committed by
Benoît Dejean
parent
42e860e5ad
commit
0642c2d610
@@ -98,7 +98,7 @@ struct _glibtop
|
|||||||
gid_t gid;
|
gid_t gid;
|
||||||
gid_t egid;
|
gid_t egid;
|
||||||
|
|
||||||
glibtop_machine machine; /* Machine dependent data */
|
glibtop_machine *machine; /* Machine dependent data */
|
||||||
};
|
};
|
||||||
|
|
||||||
extern glibtop *glibtop_global_server;
|
extern glibtop *glibtop_global_server;
|
||||||
|
@@ -11,4 +11,4 @@ glibtop_HEADERS = close.h loadavg.h prockernel.h procstate.h \
|
|||||||
procwd.h procaffinity.h \
|
procwd.h procaffinity.h \
|
||||||
netlist.h procopenfiles.h open.h
|
netlist.h procopenfiles.h open.h
|
||||||
|
|
||||||
noinst_HEADERS = error.h write.h read_data.h read.h init_hooks.h
|
noinst_HEADERS = error.h write.h read_data.h read.h init_hooks.h machine.h
|
||||||
|
@@ -26,6 +26,8 @@
|
|||||||
#include <glibtop/open.h>
|
#include <glibtop/open.h>
|
||||||
#include <glibtop/parameter.h>
|
#include <glibtop/parameter.h>
|
||||||
#include <glibtop/init_hooks.h>
|
#include <glibtop/init_hooks.h>
|
||||||
|
#include <glibtop/machine.h>
|
||||||
|
|
||||||
|
|
||||||
#ifndef DEFAULT_PORT
|
#ifndef DEFAULT_PORT
|
||||||
#define DEFAULT_PORT 42800
|
#define DEFAULT_PORT 42800
|
||||||
@@ -173,6 +175,9 @@ glibtop_init_r (glibtop **server_ptr, unsigned long features, unsigned flags)
|
|||||||
/* Do the initialization, but only if not already initialized. */
|
/* Do the initialization, but only if not already initialized. */
|
||||||
|
|
||||||
if ((server->flags & _GLIBTOP_INIT_STATE_INIT) == 0) {
|
if ((server->flags & _GLIBTOP_INIT_STATE_INIT) == 0) {
|
||||||
|
|
||||||
|
glibtop_machine_new (server);
|
||||||
|
|
||||||
if (flags & GLIBTOP_FEATURES_EXCEPT)
|
if (flags & GLIBTOP_FEATURES_EXCEPT)
|
||||||
features = ~features & GLIBTOP_SYSDEPS_ALL;
|
features = ~features & GLIBTOP_SYSDEPS_ALL;
|
||||||
|
|
||||||
@@ -221,6 +226,8 @@ glibtop_init_s (glibtop **server_ptr, unsigned long features, unsigned flags)
|
|||||||
glibtop *server;
|
glibtop *server;
|
||||||
const _glibtop_init_func_t *init_fkt;
|
const _glibtop_init_func_t *init_fkt;
|
||||||
|
|
||||||
|
glibtop_debug("init_s with features=%#0lx and flags=%#0x", features, flags);
|
||||||
|
|
||||||
if (server_ptr == NULL)
|
if (server_ptr == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
#include <glibtop/union.h>
|
#include <glibtop/union.h>
|
||||||
#include <glibtop/sysdeps.h>
|
#include <glibtop/sysdeps.h>
|
||||||
#include <glibtop/error.h>
|
#include <glibtop/error.h>
|
||||||
|
#include <glibtop/machine.h>
|
||||||
|
|
||||||
#include <sys/utsname.h>
|
#include <sys/utsname.h>
|
||||||
|
|
||||||
@@ -75,6 +76,8 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
glibtop_machine_new (glibtop_global_server);
|
||||||
|
|
||||||
glibtop_init_p (glibtop_global_server, 0, 0);
|
glibtop_init_p (glibtop_global_server, 0, 0);
|
||||||
|
|
||||||
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
||||||
|
@@ -36,13 +36,13 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
static inline void glibtop_suid_enter (glibtop *server) {
|
static inline void glibtop_suid_enter (glibtop *server) {
|
||||||
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
||||||
setregid (server->machine.gid, server->machine.egid);
|
setregid (server->machine->gid, server->machine->egid);
|
||||||
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void glibtop_suid_leave (glibtop *server) {
|
static inline void glibtop_suid_leave (glibtop *server) {
|
||||||
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
||||||
if (setregid (server->machine.egid, server->machine.gid))
|
if (setregid (server->machine->egid, server->machine->gid))
|
||||||
_exit (1);
|
_exit (1);
|
||||||
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
||||||
};
|
};
|
||||||
|
@@ -77,7 +77,7 @@ static struct nlist nlst [] =
|
|||||||
void
|
void
|
||||||
_glibtop_init_netload_p (glibtop *server)
|
_glibtop_init_netload_p (glibtop *server)
|
||||||
{
|
{
|
||||||
if (kvm_nlist (server->machine.kd, nlst) < 0) {
|
if (kvm_nlist (server->machine->kd, nlst) < 0) {
|
||||||
glibtop_warn_io_r (server, "kvm_nlist");
|
glibtop_warn_io_r (server, "kvm_nlist");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -104,7 +104,7 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
|
|||||||
|
|
||||||
if (server->sysdeps.netload == 0) return;
|
if (server->sysdeps.netload == 0) return;
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd, nlst [0].n_value,
|
if (kvm_read (server->machine->kd, nlst [0].n_value,
|
||||||
&ifnetaddr, sizeof (ifnetaddr)) != sizeof (ifnetaddr)) {
|
&ifnetaddr, sizeof (ifnetaddr)) != sizeof (ifnetaddr)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (ifnet)");
|
glibtop_warn_io_r (server, "kvm_read (ifnet)");
|
||||||
return;
|
return;
|
||||||
@@ -116,7 +116,7 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
|
|||||||
register char *cp;
|
register char *cp;
|
||||||
u_long ifaddraddr;
|
u_long ifaddraddr;
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd, ifnetaddr, &ifnet,
|
if (kvm_read (server->machine->kd, ifnetaddr, &ifnet,
|
||||||
sizeof (ifnet)) != sizeof (ifnet)) {
|
sizeof (ifnet)) != sizeof (ifnet)) {
|
||||||
glibtop_warn_io_r (server,
|
glibtop_warn_io_r (server,
|
||||||
"kvm_read (ifnetaddr)");
|
"kvm_read (ifnetaddr)");
|
||||||
@@ -183,7 +183,7 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
|
|||||||
buf->flags = _glibtop_sysdeps_netload;
|
buf->flags = _glibtop_sysdeps_netload;
|
||||||
|
|
||||||
for (ifaddraddr = (u_long) ifnet.if_addrhead.tqh_first; ifaddraddr; ifaddraddr = (u_long) ifaddr.ifa.ifa_link.tqe_next) {
|
for (ifaddraddr = (u_long) ifnet.if_addrhead.tqh_first; ifaddraddr; ifaddraddr = (u_long) ifaddr.ifa.ifa_link.tqe_next) {
|
||||||
if ((kvm_read (server->machine.kd, ifaddraddr, &ifaddr,
|
if ((kvm_read (server->machine->kd, ifaddraddr, &ifaddr,
|
||||||
sizeof (ifaddr)) != sizeof (ifaddr))) {
|
sizeof (ifaddr)) != sizeof (ifaddr))) {
|
||||||
glibtop_warn_io_r (server,
|
glibtop_warn_io_r (server,
|
||||||
"kvm_read (ifaddraddr)");
|
"kvm_read (ifaddraddr)");
|
||||||
|
@@ -77,7 +77,7 @@ _glibtop_init_ppp_p (glibtop *server)
|
|||||||
#endif
|
#endif
|
||||||
#endif /* HAVE_I4B */
|
#endif /* HAVE_I4B */
|
||||||
|
|
||||||
if (kvm_nlist (server->machine.kd, nlst) < 0) {
|
if (kvm_nlist (server->machine->kd, nlst) < 0) {
|
||||||
glibtop_warn_io_r (server, "kvm_nlist");
|
glibtop_warn_io_r (server, "kvm_nlist");
|
||||||
server->sysdeps.ppp = 0;
|
server->sysdeps.ppp = 0;
|
||||||
}
|
}
|
||||||
@@ -100,7 +100,7 @@ glibtop_get_ppp_p (glibtop *server, glibtop_ppp *buf, unsigned short device)
|
|||||||
|
|
||||||
if (server->sysdeps.ppp == 0) return;
|
if (server->sysdeps.ppp == 0) return;
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd, nlst [0].n_value,
|
if (kvm_read (server->machine->kd, nlst [0].n_value,
|
||||||
&data, sizeof (data)) != sizeof (data)) {
|
&data, sizeof (data)) != sizeof (data)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (i4bisppp_softc)");
|
glibtop_warn_io_r (server, "kvm_read (i4bisppp_softc)");
|
||||||
return;
|
return;
|
||||||
|
@@ -60,14 +60,14 @@ glibtop_get_proc_args_p (glibtop *server, glibtop_proc_args *buf,
|
|||||||
glibtop_suid_enter (server);
|
glibtop_suid_enter (server);
|
||||||
|
|
||||||
/* Get the process data */
|
/* Get the process data */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
|
pinfo = kvm_getprocs (server->machine->kd, KERN_PROC_PID, pid, &count);
|
||||||
if ((pinfo == NULL) || (count < 1)) {
|
if ((pinfo == NULL) || (count < 1)) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
glibtop_suid_leave (server);
|
glibtop_suid_leave (server);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
args = kvm_getargv (server->machine.kd, pinfo, max_len);
|
args = kvm_getargv (server->machine->kd, pinfo, max_len);
|
||||||
if (args == NULL) {
|
if (args == NULL) {
|
||||||
glibtop_warn_io_r (server, "kvm_getargv (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getargv (%d)", pid);
|
||||||
glibtop_suid_leave (server);
|
glibtop_suid_leave (server);
|
||||||
|
@@ -80,7 +80,7 @@ glibtop_get_proc_kernel_p (glibtop *server,
|
|||||||
glibtop_suid_enter (server);
|
glibtop_suid_enter (server);
|
||||||
|
|
||||||
/* Get the process information */
|
/* Get the process information */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
|
pinfo = kvm_getprocs (server->machine->kd, KERN_PROC_PID, pid, &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if ((pinfo == NULL) || (count != 1)) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
glibtop_suid_leave (server);
|
glibtop_suid_leave (server);
|
||||||
|
@@ -91,9 +91,9 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
|
|||||||
*inum = 0;
|
*inum = 0;
|
||||||
*dev = 0;
|
*dev = 0;
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd, (gulong) &vnode->v_tag,
|
if (kvm_read (server->machine->kd, (gulong) &vnode->v_tag,
|
||||||
(char *) &tagptr, sizeof (tagptr)) != sizeof (tagptr) ||
|
(char *) &tagptr, sizeof (tagptr)) != sizeof (tagptr) ||
|
||||||
kvm_read (server->machine.kd, (gulong) tagptr,
|
kvm_read (server->machine->kd, (gulong) tagptr,
|
||||||
(char *) tagstr, sizeof (tagstr)) != sizeof (tagstr))
|
(char *) tagstr, sizeof (tagstr)) != sizeof (tagstr))
|
||||||
{
|
{
|
||||||
glibtop_warn_io_r (server, "kvm_read (tagptr)");
|
glibtop_warn_io_r (server, "kvm_read (tagptr)");
|
||||||
@@ -111,7 +111,7 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd, (gulong) VTOI(vn), (char *) &inode,
|
if (kvm_read (server->machine->kd, (gulong) VTOI(vn), (char *) &inode,
|
||||||
sizeof (inode)) != sizeof (inode))
|
sizeof (inode)) != sizeof (inode))
|
||||||
{
|
{
|
||||||
glibtop_warn_io_r (server, "kvm_read (inode)");
|
glibtop_warn_io_r (server, "kvm_read (inode)");
|
||||||
@@ -151,7 +151,7 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
|
|||||||
|
|
||||||
struct my_zfsvfs zvfs;
|
struct my_zfsvfs zvfs;
|
||||||
|
|
||||||
if (kvm_read(server->machine.kd,
|
if (kvm_read(server->machine->kd,
|
||||||
(unsigned long)(znode->z_zfsvfs),
|
(unsigned long)(znode->z_zfsvfs),
|
||||||
&zvfs, sizeof zvfs) != sizeof zvfs) {
|
&zvfs, sizeof zvfs) != sizeof zvfs) {
|
||||||
glibtop_warn_io_r(server, "kvm_read (z_zfsvfs)");
|
glibtop_warn_io_r(server, "kvm_read (z_zfsvfs)");
|
||||||
@@ -167,12 +167,12 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
|
|||||||
|
|
||||||
|
|
||||||
#if (__FreeBSD_version >= 800039) || (__FreeBSD_kernel_version >= 800039)
|
#if (__FreeBSD_version >= 800039) || (__FreeBSD_kernel_version >= 800039)
|
||||||
if (kvm_read (server->machine.kd, (gulong) cdev2priv(inode.i_dev), (char *) &priv,
|
if (kvm_read (server->machine->kd, (gulong) cdev2priv(inode.i_dev), (char *) &priv,
|
||||||
sizeof (priv))
|
sizeof (priv))
|
||||||
#else
|
#else
|
||||||
if (kvm_read (server->machine.kd, (gulong) inode.i_dev, (char *) &si,
|
if (kvm_read (server->machine->kd, (gulong) inode.i_dev, (char *) &si,
|
||||||
sizeof (si)) != sizeof (si) ||
|
sizeof (si)) != sizeof (si) ||
|
||||||
kvm_read (server->machine.kd, (gulong) si.si_priv, (char *) &priv,
|
kvm_read (server->machine->kd, (gulong) si.si_priv, (char *) &priv,
|
||||||
sizeof (priv))
|
sizeof (priv))
|
||||||
#endif
|
#endif
|
||||||
!= sizeof (priv))
|
!= sizeof (priv))
|
||||||
@@ -219,7 +219,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
glibtop_suid_enter (server);
|
glibtop_suid_enter (server);
|
||||||
|
|
||||||
/* Get the process data */
|
/* Get the process data */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
|
pinfo = kvm_getprocs (server->machine->kd, KERN_PROC_PID, pid, &count);
|
||||||
if ((pinfo == NULL) || (count < 1)) {
|
if ((pinfo == NULL) || (count < 1)) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
glibtop_suid_leave (server);
|
glibtop_suid_leave (server);
|
||||||
@@ -228,7 +228,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
|
|
||||||
/* Now we get the memory maps. */
|
/* Now we get the memory maps. */
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine->kd,
|
||||||
(gulong) pinfo [0].ki_vmspace,
|
(gulong) pinfo [0].ki_vmspace,
|
||||||
(char *) &vmspace, sizeof (vmspace)) != sizeof (vmspace)) {
|
(char *) &vmspace, sizeof (vmspace)) != sizeof (vmspace)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (vmspace)");
|
glibtop_warn_io_r (server, "kvm_read (vmspace)");
|
||||||
@@ -238,7 +238,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
|
|
||||||
first = vmspace.vm_map.header.next;
|
first = vmspace.vm_map.header.next;
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine->kd,
|
||||||
(gulong) vmspace.vm_map.header.next,
|
(gulong) vmspace.vm_map.header.next,
|
||||||
(char *) &entry, sizeof (entry)) != sizeof (entry)) {
|
(char *) &entry, sizeof (entry)) != sizeof (entry)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (entry)");
|
glibtop_warn_io_r (server, "kvm_read (entry)");
|
||||||
@@ -261,7 +261,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
guint len;
|
guint len;
|
||||||
|
|
||||||
if (update) {
|
if (update) {
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine->kd,
|
||||||
(gulong) entry.next,
|
(gulong) entry.next,
|
||||||
(char *) &entry, sizeof (entry)) != sizeof (entry)) {
|
(char *) &entry, sizeof (entry)) != sizeof (entry)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (entry)");
|
glibtop_warn_io_r (server, "kvm_read (entry)");
|
||||||
@@ -279,7 +279,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
|
|
||||||
/* We're only interested in `vm_object's */
|
/* We're only interested in `vm_object's */
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine->kd,
|
||||||
(gulong) entry.object.vm_object,
|
(gulong) entry.object.vm_object,
|
||||||
(char *) &object, sizeof (object)) != sizeof (object)) {
|
(char *) &object, sizeof (object)) != sizeof (object)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (object)");
|
glibtop_warn_io_r (server, "kvm_read (object)");
|
||||||
@@ -294,7 +294,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
if (!object.handle)
|
if (!object.handle)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine->kd,
|
||||||
(gulong) object.handle,
|
(gulong) object.handle,
|
||||||
(char *) &vnode, sizeof (vnode)) != sizeof (vnode)) {
|
(char *) &vnode, sizeof (vnode)) != sizeof (vnode)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (vnode)");
|
glibtop_warn_io_r (server, "kvm_read (vnode)");
|
||||||
|
@@ -84,7 +84,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
|
|||||||
if (pid == 0) return;
|
if (pid == 0) return;
|
||||||
|
|
||||||
/* Get the process data */
|
/* Get the process data */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
|
pinfo = kvm_getprocs (server->machine->kd, KERN_PROC_PID, pid, &count);
|
||||||
if ((pinfo == NULL) || (count < 1)) {
|
if ((pinfo == NULL) || (count < 1)) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return;
|
return;
|
||||||
@@ -108,7 +108,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
|
|||||||
|
|
||||||
/* Now we get the shared memory. */
|
/* Now we get the shared memory. */
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine->kd,
|
||||||
(unsigned long) pinfo [0].PROC_VMSPACE,
|
(unsigned long) pinfo [0].PROC_VMSPACE,
|
||||||
(char *) &vmspace, sizeof (vmspace)) != sizeof (vmspace)) {
|
(char *) &vmspace, sizeof (vmspace)) != sizeof (vmspace)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (vmspace)");
|
glibtop_warn_io_r (server, "kvm_read (vmspace)");
|
||||||
@@ -117,7 +117,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
|
|||||||
|
|
||||||
first = vmspace.vm_map.header.next;
|
first = vmspace.vm_map.header.next;
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine->kd,
|
||||||
(unsigned long) vmspace.vm_map.header.next,
|
(unsigned long) vmspace.vm_map.header.next,
|
||||||
(char *) &entry, sizeof (entry)) != sizeof (entry)) {
|
(char *) &entry, sizeof (entry)) != sizeof (entry)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (entry)");
|
glibtop_warn_io_r (server, "kvm_read (entry)");
|
||||||
@@ -131,7 +131,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
|
|||||||
* to OBJT_DEFAULT so if seems this really works. */
|
* to OBJT_DEFAULT so if seems this really works. */
|
||||||
|
|
||||||
while (entry.next != first) {
|
while (entry.next != first) {
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine->kd,
|
||||||
(unsigned long) entry.next,
|
(unsigned long) entry.next,
|
||||||
(char *) &entry, sizeof (entry)) != sizeof (entry)) {
|
(char *) &entry, sizeof (entry)) != sizeof (entry)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (entry)");
|
glibtop_warn_io_r (server, "kvm_read (entry)");
|
||||||
@@ -146,7 +146,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
|
|||||||
|
|
||||||
/* We're only interested in `vm_object's */
|
/* We're only interested in `vm_object's */
|
||||||
|
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine->kd,
|
||||||
(unsigned long) entry.object.vm_object,
|
(unsigned long) entry.object.vm_object,
|
||||||
(char *) &object, sizeof (object)) != sizeof (object)) {
|
(char *) &object, sizeof (object)) != sizeof (object)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (object)");
|
glibtop_warn_io_r (server, "kvm_read (object)");
|
||||||
|
@@ -61,7 +61,7 @@ glibtop_get_proc_segment_p (glibtop *server,
|
|||||||
if (pid == 0) return;
|
if (pid == 0) return;
|
||||||
|
|
||||||
/* Get the process info from the kernel */
|
/* Get the process info from the kernel */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
|
pinfo = kvm_getprocs (server->machine->kd, KERN_PROC_PID, pid, &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if ((pinfo == NULL) || (count != 1)) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return;
|
return;
|
||||||
|
@@ -58,7 +58,7 @@ glibtop_get_proc_signal_p (glibtop *server,
|
|||||||
if (pid == 0) return;
|
if (pid == 0) return;
|
||||||
|
|
||||||
/* Get the process information */
|
/* Get the process information */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
|
pinfo = kvm_getprocs (server->machine->kd, KERN_PROC_PID, pid, &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if ((pinfo == NULL) || (count != 1)) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return;
|
return;
|
||||||
|
@@ -53,7 +53,7 @@ glibtop_get_proc_state_p (glibtop *server,
|
|||||||
memset (buf, 0, sizeof (glibtop_proc_state));
|
memset (buf, 0, sizeof (glibtop_proc_state));
|
||||||
|
|
||||||
/* Get the process information */
|
/* Get the process information */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
|
pinfo = kvm_getprocs (server->machine->kd, KERN_PROC_PID, pid, &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if ((pinfo == NULL) || (count != 1)) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return;
|
return;
|
||||||
|
@@ -74,7 +74,7 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf,
|
|||||||
glibtop_suid_enter (server);
|
glibtop_suid_enter (server);
|
||||||
|
|
||||||
/* Get the process information */
|
/* Get the process information */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
|
pinfo = kvm_getprocs (server->machine->kd, KERN_PROC_PID, pid, &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if ((pinfo == NULL) || (count != 1)) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
glibtop_suid_leave (server);
|
glibtop_suid_leave (server);
|
||||||
|
@@ -56,7 +56,7 @@ glibtop_get_proc_uid_p (glibtop *server, glibtop_proc_uid *buf,
|
|||||||
if (pid == 0) return;
|
if (pid == 0) return;
|
||||||
|
|
||||||
/* Get the process information */
|
/* Get the process information */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
|
pinfo = kvm_getprocs (server->machine->kd, KERN_PROC_PID, pid, &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if ((pinfo == NULL) || (count != 1)) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return;
|
return;
|
||||||
|
@@ -59,24 +59,24 @@ glibtop_open_p (glibtop *server, const char *program_name,
|
|||||||
glibtop_debug ("glibtop_open_p ()");
|
glibtop_debug ("glibtop_open_p ()");
|
||||||
|
|
||||||
/* !!! WE ARE ROOT HERE - CHANGE WITH CAUTION !!! */
|
/* !!! WE ARE ROOT HERE - CHANGE WITH CAUTION !!! */
|
||||||
server->machine.uid = getuid ();
|
server->machine->uid = getuid ();
|
||||||
server->machine.euid = geteuid ();
|
server->machine->euid = geteuid ();
|
||||||
server->machine.gid = getgid ();
|
server->machine->gid = getgid ();
|
||||||
server->machine.egid = getegid ();
|
server->machine->egid = getegid ();
|
||||||
/* Setup machine-specific data */
|
/* Setup machine-specific data */
|
||||||
server->machine.kd = kvm_openfiles (NULL, NULL, NULL, O_RDONLY, errbuf);
|
server->machine->kd = kvm_openfiles (NULL, NULL, NULL, O_RDONLY, errbuf);
|
||||||
|
|
||||||
if (server->machine.kd == NULL)
|
if (server->machine->kd == NULL)
|
||||||
glibtop_error_io_r (server, "kvm_open");
|
glibtop_error_io_r (server, "kvm_open");
|
||||||
|
|
||||||
/* Drop priviledges. */
|
/* Drop priviledges. */
|
||||||
|
|
||||||
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
||||||
|
|
||||||
if (setreuid (server->machine.euid, server->machine.uid))
|
if (setreuid (server->machine->euid, server->machine->uid))
|
||||||
_exit (1);
|
_exit (1);
|
||||||
|
|
||||||
if (setregid (server->machine.egid, server->machine.gid))
|
if (setregid (server->machine->egid, server->machine->gid))
|
||||||
_exit (1);
|
_exit (1);
|
||||||
|
|
||||||
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
glibtop_debug ("uid=%d euid=%d gid=%d egid=%d", getuid(), geteuid(), getgid(), getegid());
|
||||||
|
@@ -59,7 +59,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
|
|||||||
memset (buf, 0, sizeof (glibtop_swap));
|
memset (buf, 0, sizeof (glibtop_swap));
|
||||||
memset (kvmsw, 0, sizeof (kvmsw));
|
memset (kvmsw, 0, sizeof (kvmsw));
|
||||||
|
|
||||||
nswdev = kvm_getswapinfo (server->machine.kd, kvmsw, 16, 0);
|
nswdev = kvm_getswapinfo (server->machine->kd, kvmsw, 16, 0);
|
||||||
if (nswdev < 1) return;
|
if (nswdev < 1) return;
|
||||||
|
|
||||||
buf->flags = _glibtop_sysdeps_swap;
|
buf->flags = _glibtop_sysdeps_swap;
|
||||||
|
Reference in New Issue
Block a user