Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 2c062c417ccc2030b35b06e15ee09a83 > files > 1

freenx-client-0.9-11.fc15.src.rpm

diff -Naur freenx-client-0.9/nxcl/configure.ac freenx-client.svn545.plusfixes/nxcl/configure.ac
--- freenx-client-0.9/nxcl/configure.ac	2008-03-11 00:13:08.000000000 +0100
+++ freenx-client.svn545.plusfixes/nxcl/configure.ac	2008-07-10 10:01:24.000000000 +0200
@@ -5,7 +5,7 @@
 AC_REVISION([$Revision: 1.3 $])
 AC_PREFIX_DEFAULT(/usr/local)
 
-AM_INIT_AUTOMAKE([1.10 foreign])
+AM_INIT_AUTOMAKE([1.9 foreign])
 
 AM_CONFIG_HEADER(config.h)
 AM_MAINTAINER_MODE
diff -Naur freenx-client-0.9/nxcl/doc/Makefile.am freenx-client.svn545.plusfixes/nxcl/doc/Makefile.am
--- freenx-client-0.9/nxcl/doc/Makefile.am	2008-03-11 00:13:08.000000000 +0100
+++ freenx-client.svn545.plusfixes/nxcl/doc/Makefile.am	2008-07-10 10:01:24.000000000 +0200
@@ -2,8 +2,6 @@
 
 DOXYFILE = Doxyfile
 
-docdir = $(prefix)/doc/$(PACKAGE)-$(VERSION)
-
 EXTRA_DIST = html
 
 SEDCMD1 = s/$$title/GNU nxcl documentation version $(VERSION)/g
diff -Naur freenx-client-0.9/nxcl/lib/notQt.cpp freenx-client.svn545.plusfixes/nxcl/lib/notQt.cpp
--- freenx-client-0.9/nxcl/lib/notQt.cpp	2008-03-11 00:13:08.000000000 +0100
+++ freenx-client.svn545.plusfixes/nxcl/lib/notQt.cpp	2009-07-25 17:07:36.000000000 +0200
@@ -19,6 +19,7 @@
 
 #include <iostream>
 #include <sstream>
+#include <cstdlib>
 extern "C" {
 #include <unistd.h>
 #include <errno.h>
@@ -26,8 +27,10 @@
 #include <sys/wait.h>
 #include <sys/stat.h>
 #include <sys/poll.h>	
+#include <sys/socket.h>	
 #include <signal.h>
 }
+#include <stdlib.h>
 
 #include "../config.h"
 #include "notQt.h"
@@ -52,7 +55,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 +66,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 +97,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();
 
@@ -339,6 +360,9 @@
     fn << "/tmp/notQt" << time(NULL);
     this->theFileName = fn.str();
     this->f.open (this->theFileName.c_str(), ios::in|ios::out|ios::trunc);
+    if (chmod(this->theFileName.c_str(), S_IRUSR | S_IWUSR) == -1) {
+        perror("chmod");
+    }
 }
 
     void
diff -Naur freenx-client-0.9/nxcl/lib/notQt.h freenx-client.svn545.plusfixes/nxcl/lib/notQt.h
--- freenx-client-0.9/nxcl/lib/notQt.h	2008-03-11 00:13:08.000000000 +0100
+++ freenx-client.svn545.plusfixes/nxcl/lib/notQt.h	2008-03-12 04:40:04.000000000 +0100
@@ -117,6 +117,18 @@
 		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;
 	};
 
 	/*!
diff -Naur freenx-client-0.9/nxcl/lib/nxclientlib.cpp freenx-client.svn545.plusfixes/nxcl/lib/nxclientlib.cpp
--- freenx-client-0.9/nxcl/lib/nxclientlib.cpp	2008-03-11 00:13:08.000000000 +0100
+++ freenx-client.svn545.plusfixes/nxcl/lib/nxclientlib.cpp	2009-07-25 16:59:24.000000000 +0200
@@ -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
  ***************************************************************************/
 
 /***************************************************************************
@@ -27,6 +28,16 @@
 #include "../config.h"
 
 #include <fstream>
+#include <cstdlib>
+#include <cstring>
+
+// 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>
@@ -34,6 +45,8 @@
     #include <sys/stat.h>
     #include <unistd.h>
 }
+#include <stdlib.h>
+#include <string.h>
 
 /*
  * On the location of nxproxy and nxssh binaries
@@ -186,10 +199,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 +232,7 @@
     }
 
     argtmp.str("");
+    // FF-FIXME: Perhaps the user wants to login as user directly
     argtmp << "nx@" << serverHost;
     arguments.push_back (argtmp.str());
 
@@ -227,9 +245,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 +262,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 +393,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 +417,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 +436,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 +473,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 +517,11 @@
                  _("SSH host key verification failed"));
             this->isFinished = true;
         }
+#else /* don't use nxssh, use nxproxy -stdin */
+	{
+		invokeProxy();
+	}
+#endif
     }
 }
 
