/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* * Common code and structures used by name-service-switch "files" backends. */ #ifndef _FILES_COMMON_H #define _FILES_COMMON_H #pragma ident "%Z%%M% %I% %E% SMI" #include "c_synonyms.h" #include #include #include #include "../../../libnsl/include/nsl_stdio_prv.h" #ifdef __cplusplus extern "C" { #endif typedef struct files_backend *files_backend_ptr_t; typedef nss_status_t (*files_backend_op_t)(files_backend_ptr_t, void *); typedef u_int (*files_hash_func)(nss_XbyY_args_t *, int); typedef struct files_hashent { struct files_hashent *h_first; struct files_hashent *h_next; u_int h_hash; } files_hashent_t; typedef struct { char *l_start; int l_len; } files_linetab_t; typedef struct { mutex_t fh_lock; int fh_resultsize; int fh_bufsize; int fh_nhtab; files_hash_func *fh_hash_func; int fh_refcnt; int fh_size; timestruc_t fh_mtime; char *fh_file_start; char *fh_file_end; files_linetab_t *fh_line; files_hashent_t *fh_table; } files_hash_t; struct files_backend { files_backend_op_t *ops; int n_ops; const char *filename; __NSL_FILE *f; int minbuf; char *buf; files_hash_t *hashinfo; }; /* * Iterator function for _nss_files_do_all(), which probably calls yp_all(). * NSS_NOTFOUND means "keep enumerating", NSS_SUCCESS means"return now", * other values don't make much sense. In other words we're abusing * (overloading) the meaning of nss_status_t, but hey... * _nss_files_XY_all() is a wrapper around _nss_files_do_all() that does the * generic work for nss_XbyY_args_t backends (calls cstr2ent etc). */ typedef nss_status_t (*files_do_all_func_t)(const char *, int, void *args); typedef int (*files_XY_check_func)(nss_XbyY_args_t *); #if defined(__STDC__) extern nss_backend_t *_nss_files_constr(files_backend_op_t *ops, int n_ops, const char *filename, int min_bufsize, files_hash_t *fhp); extern nss_status_t _nss_files_destr (files_backend_ptr_t, void *dummy); extern nss_status_t _nss_files_setent(files_backend_ptr_t, void *dummy); extern nss_status_t _nss_files_endent(files_backend_ptr_t, void *dummy); extern nss_status_t _nss_files_getent_rigid(files_backend_ptr_t, void *); extern nss_status_t _nss_files_getent_netdb(files_backend_ptr_t, void *); extern nss_status_t _nss_files_do_all(files_backend_ptr_t, void *func_priv, const char *filter, files_do_all_func_t func); extern nss_status_t _nss_files_XY_all(files_backend_ptr_t be, nss_XbyY_args_t *args, int netdb, const char *filter, files_XY_check_func check); extern nss_status_t _nss_files_XY_hash(files_backend_ptr_t be, nss_XbyY_args_t *args, int netdb, files_hash_t *fhp, int hashop, files_XY_check_func check); int _nss_files_read_line(__NSL_FILE *f, char *buffer, int buflen); #else extern nss_backend_t *_nss_files_constr(); extern nss_status_t _nss_files_destr (); extern nss_status_t _nss_files_setent(); extern nss_status_t _nss_files_endent(); extern nss_status_t _nss_files_getent_rigid(); extern nss_status_t _nss_files_getent_netdb(); extern nss_status_t _nss_files_do_all(); extern nss_status_t _nss_files_XY_all(); extern nss_status_t _nss_files_XY_hash(); #endif #ifdef __cplusplus } #endif #endif /* _FILES_COMMON_H */