files_common.h revision 2830:5228d1267a01
1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22/* 23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27/* 28 * Common code and structures used by name-service-switch "files" backends. 29 */ 30 31#ifndef _FILES_COMMON_H 32#define _FILES_COMMON_H 33 34#pragma ident "%Z%%M% %I% %E% SMI" 35 36#include "c_synonyms.h" 37#include <nss_common.h> 38#include <nss_dbdefs.h> 39#include <stdio.h> 40 41#ifdef __cplusplus 42extern "C" { 43#endif 44 45typedef struct files_backend *files_backend_ptr_t; 46typedef nss_status_t (*files_backend_op_t)(files_backend_ptr_t, void *); 47 48typedef uint_t (*files_hash_func)(nss_XbyY_args_t *, int, const char *, int); 49 50typedef struct files_hashent { 51 struct files_hashent *h_first; 52 struct files_hashent *h_next; 53 uint_t h_hash; 54} files_hashent_t; 55 56typedef struct { 57 char *l_start; 58 int l_len; 59} files_linetab_t; 60 61typedef struct { 62 mutex_t fh_lock; 63 int fh_resultsize; 64 int fh_bufsize; 65 int fh_nhtab; 66 files_hash_func *fh_hash_func; 67 int fh_refcnt; 68 int fh_size; 69 timestruc_t fh_mtime; 70 char *fh_file_start; 71 char *fh_file_end; 72 files_linetab_t *fh_line; 73 files_hashent_t *fh_table; 74} files_hash_t; 75 76struct files_backend { 77 files_backend_op_t *ops; 78 int n_ops; 79 const char *filename; 80 FILE *f; 81 int minbuf; 82 char *buf; 83 files_hash_t *hashinfo; 84}; 85 86/* 87 * Iterator function for _nss_files_do_all(), which probably calls yp_all(). 88 * NSS_NOTFOUND means "keep enumerating", NSS_SUCCESS means"return now", 89 * other values don't make much sense. In other words we're abusing 90 * (overloading) the meaning of nss_status_t, but hey... 91 * _nss_files_XY_all() is a wrapper around _nss_files_do_all() that does the 92 * generic work for nss_XbyY_args_t backends (calls cstr2ent etc). 93 */ 94typedef nss_status_t (*files_do_all_func_t)(const char *, int, void *args); 95typedef int (*files_XY_check_func)(nss_XbyY_args_t *, 96 const char *, int); 97 98#if defined(__STDC__) 99extern nss_backend_t *_nss_files_constr(files_backend_op_t *ops, 100 int n_ops, 101 const char *filename, 102 int min_bufsize, 103 files_hash_t *fhp); 104extern nss_status_t _nss_files_destr(files_backend_ptr_t, void *dummy); 105extern nss_status_t _nss_files_setent(files_backend_ptr_t, void *dummy); 106extern nss_status_t _nss_files_endent(files_backend_ptr_t, void *dummy); 107extern nss_status_t _nss_files_getent_rigid(files_backend_ptr_t, void *); 108extern nss_status_t _nss_files_getent_netdb(files_backend_ptr_t, void *); 109extern nss_status_t _nss_files_do_all(files_backend_ptr_t, 110 void *func_priv, 111 const char *filter, 112 files_do_all_func_t func); 113extern nss_status_t _nss_files_XY_all(files_backend_ptr_t be, 114 nss_XbyY_args_t *args, 115 int netdb, 116 const char *filter, 117 files_XY_check_func check); 118extern nss_status_t _nss_files_XY_hash(files_backend_ptr_t be, 119 nss_XbyY_args_t *args, 120 int netdb, 121 files_hash_t *fhp, 122 int hashop, 123 files_XY_check_func check); 124int _nss_files_read_line(FILE *f, char *buffer, int buflen); 125#else 126extern nss_backend_t *_nss_files_constr(); 127extern nss_status_t _nss_files_destr(); 128extern nss_status_t _nss_files_setent(); 129extern nss_status_t _nss_files_endent(); 130extern nss_status_t _nss_files_getent_rigid(); 131extern nss_status_t _nss_files_getent_netdb(); 132extern nss_status_t _nss_files_do_all(); 133extern nss_status_t _nss_files_XY_all(); 134extern nss_status_t _nss_files_XY_hash(); 135#endif 136 137int _nss_files_check_name_aliases(nss_XbyY_args_t *, const char *, int); 138int _nss_files_check_name_colon(nss_XbyY_args_t *, const char *, int); 139 140#ifdef __cplusplus 141} 142#endif 143 144#endif /* _FILES_COMMON_H */ 145