Форумы
Kalina LUG :: Форумы :: Основной :: General
 
<< Предыдущая тема | Следующая тема >>
setuid или выполнить команду от другого пользователя
Модераторы: kalina, sanitar, NaTty, COMRADE_ARTYOM, variable, Solaris, az, Andreyf1
Автор Добавил
LuckyStr
Пнд Авг 24 2009, 18:38
ID пользователя #82
Зарегистрирован: Втр Янв 27 2009, 17:08

Сообщений: 161
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>


int main() {
    
        pid_t result = fork();

    if (result==-1)   {
             cout<<"error fork()"<<endl;
         return 1;
                 } 

    if (result==0)
         {
           int status=setuid(501);
    
             if (status>0)
               {
                          sleep(20);
                          system("date >/media/disk/log");
                }

         } 
    return 0;
}

но /media/disk/log - пустой.
права на /media/disk и /media/disk/log - 0777.
пытался запускать и под рутом и под самим 501-ым.
Наверх
COMRADE_ARTYOM
Пнд Авг 24 2009, 18:45
COMRADE_ARTYOM

ID пользователя #14
Зарегистрирован: Втр Фев 19 2008, 10:18

Сообщений: 863
на результат может и не повлияет, но разве правильно инклюдить stdio.h и stdlib.h? ЕМНИП, правильно #include <cstdio> и <cstdlib>.


[ Редактирование Пнд Авг 24 2009, 18:45 ]
Наверх
vladi
Пнд Авг 24 2009, 21:13
ID пользователя #38
Зарегистрирован: Пнд Мар 24 2008, 13:32

Сообщений: 45
Я немного подредактировал.

Вот исходник

Вот что говорит opennet о setuid():
При успешном завершении возвращается нулевое значение. В случае ошибки возвращается -1, а переменной errno присваивается номер ошибки

У тебя статус неверно проверяется.

Просьба: не используй табы. А то отступы ползут.

И наверное не стоит usibg namespace std; делать.
В книгах так пишут, т.к. места для кода мало.

[ Редактирование Пнд Авг 24 2009, 21:15 ]
Наверх
COMRADE_ARTYOM
Пнд Авг 24 2009, 22:40
COMRADE_ARTYOM

ID пользователя #14
Зарегистрирован: Втр Фев 19 2008, 10:18

Сообщений: 863
а чем так плохо using namespace std?
Наверх
LuckyStr
Втр Авг 25 2009, 01:28
ID пользователя #82
Зарегистрирован: Втр Янв 27 2009, 17:08

Сообщений: 161
спасибо большое
Наверх
vladi
Втр Авг 25 2009, 12:37
ID пользователя #38
Зарегистрирован: Пнд Мар 24 2008, 13:32

Сообщений: 45
ua2fga написал(а) ...

а чем так плохо using namespace std?

Тем, что замусоривается глобальное пространство имён. А если такую штуку сделать в заголовочном файле, то настанет вообще полярный лис, т.к. using namespace std; действует на весь нижеследующий код, то есть на все файлы включившие этот заголовок (и на некоторые другие заголовочные файлы)

Коротко: так больше порядка.

Иногда, можно сделать так:


using my_ns = some::long::namespace_1

и использовать my_ns вместо той длинной штуки.
Наверх
Solaris
Втр Авг 25 2009, 22:51

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
Согласен что using namespace std действует на весь ниженаписанный код, зато писать этот код проще.
Наверх
COMRADE_ARTYOM
Срд Авг 26 2009, 01:40
COMRADE_ARTYOM

ID пользователя #14
Зарегистрирован: Втр Фев 19 2008, 10:18

Сообщений: 863
меня с 12ти лет учили писать using namespace std (файлы заголовков во внимание не берём). я так и не понял, что в этом такого плохого.
Наверх
vladi
Срд Авг 26 2009, 12:28
ID пользователя #38
Зарегистрирован: Пнд Мар 24 2008, 13:32

Сообщений: 45
Ну как же.

Если у нас есть переменная int cout (для примера.)

Если мы пишем using namespace std; то такую переменную мы объявить не можем. Иначе -- можем, а для вывода использовать std::cout.

Ну это только пример. Откудать знать что за имена зарезервированы стандартной библиотекой. А так наверняка не ошибёшься.
Наверх
COMRADE_ARTYOM
Срд Авг 26 2009, 12:30
COMRADE_ARTYOM

