M README.md => README.md +5 -0
@@ 26,6 26,8 @@ slock tool, how to install it and how it works.
### Changelog:
+2021-09-09 - Added the failure-command patch
+
2021-06-08 - Added the color message patch
2020-08-03 - Added alpha, keypress_feedback and blur_pixelated_screen patches
@@ 64,6 66,9 @@ slock tool, how to install it and how it works.
- the monitor will automatically be activated by pressing a key or moving the mouse and the
password can be entered then
+ - [failure-command](https://tools.suckless.org/slock/patches/failure-command/)
+ - allows for a command to be run after a specified number of incorrect attempts
+
- [keypress_feedback](https://tools.suckless.org/slock/patches/keypress-feedback/)
- draws random blocks on the screen to display keypress feedback
M config.def.h => config.def.h +9 -0
@@ 56,6 56,15 @@ static const float alpha = 0.9;
/* treat a cleared input like a wrong password (color) */
static const int failonclear = 1;
+#if FAILURE_COMMAND_PATCH
+/* number of failed password attempts until failcommand is executed.
+ Set to 0 to disable */
+static const int failcount = 0;
+
+/* command to be executed after [failcount] failed password attempts */
+static const char *failcommand = "shutdown";
+#endif // FAILURE_COMMAND_PATCH
+
#if BLUR_PIXELATED_SCREEN_PATCH
/* Enable blur */
#define BLUR
M patches.def.h => patches.def.h +5 -0
@@ 60,6 60,11 @@
*/
#define DPMS_PATCH 0
+/* This patch allows for a command to be run after a specified number of incorrect attempts.
+ * https://tools.suckless.org/slock/patches/failure-command/
+ */
+#define FAILURE_COMMAND_PATCH 0
+
/* Draws random blocks on the screen to display keypress feedback.
* https://tools.suckless.org/slock/patches/keypress-feedback/
* https://patch-diff.githubusercontent.com/raw/phenax/bslock/pull/2.diff
M slock.c => slock.c +10 -0
@@ 43,6 43,9 @@
#include "util.h"
char *argv0;
+#if FAILURE_COMMAND_PATCH
+int failtrack = 0;
+#endif // FAILURE_COMMAND_PATCH
#if QUICKCANCEL_PATCH
static time_t locktime;
@@ 272,6 275,13 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
if (running) {
XBell(dpy, 100);
failure = 1;
+ #if FAILURE_COMMAND_PATCH
+ failtrack++;
+
+ if (failtrack >= failcount && failcount != 0) {
+ system(failcommand);
+ }
+ #endif // FAILURE_COMMAND_PATCH
}
explicit_bzero(&passwd, sizeof(passwd));
len = 0;