summaryrefslogtreecommitdiffabout
path: root/kabc
Unidiff
Diffstat (limited to 'kabc') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/dir/resourcedir.cpp7
-rw-r--r--kabc/plugins/file/resourcefile.cpp7
-rw-r--r--kabc/plugins/ldap/resourceldap.cpp7
3 files changed, 21 insertions, 0 deletions
diff --git a/kabc/plugins/dir/resourcedir.cpp b/kabc/plugins/dir/resourcedir.cpp
index e2b7b08..c61664b 100644
--- a/kabc/plugins/dir/resourcedir.cpp
+++ b/kabc/plugins/dir/resourcedir.cpp
@@ -1,184 +1,191 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28 28
29#include <sys/types.h> 29#include <sys/types.h>
30#include <sys/stat.h> 30#include <sys/stat.h>
31#ifndef _WIN32_ 31#ifndef _WIN32_
32#include <unistd.h> 32#include <unistd.h>
33#endif 33#endif
34 34
35#include <qregexp.h> 35#include <qregexp.h>
36#include <qtimer.h> 36#include <qtimer.h>
37#include <qwidget.h> 37#include <qwidget.h>
38 38
39#include <kapplication.h> 39#include <kapplication.h>
40#include <kconfig.h> 40#include <kconfig.h>
41#include <kdebug.h> 41#include <kdebug.h>
42//US #include <kgenericfactory.h> 42//US #include <kgenericfactory.h>
43#include <kglobal.h> 43#include <kglobal.h>
44#include <klocale.h> 44#include <klocale.h>
45#include <kstandarddirs.h> 45#include <kstandarddirs.h>
46#include <kurlrequester.h> 46#include <kurlrequester.h>
47#include <kmessagebox.h> 47#include <kmessagebox.h>
48 48
49#include "addressbook.h" 49#include "addressbook.h"
50 50
51#include "formatfactory.h" 51#include "formatfactory.h"
52 52
53#include "resourcedirconfig.h" 53#include "resourcedirconfig.h"
54#include "stdaddressbook.h" 54#include "stdaddressbook.h"
55 55
56//US 56//US
57#include <qdir.h> 57#include <qdir.h>
58 58
59#define NO_DIRWATCH 59#define NO_DIRWATCH
60#include "resourcedir.h" 60#include "resourcedir.h"
61 61
62//#define ALLOW_LOCKING 62//#define ALLOW_LOCKING
63 63
64using namespace KABC; 64using namespace KABC;
65 65
66extern "C" 66extern "C"
67#ifdef _WIN32_ 67#ifdef _WIN32_
68__declspec(dllexport) 68__declspec(dllexport)
69#else 69#else
70{ 70{
71#endif 71#endif
72 72
73//US void *init_kabc_dir() 73//US void *init_kabc_dir()
74 void *init_microkabc_dir() 74 void *init_microkabc_dir()
75 { 75 {
76 return new KRES::PluginFactory<ResourceDir,ResourceDirConfig>(); 76 return new KRES::PluginFactory<ResourceDir,ResourceDirConfig>();
77 } 77 }
78#ifndef _WIN32_ 78#ifndef _WIN32_
79} 79}
80#endif 80#endif
81 81
82ResourceDir::ResourceDir( const KConfig *config ) 82ResourceDir::ResourceDir( const KConfig *config )
83 : Resource( config ) 83 : Resource( config )
84{ 84{
85 QString path; 85 QString path;
86 86
87 KConfig *cfg = (KConfig *)config; 87 KConfig *cfg = (KConfig *)config;
88 if ( cfg ) { 88 if ( cfg ) {
89#ifdef _WIN32_
90 // we use plugins on win32. the group is stored in a static variable
91 // such that group info not available on win32 plugins
92 // to fix that, it would be a looooot of work
93 if ( !cfg->tempGroup().isEmpty() )
94 cfg->setGroup( cfg->tempGroup() );
95#endif
89//US path = config->readEntry( "FilePath" ); 96//US path = config->readEntry( "FilePath" );
90 path = cfg->readEntry( "FilePath", StdAddressBook::directoryName() ); 97 path = cfg->readEntry( "FilePath", StdAddressBook::directoryName() );
91//US mFormatName = config->readEntry( "FileFormat" ); 98//US mFormatName = config->readEntry( "FileFormat" );
92 mFormatName = cfg->readEntry( "FileFormat", "vcard" ); 99 mFormatName = cfg->readEntry( "FileFormat", "vcard" );
93 } else { 100 } else {
94 path = StdAddressBook::directoryName(); 101 path = StdAddressBook::directoryName();
95 mFormatName = "vcard"; 102 mFormatName = "vcard";
96 } 103 }
97 104
98 105
99 FormatFactory *factory = FormatFactory::self(); 106 FormatFactory *factory = FormatFactory::self();
100 mFormat = factory->format( mFormatName ); 107 mFormat = factory->format( mFormatName );
101 108
102 if ( !mFormat ) { 109 if ( !mFormat ) {
103 mFormatName = "vcard"; 110 mFormatName = "vcard";
104 mFormat = factory->format( mFormatName ); 111 mFormat = factory->format( mFormatName );
105 } 112 }
106 113
107/*US 114/*US
108//US qDebug("ResourceDir::ResourceDir initialized with format %s ", mFormatName.latin1()); 115//US qDebug("ResourceDir::ResourceDir initialized with format %s ", mFormatName.latin1());
109 if (mFormatName == "vcard") 116 if (mFormatName == "vcard")
110 mFormat = new VCardFormatPlugin2(); 117 mFormat = new VCardFormatPlugin2();
111 else if (mFormatName == "binary") 118 else if (mFormatName == "binary")
112 mFormat = new BinaryFormat(); 119 mFormat = new BinaryFormat();
113 else 120 else
114 qDebug("ResourceFile::init format unknown !!! %s ", mFormatName.latin1()); 121 qDebug("ResourceFile::init format unknown !!! %s ", mFormatName.latin1());
115*/ 122*/
116#ifndef NO_DIRWATCH 123#ifndef NO_DIRWATCH
117 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( pathChanged() ) ); 124 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( pathChanged() ) );
118 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( pathChanged() ) ); 125 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( pathChanged() ) );
119 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( pathChanged() ) ); 126 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( pathChanged() ) );
120#endif 127#endif
121 setPath( path ); 128 setPath( path );
122} 129}
123 130
124ResourceDir::~ResourceDir() 131ResourceDir::~ResourceDir()
125{ 132{
126 delete mFormat; 133 delete mFormat;
127 mFormat = 0; 134 mFormat = 0;
128} 135}
129 136
130void ResourceDir::writeConfig( KConfig *config ) 137void ResourceDir::writeConfig( KConfig *config )
131{ 138{
132 config->setGroup( "Resource_" + identifier() ); 139 config->setGroup( "Resource_" + identifier() );
133 Resource::writeConfig( config ); 140 Resource::writeConfig( config );
134 141
135 config->writeEntry( "FilePath", mPath ); 142 config->writeEntry( "FilePath", mPath );
136 config->writeEntry( "FileFormat", mFormatName ); 143 config->writeEntry( "FileFormat", mFormatName );
137} 144}
138 145
139Ticket *ResourceDir::requestSaveTicket() 146Ticket *ResourceDir::requestSaveTicket()
140{ 147{
141 148
142 149
143 if ( !addressBook() ) return 0; 150 if ( !addressBook() ) return 0;
144#ifdef ALLOW_LOCKING 151#ifdef ALLOW_LOCKING
145 if ( !lock( mPath ) ) { 152 if ( !lock( mPath ) ) {
146 153
147 return 0; 154 return 0;
148 } 155 }
149#endif 156#endif
150 return createTicket( this ); 157 return createTicket( this );
151 158
152} 159}
153 160
154 161
155bool ResourceDir::doOpen() 162bool ResourceDir::doOpen()
156{ 163{
157 QDir dir( mPath ); 164 QDir dir( mPath );
158 if ( !dir.exists() ) { // no directory available 165 if ( !dir.exists() ) { // no directory available
159 return dir.mkdir( dir.path() ); 166 return dir.mkdir( dir.path() );
160 } else { 167 } else {
161 QString testName = dir.entryList( QDir::Files )[0]; 168 QString testName = dir.entryList( QDir::Files )[0];
162 if ( testName.isNull() || testName.isEmpty() ) // no file in directory 169 if ( testName.isNull() || testName.isEmpty() ) // no file in directory
163 return true; 170 return true;
164 171
165 QFile file( mPath + "/" + testName ); 172 QFile file( mPath + "/" + testName );
166 if ( file.open( IO_ReadOnly ) ) 173 if ( file.open( IO_ReadOnly ) )
167 return true; 174 return true;
168 175
169 if ( file.size() == 0 ) 176 if ( file.size() == 0 )
170 return true; 177 return true;
171 178
172 bool ok = mFormat->checkFormat( &file ); 179 bool ok = mFormat->checkFormat( &file );
173 file.close(); 180 file.close();
174 return ok; 181 return ok;
175 } 182 }
176} 183}
177 184
178void ResourceDir::doClose() 185void ResourceDir::doClose()
179{ 186{
180} 187}
181 188
182bool ResourceDir::load() 189bool ResourceDir::load()
183{ 190{
184 QDir dir( mPath ); 191 QDir dir( mPath );
diff --git a/kabc/plugins/file/resourcefile.cpp b/kabc/plugins/file/resourcefile.cpp
index c89939d..dad4571 100644
--- a/kabc/plugins/file/resourcefile.cpp
+++ b/kabc/plugins/file/resourcefile.cpp
@@ -1,181 +1,188 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28#include <sys/types.h> 28#include <sys/types.h>
29#include <sys/stat.h> 29#include <sys/stat.h>
30#ifndef _WIN32_ 30#ifndef _WIN32_
31#include <unistd.h> 31#include <unistd.h>
32#endif 32#endif
33 33
34#include <qfile.h> 34#include <qfile.h>
35#include <qfileinfo.h> 35#include <qfileinfo.h>
36#include <qregexp.h> 36#include <qregexp.h>
37#include <qtimer.h> 37#include <qtimer.h>
38 38
39#include <kapplication.h> 39#include <kapplication.h>
40#include <kconfig.h> 40#include <kconfig.h>
41#include <kdebug.h> 41#include <kdebug.h>
42#include <klocale.h> 42#include <klocale.h>
43//US #include <ksavefile.h> 43//US #include <ksavefile.h>
44#include <kstandarddirs.h> 44#include <kstandarddirs.h>
45#include <kmessagebox.h> 45#include <kmessagebox.h>
46#include <kglobalsettings.h> 46#include <kglobalsettings.h>
47 47
48#include "formatfactory.h" 48#include "formatfactory.h"
49 49
50#include "resource.h" 50#include "resource.h"
51#include "resourcefileconfig.h" 51#include "resourcefileconfig.h"
52#include "stdaddressbook.h" 52#include "stdaddressbook.h"
53#define NO_DIRWATCH 53#define NO_DIRWATCH
54#include "resourcefile.h" 54#include "resourcefile.h"
55 55
56//#define ALLOW_LOCKING 56//#define ALLOW_LOCKING
57 57
58 58
59using namespace KABC; 59using namespace KABC;
60 60
61extern "C" 61extern "C"
62#ifdef _WIN32_ 62#ifdef _WIN32_
63__declspec(dllexport) 63__declspec(dllexport)
64#else 64#else
65{ 65{
66#endif 66#endif
67 67
68//US void *init_kabc_file() 68//US void *init_kabc_file()
69 void *init_microkabc_file() 69 void *init_microkabc_file()
70 { 70 {
71 return new KRES::PluginFactory<ResourceFile,ResourceFileConfig>(); 71 return new KRES::PluginFactory<ResourceFile,ResourceFileConfig>();
72 } 72 }
73#ifndef _WIN32_ 73#ifndef _WIN32_
74} 74}
75#endif 75#endif
76 76
77ResourceFile::ResourceFile( const KConfig *config ) 77ResourceFile::ResourceFile( const KConfig *config )
78 : Resource( config ) , mFormat( 0 ) 78 : Resource( config ) , mFormat( 0 )
79{ 79{
80 QString fileName, formatName, default_fileName; 80 QString fileName, formatName, default_fileName;
81 81
82 default_fileName = StdAddressBook::fileName(); 82 default_fileName = StdAddressBook::fileName();
83 mLastBackupDate = -1; 83 mLastBackupDate = -1;
84 KConfig *cfg = (KConfig *)config; 84 KConfig *cfg = (KConfig *)config;
85 if ( cfg ) { 85 if ( cfg ) {
86#ifdef _WIN32_
87 // we use plugins on win32. the group is stored in a static variable
88 // such that group info not available on win32 plugins
89 // to fix that, it would be a looooot of work
90 if ( !cfg->tempGroup().isEmpty() )
91 cfg->setGroup( cfg->tempGroup() );
92#endif
86 fileName = cfg->readEntry( "FileName", default_fileName ); 93 fileName = cfg->readEntry( "FileName", default_fileName );
87 formatName = cfg->readEntry( "FileFormat", "vcard" ); 94 formatName = cfg->readEntry( "FileFormat", "vcard" );
88 mFamily = cfg->readEntry( "ResourceName", "std" ); 95 mFamily = cfg->readEntry( "ResourceName", "std" );
89 mLastBackupDate = cfg->readNumEntry( "LastBackupDate", 0 ); 96 mLastBackupDate = cfg->readNumEntry( "LastBackupDate", 0 );
90 } else { 97 } else {
91 fileName = default_fileName; 98 fileName = default_fileName;
92 formatName = "vcard"; 99 formatName = "vcard";
93 } 100 }
94 101
95 init( fileName, formatName ); 102 init( fileName, formatName );
96} 103}
97 104
98ResourceFile::ResourceFile( const QString &fileName , 105ResourceFile::ResourceFile( const QString &fileName ,
99 const QString &formatName ) 106 const QString &formatName )
100 : Resource( 0 ) 107 : Resource( 0 )
101{ 108{
102// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1()); 109// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1());
103 110
104 111
105 mLastBackupDate = -1; 112 mLastBackupDate = -1;
106 init( fileName, formatName ); 113 init( fileName, formatName );
107} 114}
108 115
109void ResourceFile::init( const QString &fileName, const QString &formatName ) 116void ResourceFile::init( const QString &fileName, const QString &formatName )
110{ 117{
111 mFormatName = formatName; 118 mFormatName = formatName;
112 119
113 FormatFactory *factory = FormatFactory::self(); 120 FormatFactory *factory = FormatFactory::self();
114 mFormat = factory->format( mFormatName ); 121 mFormat = factory->format( mFormatName );
115 122
116 if ( !mFormat ) { 123 if ( !mFormat ) {
117 mFormatName = "vcard"; 124 mFormatName = "vcard";
118 mFormat = factory->format( mFormatName ); 125 mFormat = factory->format( mFormatName );
119 } 126 }
120 127
121#ifndef NO_DIRWATCH 128#ifndef NO_DIRWATCH
122 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); 129 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
123 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); 130 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
124 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); 131 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
125#endif 132#endif
126 133
127 QString localKdeDir; 134 QString localKdeDir;
128 localKdeDir = readEnvPath("LOCALMICROKDEHOME"); 135 localKdeDir = readEnvPath("LOCALMICROKDEHOME");
129 if ( ! localKdeDir.isEmpty() ) { 136 if ( ! localKdeDir.isEmpty() ) {
130 qDebug("LOCALMICROKDEHOME is set to: %s",localKdeDir.latin1() ); 137 qDebug("LOCALMICROKDEHOME is set to: %s",localKdeDir.latin1() );
131 QFileInfo fi ( fileName ); 138 QFileInfo fi ( fileName );
132 QString localname = localKdeDir + "/apps/kabc/" + fi.fileName (); 139 QString localname = localKdeDir + "/apps/kabc/" + fi.fileName ();
133 QFileInfo fi2 ( localname ); 140 QFileInfo fi2 ( localname );
134 if ( ! fi2.exists() || mFamily == "sync_res" ) { 141 if ( ! fi2.exists() || mFamily == "sync_res" ) {
135 if ( fi.exists() && mFamily == "sync_res") { 142 if ( fi.exists() && mFamily == "sync_res") {
136 qDebug("LOCAL mode SYNC mode using absolute file path "); 143 qDebug("LOCAL mode SYNC mode using absolute file path ");
137 setFileName( fileName ); 144 setFileName( fileName );
138 return; 145 return;
139 } else { 146 } else {
140 KMessageBox::error(0,i18n("Addressbook resource file not found:\n '%1'.\nIn LOCAL mode only resource files in\n'%2'\nare supported.\n(i.e. in the dir ./apps/kabc/ relative to the kapi(.exe) binary.)\n\nIf you are starting KA/Pi for the very first time\nyou will get this error message as well.\nIt will create the missing file automatically for you.").arg(localname).arg(localKdeDir+"/apps/kabc/") ); 147 KMessageBox::error(0,i18n("Addressbook resource file not found:\n '%1'.\nIn LOCAL mode only resource files in\n'%2'\nare supported.\n(i.e. in the dir ./apps/kabc/ relative to the kapi(.exe) binary.)\n\nIf you are starting KA/Pi for the very first time\nyou will get this error message as well.\nIt will create the missing file automatically for you.").arg(localname).arg(localKdeDir+"/apps/kabc/") );
141 setFileName( localname ); 148 setFileName( localname );
142 return; 149 return;
143 } 150 }
144 151
145 } else { 152 } else {
146 qDebug("Local resource file found. Changing filename to: %s",localname.latin1() ); 153 qDebug("Local resource file found. Changing filename to: %s",localname.latin1() );
147 setFileName( localname ); 154 setFileName( localname );
148 return; 155 return;
149 } 156 }
150 157
151 } 158 }
152 setFileName( fileName ); 159 setFileName( fileName );
153} 160}
154 161
155ResourceFile::~ResourceFile() 162ResourceFile::~ResourceFile()
156{ 163{
157 delete mFormat; 164 delete mFormat;
158 mFormat = 0; 165 mFormat = 0;
159} 166}
160 167
161void ResourceFile::writeConfig( KConfig *config ) 168void ResourceFile::writeConfig( KConfig *config )
162{ 169{
163 170
164 config->setGroup( "Resource_" + identifier() ); 171 config->setGroup( "Resource_" + identifier() );
165 Resource::writeConfig( config ); 172 Resource::writeConfig( config );
166 173
167 config->writeEntry( "FileName", fileName() ); 174 config->writeEntry( "FileName", fileName() );
168 config->writeEntry( "FileFormat", mFormatName ); 175 config->writeEntry( "FileFormat", mFormatName );
169 176
170// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1()); 177// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1());
171 178
172} 179}
173 180
174Ticket *ResourceFile::requestSaveTicket() 181Ticket *ResourceFile::requestSaveTicket()
175{ 182{
176 kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl; 183 kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl;
177 184
178 if ( !addressBook() ) return 0; 185 if ( !addressBook() ) return 0;
179 186
180#ifdef ALLOW_LOCKING 187#ifdef ALLOW_LOCKING
181 if ( !lock( mFileName ) ) { 188 if ( !lock( mFileName ) ) {
diff --git a/kabc/plugins/ldap/resourceldap.cpp b/kabc/plugins/ldap/resourceldap.cpp
index 55c43af..c3097de 100644
--- a/kabc/plugins/ldap/resourceldap.cpp
+++ b/kabc/plugins/ldap/resourceldap.cpp
@@ -1,154 +1,161 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28#include <kdebug.h> 28#include <kdebug.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klineedit.h> 30#include <klineedit.h>
31#include <klocale.h> 31#include <klocale.h>
32#include <kconfig.h> 32#include <kconfig.h>
33#include <kstringhandler.h> 33#include <kstringhandler.h>
34 34
35#include <stdlib.h> 35#include <stdlib.h>
36 36
37#include "resourceldap.h" 37#include "resourceldap.h"
38#include "resourceldapconfig.h" 38#include "resourceldapconfig.h"
39 39
40using namespace KABC; 40using namespace KABC;
41 41
42extern "C" 42extern "C"
43{ 43{
44//US void *init_kabc_ldap() 44//US void *init_kabc_ldap()
45 void *init_microkabc_ldap() 45 void *init_microkabc_ldap()
46 { 46 {
47 return new KRES::PluginFactory<ResourceLDAP,ResourceLDAPConfig>(); 47 return new KRES::PluginFactory<ResourceLDAP,ResourceLDAPConfig>();
48 } 48 }
49} 49}
50 50
51void addModOp( LDAPMod ***pmods, const QString &attr, const QString &value ); 51void addModOp( LDAPMod ***pmods, const QString &attr, const QString &value );
52 52
53 53
54ResourceLDAP::ResourceLDAP( const KConfig *config ) 54ResourceLDAP::ResourceLDAP( const KConfig *config )
55 : Resource( config ), mPort( 389 ), mLdap( 0 ) 55 : Resource( config ), mPort( 389 ), mLdap( 0 )
56{ 56{
57 KConfig *cfg = (KConfig *)config; 57 KConfig *cfg = (KConfig *)config;
58 if ( cfg ) { 58 if ( cfg ) {
59#ifdef _WIN32_
60 // we use plugins on win32. the group is stored in a static variable
61 // such that group info not available on win32 plugins
62 // to fix that, it would be a looooot of work
63 if ( !cfg->tempGroup().isEmpty() )
64 cfg->setGroup( cfg->tempGroup() );
65#endif
59 mUser = cfg->readEntry( "LdapUser" ); 66 mUser = cfg->readEntry( "LdapUser" );
60 mPassword = KStringHandler::obscure( cfg->readEntry( "LdapPassword" ) ); 67 mPassword = KStringHandler::obscure( cfg->readEntry( "LdapPassword" ) );
61 mDn = cfg->readEntry( "LdapDn" ); 68 mDn = cfg->readEntry( "LdapDn" );
62 mHost = cfg->readEntry( "LdapHost" ); 69 mHost = cfg->readEntry( "LdapHost" );
63 mPort = cfg->readNumEntry( "LdapPort", 389 ); 70 mPort = cfg->readNumEntry( "LdapPort", 389 );
64 mFilter = cfg->readEntry( "LdapFilter" ); 71 mFilter = cfg->readEntry( "LdapFilter" );
65 mAnonymous = cfg->readBoolEntry( "LdapAnonymous" ); 72 mAnonymous = cfg->readBoolEntry( "LdapAnonymous" );
66 73
67 QStringList attributes = cfg->readListEntry( "LdapAttributes" ); 74 QStringList attributes = cfg->readListEntry( "LdapAttributes" );
68 for ( uint pos = 0; pos < attributes.count(); pos += 2 ) 75 for ( uint pos = 0; pos < attributes.count(); pos += 2 )
69 mAttributes.insert( attributes[ pos ], attributes[ pos + 1 ] ); 76 mAttributes.insert( attributes[ pos ], attributes[ pos + 1 ] );
70 } 77 }
71 78
72 /** 79 /**
73 If you want to add new attributes, append them here, add a 80 If you want to add new attributes, append them here, add a
74 translation string in the ctor of AttributesDialog and 81 translation string in the ctor of AttributesDialog and
75 handle them in the load() method below. 82 handle them in the load() method below.
76 These are the default values from 83 These are the default values from
77 */ 84 */
78 if ( mAttributes.count() == 0 ) { 85 if ( mAttributes.count() == 0 ) {
79 mAttributes.insert( "commonName", "cn" ); 86 mAttributes.insert( "commonName", "cn" );
80 mAttributes.insert( "formattedName", "displayName" ); 87 mAttributes.insert( "formattedName", "displayName" );
81 mAttributes.insert( "familyName", "sn" ); 88 mAttributes.insert( "familyName", "sn" );
82 mAttributes.insert( "givenName", "givenName" ); 89 mAttributes.insert( "givenName", "givenName" );
83 mAttributes.insert( "mail", "mail" ); 90 mAttributes.insert( "mail", "mail" );
84 mAttributes.insert( "mailAlias", "" ); 91 mAttributes.insert( "mailAlias", "" );
85 mAttributes.insert( "phoneNumber", "telephoneNumber" ); 92 mAttributes.insert( "phoneNumber", "telephoneNumber" );
86 mAttributes.insert( "uid", "uid" ); 93 mAttributes.insert( "uid", "uid" );
87 } 94 }
88} 95}
89 96
90void ResourceLDAP::writeConfig( KConfig *config ) 97void ResourceLDAP::writeConfig( KConfig *config )
91{ 98{
92 Resource::writeConfig( config ); 99 Resource::writeConfig( config );
93 100
94 config->writeEntry( "LdapUser", mUser ); 101 config->writeEntry( "LdapUser", mUser );
95 config->writeEntry( "LdapPassword", KStringHandler::obscure( mPassword ) ); 102 config->writeEntry( "LdapPassword", KStringHandler::obscure( mPassword ) );
96 config->writeEntry( "LdapDn", mDn ); 103 config->writeEntry( "LdapDn", mDn );
97 config->writeEntry( "LdapHost", mHost ); 104 config->writeEntry( "LdapHost", mHost );
98 config->writeEntry( "LdapPort", mPort ); 105 config->writeEntry( "LdapPort", mPort );
99 config->writeEntry( "LdapFilter", mFilter ); 106 config->writeEntry( "LdapFilter", mFilter );
100 config->writeEntry( "LdapAnonymous", mAnonymous ); 107 config->writeEntry( "LdapAnonymous", mAnonymous );
101 108
102 QStringList attributes; 109 QStringList attributes;
103 QMap<QString, QString>::Iterator it; 110 QMap<QString, QString>::Iterator it;
104 for ( it = mAttributes.begin(); it != mAttributes.end(); ++it ) 111 for ( it = mAttributes.begin(); it != mAttributes.end(); ++it )
105 attributes << it.key() << it.data(); 112 attributes << it.key() << it.data();
106 113
107 config->writeEntry( "LdapAttributes", attributes ); 114 config->writeEntry( "LdapAttributes", attributes );
108} 115}
109 116
110Ticket *ResourceLDAP::requestSaveTicket() 117Ticket *ResourceLDAP::requestSaveTicket()
111{ 118{
112 if ( !addressBook() ) { 119 if ( !addressBook() ) {
113 kdDebug(5700) << "no addressbook" << endl; 120 kdDebug(5700) << "no addressbook" << endl;
114 return 0; 121 return 0;
115 } 122 }
116 123
117 return createTicket( this ); 124 return createTicket( this );
118} 125}
119 126
120bool ResourceLDAP::doOpen() 127bool ResourceLDAP::doOpen()
121{ 128{
122 if ( mLdap ) 129 if ( mLdap )
123 return false; 130 return false;
124 131
125 if ( !mPort ) 132 if ( !mPort )
126 mPort = 389; 133 mPort = 389;
127 134
128 mLdap = ldap_init( mHost.local8Bit(), mPort ); 135 mLdap = ldap_init( mHost.local8Bit(), mPort );
129 if ( !mLdap ) { 136 if ( !mLdap ) {
130 addressBook()->error( i18n( "Unable to connect to server '%1' on port '%2'" ).arg( mHost ).arg( mPort ) ); 137 addressBook()->error( i18n( "Unable to connect to server '%1' on port '%2'" ).arg( mHost ).arg( mPort ) );
131 return false; 138 return false;
132 } 139 }
133 140
134 if ( !mUser.isEmpty() && !mAnonymous ) { 141 if ( !mUser.isEmpty() && !mAnonymous ) {
135 if ( ldap_simple_bind_s( mLdap, mUser.local8Bit(), mPassword.local8Bit() ) != LDAP_SUCCESS ) { 142 if ( ldap_simple_bind_s( mLdap, mUser.local8Bit(), mPassword.local8Bit() ) != LDAP_SUCCESS ) {
136 addressBook()->error( i18n( "Unable to bind to server '%1'" ).arg( mHost ) ); 143 addressBook()->error( i18n( "Unable to bind to server '%1'" ).arg( mHost ) );
137 return false; 144 return false;
138 } 145 }
139 146
140 kdDebug(5700) << "ResourceLDAP: bind to server successfully" << endl; 147 kdDebug(5700) << "ResourceLDAP: bind to server successfully" << endl;
141 } else { 148 } else {
142 if ( ldap_simple_bind_s( mLdap, NULL, NULL ) != LDAP_SUCCESS ) { 149 if ( ldap_simple_bind_s( mLdap, NULL, NULL ) != LDAP_SUCCESS ) {
143 addressBook()->error( i18n( "Unable to bind anonymously to server '%1'" ).arg( mHost ) ); 150 addressBook()->error( i18n( "Unable to bind anonymously to server '%1'" ).arg( mHost ) );
144 return false; 151 return false;
145 } 152 }
146 153
147 kdDebug( 5700 ) << "ResourceLDAP: bind anonymously to server successfully" << endl; 154 kdDebug( 5700 ) << "ResourceLDAP: bind anonymously to server successfully" << endl;
148 } 155 }
149 156
150 int deref = LDAP_DEREF_ALWAYS; 157 int deref = LDAP_DEREF_ALWAYS;
151 if ( ldap_set_option( mLdap, LDAP_OPT_DEREF, (void *) &deref ) != LDAP_OPT_SUCCESS ) { 158 if ( ldap_set_option( mLdap, LDAP_OPT_DEREF, (void *) &deref ) != LDAP_OPT_SUCCESS ) {
152 kdDebug(5700) << "ResourceLDAP: can't set 'deref' option" << endl; 159 kdDebug(5700) << "ResourceLDAP: can't set 'deref' option" << endl;
153 return false; 160 return false;
154 } 161 }