}
static int am_i_running_as_root() {
- if(getuid() != 0) {
- if(debug)
- info("I am not running as root.");
- return 0;
- }
+ uid_t uid = getuid(), euid = geteuid();
- if(debug)
- info("I am running as root.");
+ if(uid == 0 || euid == 0) {
+ if(debug) info("I am running with escalated privileges, uid = %u, euid = %u.", uid, euid);
+ return 1;
+ }
- return 1;
+ if(debug) info("I am not running with escalated privileges, uid = %u, euid = %u.", uid, euid);
+ return 0;
}
#ifdef HAVE_CAPABILITY
-static int set_capabilities() {
+static int check_capabilities() {
if(!CAP_IS_SUPPORTED(CAP_DAC_READ_SEARCH)) {
error("This system does not support CAP_DAC_READ_SEARCH capability. Please setuid to root apps.plugin.");
return 0;
parse_args(argc, argv);
- if(!am_i_running_as_root())
- if(!set_capabilities())
- error("apps.plugin should either run as root or have special capabilities. "
+ if(!am_i_running_as_root()) {
+ if(!check_capabilities()) {
+ uid_t uid = getuid(), euid = geteuid();
+#ifdef HAVE_CAPABILITY
+ error("apps.plugin should either run as root (now running with uid %u, euid %u) or have special capabilities. "
+ "Without these, apps.plugin cannot report disk I/O utilization of other processes. "
+ "To enable capabilities run: sudo setcap cap_dac_read_search,cap_sys_ptrace+ep %s; "
+ "To enable setuid to root run: sudo chown root %s; sudo chmod 4755 %s; "
+ , uid, euid, argv[0], argv[0], argv[0]
+ );
+#else
+ error("apps.plugin should either run as root (now running with uid %u, euid %u) or have special capabilities. "
"Without these, apps.plugin cannot report disk I/O utilization of other processes. "
- "To enable capabilities run: sudo setcap cap_dac_read_search,cap_sys_ptrace+ep %1$s; "
- "To enable setuid to root run: sudo chown root %1$s; sudo chmod 4755 %1$s; "
- , argv[0]
+ "Your system does not support capabilities. "
+ "To enable setuid to root run: sudo chown root %s; sudo chmod 4755 %s; "
+ , uid, euid, argv[0], argv[0]
);
+#endif
+ }
+ }
all_pids_sortlist = callocz(sizeof(pid_t), (size_t)pid_max);
all_pids = callocz(sizeof(struct pid_stat *), (size_t) pid_max);