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