Друзья имеется следующая задача:
Есть программа на языке Си. Нужно реализовать возможность создания пользователя системы FreeBSD, возможность изменения пароля какого-либо пользователя.Каким образом это можно сделать?
Сейчас даже не особо важно посредством чего это будет сделано - функциями Си или системным вызовом (exec).Если речь пойдет про системный вызов, какую команду можно использовать для этого?
Уточню, необходима команда в один пресест, ну то есть чтобы не запрашивала дополнительных действий как например passwd, которая просит указать пароль, повторить его.Заранее благодарен за ответы
Это же open source, глянь исходники useradd и passwd.
>Это же open source, глянь исходники useradd и passwd.к сожалению не получилось их найти. Подскажите пожалуйста, как их посмотреть.
а если системным вызовом делать так (для юзера тестер):
execle("/usr/bin/passwd","passwd","tester",NULL);
можно ли как-нибудь указать что именно "отдать" на запрос пароля и повтора пароля?
>>Это же open source, глянь исходники useradd и passwd.
>
>к сожалению не получилось их найти. Подскажите пожалуйста, как их посмотреть.
>
>а если системным вызовом делать так (для юзера тестер):
>execle("/usr/bin/passwd","passwd","tester",NULL);
>
>
>можно ли как-нибудь указать что именно "отдать" на запрос пароля и повтора
>пароля?` useradd ... -p пароль ` для создания пользователя с указанием пароля
` echo tester:пароль | chpasswd -e ` для изменения пароля без повтора
>[оверквотинг удален]
>>
>>можно ли как-нибудь указать что именно "отдать" на запрос пароля и повтора
>>пароля?
>
> ` useradd ... -p пароль `
> для создания пользователя с указанием пароля
>
>
> ` echo tester:пароль | chpasswd -e `
> для изменения пароля без повтораоно же для Линукса?
>>>можно ли как-нибудь указать что именно "отдать" на запрос пароля и повтора
>>>пароля?Оказалось просто.
echo "pass" | pw usermod -u 1005 -h 0Каким бразом эту конструкцию можно использовать в execl() ?
Подскажите, где посмотреть исходники pw ?
>Подскажите, где посмотреть исходники pw ?http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.sbin/pw/
>>>>можно ли как-нибудь указать что именно "отдать" на запрос пароля и повтора
>>>>пароля?
>
>Оказалось просто.
>echo "pass" | pw usermod -u 1005 -h 0
>
>Каким бразом эту конструкцию можно использовать в execl() ?Получилось сделать таким образом
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main()
{
int fds[2];
pid_t pid;
if(pipe(fds)<0)
{
perror("pipe failed");
exit(1);
}
if((pid=fork())<0)
{
perror("fork failed");
exit(2);
}
if(pid==0)
{
close(fds[1]);
dup2(fds[0], 0);
execl("/usr/sbin/pw", "pw","usermod","-u","1005","-h","0", NULL);
perror("failed to run pw");
}
else
{
close(fds[0]);
dup2(fds[1], 1);
execl("/bin/echo", "echo","zxcv", NULL);
perror("failed to run ls");
}
exit(0);
}
Скорее всего есть способ намного прощее. Если кто знает, прошу подсказать.
> dup2(fds[1], 1);
> execl("/bin/echo", "echo","zxcv", NULL);
> perror("failed to run ls");Даа...
эти 3 строки заменить на write(fds[1], "zxcv", 4);
> exit(0);
return 0;
>[оверквотинг удален]
>> execl("/bin/echo", "echo","zxcv", NULL);
>> perror("failed to run ls");
>
>Даа...
>
>эти 3 строки заменить на write(fds[1], "zxcv", 4);
>
>> exit(0);
>
>return 0;да, благодарю.
Друзья, не порекомендуете книги по программированию в unix?
Есть очень неплохая
"Хрестоматия по программированию на Си в Unix"
но, к сожалению, не настолько подробная, как хотелось бы.
>
>Друзья, не порекомендуете книги по программированию в unix?Стивенс У., Раго С., "UNIX. Профессиональное программирование"
http://www.symbol.ru/catalog/book/503720или
Рочкинд М., "Программирование для UNIX"
http://www.bhv.ru/books/book.php?id=10141