Added a timeout on wrong password.
This commit is contained in:
1 parent
78c1f81bd5
commit
ddf98cf673
2 files changed
+63
-38
No files matched your search
@@ -1,13 +1,34 @@
|
|||||||
#ifndef HELPERS_SENTRY
|
#ifndef HELPERS_SENTRY
|
||||||
#define HELPERS_SENTRY
|
#define HELPERS_SENTRY
|
||||||
|
|
||||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
|
||||||
|
|
||||||
#define KB(n) (((unsigned long long)(n)) << 10)
|
#define KB(n) (((unsigned long long)(n)) << 10)
|
||||||
#define MB(n) (((unsigned long long)(n)) << 20)
|
#define MB(n) (((unsigned long long)(n)) << 20)
|
||||||
#define GB(n) (((unsigned long long)(n)) << 30)
|
#define GB(n) (((unsigned long long)(n)) << 30)
|
||||||
#define TB(n) (((unsigned long long)(n)) << 40)
|
#define TB(n) (((unsigned long long)(n)) << 40)
|
||||||
|
|
||||||
|
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
||||||
|
|
||||||
|
#define MIN(a,b) (((a)<(b))?(a):(b))
|
||||||
|
#define MAX(a,b) (((a)>(b))?(a):(b))
|
||||||
|
|
||||||
#define SWAP(T, a, b) do { T t__ = a; a = b; b = t__; } while(0)
|
#define SWAP(T, a, b) do { T t__ = a; a = b; b = t__; } while(0)
|
||||||
|
|
||||||
|
#define PI 3.1415926535897f
|
||||||
|
#define EPSILON 4.94065645841247e-324
|
||||||
|
|
||||||
|
#define MAX_U64 (unsigned long long)0xffffffffffffffffull
|
||||||
|
#define MAX_U32 (unsigned int)0xffffffff
|
||||||
|
#define MAX_U16 (unsigned short)0xffff
|
||||||
|
#define MAX_U8 (unsigned char)0xff
|
||||||
|
|
||||||
|
#define MAX_S64 (long long)0x7fffffffffffffffll
|
||||||
|
#define MAX_S32 (int)0x7fffffff
|
||||||
|
#define MAX_S16 (short)0x7fff
|
||||||
|
#define MAX_S8 (signed char)0x7f
|
||||||
|
|
||||||
|
#define MIN_S64 (long long)0x8000000000000000ll
|
||||||
|
#define MIN_S32 (int)0x80000000
|
||||||
|
#define MIN_S16 (short)0x8000
|
||||||
|
#define MIN_S8 (signed char)0x80
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -745,7 +745,7 @@ run_loop(struct arena *arena,
|
|||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
KeySym ksym;
|
KeySym ksym;
|
||||||
XEvent ev;
|
XEvent ev;
|
||||||
unsigned long long rendering_timeout_millis;
|
unsigned long long rendering_timeout_millis, failure_timeout_millis;
|
||||||
struct dpms_state dpms_state;
|
struct dpms_state dpms_state;
|
||||||
struct fonts fonts;
|
struct fonts fonts;
|
||||||
int kbl_brightness;
|
int kbl_brightness;
|
||||||
@@ -775,6 +775,7 @@ run_loop(struct arena *arena,
|
|||||||
needs_rendering = 1;
|
needs_rendering = 1;
|
||||||
|
|
||||||
rendering_timeout_millis = millis();
|
rendering_timeout_millis = millis();
|
||||||
|
failure_timeout_millis = 0;
|
||||||
|
|
||||||
while(running) {
|
while(running) {
|
||||||
fd_set fds;
|
fd_set fds;
|
||||||
@@ -851,44 +852,47 @@ run_loop(struct arena *arena,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (ksym) {
|
if(millis() - failure_timeout_millis >= 2000) {
|
||||||
case XK_Return:
|
switch (ksym) {
|
||||||
passwd[len] = '\0';
|
case XK_Return:
|
||||||
errno = 0;
|
passwd[len] = '\0';
|
||||||
if (!(inputhash = crypt(passwd, hash)))
|
errno = 0;
|
||||||
fprintf(stderr, "slock: crypt: %s\n", strerror(errno));
|
if (!(inputhash = crypt(passwd, hash)))
|
||||||
else
|
fprintf(stderr, "slock: crypt: %s\n", strerror(errno));
|
||||||
running = !!strcmp(inputhash, hash);
|
else
|
||||||
if (running) {
|
running = !!strcmp(inputhash, hash);
|
||||||
XBell(dpy, 100);
|
if (running) {
|
||||||
failure = 1;
|
XBell(dpy, 100);
|
||||||
} else {
|
failure = 1;
|
||||||
locked = 0;
|
failure_timeout_millis = millis();
|
||||||
}
|
} else {
|
||||||
explicit_bzero(&passwd, sizeof(passwd));
|
locked = 0;
|
||||||
len = 0;
|
}
|
||||||
break;
|
|
||||||
case XK_Escape:
|
|
||||||
explicit_bzero(&passwd, sizeof(passwd));
|
|
||||||
len = 0;
|
|
||||||
failure = 0;
|
|
||||||
break;
|
|
||||||
case XK_BackSpace:
|
|
||||||
if (len)
|
|
||||||
passwd[--len] = '\0';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (num && !iscntrl((unsigned char)buf[0]) &&
|
|
||||||
(len + num < sizeof(passwd))) {
|
|
||||||
memcpy(passwd + len, buf, num);
|
|
||||||
len += num;
|
|
||||||
} else if (buf[0] == '\025') { /* ctrl-u clears input */
|
|
||||||
explicit_bzero(&passwd, sizeof(passwd));
|
explicit_bzero(&passwd, sizeof(passwd));
|
||||||
len = 0;
|
len = 0;
|
||||||
} else {
|
break;
|
||||||
continue; /* Don't trigger fail screen when pressing control characters */
|
case XK_Escape:
|
||||||
|
explicit_bzero(&passwd, sizeof(passwd));
|
||||||
|
len = 0;
|
||||||
|
failure = 0;
|
||||||
|
break;
|
||||||
|
case XK_BackSpace:
|
||||||
|
if (len)
|
||||||
|
passwd[--len] = '\0';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (num && !iscntrl((unsigned char)buf[0]) &&
|
||||||
|
(len + num < sizeof(passwd))) {
|
||||||
|
memcpy(passwd + len, buf, num);
|
||||||
|
len += num;
|
||||||
|
} else if (buf[0] == '\025') { /* ctrl-u clears input */
|
||||||
|
explicit_bzero(&passwd, sizeof(passwd));
|
||||||
|
len = 0;
|
||||||
|
} else {
|
||||||
|
continue; /* Don't trigger fail screen when pressing control characters */
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
} else if (rr->active && ev.type == rr->evbase + RRScreenChangeNotify) {
|
} else if (rr->active && ev.type == rr->evbase + RRScreenChangeNotify) {
|
||||||
rre = (XRRScreenChangeNotifyEvent*)&ev;
|
rre = (XRRScreenChangeNotifyEvent*)&ev;
|
||||||
|
|||||||
Reference in new issue
Block a user