I don't know why, but under some circumstances (usually in an SSH
session within an xterm), Term::ReadLine::Gnu things that a TERM=xterm
does not provide the "le" sequence. OTOH the "cr" and "ce" sequences are
fully enough for the task of providing a password/shadow style prompt.
So, for positioning the cursor in the middle of the prompt, instead of
using left-spacing we just redraw (over the full line) the part of the
line left to the cursor.

Index: Term-ReadLine-Gnu-1.20/Gnu/XS.pm
--- Term-ReadLine-Gnu-1.20/Gnu/XS.pm.orig	2002-07-28 05:41:36.000000000 +0200
+++ Term-ReadLine-Gnu-1.20/Gnu/XS.pm	2004-03-12 17:55:16.000000000 +0100
@@ -429,21 +429,20 @@
     print $OUT ($_tstrs[0],	# carriage return
 		$_tstrs[1],	# clear to EOL
 		$prompt, '*' x length($Attribs{line_buffer}));
-    print $OUT ($_tstrs[2]	# cursor left
-		x (length($Attribs{line_buffer}) - $Attribs{point}));
+    print $OUT ($_tstrs[0],     # carriage return
+		$prompt, '*' x $Attribs{point});
     $oldfh = select($OUT); $| = 0; select($oldfh);
 }
 
 sub _tgetstrs {
     my @s = (tgetstr('cr'),	# carriage return
-	     tgetstr('ce'),	# clear to EOL
-	     tgetstr('le'));	# cursor left
-    warn <<"EOM" unless (defined($s[0]) && defined($s[1]) && defined($s[2]));
+	     tgetstr('ce'));	# clear to EOL
+    warn <<"EOM" unless (defined($s[0]) && defined($s[1]));
 Your terminal 'TERM=$ENV{TERM}' does not support enough function.
 Check if your environment variable 'TERM' is set correctly.
 EOM
     # suppress warning "Use of uninitialized value in print at ..."
-    $s[0] = $s[0] || ''; $s[1] = $s[1] || ''; $s[2] = $s[2] || '';
+    $s[0] = $s[0] || ''; $s[1] = $s[1] || '';
     $_tstrs_init = 1;
     return @s;
 }
Index: Term-ReadLine-Gnu-1.20/Gnu.xs
--- Term-ReadLine-Gnu-1.20/Gnu.xs.orig	2009-02-27 13:44:41 +0100
+++ Term-ReadLine-Gnu-1.20/Gnu.xs	2009-03-30 22:15:36 +0200
@@ -233,6 +233,10 @@
 static void rl_echo_signal_char(int sig){}
 #endif /* (RL_VERSION_MAJOR < 6) */
 
+#define xmalloc  readline_xmalloc
+#define xrealloc readline_xrealloc
+#define xfree    readline_xfree
+
 /*
  * utility/dummy functions
  */                                                                                
