URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7535
[ Назад ]

Исходное сообщение
"Создание пользователей из программы на С"

Отправлено Pavel.D , 10-Авг-08 18:01 
Друзья имеется следующая задача:
Есть программа на языке Си. Нужно реализовать возможность создания пользователя системы FreeBSD, возможность изменения пароля какого-либо пользователя.

Каким образом это можно сделать?
Сейчас даже не особо важно посредством чего это будет сделано - функциями Си или системным вызовом (exec).

Если речь пойдет про системный вызов, какую команду можно использовать для этого?
Уточню, необходима команда в один пресест, ну то есть чтобы не запрашивала дополнительных действий как например passwd, которая просит указать пароль, повторить его.

Заранее благодарен за ответы


Содержание

Сообщения в этом обсуждении
"Создание пользователей из программы на С"
Отправлено angra , 10-Авг-08 19:46 
Это же open source, глянь исходники useradd и passwd.


"Создание пользователей из программы на С"
Отправлено Pavel.D , 10-Авг-08 20:13 
>Это же open source, глянь исходники useradd и passwd.

к сожалению не получилось их найти. Подскажите пожалуйста, как их посмотреть.

а если системным вызовом делать так (для юзера тестер):
execle("/usr/bin/passwd","passwd","tester",NULL);


можно ли как-нибудь указать что именно "отдать" на запрос пароля и повтора пароля?


"Создание пользователей из программы на С"
Отправлено v.i.t , 10-Авг-08 22:12 
>>Это же open source, глянь исходники useradd и passwd.
>
>к сожалению не получилось их найти. Подскажите пожалуйста, как их посмотреть.
>
>а если системным вызовом делать так (для юзера тестер):
>execle("/usr/bin/passwd","passwd","tester",NULL);
>
>
>можно ли как-нибудь указать что именно "отдать" на запрос пароля и повтора
>пароля?

` useradd  ...  -p пароль `        для создания пользователя  с указанием пароля

` echo tester:пароль | chpasswd -e `          для изменения пароля без повтора


"Создание пользователей из программы на С"
Отправлено Pavel.D , 10-Авг-08 23:07 
>[оверквотинг удален]
>>
>>можно ли как-нибудь указать что именно "отдать" на запрос пароля и повтора
>>пароля?
>
> ` useradd  ...  -p пароль `    
>    для создания пользователя  с указанием пароля
>
>
> ` echo tester:пароль | chpasswd -e `    
>     для изменения пароля без повтора

оно же для Линукса?


"Создание пользователей из программы на С"
Отправлено Pavel.D , 11-Авг-08 11:58 
>>>можно ли как-нибудь указать что именно "отдать" на запрос пароля и повтора
>>>пароля?

Оказалось просто.
echo "pass" | pw usermod -u 1005 -h 0

Каким бразом эту конструкцию можно использовать в execl() ?

Подскажите, где посмотреть исходники pw ?


"Создание пользователей из программы на С"
Отправлено phpcoder , 11-Авг-08 12:01 
>Подскажите, где посмотреть исходники pw ?

http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.sbin/pw/


"Создание пользователей из программы на С"
Отправлено Pavel.D , 11-Авг-08 15:15 
>>>>можно ли как-нибудь указать что именно "отдать" на запрос пароля и повтора
>>>>пароля?
>
>Оказалось просто.
>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);
}


Скорее всего есть способ намного прощее. Если кто знает, прошу подсказать.


"Создание пользователей из программы на С"
Отправлено vodz , 11-Авг-08 15:55 
>  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;


"Создание пользователей из программы на С"
Отправлено Pavel.D , 11-Авг-08 18:37 
>[оверквотинг удален]
>>  execl("/bin/echo", "echo","zxcv", NULL);
>>  perror("failed to run ls");
>
>Даа...
>
>эти 3 строки заменить на write(fds[1], "zxcv", 4);
>
>> exit(0);
>
>return 0;

да, благодарю.

Друзья, не порекомендуете книги по программированию в unix?
Есть очень неплохая
"Хрестоматия по программированию на Си в Unix"
но, к сожалению, не настолько подробная, как хотелось бы.


"Создание пользователей из программы на С"
Отправлено Michelnok , 11-Авг-08 19:20 
>
>Друзья, не порекомендуете книги по программированию в unix?

Стивенс У., Раго С., "UNIX. Профессиональное программирование"
http://www.symbol.ru/catalog/book/503720

или

Рочкинд М., "Программирование для UNIX"
http://www.bhv.ru/books/book.php?id=10141