summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net-misc/nxcl/files/nxcl-0.9-no_nxssh.patch')
-rw-r--r--net-misc/nxcl/files/nxcl-0.9-no_nxssh.patch372
1 files changed, 372 insertions, 0 deletions
diff --git a/net-misc/nxcl/files/nxcl-0.9-no_nxssh.patch b/net-misc/nxcl/files/nxcl-0.9-no_nxssh.patch
new file mode 100644
index 0000000..4142a0b
--- /dev/null
+++ b/net-misc/nxcl/files/nxcl-0.9-no_nxssh.patch
@@ -0,0 +1,372 @@
+Index: lib/notQt.cpp
+===================================================================
+--- lib/notQt.cpp (révision 519)
++++ lib/notQt.cpp (révision 520)
+@@ -26,6 +26,7 @@
+ #include <sys/wait.h>
+ #include <sys/stat.h>
+ #include <sys/poll.h>
++#include <sys/socket.h>
+ #include <signal.h>
+ }
+
+@@ -52,7 +53,8 @@
+ progName("unknown"),
+ error (NOTQPROCNOERROR),
+ pid(0),
+- signalledStart(false)
++ signalledStart(false),
++ parentFD(-1)
+ {
+ // Set up the polling structs
+ this->p = static_cast<struct pollfd*>(malloc (2*sizeof (struct pollfd)));
+@@ -62,6 +64,15 @@
+ notQProcess::~notQProcess ()
+ {
+ free (this->p);
++ if (parentFD != -1)
++ {
++ close(parentFD);
++ parentFD=-1;
++ }
++ // FIXME: this should be closed here
++ // close (parentToChild[READING_END]);
++ // close (childToParent[WRITING_END]);
++ // close (childErrToParent[WRITING_END]);
+ }
+
+ void
+@@ -84,10 +95,18 @@
+ // NB: The first item in the args list should be the program name.
+ this->progName = program;
+
++#ifdef NXCL_USE_NXSSH
+ // Set up our pipes
+ if (pipe(parentToChild) == -1 || pipe(childToParent) == -1 || pipe(childErrToParent) == -1) {
+ return NOTQTPROCESS_FAILURE;
+ }
++#else /* We need a socketpair for that to work */
++ if (socketpair(AF_UNIX, SOCK_STREAM, 0, parentToChild) == -1 || pipe(childErrToParent) == -1)
++ return NOTQTPROCESS_FAILURE;
++
++ childToParent[READING_END]=dup(parentToChild[WRITING_END]);
++ childToParent[WRITING_END]=dup(parentToChild[READING_END]);
++#endif
+
+ this->pid = fork();
+
+Index: lib/nxsession.cpp
+===================================================================
+--- lib/nxsession.cpp (révision 519)
++++ lib/nxsession.cpp (révision 520)
+@@ -69,6 +69,7 @@
+ int response = parseResponse (message);
+ string returnMessage;
+
++#ifdef NXCL_USE_NXSSH
+ if (response == 211) {
+ if (doSSH == true) {
+ returnMessage = "yes";
+@@ -80,6 +81,7 @@
+ if (response == 204) { // Authentication failed
+ returnMessage = "204";
+ }
++#endif
+
+ if (response == 147) { // Server capacity reached
+ returnMessage = "147";
+@@ -90,6 +92,17 @@
+ case HELLO_NXCLIENT:
+ dbgln ("HELLO_NXCLIENT stage");
+
++ if (message.find("Are you sure you want to continue connecting (yes/no)?") != string::npos)
++ returnMessage = "yes"; // FF-FIXME: Or 211?
++
++ if (message.find("assword") != string::npos)
++ returnMessage = nxPassword; // FF-FIXME: -> What to do? What to do?
++
++ if (message.find("Permission denied") != string::npos ||
++ message.find("su: Authentication failure") != string::npos ||
++ message.find("Unknown id:") != string::npos)
++ returnMessage = "204"; // Authentication failed
++
+ if (message.find("HELLO NXSERVER - Version") != string::npos) {
+ this->callbacks->authenticatedSignal();
+ returnMessage = "hello NXCLIENT - Version ";
+Index: lib/notQt.h
+===================================================================
+--- lib/notQt.h (révision 519)
++++ lib/notQt.h (révision 520)
+@@ -117,7 +117,19 @@
+ pid_t getPid (void) { return this->pid; }
+ int getError (void) { return this->error; }
+ void setError (int e) { this->error = e; }
++
++ int getParentFD()
++ {
++ this->parentFD = this->parentToChild[1];
++ close(this->childToParent[0]);
+
++ // Create new pipes
++ pipe(this->parentToChild);
++ pipe(this->childToParent);
++
++ return this->parentFD;
++ }
++
+ /*!
+ * Setter for the callbacks.
+ */
+@@ -180,6 +192,11 @@
+ * Pointer to a callback object
+ */
+ notQProcessCallbacks * callbacks;
++
++ /*!
++ * old parent FD for comm with child
++ */
++ int parentFD;
+ };
+
+ /*!
+Index: lib/nxclientlib.cpp
+===================================================================
+--- lib/nxclientlib.cpp (révision 519)
++++ lib/nxclientlib.cpp (révision 520)
+@@ -8,7 +8,8 @@
+ : Author: Sebastian James
+ : (C) 2008 Defuturo Ltd
+ : Author: George Wright
+- email : seb@esfnet.co.uk, gwright@kde.org
++ : (C) 2008 Fabian Franz
++ email : seb@esfnet.co.uk, gwright@kde.org, freenx@fabian-franz.de
+ ***************************************************************************/
+
+ /***************************************************************************
+@@ -28,6 +29,14 @@
+
+ #include <fstream>
+
++// Define to use nxssh
++#if defined(NXCL_CYGWIN) || defined(NXCL_DARWIN)
++
++// FF-FIXME That does not work.
++//#define NXCL_USE_NXSSH 1
++
++#endif
++
+ extern "C" {
+ #include <errno.h>
+ #include <sys/types.h>
+@@ -186,10 +195,14 @@
+
+ // Start to build the arguments for the nxssh command.
+ // notQProcess requires that argv[0] contains the program name
++#ifdef NXCL_USE_NXSSH
+ arguments.push_back ("nxssh");
+
+ argtmp << "-nx";
+ arguments.push_back (argtmp.str());
++#else
++ arguments.push_back ("ssh");
++#endif
+
+ argtmp.str("");
+ argtmp << "-p" << port;
+@@ -215,6 +228,7 @@
+ }
+
+ argtmp.str("");
++ // FF-FIXME: Perhaps the user wants to login as user directly
+ argtmp << "nx@" << serverHost;
+ arguments.push_back (argtmp.str());
+
+@@ -227,9 +241,13 @@
+ arguments.push_back ("-oRSAAuthentication no");
+ arguments.push_back ("-oRhostsRSAAuthentication no");
+ arguments.push_back ("-oPubkeyAuthentication yes");
++ // FF-FIXME: Perhaps the user wants to login as user directly
++ //arguments.push_back ("-c nxserver");
+
+ if (encryption == true) {
++#ifdef NXCL_USE_NXSSH
+ arguments.push_back("-B");
++#endif
+ session.setEncryption (true);
+ } else {
+ session.setEncryption (false);
+@@ -240,10 +258,16 @@
+ // nxssh -E gives this message when called:
+ // NX> 285 Enabling skip of SSH config files
+ // ...so there you have the meaning.
++#ifdef NXCL_USE_NXSSH
+ arguments.push_back ("-E");
++#endif
+
+ // Find a path for the nxssh process using getPath()
++#ifdef NXCL_USE_NXSSH
+ string nxsshPath = this->getPath ("nxssh");
++#else
++ string nxsshPath = this->getPath ("ssh");
++#endif
+
+ this->nxsshProcess->start(nxsshPath, arguments);
+
+@@ -365,8 +389,9 @@
+
+ // On some connections this is sent via stdout instead of stderr?
+ if (proxyData.encrypted && readyForProxy &&
+- ((*msgiter).find("NX> 999 Bye")!=string::npos)) {
+-
++ ((*msgiter).find("NX> 999 Bye")!=string::npos))
++#ifdef NXCL_USE_NXSSH
++ {
+ // This is "NX> 299 Switching connection to: " in
+ // version 1.5.0. This was changed in nxssh version
+ // 2.0.0-8 (see the nxssh CHANGELOG).
+@@ -388,6 +413,11 @@
+ this->externalCallbacks->connectedSuccessfullySignal();
+ this->sessionRunning = true;
+ }
++#else /* don't use nxssh, start nxproxy -stdin */
++ {
++ invokeProxy();
++ }
++#endif
+
+ if ((*msgiter).find("Password") != string::npos) {
+ this->externalCallbacks->write
+@@ -402,6 +432,9 @@
+ dbgln ("NXClientLib::processParseStdout: Got auth failed"
+ " or capacity reached, calling this->parseSSH.");
+ msg = this->parseSSH (*msgiter);
++#ifndef NXCL_USE_NXSSH
++ this->isFinished = true;
++#endif
+ }
+ if (msg.size() > 0) {
+ this->write (msg);
+@@ -436,7 +469,9 @@
+ + (*msgiter) + "'(end msg)");
+
+ if (proxyData.encrypted && readyForProxy &&
+- ((*msgiter).find("NX> 999 Bye") != string::npos)) {
++ ((*msgiter).find("NX> 999 Bye") != string::npos))
++#ifdef NXCL_USE_NXSSH
++ {
+
+ string switchCommand = "NX> 299 Switch connection to: ";
+ stringstream ss;
+@@ -478,6 +513,11 @@
+ _("SSH host key verification failed"));
+ this->isFinished = true;
+ }
++#else /* don't use nxssh, use nxproxy -stdin */
++ {
++ invokeProxy();
++ }
++#endif
+ }
+ }
+
+@@ -580,21 +620,41 @@
+ this->externalCallbacks->serverCapacitySignal();
+ this->isFinished = true;
+
+- } else if
++ }
++#ifdef NXCL_USE_NXSSH
++ else if
+ (message.find ("NX> 204 Authentication failed.") != string::npos) {
+
+ this->externalCallbacks->write
+ (204, _("NX SSH Authentication Failed, finishing"));
+ this->isFinished = true;
+ }
++#endif
+
+ if (message.find("NX> 710 Session status: running") != string::npos) {
+
+ this->externalCallbacks->write
+ (710, _("Session status is \"running\""));
++ }
++
++ // FF-FIXME: This is technically incorrect as the proxy is just ready once 1002 and 1006 have
++ // been sent.
++ if (message.find("NX> 710 Session status: running") != string::npos) {
++
++ //this->externalCallbacks->write
++ // (1006, _("Session status is \"running\""));
++
++#ifdef NXCL_USE_NXSSH
+ invokeProxy();
++#else
++ if (!proxyData.encrypted)
++ invokeProxy();
++#endif
+ session.wipeSessions();
+- rMessage = "bye\n";
++ if (proxyData.encrypted)
++ rMessage = "bye\n";
++ else
++ rMessage = "quit\n";
+ }
+
+ return rMessage;
+@@ -700,18 +760,24 @@
+ stringstream data;
+
+ if (proxyData.encrypted) {
++#ifdef NXCL_USE_NXSSH
+ data << "nx/nx" << x11Display << ",session=session,encryption=1,cookie="
+ << proxyData.cookie
+ << ",id=" << proxyData.id << ",listen="
+ << proxyData.port << ":" << proxyData.display << "\n";
+ // may also need shmem=1,shpix=1,font=1,product=...
++#else
++ data << "nx/nx" << x11Display << ",session=session,encryption=1,cookie="
++ << proxyData.cookie
++ << ",id=" << proxyData.id << ":" << proxyData.display << "\n";
++#endif
+
+ } else {
+- // Not tested yet
++ // Not tested yet, FF-FIXME: Test
+ data << "nx/nx" << x11Display << ",session=session,cookie=" << proxyData.cookie
+- << ",id=" << proxyData.id
+- // << ",connect=" << proxyData.server << ":" << proxyData.display
+- << ",listen=" << proxyData.port << ":" << proxyData.display
++ << ",connect=" << proxyData.server << ":" << proxyData.port
++ << ",id=" << proxyData.id << ":" << proxyData.display
++ //<< ",listen=" << proxyData.port << ":" << proxyData.display
+ << "\n";
+ }
+
+@@ -726,11 +792,24 @@
+ list<string> arguments;
+ arguments.push_back("nxproxy"); // argv[0] has to be the program name
+ arguments.push_back("-S");
++
+ ss.str("");
+- ss << "options=" << nxdir;
+- ss << ":" << proxyData.display;
+- arguments.push_back(ss.str());
++ ss << "nx/nx,options=" << nxdir << ":" << proxyData.display;
+
++ setenv("NX_DISPLAY", ss.str().c_str(), 1);
++
++#ifndef NXCL_USE_NXSSH
++ if (proxyData.encrypted)
++ {
++ ss.str("");
++ ss << this->nxsshProcess->getParentFD();
++ fprintf(stderr, "NX_COMMFD=%d", this->nxsshProcess->getParentFD());
++ setenv("NX_COMMFD", ss.str().c_str(), 1);
++ // FF-FIXME: need to wait for 2 secs due to race condition with "bye" in buffer
++ sleep(2);
++ }
++#endif
++
+ // Find a path for the nxproxy process using getPath()
+ string nxproxyPath = this->getPath ("nxproxy");
+ this->nxproxyProcess->start(nxproxyPath, arguments);