Добрый день.
Имеется задача по программному редактированию пользователей. Использовал вызов usermod и прочие через system, но столькнулся с тем, что usermod отличается в разных дистрибутивах (в частности написанная для openSUSE прога не хорошо себя ведет на ubuntu). Пришлось работать с функциями pwd.h и shadow.h. И тут возникла проблема, если с добавлением все хорошо, то редактирование и удаление как-то странно работает. Вернее удаление я вообще не знаю как сделать. Ну кроме как открыть файл passw, отпарсит и удалить строку. Или только так и можно? Но ведь для добавления есть putpwent.
P.s. гуглем пользовался, нашел только про добавление.
работа с pwd.h
Ну кроме как открыть файл passw, отпарсит и удалить строку. Или только так и можно?
дык а чем не вариант? и про shadow не забудьте. Добавлять тоже так можно.
Но ведь для добавления есть putpwent.
это не для добавления. Это хрень пароль шифрует. Точнее пишет его в поток. У нас-же уже лет 40 пароль не храниться, а хранится только его хеш. Вот и функции нужны для работы с этим хешем.
[quote="kryuch"]Но ведь для добавления есть putpwent.
это не для добавления. Это хрень пароль шифрует. Точнее пишет его в поток. У нас-же уже лет 40 пароль не храниться, а хранится только его хеш. Вот и функции нужны для работы с этим хешем.[/quote]
Как-же не добавляет? Очень даже добавляет. А шифрует crypt
оно просто в какой-то поток пишет.Как-же не добавляет? Очень даже добавляет. А шифрует crypt
Показать
NAME
putpwent - write a password file entry
SYNOPSIS
#include <stdio.h>
#include <sys/types.h>
#include <pwd.h>
int putpwent(const struct passwd *p, FILE *stream);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
putpwent(): _SVID_SOURCE
DESCRIPTION
The putpwent() function writes a password entry from the structure p in the file associated with stream.
The passwd structure is defined in <pwd.h> as follows:
struct passwd {
char *pw_name; /* username */
char *pw_passwd; /* user password */
uid_t pw_uid; /* user ID */
gid_t pw_gid; /* group ID */
char *pw_gecos; /* real name */
char *pw_dir; /* home directory */
char *pw_shell; /* shell program */
};
RETURN VALUE
The putpwent() function returns 0 on success, or -1 if an error occurs.
оно просто в какой-то поток пишет.[/quote][quote="kryuch"]Как-же не добавляет? Очень даже добавляет. А шифрует crypt
Ну-да, а если в качестве потока передать файлик с пользователями из etc, то туда и пишет. И пользователь добавляется таким образом.
Ну-да, а если в качестве потока передать файлик с пользователями из etc, то туда и пишет. И пользователь добавляется таким образом.
проблема в том, что для добавления пользователя надо добавить строчку в /etc/passwd, а вот пароль (его хеш) пишется таки в /etc/shadow.
[quote="kryuch"]Ну-да, а если в качестве потока передать файлик с пользователями из etc, то туда и пишет. И пользователь добавляется таким образом.
проблема в том, что для добавления пользователя надо добавить строчку в /etc/passwd, а вот пароль (его хеш) пишется таки в /etc/shadow.[/quote]
Можно и в /etc/passwd, хотя и не хорошо сие, конечно
Можно и в /etc/passwd
можно и вообще без пароля...