Russian Qt Forum
Ноябрь 26, 2024, 01:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проверка запуска под root  (Прочитано 4988 раз)
pashazz
Гость
« : Сентябрь 28, 2009, 15:21 »

Написал такую функцию
Код
C++ (Qt)
oid MainWindow::checkRoot() {
   //check $USER
   foreach (QString str, QProcess::systemEnvironment()) {
       if (str.startsWith("USER"))
       {
           QString user = str.split("=").at(1);
 
           if (user !="root"){
               QMessageBox::critical(this, "Ошибка", "Запустите программу с правами root!");
              qApp->exit(0);
 
           }
       }
   }
}
 

Сообщение показывается, но qApp->exit(0) не выполняется. Почему?
Записан
BRE
Гость
« Ответ #1 : Сентябрь 28, 2009, 15:30 »

Сообщение показывается, но qApp->exit(0) не выполняется. Почему?
Потому что цикл обработки событий еще не запущен, а QApplication::exit (так же как и QApplication::quit) завершает именно его.
Записан
sLiva
Гость
« Ответ #2 : Сентябрь 28, 2009, 17:03 »

Написал такую функцию

Опа спасибо тоже такая будет нужна Улыбающийся а то еще не думал от куда такую инфу достать
Записан
pashazz
Гость
« Ответ #3 : Сентябрь 29, 2009, 09:24 »

Сообщение показывается, но qApp->exit(0) не выполняется. Почему?
Потому что цикл обработки событий еще не запущен, а QApplication::exit (так же как и QApplication::quit) завершает именно его.

А как его руками запустить?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Сентябрь 29, 2009, 09:37 »

QApplication app(argc, argv);
app.exec();

но вызов exec() блокирующий. Поэтому надо бы делать не exit а return в данном случае
Записан
BlackTass
Гость
« Ответ #5 : Сентябрь 29, 2009, 11:51 »

sLiva: не сказал бы что данный способ будет корректным....кто мне мешает поменять эту переменную окружения перед запуском приложения? лучше брать вывод от id -u. Если используется bash, то можно проверять $UID, $EUID переменные окружения, они не могут быть перезаписаны, но их нет например в sh.
Записан
BRE
Гость
« Ответ #6 : Сентябрь 29, 2009, 12:00 »

sLiva: не сказал бы что данный способ будет корректным....кто мне мешает поменять эту переменную окружения перед запуском приложения? лучше брать вывод от id -u. Если используется bash, то можно проверять $UID, $EUID переменные окружения, они не могут быть перезаписаны, но их нет например в sh.
Так может проще использовать функции getuid() / geteuid().
Если uid == 0, то это root.
Записан
BlackTass
Гость
« Ответ #7 : Сентябрь 29, 2009, 12:02 »

BRE: Мда, и верно) что-то я про нее подзабыл
Записан
sLiva
Гость
« Ответ #8 : Сентябрь 29, 2009, 16:55 »

Так может проще использовать функции getuid() / geteuid().

Спасибо то что нужно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 22.