aboutsummaryrefslogtreecommitdiff
path: root/bin/zzz.c
diff options
context:
space:
mode:
Diffstat (limited to 'bin/zzz.c')
-rw-r--r--bin/zzz.c87
1 files changed, 0 insertions, 87 deletions
diff --git a/bin/zzz.c b/bin/zzz.c
deleted file mode 100644
index ad2ef6c..0000000
--- a/bin/zzz.c
+++ /dev/null
@@ -1,87 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-#include <sys/types.h>
-
-#define POWER_STATE_F "/sys/power/state"
-
-void
-die(const char *msg)
-{
- puts(msg);
- exit(1);
-}
-
-void
-err(const char *msg)
-{
- perror(msg);
- exit(1);
-}
-
-void
-suspend()
-{
- int fh = open(POWER_STATE_F, O_WRONLY);
- int n;
- const char *cmd = "mem";
-
- if (fh == -1)
- err("Opening "POWER_STATE_F);
-
- n = write(fh, cmd, 3);
- if (n == -1)
- err("Writing to "POWER_STATE_F);
-
- exit(0);
-}
-
-int
-main(int argc, char **argv)
-{
- uid_t uid = getuid();
- gid_t gid = getgid();
- uid_t euid = geteuid();
- char **a = argv+1;
- char *lockProg = "slock";
- pid_t pid;
- int ret;
-
- if (euid != 0)
- die("Program must be run as root/setuid");
-
- for (;*a;a++) {
- if (strcmp("-l", *a) == 0) {
- a++;
- if (*a)
- lockProg = *a;
- else
- die("-l must have an argument");
- } else {
- printf("Unknown argument: '%s'\n", *a);
- exit(1);
- }
- }
-
-
- pid = fork();
- switch (pid) {
- case -1:
- err("fork");
- case 0:
- ret = setuid(uid);
- if (ret == -1)
- err("setuid");
- ret = setgid(gid);
- if (ret == -1)
- err("setgid");
-
- execlp(lockProg, lockProg);
- err("execlp");
- default:
- suspend();
- }
-
-}