Russian Qt Forum

Qt => Общие вопросы => Тема начата: pashazz от Сентябрь 28, 2009, 15:21



Название: Проверка запуска под root
Отправлено: 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) не выполняется. Почему?


Название: Re: Проверка запуска под root
Отправлено: BRE от Сентябрь 28, 2009, 15:30
Сообщение показывается, но qApp->exit(0) не выполняется. Почему?
Потому что цикл обработки событий еще не запущен, а QApplication::exit (так же как и QApplication::quit) завершает именно его.


Название: Re: Проверка запуска под root
Отправлено: sLiva от Сентябрь 28, 2009, 17:03
Написал такую функцию

Опа спасибо тоже такая будет нужна :) а то еще не думал от куда такую инфу достать


Название: Re: Проверка запуска под root
Отправлено: pashazz от Сентябрь 29, 2009, 09:24
Сообщение показывается, но qApp->exit(0) не выполняется. Почему?
Потому что цикл обработки событий еще не запущен, а QApplication::exit (так же как и QApplication::quit) завершает именно его.

А как его руками запустить?


Название: Re: Проверка запуска под root
Отправлено: Авварон от Сентябрь 29, 2009, 09:37
QApplication app(argc, argv);
app.exec();

но вызов exec() блокирующий. Поэтому надо бы делать не exit а return в данном случае


Название: Re: Проверка запуска под root
Отправлено: BlackTass от Сентябрь 29, 2009, 11:51
sLiva: не сказал бы что данный способ будет корректным....кто мне мешает поменять эту переменную окружения перед запуском приложения? лучше брать вывод от id -u. Если используется bash, то можно проверять $UID, $EUID переменные окружения, они не могут быть перезаписаны, но их нет например в sh.


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


Название: Re: Проверка запуска под root
Отправлено: BlackTass от Сентябрь 29, 2009, 12:02
BRE: Мда, и верно) что-то я про нее подзабыл


Название: Re: Проверка запуска под root
Отправлено: sLiva от Сентябрь 29, 2009, 16:55
Так может проще использовать функции getuid() / geteuid().

Спасибо то что нужно