This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch bugfix/osx in repository x2goclient. discards ff4e985 macbuild.sh: add work-in-progress PulseAudio bundling. discards 2b4d000 macbuild.sh: add phase output for bundling nxproxy. discards 1bfd279 macbuild.sh: copy PulseAudio libraries and binaries. discards d43b53d macbuild.sh: define PulseAudio libraries and binaries to be later copied. discards e6a238f macbuild.sh: add EXE_DIR and FRAMEWORKS_DIR internal variables. discards 9704980 macbuild.sh: refactor nxproxy detection to use MACPORTS_PREFIX. discards c6b1051 macbuild.sh: add new repeat_str() helper function. discards d8814d3 macbuild.sh: add new get_nesting_level() helper function. discards e1ac5ef macbuild.sh: add new lazy_canonical_path() helper function. discards 68e2a4e macbuild.sh: add new dependency_error() helper function. discards 435cdbf macbuild.sh: add new MACPORTS_PREFIX detection/variable. discards c2c335f x2goclient.pro{maemo}: reference new pulsemanager.{cpp,h} files. discards 3af2bf6 pulsemanager.{cpp,h}: new class for PulseAudio management. discards b5785de compat.h: include QtCore/qglobal.h for Q_OS_... macros. discards 5e7aa3d compat.{cpp,h}: remove inline keyword, because function is not defined in header file. discards 6c69514 compat.{cpp,h}: new files. Implements strndup on OS X 10.6 and below. Add to x2goclient.cpp, x2goclient.pro and x2goclient.pro.maemo. discards 4a86c49 onmainwindow.cpp: correctly use ~/.x2go/.ssh as ssh directory when starting sshd in user mode. discards c3d1071 appdialog.cpp: initialize parent in default case. Another GCC compile warning fix. discards ea161b5 {appdialog,configwidget,onmainwindow,unixhelper}.cpp: fix some compile warnings with GCC. Fix a few whitespace issues. discards aadd8ba x2goclient.cpp: fix failing exec() call for the UNIX helper utility: correctly terminate arguments vector. discards c61b597 unixhelper.{cpp,h}: ignore SIGINT, SIGTERM, SIGPIPE, SIGQUIT, SIGUSR1 and SIGUSR2. discards f7bc099 {unixhelper.{cpp,h},x2goclient.cpp}: switch main cleanup handling to parent PID polling. discards 4ac2eb7 unixhelper.{cpp,h}: raise sleeping time to two seconds and grace period to 10 seconds. discards 7a230d3 x2goclient.cpp: create new argv array on the heap instead of on the stack. discards bd72aca x2goclient.cpp: fix string comparison. discards 0e43061 x2goclient.cpp: fix compile problems introduced with the last commit. discards 8fb1c85 x2goclient.cpp: don't start the UNIX cleanup helper process right after forking. discards 6e49fd6 x2goclient.cpp: clean up. discards d498ab7 unixhelper.cpp: port from std::signal() to sigaction(). Handle errors. discards 889eb90 unixhelper.{cpp,h}: implement signal unblocking in unixhelper::unix_cleanup(). Update documentation. discards 9e85ce1 unixhelper.cpp: kill process group on error. discards 63c2375 x2goclient.cpp: return return value of unixhelper::unix_cleanup(). discards ae4b0b5 unixhelper.{cpp,h}: add documentation/comments. discards d4c54d5 unixhelper.{cpp,h},x2goclient.cpp}: unixhelper should really be a (module) namespace, not a class. discards b63f664 unixhelper.h: forgot to declare type of unix_cleanup() function. discards 16016b3 unixhelper.{h,cpp}: also include <QtCore/qglobal.h> to have Q_OS_UNIX defined on UNIX-based platforms. Move guards around. discards 33c7db7 x2goclient.cpp: fix std::edit -> std::exit typo. discards d72ebf8 x2goclient.cpp: add legacy <sys/types.h> header needed for old operating systems. discards e50fe50 x2goclient.cpp: add myself to copyright header. discards 973cbf7 x2goclient.cpp: use setsid() on UNIX to become session and process group leader. discards 4d465fb x2goclient.cpp: add fork_helper() function to start up the UNIX cleanup helper. discards 3d878dd x2goclient.cpp: wrap X2Go Client main function and use that. discards c38e322 unixhelper.{cpp,h}: implement cleanup program for process group. discards 4180aa3 {unixhelper.{cpp,h},x2goclient.pro{maemo}}: add unixhelper stub. adds 391adf3 INSTALL: add more verbose instructions on how to build X2Go Client and friends. new 6c83109 onmainwindow.{cpp,h}: rename slotScDaemonOut() and slotScDaemonError() to slotScDaemonStdOut() and slotScDaemonStdErr(). new 91e14db x2goutils.{cpp,h}: add new show_RichText_Generic_MsgBox() main function designed to replace the show_RichText_WarningMsgBox() function. new 7d088bb x2goutils.{cpp,h}: make show_RichText_WarningMsgBox() use show_RichText_Generic_MsgBox (). new 91906e6 x2goutils.{cpp,h}: new show_RichText_ErrorMsgBox() function as a wrapper for show_RichText_Generic_MsgBox() with a critical icon. new b6d5d54 onmainwindow.{cpp,h}: properly handle scdaemon errors with a message box and close the client. new 90d6b8b onmainwindow.cpp: manipulate PATH and append /usr/lib/gnupg2/ to it when starting scdaemon. Fixes: #882. new 1deb01e x2goutils.h: add QMessageBox include, fixed compile error. new 89238d0 onmainwindow.cpp: fix typos leading to compile errors. new f2034da onmainwindow.cpp: another typo fix. new 72bc412 onmainwindow.cpp: add blocks to switch cases to fix a compile error. new 39eaa31 x2goutils.cpp: correct typo to fix compile errors. new cdbcf5c onmainwindow.cpp: drop a redundant variable and fix empty env check. new 4795846 onmainwindow.cpp: add more newlines to scdaemon error output. new 8bd0f08 onmainwindow.cpp: add debugging output for new scdaemon PATH value. new 2fa1955 onmainwindow.cpp: split up PATH value as printed in the error message box by a newline every 100 characters. new 11a2b1d {unixhelper.{cpp,h},x2goclient.pro{maemo}}: add unixhelper stub. new 35b51ea unixhelper.{cpp,h}: implement cleanup program for process group. new 1de0526 x2goclient.cpp: wrap X2Go Client main function and use that. new b60e633 x2goclient.cpp: add fork_helper() function to start up the UNIX cleanup helper. new 928bd62 x2goclient.cpp: use setsid() on UNIX to become session and process group leader. new d11606f x2goclient.cpp: add myself to copyright header. new a726e34 x2goclient.cpp: add legacy <sys/types.h> header needed for old operating systems. new d4f6983 x2goclient.cpp: fix std::edit -> std::exit typo. new b08be3b unixhelper.{h,cpp}: also include <QtCore/qglobal.h> to have Q_OS_UNIX defined on UNIX-based platforms. Move guards around. new f26705a unixhelper.h: forgot to declare type of unix_cleanup() function. new 0c652a8 unixhelper.{cpp,h},x2goclient.cpp}: unixhelper should really be a (module) namespace, not a class. new 2479cd9 unixhelper.{cpp,h}: add documentation/comments. new 87d56d7 x2goclient.cpp: return return value of unixhelper::unix_cleanup(). new e929a4a unixhelper.cpp: kill process group on error. new 74a935c unixhelper.{cpp,h}: implement signal unblocking in unixhelper::unix_cleanup(). Update documentation. new 80ab63f unixhelper.cpp: port from std::signal() to sigaction(). Handle errors. new bd7dc0f x2goclient.cpp: clean up. new 300acf1 x2goclient.cpp: don't start the UNIX cleanup helper process right after forking. new 8b3ad9f x2goclient.cpp: fix compile problems introduced with the last commit. new 15a63fe x2goclient.cpp: fix string comparison. new 62a3331 x2goclient.cpp: create new argv array on the heap instead of on the stack. new 09f5d64 unixhelper.{cpp,h}: raise sleeping time to two seconds and grace period to 10 seconds. new 31ae1b4 {unixhelper.{cpp,h},x2goclient.cpp}: switch main cleanup handling to parent PID polling. new 45a4968 unixhelper.{cpp,h}: ignore SIGINT, SIGTERM, SIGPIPE, SIGQUIT, SIGUSR1 and SIGUSR2. new 69b672e x2goclient.cpp: fix failing exec() call for the UNIX helper utility: correctly terminate arguments vector. new 1270e20 {appdialog,configwidget,onmainwindow,unixhelper}.cpp: fix some compile warnings with GCC. Fix a few whitespace issues. new 50c5545 appdialog.cpp: initialize parent in default case. Another GCC compile warning fix. new 38174ba onmainwindow.cpp: correctly use ~/.x2go/.ssh as ssh directory when starting sshd in user mode. new 0c8fa24 compat.{cpp,h}: new files. Implements strndup on OS X 10.6 and below. Add to x2goclient.cpp, x2goclient.pro and x2goclient.pro.maemo. new 5b8ae88 compat.{cpp,h}: remove inline keyword, because function is not defined in header file. new a0140b8 compat.h: include QtCore/qglobal.h for Q_OS_... macros. new dbbce50 pulsemanager.{cpp,h}: new class for PulseAudio management. new cf77811 x2goclient.pro{maemo}: reference new pulsemanager.{cpp,h} files. new d5c4afa macbuild.sh: add new MACPORTS_PREFIX detection/variable. new 4e63bfa macbuild.sh: add new dependency_error() helper function. new 07150a8 macbuild.sh: add new lazy_canonical_path() helper function. new 4d1e75d macbuild.sh: add new get_nesting_level() helper function. new 9c8a503 macbuild.sh: add new repeat_str() helper function. new 2179a63 macbuild.sh: refactor nxproxy detection to use MACPORTS_PREFIX. new 924f0b2 macbuild.sh: add EXE_DIR and FRAMEWORKS_DIR internal variables. new 6e917d8 macbuild.sh: define PulseAudio libraries and binaries to be later copied. new 206df05 macbuild.sh: copy PulseAudio libraries and binaries. new 384bbc1 macbuild.sh: add phase output for bundling nxproxy. new 0ae8018 macbuild.sh: add work-in-progress PulseAudio bundling. This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (ff4e985) \ N -- N -- N refs/heads/bugfix/osx (0ae8018) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 59 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: INSTALL | 64 ++++++++++++++++++++++++++++++++-- debian/changelog | 29 +++++++++++++++ src/onmainwindow.cpp | 95 +++++++++++++++++++++++++++++++++++++++++++++++--- src/onmainwindow.h | 6 ++-- src/x2goutils.cpp | 13 +++++-- src/x2goutils.h | 4 +++ 6 files changed, 200 insertions(+), 11 deletions(-) -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 91e14db4a61635f037811e7db29576be37b1eb4d Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 00:17:04 2015 +0200 x2goutils.{cpp,h}: add new show_RichText_Generic_MsgBox() main function designed to replace the show_RichText_WarningMsgBox() function. --- debian/changelog | 2 ++ src/x2goutils.cpp | 12 ++++++++++++ src/x2goutils.h | 2 ++ 3 files changed, 16 insertions(+) diff --git a/debian/changelog b/debian/changelog index 57b84a3..a8c1b6d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low to slotScDaemonStdOut() and slotScDaemonStdErr(). I will need slotScDaemonError() later and the previous names were a bit of a misnomer. + - x2goutils.{cpp,h}: add new show_RichText_Generic_MsgBox() main function + designed to replace the show_RichText_WarningMsgBox() function. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goutils.cpp b/src/x2goutils.cpp index 533bfdd..21575fa 100644 --- a/src/x2goutils.cpp +++ b/src/x2goutils.cpp @@ -93,6 +93,18 @@ QString convert_to_rich_text (const QString &text, bool force) { return (fixup_text); } +void show_RichText_Generic_MsgBox (QMessageBox::Icon icon, const QString &main_text, const QString &informative_text) { + QString fixup_main_text (convert_to_rich_text (main_text)); + QString fixup_informative_text (convert_to_rich_text (informative_text, true)); + + QMessageBox msg_box (icon, QString ("X2Go Client"), fixup_main_text, QMessageBox::Ok); + + msg_box.setTextFormat (Qt::RichText); + msg_box.setInformativeText (fixup_informative_text); + msg_box.setWindowModality (Qt::WindowModal); + msg_box.exec (); +} + void show_RichText_WarningMsgBox (const QString &main_text, const QString &informative_text) { QString fixup_main_text (convert_to_rich_text (main_text)); QString fixup_informative_text (convert_to_rich_text (informative_text, true)); diff --git a/src/x2goutils.h b/src/x2goutils.h index b90ac50..02ec4b2 100644 --- a/src/x2goutils.h +++ b/src/x2goutils.h @@ -31,6 +31,8 @@ QString fixup_resource_URIs (const QString &res_path); QString wrap_legacy_resource_URIs (const QString &res_path); QString convert_to_rich_text (const QString &text, bool force = false); + +void show_RichText_Generic_MsgBox (QMessageBox::Icon icon, const QString &main_text, const QString &informative_text); void show_RichText_WarningMsgBox (const QString &main_text, const QString &informative_text = ""); QString git_changelog_extract_commit_sha (const QString &gitlog); -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 7d088bbbae01daf69f61b0c5ea60a99cedce457c Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 00:21:42 2015 +0200 x2goutils.{cpp,h}: make show_RichText_WarningMsgBox() use show_RichText_Generic_MsgBox (). --- debian/changelog | 2 ++ src/x2goutils.cpp | 10 +--------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/debian/changelog b/debian/changelog index a8c1b6d..6987a0c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low misnomer. - x2goutils.{cpp,h}: add new show_RichText_Generic_MsgBox() main function designed to replace the show_RichText_WarningMsgBox() function. + - x2goutils.{cpp,h}: make show_RichText_WarningMsgBox() use + show_RichText_Generic_MsgBox (). -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goutils.cpp b/src/x2goutils.cpp index 21575fa..dfe818f 100644 --- a/src/x2goutils.cpp +++ b/src/x2goutils.cpp @@ -106,16 +106,8 @@ void show_RichText_Generic_MsgBox (QMessageBox::Icon icon, const QString &main_t } void show_RichText_WarningMsgBox (const QString &main_text, const QString &informative_text) { - QString fixup_main_text (convert_to_rich_text (main_text)); - QString fixup_informative_text (convert_to_rich_text (informative_text, true)); + show_RichText_Generic_MsgBox (QMessageBox::warning, main_text, informative_text); - QMessageBox msg_box (QMessageBox::Warning, QString ("X2Go Client"), - fixup_main_text, NULL); - - msg_box.setTextFormat (Qt::RichText); - msg_box.setInformativeText (fixup_informative_text); - msg_box.setWindowModality (Qt::WindowModal); - msg_box.exec (); } QString git_changelog_extract_commit_sha (const QString &gitlog) { -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 6c83109951d264f1948dc6a57123f2f7cac73948 Author: Mihai Moldovan <ionic@ionic.de> Date: Fri May 29 02:09:55 2015 +0200 onmainwindow.{cpp,h}: rename slotScDaemonOut() and slotScDaemonError() to slotScDaemonStdOut() and slotScDaemonStdErr(). I will need slotScDaemonError() later and the previous names were a bit of a misnomer. --- debian/changelog | 4 ++++ src/onmainwindow.cpp | 8 ++++---- src/onmainwindow.h | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/debian/changelog b/debian/changelog index daae4cc..57b84a3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,10 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low * New upstream release (4.0.4.1): - INSTALL: add more verbose instructions on how to build X2Go Client and friends. + - onmainwindow.{cpp,h}: rename slotScDaemonOut() and slotScDaemonError() + to slotScDaemonStdOut() and slotScDaemonStdErr(). I will need + slotScDaemonError() later and the previous names were a bit of a + misnomer. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index eba9a3a..a26217e 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -8335,9 +8335,9 @@ void ONMainWindow::slotStartPGPAuth() QStringList arguments; arguments<<"--multi-server"; connect ( scDaemon,SIGNAL ( readyReadStandardError() ),this, - SLOT ( slotScDaemonError() ) ); + SLOT ( slotScDaemonStdErr() ) ); connect ( scDaemon,SIGNAL ( readyReadStandardOutput() ),this, - SLOT ( slotScDaemonOut() ) ); + SLOT ( slotScDaemonStdOut() ) ); connect ( scDaemon,SIGNAL ( finished ( int,QProcess::ExitStatus ) ), this, SLOT ( @@ -8355,7 +8355,7 @@ void ONMainWindow::slotCheckScDaemon() } } -void ONMainWindow::slotScDaemonError() +void ONMainWindow::slotScDaemonStdErr() { QString stdOut ( scDaemon->readAllStandardError() ); stdOut=stdOut.simplified(); @@ -8375,7 +8375,7 @@ void ONMainWindow::slotScDaemonError() } } -void ONMainWindow::slotScDaemonOut() +void ONMainWindow::slotScDaemonStdOut() { QString stdOut ( scDaemon->readAllStandardOutput() ); stdOut=stdOut.simplified(); diff --git a/src/onmainwindow.h b/src/onmainwindow.h index 1797258..7a2a806 100644 --- a/src/onmainwindow.h +++ b/src/onmainwindow.h @@ -1109,8 +1109,8 @@ private slots: void slotRereadUsers(); void slotExtTimer(); void slotStartPGPAuth(); - void slotScDaemonOut(); - void slotScDaemonError(); + void slotScDaemonStdOut(); + void slotScDaemonStdErr(); void slotGpgFinished ( int exitCode, QProcess::ExitStatus exitStatus ); void slotScDaemonFinished ( int exitCode, -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 91906e6cf446a8f276df330660aee3d700ebc1a6 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 00:23:51 2015 +0200 x2goutils.{cpp,h}: new show_RichText_ErrorMsgBox() function as a wrapper for show_RichText_Generic_MsgBox() with a critical icon. --- debian/changelog | 2 ++ src/x2goutils.cpp | 3 +++ src/x2goutils.h | 1 + 3 files changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index 6987a0c..eeff2cf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,6 +12,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low designed to replace the show_RichText_WarningMsgBox() function. - x2goutils.{cpp,h}: make show_RichText_WarningMsgBox() use show_RichText_Generic_MsgBox (). + - x2goutils.{cpp,h}: new show_RichText_ErrorMsgBox() function as a wrapper + for show_RichText_Generic_MsgBox() with a critical icon. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goutils.cpp b/src/x2goutils.cpp index dfe818f..3c37050 100644 --- a/src/x2goutils.cpp +++ b/src/x2goutils.cpp @@ -107,7 +107,10 @@ void show_RichText_Generic_MsgBox (QMessageBox::Icon icon, const QString &main_t void show_RichText_WarningMsgBox (const QString &main_text, const QString &informative_text) { show_RichText_Generic_MsgBox (QMessageBox::warning, main_text, informative_text); +} +void show_RichText_ErrorMsgBox (const QString &main_text, const QString &informative_text) { + show_RichText_Generic_MsgBox (QMessageBox::Critical, main_text, informative_test); } QString git_changelog_extract_commit_sha (const QString &gitlog) { diff --git a/src/x2goutils.h b/src/x2goutils.h index 02ec4b2..834705a 100644 --- a/src/x2goutils.h +++ b/src/x2goutils.h @@ -34,6 +34,7 @@ QString convert_to_rich_text (const QString &text, bool force = false); void show_RichText_Generic_MsgBox (QMessageBox::Icon icon, const QString &main_text, const QString &informative_text); void show_RichText_WarningMsgBox (const QString &main_text, const QString &informative_text = ""); +void show_RichText_ErrorMsgBox (const QString &main_text, const QString &informative_text = ""); QString git_changelog_extract_commit_sha (const QString &gitlog); -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 90d6b8b7cecec02b2a0e0f81ed650ca1bf39862f Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 01:36:32 2015 +0200 onmainwindow.cpp: manipulate PATH and append /usr/lib/gnupg2/ to it when starting scdaemon. Fixes: #882. --- debian/changelog | 2 ++ src/onmainwindow.cpp | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/debian/changelog b/debian/changelog index 2399c15..bb4045a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,6 +16,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low for show_RichText_Generic_MsgBox() with a critical icon. - onmainwindow.{cpp,h}: properly handle scdaemon errors with a message box and close the client. + - onmainwindow.cpp: manipulate PATH and append /usr/lib/gnupg2/ to it when + starting scdaemon. Fixes: #882. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index d34c6e7..b777eec 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -8334,6 +8334,28 @@ void ONMainWindow::slotStartPGPAuth() scDaemon=new QProcess ( this ); QStringList arguments; arguments<<"--multi-server"; + + QProcessEnvironment scdaemon_env = QProcessEnvironment::systemEnvironment (); + + QString path_env_separator = ":"; + /* Let's hope that's really the only override... */ +#ifdef Q_OS_WIN + path_env_separator = ";"; +#endif + + QString old_path_value = scdaemon_env.value ("PATH", ""); + QString new_path_value = ""; + + if (!old_path_value.isEmpty ()) { + new_path_value = old_path_value + path_env_separator + } + + new_path_value += "/usr/lib/gnupg2/"; + + scdaemon_env.insert ("PATH", new_path_value); + + scDaemon.setProcessEnvironment (scdaemon_env); + connect ( scDaemon,SIGNAL ( readyReadStandardError() ),this, SLOT ( slotScDaemonStdErr() ) ); connect ( scDaemon,SIGNAL ( readyReadStandardOutput() ),this, -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit b6d5d540ea99cc5d2271def1d70d5d9173285e61 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 01:21:02 2015 +0200 onmainwindow.{cpp,h}: properly handle scdaemon errors with a message box and close the client. --- debian/changelog | 2 ++ src/onmainwindow.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/onmainwindow.h | 2 ++ 3 files changed, 48 insertions(+) diff --git a/debian/changelog b/debian/changelog index eeff2cf..2399c15 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,6 +14,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low show_RichText_Generic_MsgBox (). - x2goutils.{cpp,h}: new show_RichText_ErrorMsgBox() function as a wrapper for show_RichText_Generic_MsgBox() with a critical icon. + - onmainwindow.{cpp,h}: properly handle scdaemon errors with a message box + and close the client. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index a26217e..d34c6e7 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -8342,6 +8342,8 @@ void ONMainWindow::slotStartPGPAuth() this, SLOT ( slotScDaemonFinished ( int, QProcess::ExitStatus ) ) ); + connect (scDaemon, SIGNAL (error (QProcess::ProcessError)), this, + SLOT (slotScDaemonError (QProcess::ProcessError))); scDaemon->start ( "scdaemon",arguments ); QTimer::singleShot ( 3000, this, SLOT ( slotCheckScDaemon() ) ); isScDaemonOk=false; @@ -8406,6 +8408,48 @@ void ONMainWindow::slotScDaemonFinished ( int , QProcess::ExitStatus ) slotStartPGPAuth(); } +void ONMainWindow::slotScDaemonError (QProcess::QProcessError error) { + QString main_text ("scdaemon "); + QString informative_text; + + switch (error) { + case QProcess::FailedToStart: main_text += tr ("failed to start."); + informative_text = tr ("Check whether the package providing \"scdaemon\" is installed.\n" + "The current search path is: "); + + QProcessEnvironment tmp_env = QProcessEnvironment::systemEnvironment (); + + if (!scDaemon->processEnvironment ().isEmpty ()) { + tmp_env = scDaemon->processEnvironment (); + } + + informative_text = tmp_env.value ("PATH", "unknown"); + break; + case QProcess::Crashed: main_text += tr ("started, but crashed."); + break; + case QProcess::Timedout: main_text += tr ("didn't start yet."); + informative_text = tr ("This error shouldn't come up."); + break; + case QProcess::WriteError: main_text += tr ("didn't accept a write operation."); + informative_text = tr ("It is probably not running correctly or crashed in-between."); + break; + case QProcess::ReadError: main_text = tr ("Unable to read from scdaemon."); + informative_text = tr ("It is probably not running correctly or crashed in-between."); + break; + case QProcess::UnknownError: + default: main_text += tr ("experienced an unknown error."); + } + + if (!informative_text.isEmpty ()) { + informative_text += "\n"; + } + + informative_text += tr ("X2Go Client will now terminate.\n" + "File a bug report as outlined on the <a href=\"http://wiki.x2go.org/doku.php/wiki:bugs\">bugs wiki page</a>."); + + show_RichText_ErrorMsgBox (main_text, informative_text); + closeClient (); +} void ONMainWindow::slotGpgError() diff --git a/src/onmainwindow.h b/src/onmainwindow.h index 7a2a806..18c0094 100644 --- a/src/onmainwindow.h +++ b/src/onmainwindow.h @@ -43,6 +43,7 @@ #include <QSystemTrayIcon> #include <QTranslator> #include <QLocale> +#include <QProcessEnvironment> #include "sshmasterconnection.h" #include "non_modal_messagebox.h" @@ -1115,6 +1116,7 @@ private slots: QProcess::ExitStatus exitStatus ); void slotScDaemonFinished ( int exitCode, QProcess::ExitStatus exitStatus ); + void slotScDaemonError (QProcess::ProcessError error); void slotGpgError(); void slotCheckScDaemon(); void slotGpgAgentFinished ( int exitCode, -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit f2034da2a6d1c912e089a3fd92e5a7ba21a4bb53 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 01:51:38 2015 +0200 onmainwindow.cpp: another typo fix. --- src/onmainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index d28e8b6..fb73f0a 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -8430,7 +8430,7 @@ void ONMainWindow::slotScDaemonFinished ( int , QProcess::ExitStatus ) slotStartPGPAuth(); } -void ONMainWindow::slotScDaemonError (QProcess::QProcessError error) { +void ONMainWindow::slotScDaemonError (QProcess::ProcessError error) { QString main_text ("scdaemon "); QString informative_text; -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 1deb01e06321524ca025bb52e0a4085f030e26a2 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 01:45:21 2015 +0200 x2goutils.h: add QMessageBox include, fixed compile error. --- debian/changelog | 1 + src/x2goutils.h | 1 + 2 files changed, 2 insertions(+) diff --git a/debian/changelog b/debian/changelog index bb4045a..1b55082 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low and close the client. - onmainwindow.cpp: manipulate PATH and append /usr/lib/gnupg2/ to it when starting scdaemon. Fixes: #882. + - x2goutils.h: add QMessageBox include, fixed compile error. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goutils.h b/src/x2goutils.h index 834705a..bede444 100644 --- a/src/x2goutils.h +++ b/src/x2goutils.h @@ -21,6 +21,7 @@ #include <QString> #include <QFont> +#include <QMessageBox> #define UNUSED(x) do { (void) x; } while (0) -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 89238d095d37971f4455762979762cec429bfcfb Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 01:48:46 2015 +0200 onmainwindow.cpp: fix typos leading to compile errors. --- debian/changelog | 1 + src/onmainwindow.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 1b55082..e758b98 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,6 +19,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - onmainwindow.cpp: manipulate PATH and append /usr/lib/gnupg2/ to it when starting scdaemon. Fixes: #882. - x2goutils.h: add QMessageBox include, fixed compile error. + - onmainwindow.cpp: fix typos leading to compile errors. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index b777eec..d28e8b6 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -8347,14 +8347,14 @@ void ONMainWindow::slotStartPGPAuth() QString new_path_value = ""; if (!old_path_value.isEmpty ()) { - new_path_value = old_path_value + path_env_separator + new_path_value = old_path_value + path_env_separator; } new_path_value += "/usr/lib/gnupg2/"; scdaemon_env.insert ("PATH", new_path_value); - scDaemon.setProcessEnvironment (scdaemon_env); + scDaemon->setProcessEnvironment (scdaemon_env); connect ( scDaemon,SIGNAL ( readyReadStandardError() ),this, SLOT ( slotScDaemonStdErr() ) ); -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 39eaa313df7242f972aea080fc91d02b63ccf833 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 02:15:03 2015 +0200 x2goutils.cpp: correct typo to fix compile errors. --- debian/changelog | 1 + src/x2goutils.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index ea97a70..ea77b8b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -23,6 +23,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - onmainwindow.cpp: add blocks to switch cases to fix a compile error. Also correctly append to informative_text on one occasion, instead of overwriting it. + - x2goutils.cpp: correct typo to fix compile errors. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goutils.cpp b/src/x2goutils.cpp index 3c37050..d6d8cd3 100644 --- a/src/x2goutils.cpp +++ b/src/x2goutils.cpp @@ -106,11 +106,11 @@ void show_RichText_Generic_MsgBox (QMessageBox::Icon icon, const QString &main_t } void show_RichText_WarningMsgBox (const QString &main_text, const QString &informative_text) { - show_RichText_Generic_MsgBox (QMessageBox::warning, main_text, informative_text); + show_RichText_Generic_MsgBox (QMessageBox::Warning, main_text, informative_text); } void show_RichText_ErrorMsgBox (const QString &main_text, const QString &informative_text) { - show_RichText_Generic_MsgBox (QMessageBox::Critical, main_text, informative_test); + show_RichText_Generic_MsgBox (QMessageBox::Critical, main_text, informative_text); } QString git_changelog_extract_commit_sha (const QString &gitlog) { -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 72bc4124e1fede24e5e7425dfaca90aa5618efb4 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 02:07:49 2015 +0200 onmainwindow.cpp: add blocks to switch cases to fix a compile error. Also correctly append to informative_text on one occasion, instead of overwriting it. --- debian/changelog | 3 +++ src/onmainwindow.cpp | 63 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/debian/changelog b/debian/changelog index e758b98..ea97a70 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,6 +20,9 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low starting scdaemon. Fixes: #882. - x2goutils.h: add QMessageBox include, fixed compile error. - onmainwindow.cpp: fix typos leading to compile errors. + - onmainwindow.cpp: add blocks to switch cases to fix a compile error. + Also correctly append to informative_text on one occasion, instead of + overwriting it. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index fb73f0a..4e6f017 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -8435,31 +8435,44 @@ void ONMainWindow::slotScDaemonError (QProcess::ProcessError error) { QString informative_text; switch (error) { - case QProcess::FailedToStart: main_text += tr ("failed to start."); - informative_text = tr ("Check whether the package providing \"scdaemon\" is installed.\n" - "The current search path is: "); - - QProcessEnvironment tmp_env = QProcessEnvironment::systemEnvironment (); - - if (!scDaemon->processEnvironment ().isEmpty ()) { - tmp_env = scDaemon->processEnvironment (); - } - - informative_text = tmp_env.value ("PATH", "unknown"); - break; - case QProcess::Crashed: main_text += tr ("started, but crashed."); - break; - case QProcess::Timedout: main_text += tr ("didn't start yet."); - informative_text = tr ("This error shouldn't come up."); - break; - case QProcess::WriteError: main_text += tr ("didn't accept a write operation."); - informative_text = tr ("It is probably not running correctly or crashed in-between."); - break; - case QProcess::ReadError: main_text = tr ("Unable to read from scdaemon."); - informative_text = tr ("It is probably not running correctly or crashed in-between."); - break; - case QProcess::UnknownError: - default: main_text += tr ("experienced an unknown error."); + case QProcess::FailedToStart: { + main_text += tr ("failed to start."); + informative_text = tr ("Check whether the package providing \"scdaemon\" is installed.\n" + "The current search path is: "); + + QProcessEnvironment tmp_env = QProcessEnvironment::systemEnvironment (); + + if (!scDaemon->processEnvironment ().isEmpty ()) { + tmp_env = scDaemon->processEnvironment (); + } + + informative_text += tmp_env.value ("PATH", "unknown"); + break; + } + case QProcess::Crashed: { + main_text += tr ("started, but crashed."); + break; + } + case QProcess::Timedout: { + main_text += tr ("didn't start yet."); + informative_text = tr ("This error shouldn't come up."); + break; + } + case QProcess::WriteError: { + main_text += tr ("didn't accept a write operation."); + informative_text = tr ("It is probably not running correctly or crashed in-between."); + break; + } + case QProcess::ReadError: { + main_text = tr ("Unable to read from scdaemon."); + informative_text = tr ("It is probably not running correctly or crashed in-between."); + break; + } + case QProcess::UnknownError: { + } + default: { + main_text += tr ("experienced an unknown error."); + } } if (!informative_text.isEmpty ()) { -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 47958468131c6497f30104c84c7a28462b9a82d8 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 02:37:51 2015 +0200 onmainwindow.cpp: add more newlines to scdaemon error output. Use trayQuit() method to really quit the client. --- debian/changelog | 2 ++ src/onmainwindow.cpp | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index b14e9da..9546e13 100644 --- a/debian/changelog +++ b/debian/changelog @@ -25,6 +25,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low overwriting it. - x2goutils.cpp: correct typo to fix compile errors. - onmainwindow.cpp: drop a redundant variable and fix empty env check. + - onmainwindow.cpp: add more newlines to scdaemon error output. Use + trayQuit() method to really quit the client. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index 3968ece..0202a12 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -8475,14 +8475,14 @@ void ONMainWindow::slotScDaemonError (QProcess::ProcessError error) { } if (!informative_text.isEmpty ()) { - informative_text += "\n"; + informative_text += "\n\n"; } - informative_text += tr ("X2Go Client will now terminate.\n" + informative_text += tr ("X2Go Client will now terminate.\n\n" "File a bug report as outlined on the <a href=\"http://wiki.x2go.org/doku.php/wiki:bugs\">bugs wiki page</a>."); show_RichText_ErrorMsgBox (main_text, informative_text); - closeClient (); + trayQuit (); } -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 8bd0f08ca23450621d82e3d73ee7e16e24d6c23f Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 03:01:31 2015 +0200 onmainwindow.cpp: add debugging output for new scdaemon PATH value. --- debian/changelog | 1 + src/onmainwindow.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/debian/changelog b/debian/changelog index 9546e13..03944c3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -27,6 +27,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - onmainwindow.cpp: drop a redundant variable and fix empty env check. - onmainwindow.cpp: add more newlines to scdaemon error output. Use trayQuit() method to really quit the client. + - onmainwindow.cpp: add debugging output for new scdaemon PATH value. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index 0202a12..2026bc3 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -8353,6 +8353,8 @@ void ONMainWindow::slotStartPGPAuth() scdaemon_env.insert ("PATH", new_path_value); + x2goDebug << "New PATH value for scdaemon: " << new_path_value; + scDaemon->setProcessEnvironment (scdaemon_env); connect ( scDaemon,SIGNAL ( readyReadStandardError() ),this, -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit cdbcf5c421510031ede175ba991ecdea310cd3f8 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 02:28:12 2015 +0200 onmainwindow.cpp: drop a redundant variable and fix empty env check. --- debian/changelog | 1 + src/onmainwindow.cpp | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index ea77b8b..b14e9da 100644 --- a/debian/changelog +++ b/debian/changelog @@ -24,6 +24,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low Also correctly append to informative_text on one occasion, instead of overwriting it. - x2goutils.cpp: correct typo to fix compile errors. + - onmainwindow.cpp: drop a redundant variable and fix empty env check. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index 4e6f017..3968ece 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -8343,11 +8343,10 @@ void ONMainWindow::slotStartPGPAuth() path_env_separator = ";"; #endif - QString old_path_value = scdaemon_env.value ("PATH", ""); - QString new_path_value = ""; + QString new_path_value = scdaemon_env.value ("PATH", ""); - if (!old_path_value.isEmpty ()) { - new_path_value = old_path_value + path_env_separator; + if (!new_path_value.isEmpty ()) { + new_path_value += path_env_separator; } new_path_value += "/usr/lib/gnupg2/"; @@ -8442,7 +8441,7 @@ void ONMainWindow::slotScDaemonError (QProcess::ProcessError error) { QProcessEnvironment tmp_env = QProcessEnvironment::systemEnvironment (); - if (!scDaemon->processEnvironment ().isEmpty ()) { + if (!(scDaemon->processEnvironment ().isEmpty ())) { tmp_env = scDaemon->processEnvironment (); } -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 2fa19557c81041744ef7ea89ec68c533fdd3a87c Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Jun 3 03:02:40 2015 +0200 onmainwindow.cpp: split up PATH value as printed in the error message box by a newline every 100 characters. Makes it look less ugly and fixes truncation issues. --- debian/changelog | 3 +++ src/onmainwindow.cpp | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 03944c3..2700616 100644 --- a/debian/changelog +++ b/debian/changelog @@ -28,6 +28,9 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - onmainwindow.cpp: add more newlines to scdaemon error output. Use trayQuit() method to really quit the client. - onmainwindow.cpp: add debugging output for new scdaemon PATH value. + - onmainwindow.cpp: split up PATH value as printed in the error message + box by a newline every 100 characters. Makes it look less ugly and fixes + truncation issues. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index 2026bc3..64448b5 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -8447,7 +8447,14 @@ void ONMainWindow::slotScDaemonError (QProcess::ProcessError error) { tmp_env = scDaemon->processEnvironment (); } - informative_text += tmp_env.value ("PATH", "unknown"); + QString path_val = tmp_env.value ("PATH", "unknown"); + + /* Add a newline every 100 characters. */ + for (std::size_t i = 100; i < path_val.size (); i += 100) { + path_val.insert (i, "\n"); + } + + informative_text += path_val; break; } case QProcess::Crashed: { -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 11a2b1d0ff561b0b362d5ce4db08ded4b02175d3 Author: Mihai Moldovan <ionic@ionic.de> Date: Sat Mar 14 22:21:34 2015 +0100 {unixhelper.{cpp,h},x2goclient.pro{maemo}}: add unixhelper stub. --- debian/changelog | 1 + src/unixhelper.cpp | 23 +++++++++++++++++++++++ src/unixhelper.h | 29 +++++++++++++++++++++++++++++ x2goclient.pro | 6 ++++-- x2goclient.pro.maemo | 6 ++++-- 5 files changed, 61 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 2700616..50f0559 100644 --- a/debian/changelog +++ b/debian/changelog @@ -31,6 +31,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - onmainwindow.cpp: split up PATH value as printed in the error message box by a newline every 100 characters. Makes it look less ugly and fixes truncation issues. + - {unixhelper.{cpp,h},x2goclient.pro{,.maemo}}: add unixhelper stub. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp new file mode 100644 index 0000000..221bdb2 --- /dev/null +++ b/src/unixhelper.cpp @@ -0,0 +1,23 @@ +/*************************************************************************** + * Copyright (C) 2015 by Mihai Moldovan <ionic@ionic.de> +49 721 14595728 * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifdef Q_OS_UNIX + + +#endif /* defined (Q_OS_UNIX) */ diff --git a/src/unixhelper.h b/src/unixhelper.h new file mode 100644 index 0000000..31d983e --- /dev/null +++ b/src/unixhelper.h @@ -0,0 +1,29 @@ +/*************************************************************************** + * Copyright (C) 2015 by Mihai Moldovan <ionic@ionic.de> +49 721 14595728 * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifdef Q_OS_UNIX + +#ifndef UNIXHELPER_H +#define UNIXHELPER_H + + + +#endif /* !defined (UNIXHELPER_H) */ + +#endif /* defined (Q_OS_UNIX) */ diff --git a/x2goclient.pro b/x2goclient.pro index ccf8fa7..e5428ce 100644 --- a/x2goclient.pro +++ b/x2goclient.pro @@ -79,7 +79,8 @@ HEADERS += src/configdialog.h \ src/folderbutton.h \ src/folderexplorer.h \ src/non_modal_messagebox.h \ - src/help.h + src/help.h \ + src/unixhelper.h SOURCES += src/sharewidget.cpp \ src/settingswidget.cpp \ @@ -122,7 +123,8 @@ SOURCES += src/sharewidget.cpp \ src/folderbutton.cpp \ src/folderexplorer.cpp \ src/non_modal_messagebox.cpp \ - src/help.cpp + src/help.cpp \ + src/unixhelper.cpp LIBS += -lssh win32:LIBS += -lAdvAPI32 -lshell32 -lUser32 diff --git a/x2goclient.pro.maemo b/x2goclient.pro.maemo index ac2eacf..63cc3d8 100644 --- a/x2goclient.pro.maemo +++ b/x2goclient.pro.maemo @@ -35,7 +35,8 @@ HEADERS += src/configdialog.h \ src/settingswidget.h \ src/sharewidget.h \ src/clicklineedit.h \ - src/help.h + src/help.h \ + src/unixhelper.h SOURCES += src/sharewidget.cpp \ src/settingswidget.cpp \ @@ -62,7 +63,8 @@ SOURCES += src/sharewidget.cpp \ src/embedwidget.cpp \ src/wapi.cpp \ src/clicklineedit.cpp \ - src/help.cpp + src/help.cpp \ + src/unixhelper.cpp TEMPLATE = app TARGET = -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 35b51ea28689398e94f62499223347c6f05707c8 Author: Mihai Moldovan <ionic@ionic.de> Date: Sat Mar 14 23:57:49 2015 +0100 unixhelper.{cpp,h}: implement cleanup program for process group. --- debian/changelog | 1 + src/unixhelper.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/unixhelper.h | 9 +++++++++ 3 files changed, 48 insertions(+) diff --git a/debian/changelog b/debian/changelog index 50f0559..cf58a68 100644 --- a/debian/changelog +++ b/debian/changelog @@ -32,6 +32,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low box by a newline every 100 characters. Makes it look less ugly and fixes truncation issues. - {unixhelper.{cpp,h},x2goclient.pro{,.maemo}}: add unixhelper stub. + - unixhelper.{cpp,h}: implement cleanup program for process group. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index 221bdb2..545c2c1 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -19,5 +19,43 @@ #ifdef Q_OS_UNIX +#include <csignal> +#include <unistd.h> +#include <iostream> +#include <cstring> +#include <cerrno> +#include <cstdlib> + +#include "unixhelper.h" + +void unixhelper::kill_pgroup (int signal) { + if (SIGHUP == signal) { + /* Try to kill via SIGTERM first. */ + if (0 != killpg (getpgrp (), SIGTERM)) { + std::cerr << "WARNING: unable to send SIGTERM to process group: " << std::strerror (errno) << std::endl; + } + + /* Grant a grace period of (at least) 5 seconds. */ + sleep (5); + + /* Don't handle any errors here, because we die anyway. */ + killpg (getpgrp (), SIGKILL); + } +} + + +int unixhelper::unix_cleanup () { + if (SIG_ERR == std::signal (SIGTERM, SIG_IGN)) { + std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl; + std::exit (1); + } + + std::signal (SIGHUP, kill_pgroup); + + /* Sleep forever... at least one second in each run. */ + for (;;) { + sleep (1); + } +} #endif /* defined (Q_OS_UNIX) */ diff --git a/src/unixhelper.h b/src/unixhelper.h index 31d983e..fab611e 100644 --- a/src/unixhelper.h +++ b/src/unixhelper.h @@ -22,7 +22,16 @@ #ifndef UNIXHELPER_H #define UNIXHELPER_H +class unixhelper { + public: + unixhelper () {} + ~unixhelper () {} + unix_cleanup (); + private: + unixhelper (const unixhelper &other); + void kill_pgroup (int signal); +}; #endif /* !defined (UNIXHELPER_H) */ -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit b60e6337515a421cecb10dd1c1c4d2e9d04e72e9 Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 20:27:23 2015 +0100 x2goclient.cpp: add fork_helper() function to start up the UNIX cleanup helper. --- debian/changelog | 2 ++ src/x2goclient.cpp | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/debian/changelog b/debian/changelog index 4c02d04..909f280 100644 --- a/debian/changelog +++ b/debian/changelog @@ -34,6 +34,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - {unixhelper.{cpp,h},x2goclient.pro{,.maemo}}: add unixhelper stub. - unixhelper.{cpp,h}: implement cleanup program for process group. - x2goclient.cpp: wrap X2Go Client main function and use that. + - x2goclient.cpp: add fork_helper() function to start up the UNIX cleanup + helper. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index 80fd967..f285f40 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -15,12 +15,45 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * ***************************************************************************/ +#include <iostream> +#include <unistd.h> +#include <cstring> +#include <cerrno> +#include <cstdlib> + +#include "unixhelper.h" #include "ongetpass.h" int wrap_x2go_main (int argc, char **argv) { return (x2goMain (argc, argv)); } +#ifdef Q_OS_UNIX +int fork_helper (int argc, char **argv) { + /* Fork off to start helper process. */ + pid_t tmp_pid = fork (); + + /* Child. */ + if (0 == tmp_pid) { + /* Starting unixhelper. */ + unixhelper cleanup_helper (); + cleanup_helper.unix_cleanup (); + } + /* Error. */ + else if (-1 == tmp_pid) { + std::cerr << "Unable to create a new process for the UNIX cleanup watchdog: " << std::strerror (errno) << "\n"; + std::cerr << "Terminating. Please report a bug, refer to this documentation: http://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; + + std::exit (EXIT_FAILURE); + } + /* Parent. */ + else { + /* Start real X2Go Client. */ + return (wrap_x2go_main (argc, argv)); + } +} +#endif /* defined (Q_OS_UNIX) */ + int main(int argc, char *argv[]) { return (wrap_x2go_main (argc, argv)); -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 1de05261ad9fa8415817b93070c7389b08cffd51 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun Mar 15 00:03:42 2015 +0100 x2goclient.cpp: wrap X2Go Client main function and use that. --- debian/changelog | 1 + src/x2goclient.cpp | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index cf58a68..4c02d04 100644 --- a/debian/changelog +++ b/debian/changelog @@ -33,6 +33,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low truncation issues. - {unixhelper.{cpp,h},x2goclient.pro{,.maemo}}: add unixhelper stub. - unixhelper.{cpp,h}: implement cleanup program for process group. + - x2goclient.cpp: wrap X2Go Client main function and use that. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index a619cd7..80fd967 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -17,7 +17,11 @@ #include "ongetpass.h" +int wrap_x2go_main (int argc, char **argv) { + return (x2goMain (argc, argv)); +} + int main(int argc, char *argv[]) { - return x2goMain(argc,argv); + return (wrap_x2go_main (argc, argv)); } -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 928bd62ed96ee610cc20af87b0a3cca9e73cc3eb Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 20:30:49 2015 +0100 x2goclient.cpp: use setsid() on UNIX to become session and process group leader. If that fails, fork, terminate the parent and execute setsid() in the child process. Use fork_helper() to start the UNIX cleanup helper in a child process and continue with the main application in the parent. --- debian/changelog | 4 ++++ src/x2goclient.cpp | 43 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 909f280..3ad66e9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -36,6 +36,10 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - x2goclient.cpp: wrap X2Go Client main function and use that. - x2goclient.cpp: add fork_helper() function to start up the UNIX cleanup helper. + - x2goclient.cpp: use setsid() on UNIX to become session and process group + leader. If that fails, fork, terminate the parent and execute setsid() + in the child process. Use fork_helper() to start the UNIX cleanup helper + in a child process and continue with the main application in the parent. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index f285f40..1a57178 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -54,7 +54,44 @@ int fork_helper (int argc, char **argv) { } #endif /* defined (Q_OS_UNIX) */ -int main(int argc, char *argv[]) -{ - return (wrap_x2go_main (argc, argv)); +int main (int argc, char **argv) { +#ifdef Q_OS_UNIX + if (-1 == setsid ()) { + std::cerr << "Unable to create a new process session: " << std::strerror (errno) << "\n"; + + std::cerr << "Trying to fork." << std::endl; + pid_t tmp_pid = fork (); + + /* Child. */ + if (0 == tmp_pid) { + /* Trying to get a new session and become session + process group leader again. */ + if (-1 == setsid ()) { + std::cerr << "Child was unable to create a new process session: " << std::strerror (errno) << "\n"; + std::cerr << "Terminating. Please report a bug, refer to this documentation: http://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; + + std::exit (EXIT_FAILURE); + } + + /* By now, we should be session and group leader. */ + return (fork_helper (argc, argv)); + } + /* Error. */ + else if (-1 == tmp_pid) { + std::cerr << "Error while forking: " << std::strerror (errno) << std::endl; + std::cerr << "Terminating. Please report a bug, refer to this documentation: http://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; + + std::edit (EXIT_FAILURE); + } + /* Parent. Just die here. */ + else { + std::exit (EXIT_SUCCESS); + } + } + else { + /* setsid() worked. Starting helper and main program. */ + return (fork_helper (argc, argv)); + } +#else /* defined (Q_OS_UNIX) */ + return (wrap_x2go_main (argc, argv)); +#endif /* defined (Q_OS_UNIX) */ } -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit a726e345ff4bb9880d2aefd206eb58c99eadfdfb Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 20:37:43 2015 +0100 x2goclient.cpp: add legacy <sys/types.h> header needed for old operating systems. --- debian/changelog | 2 ++ src/x2goclient.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/debian/changelog b/debian/changelog index d0d2fb7..1c17b1e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -41,6 +41,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low in the child process. Use fork_helper() to start the UNIX cleanup helper in a child process and continue with the main application in the parent. - x2goclient.cpp: add myself to copyright header. + - x2goclient.cpp: add legacy <sys/types.h> header needed for old operating + systems. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index c242ad2..58f80f0 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -17,6 +17,7 @@ ***************************************************************************/ #include <iostream> +#include <sys/types.h> #include <unistd.h> #include <cstring> #include <cerrno> -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit d11606f3439e2be7b3955f4d323ddf21ed934f1a Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 20:36:35 2015 +0100 x2goclient.cpp: add myself to copyright header. --- debian/changelog | 1 + src/x2goclient.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/debian/changelog b/debian/changelog index 3ad66e9..d0d2fb7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -40,6 +40,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low leader. If that fails, fork, terminate the parent and execute setsid() in the child process. Use fork_helper() to start the UNIX cleanup helper in a child process and continue with the main application in the parent. + - x2goclient.cpp: add myself to copyright header. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index 1a57178..c242ad2 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -1,6 +1,7 @@ /************************************************************************** * Copyright (C) 2005-2015 by Oleksandr Shneyder * * o.shneyder@phoca-gmbh.de * +* Copyright (C) 2015 by Mihai Moldovan <ionic@ionic.de> * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit b08be3bb73d6dcf4305615f7c929b1849b329920 Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 21:13:05 2015 +0100 unixhelper.{h,cpp}: also include <QtCore/qglobal.h> to have Q_OS_UNIX defined on UNIX-based platforms. Move guards around. --- debian/changelog | 2 ++ src/unixhelper.cpp | 5 ++++- src/unixhelper.h | 9 ++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 2966970..95695c3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -44,6 +44,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - x2goclient.cpp: add legacy <sys/types.h> header needed for old operating systems. - x2goclient.cpp: fix std::edit -> std::exit typo. + - unixhelper.{h,cpp}: also include <QtCore/qglobal.h> to have Q_OS_UNIX + defined on UNIX-based platforms. Move guards around. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index 545c2c1..b326f35 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -17,6 +17,10 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +/* Necessary for Q_OS_UNIX! */ + +#include "unixhelper.h" + #ifdef Q_OS_UNIX #include <csignal> @@ -26,7 +30,6 @@ #include <cerrno> #include <cstdlib> -#include "unixhelper.h" void unixhelper::kill_pgroup (int signal) { if (SIGHUP == signal) { diff --git a/src/unixhelper.h b/src/unixhelper.h index fab611e..27cb735 100644 --- a/src/unixhelper.h +++ b/src/unixhelper.h @@ -17,11 +17,14 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifdef Q_OS_UNIX #ifndef UNIXHELPER_H #define UNIXHELPER_H +#include <QtCore/qglobal.h> + +#ifdef Q_OS_UNIX + class unixhelper { public: unixhelper () {} @@ -33,6 +36,6 @@ class unixhelper { void kill_pgroup (int signal); }; -#endif /* !defined (UNIXHELPER_H) */ - #endif /* defined (Q_OS_UNIX) */ + +#endif /* !defined (UNIXHELPER_H) */ -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit f26705a0565157f7a90a44021ec41e9da3459b0b Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 21:17:49 2015 +0100 unixhelper.h: forgot to declare type of unix_cleanup() function. --- debian/changelog | 1 + src/unixhelper.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 95695c3..9972391 100644 --- a/debian/changelog +++ b/debian/changelog @@ -46,6 +46,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - x2goclient.cpp: fix std::edit -> std::exit typo. - unixhelper.{h,cpp}: also include <QtCore/qglobal.h> to have Q_OS_UNIX defined on UNIX-based platforms. Move guards around. + - unixhelper.h: forgot to declare type of unix_cleanup() function. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.h b/src/unixhelper.h index 27cb735..9069b5d 100644 --- a/src/unixhelper.h +++ b/src/unixhelper.h @@ -29,7 +29,7 @@ class unixhelper { public: unixhelper () {} ~unixhelper () {} - unix_cleanup (); + int unix_cleanup (); private: unixhelper (const unixhelper &other); -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit d4f6983bd3448765cea3450e3e61ad0406f8b618 Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 20:45:24 2015 +0100 x2goclient.cpp: fix std::edit -> std::exit typo. --- debian/changelog | 1 + src/x2goclient.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 1c17b1e..2966970 100644 --- a/debian/changelog +++ b/debian/changelog @@ -43,6 +43,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - x2goclient.cpp: add myself to copyright header. - x2goclient.cpp: add legacy <sys/types.h> header needed for old operating systems. + - x2goclient.cpp: fix std::edit -> std::exit typo. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index 58f80f0..dd9e489 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -82,7 +82,7 @@ int main (int argc, char **argv) { std::cerr << "Error while forking: " << std::strerror (errno) << std::endl; std::cerr << "Terminating. Please report a bug, refer to this documentation: http://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; - std::edit (EXIT_FAILURE); + std::exit (EXIT_FAILURE); } /* Parent. Just die here. */ else { -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 0c652a8c65eaf356449867e150baf240be0e48e6 Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 21:38:10 2015 +0100 unixhelper.{cpp,h},x2goclient.cpp}: unixhelper should really be a (module) namespace, not a class. --- debian/changelog | 2 ++ src/unixhelper.cpp | 43 ++++++++++++++++++++++--------------------- src/unixhelper.h | 14 ++++---------- src/x2goclient.cpp | 3 +-- 4 files changed, 29 insertions(+), 33 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9972391..f12c41e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -47,6 +47,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - unixhelper.{h,cpp}: also include <QtCore/qglobal.h> to have Q_OS_UNIX defined on UNIX-based platforms. Move guards around. - unixhelper.h: forgot to declare type of unix_cleanup() function. + - {unixhelper.{cpp,h},x2goclient.cpp}: unixhelper should really be a + (module) namespace, not a class. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index b326f35..b0729c6 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -30,34 +30,35 @@ #include <cerrno> #include <cstdlib> +namespace unixhelper { + void kill_pgroup (int signal) { + if (SIGHUP == signal) { + /* Try to kill via SIGTERM first. */ + if (0 != killpg (getpgrp (), SIGTERM)) { + std::cerr << "WARNING: unable to send SIGTERM to process group: " << std::strerror (errno) << std::endl; + } -void unixhelper::kill_pgroup (int signal) { - if (SIGHUP == signal) { - /* Try to kill via SIGTERM first. */ - if (0 != killpg (getpgrp (), SIGTERM)) { - std::cerr << "WARNING: unable to send SIGTERM to process group: " << std::strerror (errno) << std::endl; - } - - /* Grant a grace period of (at least) 5 seconds. */ - sleep (5); + /* Grant a grace period of (at least) 5 seconds. */ + sleep (5); - /* Don't handle any errors here, because we die anyway. */ - killpg (getpgrp (), SIGKILL); + /* Don't handle any errors here, because we die anyway. */ + killpg (getpgrp (), SIGKILL); + } } -} -int unixhelper::unix_cleanup () { - if (SIG_ERR == std::signal (SIGTERM, SIG_IGN)) { - std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl; - std::exit (1); - } + int unix_cleanup () { + if (SIG_ERR == std::signal (SIGTERM, SIG_IGN)) { + std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl; + std::exit (1); + } - std::signal (SIGHUP, kill_pgroup); + std::signal (SIGHUP, kill_pgroup); - /* Sleep forever... at least one second in each run. */ - for (;;) { - sleep (1); + /* Sleep forever... at least one second in each run. */ + for (;;) { + sleep (1); + } } } diff --git a/src/unixhelper.h b/src/unixhelper.h index 9069b5d..fe86017 100644 --- a/src/unixhelper.h +++ b/src/unixhelper.h @@ -25,16 +25,10 @@ #ifdef Q_OS_UNIX -class unixhelper { - public: - unixhelper () {} - ~unixhelper () {} - int unix_cleanup (); - - private: - unixhelper (const unixhelper &other); - void kill_pgroup (int signal); -}; +namespace unixhelper { + int unix_cleanup (); + void kill_pgroup (int signal); +} #endif /* defined (Q_OS_UNIX) */ diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index dd9e489..005d819 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -38,8 +38,7 @@ int fork_helper (int argc, char **argv) { /* Child. */ if (0 == tmp_pid) { /* Starting unixhelper. */ - unixhelper cleanup_helper (); - cleanup_helper.unix_cleanup (); + unixhelper::unix_cleanup (); } /* Error. */ else if (-1 == tmp_pid) { -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 87d56d7341de4a9629e2f43eff7d77cb76d0323e Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 22:14:46 2015 +0100 x2goclient.cpp: return return value of unixhelper::unix_cleanup(). --- debian/changelog | 1 + src/x2goclient.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 1e262a5..f82d6e0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -50,6 +50,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - {unixhelper.{cpp,h},x2goclient.cpp}: unixhelper should really be a (module) namespace, not a class. - unixhelper.{cpp,h}: add documentation/comments. + - x2goclient.cpp: return return value of unixhelper::unix_cleanup(). -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index de3b7c9..4558784 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -38,7 +38,7 @@ int fork_helper (int argc, char **argv) { /* Child. */ if (0 == tmp_pid) { /* Starting unixhelper. */ - unixhelper::unix_cleanup (); + return (unixhelper::unix_cleanup ()); /* Anything here shall be unreachable. */ } -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 2479cd944f8de5b5505277615c830a1b8ecf6da2 Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 22:04:19 2015 +0100 unixhelper.{cpp,h}: add documentation/comments. --- debian/changelog | 1 + src/unixhelper.cpp | 4 ++++ src/unixhelper.h | 24 ++++++++++++++++++++++++ src/x2goclient.cpp | 2 ++ 4 files changed, 31 insertions(+) diff --git a/debian/changelog b/debian/changelog index f12c41e..1e262a5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -49,6 +49,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - unixhelper.h: forgot to declare type of unix_cleanup() function. - {unixhelper.{cpp,h},x2goclient.cpp}: unixhelper should really be a (module) namespace, not a class. + - unixhelper.{cpp,h}: add documentation/comments. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index b0729c6..2ad0740 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -30,6 +30,8 @@ #include <cerrno> #include <cstdlib> +/* For documentation please see unixhelper.h. */ + namespace unixhelper { void kill_pgroup (int signal) { if (SIGHUP == signal) { @@ -51,6 +53,8 @@ namespace unixhelper { if (SIG_ERR == std::signal (SIGTERM, SIG_IGN)) { std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl; std::exit (1); + + /* Anything here shall be unreachable. */ } std::signal (SIGHUP, kill_pgroup); diff --git a/src/unixhelper.h b/src/unixhelper.h index fe86017..a00d21b 100644 --- a/src/unixhelper.h +++ b/src/unixhelper.h @@ -26,7 +26,31 @@ #ifdef Q_OS_UNIX namespace unixhelper { + /* + * TODO: Unblocks all signals and + * installs a signal handler for SIGHUP, which calls kill_pgroup. + * + * TODO: Should signal unblocking or + * installing the signal handler fail, an emergency exit is performed + * and the whole process group killed. + * + * Loops indefinitely afterwards. + */ int unix_cleanup (); + + /* + * Kills the whole process group. + * First, SIGTERM is sent to the group. + * A 5 seconds grace period is granted to make sure + * processes exit cleanly on their own. + * Lastly, SIGKILL is sent to the group -- which also + * implies the demise of this program. + * + * signal may be any of: + * * -1 to indicate an error leading to emergency termination + * * SIGHUP as the standard signal that is sent when the + * group leeader dies + */ void kill_pgroup (int signal); } diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index 005d819..de3b7c9 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -39,6 +39,8 @@ int fork_helper (int argc, char **argv) { if (0 == tmp_pid) { /* Starting unixhelper. */ unixhelper::unix_cleanup (); + + /* Anything here shall be unreachable. */ } /* Error. */ else if (-1 == tmp_pid) { -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit e929a4a0be375c60ecd8e432b4ea29220792aa93 Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 22:15:58 2015 +0100 unixhelper.cpp: kill process group on error. --- debian/changelog | 1 + src/unixhelper.cpp | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index f82d6e0..2ac4de3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -51,6 +51,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low (module) namespace, not a class. - unixhelper.{cpp,h}: add documentation/comments. - x2goclient.cpp: return return value of unixhelper::unix_cleanup(). + - unixhelper.cpp: kill process group on error. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index 2ad0740..d9ef3d7 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -28,13 +28,17 @@ #include <iostream> #include <cstring> #include <cerrno> -#include <cstdlib> /* For documentation please see unixhelper.h. */ namespace unixhelper { void kill_pgroup (int signal) { - if (SIGHUP == signal) { + if ((SIGHUP == signal) || (-1 == signal)) { + if (-1 == signal) { + std::cerr << "ERROR: emergency exit due to previous error(s)." << "\n"; + std::cerr << "Please report a bug, refer to this documentation: http://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; + } + /* Try to kill via SIGTERM first. */ if (0 != killpg (getpgrp (), SIGTERM)) { std::cerr << "WARNING: unable to send SIGTERM to process group: " << std::strerror (errno) << std::endl; @@ -52,7 +56,7 @@ namespace unixhelper { int unix_cleanup () { if (SIG_ERR == std::signal (SIGTERM, SIG_IGN)) { std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl; - std::exit (1); + kill_pgroup (-1); /* Anything here shall be unreachable. */ } -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 74a935cea07199e461be0fed316e18eeb5f7af60 Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 22:42:14 2015 +0100 unixhelper.{cpp,h}: implement signal unblocking in unixhelper::unix_cleanup(). Update documentation. --- debian/changelog | 2 ++ src/unixhelper.cpp | 20 ++++++++++++++++++++ src/unixhelper.h | 10 +++++----- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index 2ac4de3..834df4f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -52,6 +52,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - unixhelper.{cpp,h}: add documentation/comments. - x2goclient.cpp: return return value of unixhelper::unix_cleanup(). - unixhelper.cpp: kill process group on error. + - unixhelper.{cpp,h}: implement signal unblocking in + unixhelper::unix_cleanup(). Update documentation. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index d9ef3d7..1877890 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -54,6 +54,26 @@ namespace unixhelper { int unix_cleanup () { + /* + * Unblock all signals first. + * Signal blocks are inherited, so you never you what is currently set. + */ + sigset_t empty_set; + if (0 != sigemptyset (&empty_set)) { + std::cerr << "Unable to fetch empty signal set: " << std::strerror (errno) << std::endl; + kill_pgroup (-1); + + /* Anything here shall be unreachable. */ + } + + if (0 != sigprocmask (SIG_SETMASK, &empty_set, NULL)) { + std::cerr << "Unable to set empty signal set: " << std::strerror (errno) << std::endl; + kill_pgroup (-1); + + /* Anything here shall be unreachable. */ + } + + /* Set up signal handler to ignore SIGTERM. */ if (SIG_ERR == std::signal (SIGTERM, SIG_IGN)) { std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl; kill_pgroup (-1); diff --git a/src/unixhelper.h b/src/unixhelper.h index a00d21b..7ca8b43 100644 --- a/src/unixhelper.h +++ b/src/unixhelper.h @@ -27,12 +27,12 @@ namespace unixhelper { /* - * TODO: Unblocks all signals and - * installs a signal handler for SIGHUP, which calls kill_pgroup. + * Unblocks all signals and installs a signal handler for SIGHUP, + * which calls kill_pgroup. * - * TODO: Should signal unblocking or - * installing the signal handler fail, an emergency exit is performed - * and the whole process group killed. + * Should signal unblocking or installing the signal handler fail, + * an emergency exit is performed and + * the whole process group killed. * * Loops indefinitely afterwards. */ -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 300acf1106a374ff8e7769109c35825561448ea6 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Mar 18 01:04:33 2015 +0100 x2goclient.cpp: don't start the UNIX cleanup helper process right after forking. Introduce a new command line option --unixhelper and re-execute the main binary with this new option to indicate that the UNIX cleanup helper tool is requested. It is necessary to call exec() after fork on virtually all operating system, especially on OS X. --- debian/changelog | 5 ++++ src/x2goclient.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/debian/changelog b/debian/changelog index bda358d..7cba924 100644 --- a/debian/changelog +++ b/debian/changelog @@ -59,6 +59,11 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low and we certainly do not need to fork to force it to succeed. Whether we are a process group leader already or become one doesn't matter, if the end result is that we are process group leader. + - x2goclient.cpp: don't start the UNIX cleanup helper process right after + forking, but introduce a new command line option --unixhelper and + re-execute the main binary with this new option to indicate that the + UNIX cleanup helper tool is requested. It is necessary to call exec() + after fork on virtually all operating system, especially on OS X. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index f7f7c81..2aff41f 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -22,6 +22,10 @@ #include <cstring> #include <cerrno> #include <cstdlib> +#include <string> +#include <algorithm> +#include <cctype> +#include <vector> #include "unixhelper.h" #include "ongetpass.h" @@ -38,7 +42,28 @@ int fork_helper (int argc, char **argv) { /* Child. */ if (0 == tmp_pid) { /* Starting unixhelper. */ - return (unixhelper::unix_cleanup ()); + std::vector<std::string> new_argv; + new_argv.push (std::string (argv[0])); + new_argv.push ("--unixhelper"); + + std::vector<const char *> new_argv_c_str; + for (const_iterator it = new_argv.begin (); it != new_argv.end (); ++it) { + new_argv_c_str.push ((*it).c_str ()); + } + new_argv_c_str.push (""); + + if (0 != execv (new_argv_c_str.data (), new_argv_c_str.data ())) { + std::cerr << "Failed to re-execute process as UNIX cleanup helper tool: " << std::strerror (errno) << "\n" + << "Terminating and killing parent." << "\n" + << "Please report a bug, refer to this documentation: http://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; + + pid_t parent_pid = getppid (); + if (0 != kill (parent_pid, SIGTERM)) { + std::cerr << "Failed to kill parent process: " << std::strerror (errno) << std::endl; + } + + std::exit (EXIT_FAILURE); + } /* Anything here shall be unreachable. */ } @@ -59,15 +84,35 @@ int fork_helper (int argc, char **argv) { int main (int argc, char **argv) { #ifdef Q_OS_UNIX - /* - * setsid() may succeed and we become a session and process - * group leader, or it may fail indicating that we already - * are a process group leader. Either way is fine. - */ - setsid (); - - /* We should be process group leader by now. */ - return (fork_helper (argc, argv)); + /* Scan program arguments for --unixhelper flag. */ + bool unix_helper_request = 0; + for (int i = 0; i < argc; ++i) { + std::string cur_arg (argv[i]); + + /* Make the current argument lowercase. */ + std::transform (cur_arg.begin (), cur_arg.end (), cur_arg.begin (), std::tolower); + + if ((!cur_arg.empty ()) && (cur_arg.compare ("--unixhelper"))) { + unix_helper_request = 1; + break; + } + } + + if (unix_helper_request) { + /* We were instructed to start as the UNIX cleanup helper tool. */ + return (unixhelper::unix_cleanup ()); + } + else { + /* + * setsid() may succeed and we become a session and process + * group leader, or it may fail indicating that we already + * are a process group leader. Either way is fine. + */ + setsid (); + + /* We should be process group leader by now. */ + return (fork_helper (argc, argv)); + } #else /* defined (Q_OS_UNIX) */ return (wrap_x2go_main (argc, argv)); #endif /* defined (Q_OS_UNIX) */ -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit bd7dc0fa7f270d39a68f9489365cdb487ab475fe Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 23:41:12 2015 +0100 x2goclient.cpp: clean up. We don't care if setsid() fails or succeeds and we certainly do not need to fork to force it to succeed. Whether we are a process group leader already or become one doesn't matter, if the end result is that we are process group leader. --- debian/changelog | 4 ++++ src/x2goclient.cpp | 42 ++++++++---------------------------------- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/debian/changelog b/debian/changelog index 8a5bfcb..bda358d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -55,6 +55,10 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - unixhelper.{cpp,h}: implement signal unblocking in unixhelper::unix_cleanup(). Update documentation. - unixhelper.cpp: port from std::signal() to sigactio(). Handle errors. + - x2goclient.cpp: clean up. We don't care if setsid() fails or succeeds + and we certainly do not need to fork to force it to succeed. Whether we + are a process group leader already or become one doesn't matter, if the + end result is that we are process group leader. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index 4558784..f7f7c81 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -59,41 +59,15 @@ int fork_helper (int argc, char **argv) { int main (int argc, char **argv) { #ifdef Q_OS_UNIX - if (-1 == setsid ()) { - std::cerr << "Unable to create a new process session: " << std::strerror (errno) << "\n"; + /* + * setsid() may succeed and we become a session and process + * group leader, or it may fail indicating that we already + * are a process group leader. Either way is fine. + */ + setsid (); - std::cerr << "Trying to fork." << std::endl; - pid_t tmp_pid = fork (); - - /* Child. */ - if (0 == tmp_pid) { - /* Trying to get a new session and become session + process group leader again. */ - if (-1 == setsid ()) { - std::cerr << "Child was unable to create a new process session: " << std::strerror (errno) << "\n"; - std::cerr << "Terminating. Please report a bug, refer to this documentation: http://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; - - std::exit (EXIT_FAILURE); - } - - /* By now, we should be session and group leader. */ - return (fork_helper (argc, argv)); - } - /* Error. */ - else if (-1 == tmp_pid) { - std::cerr << "Error while forking: " << std::strerror (errno) << std::endl; - std::cerr << "Terminating. Please report a bug, refer to this documentation: http://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; - - std::exit (EXIT_FAILURE); - } - /* Parent. Just die here. */ - else { - std::exit (EXIT_SUCCESS); - } - } - else { - /* setsid() worked. Starting helper and main program. */ - return (fork_helper (argc, argv)); - } + /* We should be process group leader by now. */ + return (fork_helper (argc, argv)); #else /* defined (Q_OS_UNIX) */ return (wrap_x2go_main (argc, argv)); #endif /* defined (Q_OS_UNIX) */ -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 80ab63f2de6267091f61f797ce10bbb99f89111a Author: Mihai Moldovan <ionic@ionic.de> Date: Mon Mar 16 23:08:13 2015 +0100 unixhelper.cpp: port from std::signal() to sigaction(). Handle errors. --- debian/changelog | 1 + src/unixhelper.cpp | 33 ++++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/debian/changelog b/debian/changelog index 834df4f..8a5bfcb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -54,6 +54,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - unixhelper.cpp: kill process group on error. - unixhelper.{cpp,h}: implement signal unblocking in unixhelper::unix_cleanup(). Update documentation. + - unixhelper.cpp: port from std::signal() to sigactio(). Handle errors. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index 1877890..2b057ff 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -73,15 +73,34 @@ namespace unixhelper { /* Anything here shall be unreachable. */ } - /* Set up signal handler to ignore SIGTERM. */ - if (SIG_ERR == std::signal (SIGTERM, SIG_IGN)) { - std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl; - kill_pgroup (-1); - - /* Anything here shall be unreachable. */ + { + struct sigaction sig_action; + sig_action.sa_handler = SIG_IGN; + sig_action.sa_mask = empty_set; + sig_action.sa_flags = SA_RESTART; + + /* Set up signal handler to ignore SIGTERM. */ + if (0 != sigaction (SIGTERM, &sig_action, NULL)) { + std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl; + kill_pgroup (-1); + + /* Anything here shall be unreachable. */ + } } - std::signal (SIGHUP, kill_pgroup); + { + struct sigaction sig_action; + sig_action.sa_handler = kill_pgroup; + sig_action.sa_mask = empty_set; + sig_action.sa_flags = SA_RESTART; + + if (0 != sigaction (SIGHUP, &sig_action, NULL)) { + std::cerr << "Unable to set up signal handler for SIGHUP: " << std::strerror (errno) << std::endl; + kill_pgroup (-1); + + /* Anything here shall be unreachable. */ + } + } /* Sleep forever... at least one second in each run. */ for (;;) { -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 15a63fee0c0aa0cc106073c06087d4ab4995c1e3 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Mar 18 04:39:43 2015 +0100 x2goclient.cpp: fix string comparison. --- debian/changelog | 1 + src/x2goclient.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 2af44bf..675af75 100644 --- a/debian/changelog +++ b/debian/changelog @@ -65,6 +65,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low UNIX cleanup helper tool is requested. It is necessary to call exec() after fork on virtually all operating system, especially on OS X. - x2goclient.cpp: fix compile problems introduced with the last commit. + - x2goclient.cpp: fix string comparison. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index cd13406..c695e26 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -101,7 +101,7 @@ int main (int argc, char **argv) { /* Make the current argument lowercase. */ std::transform (cur_arg.begin (), cur_arg.end (), cur_arg.begin (), ::tolower); - if ((!cur_arg.empty ()) && (cur_arg.compare ("--unixhelper"))) { + if ((!cur_arg.empty ()) && (cur_arg.compare ("--unixhelper") == 0)) { unix_helper_request = 1; break; } -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 8b3ad9fe087d7ad875edf0882ffdfa530ab1750e Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Mar 18 03:06:15 2015 +0100 x2goclient.cpp: fix compile problems introduced with the last commit. --- debian/changelog | 1 + src/x2goclient.cpp | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7cba924..2af44bf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -64,6 +64,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low re-execute the main binary with this new option to indicate that the UNIX cleanup helper tool is requested. It is necessary to call exec() after fork on virtually all operating system, especially on OS X. + - x2goclient.cpp: fix compile problems introduced with the last commit. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index 2aff41f..cd13406 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -26,6 +26,7 @@ #include <algorithm> #include <cctype> #include <vector> +#include <csignal> #include "unixhelper.h" #include "ongetpass.h" @@ -43,16 +44,23 @@ int fork_helper (int argc, char **argv) { if (0 == tmp_pid) { /* Starting unixhelper. */ std::vector<std::string> new_argv; - new_argv.push (std::string (argv[0])); - new_argv.push ("--unixhelper"); + new_argv.push_back (std::string (argv[0])); + new_argv.push_back ("--unixhelper"); - std::vector<const char *> new_argv_c_str; - for (const_iterator it = new_argv.begin (); it != new_argv.end (); ++it) { - new_argv_c_str.push ((*it).c_str ()); + std::vector<char *> new_argv_c_str; + for (std::vector<std::string>::iterator it = new_argv.begin (); it != new_argv.end (); ++it) { + const char *elem = (*it).c_str (); + new_argv_c_str.push_back (strndup (elem, std::strlen (elem))); } - new_argv_c_str.push (""); - if (0 != execv (new_argv_c_str.data (), new_argv_c_str.data ())) { + /* Add null pointer as last element. */ + { + std::vector<char> tmp; + tmp.push_back (0); + new_argv_c_str.push_back (&tmp.front ()); + } + + if (0 != execv (new_argv_c_str.front (), &(new_argv_c_str.front ()))) { std::cerr << "Failed to re-execute process as UNIX cleanup helper tool: " << std::strerror (errno) << "\n" << "Terminating and killing parent." << "\n" << "Please report a bug, refer to this documentation: http://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; @@ -66,6 +74,7 @@ int fork_helper (int argc, char **argv) { } /* Anything here shall be unreachable. */ + return (0); } /* Error. */ else if (-1 == tmp_pid) { @@ -90,7 +99,7 @@ int main (int argc, char **argv) { std::string cur_arg (argv[i]); /* Make the current argument lowercase. */ - std::transform (cur_arg.begin (), cur_arg.end (), cur_arg.begin (), std::tolower); + std::transform (cur_arg.begin (), cur_arg.end (), cur_arg.begin (), ::tolower); if ((!cur_arg.empty ()) && (cur_arg.compare ("--unixhelper"))) { unix_helper_request = 1; -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 45a49684e58bcf209042f0657b89f48352be5858 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Mar 18 22:22:27 2015 +0100 unixhelper.{cpp,h}: ignore SIGINT, SIGTERM, SIGPIPE, SIGQUIT, SIGUSR1 and SIGUSR2. --- debian/changelog | 2 ++ src/unixhelper.cpp | 17 +++++++++++++---- src/unixhelper.h | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index b23a2a9..220d419 100644 --- a/debian/changelog +++ b/debian/changelog @@ -73,6 +73,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low to 10 seconds. - {unixhelper.{cpp,h},x2goclient.cpp}: switch main cleanup handling to parent PID polling. + - unixhelper.{cpp,h}: ignore SIGINT, SIGTERM, SIGPIPE, SIGQUIT, SIGUSR1 + and SIGUSR2. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index 2f89e2f..afc7b60 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -28,6 +28,7 @@ #include <iostream> #include <cstring> #include <cerrno> +#include <vector> /* For documentation please see unixhelper.h. */ @@ -73,15 +74,23 @@ namespace unixhelper { /* Anything here shall be unreachable. */ } - { + std::vector<int> ignore_signals; + ignore_signals.push_back (SIGINT); + ignore_signals.push_back (SIGTERM); + ignore_signals.push_back (SIGPIPE); + ignore_signals.push_back (SIGQUIT); + ignore_signals.push_back (SIGUSR1); + ignore_signals.push_back (SIGUSR2); + + for (std::vector<int>::iterator it = ignore_signals.begin (); it != ignore_signals.end (); ++it) { struct sigaction sig_action; sig_action.sa_handler = SIG_IGN; sig_action.sa_mask = empty_set; sig_action.sa_flags = SA_RESTART; - /* Set up signal handler to ignore SIGTERM. */ - if (0 != sigaction (SIGTERM, &sig_action, NULL)) { - std::cerr << "Unable to ignore SIGTERM: " << std::strerror (errno) << std::endl; + /* Set up signal handler to ignore the current signal. */ + if (0 != sigaction (*it, &sig_action, NULL)) { + std::cerr << "Unable to ignore signal " << strsignal (*it) << ": " << std::strerror (errno) << std::endl; kill_pgroup (-1); /* Anything here shall be unreachable. */ diff --git a/src/unixhelper.h b/src/unixhelper.h index 7511d4d..a34456e 100644 --- a/src/unixhelper.h +++ b/src/unixhelper.h @@ -35,6 +35,9 @@ namespace unixhelper { * an emergency exit is performed and * the whole process group killed. * + * The signals SIGINT, SIGTERM, SIGPIPE, SIGQUIT, SIGUSR1 and + * SIGUSR2 are ignored. + * * Loops indefinitely afterwards. * * In this loop, the current parent PID is polled and compared against -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 09f5d6405f1efe6ce3e27e865f14b69c2156a074 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Mar 18 21:08:46 2015 +0100 unixhelper.{cpp,h}: raise sleeping time to two seconds and grace period to 10 seconds. --- debian/changelog | 2 ++ src/unixhelper.cpp | 8 ++++---- src/unixhelper.h | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/debian/changelog b/debian/changelog index 1448fc1..08ee45c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -69,6 +69,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - x2goclient.cpp: create new argv array on the heap instead of on the stack. Stack data will be invalid once the function goes out of scope (which is what execv is doing.) + - unixhelper.{cpp,h}: raise sleeping time to two seconds and grace period + to 10 seconds. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index 2b057ff..2bdaec1 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -44,8 +44,8 @@ namespace unixhelper { std::cerr << "WARNING: unable to send SIGTERM to process group: " << std::strerror (errno) << std::endl; } - /* Grant a grace period of (at least) 5 seconds. */ - sleep (5); + /* Grant a grace period of (at least) 10 seconds. */ + sleep (10); /* Don't handle any errors here, because we die anyway. */ killpg (getpgrp (), SIGKILL); @@ -102,9 +102,9 @@ namespace unixhelper { } } - /* Sleep forever... at least one second in each run. */ + /* Sleep forever... at least two seconds in each run. */ for (;;) { - sleep (1); + sleep (2); } } } diff --git a/src/unixhelper.h b/src/unixhelper.h index 7ca8b43..9f213a8 100644 --- a/src/unixhelper.h +++ b/src/unixhelper.h @@ -28,7 +28,7 @@ namespace unixhelper { /* * Unblocks all signals and installs a signal handler for SIGHUP, - * which calls kill_pgroup. + * which calls kill_pgroup(). * * Should signal unblocking or installing the signal handler fail, * an emergency exit is performed and @@ -41,7 +41,7 @@ namespace unixhelper { /* * Kills the whole process group. * First, SIGTERM is sent to the group. - * A 5 seconds grace period is granted to make sure + * A 10 seconds grace period is granted to make sure * processes exit cleanly on their own. * Lastly, SIGKILL is sent to the group -- which also * implies the demise of this program. -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 31ae1b4549cf23449b95e6ff418bc66f184b72ff Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Mar 18 21:15:08 2015 +0100 {unixhelper.{cpp,h},x2goclient.cpp}: switch main cleanup handling to parent PID polling. --- debian/changelog | 2 ++ src/unixhelper.cpp | 9 ++++++++- src/unixhelper.h | 11 +++++++++-- src/x2goclient.cpp | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 08ee45c..b23a2a9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -71,6 +71,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low (which is what execv is doing.) - unixhelper.{cpp,h}: raise sleeping time to two seconds and grace period to 10 seconds. + - {unixhelper.{cpp,h},x2goclient.cpp}: switch main cleanup handling to + parent PID polling. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index 2bdaec1..2f89e2f 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -53,7 +53,7 @@ namespace unixhelper { } - int unix_cleanup () { + int unix_cleanup (const pid_t parent) { /* * Unblock all signals first. * Signal blocks are inherited, so you never you what is currently set. @@ -104,6 +104,13 @@ namespace unixhelper { /* Sleep forever... at least two seconds in each run. */ for (;;) { + pid_t cur_ppid = getppid (); + + /* cur_ppid should match parent, otherwise the parent died. */ + if (cur_ppid != parent) { + kill_pgroup (SIGHUP); + } + sleep (2); } } diff --git a/src/unixhelper.h b/src/unixhelper.h index 9f213a8..7511d4d 100644 --- a/src/unixhelper.h +++ b/src/unixhelper.h @@ -22,6 +22,7 @@ #define UNIXHELPER_H #include <QtCore/qglobal.h> +#include <unistd.h> #ifdef Q_OS_UNIX @@ -35,8 +36,12 @@ namespace unixhelper { * the whole process group killed. * * Loops indefinitely afterwards. + * + * In this loop, the current parent PID is polled and compared against + * the original value passed via parameter parent. + * Should they mismatch, the parent died and kill_pgroup() is called. */ - int unix_cleanup (); + int unix_cleanup (const pid_t parent); /* * Kills the whole process group. @@ -49,7 +54,9 @@ namespace unixhelper { * signal may be any of: * * -1 to indicate an error leading to emergency termination * * SIGHUP as the standard signal that is sent when the - * group leeader dies + * group leader dies under specific circumstances + * (we cannot rely that this always happens, though, + * so a polling solution is needed, see unix_cleanup().) */ void kill_pgroup (int signal); } diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index 479d564..92d614d 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -109,7 +109,7 @@ int main (int argc, char **argv) { if (unix_helper_request) { /* We were instructed to start as the UNIX cleanup helper tool. */ - return (unixhelper::unix_cleanup ()); + return (unixhelper::unix_cleanup (getppid ())); } else { /* -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 62a3331ef7a0edd5ffed23fbf1757da55123f77c Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Mar 18 05:51:03 2015 +0100 x2goclient.cpp: create new argv array on the heap instead of on the stack. Stack data will be invalid once the function goes out of scope (which is what execv is doing.) --- debian/changelog | 3 +++ src/x2goclient.cpp | 12 ++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/debian/changelog b/debian/changelog index 675af75..1448fc1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -66,6 +66,9 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low after fork on virtually all operating system, especially on OS X. - x2goclient.cpp: fix compile problems introduced with the last commit. - x2goclient.cpp: fix string comparison. + - x2goclient.cpp: create new argv array on the heap instead of on the + stack. Stack data will be invalid once the function goes out of scope + (which is what execv is doing.) -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index c695e26..479d564 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -47,20 +47,20 @@ int fork_helper (int argc, char **argv) { new_argv.push_back (std::string (argv[0])); new_argv.push_back ("--unixhelper"); - std::vector<char *> new_argv_c_str; + std::vector<char *> *new_argv_c_str = new (std::vector<char *>) (); for (std::vector<std::string>::iterator it = new_argv.begin (); it != new_argv.end (); ++it) { const char *elem = (*it).c_str (); - new_argv_c_str.push_back (strndup (elem, std::strlen (elem))); + new_argv_c_str->push_back (strndup (elem, std::strlen (elem))); } /* Add null pointer as last element. */ { - std::vector<char> tmp; - tmp.push_back (0); - new_argv_c_str.push_back (&tmp.front ()); + std::vector<char> *tmp = new (std::vector<char>) (); + tmp->push_back (0); + new_argv_c_str->push_back (&tmp->front ()); } - if (0 != execv (new_argv_c_str.front (), &(new_argv_c_str.front ()))) { + if (0 != execv (new_argv_c_str->front (), &(new_argv_c_str->front ()))) { std::cerr << "Failed to re-execute process as UNIX cleanup helper tool: " << std::strerror (errno) << "\n" << "Terminating and killing parent." << "\n" << "Please report a bug, refer to this documentation: http://wiki.x2go.org/doku.php/wiki:bugs" << std::endl; -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 1270e20bb5f511530d2ade78b25f9d6e8b1d31b9 Author: Mihai Moldovan <ionic@ionic.de> Date: Sat Mar 21 00:00:59 2015 +0100 {appdialog,configwidget,onmainwindow,unixhelper}.cpp: fix some compile warnings with GCC. Fix a few whitespace issues. --- debian/changelog | 2 ++ src/appdialog.cpp | 22 ++++++++++++---------- src/configwidget.cpp | 6 ++---- src/onmainwindow.cpp | 9 ++++++--- src/unixhelper.cpp | 7 +++++++ 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/debian/changelog b/debian/changelog index f3ae514..af02b8d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -77,6 +77,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low and SIGUSR2. - x2goclient.cpp: fix failing exec() call for the UNIX helper utility: correctly terminate arguments vector. + - {appdialog,configwidget,onmainwindow,unixhelper}.cpp: fix some compile + warnings with GCC. Fix a few whitespace issues. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/appdialog.cpp b/src/appdialog.cpp index f10be8f..a8ec4ec 100644 --- a/src/appdialog.cpp +++ b/src/appdialog.cpp @@ -156,16 +156,18 @@ void AppDialog::loadApps() break; } - QTreeWidgetItem* it; - if (app.category==Application::TOP) - it=new QTreeWidgetItem(treeWidget); - else - it=new QTreeWidgetItem(parent); - it->setText(0, app.name); - it->setToolTip(0,app.comment); - it->setIcon(0,app.icon); - it->setData(0, Qt::UserRole, app.exec); - it->setData(0, Qt::UserRole+1, app.comment); + if (parent) { + QTreeWidgetItem* it; + if (app.category==Application::TOP) + it=new QTreeWidgetItem(treeWidget); + else + it=new QTreeWidgetItem(parent); + it->setText(0, app.name); + it->setToolTip(0,app.comment); + it->setIcon(0,app.icon); + it->setData(0, Qt::UserRole, app.exec); + it->setData(0, Qt::UserRole+1, app.comment); + } } treeWidget->sortItems(0,Qt::AscendingOrder); } diff --git a/src/configwidget.cpp b/src/configwidget.cpp index e98ad4d..c9b8baa 100644 --- a/src/configwidget.cpp +++ b/src/configwidget.cpp @@ -24,8 +24,8 @@ ConfigWidget::ConfigWidget ( QString id, ONMainWindow * mw, { sessionId=id; mainWindow=mw; - miniMode=mw->retMiniMode(); - embedMode=embedMode= mw->getEmbedMode(); + miniMode=mw->retMiniMode(); + embedMode = mw->getEmbedMode(); if(embedMode) sessionId="embedded"; } @@ -34,5 +34,3 @@ ConfigWidget::ConfigWidget ( QString id, ONMainWindow * mw, ConfigWidget::~ConfigWidget() { } - - diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index 64448b5..a869ad8 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -4140,8 +4140,10 @@ void ONMainWindow::resumeSession ( const x2goSession& s ) if (! startXorgOnStart) startXOrg(); // #endif +#else /* defined (Q_OS_WIN) */ + UNUSED (rootless); +#endif /* defined (Q_OS_WIN) */ -#endif if ( fullscreen ) { geometry="fullscreen"; @@ -10557,6 +10559,7 @@ void ONMainWindow::slotEmbedIntoParentWindow() void ONMainWindow::processSessionConfig() { bool haveKey=false; + UNUSED (haveKey); config.command="KDE"; config.brokerNoAuth=false; @@ -11610,8 +11613,6 @@ void ONMainWindow::printSshDError_noHostPubKey() if ( closeEventSent ) return; - int port = clientSshPort.toInt (); - QString error_message = tr ("SSH daemon failed to open its public host key."); QString detailed_error_message = tr ("You have enabled Remote Printing or File Sharing.\n" @@ -11641,6 +11642,8 @@ void ONMainWindow::printSshDError_noHostPubKey() } else { #ifdef Q_OS_DARWIN + int port = clientSshPort.toInt (); + detailed_error_message += tr ("On OS X, please follow these steps to generate the " "required keys:" diff --git a/src/unixhelper.cpp b/src/unixhelper.cpp index afc7b60..3870a94 100644 --- a/src/unixhelper.cpp +++ b/src/unixhelper.cpp @@ -29,6 +29,7 @@ #include <cstring> #include <cerrno> #include <vector> +#include <cstdlib> /* For documentation please see unixhelper.h. */ @@ -122,6 +123,12 @@ namespace unixhelper { sleep (2); } + + /* + * Anything here shall be unreachable. + * But make compilers happy by returning something. + */ + return (EXIT_SUCCESS); } } -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 69b672e855a1289a8c7c77f76ed90ecb8db75a3c Author: Mihai Moldovan <ionic@ionic.de> Date: Fri Mar 20 04:02:06 2015 +0100 x2goclient.cpp: fix failing exec() call for the UNIX helper utility: correctly terminate arguments vector. --- debian/changelog | 2 ++ src/x2goclient.cpp | 6 +----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index 220d419..f3ae514 100644 --- a/debian/changelog +++ b/debian/changelog @@ -75,6 +75,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low parent PID polling. - unixhelper.{cpp,h}: ignore SIGINT, SIGTERM, SIGPIPE, SIGQUIT, SIGUSR1 and SIGUSR2. + - x2goclient.cpp: fix failing exec() call for the UNIX helper utility: + correctly terminate arguments vector. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index 92d614d..d8ae6fa 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -54,11 +54,7 @@ int fork_helper (int argc, char **argv) { } /* Add null pointer as last element. */ - { - std::vector<char> *tmp = new (std::vector<char>) (); - tmp->push_back (0); - new_argv_c_str->push_back (&tmp->front ()); - } + new_argv_c_str->push_back (0); if (0 != execv (new_argv_c_str->front (), &(new_argv_c_str->front ()))) { std::cerr << "Failed to re-execute process as UNIX cleanup helper tool: " << std::strerror (errno) << "\n" -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 50c55453408f255f730325f5ea1b095f0df6a7a7 Author: Mihai Moldovan <ionic@ionic.de> Date: Sat Mar 21 00:04:44 2015 +0100 appdialog.cpp: initialize parent in default case. Another GCC compile warning fix. --- debian/changelog | 2 ++ src/appdialog.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/debian/changelog b/debian/changelog index af02b8d..9fb29df 100644 --- a/debian/changelog +++ b/debian/changelog @@ -79,6 +79,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low correctly terminate arguments vector. - {appdialog,configwidget,onmainwindow,unixhelper}.cpp: fix some compile warnings with GCC. Fix a few whitespace issues. + - appdialog.cpp: initialize parent in default case. Another GCC compile + warning fix. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/appdialog.cpp b/src/appdialog.cpp index a8ec4ec..013eb79 100644 --- a/src/appdialog.cpp +++ b/src/appdialog.cpp @@ -153,6 +153,7 @@ void AppDialog::loadApps() parent=other; break; default: + parent = NULL; break; } -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 38174bac268c749fcbdfb99d3eb899a76e4e88f3 Author: Mihai Moldovan <ionic@ionic.de> Date: Sat Mar 21 03:58:18 2015 +0100 onmainwindow.cpp: correctly use ~/.x2go/.ssh as ssh directory when starting sshd in user mode. Put the authorized_keys file in there. Check and set correct permissions for both the directory and authorized_keys file. Generalize some Windows-specific sections by using QDir and QFile. --- debian/changelog | 4 ++ src/onmainwindow.cpp | 183 +++++++++++++++++++++++++++++++++----------------- 2 files changed, 126 insertions(+), 61 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9fb29df..5076ee9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -81,6 +81,10 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low warnings with GCC. Fix a few whitespace issues. - appdialog.cpp: initialize parent in default case. Another GCC compile warning fix. + - onmainwindow.cpp: correctly use ~/.x2go/.ssh as ssh directory when + starting sshd in user mode. Put the authorized_keys file in there. Check + and set correct permissions for both the directory and authorized_keys + file. Generalize some Windows-specific sections by using QDir and QFile. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index a869ad8..ff0b032 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -7898,43 +7898,54 @@ void ONMainWindow::slotRetExportDir ( bool result,QString output, QByteArray line = file.readLine(); file.close(); - QString authofname=homeDir; -#ifdef Q_OS_WIN - QDir dir; - dir.mkpath ( authofname+"\\.x2go\\.ssh" ); - x2goDebug<<"Creating "<<authofname+"\\.x2go\\.ssh"; + QDir authorized_keys_dir (homeDir); - authofname=wapiShortFileName ( authofname ) +"/.x2go"; -#endif - authofname+="/.ssh/authorized_keys" ; - file.setFileName ( authofname ); - if ( !file.open ( QIODevice::ReadOnly | QIODevice::Text ) ) - { - printSshDError_noAuthorizedKeysFile(); - QFile::remove - ( key+".pub" ); - return; + /* + * Do the user SSHD/global SSHD dance here and either use the + * private .x2go/.ssh or the global .ssh dir. + */ + if (userSshd) { + authorized_keys_dir = QDir (authorized_keys_dir.absolutePath () + "/.x2go/"); } + authorized_keys_dir = QDir (authorized_keys_dir.absolutePath () + "/.ssh/"); + QFile authorized_keys_file (authorized_keys_dir.absolutePath () + "/authorized_keys"); - QTemporaryFile tfile ( authofname ); - tfile.open(); - tfile.setAutoRemove ( true ); - QTextStream out ( &tfile ); + /* + * We do not try to create the file first. + * This has been already done in startX2goMount(). + * We wouldn't be here if that failed. + */ + if (!authorized_keys_file.open (QIODevice::ReadOnly | QIODevice::Text)) { + printSshDError_noAuthorizedKeysFile (); + QFile::remove (key + ".pub"); + return; + } - while ( !file.atEnd() ) - { - QByteArray newline = file.readLine(); - if ( newline!=line ) - out<<newline; + QTemporaryFile tfile (authorized_keys_file.fileName ()); + tfile.open (); + tfile.setPermissions (QFile::ReadOwner | QFile::WriteOwner); + tfile.setAutoRemove (true); + QTextStream out (&tfile); + + /* + * Copy the content of the authorized_keys file to our new temporary file + * and remove the public authorized key for the current "session" again. + */ + while (!authorized_keys_file.atEnd ()) { + QByteArray newline = authorized_keys_file.readLine (); + if (newline != line) + out << newline; } - file.close(); - tfile.close(); - file.remove(); - tfile.copy ( authofname ); - QFile::remove - ( key+".pub" ); + + authorized_keys_file.close (); + tfile.close (); + + authorized_keys_file.remove (); + + tfile.copy (authorized_keys_file.fileName ()); + QFile::remove (key + ".pub"); } @@ -9157,41 +9168,90 @@ void ONMainWindow::startX2goMount() QByteArray line = file.readLine(); file.close(); - QString authofname=homeDir; -#ifdef Q_OS_WIN - QDir tdir; - tdir.mkpath ( authofname+"\\.x2go\\.ssh" ); - x2goDebug<<"Creating "<<authofname+"\\.x2go\\.ssh"; + QDir authorized_keys_dir (homeDir); - authofname=wapiShortFileName ( authofname ) +"/.x2go"; -#endif - authofname+= "/.ssh/authorized_keys" ; + /* + * Do the user SSHD/global SSHD dance here and either use the + * private .x2go/.ssh or the global .ssh dir. + */ + if (userSshd) { + authorized_keys_dir = QDir (authorized_keys_dir.absolutePath () + "/.x2go/"); + } - QFile file1 ( authofname ); + authorized_keys_dir = QDir (authorized_keys_dir.absolutePath () + "/.ssh/"); + QFile authorized_keys_file (authorized_keys_dir.absolutePath () + "/authorized_keys"); - if ( !file1.open ( QIODevice::WriteOnly | QIODevice::Text | - QIODevice::Append ) ) - { - QString message=tr ( "Unable to write:\n" ) + authofname; - QMessageBox::critical ( 0l,tr ( "Error" ),message, - QMessageBox::Ok, - QMessageBox::NoButton ); - QFile::remove - ( fsExportKey+".pub" ); - return; + if (userSshd) { + x2goDebug << "Creating dir " << authorized_keys_dir.absolutePath (); + authorized_keys_dir.mkpath (authorized_keys_dir.absolutePath ()); + } + x2goDebug << "Potentially creating file " << authorized_keys_file.fileName (); + if (!authorized_keys_file.open (QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) { + QString message = tr ("Unable to create or append to file: ") + authorized_keys_file.fileName (); + QMessageBox::critical (0l, tr ("Error"), message, + QMessageBox::Ok, QMessageBox::NoButton); + QFile::remove (fsExportKey + ".pub"); + return; } - directory* dir=getExpDir ( fsExportKey ); - bool rem=dir->isRemovable; - if ( !dir ) - return; - QTextStream out ( &file1 ); - out<<line; - file1.close(); +#ifdef Q_OS_UNIX + QFile::Permissions authorized_keys_file_perm = authorized_keys_file.permissions (); + QFile::Permissions authorized_keys_file_target_perm = QFile::ReadOwner | QFile::WriteOwner; + + bool permission_error = false; + + /* + * Try to set the permissions if they are wrong. + * (sshd would disallow such a file.) + */ + if (authorized_keys_file_perm != authorized_keys_file_target_perm) { + if (!authorized_keys_file.setPermissions (authorized_keys_file_target_perm)) { + /* FIXME: use a function for this... */ + QString message = tr ("Unable to change the permissions of file: ") + authorized_keys_file.fileName (); + message += "\n" + tr ("This is an error because sshd would deny such a file."); + QMessageBox::critical (NULL, tr ("Error"), message, + QMessageBox::Ok, QMessageBox::NoButton); + permission_error = true; + } + } + + QFile::Permissions authorized_keys_dir_perm = QFile (authorized_keys_dir.absolutePath ()).permissions (); + QFile::Permissions authorized_keys_dir_target_perm = QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner; + + /* + * Try to set the permissions if they are wrong. + * (sshd would disallow such a directory.) + */ + if (authorized_keys_dir_perm != authorized_keys_dir_target_perm) { + if (!QFile (authorized_keys_dir.absolutePath ()).setPermissions (authorized_keys_dir_target_perm)) { + /* FIXME: use a function for this... */ + QString message = tr ("Unable to change the permissions of directory: ") + authorized_keys_dir.absolutePath (); + message += "\n" + tr ("This is an error because sshd would deny such a directory."); + QMessageBox::critical (NULL, tr ("Error"), message, + QMessageBox::Ok, QMessageBox::NoButton); + permission_error = true; + } + } + + if (permission_error) { + QFile::remove (fsExportKey + ".pub"); + return; + } +#endif /* defined (Q_OS_UNIX) */ + + directory* dir = getExpDir (fsExportKey); + bool rem = dir->isRemovable; + if (!dir) { + return; + } - x2goDebug<<"Temporarily activated public key from file "<<fsExportKey<<".pub."<<endl; + QTextStream out (&authorized_keys_file); + out << line; + authorized_keys_file.close (); + + x2goDebug << "Temporarily activated public key from file " << fsExportKey << ".pub."; QString passwd=getCurrentPass(); QString user=getCurrentUname(); @@ -9965,18 +10025,19 @@ void ONMainWindow::generateEtcFiles() QFile file ( etcDir +"/sshd_config" ); if ( !file.open ( QIODevice::WriteOnly | QIODevice::Text ) ) return; + QString authKeyPath = homeDir + "/.x2go/.ssh/authorized_keys"; #ifdef Q_OS_WIN - QString authKeyPath=cygwinPath ( homeDir+"/.x2go/.ssh/authorized_keys" ); - authKeyPath.replace(wapiGetUserName(),"%u"); -#endif + authKeyPath = cygwinPath (authKeyPath); + authKeyPath.replace (wapiGetUserName (), "%u"); +#endif /* defined (Q_OS_WIN) */ QTextStream out ( &file ); out<<"StrictModes no\n"<< "UsePrivilegeSeparation no\n"<< "PidFile " + varDir + "/sshd.pid\n" << + "AuthorizedKeysFile \"" << authKeyPath << "\"\n" << #ifdef Q_OS_WIN "Subsystem shell "<< wapiShortFileName ( appDir) +"/sh"+"\n"<< "Subsystem sftp "<< wapiShortFileName ( appDir) +"/sftp-server"+"\n"<< - "AuthorizedKeysFile \""<<authKeyPath<<"\""; #else "Subsystem sftp " <<appDir<<"/sftp-server\n"; -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 5b8ae8805a3375a4779ba5cf6d8733fbd4846f78 Author: Mihai Moldovan <ionic@ionic.de> Date: Sat Mar 21 23:40:41 2015 +0100 compat.{cpp,h}: remove inline keyword, because function is not defined in header file. --- debian/changelog | 2 ++ src/compat.cpp | 2 +- src/compat.h | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 679648c..034a79e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -87,6 +87,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low file. Generalize some Windows-specific sections by using QDir and QFile. - compat.{cpp,h}: new files. Implements strndup on OS X 10.6 and below. Add to x2goclient.cpp, x2goclient.pro and x2goclient.pro.maemo. + - compat.{cpp,h}: remove inline keyword, because function is not defined + in header file. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/compat.cpp b/src/compat.cpp index 877d07b..c443489 100644 --- a/src/compat.cpp +++ b/src/compat.cpp @@ -29,7 +29,7 @@ #include <string.h> #include <stdlib.h> -inline char *strndup (const char *s, size_t n) { +char *strndup (const char *s, size_t n) { char *result; size_t len = strlen (s); diff --git a/src/compat.h b/src/compat.h index 8b9d77e..36b71ef 100644 --- a/src/compat.h +++ b/src/compat.h @@ -31,7 +31,7 @@ #include <string.h> #include <stdlib.h> -inline char *strndup (const char *s, size_t n); +char *strndup (const char *s, size_t n); #endif /* MAC_OS_X_VERSION_MIN_REQUIRED */ #endif /* defined (Q_OS_DARWIN) */ -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 0c8fa24146f0069e723cbdd97c8f265d708c6544 Author: Mihai Moldovan <ionic@ionic.de> Date: Sat Mar 21 23:30:54 2015 +0100 compat.{cpp,h}: new files. Implements strndup on OS X 10.6 and below. Add to x2goclient.cpp, x2goclient.pro and x2goclient.pro.maemo. --- debian/changelog | 2 ++ src/compat.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/compat.h | 38 ++++++++++++++++++++++++++++++++++++++ src/x2goclient.cpp | 1 + x2goclient.pro | 6 ++++-- x2goclient.pro.maemo | 6 ++++-- 6 files changed, 98 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 5076ee9..679648c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -85,6 +85,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low starting sshd in user mode. Put the authorized_keys file in there. Check and set correct permissions for both the directory and authorized_keys file. Generalize some Windows-specific sections by using QDir and QFile. + - compat.{cpp,h}: new files. Implements strndup on OS X 10.6 and below. + Add to x2goclient.cpp, x2goclient.pro and x2goclient.pro.maemo. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/compat.cpp b/src/compat.cpp new file mode 100644 index 0000000..877d07b --- /dev/null +++ b/src/compat.cpp @@ -0,0 +1,49 @@ +/*************************************************************************** + * Copyright (C) 2015 by Mihai Moldovan <ionic@ionic.de> +49 721 14595728 * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "compat.h" + +#ifdef Q_OS_DARWIN +/* + * strndup() is not available on 10.6 and below, define a compat version here. + * Shameless copy from libiberty. + */ +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 +#include <stddef.h> +#include <string.h> +#include <stdlib.h> + +inline char *strndup (const char *s, size_t n) { + char *result; + size_t len = strlen (s); + + if (n < len) { + len = n; + } + + result = (char *) malloc (len + 1); + if (!result) { + return (0); + } + + result[len] = '\0'; + return ((char *) memcpy (result, s, len)); +} +#endif /* MAC_OS_X_VERSION_MIN_REQUIRED */ +#endif /* defined (Q_OS_DARWIN) */ diff --git a/src/compat.h b/src/compat.h new file mode 100644 index 0000000..8b9d77e --- /dev/null +++ b/src/compat.h @@ -0,0 +1,38 @@ +/*************************************************************************** + * Copyright (C) 2015 by Mihai Moldovan <ionic@ionic.de> +49 721 14595728 * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + + +#ifndef COMPAT_H +#define COMPAT_H + +#ifdef Q_OS_DARWIN +/* + * strndup() is not available on 10.6 and below, define a compat version here. + * Shameless copy from libiberty. + */ +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 +#include <stddef.h> +#include <string.h> +#include <stdlib.h> + +inline char *strndup (const char *s, size_t n); +#endif /* MAC_OS_X_VERSION_MIN_REQUIRED */ +#endif /* defined (Q_OS_DARWIN) */ + +#endif /* !defined (COMPAT_H) */ diff --git a/src/x2goclient.cpp b/src/x2goclient.cpp index d8ae6fa..b7fe5bc 100644 --- a/src/x2goclient.cpp +++ b/src/x2goclient.cpp @@ -30,6 +30,7 @@ #include "unixhelper.h" #include "ongetpass.h" +#include "compat.h" int wrap_x2go_main (int argc, char **argv) { return (x2goMain (argc, argv)); diff --git a/x2goclient.pro b/x2goclient.pro index e5428ce..b26cfa2 100644 --- a/x2goclient.pro +++ b/x2goclient.pro @@ -80,7 +80,8 @@ HEADERS += src/configdialog.h \ src/folderexplorer.h \ src/non_modal_messagebox.h \ src/help.h \ - src/unixhelper.h + src/unixhelper.h \ + src/compat.h SOURCES += src/sharewidget.cpp \ src/settingswidget.cpp \ @@ -124,7 +125,8 @@ SOURCES += src/sharewidget.cpp \ src/folderexplorer.cpp \ src/non_modal_messagebox.cpp \ src/help.cpp \ - src/unixhelper.cpp + src/unixhelper.cpp \ + src/compat.cpp LIBS += -lssh win32:LIBS += -lAdvAPI32 -lshell32 -lUser32 diff --git a/x2goclient.pro.maemo b/x2goclient.pro.maemo index 63cc3d8..905ef77 100644 --- a/x2goclient.pro.maemo +++ b/x2goclient.pro.maemo @@ -36,7 +36,8 @@ HEADERS += src/configdialog.h \ src/sharewidget.h \ src/clicklineedit.h \ src/help.h \ - src/unixhelper.h + src/unixhelper.h \ + src/compat.h SOURCES += src/sharewidget.cpp \ src/settingswidget.cpp \ @@ -64,7 +65,8 @@ SOURCES += src/sharewidget.cpp \ src/wapi.cpp \ src/clicklineedit.cpp \ src/help.cpp \ - src/unixhelper.cpp + src/unixhelper.cpp \ + src/compat.cpp TEMPLATE = app TARGET = -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit a0140b873d471ae9c3d3b3fa92d418c740d8182e Author: Mihai Moldovan <ionic@ionic.de> Date: Sat Mar 21 23:51:37 2015 +0100 compat.h: include QtCore/qglobal.h for Q_OS_... macros. --- debian/changelog | 1 + src/compat.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 034a79e..bd5117e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -89,6 +89,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low Add to x2goclient.cpp, x2goclient.pro and x2goclient.pro.maemo. - compat.{cpp,h}: remove inline keyword, because function is not defined in header file. + - compat.h: include QtCore/qglobal.h for Q_OS_... macros. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/compat.h b/src/compat.h index 36b71ef..39da9eb 100644 --- a/src/compat.h +++ b/src/compat.h @@ -17,10 +17,11 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ - #ifndef COMPAT_H #define COMPAT_H +#include <QtCore/qglobal.h> + #ifdef Q_OS_DARWIN /* * strndup() is not available on 10.6 and below, define a compat version here. -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit dbbce50e73994686e97ec26b9d6613d32f09f810 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Apr 29 02:34:13 2015 +0200 pulsemanager.{cpp,h}: new class for PulseAudio management. --- debian/changelog | 1 + src/pulsemanager.cpp | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/pulsemanager.h | 92 +++++++++++++++++ 3 files changed, 363 insertions(+) diff --git a/debian/changelog b/debian/changelog index bd5117e..4dc0358 100644 --- a/debian/changelog +++ b/debian/changelog @@ -90,6 +90,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - compat.{cpp,h}: remove inline keyword, because function is not defined in header file. - compat.h: include QtCore/qglobal.h for Q_OS_... macros. + - pulsemanager.{cpp,h}: new class for PulseAudio management. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/src/pulsemanager.cpp b/src/pulsemanager.cpp new file mode 100644 index 0000000..af1ba2b --- /dev/null +++ b/src/pulsemanager.cpp @@ -0,0 +1,270 @@ +/*************************************************************************** + * Copyright (C) 2012-2015 by Mihai Moldovan <ionic@ionic.de> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "pulsemanager.h" + +#ifndef DEBUG +#define DEBUG_UNDEF +#define DEBUG +#endif + +PulseManager::PulseManager () { + _pulse_X2Go = "/.x2go/pulse"; + + _pulse_dir = QDir (QDir::homePath ()); + _pulse_dir.mkpath (_pulse_dir.absolutePath () + _pulse_X2Go + "/tmp"); + _pulse_dir.cd (_pulse_X2Go.mid (1)); + + _env = QProcessEnvironment::systemEnvironment (); + _env.insert ("HOME", _pulse_dir.absolutePath ()); + _env.insert ("TEMP", _pulse_dir.absolutePath () + "/tmp"); + + _pulse_port = 4713; + + _state = QProcess::NotRunning; + + _pulse_server = 0; + + _app_dir = QApplication::applicationDirPath (); +} + +PulseManager::~PulseManager () { + if (_pulse_server && is_server_running ()) + shutdown (); + + delete (_pulse_server); +} + +void PulseManager::start () { + assert (!is_server_running ()); + + delete (_pulse_server); + + _pulse_server = new QProcess (0); + _state = QProcess::Starting; + +#ifdef Q_OS_DARWIN + start_osx (); +#elif defined (Q_OS_WIN) + start_win (); +#elif defined (Q_OS_LINUX) + start_linux (); +#endif +} + +void PulseManager::start_osx () { + find_port (); + + if (generate_server_config () && generate_client_config ()) { + cleanup_client_dir (); + + _pulse_server->setProcessEnvironment (_env); + + QStringList args; + args << "--exit-idle-time=-1" << "-n" + << "-F" << _pulse_dir.absolutePath () + "/config.pa" + << "-p" + << QDir (_app_dir + + "/../Frameworks/pulse-2.0/modules").absolutePath () + << "--high-priority"; +#ifdef DEBUG + args << "--log-level=debug"; +#endif + + _pulse_server->setWorkingDirectory (_app_dir + "/../exe/"); + _pulse_server->start (_app_dir + "/../exe/pulseaudio", args); + + if (_pulse_server->waitForStarted ()) { + x2goDebug << "pulse started with" << args << "waiting for finish..."; + _state = QProcess::Running; + + connect (_pulse_server, SIGNAL (finished (int)), + this, SLOT (on_pulse_finished (int))); + +#ifdef DEBUG + // Give PA a little time to come up. + QTimer::singleShot (5000, this, SLOT (slot_play_startup_sound ())); +#endif + } + } +} + +void PulseManager::find_port () { + QTcpSocket tcpSocket (0); + bool free = false; + + do { + tcpSocket.connectToHost ("127.0.0.1", _pulse_port); + + if (tcpSocket.waitForConnected (1000)) { + tcpSocket.close (); + free = false; + _pulse_port++; + } + else + free = true; + } while (!free); +} + +bool PulseManager::generate_server_config () { + QString config_file_name = _pulse_dir.absolutePath () + "/config.pa"; + QTemporaryFile config_tmp_file (_pulse_dir.absolutePath () + "/tmp/tmpconfig"); + X2goSettings settings ("settings"); + bool disable_input = false; + bool ret = false; + + disable_input = settings.setting ()->value ("soundnoinput", + (QVariant) false).toBool (); + + if (config_tmp_file.open ()) { + QTextStream config_tmp_file_stream (&config_tmp_file); + + config_tmp_file_stream << "load-module module-native-protocol-tcp port=" + + QString::number (_pulse_port) << endl; + config_tmp_file_stream << "load-module module-native-protocol-unix" << endl; + config_tmp_file_stream << "load-module module-coreaudio-detect"; + + if (disable_input) + config_tmp_file_stream << " record=0"; + + config_tmp_file_stream << endl; + + QFile config_file (config_file_name); + if (QFile::exists (config_file_name)) + QFile::remove (config_file_name); + + config_tmp_file.copy (config_file_name); + config_tmp_file.remove (); + + ret = true; + } + + return (ret); +} + +bool PulseManager::generate_client_config () { + QTemporaryFile client_config_tmp_file (_pulse_dir.absolutePath () + + "/tmp/tmpconfig"); + QString client_config_file_name (_pulse_dir.absolutePath () + "/.pulse/client.conf"); + bool ret = false; + + if (client_config_tmp_file.open ()) { + QTextStream config_tmp_file_stream (&client_config_tmp_file); + + config_tmp_file_stream << "autospawn=no" << endl; + config_tmp_file_stream << "daemon-binary=" + << QDir (_app_dir + + "/../exe/pulseaudio").absolutePath () + << endl; + + if (QFile::exists (client_config_file_name)) + QFile::remove (client_config_file_name); + + client_config_tmp_file.copy (client_config_file_name); + client_config_tmp_file.remove (); + + ret = true; + } + + return (ret); +} + +void PulseManager::cleanup_client_dir () { + // PA expects $HOME/.pulse/$HOST-runtime to be a symbolic link + // and will fail, if it's just a plain directory on Mac OS X. + // Delete it first. + QDir machine_dir (_pulse_dir.absolutePath () + "/.pulse/" + + QHostInfo::localHostName () + "-runtime"); + + if (QFile::exists (machine_dir.absolutePath () + "/pid")) + QFile::remove (machine_dir.absolutePath () + "/pid"); + + if (machine_dir.exists ()) + machine_dir.remove (machine_dir.absolutePath ()); +} + +void PulseManager::slot_play_startup_sound () { + QProcess play_file (0); + + play_file.setWorkingDirectory (_pulse_server->workingDirectory ()); + play_file.setProcessEnvironment (_env); + play_file.start (_app_dir + "/../exe/paplay " + + _app_dir + "/../Resources/startup.wav"); + + if (play_file.waitForStarted ()) + play_file.waitForFinished (); +} + +void PulseManager::on_pulse_finished (int exit_code) { + if (!exit_code) + x2goDebug << "Warning! Pulseaudio's exit code is non-zero."; + + QByteArray ba = _pulse_server->readAllStandardOutput (); + char *data = ba.data (); + std::cout << data; + ba = _pulse_server->readAllStandardError (); + data = ba.data (); + std::cout << data; + + _state = QProcess::NotRunning; + emit (sig_pulse_server_terminated ()); +} + +bool PulseManager::is_server_running () { + if (_pulse_server) + return (_pulse_server->state () == QProcess::Running); + else + return (false); +} + +void PulseManager::shutdown () { + QEventLoop loop; + + connect (this, SIGNAL (sig_pulse_server_terminated ()), + &loop, SLOT (quit ())); + + _pulse_server->terminate (); + + loop.exec (); +} + +int PulseManager::get_pulse_port () { + return (_pulse_port); +} + +void PulseManager::set_pulse_port (int pulse_port) { + _pulse_port = pulse_port; +} + +void PulseManager::relaunch () { + if (_pulse_server && is_server_running ()) + shutdown (); + + x2goDebug << "restarting pulse"; + start (); +} + +QProcess::ProcessState PulseManager::state () { + return (_state); +} + +#ifdef DEBUG_UNDEF +#undef DEBUG +#undef DEBUG_UNDEF +#endif diff --git a/src/pulsemanager.h b/src/pulsemanager.h new file mode 100644 index 0000000..fc0a989 --- /dev/null +++ b/src/pulsemanager.h @@ -0,0 +1,92 @@ +/*************************************************************************** + * Copyright (C) 2012-2015 by Mihai Moldovan <ionic@ionic.de> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef PULSEMANAGER_H +#define PULSEMANAGER_H + +#ifdef NDEBUG +#define NDEBUG_DEFINE +#undef NDEBUG +#endif + +#include <iostream> +#include <QDir> +#include <QTcpSocket> +#include <QEventLoop> +#include <QTemporaryFile> +#include <QHostInfo> +#include <QProcess> +#include <QApplication> +#include <QTimer> +#include <assert.h> +#include "x2gologdebug.h" +#include "x2gosettings.h" + +class PulseManager: public QObject +{ + Q_OBJECT; + +public: + PulseManager (); + ~PulseManager (); + int get_pulse_port (); + void set_pulse_port (int pulse_port); + QProcess::ProcessState state (); + +public slots: + void start (); + void relaunch (); + +private: + PulseManager (const PulseManager &other); + void start_osx (); + // FIXME + void start_win (); + // FIXME + void start_linux (); + void find_port (); + bool generate_server_config (); + bool generate_client_config (); + void cleanup_client_dir (); + void shutdown (); + bool is_server_running (); + +private slots: + void on_pulse_finished (int exit_code); + void slot_play_startup_sound (); + +signals: + void sig_pulse_server_terminated (); + +private: + QString _pulse_X2Go; + QDir _pulse_dir; + QProcessEnvironment _env; + QProcess *_pulse_server; + int _pulse_port; + QProcess::ProcessState _state; + QString _app_dir; +}; + +#ifdef NDEBUG_DEFINE +#define NDEBUG +#undef NDEBUG_DEFINE +#endif + +#endif // PULSEMANAGER_H -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit d5c4afa00d00ce39fd7066b31459ce4e9bef95b6 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:16:27 2015 +0200 macbuild.sh: add new MACPORTS_PREFIX detection/variable. --- debian/changelog | 1 + macbuild.sh | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/debian/changelog b/debian/changelog index 6907df0..76f3814 100644 --- a/debian/changelog +++ b/debian/changelog @@ -92,6 +92,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - compat.h: include QtCore/qglobal.h for Q_OS_... macros. - pulsemanager.{cpp,h}: new class for PulseAudio management. - x2goclient.pro{,.maemo}: reference new pulsemanager.{cpp,h} files. + - macbuild.sh: add new MACPORTS_PREFIX detection/variable. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index 097ac91..6c42c44 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -30,6 +30,7 @@ usage() { printf "\tDEBUG\t\t\t\tenables or disables debug builds [boolean]\n\t\t\t\t\tdefault: disabled\n" printf "\tBUNDLE\t\t\t\tenables or disables library bundling and the creation of a .dmg installer [boolean]\n\t\t\t\t\tdefault: enabled\n" printf "\tUNIVERSAL\t\t\tenables or disables x86 support. x86_64 support is always enabled [boolean]\n\t\t\t\t\tdefault: enabled\n" + printf "\tMACPORTS_PREFIX\t\t\tsets the (MacPorts) prefix used to detect PulseAudio and nxproxy binaries\n\t\t\t\t\tdefault: /opt/local/\n" printf "\n" printf "Boolean values help:\n" printf "\ta value of ${NO_VAL} will be treated as false\n" @@ -52,12 +53,25 @@ PROJECT="${TOP_DIR}/${NAME}.pro" PKG_DMG="${TOP_DIR}/pkg-dmg" NXPROXY="$(which nxproxy)" +# Try to find the MacPorts prefix. +typeset MACPORTS_PREFIX_SEARCH="" +if type -P port >/dev/null 2>&1; then + MACPORTS_PREFIX_SEARCH="$(type -P port)" + MACPORTS_PREFIX_SEARCH="${MACPORTS_PREFIX_SEARCH%%bin/port}" +else + # Port not being part find in ${PATH} doesn't necessarily mean it isn't available. + # Try to guess. + MACPORTS_PREFIX_SEARCH="/opt/local/" +fi : ${SDK:="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk"} : ${MACOSX_DEPLOYMENT_TARGET:="10.7"} : ${DEBUG:="0"} : ${BUNDLE:="1"} : ${UNIVERSAL:="1"} +: ${MACPORTS_PREFIX:="${MACPORTS_PREFIX_SEARCH}"} + +unset MACPORTS_PREFIX_SEARCH DEBUG="$(make_boolean "${DEBUG}")" BUNDLE="$(make_boolean "${BUNDLE}")" -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit cf778110715b5fb3c54e3faf66b618fb8d62d116 Author: Mihai Moldovan <ionic@ionic.de> Date: Wed Apr 29 02:36:24 2015 +0200 x2goclient.pro{maemo}: reference new pulsemanager.{cpp,h} files. --- debian/changelog | 1 + x2goclient.pro | 6 ++++-- x2goclient.pro.maemo | 6 ++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 4dc0358..6907df0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -91,6 +91,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low in header file. - compat.h: include QtCore/qglobal.h for Q_OS_... macros. - pulsemanager.{cpp,h}: new class for PulseAudio management. + - x2goclient.pro{,.maemo}: reference new pulsemanager.{cpp,h} files. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/x2goclient.pro b/x2goclient.pro index b26cfa2..4a5bf13 100644 --- a/x2goclient.pro +++ b/x2goclient.pro @@ -81,7 +81,8 @@ HEADERS += src/configdialog.h \ src/non_modal_messagebox.h \ src/help.h \ src/unixhelper.h \ - src/compat.h + src/compat.h \ + src/pulsemanager.h SOURCES += src/sharewidget.cpp \ src/settingswidget.cpp \ @@ -126,7 +127,8 @@ SOURCES += src/sharewidget.cpp \ src/non_modal_messagebox.cpp \ src/help.cpp \ src/unixhelper.cpp \ - src/compat.cpp + src/compat.cpp \ + src/pulsemanager.cpp LIBS += -lssh win32:LIBS += -lAdvAPI32 -lshell32 -lUser32 diff --git a/x2goclient.pro.maemo b/x2goclient.pro.maemo index 905ef77..4a06622 100644 --- a/x2goclient.pro.maemo +++ b/x2goclient.pro.maemo @@ -37,7 +37,8 @@ HEADERS += src/configdialog.h \ src/clicklineedit.h \ src/help.h \ src/unixhelper.h \ - src/compat.h + src/compat.h \ + src/pulsemanager.h SOURCES += src/sharewidget.cpp \ src/settingswidget.cpp \ @@ -66,7 +67,8 @@ SOURCES += src/sharewidget.cpp \ src/clicklineedit.cpp \ src/help.cpp \ src/unixhelper.cpp \ - src/compat.cpp + src/compat.cpp \ + src/pulsemanager.cpp TEMPLATE = app TARGET = -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 4e63bfae22773892551dae59a97e0b00f4002cc7 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:19:59 2015 +0200 macbuild.sh: add new dependency_error() helper function. --- debian/changelog | 1 + macbuild.sh | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/debian/changelog b/debian/changelog index 76f3814..3f7b3c5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -93,6 +93,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - pulsemanager.{cpp,h}: new class for PulseAudio management. - x2goclient.pro{,.maemo}: reference new pulsemanager.{cpp,h} files. - macbuild.sh: add new MACPORTS_PREFIX detection/variable. + - macbuild.sh: add new dependency_error() helper function. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index 6c42c44..10b0f50 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -39,6 +39,20 @@ usage() { exit 2 } +dependency_error() { + exec >&2 + + typeset element="${1}"; shift + typeset component="${1}"; shift + typeset type="${1}"; shift + + echo "${element} ${type} not found." + echo "Install ${component} -- e.g., via "port -vt install ${component}" if using MacPorts." + echo "If ${component} is already installed, try passing MACPORTS_PREFIX if the autodetected or default value (${MACPORTS_PREFIX}) does not match your setup." + + exit 3 +} + MATCH_HELP='(^((-h)|(--help))([ ]|$))|([ ]+((-h)|(--help))([ ]|$))' [ -n "${*}" ] && [[ "${*}" =~ ${MATCH_HELP} ]] && usage -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 4d1e75d9113f157b2dc097ac827cc67dc46b29b8 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:22:49 2015 +0200 macbuild.sh: add new get_nesting_level() helper function. --- debian/changelog | 1 + macbuild.sh | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/debian/changelog b/debian/changelog index c17afcd..b7d96aa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -95,6 +95,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - macbuild.sh: add new MACPORTS_PREFIX detection/variable. - macbuild.sh: add new dependency_error() helper function. - macbuild.sh: add new lazy_canonical_path() helper function. + - macbuild.sh: add new get_nesting_level() helper function. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index f222df8..4d24e52 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -65,6 +65,20 @@ lazy_canonical_path() { printf "${old_path}" } +get_nesting_level() { +set -x + typeset -i level=0 + typeset path="${1}" + + while [ -n "${path}" ] && [ "${path}" != "." ] && [ "${path}" != "/" ]; do + i="$((${i} + 1))" + path="$(dirname "${path}")" + done + + printf "${level}" +set +x +} + MATCH_HELP='(^((-h)|(--help))([ ]|$))|([ ]+((-h)|(--help))([ ]|$))' [ -n "${*}" ] && [[ "${*}" =~ ${MATCH_HELP} ]] && usage -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 07150a8ec4a2b6ccdabc968171326edf97559414 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:21:31 2015 +0200 macbuild.sh: add new lazy_canonical_path() helper function. --- debian/changelog | 1 + macbuild.sh | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/debian/changelog b/debian/changelog index 3f7b3c5..c17afcd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -94,6 +94,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - x2goclient.pro{,.maemo}: reference new pulsemanager.{cpp,h} files. - macbuild.sh: add new MACPORTS_PREFIX detection/variable. - macbuild.sh: add new dependency_error() helper function. + - macbuild.sh: add new lazy_canonical_path() helper function. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index 10b0f50..f222df8 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -53,6 +53,18 @@ dependency_error() { exit 3 } +lazy_canonical_path() { + typeset path="${1}" + + typeset old_path="" + while [ "${old_path}" != "${path}" ]; do + old_path="${path}" + path="${path//\/\///}" + done + + printf "${old_path}" +} + MATCH_HELP='(^((-h)|(--help))([ ]|$))|([ ]+((-h)|(--help))([ ]|$))' [ -n "${*}" ] && [[ "${*}" =~ ${MATCH_HELP} ]] && usage -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 2179a63071c91ca706c536a9639e07dfdc0de465 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:28:02 2015 +0200 macbuild.sh: refactor nxproxy detection to use MACPORTS_PREFIX. --- debian/changelog | 1 + macbuild.sh | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 631a576..bf6b9ad 100644 --- a/debian/changelog +++ b/debian/changelog @@ -97,6 +97,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - macbuild.sh: add new lazy_canonical_path() helper function. - macbuild.sh: add new get_nesting_level() helper function. - macbuild.sh: add new repeat_str() helper function. + - macbuild.sh: refactor nxproxy detection to use MACPORTS_PREFIX. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index 83e0228..85ae181 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -108,7 +108,6 @@ DMGFILE="${BUILD_DIR}/${NAME}.dmg" PROJECT="${TOP_DIR}/${NAME}.pro" PKG_DMG="${TOP_DIR}/pkg-dmg" -NXPROXY="$(which nxproxy)" # Try to find the MacPorts prefix. typeset MACPORTS_PREFIX_SEARCH="" if type -P port >/dev/null 2>&1; then @@ -120,6 +119,8 @@ else MACPORTS_PREFIX_SEARCH="/opt/local/" fi +NXPROXY="nxproxy" + : ${SDK:="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk"} : ${MACOSX_DEPLOYMENT_TARGET:="10.7"} : ${DEBUG:="0"} @@ -149,6 +150,11 @@ else exit 1 fi +# Gather files. +NXPROXY="$(lazy_canonical_path "${MACPORTS_PREFIX}/bin/${NXPROXY}")" + +[ -x "${NXPROXY}" ] || dependency_error "nxproxy" "nxproxy" "binary" + set -e phase "Cleaning" -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 924f0b2e37631ef83efec0fb7a11e36af675711d Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:30:08 2015 +0200 macbuild.sh: add EXE_DIR and FRAMEWORKS_DIR internal variables. Create directories based on that. Use them when bundling. --- debian/changelog | 2 ++ macbuild.sh | 12 ++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index bf6b9ad..ee880a0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -98,6 +98,8 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - macbuild.sh: add new get_nesting_level() helper function. - macbuild.sh: add new repeat_str() helper function. - macbuild.sh: refactor nxproxy detection to use MACPORTS_PREFIX. + - macbuild.sh: add EXE_DIR and FRAMEWORKS_DIR internal variables. Create + directories based on that. Use them when bundling. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index 85ae181..234cdc0 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -104,6 +104,8 @@ TOP_DIR="$(dirname "$0")" [[ "${TOP_DIR}" == /* ]] || TOP_DIR="${PWD}/${TOP_DIR#./}" BUILD_DIR="${TOP_DIR}/client_build" APPBUNDLE="${BUILD_DIR}/${NAME}.app" +EXE_DIR="${APPBUNDLE}/Contents/exe/" +FRAMEWORKS_DIR="${APPBUNDLE}/Contents/Frameworks/" DMGFILE="${BUILD_DIR}/${NAME}.dmg" PROJECT="${TOP_DIR}/${NAME}.pro" PKG_DMG="${TOP_DIR}/pkg-dmg" @@ -185,15 +187,17 @@ qmake -config "${BUILD_MODE}" -spec macx-g++ "${PROJECT}" \ phase "Running make" make -j2 +mkdir -p "${EXE_DIR}/" +mkdir -p "${FRAMEWORKS_DIR}/" + phase "Copying nxproxy" -mkdir -p "${APPBUNDLE}/Contents/exe" -cp "${NXPROXY}" "${APPBUNDLE}/Contents/exe" +cp -av "${NXPROXY}" "${EXE_DIR}/" if [ "${BUNDLE}" = "1" ]; then dylibbundler \ - --fix-file "${APPBUNDLE}/Contents/exe/nxproxy" \ + --fix-file "${EXE_DIR}/nxproxy" \ --bundle-deps \ - --dest-dir "${APPBUNDLE}/Contents/Frameworks" \ + --dest-dir "${FRAMEWORKS_DIR}/" \ --install-path "@executable_path/../Frameworks/" \ --create-dir -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 9c8a50308225c5ffa7e9e45691342ccbb0a7b201 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:24:37 2015 +0200 macbuild.sh: add new repeat_str() helper function. --- debian/changelog | 1 + macbuild.sh | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/debian/changelog b/debian/changelog index b7d96aa..631a576 100644 --- a/debian/changelog +++ b/debian/changelog @@ -96,6 +96,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - macbuild.sh: add new dependency_error() helper function. - macbuild.sh: add new lazy_canonical_path() helper function. - macbuild.sh: add new get_nesting_level() helper function. + - macbuild.sh: add new repeat_str() helper function. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index 4d24e52..83e0228 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -79,6 +79,22 @@ set -x set +x } +repeat_str() { # INPUT COUNT + typeset INPUT="${1:?"Error: no input string passed to ${FUNCNAME}()."}" + typeset COUNT="${2:?"Error: no count passed to ${FUNCNAME}()."}" + + typeset ret="" + typeset -i i=0 + while [ "${i}" -lt "${COUNT}" ]; do + ret="${ret}$(printf "${INPUT}")" + i=$((${i} + 1)) + done + + printf "${ret}" + + return 0 +} + MATCH_HELP='(^((-h)|(--help))([ ]|$))|([ ]+((-h)|(--help))([ ]|$))' [ -n "${*}" ] && [[ "${*}" =~ ${MATCH_HELP} ]] && usage -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 6e917d869341d97fe85d44f64f8726e32036e733 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:33:59 2015 +0200 macbuild.sh: define PulseAudio libraries and binaries to be later copied. Discover them using MACPORTS_PREFIX. Error out if any component was not found. --- debian/changelog | 3 +++ macbuild.sh | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/debian/changelog b/debian/changelog index ee880a0..2ffb2e4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -100,6 +100,9 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - macbuild.sh: refactor nxproxy detection to use MACPORTS_PREFIX. - macbuild.sh: add EXE_DIR and FRAMEWORKS_DIR internal variables. Create directories based on that. Use them when bundling. + - macbuild.sh: define PulseAudio libraries and binaries to be later + copied. Discover them using MACPORTS_PREFIX. Error out if any component + was not found. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index 234cdc0..e7ca22d 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -122,6 +122,13 @@ else fi NXPROXY="nxproxy" +PULSEAUDIO_BINARIES=( "pulseaudio" "esdcompat" "pacat" "pacmd" "pactl" + "pamon" "paplay" "parec" "parecord" "pasuspender" ) +PULSEAUDIO_LIBRARIES=( "libpulse-simple.0.dylib" + "libpulse.0.dylib" + "libpulsecore-6.0.dylib" + "pulse-6.0" + "pulseaudio" ) : ${SDK:="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk"} : ${MACOSX_DEPLOYMENT_TARGET:="10.7"} @@ -157,6 +164,50 @@ NXPROXY="$(lazy_canonical_path "${MACPORTS_PREFIX}/bin/${NXPROXY}")" [ -x "${NXPROXY}" ] || dependency_error "nxproxy" "nxproxy" "binary" +typeset -i i +typeset -i fail +typeset -a PULSEAUDIO_BINARIES_FULL +typeset cur_binary +fail="0" +for cur_binary in ${PULSEAUDIO_BINARIES[@]}; do + cur_binary="$(lazy_canonical_path "${MACPORTS_PREFIX}/bin/${cur_binary}")" + + if [ -x "${cur_binary}" ]; then + PULSEAUDIO_BINARIES_FULL+=( "${cur_binary}" ) + else + fail="1" + break + fi +done + +[ "${fail}" -eq "1" ] && dependency_error "${cur_binary##"$(lazy_canonical_path "${MACPORTS_PREFIX}/bin/")"}" "pulseaudio" "binary" + +typeset cur_lib_or_libdir +typeset -a PULSEAUDIO_LIBRARIES_FULL +fail="0" +for cur_lib_or_libdir in ${PULSEAUDIO_LIBRARIES[@]}; do + cur_lib_or_libdir="$(lazy_canonical_path "${MACPORTS_PREFIX}/lib/${cur_lib_or_libdir}")" + + if [ -x "${cur_lib_or_libdir}" ]; then + PULSEAUDIO_LIBRARIES_FULL+=( "${cur_lib_or_libdir}" ) + elif [ -d "${cur_lib_or_libdir}" ]; then + # That's a directory... more work needed here. + typeset entry="" + for entry in "${cur_lib_or_libdir}"/*; do + typeset TMP_REGEX='^.*\.(so|dylib|bundle)(\.[0-9]+){0,2}$' + if [[ "${entry}" =~ ${TMP_REGEX} ]]; then + # Filename matched the expected template. + PULSEAUDIO_LIBRARIES_FULL+=( "$(lazy_canonical_path "${cur_lib_or_libdir}/${entry}")" ) + fi + done + else + fail="1" + break + fi +done + +[ "${fail}" -eq "1" ] && dependency_error "${cur_lib_or_libdir}" "pulseaudio" "library or library directory" + set -e phase "Cleaning" -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 206df051d1b127758e3080099597029b5cd08e20 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:35:00 2015 +0200 macbuild.sh: copy PulseAudio libraries and binaries. --- debian/changelog | 1 + macbuild.sh | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/debian/changelog b/debian/changelog index 2ffb2e4..65eb336 100644 --- a/debian/changelog +++ b/debian/changelog @@ -103,6 +103,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low - macbuild.sh: define PulseAudio libraries and binaries to be later copied. Discover them using MACPORTS_PREFIX. Error out if any component was not found. + - macbuild.sh: copy PulseAudio libraries and binaries. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index e7ca22d..6405b29 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -244,6 +244,23 @@ mkdir -p "${FRAMEWORKS_DIR}/" phase "Copying nxproxy" cp -av "${NXPROXY}" "${EXE_DIR}/" +phase "Copying PulseAudio" +for cur_binary in ${PULSEAUDIO_BINARIES_FULL[@]}; do + cp -av "${cur_binary}" "${EXE_DIR}/" +done + +typeset intermediate_lib_dir="" +for cur_binary in ${PULSEAUDIO_LIBRARIES_FULL[@]}; do +set -x + intermediate_lib_dir="$(lazy_canonical_path "$(dirname "${cur_binary}")/")" + intermediate_lib_dir="${intermediate_lib_dir##"$(lazy_canonical_path "${MACPORTS_PREFIX}/lib/")"}" + + mkdir -p "${FRAMEWORKS_DIR}/${intermediate_lib_dir}/" + + cp -av "${cur_binary}" "${FRAMEWORKS_DIR}/${intermediate_lib_dir}/" +set +x +done + if [ "${BUNDLE}" = "1" ]; then dylibbundler \ --fix-file "${EXE_DIR}/nxproxy" \ -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 384bbc1e6c80361a6e00dcdf79a3ab3e64a70798 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:36:16 2015 +0200 macbuild.sh: add phase output for bundling nxproxy. --- debian/changelog | 1 + macbuild.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/debian/changelog b/debian/changelog index 65eb336..7007c44 100644 --- a/debian/changelog +++ b/debian/changelog @@ -104,6 +104,7 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low copied. Discover them using MACPORTS_PREFIX. Error out if any component was not found. - macbuild.sh: copy PulseAudio libraries and binaries. + - macbuild.sh: add phase output for bundling nxproxy. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index 6405b29..61df87b 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -262,6 +262,7 @@ set +x done if [ "${BUNDLE}" = "1" ]; then + phase "Bundling nxproxy" dylibbundler \ --fix-file "${EXE_DIR}/nxproxy" \ --bundle-deps \ -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch bugfix/osx in repository x2goclient. commit 0ae801844bc0e6c03111c1a0bf832d03a5ffb8d2 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun May 3 23:37:46 2015 +0200 macbuild.sh: add work-in-progress PulseAudio bundling. Needs to be ripped apart and be redone, because dylibbundler is not smart enough to handle our case. --- debian/changelog | 3 +++ macbuild.sh | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/debian/changelog b/debian/changelog index 7007c44..c16421e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -105,6 +105,9 @@ x2goclient (4.0.4.1-0x2go1) UNRELEASED; urgency=low was not found. - macbuild.sh: copy PulseAudio libraries and binaries. - macbuild.sh: add phase output for bundling nxproxy. + - macbuild.sh: add work-in-progress PulseAudio bundling. Needs to be ripped + apart and be redone, because dylibbundler is not smart enough to handle + our case. -- X2Go Release Manager <git-admin@x2go.org> Tue, 26 May 2015 21:42:09 +0200 diff --git a/macbuild.sh b/macbuild.sh index 61df87b..7b69dcf 100755 --- a/macbuild.sh +++ b/macbuild.sh @@ -270,6 +270,41 @@ if [ "${BUNDLE}" = "1" ]; then --install-path "@executable_path/../Frameworks/" \ --create-dir + phase "Bundling PulseAudio" + typeset cur_binary_name="" + for cur_binary in ${PULSEAUDIO_BINARIES_FULL[@]}; do + if [ ! -L "${cur_binary}" ]; then + cur_binary_name="$(basename "${cur_binary}")" + dylibbundler \ + --fix-file "${EXE_DIR}/${cur_binary_name}" \ + --bundle-deps \ + --dest-dir "${FRAMEWORKS_DIR}/" \ + --install-path "@executable_path/../Frameworks/" \ + --create-dir \ + --overwrite-files + fi + done + + typeset intermediate_lib_dir="" + for cur_binary in ${PULSEAUDIO_LIBRARIES_FULL[@]}; do + intermediate_lib_dir="$(lazy_canonical_path "$(dirname "${cur_binary}")/")" + intermediate_lib_dir="${intermediate_lib_dir##"$(lazy_canonical_path "${MACPORTS_PREFIX}/lib/")"}" + + if [ ! -L "${cur_binary}" ]; then + cur_binary_name="$(basename "${cur_binary}")" + + typeset nesting_level="$(get_nesting_level "${intermediate_lib_dir}")" + + dylibbundler \ + --fix-file "${FRAMEWORKS_DIR}/${intermediate_lib_dir}/${cur_binary_name}" \ + --bundle-deps \ + --dest-dir "${FRAMEWORKS_DIR}/" \ + --install-path "@loader_path/$(repeat_str "../" "${nesting_level}")Frameworks/" \ + --create-dir \ + --overwrite-files + fi + done + phase "Bundling up using macdeployqt" macdeployqt "${APPBUNDLE}" -verbose=2 -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git