Поместить запись в базу данных теневых паролей
#include <sys/types.h>#include <shadow.h>int putspent( const struct spwd *p,FILE *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 системной библиотеки