Blame SOURCES/screen-E3.patch

d4093c
commit 0aec2900f63820c3405ba38a4d1cd67cc22f0715
d4093c
Author: Miroslav Lichvar <mlichvar@redhat.com>
d4093c
Date:   Mon Jul 18 17:26:47 2011 +0200
d4093c
d4093c
    Clear scrollback buffer when locking terminal
d4093c
    
d4093c
    Linux kernel 3.0 adds a new command to clear the scrollback buffer in
d4093c
    the linux console. It's available in the ncurses terminfo entry as
d4093c
    extended capability E3. This is useful to prevent an attacker to read
d4093c
    content of a locked terminal via Shift-PgUp key.
d4093c
d4093c
diff --git a/src/display.c b/src/display.c
d4093c
index 5fa11cb..038c435 100644
d4093c
--- a/src/display.c
d4093c
+++ b/src/display.c
d4093c
@@ -3779,4 +3779,10 @@ char **cmdv;
d4093c
 
d4093c
 #endif /* BLANKER_PRG */
d4093c
 
d4093c
+void
d4093c
+ClearScrollbackBuffer()
d4093c
+{
d4093c
+  if (D_CE3)
d4093c
+    AddCStr(D_CE3);
d4093c
+}
d4093c
 
d4093c
diff --git a/src/extern.h b/src/extern.h
d4093c
index c787d99..d3fecf0 100644
d4093c
--- a/src/extern.h
d4093c
+++ b/src/extern.h
d4093c
@@ -316,6 +316,7 @@ extern int   color256to88 __P((int));
d4093c
 extern void  ResetIdle __P((void));
d4093c
 extern void  KillBlanker __P((void));
d4093c
 extern void  DisplaySleep1000 __P((int, int));
d4093c
+extern void  ClearScrollbackBuffer __P((void));
d4093c
 
d4093c
 /* resize.c */
d4093c
 extern int   ChangeWindowSize __P((struct win *, int, int, int));
d4093c
diff --git a/src/screen.c b/src/screen.c
d4093c
index cc8f565..3efb67b 100644
d4093c
--- a/src/screen.c
d4093c
+++ b/src/screen.c
d4093c
@@ -1967,6 +1967,7 @@ int mode;
d4093c
 #endif
d4093c
     case D_LOCK:
d4093c
       ClearAll();
d4093c
+      ClearScrollbackBuffer();
d4093c
       sign = SIG_LOCK;
d4093c
       /* tell attacher to lock terminal with a lockprg. */
d4093c
       break;
d4093c
diff --git a/src/term.c b/src/term.c
d4093c
index 991de1b..7485900 100644
d4093c
--- a/src/term.c
d4093c
+++ b/src/term.c
d4093c
@@ -83,6 +83,7 @@ struct term term[T_N] =
d4093c
   { "CD", T_STR  },
d4093c
   { "ce", T_STR  },
d4093c
   { "cb", T_STR  },
d4093c
+  { "E3", T_STR  },
d4093c
 
d4093c
 /* initialise */
d4093c
   { "is", T_STR  },