diff -Naur kdesu/stub.cpp kdesu.new/stub.cpp --- kdesu/stub.cpp 2008-05-21 08:08:55.000000000 -0300 +++ kdesu.new/stub.cpp 2009-10-13 01:32:10.000000000 -0300 @@ -105,6 +105,7 @@ int StubProcess::ConverseStub(int check) { QByteArray line, tmp; + while (1) { line = readLine(); @@ -117,7 +118,17 @@ enableLocalEcho(false); if (check) writeLine("stop"); else writeLine("ok"); - } else if (line == "display") { + break; + } + } + + while (1) + { + line = readLine(); + if (line.isNull()) + return -1; + + if (line == "display") { writeLine(display()); } else if (line == "display_auth") { #ifdef Q_WS_X11 diff -Naur kdesu/su.cpp kdesu.new/su.cpp --- kdesu/su.cpp 2008-05-21 08:08:55.000000000 -0300 +++ kdesu.new/su.cpp 2009-10-19 00:21:31.000000000 -0200 @@ -258,13 +258,6 @@ ////////////////////////////////////////////////////////////////////////// case WaitForPrompt: { - // In case no password is needed. - if (line == "kdesu_stub") - { - unreadLine(line); - return ok; - } - while(waitMS(fd(),100)>0) { // There is more output available, so the previous line @@ -279,6 +272,13 @@ kDebug(900) << k_lineinfo << "Read line <" << more << ">"; } + // In case no password is needed. + if (line == "kdesu_stub") + { + unreadLine(line); + return ok; + } + // Match "Password: " with the regex ^[^:]+:[\w]*$. const uint len = line.length(); for (i=0,j=0,colon=0; i