Bug#545139: akonadi-server: not possible to create socket in AFS $HOME

2011-01-14 Thread Ansgar Burchardt
Hi,

as discussed on IRC, I backported the upstream patch for this bug.

The functions in socketdir.cpp are now identical to upstream's, just
moved from utils.cpp to socketdir.cpp (as I was using this in the
earlier patch and utils.cpp is not present in Debian's version of
Akonadi anyway).

The upstream fix 1fa22c55fd98f29321b943605466ef4d4640de53 is included as
well, as per my original patch.

In addition, several places had to be changed to use the
preferredSocketDirectory function.

Upstream commit: e4affdfc2922efc10b647939fd4e068c02e256eb

Regards,
Ansgar

From: Ansgar Burchardt ans...@debian.org
Date: Mon, 29 Nov 2010 12:40:18 +0100
Subject: Move sockets away from $HOME
Bug-Debian: http://bugs.debian.org/545139
Bug: https://bugs.kde.org/show_bug.cgi?id=179006

Move directories used for sockets to /tmp, using a symlink (that includes the
hostname) to remember where it is located.

Based on upstream commit e4affdfc2922efc10b647939fd4e068c02e256eb,
includes the fix 1fa22c55fd98f29321b943605466ef4d4640de53 as well.

--- akonadi-1.3.1.orig/server/CMakeLists.txt
+++ akonadi-1.3.1/server/CMakeLists.txt
@@ -59,6 +59,7 @@
 set(libakonadiprivate_SRCS
   ${AKONADI_SHARED_SOURCES}
   src/akonadi.cpp
+  src/socketdir.cpp
   src/akonadiconnection.cpp
   src/handler.cpp
   src/handlerhelper.cpp
--- akonadi-1.3.1.orig/server/src/akonadi.cpp
+++ akonadi-1.3.1/server/src/akonadi.cpp
@@ -34,6 +34,7 @@
 #include debuginterface.h
 #include storage/itemretrievalthread.h
 #include preprocessormanager.h
+#include socketdir.h
 
 #include libs/xdgbasedirs_p.h
 #include libs/protocol_p.h
@@ -84,13 +85,7 @@
 connectionSettings.setValue( QLatin1String( Data/Method ), QLatin1String( NamedPipe ) );
 connectionSettings.setValue( QLatin1String( Data/NamedPipe ), namedPipe );
 #else
-const QString defaultSocketDir = XdgBaseDirs::saveDir( data, QLatin1String( akonadi ) );
-QString socketDir = settings.value( QLatin1String( Connection/SocketDirectory ), defaultSocketDir ).toString();
-if ( socketDir[0] != QLatin1Char( '/' ) ) {
-  QDir::home().mkdir( socketDir );
-  socketDir = QDir::homePath() + QLatin1Char( '/' ) + socketDir;
-}
-
+QString socketDir = preferredSocketDirectory( XdgBaseDirs::saveDir( data, QLatin1String( akonadi ) ) );
 const QString socketFile = socketDir + QLatin1String( /akonadiserver.socket );
 unlink( socketFile.toUtf8().constData() );
 if ( !listen( socketFile ) )
@@ -202,8 +197,7 @@
 
 #ifndef Q_OS_WIN
 QSettings connectionSettings( connectionSettingsFile, QSettings::IniFormat );
-const QString defaultSocketDir = XdgBaseDirs::saveDir( data, QLatin1String( akonadi ) );
-const QString socketDir = settings.value( QLatin1String( Connection/SocketDirectory ), defaultSocketDir ).toString();
+const QString socketDir = preferredSocketDirectory( XdgBaseDirs::saveDir( data, QLatin1String( akonadi ) ) );
 
 if ( !QDir::home().remove( socketDir + QLatin1String( /akonadiserver.socket ) ) )
 akError()  Failed to remove Unix socket;
@@ -261,7 +255,7 @@
 void AkonadiServer::startPostgresqlDatabaseProcess()
 {
   const QString dataDir = XdgBaseDirs::saveDir( data, QLatin1String( akonadi/db_data ) );
-  const QString socketDir = XdgBaseDirs::saveDir( data, QLatin1String( akonadi/db_misc ) );
+  const QString socketDir = preferredSocketDirectory( XdgBaseDirs::saveDir( data, QLatin1String( akonadi/db_misc ) ) );
 
   if ( !QFile::exists( QString::fromLatin1( %1/PG_VERSION ).arg( dataDir ) ) ) {
 // postgre data directory not initialized yet, so call initdb on it
@@ -371,7 +365,7 @@
 
   const QString dataDir = XdgBaseDirs::saveDir( data, QLatin1String( akonadi/db_data ) );
   const QString akDir   = XdgBaseDirs::saveDir( data, QLatin1String( akonadi/ ) );
-  const QString miscDir = XdgBaseDirs::saveDir( data, QLatin1String( akonadi/db_misc ) );
+  const QString miscDir = preferredSocketDirectory( XdgBaseDirs::saveDir( data, QLatin1String( akonadi/db_misc ) ) );
   const QString fileDataDir = XdgBaseDirs::saveDir( data, QLatin1String( akonadi/file_db_data ) );
 
   // generate config file
--- /dev/null
+++ akonadi-1.3.1/server/src/socketdir.cpp
@@ -0,0 +1,127 @@
+#include socketdir.h
+
+#include libs/xdgbasedirs_p.h
+
+#include QtCore/QDebug
+#include QtCore/QDir
+#include QtCore/QFileInfo
+#include QtCore/QSettings
+#include QtNetwork/QHostInfo
+
+#include cerrno
+#include cstdlib
+#include pwd.h
+#include sys/types.h
+#include unistd.h
+
+static QString akonadiSocketDirectory();
+static bool checkSocketDirectory( const QString path );
+static bool createSocketDirectory( const QString link, const QString tmpl );
+
+using namespace Akonadi;
+
+QString Akonadi::preferredSocketDirectory( const QString defaultDirectory )
+{
+  const QString serverConfigFile = XdgBaseDirs::akonadiServerConfigFile( XdgBaseDirs::ReadWrite );
+  const QSettings serverSettings( serverConfigFile, QSettings::IniFormat );
+
+#if defined(Q_OS_WINCE) || defined(Q_OS_WIN)
+  const 

Bug#545139: akonadi-server: not possible to create socket in AFS $HOME

2010-12-13 Thread Ansgar Burchardt
A patch based on the patch I submitted here[1] has been applied
upstream[2].  (The upstream patch would need some modifications to apply
to the version currently in squeeze/sid; my original patch applies
cleanly).

Is it still possible to get this included for Squeeze?  It has been
working well for me in the last two weeks.  The problem might affect
many users in university networks[3], making at least kmail unusable.

Regards,
Ansgar

[1] http://bugs.debian.org/545139#17
[2] https://bugs.kde.org/show_bug.cgi?id=179006#c12
[3] https://bugs.kde.org/show_bug.cgi?id=203460#c2



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#545139: akonadi-server: not possible to create socket in AFS $HOME

2009-09-05 Thread Markus Koeberl

Package: akonadi-server
Version: 1.2.0-2
Severity: important

It is not possible to run akonadi-server if the home directory is located on a 
AFS server because creating sockets are not sported by AFS.

Please change ~/.local/share/akonadi/akonadiserver.socket somewhere to /tmp or 
make it configurable.


-- System Information:
Debian Release: squeeze/sid
  APT prefers testing
  APT policy: (990, 'testing'), (700, 'unstable'), (500, 'oldstable'), (500, 
'stable'), (100, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.26-2-686 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages akonadi-server depends on:
ii  libakonadiprivate1 1.2.0-2   libraries for the Akonadi PIM 
stor
ii  libboost-program-optio 1.38.0-7  program options library for C++
ii  libc6  2.9-23GNU C Library: Shared libraries
ii  libgcc11:4.4.1-1 GCC support library
ii  libqt4-dbus4:4.5.2-1 Qt 4 D-Bus module
ii  libqt4-sql-mysql   4:4.5.2-1 Qt 4 MySQL database driver
ii  libqtcore4 4:4.5.2-1 Qt 4 core module
ii  libstdc++6 4.4.1-1   The GNU Standard C++ Library v3
ii  mysql-server   5.0.51a-24+lenny1 MySQL database server 
(metapackage
ii  mysql-server-5.0 [mysq 5.0.51a-24+lenny1 MySQL database server binaries

akonadi-server recommends no packages.

akonadi-server suggests no packages.

-- no debconf information




-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org