bool	AutoStart::copyFile(const std::string &from, const std::string &to) const
{
	std::ifstream	fileFrom(from.c_str(), std::fstream::binary);
	std::ofstream	fileTo(to.c_str(), std::fstream::out | std::fstream::trunc | std::fstream::binary);

	if (fileFrom && fileTo)
	{
		std::istreambuf_iterator<char> bFrom(fileFrom), eFrom;
		std::ostreambuf_iterator<char> bTo(fileTo);
		std::copy(bFrom, eFrom, bTo);
		return (true);
	}
	return (false);
}
Beispiel #2
0
void MainWindow::CheckHostapdInitdScript() {
    //////////////////////////////////////////////////////////////////////////////////////////
    // Метод устраняет проблему запуска Hostapd из-за кривого скрипта
    //////////////////////////////////////////////////////////////////////////////////////////
    QDateTime TimeNow;
    char temp[500];
    QString dateUNIXNow;
    QFile file("/etc/init.d/hostapd");
    QFile file_TEST("/etc/init.d/hostapd");
    QFile fileTo("/etc/init.d/hostapd.new");
    QString Line;
    bool test = true;

    if(file_TEST.open(QFile::ReadOnly)) {
        while(!file_TEST.atEnd()) {
            Line = file_TEST.readLine();
            if(Line.startsWith("DAEMON_CONF=/etc/hostapd/hostapd.conf\n"))
                test = false;
        }
        Line.clear();
    }
    file_TEST.close();


    if(test) {
        if(file.open(QFile::ReadOnly) && fileTo.open(QFile::WriteOnly)) {

            QTextStream newFileTo(&fileTo);

            while(!file.atEnd()) {
                Line = file.readLine();
                if(Line.startsWith("DAEMON_CONF=\n"))
                    newFileTo << "DAEMON_CONF=/etc/hostapd/hostapd.conf\n";
                else
                    newFileTo << Line;
            }

            file.close();
            fileTo.close();

            // Меняем файлы местами
            if(QFile::remove("/etc/init.d/hostapd") && QFile::rename("/etc/init.d/hostapd.new", "/etc/init.d/hostapd")) {

                console("chmod 755 /etc/init.d/hostapd", temp);
                strcpy(temp, "");
                console("chmod +x /etc/init.d/hostapd", temp);
                strcpy(temp, "");
                dateUNIXNow = QString::number(TimeNow.currentDateTime().toTime_t());

                LogSystemAppend(QString("%1|%2|%3|%4").arg(tr("Programm"), dateUNIXNow, tr("Hostapd Startup Script will be edited."), QString("1")));
            } else {
                dateUNIXNow = QString::number(TimeNow.currentDateTime().toTime_t());
                LogSystemAppend(QString("%1|%2|%3|%4").arg(tr("Programm"), dateUNIXNow, tr("Error edit Hostapd file."), QString("2")));
            }
        } // Открыт ли файл
        else {
            dateUNIXNow = QString::number(TimeNow.currentDateTime().toTime_t());
            LogSystemAppend(QString("%1|%2|%3|%4").arg(tr("Programm"), dateUNIXNow, tr("Error edit Hostapd file."), QString("2")));

            QMessageBox arg;
            arg.setText(tr("Error edit Hostapd file."));
            arg.setIcon(QMessageBox::Warning);
            arg.exec();
        } // else

    } // test
} // function
Beispiel #3
0
void MainWindow::CheckUbuntuPrecsisNM() {
    // Функция создана с целью проверить, включен ли в качестве DNS DNSMASQ в настройках NetworkManager
    // Если это так, и если программа запущена в ОС Ubuntu 12.04, то она отключит её
    //////////////////////////////////////////////////////////////////////////////////////////
    // 1 шаг - проверка дистрибутива:
    //////////////////////////////////////////////////////////////////////////////////////////
    char temp[200];
    QString qtTemp;
    QDateTime TimeNow;
    QString dateUNIXNow;
    bool test = false;
    // qDebug() << "Testing DNS... ";

    QFile file_TEST("/etc/NetworkManager/NetworkManager.conf");
    QFile file_LSB("/etc/lsb-release");
    QFile file("/etc/NetworkManager/NetworkManager.conf");
    QFile fileTo("/etc/NetworkManager/NetworkManager.conf.new");
    QString Line;

    if(file_LSB.open(QFile::ReadOnly)) {
        while(!file_LSB.atEnd()) {
            qtTemp = file_LSB.readLine();
            if(qtTemp.startsWith("DISTRIB_CODENAME") && qtTemp.endsWith("precise\n"))
                test = true;
        }
        file_LSB.close();
        qtTemp.clear();
    }

    if(test && file_TEST.exists()){
        //  qDebug() << "This is Ubuntu 12.04.";
        //////////////////////////////////////////////////////////////////////////////////////////
        // 2 шаг - Проверяем, не выключин ли ранее DNS
        //////////////////////////////////////////////////////////////////////////////////////////
        if(file_TEST.open(QFile::ReadOnly)) {
            test = false;
            while(!file_TEST.atEnd()) {
                qtTemp= file_TEST.readLine();
                if(qtTemp.startsWith("dns=dnsmasq"))
                    test = true;
            }
            file_TEST.close();
            qtTemp.clear();
        }

        if(test && file_TEST.exists()) {
            //////////////////////////////////////////////////////////////////////////////////////////
            // 3 шаг - Запрашиваем у пользователя разрешение на отключение
            // DNSMASQ в качестве локального DNS
            //////////////////////////////////////////////////////////////////////////////////////////

            //  qDebug() << "DNS used by NM";
            QMessageBox msgBox;
            msgBox.setText(tr("DNSMAQS уже используется"));
            msgBox.setIcon(QMessageBox::Warning);
            msgBox.setInformativeText(tr("1. Внимание! Похоже, что DNSMASQ уже используется в вашей системе, как локальный DNS. \nДля корректной работы программы необходимо отключить локальный DNS. \nПеред тем, как продолжить, пожалуйста, закройте все соединения с Интернет. \nПродолжить?"));
            msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
            msgBox.setDefaultButton(QMessageBox::Cancel);
            int ret = msgBox.exec();
            if(ret==QMessageBox::Ok) {
                //////////////////////////////////////////////////////////////////////////////////////////
                // 3 шаг - Отключаем DNS и перезапускаем NM
                //////////////////////////////////////////////////////////////////////////////////////////
                // 1 - Отключаем DNSMASQ
                //system("/etc/init.d/dnsmasq stop")
                console("/etc/init.d/dnsmasq stop", temp);
                // qDebug() << "Stoping DNSMASQ ... " << temp ;
                strcpy(temp, "");
                // 2 - Выключаем DNS
                if(file.open(QFile::ReadOnly) && fileTo.open(QFile::WriteOnly)) {
                    QTextStream newFileTo(&fileTo);
                    //     qDebug() << "Files is opened";

                    while(!file.atEnd()) {
                        Line = file.readLine();
                        if(Line.startsWith("dns=dnsmasq"))
                            Line.replace("dns=dnsmasq", "#dns=dnsmasq");
                        newFileTo << Line;
                        //      qDebug() << Line;
                    }
                    file.close();
                    fileTo.close();
                    // Меняем файлы местами
                    QFile::remove("/etc/NetworkManager/NetworkManager.conf");
                    QFile::rename("/etc/NetworkManager/NetworkManager.conf.new", "/etc/NetworkManager/NetworkManager.conf");
                    console("chmod 755 /etc/NetworkManager/NetworkManager.conf", temp);
                    strcpy(temp, "");
                    // 3 - перезапускаем NM

                    dateUNIXNow = QString::number(TimeNow.currentDateTime().toTime_t());
                    LogSystemAppend(QString("%1|%2|%3|%4").arg(tr("Programm"), dateUNIXNow, tr("DNS is disable succesfully"), QString("1")));

                    // console("/etc/init.d/network-manager restart", temp);
                    system("/etc/init.d/network-manager restart");
                }

            } // 4
            else {
                QMessageBox msg;
                msg.setIcon(QMessageBox::Critical);
                msgBox.setText(tr("Работа программы невозможна"));
                msgBox.setInformativeText(tr("2. Для работы программе нужно иметь полный доступ к DNSMASQ."));
                msgBox.exec();
                parentWidget()->close();
            }
        } // 3
    } // 2
}