LinuxForum.Fans
Тема

работа с pwd.h

Автор: kryuch 10 сообщений 1906 просмотров
#271638

Добрый день.
Имеется задача по программному редактированию пользователей. Использовал вызов usermod и прочие через system, но столькнулся с тем, что usermod отличается в разных дистрибутивах (в частности написанная для openSUSE прога не хорошо себя ведет на ubuntu). Пришлось работать с функциями pwd.h и shadow.h. И тут возникла проблема, если с добавлением все хорошо, то редактирование и удаление как-то странно работает. Вернее удаление я вообще не знаю как сделать. Ну кроме как открыть файл passw, отпарсит и удалить строку. Или только так и можно? Но ведь для добавления есть putpwent.

P.s. гуглем пользовался, нашел только про добавление.

#271645
"kryuch" написал:
Ну кроме как открыть файл passw, отпарсит и удалить строку. Или только так и можно?

дык а чем не вариант? и про shadow не забудьте. Добавлять тоже так можно.

"kryuch" написал:
Но ведь для добавления есть putpwent.

это не для добавления. Это хрень пароль шифрует. Точнее пишет его в поток. У нас-же уже лет 40 пароль не храниться, а хранится только его хеш. Вот и функции нужны для работы с этим хешем.

#271648
drBatty написал:

[quote="kryuch"]Но ведь для добавления есть putpwent.

это не для добавления. Это хрень пароль шифрует. Точнее пишет его в поток. У нас-же уже лет 40 пароль не храниться, а хранится только его хеш. Вот и функции нужны для работы с этим хешем.[/quote]

Как-же не добавляет? Очень даже добавляет. А шифрует crypt

#271649

похоже и правда только самому парсить... для успокоения совести можно посмотреть, как это делают сами user{add,mod,del}

#271652
Fat-Zer написал:
для успокоения совести можно посмотреть, как это делают сами user{add,mod,del}

о, спасибо за идею. заюзаю коды

#271653

"kryuch" написал:
Как-же не добавляет? Очень даже добавляет. А шифрует crypt
оно просто в какой-то поток пишет.
Показать
PUTPWENT(3) Linux Programmer's Manual PUTPWENT(3)

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.
#271656

drBatty написал:
[quote="kryuch"]Как-же не добавляет? Очень даже добавляет. А шифрует crypt
оно просто в какой-то поток пишет.[/quote]

Ну-да, а если в качестве потока передать файлик с пользователями из etc, то туда и пишет. И пользователь добавляется таким образом.
#271660
"kryuch" написал:
Ну-да, а если в качестве потока передать файлик с пользователями из etc, то туда и пишет. И пользователь добавляется таким образом.

проблема в том, что для добавления пользователя надо добавить строчку в /etc/passwd, а вот пароль (его хеш) пишется таки в /etc/shadow.

#271661
drBatty написал:
[quote="kryuch"]Ну-да, а если в качестве потока передать файлик с пользователями из etc, то туда и пишет. И пользователь добавляется таким образом.

проблема в том, что для добавления пользователя надо добавить строчку в /etc/passwd, а вот пароль (его хеш) пишется таки в /etc/shadow.[/quote]

Можно и в /etc/passwd, хотя и не хорошо сие, конечно

#271663
"kryuch" написал:
Можно и в /etc/passwd

можно и вообще без пароля...

Войдите или зарегистрируйтесь, чтобы ответить.