popsuty prompt hasła w ldapsearch

Adam Osuchowski adwol at zonk.pl
Thu Sep 23 09:47:18 CEST 2010


W kilku ostatnich wersjach openldapa jest popsute wyświetlanie prompta
przy pytaniu o hasło (ldapsearch). Problem polega na tym, że prompt jest
zawsze wypisywany na standardowe wyjście, nawet jeśli jest ono
przekierowane do pliku lub jest pipem, co powoduje, że ląduje on tam
gdzie wynik działania komendy. W załączeniu patch, który to poprawia.

-------------- next part --------------
--- openldap-2.4.21/libraries/liblutil/getpass.c.orig	2009-08-26 01:09:33.000000000 +0200
+++ openldap-2.4.21/libraries/liblutil/getpass.c	2010-04-14 12:29:19.308660788 +0200
@@ -86,7 +86,7 @@
 #endif
 
 #if defined(HAVE_TERMIOS_H) || defined(HAVE_SGTTY_H)
-	if ((fi = fopen(TTY, "r")) == NULL)
+	if ((fi = fopen(TTY, "r+")) == NULL)
 		fi = stdin;
 	else
 		setbuf(fi, (char *)NULL);
@@ -102,8 +102,13 @@
 #else
 	fi = stdin;
 #endif
-	fprintf(stdout, "%s", prompt); 
-	fflush(stdout);
+	if (fi != stdin) {
+		fprintf(fi, "%s", prompt); 
+		fflush(fi);
+	} else {
+		fprintf(stderr, "%s", prompt); 
+		fflush(stderr);
+	}
 	i = 0;
 	while ( (c = getc(fi)) != EOF && c != '\n' && c != '\r' )
 		if ( i < (sizeof(pbuf)-1) )
@@ -111,8 +116,8 @@
 #if defined(HAVE_TERMIOS_H) || defined(HAVE_SGTTY_H)
 	/* tidy up */
 	if (fi != stdin) {
-		fprintf(stdout, "\n"); 
-		fflush(stdout);
+		fprintf(fi, "\n"); 
+		fflush(fi);
 		SETFLAGS( ttyb, flags );
 		if (SETATTR(fileno(fi), &ttyb) < 0)
 			perror("SETATTR");


More information about the pld-devel-pl mailing list