aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2004-07-15 12:53:49 +0000
committerEric Andersen <andersen@codepoet.org>2004-07-15 12:53:49 +0000
commit9615a08218caa63c4221a6b5922c628328e719d1 (patch)
tree863532a14dd40a1009cee3dac1dfa7fdd8bea653 /include
parent837f058fb307e0bcf7b9ad4f02a44ea3047f427e (diff)
downloadbusybox-9615a08218caa63c4221a6b5922c628328e719d1.tar.gz
Replace the old and somewhat buggy pwd_grp stuff with the shiny
new stuff mjn3 wrote for uClibc
Diffstat (limited to 'include')
-rw-r--r--include/grp_.h113
-rw-r--r--include/pwd_.h105
-rw-r--r--include/shadow_.h162
3 files changed, 269 insertions, 111 deletions
diff --git a/include/grp_.h b/include/grp_.h
index 7cb0d4af6..b212b0b4a 100644
--- a/include/grp_.h
+++ b/include/grp_.h
@@ -1,39 +1,116 @@
-#ifndef __CONFIG_GRP_H
-#define __CONFIG_GRP_H
+/* Copyright (C) 1991,92,95,96,97,98,99,2000,01 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+/*
+ * POSIX Standard: 9.2.1 Group Database Access <grp.h>
+ */
+
#if !defined CONFIG_USE_BB_PWD_GRP
#include <grp.h>
#else
+#ifndef _GRP_H
+#define _GRP_H 1
+
+
#include <sys/types.h>
#include <features.h>
#include <stdio.h>
-/* The group structure */
+/* The group structure. */
struct group
{
- char *gr_name; /* Group name. */
- char *gr_passwd; /* Password. */
- gid_t gr_gid; /* Group ID. */
- char **gr_mem; /* Member list. */
+ char *gr_name; /* Group name. */
+ char *gr_passwd; /* Password. */
+ gid_t gr_gid; /* Group ID. */
+ char **gr_mem; /* Member list. */
};
-extern void setgrent __P ((void));
-extern void endgrent __P ((void));
-extern struct group * getgrent __P ((void));
-extern struct group * getgrgid __P ((__const gid_t gid));
-extern struct group * getgrnam __P ((__const char * name));
+/* Rewind the group-file stream. */
+extern void setgrent (void);
+
+/* Close the group-file stream. */
+extern void endgrent (void);
+
+/* Read an entry from the group-file stream, opening it if necessary. */
+extern struct group *getgrent (void);
+
+/* Read a group entry from STREAM. */
+extern struct group *fgetgrent (FILE *__stream);
+
+/* Write the given entry onto the given stream. */
+extern int putgrent (__const struct group *__restrict __p,
+ FILE *__restrict __f);
+
+/* Search for an entry with a matching group ID. */
+extern struct group *getgrgid (gid_t __gid);
+
+/* Search for an entry with a matching group name. */
+extern struct group *getgrnam (__const char *__name);
+
+/* Reentrant versions of some of the functions above.
+
+ PLEASE NOTE: the `getgrent_r' function is not (yet) standardized.
+ The interface may change in later versions of this library. But
+ the interface is designed following the principals used for the
+ other reentrant functions so the chances are good this is what the
+ POSIX people would choose. */
+
+extern int getgrent_r (struct group *__restrict __resultbuf,
+ char *__restrict __buffer, size_t __buflen,
+ struct group **__restrict __result);
+
+/* Search for an entry with a matching group ID. */
+extern int getgrgid_r (gid_t __gid, struct group *__restrict __resultbuf,
+ char *__restrict __buffer, size_t __buflen,
+ struct group **__restrict __result);
+
+/* Search for an entry with a matching group name. */
+extern int getgrnam_r (__const char *__restrict __name,
+ struct group *__restrict __resultbuf,
+ char *__restrict __buffer, size_t __buflen,
+ struct group **__restrict __result);
+
+/* Read a group entry from STREAM. This function is not standardized
+ an probably never will. */
+extern int fgetgrent_r (FILE *__restrict __stream,
+ struct group *__restrict __resultbuf,
+ char *__restrict __buffer, size_t __buflen,
+ struct group **__restrict __result);
-extern struct group * fgetgrent __P ((FILE * file));
+/* Set the group set for the current user to GROUPS (N of them). */
+extern int setgroups (size_t __n, __const gid_t *__groups);
-extern int setgroups __P ((size_t n, __const gid_t * groups));
-extern int initgroups __P ((__const char * user, gid_t gid));
+/* Store at most *NGROUPS members of the group set for USER into
+ *GROUPS. Also include GROUP. The actual number of groups found is
+ returned in *NGROUPS. Return -1 if the if *NGROUPS is too small. */
+extern int getgrouplist (__const char *__user, gid_t __group,
+ gid_t *__groups, int *__ngroups);
-extern struct group * bb_getgrent __P ((int grp_fd));
+/* Initialize the group set for the current user
+ by reading the group database and using all groups
+ of which USER is a member. Also include GROUP. */
+extern int initgroups (__const char *__user, gid_t __group);
-#endif /* USE_SYSTEM_PWD_GRP */
-#endif /* __CONFIG_GRP_H */
+#endif /* grp.h */
+#endif
diff --git a/include/pwd_.h b/include/pwd_.h
index 3f081e872..72151203e 100644
--- a/include/pwd_.h
+++ b/include/pwd_.h
@@ -1,11 +1,33 @@
-#ifndef __CONFIG_PWD_H
-#define __CONFIG_PWD_H
+/* Copyright (C) 1991,92,95,96,97,98,99,2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+/*
+ * POSIX Standard: 9.2.2 User Database Access <pwd.h>
+ */
#if !defined CONFIG_USE_BB_PWD_GRP
#include <pwd.h>
#else
+#ifndef _PWD_H
+#define _PWD_H 1
+
#include <sys/types.h>
#include <features.h>
#include <stdio.h>
@@ -13,29 +35,72 @@
/* The passwd structure. */
struct passwd
{
- char *pw_name; /* Username. */
- char *pw_passwd; /* 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. */
+ char *pw_name; /* Username. */
+ char *pw_passwd; /* 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. */
};
-extern void setpwent __P ((void));
-extern void endpwent __P ((void));
-extern struct passwd * getpwent __P ((void));
-extern int putpwent __P ((__const struct passwd * __p, FILE * __f));
-extern int getpw __P ((uid_t uid, char *buf));
+/* Rewind the password-file stream. */
+extern void setpwent (void);
+
+/* Close the password-file stream. */
+extern void endpwent (void);
+
+/* Read an entry from the password-file stream, opening it if necessary. */
+extern struct passwd *getpwent (void);
+
+/* Read an entry from STREAM. */
+extern struct passwd *fgetpwent (FILE *__stream);
+
+/* Write the given entry onto the given stream. */
+extern int putpwent (__const struct passwd *__restrict __p,
+ FILE *__restrict __f);
+
+/* Search for an entry with a matching user ID. */
+extern struct passwd *getpwuid (uid_t __uid);
+
+/* Search for an entry with a matching username. */
+extern struct passwd *getpwnam (__const char *__name);
+
+/* Reentrant versions of some of the functions above.
+
+ PLEASE NOTE: the `getpwent_r' function is not (yet) standardized.
+ The interface may change in later versions of this library. But
+ the interface is designed following the principals used for the
+ other reentrant functions so the chances are good this is what the
+ POSIX people would choose. */
+
+extern int getpwent_r (struct passwd *__restrict __resultbuf,
+ char *__restrict __buffer, size_t __buflen,
+ struct passwd **__restrict __result);
+
+extern int getpwuid_r (uid_t __uid,
+ struct passwd *__restrict __resultbuf,
+ char *__restrict __buffer, size_t __buflen,
+ struct passwd **__restrict __result);
-extern struct passwd * fgetpwent __P ((FILE * file));
+extern int getpwnam_r (__const char *__restrict __name,
+ struct passwd *__restrict __resultbuf,
+ char *__restrict __buffer, size_t __buflen,
+ struct passwd **__restrict __result);
-extern struct passwd * getpwuid __P ((__const uid_t));
-extern struct passwd * getpwnam __P ((__const char *));
-extern struct passwd * __getpwent __P ((__const int passwd_fd));
+/* Read an entry from STREAM. This function is not standardized and
+ probably never will. */
+extern int fgetpwent_r (FILE *__restrict __stream,
+ struct passwd *__restrict __resultbuf,
+ char *__restrict __buffer, size_t __buflen,
+ struct passwd **__restrict __result);
-#endif /* USE_SYSTEM_PWD_GRP */
-#endif /* __CONFIG_PWD_H */
+/* Re-construct the password-file line for the given uid
+ in the given buffer. This knows the format that the caller
+ will expect, but this need not be the format of the password file. */
+extern int getpw (uid_t __uid, char *__buffer);
+#endif /* pwd.h */
+#endif
diff --git a/include/shadow_.h b/include/shadow_.h
index a677d5262..1b14f0a7b 100644
--- a/include/shadow_.h
+++ b/include/shadow_.h
@@ -1,82 +1,98 @@
-/*
- * Copyright 1988 - 1994, Julianne Frances Haugh <jockgrrl@austin.rr.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Julianne F. Haugh nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _H_SHADOW
-#define _H_SHADOW
-
-
-#ifdef USE_SYSTEM_SHADOW
+/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+/* Declaration of types and functions for shadow password suite. */
+
+#if !defined CONFIG_USE_BB_SHADOW
#include <shadow.h>
#else
-/*
- * This information is not derived from AT&T licensed sources. Posted
- * to the USENET 11/88, and updated 11/90 with information from SVR4.
- *
- * $Id: shadow_.h,v 1.1 2002/06/23 04:24:20 andersen Exp $
- */
-
-typedef long sptime;
-
-/*
- * Shadow password security file structure.
- */
-
-struct spwd {
- char *sp_namp; /* login name */
- char *sp_pwdp; /* encrypted password */
- sptime sp_lstchg; /* date of last change */
- sptime sp_min; /* minimum number of days between changes */
- sptime sp_max; /* maximum number of days between changes */
- sptime sp_warn; /* number of days of warning before password
- expires */
- sptime sp_inact; /* number of days after password expires
- until the account becomes unusable. */
- sptime sp_expire; /* days since 1/1/70 until account expires */
- unsigned long sp_flag; /* reserved for future use */
+#ifndef _SHADOW_H
+#define _SHADOW_H 1
+
+#include <stdio.h>
+
+/* Paths to the user database files. */
+#ifndef _PATH_SHADOW
+#define _PATH_SHADOW "/etc/shadow"
+#endif
+#define SHADOW _PATH_SHADOW
+
+
+/* Structure of the password file. */
+struct spwd
+{
+ char *sp_namp; /* Login name. */
+ char *sp_pwdp; /* Encrypted password. */
+ long int sp_lstchg; /* Date of last change. */
+ long int sp_min; /* Minimum number of days between changes. */
+ long int sp_max; /* Maximum number of days between changes. */
+ long int sp_warn; /* Number of days to warn user to change
+ the password. */
+ long int sp_inact; /* Number of days the account may be
+ inactive. */
+ long int sp_expire; /* Number of days since 1970-01-01 until
+ account expires. */
+ unsigned long int sp_flag; /* Reserved. */
};
-/*
- * Shadow password security file functions.
- */
-#include <stdio.h> /* for FILE */
+/* Open database for reading. */
+extern void setspent (void);
+
+/* Close database. */
+extern void endspent (void);
+
+/* Get next entry from database, perhaps after opening the file. */
+extern struct spwd *getspent (void);
+
+/* Get shadow entry matching NAME. */
+extern struct spwd *getspnam (__const char *__name);
+
+/* Read shadow entry from STRING. */
+extern struct spwd *sgetspent (__const char *__string);
+
+/* Read next shadow entry from STREAM. */
+extern struct spwd *fgetspent (FILE *__stream);
+
+/* Write line containing shadow password entry to stream. */
+extern int putspent (__const struct spwd *__p, FILE *__stream);
+
+/* Reentrant versions of some of the functions above. */
+extern int getspent_r (struct spwd *__result_buf, char *__buffer,
+ size_t __buflen, struct spwd **__result);
+
+extern int getspnam_r (__const char *__name, struct spwd *__result_buf,
+ char *__buffer, size_t __buflen,
+ struct spwd **__result)__THROW;
+
+extern int sgetspent_r (__const char *__string, struct spwd *__result_buf,
+ char *__buffer, size_t __buflen,
+ struct spwd **__result);
-extern struct spwd *getspent(void);
-extern struct spwd *sgetspent(const char *);
-extern struct spwd *fgetspent(FILE *);
-extern void setspent(void);
-extern void endspent(void);
-extern int putspent(const struct spwd *, FILE *);
-extern struct spwd *getspnam(const char *name);
-extern struct spwd *pwd_to_spwd(const struct passwd *pw);
+extern int fgetspent_r (FILE *__stream, struct spwd *__result_buf,
+ char *__buffer, size_t __buflen,
+ struct spwd **__result);
+/* Protect password file against multi writers. */
+extern int lckpwdf (void);
-#endif /* USE_LOCAL_SHADOW */
+/* Unlock password file. */
+extern int ulckpwdf (void);
-#endif /* _H_SHADOW */
+#endif /* shadow.h */
+#endif