00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "ksslcertificatecache.h"
00023 #include "ksslcertchain.h"
00024 #include "ksslcertificate.h"
00025
00026 #include <stdlib.h>
00027 #include <kdebug.h>
00028 #include <dcopclient.h>
00029 #include <kdatastream.h>
00030
00031
00032 class KSSLCertificateCache::KSSLCertificateCachePrivate {
00033 public:
00034 DCOPClient *dcc;
00035
00036 KSSLCertificateCachePrivate() { dcc = new DCOPClient; dcc->attach(); }
00037 ~KSSLCertificateCachePrivate() { delete dcc;}
00038
00039 };
00040
00041
00042
00043 KSSLCertificateCache::KSSLCertificateCache() {
00044 d = new KSSLCertificateCachePrivate;
00045 }
00046
00047
00048 KSSLCertificateCache::~KSSLCertificateCache() {
00049 delete d;
00050 }
00051
00052
00053 void KSSLCertificateCache::saveToDisk() {
00054 kdDebug() << "Deprecated function KSSLCertificateCache::saveToDisk() called" << endl;
00055 }
00056
00057
00058 void KSSLCertificateCache::clearList() {
00059 kdDebug() << "Deprecated function KSSLCertificateCache::clearList() called" << endl;
00060 }
00061
00062
00063 void KSSLCertificateCache::loadDefaultPolicies() {
00064 kdDebug() << "Deprecated function KSSLCertificateCache::loadDefaultPolicies() called" << endl;
00065 }
00066
00067
00068 void KSSLCertificateCache::reload() {
00069 QByteArray data, retval;
00070 QCString rettype;
00071 QDataStream arg(data, IO_WriteOnly);
00072 d->dcc->call("kded", "kssld",
00073 "cacheReload()",
00074 data, rettype, retval);
00075 }
00076
00077
00078 void KSSLCertificateCache::addCertificate(KSSLCertificate& cert,
00079 KSSLCertificatePolicy policy, bool permanent) {
00080 QByteArray data, retval;
00081 QCString rettype;
00082 QDataStream arg(data, IO_WriteOnly);
00083 arg << cert;
00084 arg << policy;
00085 arg << permanent;
00086 d->dcc->call("kded", "kssld",
00087 "cacheAddCertificate(KSSLCertificate,KSSLCertificateCache::KSSLCertificatePolicy,bool)",
00088 data, rettype, retval);
00089 }
00090
00091
00092
00093 KSSLCertificateCache::KSSLCertificatePolicy KSSLCertificateCache::getPolicyByCN(QString& cn) {
00094 QByteArray data, retval;
00095 QCString rettype;
00096 QDataStream arg(data, IO_WriteOnly);
00097 arg << cn;
00098 bool rc = d->dcc->call("kded", "kssld",
00099 "cacheGetPolicyByCN(QString)",
00100 data, rettype, retval);
00101
00102 if (rc && rettype == "KSSLCertificateCache::KSSLCertificatePolicy") {
00103 QDataStream retStream(retval, IO_ReadOnly);
00104 KSSLCertificateCache::KSSLCertificatePolicy drc;
00105 retStream >> drc;
00106 return drc;
00107 }
00108 return KSSLCertificateCache::Ambiguous;
00109 }
00110
00111
00112 KSSLCertificateCache::KSSLCertificatePolicy KSSLCertificateCache::getPolicyByCertificate(KSSLCertificate& cert) {
00113 QByteArray data, retval;
00114 QCString rettype;
00115 QDataStream arg(data, IO_WriteOnly);
00116 arg << cert;
00117 bool rc = d->dcc->call("kded", "kssld",
00118 "cacheGetPolicyByCertificate(KSSLCertificate)",
00119 data, rettype, retval);
00120
00121 if (rc && rettype == "KSSLCertificateCache::KSSLCertificatePolicy") {
00122 QDataStream retStream(retval, IO_ReadOnly);
00123 KSSLCertificateCache::KSSLCertificatePolicy drc;
00124 retStream >> drc;
00125 return drc;
00126 }
00127 return KSSLCertificateCache::Ambiguous;
00128 }
00129
00130
00131
00132 bool KSSLCertificateCache::seenCN(QString& cn) {
00133 QByteArray data, retval;
00134 QCString rettype;
00135 QDataStream arg(data, IO_WriteOnly);
00136 arg << cn;
00137 bool rc = d->dcc->call("kded", "kssld",
00138 "cacheSeenCN(QString)",
00139 data, rettype, retval);
00140
00141 if (rc && rettype == "bool") {
00142 QDataStream retStream(retval, IO_ReadOnly);
00143 bool drc;
00144 retStream >> drc;
00145 return drc;
00146 }
00147
00148 return false;
00149 }
00150
00151
00152 bool KSSLCertificateCache::seenCertificate(KSSLCertificate& cert) {
00153 QByteArray data, retval;
00154 QCString rettype;
00155 QDataStream arg(data, IO_WriteOnly);
00156 arg << cert;
00157 bool rc = d->dcc->call("kded", "kssld",
00158 "cacheSeenCertificate(KSSLCertificate)",
00159 data, rettype, retval);
00160
00161 if (rc && rettype == "bool") {
00162 QDataStream retStream(retval, IO_ReadOnly);
00163 bool drc;
00164 retStream >> drc;
00165 return drc;
00166 }
00167
00168 return false;
00169 }
00170
00171
00172 bool KSSLCertificateCache::isPermanent(KSSLCertificate& cert) {
00173 QByteArray data, retval;
00174 QCString rettype;
00175 QDataStream arg(data, IO_WriteOnly);
00176 arg << cert;
00177 bool rc = d->dcc->call("kded", "kssld",
00178 "cacheIsPermanent(KSSLCertificate)",
00179 data, rettype, retval);
00180
00181 if (rc && rettype == "bool") {
00182 QDataStream retStream(retval, IO_ReadOnly);
00183 bool drc;
00184 retStream >> drc;
00185 return drc;
00186 }
00187
00188 return false;
00189 }
00190
00191
00192
00193 bool KSSLCertificateCache::removeByCN(QString& cn) {
00194 QByteArray data, retval;
00195 QCString rettype;
00196 QDataStream arg(data, IO_WriteOnly);
00197 arg << cn;
00198 bool rc = d->dcc->call("kded", "kssld",
00199 "cacheRemoveByCN(QString)",
00200 data, rettype, retval);
00201
00202 if (rc && rettype == "bool") {
00203 QDataStream retStream(retval, IO_ReadOnly);
00204 bool drc;
00205 retStream >> drc;
00206 return drc;
00207 }
00208
00209 return false;
00210 }
00211
00212
00213 bool KSSLCertificateCache::removeByCertificate(KSSLCertificate& cert) {
00214 QByteArray data, retval;
00215 QCString rettype;
00216 QDataStream arg(data, IO_WriteOnly);
00217 arg << cert;
00218 bool rc = d->dcc->call("kded", "kssld",
00219 "cacheRemoveByCertificate(KSSLCertificate)",
00220 data, rettype, retval);
00221
00222 if (rc && rettype == "bool") {
00223 QDataStream retStream(retval, IO_ReadOnly);
00224 bool drc;
00225 retStream >> drc;
00226 return drc;
00227 }
00228
00229 return false;
00230 }
00231
00232
00233
00234 bool KSSLCertificateCache::modifyByCN(QString& cn,
00235 KSSLCertificateCache::KSSLCertificatePolicy policy,
00236 bool permanent,
00237 QDateTime& expires) {
00238 QByteArray data, retval;
00239 QCString rettype;
00240 QDataStream arg(data, IO_WriteOnly);
00241 arg << cn << policy << permanent << expires;
00242 bool rc = d->dcc->call("kded", "kssld",
00243 "cacheModifyByCN(QString,KSSLCertificateCache::KSSLCertificatePolicy,bool,QDateTime)",
00244 data, rettype, retval);
00245
00246 if (rc && rettype == "bool") {
00247 QDataStream retStream(retval, IO_ReadOnly);
00248 bool drc;
00249 retStream >> drc;
00250 return drc;
00251 }
00252
00253 return false;
00254 }
00255
00256
00257 bool KSSLCertificateCache::modifyByCertificate(KSSLCertificate& cert,
00258 KSSLCertificateCache::KSSLCertificatePolicy policy,
00259 bool permanent,
00260 QDateTime& expires) {
00261 QByteArray data, retval;
00262 QCString rettype;
00263 QDataStream arg(data, IO_WriteOnly);
00264 arg << cert << policy << permanent << expires;
00265 bool rc = d->dcc->call("kded", "kssld",
00266 "cacheModifyByCertificate(KSSLCertificate,KSSLCertificateCache::KSSLCertificatePolicy,bool,QDateTime)",
00267 data, rettype, retval);
00268
00269 if (rc && rettype == "bool") {
00270 QDataStream retStream(retval, IO_ReadOnly);
00271 bool drc;
00272 retStream >> drc;
00273 return drc;
00274 }
00275
00276 return false;
00277 }
00278
00279
00280 QStringList KSSLCertificateCache::getHostList(KSSLCertificate& cert) {
00281 QByteArray data, retval;
00282 QCString rettype;
00283 QDataStream arg(data, IO_WriteOnly);
00284 arg << cert;
00285 bool rc = d->dcc->call("kded", "kssld",
00286 "cacheGetHostList(KSSLCertificate)",
00287 data, rettype, retval);
00288
00289 if (rc && rettype == "QStringList") {
00290 QDataStream retStream(retval, IO_ReadOnly);
00291 QStringList drc;
00292 retStream >> drc;
00293 return drc;
00294 }
00295 return QStringList();
00296 }
00297
00298
00299
00300 bool KSSLCertificateCache::addHost(KSSLCertificate& cert, QString& host) {
00301 QByteArray data, retval;
00302 QCString rettype;
00303 QDataStream arg(data, IO_WriteOnly);
00304 arg << cert << host;
00305 bool rc = d->dcc->call("kded", "kssld",
00306 "cacheAddHost(KSSLCertificate,QString)",
00307 data, rettype, retval);
00308
00309 if (rc && rettype == "bool") {
00310 QDataStream retStream(retval, IO_ReadOnly);
00311 bool drc;
00312 retStream >> drc;
00313 return drc;
00314 }
00315
00316 return false;
00317 }
00318
00319
00320
00321 bool KSSLCertificateCache::removeHost(KSSLCertificate& cert, QString& host) {
00322 QByteArray data, retval;
00323 QCString rettype;
00324 QDataStream arg(data, IO_WriteOnly);
00325 arg << cert << host;
00326 bool rc = d->dcc->call("kded", "kssld",
00327 "cacheRemoveHost(KSSLCertificate,QString)",
00328 data, rettype, retval);
00329
00330 if (rc && rettype == "bool") {
00331 QDataStream retStream(retval, IO_ReadOnly);
00332 bool drc;
00333 retStream >> drc;
00334 return drc;
00335 }
00336
00337 return false;
00338 }
00339
00340
00341 QStringList KSSLCertificateCache::getKDEKeyByEmail(const QString &email) {
00342 QByteArray data, retval;
00343 QCString rettype;
00344 QDataStream arg(data, IO_WriteOnly);
00345 arg << email;
00346 bool rc = d->dcc->call("kded", "kssld",
00347 "getKDEKeyByEmail(QString)",
00348 data, rettype, retval);
00349
00350 if (rc && rettype == "QStringList") {
00351 QDataStream retStream(retval, IO_ReadOnly);
00352 QStringList drc;
00353 retStream >> drc;
00354 return drc;
00355 }
00356
00357 return QStringList();
00358 }
00359
00360
00361 KSSLCertificate *KSSLCertificateCache::getCertByMD5Digest(const QString &key) {
00362 QByteArray data, retval;
00363 QCString rettype;
00364 QDataStream arg(data, IO_WriteOnly);
00365 arg << key;
00366 bool rc = d->dcc->call("kded", "kssld",
00367 "getCertByMD5Digest(QString)",
00368 data, rettype, retval);
00369
00370 if (rc && rettype == "KSSLCertificate") {
00371 QDataStream retStream(retval, IO_ReadOnly);
00372 KSSLCertificate *drc = new KSSLCertificate;
00373 retStream >> *drc;
00374 if (drc->getCert())
00375 return drc;
00376 delete drc;
00377 }
00378
00379 return 0L;
00380 }
00381
00382
00383 QDataStream& operator<<(QDataStream& s, const KSSLCertificateCache::KSSLCertificatePolicy& p) {
00384 s << (Q_UINT32)p;
00385 return s;
00386 }
00387
00388
00389 QDataStream& operator>>(QDataStream& s, KSSLCertificateCache::KSSLCertificatePolicy& p) {
00390 Q_UINT32 pd;
00391 s >> pd;
00392 p = (KSSLCertificateCache::KSSLCertificatePolicy) pd;
00393 return s;
00394 }
00395
00396
00397
00398
00399