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.

--- 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");
_______________________________________________
pld-devel-pl mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-devel-pl

Odpowiedź listem elektroniczym