1*ce099b40Smartin /* $NetBSD: gr_private.h,v 1.2 2008/04/28 20:22:59 martin Exp $ */ 2337d8d73Slukem 3337d8d73Slukem /*- 4337d8d73Slukem * Copyright (c) 2004-2005 The NetBSD Foundation, Inc. 5337d8d73Slukem * All rights reserved. 6337d8d73Slukem * 7337d8d73Slukem * This code is derived from software contributed to The NetBSD Foundation 8337d8d73Slukem * by Luke Mewburn. 9337d8d73Slukem * 10337d8d73Slukem * Redistribution and use in source and binary forms, with or without 11337d8d73Slukem * modification, are permitted provided that the following conditions 12337d8d73Slukem * are met: 13337d8d73Slukem * 1. Redistributions of source code must retain the above copyright 14337d8d73Slukem * notice, this list of conditions and the following disclaimer. 15337d8d73Slukem * 2. Redistributions in binary form must reproduce the above copyright 16337d8d73Slukem * notice, this list of conditions and the following disclaimer in the 17337d8d73Slukem * documentation and/or other materials provided with the distribution. 18337d8d73Slukem * 19337d8d73Slukem * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20337d8d73Slukem * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21337d8d73Slukem * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22337d8d73Slukem * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23337d8d73Slukem * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24337d8d73Slukem * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25337d8d73Slukem * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26337d8d73Slukem * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27337d8d73Slukem * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28337d8d73Slukem * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29337d8d73Slukem * POSSIBILITY OF SUCH DAMAGE. 30337d8d73Slukem */ 31337d8d73Slukem 32337d8d73Slukem /* 33337d8d73Slukem * Structures and functions used by various group(5) public functions 34337d8d73Slukem * and their back-end implementations. 35337d8d73Slukem * These are subject to change without notice and should not be used 36337d8d73Slukem * outside of libc (even by third-party nss_*.so modules implementing 37337d8d73Slukem * group(5) back-ends). 38337d8d73Slukem */ 39337d8d73Slukem 40337d8d73Slukem #define _GROUP_COMPAT /* "group" defaults to compat, so always provide it */ 41337d8d73Slukem 42337d8d73Slukem 43337d8d73Slukem /* 44337d8d73Slukem * mutex to serialize the public group(5) functions use of the 45337d8d73Slukem * back-end implementations, which may not be reentrant. 46337d8d73Slukem */ 47337d8d73Slukem extern mutex_t __grmutex; 48337d8d73Slukem 49337d8d73Slukem /* 50337d8d73Slukem * files methods 51337d8d73Slukem */ 52337d8d73Slukem struct __grstate_files { /* state shared between files methods */ 53337d8d73Slukem int stayopen; /* see getgroupent(3) */ 54337d8d73Slukem FILE *fp; /* groups file handle */ 55337d8d73Slukem }; 56337d8d73Slukem 57337d8d73Slukem extern int __grstart_files(struct __grstate_files *); 58337d8d73Slukem extern int __grend_files(struct __grstate_files *); 59337d8d73Slukem extern int __grscan_files(int *, struct group *, char *, size_t, 60337d8d73Slukem struct __grstate_files *, int, const char *, gid_t); 61337d8d73Slukem 62337d8d73Slukem /* 63337d8d73Slukem * dns methods 64337d8d73Slukem */ 65337d8d73Slukem struct __grstate_dns { /* state shared between dns methods */ 66337d8d73Slukem int stayopen; /* see getgroupent(3) */ 67337d8d73Slukem void *context; /* Hesiod context */ 68337d8d73Slukem int num; /* group index, -1 if no more */ 69337d8d73Slukem }; 70337d8d73Slukem 71337d8d73Slukem extern int __grstart_dns(struct __grstate_dns *); 72337d8d73Slukem extern int __grend_dns(struct __grstate_dns *state); 73337d8d73Slukem extern int __grscan_dns(int *, struct group *, char *, size_t, 74337d8d73Slukem struct __grstate_dns *, int, const char *, gid_t); 75337d8d73Slukem 76337d8d73Slukem /* 77337d8d73Slukem * nis methods 78337d8d73Slukem */ 79337d8d73Slukem struct __grstate_nis { /* state shared between nis methods */ 80337d8d73Slukem int stayopen; /* see getgroupent(3) */ 81337d8d73Slukem char *domain; /* NIS domain */ 82337d8d73Slukem int done; /* non-zero if search exhausted */ 83337d8d73Slukem char *current; /* current first/next match */ 84337d8d73Slukem int currentlen; /* length of _nis_current */ 85337d8d73Slukem }; 86337d8d73Slukem 87337d8d73Slukem extern int __grstart_nis(struct __grstate_nis *); 88337d8d73Slukem extern int __grend_nis(struct __grstate_nis *); 89337d8d73Slukem extern int __grscan_nis(int *, struct group *, char *, size_t, 90337d8d73Slukem struct __grstate_nis *, int, const char *, gid_t); 91337d8d73Slukem 92337d8d73Slukem /* 93337d8d73Slukem * compat methods 94337d8d73Slukem */ 95337d8d73Slukem struct __grstate_compat { /* state shared between compat methods */ 96337d8d73Slukem int stayopen; /* see getgroupent(3) */ 97337d8d73Slukem FILE *fp; /* file handle */ 98337d8d73Slukem /* 99337d8d73Slukem * XXX: convert name to a separate compatstate enum and grow name as necessary 100337d8d73Slukem * instead of using strdup & free for each + line 101337d8d73Slukem */ 102337d8d73Slukem char *name; /* NULL if reading file, */ 103337d8d73Slukem /* "" if compat "+", */ 104337d8d73Slukem /* name if compat "+name" */ 105337d8d73Slukem }; 106337d8d73Slukem 107337d8d73Slukem extern int __grbad_compat(void *nsrv, void *nscb, va_list ap); 108337d8d73Slukem extern int __grstart_compat(struct __grstate_compat *); 109337d8d73Slukem extern int __grend_compat(struct __grstate_compat *); 110337d8d73Slukem extern int __grscan_compat(int *, struct group *, char *, size_t, 111337d8d73Slukem struct __grstate_compat *, int, const char *, gid_t, 112337d8d73Slukem int (*)(void *, struct group **), void *); 113