ID пользователя #14
Зарегистрирован: Втр Фев 19 2008, 10:18

Сообщений: 863
мне никогда не придёт в голову назвать переменную cout. по-моему проблема надумана.

ещё вопрос: братья дейтелы в книге "как программировать на си++" пишут правильно? или меня ещё и не по той книжке учили?
Наверх
vladi
Срд Авг 26 2009, 18:53
ID пользователя #38
Зарегистрирован: Пнд Мар 24 2008, 13:32

Сообщений: 45
ua2fga написал(а) ...

мне никогда не придёт в голову назвать переменную cout. по-моему проблема надумана.

Пример надуманн. Проблема не надуманна. Кто, положив руку на сердце, скажет, что знает все имена переменных и функций использующихся в стандартной библиотеке?

ua2fga написал(а) ...

ещё вопрос: братья дейтелы в книге "как программировать на си++" пишут правильно? или меня ещё и не по той книжке учили?


Я уже говорил:
gvv.coder написал(а) ...

И наверное не стоит usibg namespace std; делать.
В книгах так пишут, т.к. места для кода мало.


Вот ещё пример:

"Язык программирования С++" Бьерн Страуструп
Специальное издание 2005.

Страница 83:
написал(а) ...

Как правило, объявление всех имён из данного пространства глобальными является признаком плохого стиля. Однако ради краткости изложения фрагментов программ, иллюстрирующих средства языка и библиотеки, я опущу повторяющиеся #include и квалификаторы std::.

Наверх
COMRADE_ARTYOM
Срд Авг 26 2009, 19:20
COMRADE_ARTYOM

ID пользователя #14
Зарегистрирован: Втр Фев 19 2008, 10:18

Сообщений: 863
то есть правильно писать типа:
for( int y = 0; y < 3; ++y )
{
  for( int x = 0; x < 5; ++x )
  std::cout << aData[ y ][ x ] << '\t';
  std::cout << std::endl;
} //for( int y = 0; y < 3; ++y ) 


Наверх
vladi
Срд Авг 26 2009, 23:18
ID пользователя #38
Зарегистрирован: Пнд Мар 24 2008, 13:32

Сообщений: 45
Ну да. Стиль конечно у всех разный.


for (int y= 0; y < 3; ++y) {
        for (int x= 0; x < 5; ++x) {
                std::cout << aData[y][x] << '\t';
        }
        std::cout << std::endl;
} // for (int y= 0; y < 3; ++y) 
Наверх
COMRADE_ARTYOM
Чтв Авг 27 2009, 10:54
COMRADE_ARTYOM

ID пользователя #14
Зарегистрирован: Втр Фев 19 2008, 10:18

Сообщений: 863
ну это не мой стиль, я пример с IXBT уволок. просто для примера, что using namespace std; не написан.

Наверх
LuckyStr
Чтв Авг 27 2009, 20:35
ID пользователя #82
Зарегистрирован: Втр Янв 27 2009, 17:08

Сообщений: 161
не фигасе вы тут темы раскрываете.
А считаеться ли плохим стилем, если я буду в код C++ вставлять некоторые фрагменты С, например буду работать с сокетам на С, а работать с файлами на С++?
Наверх
vladi
Чтв Авг 27 2009, 22:50
ID пользователя #38
Зарегистрирован: Пнд Мар 24 2008, 13:32

Сообщений: 45
Гм. Да фиг знает.
Если честно, я то кодер не ахти.

Наверное, главное не сильно смешивать.
Наверх
Solaris
Птн Авг 28 2009, 22:01

ID пользователя #22
Зарегистрирован: Втр Фев 26 2008, 15:15

Сообщений: 1559
А по нику и не скажешь.
По теме: все-таки стандарт как мне показалось писать using namespace std. Думаю назрела необходимость на форуме сделать раздел: "Программирование".
Наверх
vladi
Сбт Авг 29 2009, 11:32
ID пользователя #38
Зарегистрирован: Пнд Мар 24 2008, 13:32

Сообщений: 45
Ну дык, ник я выбирал давно.

Сейчас то я понял, что программирование это посложнее чем мне тогда казалось.
Наверх
 

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System