Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:11.4
libnxcl
obsoletes-nxssh.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File obsoletes-nxssh.diff of Package libnxcl
Index: nxcl/lib/notQt.cpp =================================================================== --- nxcl/lib/notQt.cpp.orig +++ nxcl/lib/notQt.cpp @@ -26,6 +26,7 @@ extern "C" { #include <sys/wait.h> #include <sys/stat.h> #include <sys/poll.h> +#include <sys/socket.h> #include <signal.h> } #include <stdlib.h> @@ -53,7 +54,8 @@ notQProcess::notQProcess () : 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))); @@ -63,6 +65,15 @@ notQProcess::notQProcess () : 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 @@ -85,10 +96,18 @@ notQProcess::start (const string& progra // 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: nxcl/lib/nxsession.cpp =================================================================== --- nxcl/lib/nxsession.cpp.orig +++ nxcl/lib/nxsession.cpp @@ -69,6 +69,7 @@ string NXSession::parseSSH(string messag int response = parseResponse (message); string returnMessage; +#ifdef NXCL_USE_NXSSH if (response == 211) { if (doSSH == true) { returnMessage = "yes"; @@ -80,6 +81,7 @@ string NXSession::parseSSH(string messag if (response == 204) { // Authentication failed returnMessage = "204"; } +#endif if (response == 147) { // Server capacity reached returnMessage = "147"; @@ -90,6 +92,17 @@ string NXSession::parseSSH(string messag 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: nxcl/lib/notQt.h =================================================================== --- nxcl/lib/notQt.h.orig +++ nxcl/lib/notQt.h @@ -117,6 +117,18 @@ namespace nxcl { 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 @@ namespace nxcl { * Pointer to a callback object */ notQProcessCallbacks * callbacks; + + /*! + * old parent FD for comm with child + */ + int parentFD; }; /*! Index: nxcl/lib/nxclientlib.cpp =================================================================== --- nxcl/lib/nxclientlib.cpp.orig +++ nxcl/lib/nxclientlib.cpp @@ -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> @@ -188,10 +197,14 @@ void NXClientLib::invokeNXSSH (string pu // 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; @@ -217,6 +230,7 @@ void NXClientLib::invokeNXSSH (string pu } argtmp.str(""); + // FF-FIXME: Perhaps the user wants to login as user directly argtmp << "nx@" << serverHost; arguments.push_back (argtmp.str()); @@ -229,9 +243,13 @@ void NXClientLib::invokeNXSSH (string pu 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); @@ -242,10 +260,16 @@ void NXClientLib::invokeNXSSH (string pu // 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); @@ -367,8 +391,9 @@ void NXClientLib::processParseStdout() // 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). @@ -390,6 +415,11 @@ void NXClientLib::processParseStdout() 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 @@ -404,6 +434,9 @@ void NXClientLib::processParseStdout() 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); @@ -438,7 +471,9 @@ void NXClientLib::processParseStderr() + (*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; @@ -480,6 +515,11 @@ void NXClientLib::processParseStderr() _("SSH host key verification failed")); this->isFinished = true; } +#else /* don't use nxssh, use nxproxy -stdin */ + { + invokeProxy(); + } +#endif } } @@ -582,21 +622,41 @@ string NXClientLib::parseSSH (string mes 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; @@ -702,18 +762,24 @@ void NXClientLib::invokeProxy() 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"; } @@ -728,10 +794,23 @@ void NXClientLib::invokeProxy() 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");
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor