glibc (2.38)

(root)/
include/
shadow.h
       1  /* Copyright (C) 1996-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  /* Declaration of types and functions for "shadow" storage of hashed
      19     passphrases.  The shadow database is like the user database, but is
      20     only accessible with special privileges, so that malicious users
      21     cannot retrieve everyone else's hashed passphrase to brute-force at
      22     their convenience.  */
      23  
      24  #ifndef _SHADOW_H
      25  #define _SHADOW_H	1
      26  
      27  #include <features.h>
      28  
      29  #include <paths.h>
      30  
      31  #define __need_size_t
      32  #include <stddef.h>
      33  
      34  #include <bits/types/FILE.h>
      35  
      36  /* Paths to the user database files.  */
      37  #define	SHADOW _PATH_SHADOW
      38  
      39  
      40  __BEGIN_DECLS
      41  
      42  /* A record in the shadow database.  */
      43  struct spwd
      44    {
      45      char *sp_namp;		/* Login name.  */
      46      char *sp_pwdp;		/* Hashed passphrase.  */
      47      long int sp_lstchg;		/* Date of last change.  */
      48      long int sp_min;		/* Minimum number of days between changes.  */
      49      long int sp_max;		/* Maximum number of days between changes.  */
      50      long int sp_warn;		/* Number of days to warn user to change
      51  				   the password.  */
      52      long int sp_inact;		/* Number of days the account may be
      53  				   inactive.  */
      54      long int sp_expire;		/* Number of days since 1970-01-01 until
      55  				   account expires.  */
      56      unsigned long int sp_flag;	/* Reserved.  */
      57    };
      58  
      59  
      60  /* Open database for reading.
      61  
      62     This function is not part of POSIX and therefore no official
      63     cancellation point.  But due to similarity with an POSIX interface
      64     or due to the implementation it is a cancellation point and
      65     therefore not marked with __THROW.  */
      66  extern void setspent (void);
      67  
      68  /* Close database.
      69  
      70     This function is not part of POSIX and therefore no official
      71     cancellation point.  But due to similarity with an POSIX interface
      72     or due to the implementation it is a cancellation point and
      73     therefore not marked with __THROW.  */
      74  extern void endspent (void);
      75  
      76  /* Get next entry from database, perhaps after opening the file.
      77  
      78     This function is not part of POSIX and therefore no official
      79     cancellation point.  But due to similarity with an POSIX interface
      80     or due to the implementation it is a cancellation point and
      81     therefore not marked with __THROW.  */
      82  extern struct spwd *getspent (void);
      83  
      84  /* Get shadow entry matching NAME.
      85  
      86     This function is not part of POSIX and therefore no official
      87     cancellation point.  But due to similarity with an POSIX interface
      88     or due to the implementation it is a cancellation point and
      89     therefore not marked with __THROW.  */
      90  extern struct spwd *getspnam (const char *__name);
      91  
      92  /* Read shadow entry from STRING.
      93  
      94     This function is not part of POSIX and therefore no official
      95     cancellation point.  But due to similarity with an POSIX interface
      96     or due to the implementation it is a cancellation point and
      97     therefore not marked with __THROW.  */
      98  extern struct spwd *sgetspent (const char *__string);
      99  
     100  /* Read next shadow entry from STREAM.
     101  
     102     This function is not part of POSIX and therefore no official
     103     cancellation point.  But due to similarity with an POSIX interface
     104     or due to the implementation it is a cancellation point and
     105     therefore not marked with __THROW.  */
     106  extern struct spwd *fgetspent (FILE *__stream);
     107  
     108  /* Write line containing shadow entry to stream.
     109  
     110     This function is not part of POSIX and therefore no official
     111     cancellation point.  But due to similarity with an POSIX interface
     112     or due to the implementation it is a cancellation point and
     113     therefore not marked with __THROW.  */
     114  extern int putspent (const struct spwd *__p, FILE *__stream);
     115  
     116  
     117  #ifdef __USE_MISC
     118  /* Reentrant versions of some of the functions above.
     119  
     120     These functions are not part of POSIX and therefore no official
     121     cancellation point.  But due to similarity with an POSIX interface
     122     or due to the implementation they are cancellation points and
     123     therefore not marked with __THROW.  */
     124  extern int getspent_r (struct spwd *__result_buf, char *__buffer,
     125  		       size_t __buflen, struct spwd **__result)
     126  	__attr_access ((__write_only__, 2, 3));
     127  
     128  extern int getspnam_r (const char *__name, struct spwd *__result_buf,
     129  		       char *__buffer, size_t __buflen,
     130  		       struct spwd **__result)
     131  	__attr_access ((__write_only__, 3, 4));
     132  
     133  extern int sgetspent_r (const char *__string, struct spwd *__result_buf,
     134  			char *__buffer, size_t __buflen,
     135  			struct spwd **__result)
     136  	__attr_access ((__write_only__, 3, 4));
     137  
     138  extern int fgetspent_r (FILE *__stream, struct spwd *__result_buf,
     139  			char *__buffer, size_t __buflen,
     140  			struct spwd **__result)
     141  	__attr_access ((__write_only__, 3, 4));
     142  #endif	/* misc */
     143  
     144  
     145  /* The simple locking functionality provided here is not suitable for
     146     multi-threaded applications.  */
     147  
     148  /* Request exclusive access to /etc/passwd and /etc/shadow.  */
     149  extern int lckpwdf (void) __THROW;
     150  
     151  /* Release exclusive access to /etc/passwd and /etc/shadow.  */
     152  extern int ulckpwdf (void) __THROW;
     153  
     154  __END_DECLS
     155  
     156  #endif /* shadow.h */