@@ -580,21 +624,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 +764,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,10 +796,23 @@
     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");
diff -Naur freenx-client-0.9/nxcl/lib/nxsession.cpp freenx-client.svn545.plusfixes/nxcl/lib/nxsession.cpp
--- freenx-client-0.9/nxcl/lib/nxsession.cpp	2008-03-11 00:13:08.000000000 +0100
+++ freenx-client.svn545.plusfixes/nxcl/lib/nxsession.cpp	2008-03-12 04:40:04.000000000 +0100
@@ -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 ";
diff -Naur freenx-client-0.9/nxcl/nxcl/nxcl.cpp freenx-client.svn545.plusfixes/nxcl/nxcl/nxcl.cpp
--- freenx-client-0.9/nxcl/nxcl/nxcl.cpp	2008-03-11 00:13:08.000000000 +0100
+++ freenx-client.svn545.plusfixes/nxcl/nxcl/nxcl.cpp	2009-07-25 16:59:24.000000000 +0200
@@ -20,6 +20,7 @@
 #include "nxclientlib_i18n.h"
 #include "nxclientlib.h"
 #include <fstream>
+#include <cstdlib>
 
 #include "nxcl.h"
 
@@ -30,6 +31,7 @@
 #include <dbus/dbus.h>
 #include <X11/Xlib.h>
 }
+#include <stdlib.h>
 
 using namespace nxcl;
 using namespace std;
diff -Naur freenx-client-0.9/qtnx/qtnx.pro freenx-client.svn545.plusfixes/qtnx/qtnx.pro
--- freenx-client-0.9/qtnx/qtnx.pro	2008-03-11 00:13:09.000000000 +0100
+++ freenx-client.svn545.plusfixes/qtnx/qtnx.pro	2008-07-10 10:01:24.000000000 +0200
@@ -24,6 +24,8 @@
 DEPENDPATH	+= $(QTDIR)/include
 
 
-QT += ui xml
+QT += gui xml
 
 TARGET		= qtnx
+target.path = $$[QT_INSTALL_BINS]
+INSTALLS += target
diff -Naur freenx-client-0.9/qtnx/qtnxwindow.cpp freenx-client.svn545.plusfixes/qtnx/qtnxwindow.cpp
--- freenx-client-0.9/qtnx/qtnxwindow.cpp	2008-03-11 00:13:09.000000000 +0100
+++ freenx-client.svn545.plusfixes/qtnx/qtnxwindow.cpp	2009-07-25 17:07:19.000000000 +0200
@@ -274,7 +274,8 @@
         key = config.key;
         session.key = "supplied";
     } else
-        session.key = "default";
+        session.key = "id.key";
+	
 
     if (config.sessionType == "unix-application")
         session.customCommand = config.customCommand;
@@ -290,13 +291,12 @@
 
     m_NXClient->setDepth(getDepth());
 
-    QString keyPath = "id.key";
 
 #ifdef Q_WS_MAC
     keyPath = binaryPath + "/id.key";
 #endif
 
-    m_NXClient->invokeNXSSH(keyPath.toStdString(), config.serverHost, config.encryption, "",
+    m_NXClient->invokeNXSSH(session.key, config.serverHost, config.encryption, config.key,
             config.serverPort);
 
     processProbe->start(30);