# user and group name can use glob matches (* == all for example) like the
# shell. as can action names allowed or denied.
-action: halt @HALT@
-action: reboot @REBOOT@
-action: suspend @SUSPEND@
-action: hibernate @HIBERNATE@
-action: /bin/mount /bin/mount
-action: /bin/umount /bin/umount
+action: halt @HALT@
+action: reboot @REBOOT@
+action: suspend @SUSPEND@
+action: hibernate @HIBERNATE@
+action: /bin/mount /bin/mount
+action: /bin/umount /bin/umount
action: /usr/bin/eject /usr/bin/eject
-action: gdb gdb
-action: l2ping l2ping
+action: l2ping /usr/bin/l2ping
# on FreeBSD use this instead of the above.
#action suspend /usr/sbin/zzz
#include "config.h"
+#define __USE_MISC
+#define _SVID_SOURCE
+#ifdef HAVE_FEATURES_H
+# include <features.h>
+#endif
+
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
const char *act;
#endif
gid_t gid, gl[65536], egid;
- int pid = 0;
for (i = 1; i < argc; i++)
{
test = 1;
action = argv[2];
}
- else if (!strcmp(argv[1], "gdb"))
- {
- if (argc != 4) exit(1);
- char *end = NULL;
-
- action = argv[1];
- pid = strtoul(argv[2], &end, 10);
- if (end == NULL || *end != '\0')
- {
- printf("Invalid pid for '%s'.\n", argv[3]);
- exit(0);
- }
-
- output = argv[3];
- }
else if (!strcmp(argv[1], "l2ping"))
{
action = argv[1];
exit(20);
}
- if (!strcmp(action, "gdb"))
- {
- char buffer[4096];
- int r;
-
- snprintf(buffer, 4096,
- "%s --pid=%i "
- "-batch "
- "-ex 'set logging file %s' "
- "-ex 'set logging on' "
- "-ex 'thread apply all backtrace full' "
- "-ex detach > /dev/null 2>&1 < /dev/zero",
- cmd,
- pid,
- output ?: "e-output.txt");
-
- r = system(buffer);
-
- exit(WEXITSTATUS(r));
- }
- else if (!test && !strcmp(action, "l2ping"))
+ if (!test && !strcmp(action, "l2ping"))
{
char tmp[128];
double latency;
return (latency < 0) ? 1 : 0;
}
+ /* sanitize environment */
+#ifdef HAVE_UNSETENV
+# define NOENV(x) unsetenv(x)
+#else
+# define NOENV(x)
+#endif
+ NOENV("IFS");
+ NOENV("LD_PRELOAD");
+ NOENV("PYTHONPATH");
+ NOENV("LD_LIBRARY_PATH");
+#ifdef HAVE_CLEARENV
+ clearenv();
+#endif
+ /* set path and ifs to minimal defaults */
+ putenv("PATH=/bin:/usr/bin");
+ putenv("IFS= \t\n");
+
if ((!test)
#ifdef HAVE_EEZE_MOUNT
&& (!mnt)