x11vnc: plug a couple unixpw gaps.

pull/1/head
runge 18 years ago
parent 1b51530afb
commit 93ca945acb

@ -1,5 +1,5 @@
x11vnc README file Date: Tue Jul 4 14:26:15 EDT 2006
x11vnc README file Date: Tue Jul 4 18:26:52 EDT 2006
The following information is taken from these URLs:

@ -2627,13 +2627,25 @@ void keyboard(rfbBool down, rfbKeySym keysym, rfbClientPtr client) {
char *str;
X_LOCK;
str = XKeysymToString(keysym);
rfbLog("# keyboard(%s, 0x%x \"%s\") %.4f\n", down ? "down":"up",
(int) keysym, str ? str : "null", tnow - x11vnc_start);
X_UNLOCK;
rfbLog("# keyboard(%s, 0x%x \"%s\") uip=%d %.4f\n",
down ? "down":"up", (int) keysym, str ? str : "null",
unixpw_in_progress, tnow - x11vnc_start);
}
if (keysym <= 0) {
rfbLog("keyboard: skipping 0x0 keysym\n");
return;
}
if (unixpw && unixpw_in_progress) {
if (unixpw_denied) {
rfbLog("keyboard: ignoring keystroke 0x%x in "
"unixpw_denied=1 state\n", (int) keysym);
return;
}
if (client != unixpw_client) {
rfbLog("keyboard: skipping other client in unixpw\n");
return;
}
unixpw_keystroke(down, keysym, 0);

@ -71,6 +71,7 @@ static void set_db(void);
static void unixpw_verify(char *user, char *pass);
int unixpw_in_progress = 0;
int unixpw_denied = 0;
int unixpw_in_rfbPE = 0;
int unixpw_login_viewonly = 0;
time_t unixpw_last_try_time = 0;
@ -929,6 +930,7 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
static char user[100], pass[100];
static int u_cnt = 0, p_cnt = 0, first = 1;
char keystr[100];
char *str;
if (first) {
set_db();
@ -938,6 +940,7 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
if (init) {
in_login = 1;
in_passwd = 0;
unixpw_denied = 0;
if (init == 1) {
tries = 0;
}
@ -963,9 +966,22 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
return;
}
if (unixpw_denied) {
rfbLog("unixpw_keystroke: unixpw_denied state: 0x%x\n", (int) keysym);
return;
}
if (keysym <= 0) {
rfbLog("unixpw_keystroke: bad keysym1: 0x%x\n", (int) keysym);
return;
}
X_LOCK;
sprintf(keystr, "%s", XKeysymToString(keysym));
str = XKeysymToString(keysym);
X_UNLOCK;
if (! str) {
rfbLog("unixpw_keystroke: bad keysym2: 0x%x\n", (int) keysym);
return;
}
snprintf(keystr, 100, "%s", str);
if (db > 2) {
fprintf(stderr, "%s / %s 0x%x %s\n", in_login ? "login":"pass ",
@ -1247,6 +1263,10 @@ void unixpw_deny(void) {
int x, y, i;
char pd[] = "Permission denied.";
rfbLog("unixpw_deny: %d, %d\n", unixpw_denied, unixpw_in_progress);
if (! unixpw_denied) {
unixpw_denied = 1;
char_row += 2;
char_col = 0;
x = char_x + char_col * char_w;
@ -1263,10 +1283,13 @@ void unixpw_deny(void) {
rfbPE(-1);
usleep(500 * 1000);
}
}
if (unixpw_client) {
rfbCloseClient(unixpw_client);
rfbClientConnectionGone(unixpw_client);
rfbPE(-1);
}
unixpw_in_progress = 0;
unixpw_client = NULL;

@ -12,6 +12,7 @@ extern int su_verify(char *user, char *pass, char *cmd, char *rbuf, int *rbuf_si
extern int crypt_verify(char *user, char *pass);
extern int unixpw_in_progress;
extern int unixpw_denied;
extern int unixpw_in_rfbPE;
extern int unixpw_login_viewonly;
extern time_t unixpw_last_try_time;

Loading…
Cancel
Save