putspent()

Поместить запись в базу данных теневых паролей

Прототип:

#include <sys/types.h>
#include <shadow.h>
int putspent( const struct spwd *p,
FILE *fp );

Аргументы:

p
Указатель на структуру struct spwd, которая содержит записываемую информацию.
fp
Файловый поток для записи.

Библиотека:

libc

Описание:

Функция putspent() записывает теневой пароль в указанный файл. Она противоположна функции getspent().

Переданный указатель на структуру struct spwd может быть создан функциями getspent() или getspnam(). putspent() записывает новую строку в файл, ассоциированный с файловым потоком fp, который соответствует формату /etc/shadow.

Если поле sp_min, sp_max, sp_lstchg, sp_warn, sp_inact или sp_expire структуры struct spwd равно -1 или sp_flag равно 0, соответствующая запись в файле /etc/shadow очищается.

Возвращаемое значение:

0.

Коды ошибок:

Функция putspent() использует перечисленные функции, следовательно, любое устанавливаемое ими errno может быть в итоге использовано:

Примеры:

#include <stdio.h>
#include <stdlib.h>
#include <pwd.h>
#include <shadow.h>
/*
* This program adds a user and password to
* a temporary file which can then be used with
* fgetspent() (of course the password
* string should be encrypted already etc.)
*/
int main( int argc, char **argv )
{
FILE *fp;
struct spwd sp;
char pwbuf[80], nambuf[80];
memset( &sp, 0, sizeof( sp ) );
if ( argc < 2 )
{
printf( "%s filename \n", argv[0] );
return (EXIT_FAILURE);
}
if ( !(fp = fopen( argv[1], "w" )) )
{
fprintf( stderr, "Can't open file %s \n", argv[1] );
perror( "Problem " );
return (1);
}
printf("Enter a userid: ");
if ( !gets( nambuf ) )
{
fprintf( stderr, "Can't get username string\n" );
}
sp.sp_namp = nambuf;
printf("Enter a password: ");
if ( !gets( pwbuf ) )
{
fprintf( stderr, "Can't get username password\n" );
}
sp.sp_pwdp = pwbuf;
putspent( &sp, fp );
fclose( fp );
return (EXIT_SUCCESS);
}

Классификация:

Unix

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Нет

Тематические ссылки:

struct spwd, errno, getgrent(), getlogin(), getpwnam(), getpwuid(), getspent(), getspnam(), setspent()




Предыдущий раздел: Описание API системной библиотеки