Applied patch made by flag@it.kth.se that
enables C-u to erase the password field. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@217 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -33,6 +33,7 @@ char name[100];
|
|||||||
char realm[REALM_SZ + 1];
|
char realm[REALM_SZ + 1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
char SPACE_STRING[] = " ";
|
||||||
char STRING[] = "****************";
|
char STRING[] = "****************";
|
||||||
#define MAX_PASSWD_LENGTH (sizeof(STRING))
|
#define MAX_PASSWD_LENGTH (sizeof(STRING))
|
||||||
|
|
||||||
@@ -53,6 +54,8 @@ char STRING[] = "****************";
|
|||||||
#define FRONT 020
|
#define FRONT 020
|
||||||
#define X_INCR 3
|
#define X_INCR 3
|
||||||
#define Y_INCR 2
|
#define Y_INCR 2
|
||||||
|
#define CTRL 1
|
||||||
|
#define NOCTRL 1
|
||||||
|
|
||||||
XtAppContext app;
|
XtAppContext app;
|
||||||
Display *dpy;
|
Display *dpy;
|
||||||
@@ -253,6 +256,7 @@ zrefresh()
|
|||||||
case 0:
|
case 0:
|
||||||
/* Child */
|
/* Child */
|
||||||
execlp("zrefresh", "zrefresh", 0);
|
execlp("zrefresh", "zrefresh", 0);
|
||||||
|
execl("/usr/athena/bin/zrefresh", "zrefresh", 0);
|
||||||
fprintf(stderr, "Warning %s: Failed to exec zrefresh\n", ProgName);
|
fprintf(stderr, "Warning %s: Failed to exec zrefresh\n", ProgName);
|
||||||
return -1;
|
return -1;
|
||||||
default:
|
default:
|
||||||
@@ -491,7 +495,7 @@ Visibility(Widget w, XtPointer client_data, XEvent *event, Boolean *_b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
countdown(XtPointer _t, XtIntervalId *_d)
|
countdown(int* _t, XtIntervalId *_d)
|
||||||
{
|
{
|
||||||
int *timeout = _t;
|
int *timeout = _t;
|
||||||
char buf[16];
|
char buf[16];
|
||||||
@@ -510,10 +514,10 @@ countdown(XtPointer _t, XtIntervalId *_d)
|
|||||||
seconds = time(0) - locked_at;
|
seconds = time(0) - locked_at;
|
||||||
if (seconds >= 3600)
|
if (seconds >= 3600)
|
||||||
(void) sprintf(buf, "Locked for %d:%02d:%02d ",
|
(void) sprintf(buf, "Locked for %d:%02d:%02d ",
|
||||||
seconds/3600, seconds/60%60, seconds%60);
|
(int)seconds/3600, (int)seconds/60%60, (int)seconds%60);
|
||||||
else
|
else
|
||||||
(void) sprintf(buf, "Locked for %2d:%02d ",
|
(void) sprintf(buf, "Locked for %2d:%02d ",
|
||||||
seconds/60, seconds%60);
|
(int)seconds/60, (int)seconds%60);
|
||||||
|
|
||||||
XDrawImageString(dpy, XtWindow(widget), gc,
|
XDrawImageString(dpy, XtWindow(widget), gc,
|
||||||
time_x, time_y, buf, strlen(buf));
|
time_x, time_y, buf, strlen(buf));
|
||||||
@@ -526,6 +530,7 @@ GetPasswd(Widget w, XEvent *_event, String *_s, Cardinal *_n)
|
|||||||
XKeyEvent *event = (XKeyEvent *)_event;
|
XKeyEvent *event = (XKeyEvent *)_event;
|
||||||
static char passwd[MAX_PASSWD_LENGTH];
|
static char passwd[MAX_PASSWD_LENGTH];
|
||||||
static int cnt;
|
static int cnt;
|
||||||
|
static int is_ctrl = NOCTRL;
|
||||||
char c;
|
char c;
|
||||||
KeySym keysym;
|
KeySym keysym;
|
||||||
|
|
||||||
@@ -545,8 +550,19 @@ GetPasswd(Widget w, XEvent *_event, String *_s, Cardinal *_n)
|
|||||||
countdown(&time_left, 0);
|
countdown(&time_left, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (event->type == KeyRelease) {
|
||||||
|
keysym = XLookupKeysym(event, 0);
|
||||||
|
if (keysym == XK_Control_L || keysym == XK_Control_R) {
|
||||||
|
is_ctrl = NOCTRL;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (event->type != KeyPress)
|
if (event->type != KeyPress)
|
||||||
return;
|
return;
|
||||||
|
keysym = XLookupKeysym(event, 0);
|
||||||
|
if (keysym == XK_Control_L || keysym == XK_Control_R) {
|
||||||
|
is_ctrl = CTRL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!XLookupString(event, &c, 1, &keysym, 0))
|
if (!XLookupString(event, &c, 1, &keysym, 0))
|
||||||
return;
|
return;
|
||||||
if (keysym == XK_Return || keysym == XK_Linefeed) {
|
if (keysym == XK_Return || keysym == XK_Linefeed) {
|
||||||
@@ -611,8 +627,17 @@ GetPasswd(Widget w, XEvent *_event, String *_s, Cardinal *_n)
|
|||||||
if (keysym == XK_BackSpace || keysym == XK_Delete || keysym == XK_Left) {
|
if (keysym == XK_BackSpace || keysym == XK_Delete || keysym == XK_Left) {
|
||||||
if (cnt)
|
if (cnt)
|
||||||
passwd[cnt--] = ' ';
|
passwd[cnt--] = ' ';
|
||||||
|
} else if (keysym == XK_u && is_ctrl == 1) {
|
||||||
|
while (cnt) {
|
||||||
|
passwd[cnt--] = ' ';
|
||||||
|
XDrawImageString(dpy, XtWindow(w), gc,
|
||||||
|
prompt_x, prompt_y, STRING, cnt);
|
||||||
|
XDrawImageString(dpy, XtWindow(w), gc,
|
||||||
|
prompt_x + XTextWidth(font, STRING, cnt),
|
||||||
|
prompt_y, SPACE_STRING, MAX_PASSWD_LENGTH - cnt + 1);
|
||||||
|
}
|
||||||
} else if (isprint(c))
|
} else if (isprint(c))
|
||||||
if (cnt >= MAX_PASSWD_LENGTH)
|
if ((cnt + 1) >= MAX_PASSWD_LENGTH)
|
||||||
XBell(dpy, 50);
|
XBell(dpy, 50);
|
||||||
else
|
else
|
||||||
passwd[cnt++] = c;
|
passwd[cnt++] = c;
|
||||||
@@ -622,7 +647,7 @@ GetPasswd(Widget w, XEvent *_event, String *_s, Cardinal *_n)
|
|||||||
prompt_x, prompt_y, STRING, cnt);
|
prompt_x, prompt_y, STRING, cnt);
|
||||||
XDrawImageString(dpy, XtWindow(w), gc,
|
XDrawImageString(dpy, XtWindow(w), gc,
|
||||||
prompt_x + XTextWidth(font, STRING, cnt),
|
prompt_x + XTextWidth(font, STRING, cnt),
|
||||||
prompt_y, " ", 11-cnt);
|
prompt_y, SPACE_STRING, MAX_PASSWD_LENGTH - cnt + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "nose.0.left"
|
#include "nose.0.left"
|
||||||
|
Reference in New Issue
Block a user