summaryrefslogtreecommitdiff
path: root/usr/src/lib/nsswitch/files/common/files_common.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/nsswitch/files/common/files_common.h')
-rw-r--r--usr/src/lib/nsswitch/files/common/files_common.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/usr/src/lib/nsswitch/files/common/files_common.h b/usr/src/lib/nsswitch/files/common/files_common.h
new file mode 100644
index 0000000000..afa56329d5
--- /dev/null
+++ b/usr/src/lib/nsswitch/files/common/files_common.h
@@ -0,0 +1,140 @@
+/*
+ * 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 1995-2003 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 "synonyms.h"
+#include <nss_common.h>
+#include <nss_dbdefs.h>
+#include <stdio.h>
+
+#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 */