1/*
2   Unix SMB/CIFS implementation.
3
4   Donated by HP to enable Winbindd to build on HPUX 11.x.
5   Copyright (C) Jeremy Allison 2002.
6
7   This library is free software; you can redistribute it and/or
8   modify it under the terms of the GNU Lesser General Public
9   License as published by the Free Software Foundation; either
10   version 3 of the License, or (at your option) any later version.
11
12   This library is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15   Library General Public License for more details.
16
17   You should have received a copy of the GNU Lesser General Public
18   License along with this library; if not, see <http://www.gnu.org/licenses/>.
19*/
20
21#ifndef _WINBIND_NSS_HPUX_H
22#define _WINBIND_NSS_HPUX_H
23
24#include <nsswitch.h>
25
26#define NSS_STATUS_SUCCESS     NSS_SUCCESS
27#define NSS_STATUS_NOTFOUND    NSS_NOTFOUND
28#define NSS_STATUS_UNAVAIL     NSS_UNAVAIL
29#define NSS_STATUS_TRYAGAIN    NSS_TRYAGAIN
30
31#ifdef HAVE_SYNCH_H
32#include <synch.h>
33#endif
34#ifdef HAVE_PTHREAD_H
35#include <pthread.h>
36#endif
37
38typedef enum {
39	NSS_SUCCESS,
40	NSS_NOTFOUND,
41	NSS_UNAVAIL,
42	NSS_TRYAGAIN
43} nss_status_t;
44
45typedef nss_status_t NSS_STATUS;
46
47struct nss_backend;
48
49typedef nss_status_t (*nss_backend_op_t)(struct nss_backend *, void *args);
50
51struct nss_backend {
52	nss_backend_op_t *ops;
53	int n_ops;
54};
55typedef struct nss_backend nss_backend_t;
56typedef int nss_dbop_t;
57
58#include <errno.h>
59#include <netdb.h>
60#include <limits.h>
61
62#ifndef NSS_INCLUDE_UNSAFE
63#define NSS_INCLUDE_UNSAFE      1       /* Build old, MT-unsafe interfaces, */
64#endif  /* NSS_INCLUDE_UNSAFE */
65
66enum nss_netgr_argn {
67	NSS_NETGR_MACHINE,
68	NSS_NETGR_USER,
69	NSS_NETGR_DOMAIN,
70	NSS_NETGR_N
71};
72
73enum nss_netgr_status {
74	NSS_NETGR_FOUND,
75	NSS_NETGR_NO,
76	NSS_NETGR_NOMEM
77};
78
79typedef unsigned nss_innetgr_argc;
80typedef char **nss_innetgr_argv;
81
82struct nss_innetgr_1arg {
83	nss_innetgr_argc argc;
84	nss_innetgr_argv argv;
85};
86
87typedef struct {
88	void *result;        /* "result" parameter to getXbyY_r() */
89	char *buffer;        /* "buffer"     "             "      */
90	int buflen;         /* "buflen"     "             "      */
91} nss_XbyY_buf_t;
92
93extern nss_XbyY_buf_t *_nss_XbyY_buf_alloc(int struct_size, int buffer_size);
94extern void _nss_XbyY_buf_free(nss_XbyY_buf_t *);
95
96union nss_XbyY_key {
97	uid_t uid;
98	gid_t gid;
99	const char *name;
100	int number;
101	struct {
102		long net;
103		int type;
104	} netaddr;
105	struct {
106		const char *addr;
107		int len;
108		int type;
109	} hostaddr;
110	struct {
111		union {
112			const char *name;
113			int port;
114		} serv;
115		const char *proto;
116	} serv;
117	void *ether;
118};
119
120typedef struct nss_XbyY_args {
121	nss_XbyY_buf_t  buf;
122	int stayopen;
123	/*
124	 * Support for setXXXent(stayopen)
125	 * Used only in hosts, protocols,
126	 * networks, rpc, and services.
127	 */
128	int (*str2ent)(const char *instr, int instr_len, void *ent, char *buffer, int buflen);
129	union nss_XbyY_key key;
130
131	void *returnval;
132	int erange;
133	int h_errno;
134	nss_status_t status;
135} nss_XbyY_args_t;
136
137#endif /* _WINBIND_NSS_HPUX_H */
138