view ui/installwrapper.h @ 1070:f110a3f6e387

(issue114) Fine tune ACL propagation using mkdir_p the ACL of the parent directories would propagate to all subdirectories and objects in the directory. Now we only use ACL propagation in the last directory to make sure that files we might create in that directory inherit the correct (resitricted) ACL
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 10 Sep 2014 16:41:36 +0200
parents 78798d3af8f0
children c8f698ca6355
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU GPL (v>=2)
 * and comes with ABSOLUTELY NO WARRANTY!
 * See LICENSE.txt for details.
 */
#ifndef UI_INSTALLWRAPPER_H
#define UI_INSTALLWRAPPER_H

#include <QFileInfo>
#include <QString>
#include <QStringList>
#include <QTemporaryFile>
#include <QThread>

#include "certificate.h"
/** @file installwrapper.h
 * @brief Wrapper around the call to the updated process */

/** @brief Get the FileInfo for the installation process.
 *
 * This points to the file where the installation process is
 * supposed to be.
 *
 * @returns A FileInfo with the path of the installation process.*/
QFileInfo getCinstProcInfo();

 /** @brief wrapper around installer process
  *
  * This wrapper is mostly needed because QProcess executes
  * a process on Windows directly with CreateProcess and
  * thus can not be used to elevate the Process.
  *
  * On Windows this class uses ShellExecuteExW to control
  * the child process. On Linux systems QProcess is used.
  *
  * It subclasses QThread so the installation can be done
  * asynchronusly. */
class InstallWrapper : public QThread
{
    Q_OBJECT

public:
    /**
     * @brief Construct an installwrapper for a certificateList
     *
     * The install wrapper will start the cinst process to execute
     * the specified instructions with the provided certificatelist.
     *
     * The cinst executable is expected to be in the same directory
     * as the current application.
     *
     * @param[in] parent the parent object.
     * @param[in] path the absolute path to the certificatelist.
     * @param[in] instructions a list of R: / I: \<cert\> lines to execute.
     */
    InstallWrapper(QObject* parent, const QString& path,
                   const QStringList& instructions);

private:
    /**@brief write the choices made into a temporary file
     *
     * @param[in] choicesFile the temporary file to write.
     *
     * @returns true on success. false on error.
     */
    bool writeChoices(QTemporaryFile* choicesFile) const;

    const QString mCertListFile;
    const QStringList mChoices;

protected:
    void run();

Q_SIGNALS:
    /**
     * @brief An error happened
     *
     * @param[out] message: A localized message to show. Can be empty.
     */
    void error(const QString &message);

    /**
     * @brief The installation was successful
     *
     * This only means the installation was successful as far as we
     * can tell as there is no backchannel from the installation processes.
     */
    void installationSuccessful();
};

#endif // UI_INSTALLWRAPPER_H

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