summaryrefslogtreecommitdiff
path: root/source/kde/kdelibs/kdesu-allow_NOPASS_in_suauth.patch
diff options
context:
space:
mode:
Diffstat (limited to 'source/kde/kdelibs/kdesu-allow_NOPASS_in_suauth.patch')
-rw-r--r--source/kde/kdelibs/kdesu-allow_NOPASS_in_suauth.patch135
1 files changed, 51 insertions, 84 deletions
diff --git a/source/kde/kdelibs/kdesu-allow_NOPASS_in_suauth.patch b/source/kde/kdelibs/kdesu-allow_NOPASS_in_suauth.patch
index 8d2168c3..64b4d5af 100644
--- a/source/kde/kdelibs/kdesu-allow_NOPASS_in_suauth.patch
+++ b/source/kde/kdelibs/kdesu-allow_NOPASS_in_suauth.patch
@@ -1,94 +1,61 @@
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-08-06 04:06:43.000000000 -0300
-@@ -111,7 +111,7 @@
- if (line.isNull())
- return -1;
-
-- if (line == "kdesu_stub")
-+ if ((line == "kdesu_stub")||(line == "Password authentication bypassed."))
- {
- // This makes parsing a lot easier.
++++ 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-08-06 04:10:55.000000000 -0300
-@@ -163,7 +163,7 @@
- }
- // kDebug(900) << k_lineinfo << "Done StubProcess::exec()";
-
-- SuErrors ret = (SuErrors) ConverseSU(password);
-+ SuErrors ret = (SuErrors) ConverseSU(password,check);
- // kDebug(900) << k_lineinfo << "Conversation returned " << ret;
-
- if (ret == error)
-@@ -172,6 +172,7 @@
- kError(900) << k_lineinfo << "Conversation with su failed\n";
- return ret;
- }
-+
- if (check == NeedPassword)
- {
- if (ret == killme)
-@@ -235,10 +236,10 @@
-
- /*
- * Conversation with su: feed the password.
--* Return values: -1 = error, 0 = ok, 1 = kill me, 2 not authorized
-+* Return values: -1 = error, 0 = ok, 1 = kill me, 2 = not authorized
- */
-
--int SuProcess::ConverseSU(const char *password)
-+int SuProcess::ConverseSU(const char *password, int check)
- {
- enum { WaitForPrompt, CheckStar, HandleStub } state = WaitForPrompt;
- int colon;
-@@ -265,6 +266,27 @@
- return ok;
- }
-
-+ if (line == "Password authentication bypassed.")
-+ {
-+ if (check == 2)
-+ {
-+ unreadLine(line);
-+ return ok;
-+ }
-+ else
-+ {
-+ if (checkPid(m_Pid))
-+ {
-+ state=HandleStub;
-+ }
-+ else
-+ {
-+ return error;
-+ }
-+ }
-+ break;
-+ }
-+
++++ 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
-@@ -293,7 +315,7 @@
+@@ -279,6 +272,13 @@
+ kDebug(900) << k_lineinfo << "Read line <" << more << ">";
}
- if ((colon == 1) && (line[j] == ':'))
- {
-- if (password == 0L)
-+ if (password == 0L)
- return killme;
- if (!checkPid(m_Pid))
- {
-diff -Naur kdesu/su.h kdesu.new/su.h
---- kdesu/su.h 2008-05-21 08:08:55.000000000 -0300
-+++ kdesu.new/su.h 2009-08-06 02:50:02.000000000 -0300
-@@ -62,7 +62,7 @@
-
- private:
- enum SuErrors { error=-1, ok=0, killme=1, notauthorized=2 } ;
-- int ConverseSU(const char *password);
-+ int ConverseSU(const char *password, int check=NoCheck);
- protected:
- virtual void virtual_hook( int id, void* data );
++ // 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<len; i++)