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); }
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
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 }