* made the timeout function more clear
* only accept rlen < 50, dont increase it when it makes no sense * minor splint based mods --HG-- extra : convert_revision : svn%3Aeebe1cee-a9af-4fe4-bd26-ad572b19c5ab/trunk%4046
This commit is contained in:
parent
5deb0de590
commit
e707f454ed
2 changed files with 55 additions and 35 deletions
43
src/alock.c
43
src/alock.c
|
@ -122,7 +122,7 @@ static void displayUsage() {
|
||||||
/*------------------------------------------------------------------*\
|
/*------------------------------------------------------------------*\
|
||||||
\*------------------------------------------------------------------*/
|
\*------------------------------------------------------------------*/
|
||||||
|
|
||||||
static void initXInfo(struct aXInfo* xinfo, struct aOpts* opts) {
|
static void initXInfo(struct aXInfo* xinfo) {
|
||||||
|
|
||||||
Display* dpy = XOpenDisplay(NULL);
|
Display* dpy = XOpenDisplay(NULL);
|
||||||
|
|
||||||
|
@ -132,18 +132,17 @@ static void initXInfo(struct aXInfo* xinfo, struct aOpts* opts) {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const size_t nr_screens = ScreenCount(dpy);
|
|
||||||
xinfo->display = dpy;
|
xinfo->display = dpy;
|
||||||
xinfo->nr_screens = nr_screens;
|
xinfo->nr_screens = ScreenCount(dpy);
|
||||||
xinfo->window = (Window*)calloc(nr_screens, sizeof(Window));
|
xinfo->window = (Window*)calloc((size_t)xinfo->nr_screens, sizeof(Window));
|
||||||
xinfo->root = (Window*)calloc(nr_screens, sizeof(Window));
|
xinfo->root = (Window*)calloc((size_t)xinfo->nr_screens, sizeof(Window));
|
||||||
xinfo->colormap = (Colormap*)calloc(nr_screens, sizeof(Colormap));
|
xinfo->colormap = (Colormap*)calloc((size_t)xinfo->nr_screens, sizeof(Colormap));
|
||||||
xinfo->cursor = (Cursor*)calloc(nr_screens, sizeof(Cursor));
|
xinfo->cursor = (Cursor*)calloc((size_t)xinfo->nr_screens, sizeof(Cursor));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
int scr;
|
int scr;
|
||||||
for (scr = 0; scr < xinfo->nr_screens; scr++) {
|
for (scr = 0; scr < xinfo->nr_screens; scr++) {
|
||||||
xinfo->window[scr] = 0;
|
xinfo->window[scr] = None;
|
||||||
xinfo->root[scr] = RootWindow(dpy, scr);
|
xinfo->root[scr] = RootWindow(dpy, scr);
|
||||||
xinfo->colormap[scr] = DefaultColormap(dpy, scr);
|
xinfo->colormap[scr] = DefaultColormap(dpy, scr);
|
||||||
}
|
}
|
||||||
|
@ -157,7 +156,8 @@ static int event_loop(struct aOpts* opts, struct aXInfo* xinfo) {
|
||||||
char cbuf[10], rbuf[50];
|
char cbuf[10], rbuf[50];
|
||||||
unsigned int clen, rlen = 0;
|
unsigned int clen, rlen = 0;
|
||||||
|
|
||||||
long goodwill = 5 * 30000;
|
const long max_goodwill = 5 * 30000; /* 150 seconds */
|
||||||
|
long goodwill = max_goodwill;
|
||||||
long timeout = 0;
|
long timeout = 0;
|
||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
|
@ -194,22 +194,29 @@ static int event_loop(struct aOpts* opts, struct aXInfo* xinfo) {
|
||||||
XSync(xinfo->display, True); /* discard pending events to start really fresh */
|
XSync(xinfo->display, True); /* discard pending events to start really fresh */
|
||||||
XBell(xinfo->display, 0);
|
XBell(xinfo->display, 0);
|
||||||
rlen = 0;
|
rlen = 0;
|
||||||
|
|
||||||
if (timeout) {
|
if (timeout) {
|
||||||
goodwill += ev.xkey.time - timeout;
|
goodwill += ev.xkey.time - timeout;
|
||||||
if (goodwill > 5 * 30000) {
|
if (goodwill > max_goodwill) {
|
||||||
goodwill = 5 * 30000;
|
goodwill = max_goodwill;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
timeout = -goodwill * 0.3;
|
|
||||||
goodwill += timeout;
|
{
|
||||||
timeout += ev.xkey.time + 30000;
|
long offset;
|
||||||
|
|
||||||
|
offset = goodwill * 0.3;
|
||||||
|
goodwill = goodwill - offset;
|
||||||
|
timeout = ev.xkey.time + 30000 - offset;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (clen != 1)
|
if (clen != 1)
|
||||||
break;
|
break;
|
||||||
if (rlen < sizeof(rbuf))
|
if (rlen < (sizeof(rbuf) - 1)) {
|
||||||
rbuf[rlen] = cbuf[0];
|
rbuf[rlen] = cbuf[0];
|
||||||
rlen++;
|
rlen++;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -359,9 +366,7 @@ int main(int argc, char **argv) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
opts.auth->init(NULL);
|
initXInfo(&xinfo);
|
||||||
|
|
||||||
initXInfo(&xinfo, &opts);
|
|
||||||
|
|
||||||
if (opts.background->init(background_args, &xinfo) == 0) {
|
if (opts.background->init(background_args, &xinfo) == 0) {
|
||||||
printf("alock: error, couldnt init [%s] with [%s].\n",
|
printf("alock: error, couldnt init [%s] with [%s].\n",
|
||||||
|
|
|
@ -875,6 +875,13 @@ static unsigned int method = 0;
|
||||||
static char* method_string = NULL;
|
static char* method_string = NULL;
|
||||||
static size_t method_digest_string_length = 0;
|
static size_t method_digest_string_length = 0;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
NONE = 0,
|
||||||
|
SHA256 = 256,
|
||||||
|
SHA384 = 384,
|
||||||
|
SHA512 = 512
|
||||||
|
};
|
||||||
|
|
||||||
static int alock_auth_sha2_init(const char* args) {
|
static int alock_auth_sha2_init(const char* args) {
|
||||||
|
|
||||||
if (!args) {
|
if (!args) {
|
||||||
|
@ -883,16 +890,16 @@ static int alock_auth_sha2_init(const char* args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strstr(args, "sha256:") == args) {
|
if (strstr(args, "sha256:") == args) {
|
||||||
method = 256;
|
method = SHA256;
|
||||||
method_string = "sha256";
|
method_string = strdup("sha256");
|
||||||
method_digest_string_length = SHA256_DIGEST_STRING_LENGTH;
|
method_digest_string_length = SHA256_DIGEST_STRING_LENGTH;
|
||||||
} else if (strstr(args, "sha512:") == args) {
|
} else if (strstr(args, "sha512:") == args) {
|
||||||
method = 512;
|
method = SHA512;
|
||||||
method_string = "sha512";
|
method_string = strdup("sha512");
|
||||||
method_digest_string_length = SHA512_DIGEST_STRING_LENGTH;
|
method_digest_string_length = SHA512_DIGEST_STRING_LENGTH;
|
||||||
} else if (strstr(args, "sha384:") == args) {
|
} else if (strstr(args, "sha384:") == args) {
|
||||||
method = 384;
|
method = SHA384;
|
||||||
method_string = "sha384";
|
method_string = strdup("sha384");
|
||||||
method_digest_string_length = SHA384_DIGEST_STRING_LENGTH;
|
method_digest_string_length = SHA384_DIGEST_STRING_LENGTH;
|
||||||
} else {
|
} else {
|
||||||
printf("alock: error, not supported hash in [sha2].\n");
|
printf("alock: error, not supported hash in [sha2].\n");
|
||||||
|
@ -933,6 +940,7 @@ static int alock_auth_sha2_init(const char* args) {
|
||||||
} else {
|
} else {
|
||||||
printf("alock: error, couldnt read [%s] for [%s].\n",
|
printf("alock: error, couldnt read [%s] for [%s].\n",
|
||||||
&arg[5], method_string);
|
&arg[5], method_string);
|
||||||
|
free(method_string);
|
||||||
free(arguments);
|
free(arguments);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -940,6 +948,7 @@ static int alock_auth_sha2_init(const char* args) {
|
||||||
if (!tmp_hash || strlen(tmp_hash) != method_digest_string_length - 1) {
|
if (!tmp_hash || strlen(tmp_hash) != method_digest_string_length - 1) {
|
||||||
printf("alock: error, given file [%s] doesnt contain a valid hash for [%s].\n",
|
printf("alock: error, given file [%s] doesnt contain a valid hash for [%s].\n",
|
||||||
&arg[5], method_string);
|
&arg[5], method_string);
|
||||||
|
free(method_string);
|
||||||
free(arguments);
|
free(arguments);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -951,11 +960,13 @@ static int alock_auth_sha2_init(const char* args) {
|
||||||
free(arguments);
|
free(arguments);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "alock: error, missing arguments for [%s].\n", method_string);
|
fprintf(stderr, "alock: error, missing arguments for [%s].\n", method_string);
|
||||||
|
free(method_string);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!userhash) {
|
if (!userhash) {
|
||||||
printf("alock: error, missing hash for [%s].\n", method_string);
|
printf("alock: error, missing hash for [%s].\n", method_string);
|
||||||
|
free(method_string);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -965,11 +976,15 @@ static int alock_auth_sha2_init(const char* args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int alock_auth_sha2_deinit() {
|
static int alock_auth_sha2_deinit() {
|
||||||
|
|
||||||
if (userhash)
|
if (userhash)
|
||||||
free(userhash);
|
free(userhash);
|
||||||
|
|
||||||
userhash = NULL;
|
userhash = NULL;
|
||||||
|
if (method_string)
|
||||||
|
free(method_string);
|
||||||
method_string = NULL;
|
method_string = NULL;
|
||||||
method = 0;
|
method = NONE;
|
||||||
method_digest_string_length = 0;
|
method_digest_string_length = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -980,7 +995,7 @@ static int alock_auth_sha2_auth(const char* pass) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch (method) {
|
switch (method) {
|
||||||
case 256: {
|
case SHA256: {
|
||||||
unsigned char digest[SHA256_DIGEST_LENGTH];
|
unsigned char digest[SHA256_DIGEST_LENGTH];
|
||||||
unsigned char stringdigest[SHA256_DIGEST_STRING_LENGTH];
|
unsigned char stringdigest[SHA256_DIGEST_STRING_LENGTH];
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -997,7 +1012,7 @@ static int alock_auth_sha2_auth(const char* pass) {
|
||||||
return !strcmp((char*)stringdigest, userhash);
|
return !strcmp((char*)stringdigest, userhash);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 512: {
|
case SHA512: {
|
||||||
unsigned char digest[SHA512_DIGEST_LENGTH];
|
unsigned char digest[SHA512_DIGEST_LENGTH];
|
||||||
unsigned char stringdigest[SHA512_DIGEST_STRING_LENGTH];
|
unsigned char stringdigest[SHA512_DIGEST_STRING_LENGTH];
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -1014,7 +1029,7 @@ static int alock_auth_sha2_auth(const char* pass) {
|
||||||
return !strcmp((char*)stringdigest, userhash);
|
return !strcmp((char*)stringdigest, userhash);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 384: {
|
case SHA384: {
|
||||||
unsigned char digest[SHA384_DIGEST_LENGTH];
|
unsigned char digest[SHA384_DIGEST_LENGTH];
|
||||||
unsigned char stringdigest[SHA384_DIGEST_STRING_LENGTH];
|
unsigned char stringdigest[SHA384_DIGEST_STRING_LENGTH];
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -1079,14 +1094,14 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
usage();
|
usage();
|
||||||
exit(0);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
method = atoi(argv[1]);
|
method = atoi(argv[1]);
|
||||||
|
|
||||||
switch (method) {
|
switch (method) {
|
||||||
|
|
||||||
case 256: {
|
case SHA256: {
|
||||||
sha256Context sha256;
|
sha256Context sha256;
|
||||||
sha256_init(&sha256);
|
sha256_init(&sha256);
|
||||||
while((c = fgetc(stdin)) != (unsigned char)EOF) {
|
while((c = fgetc(stdin)) != (unsigned char)EOF) {
|
||||||
|
@ -1096,7 +1111,7 @@ int main(int argc, char* argv[]) {
|
||||||
method_digest_length = SHA256_DIGEST_LENGTH;
|
method_digest_length = SHA256_DIGEST_LENGTH;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 384: {
|
case SHA384: {
|
||||||
sha384Context sha384;
|
sha384Context sha384;
|
||||||
sha384_init(&sha384);
|
sha384_init(&sha384);
|
||||||
while((c = fgetc(stdin)) != (unsigned char)EOF) {
|
while((c = fgetc(stdin)) != (unsigned char)EOF) {
|
||||||
|
@ -1106,7 +1121,7 @@ int main(int argc, char* argv[]) {
|
||||||
method_digest_length = SHA384_DIGEST_LENGTH;
|
method_digest_length = SHA384_DIGEST_LENGTH;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 512: {
|
case SHA512: {
|
||||||
sha512Context sha512;
|
sha512Context sha512;
|
||||||
sha512_init(&sha512);
|
sha512_init(&sha512);
|
||||||
while((c = fgetc(stdin)) != (unsigned char)EOF) {
|
while((c = fgetc(stdin)) != (unsigned char)EOF) {
|
||||||
|
@ -1118,7 +1133,7 @@ int main(int argc, char* argv[]) {
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
exit(1);
|
exit(EXIT_FAILURE);
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1127,7 +1142,7 @@ int main(int argc, char* argv[]) {
|
||||||
printf("\n");
|
printf("\n");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
return 0;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* STAND_ALONE */
|
#endif /* STAND_ALONE */
|
||||||
|
|
Reference in a new issue