annotate ui/processhelp_linux.cpp @ 1371:23df332b2a4c

(issue179) Read install signature timestamp from config This also changes the way the sigDt is propgated to the MainWindow. It no longer uses the settings but hands it over as a parameter directly.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 24 Nov 2014 15:48:49 +0100
parents 2a1aa9df8f11
children 96f640c88d10
rev   line source
603
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
3 *
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU GPL (v>=2)
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY!
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
6 * See LICENSE.txt for details.
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
7 */
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
8 #ifndef WIN32
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
9
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
10 #include "processhelp.h"
782
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
11 #include "linuxlockfile.h"
1371
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
12 #include "util.h"
782
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
13
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
14 #include <fcntl.h>
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
15 #include <semaphore.h>
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
16
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
17 #include <QDebug>
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
18 #include <QDir>
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
19 #include <QStandardPaths>
1371
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
20 #include <QApplication>
782
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
21
1255
2a1aa9df8f11 (issue133) Improve API documentation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1162
diff changeset
22 int lockFileFD = -1;
603
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
23
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
24 const QList<int> ProcessHelp::getProcessesIdForName(const QString &processName) {
1162
2a1206932f53 (issue107) Comment all TODO's and FIXME's with issues as documented in issue107
Andre Heinecke <andre.heinecke@intevation.de>
parents: 782
diff changeset
25 // TODO (issue39)
603
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
26 Q_UNUSED(processName);
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
27 return QList<int>();
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
28 }
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
29
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
30 bool ProcessHelp::otherProcessesExist(const QString &processName) {
782
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
31 QDir dataDir(QStandardPaths::writableLocation(QStandardPaths::DataLocation));
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
32 dataDir.mkpath(".");
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
33 QString lockFilePath = dataDir.filePath(processName + ".pid");
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
34 lockFileFD = open_lockfile(lockFilePath.toLocal8Bit().data());
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
35 if (lockFileFD == -1)
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
36 // Creating the lock file failed, so we assume another
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
37 // instance is runnning.
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
38 return true;
603
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
39 return false;
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
40 }
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
41
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
42 void ProcessHelp::activateWindowForProcess(const QString &executableName) {
1162
2a1206932f53 (issue107) Comment all TODO's and FIXME's with issues as documented in issue107
Andre Heinecke <andre.heinecke@intevation.de>
parents: 782
diff changeset
43 // TODO (issue136)
603
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
44 Q_UNUSED(executableName);
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
45 return;
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
46 }
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
47
782
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
48 void ProcessHelp::cleanUp() {
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
49 close_lockfile(lockFileFD);
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
50 }
20ca94680003 Implemented detection of running instance on linux using a lock file.
Sascha Wilde <wilde@intevation.de>
parents: 603
diff changeset
51
1371
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
52 QDateTime ProcessHelp::getSigDtFromInstSettings() {
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
53 QString pathCandidate;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
54 QDateTime retval;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
55 if (is_system_install()) {
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
56 pathCandidate = "/etc/" + qApp->applicationName() + "/" +
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
57 qApp->applicationName() + "-inst.cfg";
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
58 } else {
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
59 qDebug() << "Application name is : " << qApp->applicationName();
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
60 pathCandidate = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) +
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
61 + "/" + qApp->organizationName() + "/" + qApp->applicationName() + "-inst.cfg";
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
62 }
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
63 QFileInfo fi(pathCandidate);
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
64 if (!fi.isReadable()) {
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
65 qDebug() << "Failed to find install config: " << pathCandidate;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
66 return retval;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
67 }
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
68 QFile instcfg(pathCandidate);
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
69 if (!instcfg.open(QIODevice::ReadOnly)) {
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
70 qDebug() << "Failed to open install config";
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
71 return retval;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
72 }
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
73 QByteArray data;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
74 int readLines = 0;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
75 while (readLines < 100) {
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
76 readLines++;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
77 data = instcfg.readLine();
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
78 if (data.isEmpty()) {
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
79 qDebug() << "Failed to read install config";
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
80 break;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
81 }
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
82 QString line = QString::fromLocal8Bit(data);
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
83 if (line.startsWith("SIG_DATE=")) {
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
84 bool ok = false;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
85 QString sigDate = line.replace("SIG_DATE=","");
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
86 long sigSecs = sigDate.toLong(&ok);
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
87 if (!ok) {
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
88 qDebug() << "Failed to convert sig date to long";
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
89 }
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
90 retval = QDateTime::fromTime_t(sigSecs);
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
91 break;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
92 }
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
93 }
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
94 qDebug() << "Sig time is: " << retval;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
95 instcfg.close();
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
96 return retval;
23df332b2a4c (issue179) Read install signature timestamp from config
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1255
diff changeset
97 }
603
cfef809b890d Add Process Management functions and ther implementation for windows.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
98 #endif /* Not WIN32 */

http://wald.intevation.org/projects/trustbridge/