pwupd.h revision 56000
120253Sjoerg/*-
220302Sjoerg * Copyright (C) 1996
320302Sjoerg *	David L. Nugent.  All rights reserved.
420253Sjoerg *
520253Sjoerg * Redistribution and use in source and binary forms, with or without
620253Sjoerg * modification, are permitted provided that the following conditions
720253Sjoerg * are met:
820253Sjoerg * 1. Redistributions of source code must retain the above copyright
920302Sjoerg *    notice, this list of conditions and the following disclaimer.
1020253Sjoerg * 2. Redistributions in binary form must reproduce the above copyright
1120253Sjoerg *    notice, this list of conditions and the following disclaimer in the
1220253Sjoerg *    documentation and/or other materials provided with the distribution.
1320253Sjoerg *
1420302Sjoerg * THIS SOFTWARE IS PROVIDED BY DAVID L. NUGENT AND CONTRIBUTORS ``AS IS'' AND
1520253Sjoerg * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1620253Sjoerg * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1720302Sjoerg * ARE DISCLAIMED.  IN NO EVENT SHALL DAVID L. NUGENT OR CONTRIBUTORS BE LIABLE
1820253Sjoerg * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1920253Sjoerg * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2020253Sjoerg * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2120253Sjoerg * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2220253Sjoerg * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2320253Sjoerg * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2420253Sjoerg * SUCH DAMAGE.
2520253Sjoerg *
2650479Speter * $FreeBSD: head/usr.sbin/pw/pwupd.h 56000 2000-01-15 00:20:22Z davidn $
2720253Sjoerg */
2820253Sjoerg
2920253Sjoerg#ifndef _PWUPD_H_
3020253Sjoerg#define _PWUPD_H_
3120253Sjoerg
3220253Sjoerg#include <sys/types.h>
3320253Sjoerg#include <pwd.h>
3420253Sjoerg#include <grp.h>
3520253Sjoerg
3620253Sjoerg#include <sys/cdefs.h>
3720253Sjoerg
3856000Sdavidn#if defined(__FreeBSD__)
3956000Sdavidn#define	RET_SETGRENT	int
4056000Sdavidn#else
4156000Sdavidn#define	RET_SETGRENT	void
4256000Sdavidn#endif
4356000Sdavidn
4420253Sjoergenum updtype
4520253Sjoerg{
4620253Sjoerg        UPD_DELETE = -1,
4720253Sjoerg        UPD_CREATE = 0,
4820253Sjoerg        UPD_REPLACE = 1
4920253Sjoerg};
5020253Sjoerg
5120253Sjoerg__BEGIN_DECLS
5220253Sjoergint fileupdate __P((char const * fname, mode_t fm, char const * nline, char const * pfx, int pfxlen, int updmode));
5320253Sjoerg__END_DECLS
5420253Sjoerg
5520253Sjoergenum pwdfmttype
5620253Sjoerg{
5720253Sjoerg        PWF_STANDARD,		/* MASTER format but with '*' as password */
5820253Sjoerg        PWF_PASSWD,		/* V7 format */
5920253Sjoerg        PWF_GROUP = PWF_PASSWD,
6020253Sjoerg        PWF_MASTER		/* MASTER format with password */
6120253Sjoerg};
6220253Sjoerg
6344229Sdavidnstruct pwf
6444229Sdavidn{
6544229Sdavidn	int		    _altdir;
6644229Sdavidn	void		  (*_setpwent)(void);
6744229Sdavidn	void		  (*_endpwent)(void);
6844229Sdavidn	struct passwd * (*_getpwent)(void);
6944229Sdavidn	struct passwd	* (*_getpwuid)(uid_t uid);
7044229Sdavidn	struct passwd	* (*_getpwnam)(const char * nam);
7144229Sdavidn	int             (*_pwdb)(char *arg, ...);
7256000Sdavidn	RET_SETGRENT	  (*_setgrent)(void);
7344229Sdavidn	void		  (*_endgrent)(void);
7444229Sdavidn	struct group  * (*_getgrent)(void);
7544229Sdavidn	struct group  * (*_getgrgid)(gid_t gid);
7644229Sdavidn	struct group  * (*_getgrnam)(const char * nam);
7744229Sdavidn	int		  (*_grdb)(char *arg, ...);
7844229Sdavidn};
7944229Sdavidn
8044229Sdavidnextern struct pwf PWF;
8144229Sdavidnextern struct pwf VPWF;
8244229Sdavidn
8344229Sdavidn#define SETPWENT()	PWF._setpwent()
8444229Sdavidn#define ENDPWENT()	PWF._endpwent()
8544229Sdavidn#define GETPWENT()	PWF._getpwent()
8644229Sdavidn#define GETPWUID(uid)	PWF._getpwuid(uid)
8744229Sdavidn#define GETPWNAM(nam)	PWF._getpwnam(nam)
8844229Sdavidn#define PWDB(args)	PWF._pwdb(args)
8944229Sdavidn
9044229Sdavidn#define SETGRENT()	PWF._setgrent()
9144229Sdavidn#define ENDGRENT()	PWF._endgrent()
9244229Sdavidn#define GETGRENT()	PWF._getgrent()
9344229Sdavidn#define GETGRGID(gid)	PWF._getgrgid(gid)
9444229Sdavidn#define GETGRNAM(nam)	PWF._getgrnam(nam)
9544229Sdavidn#define GRDB(args)	PWF._grdb(args)
9644229Sdavidn
9744229Sdavidn#define PWALTDIR()	PWF._altdir
9844229Sdavidn#ifndef _PATH_PWD
9944229Sdavidn#define _PATH_PWD	"/etc"
10044229Sdavidn#endif
10144229Sdavidn#ifndef _GROUP
10244229Sdavidn#define _GROUP		"group"
10344229Sdavidn#endif
10444229Sdavidn#ifndef _PASSWD
10544229Sdavidn#define _PASSWD 	"passwd"
10644229Sdavidn#endif
10744229Sdavidn#ifndef _MASTERPASSWD
10844229Sdavidn#define _MASTERPASSWD	"master.passwd"
10944229Sdavidn#endif
11044229Sdavidn#ifndef _GROUP
11144229Sdavidn#define _GROUP		"group"
11244229Sdavidn#endif
11344229Sdavidn
11420253Sjoerg__BEGIN_DECLS
11520253Sjoergint addpwent __P((struct passwd * pwd));
11620253Sjoergint delpwent __P((struct passwd * pwd));
11720253Sjoergint chgpwent __P((char const * login, struct passwd * pwd));
11820253Sjoergint fmtpwent __P((char *buf, struct passwd * pwd));
11920253Sjoergint fmtpwentry __P((char *buf, struct passwd * pwd, int type));
12020747Sdavidn
12144229Sdavidnint setpwdir __P((const char * dir));
12244229Sdavidnchar * getpwpath __P((char const * file));
12344229Sdavidnint pwdb __P((char *arg, ...));
12444229Sdavidn
12520253Sjoergint addgrent __P((struct group * grp));
12620253Sjoergint delgrent __P((struct group * grp));
12720253Sjoergint chggrent __P((char const * name, struct group * grp));
12820747Sdavidnint fmtgrent __P((char **buf, int * buflen, struct group * grp));
12920747Sdavidnint fmtgrentry __P((char **buf, int * buflen, struct group * grp, int type));
13020253Sjoergint editgroups __P((char *name, char **groups));
13120253Sjoerg
13244229Sdavidnint setgrdir __P((const char * dir));
13344229Sdavidnchar * getgrpath __P((const char *file));
13444229Sdavidnint grdb __P((char *arg, ...));
13520253Sjoerg
13644229Sdavidnvoid vsetpwent __P((void));
13744229Sdavidnvoid vendpwent __P((void));
13844229Sdavidnstruct passwd * vgetpwent __P((void));
13944229Sdavidnstruct passwd * vgetpwuid __P((uid_t uid));
14044229Sdavidnstruct passwd * vgetpwnam __P((const char * nam));
14144229Sdavidnstruct passwd * vgetpwent __P((void));
14244229Sdavidnint             vpwdb __P((char *arg, ...));
14344229Sdavidn
14444229Sdavidnstruct group * vgetgrent __P((void));
14544229Sdavidnstruct group * vgetgrgid __P((gid_t gid));
14644229Sdavidnstruct group * vgetgrnam __P((const char * nam));
14744229Sdavidnstruct group * vgetgrent __P((void));
14844229Sdavidnint	       vgrdb __P((char *arg, ...));
14956000SdavidnRET_SETGRENT   vsetgrent __P((void));
15056000Sdavidnvoid           vendgrent __P((void));
15144229Sdavidn
15220253Sjoergvoid copymkdir __P((char const * dir, char const * skel, mode_t mode, uid_t uid, gid_t gid));
15320253Sjoergvoid rm_r __P((char const * dir, uid_t uid));
15420747Sdavidnint extendline __P((char **buf, int *buflen, int needed));
15520747Sdavidnint extendarray __P((char ***buf, int *buflen, int needed));
15620253Sjoerg__END_DECLS
15720253Sjoerg
15844229Sdavidn#define PWBUFSZ 1024
15944229Sdavidn
16020253Sjoerg#endif				/* !_PWUPD_H */
161