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: The following information is taken from these URLs:

@ -2627,13 +2627,25 @@ void keyboard(rfbBool down, rfbKeySym keysym, rfbClientPtr client) {
char *str; char *str;
X_LOCK; X_LOCK;
str = XKeysymToString(keysym); str = XKeysymToString(keysym);
rfbLog("# keyboard(%s, 0x%x \"%s\") %.4f\n", down ? "down":"up",
(int) keysym, str ? str : "null", tnow - x11vnc_start);
X_UNLOCK; 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 && 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) { if (client != unixpw_client) {
rfbLog("keyboard: skipping other client in unixpw\n");
return; return;
} }
unixpw_keystroke(down, keysym, 0); unixpw_keystroke(down, keysym, 0);

@ -71,6 +71,7 @@ static void set_db(void);
static void unixpw_verify(char *user, char *pass); static void unixpw_verify(char *user, char *pass);
int unixpw_in_progress = 0; int unixpw_in_progress = 0;
int unixpw_denied = 0;
int unixpw_in_rfbPE = 0; int unixpw_in_rfbPE = 0;
int unixpw_login_viewonly = 0; int unixpw_login_viewonly = 0;
time_t unixpw_last_try_time = 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 char user[100], pass[100];
static int u_cnt = 0, p_cnt = 0, first = 1; static int u_cnt = 0, p_cnt = 0, first = 1;
char keystr[100]; char keystr[100];
char *str;
if (first) { if (first) {
set_db(); set_db();
@ -938,6 +940,7 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
if (init) { if (init) {
in_login = 1; in_login = 1;
in_passwd = 0; in_passwd = 0;
unixpw_denied = 0;
if (init == 1) { if (init == 1) {
tries = 0; tries = 0;
} }
@ -963,9 +966,22 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
return; 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; X_LOCK;
sprintf(keystr, "%s", XKeysymToString(keysym)); str = XKeysymToString(keysym);
X_UNLOCK; X_UNLOCK;
if (! str) {
rfbLog("unixpw_keystroke: bad keysym2: 0x%x\n", (int) keysym);
return;
}
snprintf(keystr, 100, "%s", str);
if (db > 2) { if (db > 2) {
fprintf(stderr, "%s / %s 0x%x %s\n", in_login ? "login":"pass ", fprintf(stderr, "%s / %s 0x%x %s\n", in_login ? "login":"pass ",
@ -1247,27 +1263,34 @@ void unixpw_deny(void) {
int x, y, i; int x, y, i;
char pd[] = "Permission denied."; char pd[] = "Permission denied.";
char_row += 2; rfbLog("unixpw_deny: %d, %d\n", unixpw_denied, unixpw_in_progress);
char_col = 0; if (! unixpw_denied) {
x = char_x + char_col * char_w; unixpw_denied = 1;
y = char_y + char_row * char_h;
rfbDrawString(screen, &default8x16Font, x, y, pd, white()); char_row += 2;
if (scaling) { char_col = 0;
mark_rect_as_modified(0, 0, dpy_x, dpy_y, 1); x = char_x + char_col * char_w;
} else { y = char_y + char_row * char_h;
mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
rfbDrawString(screen, &default8x16Font, x, y, pd, white());
if (scaling) {
mark_rect_as_modified(0, 0, dpy_x, dpy_y, 1);
} else {
mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
}
for (i=0; i<5; i++) {
rfbPE(-1);
usleep(500 * 1000);
}
} }
for (i=0; i<5; i++) { if (unixpw_client) {
rfbCloseClient(unixpw_client);
rfbClientConnectionGone(unixpw_client);
rfbPE(-1); rfbPE(-1);
usleep(500 * 1000);
} }
rfbCloseClient(unixpw_client);
rfbClientConnectionGone(unixpw_client);
rfbPE(-1);
unixpw_in_progress = 0; unixpw_in_progress = 0;
unixpw_client = NULL; unixpw_client = NULL;
copy_screen(); copy_screen();

@ -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 crypt_verify(char *user, char *pass);
extern int unixpw_in_progress; extern int unixpw_in_progress;
extern int unixpw_denied;
extern int unixpw_in_rfbPE; extern int unixpw_in_rfbPE;
extern int unixpw_login_viewonly; extern int unixpw_login_viewonly;
extern time_t unixpw_last_try_time; extern time_t unixpw_last_try_time;

Loading…
Cancel
Save