12966Swollman/*-
250477Speter * Copyright (C) 1996
31590Srgrimes *	David L. Nugent.  All rights reserved.
4156813Sru *
5156813Sru * Redistribution and use in source and binary forms, with or without
64699Sjkh * modification, are permitted provided that the following conditions
734706Sbde * are met:
8213391Sgordon * 1. Redistributions of source code must retain the above copyright
91930Swollman *    notice, this list of conditions and the following disclaimer.
101930Swollman * 2. Redistributions in binary form must reproduce the above copyright
11106717Smarcel *    notice, this list of conditions and the following disclaimer in the
12100200Swollman *    documentation and/or other materials provided with the distribution.
13100200Swollman *
1496630Stjr * THIS SOFTWARE IS PROVIDED BY DAVID L. NUGENT AND CONTRIBUTORS ``AS IS'' AND
1591706Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1638653Sgpalmer * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1738653Sgpalmer * ARE DISCLAIMED.  IN NO EVENT SHALL DAVID L. NUGENT OR CONTRIBUTORS BE LIABLE
1857013Sobrien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19148771Scperciva * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2078562Sobrien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21108667Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2238653Sgpalmer * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2338653Sgpalmer * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2438653Sgpalmer * SUCH DAMAGE.
2538653Sgpalmer *
26208964Srdivacky * $FreeBSD$
2738653Sgpalmer */
2838653Sgpalmer
2938653Sgpalmer#ifndef _PWUPD_H_
3038653Sgpalmer#define _PWUPD_H_
3138653Sgpalmer
3238653Sgpalmer#include <sys/cdefs.h>
3338653Sgpalmer#include <sys/param.h>
34176733Sjeff#include <sys/types.h>
3595926Stjr
3638653Sgpalmer#include <pwd.h>
3738653Sgpalmer#include <grp.h>
3838653Sgpalmer#include <stdbool.h>
3938653Sgpalmer#include <stringlist.h>
40108439Sobrien
41109314Sobrien#if defined(__FreeBSD__)
4240826Sjoerg#define	RET_SETGRENT	int
4338653Sgpalmer#else
4438653Sgpalmer#define	RET_SETGRENT	void
4538653Sgpalmer#endif
4638653Sgpalmer
4738653Sgpalmerstruct pwf {
4838653Sgpalmer	int		    _altdir;
4938653Sgpalmer	void		  (*_setpwent)(void);
50203711Sdelphij	void		  (*_endpwent)(void);
5138653Sgpalmer	struct passwd * (*_getpwent)(void);
5241036Sdima	struct passwd	* (*_getpwuid)(uid_t uid);
5363499Sps	struct passwd	* (*_getpwnam)(const char * nam);
5438653Sgpalmer	RET_SETGRENT	  (*_setgrent)(void);
55103303Speter	void		  (*_endgrent)(void);
5638653Sgpalmer	struct group  * (*_getgrent)(void);
57101629Sjake	struct group  * (*_getgrgid)(gid_t gid);
58158287Smaxim	struct group  * (*_getgrnam)(const char * nam);
5938653Sgpalmer};
60222273Sobrien
61166255Sdelphijstruct userconf {
6238653Sgpalmer	int		default_password;	/* Default password for new users? */
6338653Sgpalmer	int		reuse_uids;		/* Reuse uids? */
64219019Sgabor	int		reuse_gids;		/* Reuse gids? */
6538653Sgpalmer	char		*nispasswd;		/* Path to NIS version of the passwd file */
6638653Sgpalmer	char		*dotdir;		/* Where to obtain skeleton files */
6738653Sgpalmer	char		*newmail;		/* Mail to send to new accounts */
6838653Sgpalmer	char		*logfile;		/* Where to log changes */
6938653Sgpalmer	char		*home;			/* Where to create home directory */
7038653Sgpalmer	mode_t		homemode;		/* Home directory permissions */
7138653Sgpalmer	char		*shelldir;		/* Where shells are located */
7238653Sgpalmer	char		**shells;		/* List of shells */
7338653Sgpalmer	char		*shell_default;		/* Default shell */
7438653Sgpalmer	char		*default_group;		/* Default group number */
7593619Sjake	StringList	*groups;		/* Default (additional) groups */
7638653Sgpalmer	char		*default_class;		/* Default user class */
7738653Sgpalmer	uid_t		min_uid, max_uid;	/* Allowed range of uids */
7838653Sgpalmer	gid_t		min_gid, max_gid;	/* Allowed range of gids */
7939614Sbde	time_t		expire_days;		/* Days to expiry */
8038653Sgpalmer	time_t		password_days;		/* Days to password expiry */
8160789Sps};
8260789Sps
8360789Spsstruct pwconf {
8438653Sgpalmer	char		 rootdir[MAXPATHLEN];
85116677Sphantom	char		 etcpath[MAXPATHLEN];
8638653Sgpalmer	int		 fd;
8738653Sgpalmer	int		 rootfd;
8838653Sgpalmer	bool		 checkduplicate;
8938653Sgpalmer};
90126701Sdes
9138653Sgpalmerextern struct pwf PWF;
9238653Sgpalmerextern struct pwf VPWF;
9338653Sgpalmerextern struct pwconf conf;
9438653Sgpalmer
95207842Smm#define SETPWENT()	PWF._setpwent()
9638653Sgpalmer#define ENDPWENT()	PWF._endpwent()
97208320Sjkim#define GETPWENT()	PWF._getpwent()
98213391Sgordon#define GETPWUID(uid)	PWF._getpwuid(uid)
9938653Sgpalmer#define GETPWNAM(nam)	PWF._getpwnam(nam)
100174814Sru
101174810Sphk#define SETGRENT()	PWF._setgrent()
102219019Sgabor#define ENDGRENT()	PWF._endgrent()
10338653Sgpalmer#define GETGRENT()	PWF._getgrent()
104219019Sgabor#define GETGRGID(gid)	PWF._getgrgid(gid)
10538653Sgpalmer#define GETGRNAM(nam)	PWF._getgrnam(nam)
10638653Sgpalmer
10738653Sgpalmer#define PWF_REGULAR 0
108146107Sfjoe#define PWF_ALT 1
10939914Sdfr#define PWF_ROOTDIR 2
11038653Sgpalmer
11138653Sgpalmer#define PWALTDIR()	PWF._altdir
11297365Stjr#ifndef _PATH_PWD
11338653Sgpalmer#define _PATH_PWD	"/etc"
11438653Sgpalmer#endif
11576273Sbrian#ifndef _GROUP
11638653Sgpalmer#define _GROUP		"group"
11738653Sgpalmer#endif
11838653Sgpalmer#ifndef _MASTERPASSWD
11938653Sgpalmer#define _MASTERPASSWD	"master.passwd"
12038653Sgpalmer#endif
12138653Sgpalmer
12238653Sgpalmer__BEGIN_DECLS
12397096Stjrint addpwent(struct passwd * pwd);
124192398Sgnnint delpwent(struct passwd * pwd);
12538653Sgpalmerint chgpwent(char const * login, struct passwd * pwd);
12638653Sgpalmer
12738653Sgpalmerchar * getpwpath(char const * file);
128174200Srwatson
129220166Straszint addgrent(struct group * grp);
13038653Sgpalmerint delgrent(struct group * grp);
13138653Sgpalmerint chggrent(char const * name, struct group * grp);
132194267Sed
13338653Sgpalmerchar * getgrpath(const char *file);
13438653Sgpalmer
13538653Sgpalmervoid vsetpwent(void);
13638653Sgpalmervoid vendpwent(void);
13738653Sgpalmerstruct passwd * vgetpwent(void);
13838653Sgpalmerstruct passwd * vgetpwuid(uid_t uid);
13938653Sgpalmerstruct passwd * vgetpwnam(const char * nam);
140204103Sdelphij
14138653Sgpalmerstruct group * vgetgrent(void);
14238653Sgpalmerstruct group * vgetgrgid(gid_t gid);
14345701Sdesstruct group * vgetgrnam(const char * nam);
14438653SgpalmerRET_SETGRENT   vsetgrent(void);
14597955Sdougbvoid           vendgrent(void);
14638653Sgpalmer
14741035Sdimavoid copymkdir(int rootfd, char const * dir, int skelfd, mode_t mode, uid_t uid,
14897034Stjr    gid_t gid, int flags);
14938653Sgpalmervoid rm_r(int rootfd, char const * dir, uid_t uid);
15038653Sgpalmer__END_DECLS
151127947Skientzle
15238653Sgpalmer#endif				/* !_PWUPD_H */
15338653Sgpalmer