• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeutils API Reference
  • KDE Home
  • Contact Us
 

kgpg

  • sources
  • kde-4.14
  • kdeutils
  • kgpg
  • transactions
kgpgtransaction.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008,2009,2010,2011,2012,2013 Rolf Eike Beer <kde@opensource.sf-tec.de>
3  */
4 
5 /***************************************************************************
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 2 of the License, or *
10  * (at your option) any later version. *
11  * *
12  ***************************************************************************/
13 
14 #include "kgpgtransaction.h"
15 
16 #include "gpgproc.h"
17 #include "kgpginterface.h"
18 
19 #include <KDebug>
20 #include <kio/renamedialog.h>
21 #include <KPasswordDialog>
22 #include <knewpassworddialog.h>
23 #include <KLocale>
24 #include <KPushButton>
25 #include <KUrl>
26 #include <QByteArray>
27 #include <QPointer>
28 #include <QStringList>
29 #include <QWeakPointer>
30 #include <QWidget>
31 
32 class KGpgTransactionPrivate {
33 public:
34  KGpgTransactionPrivate(KGpgTransaction *parent, bool allowChaining);
35  ~KGpgTransactionPrivate();
36 
37  KGpgTransaction *m_parent;
38  GPGProc *m_process;
39  KGpgTransaction *m_inputTransaction;
40  KNewPasswordDialog *m_newPasswordDialog;
41  KPasswordDialog *m_passwordDialog;
42  int m_success;
43  int m_tries;
44  QString m_description;
45  bool m_chainingAllowed;
46 
47  QStringList m_idhints;
48 
49  KUrl m_overwriteUrl;
50 
51  void slotReadReady();
52  void slotProcessExited();
53  void slotProcessStarted();
54  void slotInputTransactionDone(int result);
55  void slotPassphraseEntered(const QString &passphrase);
61  void slotPassphraseAborted();
65  void handlePassphraseAborted();
66 
67  QList<int *> m_argRefs;
68  bool m_inputProcessDone;
69  int m_inputProcessResult;
70  bool m_ownProcessFinished;
71 
75  void sendQuit(void);
76 
77  void write(const QByteArray &a);
78 
79  static const QStringList &hintNames(void);
80 
81 private:
82  void processDone();
83 
84  unsigned int m_quitTries;
85  QStringList m_quitLines;
86 };
87 
88 KGpgTransactionPrivate::KGpgTransactionPrivate(KGpgTransaction *parent, bool allowChaining)
89  : m_parent(parent),
90  m_process(new GPGProc()),
91  m_inputTransaction(NULL),
92  m_newPasswordDialog(NULL),
93  m_passwordDialog(NULL),
94  m_success(KGpgTransaction::TS_OK),
95  m_tries(3),
96  m_chainingAllowed(allowChaining),
97  m_inputProcessDone(false),
98  m_inputProcessResult(KGpgTransaction::TS_OK),
99  m_ownProcessFinished(false),
100  m_quitTries(0)
101 {
102 }
103 
104 KGpgTransactionPrivate::~KGpgTransactionPrivate()
105 {
106  if (m_newPasswordDialog) {
107  m_newPasswordDialog->close();
108  m_newPasswordDialog->deleteLater();
109  }
110  if (m_process->state() == QProcess::Running) {
111  m_process->closeWriteChannel();
112  m_process->terminate();
113  }
114  delete m_inputTransaction;
115  delete m_process;
116 }
117 
118 KGpgTransaction::KGpgTransaction(QObject *parent, const bool allowChaining)
119  : QObject(parent),
120  d(new KGpgTransactionPrivate(this, allowChaining))
121 {
122  connect(d->m_process, SIGNAL(readReady()), SLOT(slotReadReady()));
123  connect(d->m_process, SIGNAL(processExited()), SLOT(slotProcessExited()));
124  connect(d->m_process, SIGNAL(started()), SLOT(slotProcessStarted()));
125 }
126 
127 KGpgTransaction::~KGpgTransaction()
128 {
129  delete d;
130 }
131 
132 void
133 KGpgTransactionPrivate::slotReadReady()
134 {
135  QString line;
136  QWeakPointer<GPGProc> process(m_process);
137  QWeakPointer<KGpgTransaction> par(m_parent);
138 
139  while (!process.isNull() && (m_process->readln(line, true) >= 0)) {
140  if (m_quitTries)
141  m_quitLines << line;
142 #ifdef KGPG_DEBUG_TRANSACTIONS
143  kDebug(2100) << m_parent << line;
144 #endif /* KGPG_DEBUG_TRANSACTIONS */
145 
146  static const QString getBool = QLatin1String("[GNUPG:] GET_BOOL ");
147 
148  if (line.startsWith(QLatin1String("[GNUPG:] USERID_HINT "))) {
149  m_parent->addIdHint(line);
150  } else if (line.startsWith(QLatin1String("[GNUPG:] BAD_PASSPHRASE "))) {
151  // the MISSING_PASSPHRASE line comes first, in that case ignore a
152  // following BAD_PASSPHRASE
153  if (m_success != KGpgTransaction::TS_USER_ABORTED)
154  m_success = KGpgTransaction::TS_BAD_PASSPHRASE;
155  } else if (line.startsWith(QLatin1String("[GNUPG:] GET_HIDDEN passphrase.enter"))) {
156  const bool goOn = m_parent->passphraseRequested();
157 
158  // Check if the object was deleted while waiting for the result
159  if (!goOn || par.isNull())
160  return;
161 
162  } else if (line.startsWith(QLatin1String("[GNUPG:] GOOD_PASSPHRASE"))) {
163  emit m_parent->statusMessage(i18n("Got Passphrase"));
164 
165  if (m_passwordDialog != NULL) {
166  m_passwordDialog->close();
167  m_passwordDialog->deleteLater();
168  m_passwordDialog = NULL;
169  }
170 
171  if (m_parent->passphraseReceived()) {
172  // signal GnuPG that there will be no further input and it can
173  // begin sending output.
174  m_process->closeWriteChannel();
175  }
176 
177  } else if (line.startsWith(getBool)) {
178  static const QString overwrite = QLatin1String("openfile.overwrite.okay");
179  const QString question = line.mid(getBool.length());
180 
181  KGpgTransaction::ts_boolanswer answer;
182 
183  if (question.startsWith(overwrite)) {
184  m_overwriteUrl.clear();
185  answer = m_parent->confirmOverwrite(m_overwriteUrl);
186 
187  if ((answer == KGpgTransaction::BA_UNKNOWN) && !m_overwriteUrl.isEmpty()) {
188  QPointer<KIO::RenameDialog> over = new KIO::RenameDialog(qobject_cast<QWidget *>(m_parent->parent()),
189  i18n("File Already Exists"), KUrl(),
190  m_overwriteUrl, KIO::M_OVERWRITE);
191 
192  m_overwriteUrl.clear();
193 
194  switch (over->exec()) {
195  case KIO::R_OVERWRITE:
196  answer = KGpgTransaction::BA_YES;
197  break;
198  case KIO::R_RENAME:
199  answer = KGpgTransaction::BA_NO;
200  m_overwriteUrl = over->newDestUrl();
201  break;
202  default:
203  answer = KGpgTransaction::BA_UNKNOWN;
204  m_parent->setSuccess(KGpgTransaction::TS_USER_ABORTED);
205  // Close the pipes, otherwise GnuPG will try to answer
206  // further questions about this file.
207  m_process->closeWriteChannel();
208  m_process->closeReadChannel(QProcess::StandardOutput);
209  break;
210  }
211 
212  delete over;
213 
214  if (answer == KGpgTransaction::BA_UNKNOWN)
215  continue;
216  }
217  } else {
218  answer = m_parent->boolQuestion(question);
219  }
220 
221  switch (answer) {
222  case KGpgTransaction::BA_YES:
223  write("YES\n");
224  break;
225  case KGpgTransaction::BA_NO:
226  write("NO\n");
227  break;
228  case KGpgTransaction::BA_UNKNOWN:
229  m_parent->setSuccess(KGpgTransaction::TS_MSG_SEQUENCE);
230  m_parent->unexpectedLine(line);
231  sendQuit();
232  }
233  } else if (!m_overwriteUrl.isEmpty() && line.startsWith(QLatin1String("[GNUPG:] GET_LINE openfile.askoutname"))) {
234  write(m_overwriteUrl.toLocalFile().toUtf8() + '\n');
235  m_overwriteUrl.clear();
236  } else if (line.startsWith(QLatin1String("[GNUPG:] MISSING_PASSPHRASE"))) {
237  m_success = KGpgTransaction::TS_USER_ABORTED;
238  } else if (line.startsWith(QLatin1String("[GNUPG:] CARDCTRL "))) {
239  // just ignore them, pinentry should handle that
240  } else {
241  // all known hints
242  int i = 0;
243  bool matched = false;
244  foreach (const QString &hintName, hintNames()) {
245  const KGpgTransaction::ts_hintType h = static_cast<KGpgTransaction::ts_hintType>(i++);
246  if (!line.startsWith(hintName))
247  continue;
248 
249  matched = true;
250 
251  bool r;
252  const int skip = hintName.length();
253  if (line.length() == skip) {
254  r = m_parent->hintLine(h, QString());
255  } else {
256  r = m_parent->hintLine(h, line.mid(skip + 1).trimmed());
257  }
258 
259  if (!r) {
260  m_parent->setSuccess(KGpgTransaction::TS_MSG_SEQUENCE);
261  sendQuit();
262  }
263 
264  break;
265  }
266 
267  if (!matched) {
268  if (m_parent->nextLine(line))
269  sendQuit();
270  }
271  }
272  }
273 }
274 
275 void
276 KGpgTransactionPrivate::slotProcessExited()
277 {
278  Q_ASSERT(m_parent->sender() == m_process);
279  m_ownProcessFinished = true;
280 
281  if (m_inputProcessDone)
282  processDone();
283 }
284 
285 void
286 KGpgTransactionPrivate::slotProcessStarted()
287 {
288  m_parent->postStart();
289 }
290 
291 void
292 KGpgTransactionPrivate::sendQuit(void)
293 {
294  write("quit\n");
295 
296 #ifdef KGPG_DEBUG_TRANSACTIONS
297  if (m_quitTries == 0)
298  kDebug(2100) << "sending quit";
299 #endif /* KGPG_DEBUG_TRANSACTIONS */
300 
301  if (m_quitTries++ >= 3) {
302  kDebug(2100) << "tried" << m_quitTries << "times to quit the GnuPG session";
303  kDebug(2100) << "last input was" << m_quitLines;
304  kDebug(2100) << "please file a bug report at https://bugs.kde.org";
305  m_process->closeWriteChannel();
306  m_success = KGpgTransaction::TS_MSG_SEQUENCE;
307  }
308 }
309 
310 void
311 KGpgTransactionPrivate::slotInputTransactionDone(int result)
312 {
313  Q_ASSERT(m_parent->sender() == m_inputTransaction);
314 
315  m_inputProcessDone = true;
316  m_inputProcessResult = result;
317 
318  if (m_ownProcessFinished)
319  processDone();
320 }
321 
322 void
323 KGpgTransactionPrivate::slotPassphraseEntered(const QString &passphrase)
324 {
325  // not calling KGpgTransactionPrivate::write() here for obvious privacy reasons
326  m_process->write(passphrase.toUtf8() + '\n');
327  if (m_parent->sender() == m_newPasswordDialog) {
328  m_newPasswordDialog->deleteLater();
329  m_newPasswordDialog = NULL;
330  m_parent->newPassphraseEntered();
331  } else {
332  Q_ASSERT(m_parent->sender() == m_passwordDialog);
333  }
334 }
335 
336 void
337 KGpgTransactionPrivate::slotPassphraseAborted()
338 {
339  Q_ASSERT((m_parent->sender() == m_passwordDialog) ^ (m_parent->sender() == m_newPasswordDialog));
340  m_parent->sender()->deleteLater();
341  m_newPasswordDialog = NULL;
342  m_passwordDialog = NULL;
343  handlePassphraseAborted();
344 }
345 
346 void
347 KGpgTransactionPrivate::handlePassphraseAborted()
348 {
349  // sending "quit" here is useless as it would be interpreted as the passphrase
350  m_process->closeWriteChannel();
351  m_success = KGpgTransaction::TS_USER_ABORTED;
352 }
353 
354 void
355 KGpgTransactionPrivate::write(const QByteArray &a)
356 {
357  m_process->write(a);
358 #ifdef KGPG_DEBUG_TRANSACTIONS
359  kDebug(2100) << m_parent << a;
360 #endif /* KGPG_DEBUG_TRANSACTIONS */
361 }
362 
363 const QStringList &
364 KGpgTransactionPrivate::hintNames (void)
365 {
366  static QStringList hints;
367 
368  if (hints.isEmpty()) {
369  hints.insert(KGpgTransaction::HT_KEYEXPIRED, QLatin1String("[GNUPG:] KEYEXPIRED"));
370  hints.insert(KGpgTransaction::HT_SIGEXPIRED, QLatin1String("[GNUPG:] SIGEXPIRED"));
371  hints.insert(KGpgTransaction::HT_NOSECKEY, QLatin1String("[GNUPG:] NO_SECKEY"));
372  hints.insert(KGpgTransaction::HT_ENCTO, QLatin1String("[GNUPG:] ENC_TO"));
373  }
374 
375  return hints;
376 }
377 
378 void
379 KGpgTransactionPrivate::processDone()
380 {
381  m_parent->finish();
382  emit m_parent->infoProgress(100, 100);
383  emit m_parent->done(m_success);
384 #ifdef KGPG_DEBUG_TRANSACTIONS
385  kDebug(2100) << this << "result:" << m_success;
386 #endif /* KGPG_DEBUG_TRANSACTIONS */
387 }
388 
389 void
390 KGpgTransaction::start()
391 {
392  d->m_inputProcessResult = false;
393  d->m_inputProcessDone = (d->m_inputTransaction == NULL);
394 
395  setSuccess(TS_OK);
396  d->m_idhints.clear();
397  d->m_tries = 3;
398  if (preStart()) {
399  d->m_ownProcessFinished = false;
400  if (d->m_inputTransaction != NULL)
401  d->m_inputTransaction->start();
402 #ifdef KGPG_DEBUG_TRANSACTIONS
403  kDebug(2100) << this << d->m_process->program();
404 #endif /* KGPG_DEBUG_TRANSACTIONS */
405  d->m_process->start();
406  emit infoProgress(0, 1);
407  } else {
408  emit done(d->m_success);
409  }
410 }
411 
412 void
413 KGpgTransaction::write(const QByteArray &a, const bool lf)
414 {
415  if (lf)
416  d->write(a + '\n');
417  else
418  d->write(a);
419 }
420 
421 void
422 KGpgTransaction::write(const int i)
423 {
424  write(QByteArray::number(i));
425 }
426 
427 void
428 KGpgTransaction::askNewPassphrase(const QString& text)
429 {
430  emit statusMessage(i18n("Requesting Passphrase"));
431 
432  d->m_newPasswordDialog = new KNewPasswordDialog(qobject_cast<QWidget *>(parent()));
433  d->m_newPasswordDialog->setPrompt(text);
434  d->m_newPasswordDialog->setAllowEmptyPasswords(false);
435  connect(d->m_newPasswordDialog, SIGNAL(newPassword(QString)), SLOT(slotPassphraseEntered(QString)));
436  connect(d->m_newPasswordDialog, SIGNAL(rejected()), SLOT(slotPassphraseAborted()));
437  connect(d->m_process, SIGNAL(processExited()), d->m_newPasswordDialog->button(KDialog::Cancel), SLOT(click()));
438  d->m_newPasswordDialog->show();
439 }
440 
441 int
442 KGpgTransaction::getSuccess() const
443 {
444  return d->m_success;
445 }
446 
447 void
448 KGpgTransaction::setSuccess(const int v)
449 {
450 #ifdef KGPG_DEBUG_TRANSACTIONS
451  kDebug(2100) << "old" << d->m_success << "new" << v;
452 #endif /* KGPG_DEBUG_TRANSACTIONS */
453  d->m_success = v;
454 }
455 
456 KGpgTransaction::ts_boolanswer
457 KGpgTransaction::boolQuestion(const QString& line)
458 {
459  Q_UNUSED(line)
460 
461  return BA_UNKNOWN;
462 }
463 
464 KGpgTransaction::ts_boolanswer
465 KGpgTransaction::confirmOverwrite(KUrl &currentFile)
466 {
467  Q_UNUSED(currentFile)
468 
469  return BA_UNKNOWN;
470 }
471 
472 bool
473 KGpgTransaction::hintLine(const ts_hintType hint, const QString &args)
474 {
475  switch (hint) {
476  case HT_KEYEXPIRED:
477  return !args.isEmpty();
478  default:
479  return true;
480  }
481 }
482 
483 void
484 KGpgTransaction::finish()
485 {
486 }
487 
488 void
489 KGpgTransaction::setDescription(const QString &description)
490 {
491  d->m_description = description;
492 }
493 
494 void
495 KGpgTransaction::waitForInputTransaction()
496 {
497  Q_ASSERT(d->m_inputTransaction != NULL);
498 
499  if (d->m_inputProcessDone)
500  return;
501 
502  d->m_inputTransaction->waitForFinished();
503 }
504 
505 void
506 KGpgTransaction::unexpectedLine(const QString &line)
507 {
508  kDebug(2100) << this << "unexpected input line" << line << "for command" << d->m_process->program();
509 }
510 
511 bool
512 KGpgTransaction::passphraseRequested()
513 {
514  return askPassphrase();
515 }
516 
517 bool
518 KGpgTransaction::passphraseReceived()
519 {
520  return true;
521 }
522 
523 bool
524 KGpgTransaction::preStart()
525 {
526  return true;
527 }
528 
529 void
530 KGpgTransaction::postStart()
531 {
532 }
533 
534 void
535 KGpgTransaction::addIdHint(QString txt)
536 {
537  int cut = txt.indexOf(QLatin1Char( ' ' ), 22, Qt::CaseInsensitive);
538  txt.remove(0, cut);
539 
540  if (txt.contains(QLatin1Char( '(' ), Qt::CaseInsensitive))
541  txt = txt.section(QLatin1Char( '(' ), 0, 0) + txt.section(QLatin1Char( ')' ), -1);
542 
543  txt.replace(QLatin1Char( '<' ), QLatin1String( "&lt;" ));
544 
545  if (!d->m_idhints.contains(txt))
546  d->m_idhints << txt;
547 }
548 
549 QString
550 KGpgTransaction::getIdHints() const
551 {
552  return d->m_idhints.join( i18n(" or " ));
553 }
554 
555 GPGProc *
556 KGpgTransaction::getProcess()
557 {
558  return d->m_process;
559 }
560 
561 int
562 KGpgTransaction::addArgument(const QString &arg)
563 {
564  int r = d->m_process->program().count();
565 
566  *d->m_process << arg;
567 
568  return r;
569 }
570 
571 int
572 KGpgTransaction::addArguments(const QStringList &args)
573 {
574  int r = d->m_process->program().count();
575 
576  *d->m_process << args;
577 
578  return r;
579 }
580 
581 void
582 KGpgTransaction::replaceArgument(const int pos, const QString &arg)
583 {
584  QStringList args(d->m_process->program());
585  d->m_process->clearProgram();
586 
587  args.replace(pos, arg);
588 
589  d->m_process->setProgram(args);
590 }
591 
592 void
593 KGpgTransaction::insertArgument(const int pos, const QString &arg)
594 {
595  insertArguments(pos, QStringList(arg));
596 }
597 
598 void
599 KGpgTransaction::insertArguments(const int pos, const QStringList &args)
600 {
601  QStringList tmp(d->m_process->program());
602 
603  int tmppos = pos;
604  foreach (const QString &s, args) {
605  tmp.insert(tmppos++, s);
606  }
607  d->m_process->setProgram(tmp);
608 
609  int move = args.count();
610  foreach (int *ref, d->m_argRefs) {
611  if (*ref >= pos)
612  *ref += move;
613  }
614 }
615 
616 void
617 KGpgTransaction::addArgumentRef(int *ref)
618 {
619  d->m_argRefs.append(ref);
620 }
621 
622 bool
623 KGpgTransaction::askPassphrase(const QString &message)
624 {
625  emit statusMessage(i18n("Requesting Passphrase"));
626 
627  if (d->m_passwordDialog == NULL) {
628  d->m_passwordDialog = new KPasswordDialog(qobject_cast<QWidget *>(parent()));
629 
630  QString passdlgmessage;
631  if (message.isEmpty()) {
632  QString userIDs(getIdHints());
633  if (userIDs.isEmpty())
634  userIDs = i18n("[No user id found]");
635  else
636  userIDs.replace(QLatin1Char( '<' ), QLatin1String( "&lt;" ));
637 
638  passdlgmessage = i18n("Enter passphrase for <b>%1</b>", userIDs);
639  } else {
640  passdlgmessage = message;
641  }
642 
643  d->m_passwordDialog->setPrompt(passdlgmessage);
644 
645  connect(d->m_passwordDialog, SIGNAL(gotPassword(QString,bool)), SLOT(slotPassphraseEntered(QString)));
646  connect(d->m_passwordDialog, SIGNAL(rejected()), SLOT(slotPassphraseAborted()));
647  connect(d->m_process, SIGNAL(processExited()), d->m_passwordDialog->button(KDialog::Cancel), SLOT(click()));
648  } else {
649  // we already have a dialog, so this is a "bad passphrase" situation
650  --d->m_tries;
651 
652  d->m_passwordDialog->showErrorMessage(i18np("<p><b>Bad passphrase</b>. You have 1 try left.</p>",
653  "<p><b>Bad passphrase</b>. You have %1 tries left.</p>", d->m_tries),
654  KPasswordDialog::PasswordError);
655  }
656 
657  d->m_passwordDialog->show();
658 
659  return true;
660 }
661 
662 void
663 KGpgTransaction::setGnuPGHome(const QString &home)
664 {
665  QStringList tmp(d->m_process->program());
666 
667  Q_ASSERT(tmp.count() > 3);
668  int homepos = tmp.indexOf(QLatin1String("--options"), 1);
669  if (homepos == -1)
670  homepos = tmp.indexOf(QLatin1String("--homedir"), 1);
671  Q_ASSERT(homepos != -1);
672  Q_ASSERT(homepos + 1 < tmp.count());
673 
674  tmp[homepos] = QLatin1String("--homedir");
675  tmp[homepos + 1] = home;
676 
677  d->m_process->setProgram(tmp);
678 }
679 
680 int
681 KGpgTransaction::waitForFinished(const int msecs)
682 {
683  int ret = TS_OK;
684 
685  if (d->m_inputTransaction != NULL) {
686  int ret = d->m_inputTransaction->waitForFinished(msecs);
687  if ((ret != TS_OK) && (msecs != -1))
688  return ret;
689  }
690 
691  bool b = d->m_process->waitForFinished(msecs);
692 
693  if (ret != TS_OK)
694  return ret;
695 
696  if (!b)
697  return TS_USER_ABORTED;
698  else
699  return getSuccess();
700 }
701 
702 const QString &
703 KGpgTransaction::getDescription() const
704 {
705  return d->m_description;
706 }
707 
708 void
709 KGpgTransaction::setInputTransaction(KGpgTransaction *ta)
710 {
711  Q_ASSERT(d->m_chainingAllowed);
712 
713  if (d->m_inputTransaction != NULL)
714  clearInputTransaction();
715  d->m_inputTransaction = ta;
716 
717  GPGProc *proc = ta->getProcess();
718  proc->setStandardOutputProcess(d->m_process);
719  connect(ta, SIGNAL(done(int)), SLOT(slotInputTransactionDone(int)));
720 }
721 
722 void
723 KGpgTransaction::clearInputTransaction()
724 {
725  disconnect(d->m_inputTransaction, SIGNAL(done(int)), this, SLOT(slotInputTransactionDone(int)));
726  d->m_inputTransaction = NULL;
727 }
728 
729 bool
730 KGpgTransaction::hasInputTransaction() const
731 {
732  return (d->m_inputTransaction != NULL);
733 }
734 
735 void
736 KGpgTransaction::kill()
737 {
738  d->m_process->kill();
739 }
740 
741 void
742 KGpgTransaction::newPassphraseEntered()
743 {
744 }
745 
746 #include "kgpgtransaction.moc"
KGpgTransaction::passphraseRequested
virtual bool passphraseRequested()
called when GnuPG asks for a passphrase
Definition: kgpgtransaction.cpp:512
KGpgTransaction::getSuccess
int getSuccess() const
get the success value that will be returned with the done signal
Definition: kgpgtransaction.cpp:442
KGpgTransaction::kill
void kill()
abort this operation as soon as possible
Definition: kgpgtransaction.cpp:736
QString::indexOf
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
GPGProc
A interface to GnuPG handling UTF8 recoding correctly.
Definition: gpgproc.h:36
KGpgTransaction::addArgument
int addArgument(const QString &arg)
add a command line argument to gpg process
Definition: kgpgtransaction.cpp:562
KGpgTransaction::BA_YES
answer "YES"
Definition: kgpgtransaction.h:75
KGpgTransaction::addArguments
int addArguments(const QStringList &args)
add command line arguments to gpg process
Definition: kgpgtransaction.cpp:572
KGpgTransaction::TS_OK
everything went fine
Definition: kgpgtransaction.h:60
kgpgtransaction.h
KGpgTransaction::write
void write(const QByteArray &a, const bool lf=true)
write data to standard input of gpg process
Definition: kgpgtransaction.cpp:413
KGpgTransaction::newPassphraseEntered
virtual void newPassphraseEntered()
called when the user entered a new passphrase
Definition: kgpgtransaction.cpp:742
QByteArray
KGpgTransaction::ts_hintType
ts_hintType
the known hints sent by GnuPG
Definition: kgpgtransaction.h:81
KGpgTransaction::infoProgress
void infoProgress(qulonglong processedAmount, qulonglong totalAmount)
emits procentual status information
QPointer
KGpgTransaction::HT_NOSECKEY
secret key not available
Definition: kgpgtransaction.h:84
KGpgTransaction::postStart
virtual void postStart()
Called when the gpg process is up and running.
Definition: kgpgtransaction.cpp:530
KGpgTransaction::hintLine
virtual bool hintLine(const ts_hintType hint, const QString &args)
Called for a set of hint messages.
Definition: kgpgtransaction.cpp:473
KGpgTransaction::waitForFinished
int waitForFinished(const int msecs=-1)
blocks until the transaction is complete
Definition: kgpgtransaction.cpp:681
KGpgTransaction::replaceArgument
void replaceArgument(const int pos, const QString &arg)
replace the argument at the given position
Definition: kgpgtransaction.cpp:582
KGpgTransaction::askPassphrase
bool askPassphrase(const QString &message=QString())
ask user for passphrase
Definition: kgpgtransaction.cpp:623
QString::remove
QString & remove(int position, int n)
KGpgTransaction::setInputTransaction
void setInputTransaction(KGpgTransaction *ta)
connect the standard input of this transaction to another process
Definition: kgpgtransaction.cpp:709
KGpgTransaction::start
void start()
Start the operation.
Definition: kgpgtransaction.cpp:390
QObject::disconnect
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
KGpgTransaction::getProcess
GPGProc * getProcess()
get a reference to the gpg process object
Definition: kgpgtransaction.cpp:556
KGpgTransaction::clearInputTransaction
void clearInputTransaction()
tell the process the standard input is no longer connected
Definition: kgpgtransaction.cpp:723
QString::clear
void clear()
KGpgTransaction::KGpgTransaction
KGpgTransaction(QObject *parent=0, const bool allowChaining=false)
KGpgTransaction constructor.
Definition: kgpgtransaction.cpp:118
KGpgTransaction::BA_NO
answer "NO"
Definition: kgpgtransaction.h:76
KGpgTransaction::preStart
virtual bool preStart()
Called before the gpg process is started.
Definition: kgpgtransaction.cpp:524
QList::count
int count(const T &value) const
KGpgTransaction::done
void done(int result)
Emitted when the operation was completed.
KGpgTransaction::statusMessage
void statusMessage(const QString &msg)
emits textual status information
KGpgTransaction::insertArguments
void insertArguments(const int pos, const QStringList &args)
insert arguments at the given position
Definition: kgpgtransaction.cpp:599
KGpgTransaction::hasInputTransaction
bool hasInputTransaction() const
check if another transaction will sent input to this
Definition: kgpgtransaction.cpp:730
KGpgTransaction::HT_ENCTO
message is encrypted for this key
Definition: kgpgtransaction.h:85
KGpgTransaction::addArgumentRef
void addArgumentRef(int *ref)
make sure the reference to a specific argument is kept up to date
Definition: kgpgtransaction.cpp:617
QObject
KGpgTransaction::askNewPassphrase
void askNewPassphrase(const QString &text)
Ask user for passphrase and send it to gpg process.
Definition: kgpgtransaction.cpp:428
QList::isEmpty
bool isEmpty() const
QString::isEmpty
bool isEmpty() const
QByteArray::number
QByteArray number(int n, int base)
QString::startsWith
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const
gpgproc.h
KGpgTransaction::confirmOverwrite
virtual ts_boolanswer confirmOverwrite(KUrl &currentFile)
called when GnuPG asks for confirmation for overwriting a file
Definition: kgpgtransaction.cpp:465
KGpgTransaction::boolQuestion
virtual ts_boolanswer boolQuestion(const QString &line)
Called for every boolean question GnuPG answers.
Definition: kgpgtransaction.cpp:457
kgpginterface.h
KGpgTransaction::getIdHints
QString getIdHints() const
get string of all userid hints
Definition: kgpgtransaction.cpp:550
QString
QList< int * >
KGpgTransaction::TS_MSG_SEQUENCE
unexpected sequence of GnuPG messages
Definition: kgpgtransaction.h:62
KGpgTransaction::BA_UNKNOWN
the question is not supported (this is an error)
Definition: kgpgtransaction.h:74
KGpgTransaction::HT_SIGEXPIRED
deprecated by GnuPG
Definition: kgpgtransaction.h:83
QStringList
KGpgTransaction::ts_boolanswer
ts_boolanswer
result codes for GnuPG boolean questions
Definition: kgpgtransaction.h:73
QString::contains
bool contains(QChar ch, Qt::CaseSensitivity cs) const
KGpgTransaction::finish
virtual void finish()
Called when the gpg process finishes.
Definition: kgpgtransaction.cpp:484
QLatin1Char
KGpgTransaction::getDescription
const QString & getDescription() const
return description of this transaction
Definition: kgpgtransaction.cpp:703
KGpgTransaction::TS_USER_ABORTED
the user aborted the transaction
Definition: kgpgtransaction.h:63
QString::replace
QString & replace(int position, int n, QChar after)
QString::mid
QString mid(int position, int n) const
KGpgTransaction::passphraseReceived
virtual bool passphraseReceived()
called when GnuPG accepted the passphrase
Definition: kgpgtransaction.cpp:518
QLatin1String
KGpgTransaction::setSuccess
void setSuccess(const int v)
set the success value that will be returned with the done signal
Definition: kgpgtransaction.cpp:448
QList::insert
void insert(int i, const T &value)
KGpgTransaction::addIdHint
void addIdHint(QString txt)
add a userid hint
Definition: kgpgtransaction.cpp:535
QString::length
int length() const
KGpgTransaction::unexpectedLine
void unexpectedLine(const QString &line)
notify of an unexpected line
Definition: kgpgtransaction.cpp:506
KGpgTransaction::TS_BAD_PASSPHRASE
the passphrase was not correct
Definition: kgpgtransaction.h:61
QString::section
QString section(QChar sep, int start, int end, QFlags< QString::SectionFlag > flags) const
QWeakPointer
description
static const char description[]
Definition: main.cpp:23
KGpgTransaction::insertArgument
void insertArgument(const int pos, const QString &arg)
insert an argument at the given position
Definition: kgpgtransaction.cpp:593
QStringList::indexOf
int indexOf(const QRegExp &rx, int from) const
KGpgTransaction
Process one GnuPG operation.
Definition: kgpgtransaction.h:44
KGpgTransaction::setDescription
void setDescription(const QString &description)
set the description returned in getDescription()
Definition: kgpgtransaction.cpp:489
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QObject::parent
QObject * parent() const
KGpgTransaction::~KGpgTransaction
virtual ~KGpgTransaction()
KGpgTransaction destructor.
Definition: kgpgtransaction.cpp:127
KGpgTransaction::setGnuPGHome
void setGnuPGHome(const QString &home)
sets the home directory of GnuPG called for this transaction
Definition: kgpgtransaction.cpp:663
KGpgTransaction::HT_KEYEXPIRED
key is expired
Definition: kgpgtransaction.h:82
KGpgTransaction::waitForInputTransaction
void waitForInputTransaction()
wait until the input transaction has finished
Definition: kgpgtransaction.cpp:495
QString::toUtf8
QByteArray toUtf8() const
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:42:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kgpg

Skip menu "kgpg"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeutils API Reference

Skip menu "kdeutils API Reference"
  • ark
  • filelight
  • kcalc
  • kcharselect
  • kdf
  • kfloppy
  • kgpg
  • ktimer
  • kwallet
  • sweeper

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal