diff --git a/config.def.h b/config.def.h index 9855e21..a2020bb 100644 --- a/config.def.h +++ b/config.def.h @@ -10,3 +10,13 @@ static const char *colorname[NUMCOLS] = { /* treat a cleared input like a wrong password (color) */ static const int failonclear = 1; + +/* length of entires in scom */ +#define ENTRYLEN 1 + +static const secretpass scom[ENTRYLEN] = { +/* Password command */ + { "shutdown", "doas poweroff" }, +}; diff --git a/slock.c b/slock.c index 5ae738c..b92ae4e 100644 --- a/slock.c +++ b/slock.c @@ -44,6 +44,11 @@ struct xrandr { int errbase; }; +typedef struct secretpass { + char pass[256]; + char command[256]; +} secretpass; + #include "config.h" static void @@ -160,6 +165,13 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, case XK_Return: passwd[len] = '\0'; errno = 0; + + for (int i = 0; i < ENTRYLEN; i++){ + if (strcmp(scom[i].pass, passwd) == 0){ + system(scom[i].command); + } + } + if (!(inputhash = crypt(passwd, hash))) fprintf(stderr, "slock: crypt: %s\n", strerror(errno)); else