summaryrefslogtreecommitdiff
path: root/packages/nxcl
diff options
context:
space:
mode:
authorwoglinde <heinold@inf.fu-berlin.de>2008-11-27 02:03:16 +0100
committerwoglinde <heinold@inf.fu-berlin.de>2008-11-27 02:03:16 +0100
commit29ba23c6c47d785eeca129a6150fdbe8a1092a76 (patch)
treeea3334bff3bb6b1c68bb6ee83a74da448f10aa68 /packages/nxcl
parente8e3c039fb38198bef8b09cdcf43b9334a2acbfa (diff)
libnxcl: various updates from my work for the n810
* adding ssh proxy support * delete the client logfiles option * warnings about ssh errors * better ssh-key handling * bump PR
Diffstat (limited to 'packages/nxcl')
-rw-r--r--packages/nxcl/files/deletelogfiles.patch136
-rw-r--r--packages/nxcl/files/dodnx.patch329
-rw-r--r--packages/nxcl/files/gcc-warnings.patch16
-rw-r--r--packages/nxcl/files/gcc4.3-ftbfs.patch6
-rw-r--r--packages/nxcl/files/publicKey.patch12
-rw-r--r--packages/nxcl/files/restorekeyboard.patch25
-rw-r--r--packages/nxcl/files/ssh_dnserror.patch31
-rw-r--r--packages/nxcl/libnxcl_0.9.bb8
8 files changed, 559 insertions, 4 deletions
diff --git a/packages/nxcl/files/deletelogfiles.patch b/packages/nxcl/files/deletelogfiles.patch
new file mode 100644
index 0000000000..9e5b10dcca
--- /dev/null
+++ b/packages/nxcl/files/deletelogfiles.patch
@@ -0,0 +1,136 @@
+Index: nxcl-0.9/lib/nxclientlib.cpp
+===================================================================
+--- nxcl-0.9.orig/lib/nxclientlib.cpp 2008-10-15 15:09:17.000000000 +0200
++++ nxcl-0.9/lib/nxclientlib.cpp 2008-10-15 15:30:33.000000000 +0200
+@@ -27,6 +27,8 @@
+ #include "../config.h"
+
+ #include <fstream>
++#include <iostream>
++#include <string>
+
+ extern "C" {
+ #include <errno.h>
+@@ -966,4 +968,68 @@
+ free (buf);
+ return path;
+ }
++
++int NXClientLib::fmatch(const struct dirent *direntry)
++{
++ if (strncmp(direntry->d_name, "S", 1) == 0){
++ return 1;
++ }
++ return 0;
++}
++
++
++bool NXClientLib::deleteAllSessionfiles()
++{
++ struct dirent **filelist;
++ DIR *Directory;
++ int filescount = 0;
++ int i;
++ ifstream sessionfile;
++ string line, rmsesdir;
++
++ char * home;
++ stringstream ss;
++ string nxdir;
++
++ home = getenv ("HOME");
++
++ ss << home;
++
++ nxdir = ss.str() + "/.nx";
++
++ Directory = opendir(nxdir.c_str());
++
++ if( Directory )
++ {
++ filescount = scandir(nxdir.c_str(), &filelist, fmatch, alphasort);
++
++ for (i=0; i < filescount; i++)
++ {
++ rmsesdir = nxdir + "/" + string(filelist[i]->d_name) + "/";
++ sessionfile.open((rmsesdir + "session").c_str());
++
++ if ( sessionfile.is_open() )
++ {
++ while( !sessionfile.eof() )
++ {
++ getline(sessionfile,line);
++ if ( (line.find("Session terminated") != string::npos) ||
++ (line.find("Exiting keeper") != string::npos) )
++ {
++ // lazy deletion but it works
++ remove( (rmsesdir + "errors").c_str() );
++ remove( (rmsesdir + "options").c_str() );
++ remove( (rmsesdir + "session").c_str() );
++ remove( (rmsesdir + "stats").c_str() );
++ remove(rmsesdir.c_str());
++ break;
++ }
++ }
++ }
++ }
++ return true;
++ }
++ return false;
++}
++
+ //@}
+Index: nxcl-0.9/lib/nxclientlib.h
+===================================================================
+--- nxcl-0.9.orig/lib/nxclientlib.h 2008-10-15 15:09:17.000000000 +0200
++++ nxcl-0.9/lib/nxclientlib.h 2008-10-15 15:09:17.000000000 +0200
+@@ -25,10 +25,14 @@
+ #define _NXCLIENTLIB_H_
+
+ #include <iostream>
+-#include "nxsession.h"
+ #include <list>
++
++#include "nxsession.h"
+ #include "notQt.h"
+
++extern "C" {
++ #include <dirent.h>
++}
+
+ using namespace std;
+
+@@ -375,6 +379,11 @@
+ {
+ return this->sessionRunning;
+ }
++
++ // static function so we do not need an explicit object
++ // for deleting the session files
++ static bool deleteAllSessionfiles(void);
++
+ //@}
+
+ private:
+@@ -493,6 +502,7 @@
+ */
+ int httpProxyPort;
+
++ static int fmatch(const struct dirent *direntry);
+ };
+
+ } // namespace
+Index: nxcl-0.9/lib/nxdata.h
+===================================================================
+--- nxcl-0.9.orig/lib/nxdata.h 2008-10-15 15:09:17.000000000 +0200
++++ nxcl-0.9/lib/nxdata.h 2008-10-15 15:09:17.000000000 +0200
+@@ -77,6 +77,9 @@
+ bool proxyAuthenticated;
+ string proxyUser;
+ string proxyPass;
++ // small hack for storing this
++ // easier than workaround in the client
++ bool delSessionfiles;
+ };
+
+ struct NXSessionData {
diff --git a/packages/nxcl/files/dodnx.patch b/packages/nxcl/files/dodnx.patch
new file mode 100644
index 0000000000..5bf606c689
--- /dev/null
+++ b/packages/nxcl/files/dodnx.patch
@@ -0,0 +1,329 @@
+Index: nxcl-0.9/lib/notQt.cpp
+===================================================================
+--- nxcl-0.9.orig/lib/notQt.cpp 2008-10-10 20:09:53.000000000 +0200
++++ nxcl-0.9/lib/notQt.cpp 2008-10-10 20:10:26.000000000 +0200
+@@ -443,6 +443,9 @@
+ void
+ notQtUtilities::splitString (string& line, char token, vector<string>& rtn)
+ {
++ if (line.size() < 1)
++ return;
++
+ rtn.clear();
+ unsigned int i=0;
+ while (i < (line.size())-1) {
+@@ -459,6 +462,9 @@
+ void
+ notQtUtilities::splitString (string& line, char token, list<string>& rtn)
+ {
++ if (line.size() < 1)
++ return;
++
+ rtn.clear();
+ unsigned int i=0;
+ while (i < (line.size())-1) {
+Index: nxcl-0.9/lib/nxclientlib.cpp
+===================================================================
+--- nxcl-0.9.orig/lib/nxclientlib.cpp 2008-10-10 20:09:53.000000000 +0200
++++ nxcl-0.9/lib/nxclientlib.cpp 2008-10-10 20:10:26.000000000 +0200
+@@ -152,6 +152,8 @@
+ this->sessionRunning = false;
+ this->proxyData.encrypted = false;
+ this->password = false;
++ this->useHttpProxy = false;
++ this->httpProxyAuthenticated = false;
+
+ dbgln ("In NXClientLib constructor");
+
+@@ -172,6 +174,22 @@
+ dbgln ("In NXClientLib destructor");
+ }
+
++void NXClientLib::setProxy (string proxyHost,
++ string proxyUser,
++ string proxyPass,
++ int proxyPort)
++{
++ useHttpProxy = true;
++ httpProxyHost = proxyHost;
++
++ if (!httpProxyUser.empty())
++ httpProxyAuthenticated = true;
++
++ httpProxyUser = proxyUser;
++ httpProxyPass = proxyPass;
++ httpProxyPort = proxyPort;
++}
++
+ void NXClientLib::invokeNXSSH (string publicKey, string serverHost,
+ bool encryption, string key, int port)
+ {
+@@ -228,6 +246,21 @@
+ arguments.push_back ("-oRhostsRSAAuthentication no");
+ arguments.push_back ("-oPubkeyAuthentication yes");
+
++ // Proxy support
++
++ if (useHttpProxy) {
++ arguments.push_back("-P");
++
++ argtmp.str("");
++
++ if (httpProxyAuthenticated)
++ argtmp << this->httpProxyUser << ":" << this->httpProxyPass << "@";
++
++ argtmp << this->httpProxyHost << ":" << this->httpProxyPort;
++
++ arguments.push_back(argtmp.str());
++ }
++
+ if (encryption == true) {
+ arguments.push_back("-B");
+ session.setEncryption (true);
+@@ -785,7 +818,7 @@
+ nxwinArguments.push_back(fontPath.str());
+
+ nxwinArguments.push_back("-name");
+- nxwinArguments.push_back("NXWin");
++ nxwinArguments.push_back("DoD");
+ nxwinArguments.push_back(":0");
+
+ nxwinArguments.push_back("-screen");
+Index: nxcl-0.9/lib/nxclientlib.h
+===================================================================
+--- nxcl-0.9.orig/lib/nxclientlib.h 2008-10-10 20:09:53.000000000 +0200
++++ nxcl-0.9/lib/nxclientlib.h 2008-10-10 20:10:26.000000000 +0200
+@@ -178,6 +178,21 @@
+ int port = 22);
+
+ /*!
++ * Set proxy server settings for nxssh.
++ *
++ * \param proxyHost is the hostname
++ *
++ * \param proxyUser is the username (null if not necessary)
++ *
++ * \param proxyPass is the password
++ *
++ * \param proxyPort is the port
++ */
++ void setProxy (string proxyHost,
++ string proxyUser,
++ string proxyPass,
++ int proxyPort);
++ /*!
+ * Overloaded to give callback data on write.
+ *
+ * Writes data to this->nxsshProcess stdin and also
+@@ -453,6 +468,31 @@
+ * Password for the connection
+ */
+ string nxpass;
++ /*!
++ * Whether to use an http proxy for nxssh
++ */
++ bool useHttpProxy;
++ /*!
++ * A proxy server to be used with nxssh
++ */
++ string httpProxyHost;
++ /*!
++ * Whether to use authentication
++ */
++ bool httpProxyAuthenticated;
++ /*!
++ * Username for the http proxy
++ */
++ string httpProxyUser;
++ /*!
++ * Password for the http proxy
++ */
++ string httpProxyPass;
++ /*!
++ * Port for the http proxy
++ */
++ int httpProxyPort;
++
+ };
+
+ } // namespace
+Index: nxcl-0.9/lib/nxdata.h
+===================================================================
+--- nxcl-0.9.orig/lib/nxdata.h 2008-10-10 20:09:53.000000000 +0200
++++ nxcl-0.9/lib/nxdata.h 2008-10-10 20:10:26.000000000 +0200
+@@ -1,12 +1,12 @@
+ /***************************************************************************
+- nxdata.h
+- -------------------
+- begin : Wednesday 9th August 2006
+- modifications : July 2007
+- copyright : (C) 2006 by George Wright
+- modifications : (C) 2007 Embedded Software Foundry Ltd. (U.K.)
+- : Author: Sebastian James
+- email : seb@esfnet.co.uk, gwright@kde.org
++ nxdata.h
++ -------------------
++begin : Wednesday 9th August 2006
++modifications : July 2007
++copyright : (C) 2006 by George Wright
++modifications : (C) 2007 Embedded Software Foundry Ltd. (U.K.)
++: Author: Sebastian James
++email : seb@esfnet.co.uk, gwright@kde.org
+ ***************************************************************************/
+
+ /***************************************************************************
+@@ -43,77 +43,83 @@
+
+ namespace nxcl {
+
+- struct NXConfigData {
+- string serverHost;
+- int serverPort;
+- string sessionUser;
+- string sessionPass;
+- string sessionName;
+- string sessionType;
+- int cache;
+- int images;
+- string linkType;
+- bool render;
+- string backingstore;
+- int imageCompressionMethod;
+- int imageCompressionLevel;
+- string geometry;
+- string keyboard;
+- string kbtype;
+- bool media;
+- string agentServer;
+- string agentUser;
+- string agentPass;
+- int cups;
+- string key;
+- bool encryption;
+- bool fullscreen;
+- bool virtualDesktop;
+- string customCommand;
+- };
+-
+- struct NXSessionData {
+- string sessionName;
+- string sessionType;
+- int cache;
+- int images;
+- string linkType;
+- bool render;
+- string backingstore;
+- int imageCompressionMethod;
+- int imageCompressionLevel;
+- string geometry;
+- string keyboard;
+- string kbtype;
+- bool media;
+- string agentServer;
+- string agentUser;
+- string agentPass;
+- int cups;
+- string id;
+- string key;
+- bool encryption;
+- bool fullscreen;
+- bool virtualDesktop;
+- string customCommand;
+- bool suspended;
+- int xRes;
+- int yRes;
+- int depth;
+- int display;
+- bool terminate;
+- };
+-
+- struct NXResumeData {
+- int display;
+- string sessionType;
+- string sessionID;
+- string options;
+- int depth;
+- string screen;
+- string available;
+- string sessionName;
+- };
++ struct NXConfigData {
++ string serverHost;
++ int serverPort;
++ string sessionUser;
++ string sessionPass;
++ string sessionName;
++ string sessionType;
++ int cache;
++ int images;
++ string linkType;
++ bool render;
++ string backingstore;
++ int imageCompressionMethod;
++ int imageCompressionLevel;
++ string geometry;
++ string keyboard;
++ string kbtype;
++ bool media;
++ string agentServer;
++ string agentUser;
++ string agentPass;
++ int cups;
++ string key;
++ bool encryption;
++ bool fullscreen;
++ bool virtualDesktop;
++ string customCommand;
++ bool useProxy;
++ string proxyHost;
++ int proxyPort;
++ bool proxyAuthenticated;
++ string proxyUser;
++ string proxyPass;
++ };
++
++ struct NXSessionData {
++ string sessionName;
++ string sessionType;
++ int cache;
++ int images;
++ string linkType;
++ bool render;
++ string backingstore;
++ int imageCompressionMethod;
++ int imageCompressionLevel;
++ string geometry;
++ string keyboard;
++ string kbtype;
++ bool media;
++ string agentServer;
++ string agentUser;
++ string agentPass;
++ int cups;
++ string id;
++ string key;
++ bool encryption;
++ bool fullscreen;
++ bool virtualDesktop;
++ string customCommand;
++ bool suspended;
++ int xRes;
++ int yRes;
++ int depth;
++ int display;
++ bool terminate;
++ };
++
++ struct NXResumeData {
++ int display;
++ string sessionType;
++ string sessionID;
++ string options;
++ int depth;
++ string screen;
++ string available;
++ string sessionName;
++ };
+
+ } // namespace
+ #endif
diff --git a/packages/nxcl/files/gcc-warnings.patch b/packages/nxcl/files/gcc-warnings.patch
new file mode 100644
index 0000000000..6f928dbea6
--- /dev/null
+++ b/packages/nxcl/files/gcc-warnings.patch
@@ -0,0 +1,16 @@
+Index: nxcl-0.9/lib/nxsession.cpp
+===================================================================
+--- nxcl-0.9.orig/lib/nxsession.cpp 2008-09-26 10:42:51.000000000 +0200
++++ nxcl-0.9/lib/nxsession.cpp 2008-09-26 10:43:37.000000000 +0200
+@@ -44,9 +44,9 @@
+ using namespace nxcl;
+
+ NXSession::NXSession() :
+- devurand_fd(-1),
+- stage(HELLO_NXCLIENT),
+ sessionDataSet(false),
++ stage(HELLO_NXCLIENT),
++ devurand_fd(-1),
+ nxUsername("nouser"),
+ nxPassword("nopass")
+ {
diff --git a/packages/nxcl/files/gcc4.3-ftbfs.patch b/packages/nxcl/files/gcc4.3-ftbfs.patch
index d73e828677..469209a27a 100644
--- a/packages/nxcl/files/gcc4.3-ftbfs.patch
+++ b/packages/nxcl/files/gcc4.3-ftbfs.patch
@@ -22,8 +22,8 @@ Index: nxcl/lib/nxclientlib.cpp
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
-+ #include <stdlib.h>
-+ #include <string.h>
++ #include <cstdlib>
++ #include <cstring>
}
/*
@@ -35,7 +35,7 @@ Index: nxcl/nxcl/nxcl.cpp
extern "C" {
#include <dbus/dbus.h>
#include <X11/Xlib.h>
-+#include <stdlib.h>
++#include <cstdlib>
}
using namespace nxcl;
diff --git a/packages/nxcl/files/publicKey.patch b/packages/nxcl/files/publicKey.patch
new file mode 100644
index 0000000000..bdb86f9e1a
--- /dev/null
+++ b/packages/nxcl/files/publicKey.patch
@@ -0,0 +1,12 @@
+Index: nxcl-0.9/lib/nxdata.h
+===================================================================
+--- nxcl-0.9.orig/lib/nxdata.h 2008-10-13 16:36:53.000000000 +0200
++++ nxcl-0.9/lib/nxdata.h 2008-10-13 16:40:32.000000000 +0200
+@@ -66,6 +66,7 @@
+ string agentPass;
+ int cups;
+ string key;
++ string publicKey;
+ bool encryption;
+ bool fullscreen;
+ bool virtualDesktop;
diff --git a/packages/nxcl/files/restorekeyboard.patch b/packages/nxcl/files/restorekeyboard.patch
new file mode 100644
index 0000000000..9fae42be2e
--- /dev/null
+++ b/packages/nxcl/files/restorekeyboard.patch
@@ -0,0 +1,25 @@
+Index: nxcl-0.9/lib/nxsession.cpp
+===================================================================
+--- nxcl-0.9.orig/lib/nxsession.cpp 2008-10-10 14:17:04.000000000 +0200
++++ nxcl-0.9/lib/nxsession.cpp 2008-10-10 14:20:27.000000000 +0200
+@@ -284,9 +284,9 @@
+ << "\" "
+ // FIXME: This may be some other OS if you compile it on
+ // Sun, Windows, etc.
+- << "--client=\"linux\" "
+- << "--keyboard=\"" << this->sessionData->keyboard
+- << "\" "
++ //<< "--client=\"linux\" "
++ << "--keyboard=\"" << this->sessionData->keyboard << "\" "
++ << "--kbtype=\"" << this->sessionData->kbtype << "\" "
+ << "--id=\"" << this->sessionData->id << "\" "
+ // This may be the key?
+ << "--display=\"0\" "
+@@ -334,6 +334,7 @@
+ "M\" --images=\"" << this->sessionData->images <<
+ "M\" --cookie=\"" << generateCookie() <<
+ "\" --link=\"" << this->sessionData->linkType <<
++ "\" --keyboard=\"" << this->sessionData->keyboard <<
+ "\" --kbtype=\"" << this->sessionData->kbtype <<
+ "\" --nodelay=\"1\" --encryption=\""
+ << this->sessionData->encryption <<
diff --git a/packages/nxcl/files/ssh_dnserror.patch b/packages/nxcl/files/ssh_dnserror.patch
new file mode 100644
index 0000000000..c4ad07c892
--- /dev/null
+++ b/packages/nxcl/files/ssh_dnserror.patch
@@ -0,0 +1,31 @@
+Index: nxcl-0.9/lib/nxclientlib.cpp
+===================================================================
+--- nxcl-0.9.orig/lib/nxclientlib.cpp 2008-11-05 18:26:26.000000000 +0100
++++ nxcl-0.9/lib/nxclientlib.cpp 2008-11-05 18:27:18.000000000 +0100
+@@ -512,7 +512,13 @@
+ (NXCL_HOST_KEY_VERIFAILED,
+ _("SSH host key verification failed"));
+ this->isFinished = true;
+- }
++ } else if ((*msgiter).find
++ ("Temporary failure in name resolution") != string::npos ) {
++ this->externalCallbacks->write
++ (NXCL_DNS_ERROR,
++ _("DNS namelookup failed"));
++ this->isFinished = true;
++ }
+ }
+ }
+
+Index: nxcl-0.9/lib/nxdata.h
+===================================================================
+--- nxcl-0.9.orig/lib/nxdata.h 2008-11-05 18:26:26.000000000 +0100
++++ nxcl-0.9/lib/nxdata.h 2008-11-05 18:26:26.000000000 +0100
+@@ -38,6 +38,7 @@
+ #define NXCL_FINISHED 1000009
+ #define NXCL_ALIVE 1000010
+ #define NXCL_PROCESS_ERROR 1000011
++#define NXCL_DNS_ERROR 1000012
+
+ using namespace std;
+
diff --git a/packages/nxcl/libnxcl_0.9.bb b/packages/nxcl/libnxcl_0.9.bb
index ea62579019..a10c4d5146 100644
--- a/packages/nxcl/libnxcl_0.9.bb
+++ b/packages/nxcl/libnxcl_0.9.bb
@@ -2,12 +2,18 @@ DESCRIPTION = "Backend library for the free nx-clients"
HOMEPAGE = "http://freenx.berlios.de/"
SECTION = "libs"
LICENSE = "GPL"
-PR = "r0"
+PR = "r1"
RDEPENDS = "nxproxy ssh"
SRC_URI = "http://download.berlios.de/freenx/freenx-client-${PV}.tar.bz2 \
file://gcc4.3-ftbfs.patch;patch=1 \
+ file://dodnx.patch;patch=1 \
+ file://gcc-warnings.patch;patch=1 \
+ file://restorekeyboard.patch;patch=1 \
+ file://publicKey.patch;patch=1 \
+ file://deletelogfiles.patch;patch=1 \
+ file://ssh_dnserror.patch;patch=1 \
"
S = "${WORKDIR}/freenx-client-${PV}/nxcl"