X-Git-Url: https://git.cameronkatri.com/pw-darwin.git/blobdiff_plain/f21ffdee49297c31796eb1cf20c5fae902293938..6a151c16645f90b21f171a44661b109f06e9097e:/pw/pwupd.h diff --git a/pw/pwupd.h b/pw/pwupd.h index 470312c..7289065 100644 --- a/pw/pwupd.h +++ b/pw/pwupd.h @@ -1,26 +1,20 @@ /*- - * Copyright (c) 1996 by David L. Nugent . - * All rights reserved. + * Copyright (C) 1996 + * David L. Nugent. 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 as - * the first lines of this file unmodified. + * 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. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by David L. Nugent. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE DAVID L. NUGENT ``AS IS'' AND + * THIS SOFTWARE IS PROVIDED BY DAVID L. NUGENT 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 DAVID L. NUGENT BE LIABLE + * ARE DISCLAIMED. IN NO EVENT SHALL DAVID L. NUGENT 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) @@ -29,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $FreeBSD$ */ #ifndef _PWUPD_H_ @@ -41,6 +35,12 @@ #include +#if defined(__FreeBSD__) +#define RET_SETGRENT int +#else +#define RET_SETGRENT void +#endif + enum updtype { UPD_DELETE = -1, @@ -49,7 +49,7 @@ enum updtype }; __BEGIN_DECLS -int fileupdate __P((char const * fname, mode_t fm, char const * nline, char const * pfx, int pfxlen, int updmode)); +int fileupdate(char const * fname, mode_t fm, char const * nline, char const * pfx, int pfxlen, int updmode); __END_DECLS enum pwdfmttype @@ -60,26 +60,101 @@ enum pwdfmttype PWF_MASTER /* MASTER format with password */ }; -__BEGIN_DECLS -int addpwent __P((struct passwd * pwd)); -int delpwent __P((struct passwd * pwd)); -int chgpwent __P((char const * login, struct passwd * pwd)); -int fmtpwent __P((char *buf, struct passwd * pwd)); -int fmtpwentry __P((char *buf, struct passwd * pwd, int type)); -int addgrent __P((struct group * grp)); -int delgrent __P((struct group * grp)); -int chggrent __P((char const * name, struct group * grp)); -int fmtgrent __P((char *buf, struct group * grp)); -int fmtgrentry __P((char *buf, struct group * grp, int type)); -int editgroups __P((char *name, char **groups)); -__END_DECLS +struct pwf +{ + int _altdir; + void (*_setpwent)(void); + void (*_endpwent)(void); + struct passwd * (*_getpwent)(void); + struct passwd * (*_getpwuid)(uid_t uid); + struct passwd * (*_getpwnam)(const char * nam); + int (*_pwdb)(char *arg, ...); + RET_SETGRENT (*_setgrent)(void); + void (*_endgrent)(void); + struct group * (*_getgrent)(void); + struct group * (*_getgrgid)(gid_t gid); + struct group * (*_getgrnam)(const char * nam); + int (*_grdb)(char *arg, ...); +}; + +extern struct pwf PWF; +extern struct pwf VPWF; + +#define SETPWENT() PWF._setpwent() +#define ENDPWENT() PWF._endpwent() +#define GETPWENT() PWF._getpwent() +#define GETPWUID(uid) PWF._getpwuid(uid) +#define GETPWNAM(nam) PWF._getpwnam(nam) +#define PWDB(args) PWF._pwdb(args) + +#define SETGRENT() PWF._setgrent() +#define ENDGRENT() PWF._endgrent() +#define GETGRENT() PWF._getgrent() +#define GETGRGID(gid) PWF._getgrgid(gid) +#define GETGRNAM(nam) PWF._getgrnam(nam) +#define GRDB(args) PWF._grdb(args) -#define MAXGROUPS 200 -#define MAXPWLINE 1024 +#define PWALTDIR() PWF._altdir +#ifndef _PATH_PWD +#define _PATH_PWD "/etc" +#endif +#ifndef _GROUP +#define _GROUP "group" +#endif +#ifndef _PASSWD +#define _PASSWD "passwd" +#endif +#ifndef _MASTERPASSWD +#define _MASTERPASSWD "master.passwd" +#endif +#ifndef _GROUP +#define _GROUP "group" +#endif __BEGIN_DECLS -void copymkdir __P((char const * dir, char const * skel, mode_t mode, uid_t uid, gid_t gid)); -void rm_r __P((char const * dir, uid_t uid)); +int addpwent(struct passwd * pwd); +int delpwent(struct passwd * pwd); +int chgpwent(char const * login, struct passwd * pwd); +int fmtpwent(char *buf, struct passwd * pwd); +int fmtpwentry(char *buf, struct passwd * pwd, int type); + +int setpwdir(const char * dir); +char * getpwpath(char const * file); +int pwdb(char *arg, ...); + +int addgrent(struct group * grp); +int delgrent(struct group * grp); +int chggrent(char const * name, struct group * grp); +int fmtgrent(char **buf, int * buflen, struct group * grp); +int fmtgrentry(char **buf, int * buflen, struct group * grp, int type); +int editgroups(char *name, char **groups); + +int setgrdir(const char * dir); +char * getgrpath(const char *file); +int grdb(char *arg, ...); + +void vsetpwent(void); +void vendpwent(void); +struct passwd * vgetpwent(void); +struct passwd * vgetpwuid(uid_t uid); +struct passwd * vgetpwnam(const char * nam); +struct passwd * vgetpwent(void); +int vpwdb(char *arg, ...); + +struct group * vgetgrent(void); +struct group * vgetgrgid(gid_t gid); +struct group * vgetgrnam(const char * nam); +struct group * vgetgrent(void); +int vgrdb(char *arg, ...); +RET_SETGRENT vsetgrent(void); +void vendgrent(void); + +void copymkdir(char const * dir, char const * skel, mode_t mode, uid_t uid, gid_t gid); +void rm_r(char const * dir, uid_t uid); +int extendline(char **buf, int *buflen, int needed); +int extendarray(char ***buf, int *buflen, int needed); __END_DECLS +#define PWBUFSZ 1024 + #endif /* !_PWUPD_H */