1/* vi: set sw=4 ts=4: */ 2/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, write to the Free 17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18 02111-1307 USA. */ 19 20/* Declaration of types and functions for shadow password suite */ 21 22#if !ENABLE_USE_BB_SHADOW 23 24#include <shadow.h> 25 26#else 27 28#ifndef _SHADOW_H 29#define _SHADOW_H 1 30 31/* Paths to the user database files */ 32#ifndef _PATH_SHADOW 33#define _PATH_SHADOW "/etc/shadow" 34#endif 35 36/* Structure of the password file */ 37struct spwd { 38 char *sp_namp; /* Login name */ 39 char *sp_pwdp; /* Encrypted password */ 40 long sp_lstchg; /* Date of last change */ 41 long sp_min; /* Minimum number of days between changes */ 42 long sp_max; /* Maximum number of days between changes */ 43 long sp_warn; /* Number of days to warn user to change the password */ 44 long sp_inact; /* Number of days the account may be inactive */ 45 long sp_expire; /* Number of days since 1970-01-01 until account expires */ 46 unsigned long sp_flag; /* Reserved */ 47}; 48 49 50#define setspent bb_internal_setspent 51#define endspent bb_internal_endspent 52#define getspent bb_internal_getspent 53#define getspnam bb_internal_getspnam 54#define sgetspent bb_internal_sgetspent 55#define fgetspent bb_internal_fgetspent 56#define putspent bb_internal_putspent 57#define getspent_r bb_internal_getspent_r 58#define getspnam_r bb_internal_getspnam_r 59#define sgetspent_r bb_internal_sgetspent_r 60#define fgetspent_r bb_internal_fgetspent_r 61#define lckpwdf bb_internal_lckpwdf 62#define ulckpwdf bb_internal_ulckpwdf 63 64 65/* All function names below should be remapped by #defines above 66 * in order to not collide with libc names. 67 * In theory it isn't necessary, but I saw weird interactions at link time. 68 * Let's play safe */ 69 70 71/* Open database for reading */ 72extern void setspent(void); 73 74/* Close database */ 75extern void endspent(void); 76 77/* Get next entry from database, perhaps after opening the file */ 78extern struct spwd *getspent(void); 79 80/* Get shadow entry matching NAME */ 81extern struct spwd *getspnam(__const char *__name); 82 83/* Read shadow entry from STRING */ 84extern struct spwd *sgetspent(__const char *__string); 85 86/* Read next shadow entry from STREAM */ 87extern struct spwd *fgetspent(FILE *__stream); 88 89/* Write line containing shadow password entry to stream */ 90extern int putspent(__const struct spwd *__p, FILE *__stream); 91 92/* Reentrant versions of some of the functions above */ 93extern int getspent_r(struct spwd *__result_buf, char *__buffer, 94 size_t __buflen, struct spwd **__result); 95 96extern int getspnam_r(__const char *__name, struct spwd *__result_buf, 97 char *__buffer, size_t __buflen, 98 struct spwd **__result); 99 100extern int sgetspent_r(__const char *__string, struct spwd *__result_buf, 101 char *__buffer, size_t __buflen, 102 struct spwd **__result); 103 104extern int fgetspent_r(FILE *__stream, struct spwd *__result_buf, 105 char *__buffer, size_t __buflen, 106 struct spwd **__result); 107/* Protect password file against multi writers */ 108extern int lckpwdf(void); 109 110/* Unlock password file */ 111extern int ulckpwdf(void); 112 113#endif /* shadow.h */ 114#endif 115