xref: /titanic_44/usr/src/lib/libnsl/common/llib-lnsl (revision 4eaa471005973e11a6110b69fe990530b3b95a38)
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 2009 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27
28/* LINTLIBRARY */
29/* PROTOLIB1 */
30
31#include <sys/types.h>
32#include <thread.h>
33#include <synch.h>
34#include <fcntl.h>
35#include <sys/des.h>
36#include <des/softdes.h>
37#include <des/desdata.h>
38#include <rpc/rpc.h>
39#include <rpc/key_prot.h>
40#include <rpc/des_crypt.h>
41#include <rpc/pmap_prot.h>
42#include <sys/ioctl.h>
43#include <netdir.h>
44#include <nss_netdir.h>
45#include <nss_dbdefs.h>
46#include <sac.h>
47#include <netconfig.h>
48#include <ndbm.h>
49#include <rpcsvc/yp_prot.h>
50#include <rpcsvc/ypclnt.h>
51#include <rpcsvc/yppasswd.h>
52#include <rpcsvc/ypupd.h>
53#include <rpcsvc/nis.h>
54#include <rpcsvc/nis_callback.h>
55#include <rpcsvc/nislib.h>
56#include <rpcsvc/nispasswd.h>
57#include <sys/stream.h>
58#include <sys/stropts.h>
59#include <sys/tihdr.h>
60#include <sys/timod.h>
61#include <tiuser.h>
62
63
64/*
65 * Declare t_errno, even though this file is compiled '_REENTRANT'.  This
66 * way t_errno is defined in the lint library, which is used for programs
67 * compiled with _REENTRANT and those compiled without it.
68 */
69#ifdef t_errno
70#undef t_errno
71#endif
72extern int t_errno;
73
74/*
75 * usr/src/lib/libnsl/common routines
76 */
77
78/* common.c */
79
80/*
81 * usr/src/lib/libnsl/des routines
82 */
83
84/* des_crypt.c */
85int cbc_crypt(char *key, char *buf, size_t len, uint_t mode, char *ivec);
86int ecb_crypt(char *key, char *buf, size_t len, uint_t mode);
87
88/* des_soft.c */
89void des_setparity(char *p);
90int __des_crypt(char *buf, unsigned len, struct desparams *desp);
91
92/* intl_crypt.c */
93
94/* intl_soft.c */
95int _des_crypt(char *buf, unsigned len, struct desparams *desp);
96
97/*
98 * usr/src/lib/libnsl/dial routines
99 */
100
101/* callers.c */
102
103/* conn.c */
104
105/* dial.c */
106void undial(int fd);
107
108/* getargs.c */
109
110/* interface.c */
111
112/* line.c */
113
114/* stoa.c */
115
116/* strecpy.c */
117
118/* strsave.c */
119
120/* sysfiles.c */
121
122/* ulockf.c */
123
124/* uucpdefs.c */
125
126/*
127 * usr/src/lib/libnsl/key routines
128 */
129
130/* gen_dhkeys.c */
131void __gen_dhkeys(char *public, char *secret, char *pass);
132
133/* publickey.c */
134int getpublickey(const char *netname, char *pkey);
135int __getpublickey_cached(char *netname, char *pkey, int *from_cache);
136void __getpublickey_flush(const char *netname);
137int getsecretkey(const char *netname, char *skey, const char *passwd);
138
139/* xcrypt.c */
140int xencrypt(char *secret, char *passwd);
141int xdecrypt(char *secret, char *passwd);
142int passwd2des(char *pw, char *key);
143
144/*
145 * usr/src/lib/libnsl/netdir routines
146 */
147
148/* netdir.c */
149int *__nderror(void);
150int netdir_getbyname(struct netconfig *tp, struct nd_hostserv *serv,
151				struct nd_addrlist **addrs);
152int netdir_getbyaddr(struct netconfig *tp, struct nd_hostservlist **serv,
153				struct netbuf *addr);
154int __netdir_getbyaddr_nosrv(struct netconfig *tp,
155				struct nd_hostservlist **serv,
156				struct netbuf *addr);
157int netdir_options(struct netconfig *tp, int option, int fd, char *par);
158struct netbuf *uaddr2taddr(struct netconfig *tp, char *addr);
159char *taddr2uaddr(struct netconfig *tp, struct netbuf *addr);
160void netdir_free(void *ptr, int type);
161char *netdir_sperror(void);
162void netdir_perror(char *s);
163
164/*
165 * usr/src/lib/libnsl/netselect routines
166 */
167
168/* netselect.c */
169void *setnetconfig(void);
170int endnetconfig(void *vdata);
171struct netconfig *getnetconfig(void *vdata);
172struct netconfig *getnetconfigent(const char *netid);
173void freenetconfigent(struct netconfig *netp);
174void *setnetpath(void);
175int endnetpath(void *vdata);
176struct netconfig *getnetpath(void *vdata);
177char *nc_sperror(void);
178void nc_perror(const char *string);
179
180/*
181 * usr/src/lib/libnsl/nis/cache routines
182 */
183
184/* cache.cc */
185
186/* cache_api.cc */
187#ifdef notdef
188/* XXX lacking appropriate public header files */
189nis_error __nis_CacheInit(NisCache **cache);
190#endif
191nis_error __nis_CacheBind(char *dname, directory_obj *dobj);
192bool_t __nis_CacheRemoveEntry(directory_obj *dobj);
193nis_error __nis_CacheSearch(char *dname, directory_obj *dobj);
194void __nis_CacheRestart(void);
195void __nis_CachePrint(void);
196bool_t __nis_CacheAddEntry(fd_result *, directory_obj *);
197uint32_t __nis_CacheLocalLoadPref(void);
198nis_error __nis_CacheLocalInit(uint32_t *exp_time);
199nis_error __nis_CacheMgrInit(void);
200void __nis_CacheMgrCleanup(void);
201nis_error __nis_CacheMgrBindReplica(char *dname);
202nis_error __nis_CacheMgrBindMaster(char *dname);
203nis_error __nis_CacheMgrBindServer(nis_server *srv, int nsrv);
204int __nis_CacheMgrRefreshBinding(nis_bound_directory *binding);
205int __nis_CacheMgrRefreshAddress(nis_bound_endpoint *bep);
206int __nis_CacheMgrRefreshCallback(nis_bound_endpoint *bep);
207int __nis_CacheMgrUpdateUaddr(char *uaddr);
208void __nis_CacheMgrMarkUp(void);
209uint32_t __nis_CacheMgrTimers(void);
210uint32_t __nis_CacheMgrRefreshCache(void);
211uint32_t __nis_serverRefreshCache(void);
212
213/* client_cache.cc */
214
215/* cold_start.cc */
216bool_t writeColdStartFile(directory_obj *dobj);
217
218/* local_cache.cc */
219
220/* mapped_cache.cc */
221
222/* mgr_cache.cc */
223
224/* nis_cache_clnt.cc */
225
226/* nis_cache_xdr.cc */
227
228/*
229 * usr/src/lib/libnsl/nis/gen routines
230 */
231
232/* nis_callback.c */
233int __nis_destroy_callback(void);
234nis_server *__nis_init_callback(CLIENT *svc_clnt, int (*cbfunc)(),
235								void *userdata);
236int __nis_run_callback(netobj *srvid, rpcproc_t srvproc,
237				struct timeval *timeout, CLIENT *myserv);
238
239/* nis_cast.c */
240enum clnt_stat __nis_cast_proc(nis_bound_directory *binding, int base,
241				int nbep, rpcproc_t procnum,
242				xdrproc_t xdr_inproc, void *in,
243				xdrproc_t xdr_outproc, void *out,
244				int *fastest, int mytimeout);
245
246/* nis_cback_xdr.c */
247bool_t xdr_obj_p(XDR *xdrs, obj_p *objp);
248bool_t xdr_cback_data(XDR *xdrs, cback_data *objp);
249
250/* nis_clnt.c */
251
252/* nis_groups.c */
253typedef nis_result *(*nis_lookup_func)(nis_name, u_int);
254int __nis_group_cache_stats(int *grpcachecall, int *grpcachehits,
255					int *grpcachemisses);
256bool_t nis_ismember(nis_name princp, nis_name group);
257bool_t __do_ismember(nis_name princp, nis_object *obj, nis_lookup_func lookup);
258void nis_print_group_entry(nis_name group);
259void nis_flushgroups(void);
260void __nis_flush_group_exp_name(nis_name groupname);
261nis_name __nis_map_group_r(const nis_name name, char *buf, size_t bufsize);
262nis_error nis_addmember(nis_name princp, nis_name group);
263nis_error nis_removemember(nis_name princp, nis_name group);
264nis_error nis_verifygroup(nis_name group);
265nis_error __nis_creategroup_obj(nis_name name, uint_t flags, nis_object *obj);
266nis_error nis_creategroup(nis_name name, uint_t flags);
267nis_error nis_destroygroup(nis_name name);
268
269/* nis_hash.c */
270int nis_in_table(nis_name name, NIS_HASH_TABLE *table, int *key);
271int nis_insert_item(NIS_HASH_ITEM *item, NIS_HASH_TABLE *table);
272NIS_HASH_ITEM *nis_find_item(nis_name name, NIS_HASH_TABLE *table);
273NIS_HASH_ITEM *nis_pop_item(NIS_HASH_TABLE *table);
274NIS_HASH_ITEM *nis_remove_item(nis_name name, NIS_HASH_TABLE *table);
275void nis_insert_name(nis_name name, NIS_HASH_TABLE *table);
276void nis_remove_name(nis_name name, NIS_HASH_TABLE *table);
277
278/* nis_lookup.c */
279nis_result *__nis_remote_lookup(ib_request *req, u_int flags, int list_op,
280				void *cbdata, int (*cback)());
281nis_result *__nis_core_lookup(ib_request *req, u_int flags, int list_op,
282				void *cbdata, int (*cback)());
283fd_result *__nis_finddirectory_remote(nis_bound_directory **binding,
284				char *dname);
285fd_result *__nis_finddirectory(nis_bound_directory **binding, char *dname);
286fd_result *nis_finddirectory(directory_obj *dobj, nis_name name);
287
288/* nis_misc.c */
289void __nis_pingproc(nis_server *srv, nis_name name, uint32_t mtime);
290void nis_ping(nis_name name, uint32_t mtime, nis_object *obj);
291log_result *nis_dumplog(nis_server *host, nis_name name, uint32_t dtime);
292log_result *nis_dump(nis_server *host, nis_name name, int (*cback)());
293void nis_free_binding(nis_bound_directory *binding);
294void __nis_path_free(char **names, int len);
295nis_error __nis_path(char *from, char *to, int *path_length, char ***namesp);
296int __nis_host_is_server(nis_server *, int);
297void __nis_print_result(nis_result *);
298struct netconfig *__nis_get_netconfig(endpoint *);
299nis_server *__nis_server_dup(nis_server *, nis_server *);
300
301/* nis_misc_proc.c */
302void __nis_auth2princ(char *name, int flavor, caddr_t auth, bool_t refresh,
303			int verbose);
304bool_t __nis_ck_perms(u_int right, u_int mask, nis_object *obj,
305				nis_name pr, int level);
306bool_t __nis_ismaster(char *host, char *domain);
307bool_t __nis_isadmin(char *princ, char *table, char *domain);
308nis_server * __nis_host2nis_server(char *host, bool_t addpubkey, int *errcode);
309
310/* nis_names.c */
311int __nis_parse_path(char *path, nis_name *list, int max);
312nis_name *nis_getnames(nis_name name);
313void nis_freenames(nis_name *namelist);
314
315/* nis_perror.c */
316char *nis_sperrno(nis_error stat);
317void nis_perror(nis_error stat, char *str);
318char *nis_sperror_r(nis_error stat, char *str, char buf[], int len);
319char *nis_sperror(nis_error stat, char *str);
320void nis_lerror(nis_error stat, char *str);
321
322/* nis_rpc.c */
323typedef struct {
324	nis_server *srv;
325	int nsrv;
326	char *name;
327	int parent_first;
328	u_int flags;
329	struct timeval timeout;
330	nis_error niserror;
331	uint32_t aticks;
332	int state;
333	nis_bound_directory *binding;
334	int base;
335	int end;
336	int count;
337	int start;
338	int cur;
339	int bound_to;
340	int refresh_count;
341} nis_call_state;
342
343void __nis_reset_state(void);
344void __nis_bad_auth_server(CLIENT *c);
345void __nis_release_server(nis_call_state *state, CLIENT *c,
346					enum clnt_stat status);
347CLIENT *__nis_get_server(nis_call_state *state);
348
349/* nis_subr.c */
350int __start_clock(int clk);
351unsigned int __stop_clock(int clk);
352name_pos nis_dir_cmp(nis_name n1, nis_name n2);
353nis_name nis_local_group(void);
354nis_name nis_domain_of(char *s);
355nis_name nis_leaf_of_r(const nis_name  s, char *buf, size_t bufsize);
356nis_name nis_leaf_of(char *s);
357nis_name nis_name_of(char *s);
358nis_name nis_local_directory(void);
359int __nis_principal(char *principal_name, uid_t uid, char *directory);
360nis_name nis_local_principal(void);
361nis_name nis_local_host(void);
362void nis_destroy_object(nis_object *obj);
363nis_object *nis_clone_object(nis_object *obj, nis_object *dest);
364char **__break_name(nis_name name, int *levels);
365int __name_distance(char **targ, char **test);
366nis_result *nis_make_error(nis_error err, uint32_t aticks, uint32_t cticks,
367				uint32_t dticks, uint32_t zticks);
368nis_attr *__cvt2attr(int *na, char **attrs);
369void nis_free_request(ib_request *req);
370nis_error nis_get_request(nis_name name, nis_object *obj, netobj *cookie,
371				ib_request *reqreq);
372nis_object *nis_read_obj(char *f);
373int nis_write_obj(char *f, nis_object *o);
374CLIENT *nis_make_rpchandle(nis_server *srv, int cback, rpcprog_t prog,
375			rpcvers_t ver, u_int flags, int inbuf, int outbuf);
376void *nis_get_static_storage(struct nis_sdata *bs, u_int el, u_int nel);
377char *nis_old_data(char *s);
378char *nis_data(char *s);
379nis_name __nis_local_root(void);
380
381/* nis_tags.c */
382void nis_freeservlist(nis_server **servers);
383nis_server **nis_getservlist(nis_name name);
384nis_error nis_stats(nis_server *srv, nis_tag *tags, int ntags,
385							nis_tag **result);
386nis_error nis_servstate(nis_server *srv, nis_tag *tags, int ntags,
387							nis_tag **result);
388void nis_freetags(nis_tag *tags, int ntags);
389
390/* nis_xdr.c */
391bool_t xdr_nis_attr(XDR *xdrs, nis_attr *objp);
392bool_t xdr_nis_name(XDR *xdrs, nis_name *objp);
393bool_t xdr_endpoint(XDR *xdrs, endpoint *objp);
394bool_t xdr_nis_server(XDR *xdrs, nis_server *objp);
395bool_t xdr_directory_obj(XDR *xdrs, directory_obj *objp);
396bool_t xdr_entry_obj(XDR *xdrs, entry_obj *objp);
397bool_t xdr_table_obj(XDR *xdrs, table_obj *objp);
398bool_t xdr_objdata(XDR *xdrs, objdata *objp);
399bool_t xdr_nis_oid(XDR *xdrs, nis_oid *objp);
400bool_t xdr_nis_object(XDR *xdrs, nis_object *objp);
401bool_t xdr_nis_object(XDR *xdrs, nis_object *objp);
402bool_t xdr_nis_error(XDR *xdrs, nis_error *objp);
403bool_t xdr_nis_result(XDR *xdrs, nis_result *objp);
404bool_t xdr_ns_request(XDR *xdrs, ns_request *objp);
405bool_t xdr_ib_request(XDR *xdrs, ib_request *objp);
406bool_t xdr_ping_args(XDR *xdrs, ping_args *objp);
407bool_t xdr_log_entry_t(XDR *xdrs, log_entry_t *objp);
408bool_t xdr_log_entry(XDR *xdrs, log_entry *objp);
409bool_t xdr_log_result(XDR *xdrs, log_result *objp);
410bool_t xdr_cp_result(XDR *xdrs, cp_result *objp);
411bool_t xdr_nis_tag(XDR *xdrs, nis_tag *objp);
412bool_t xdr_nis_taglist(XDR *xdrs, nis_taglist *objp);
413bool_t xdr_dump_args(XDR *xdrs, dump_args *objp);
414bool_t xdr_fd_args(XDR *xdrs, fd_args *objp);
415bool_t xdr_fd_result(XDR *xdrs, fd_result *objp);
416bool_t xdr_nis_bound_endpoint(XDR *xdrs, nis_bound_endpoint *objp);
417bool_t xdr_nis_bound_directory(XDR *xdrs, nis_bound_directory *objp);
418bool_t xdr_nis_active_endpoint(XDR *xdrs, nis_active_endpoint *objp);
419
420/* nislib.c */
421void nis_freeresult(nis_result *res);
422void __nis_freelogresult(log_result *lres);
423nis_error nis_bind_dir(char *dname, int parent_first,
424				nis_bound_directory **binding, u_int flags);
425nis_result *nis_lookup(nis_name name, uint_t flags);
426nis_result *nis_list(nis_name name, uint_t flags, int (*cback)(),
427				void *cbdata);
428nis_result *nis_add(nis_name name, nis_object *obj);
429nis_result *nis_remove(nis_name name, nis_object *obj);
430nis_result *nis_modify(nis_name name, nis_object *obj);
431nis_result *nis_add_entry(nis_name name, nis_object *obj, uint_t flags);
432nis_result *nis_remove_entry(nis_name name, nis_object *obj, uint_t flags);
433nis_result *nis_modify_entry(nis_name name, nis_object *obj, uint_t flags);
434nis_result *nis_first_entry(nis_name table);
435nis_result *nis_next_entry(nis_name table, netobj *cookie);
436nis_result *nis_checkpoint(nis_name name);
437nis_error nis_mkdir(nis_name name, nis_server *srv);
438nis_error nis_rmdir(nis_name name, nis_server *srv);
439nis_error __nis_send_msg(nis_server *srv, int proc, xdrproc_t out, char *msg);
440nis_result *__nis_list_localcb(nis_name name, u_int flags,
441				int (*cback)(), void *cbdata);
442
443/* npd_lib.c */
444bool_t __npd_ecb_crypt(uint32_t *val1, uint32_t *val2, des_block *buf,
445			uint_t bufsize, uint_t mode, des_block *deskey);
446bool_t __npd_cbc_crypt(uint32_t *val, char *str, uint_t strsize,
447			npd_newpass *buf, uint_t bufsize, uint_t mode,
448			des_block *deskey);
449bool_t __npd2_cbc_crypt(uint32_t *val, char *str, uint_t strsize,
450			npd_newpass2 *buf, uint_t bufsize, uint_t mode,
451			des_block *deskey);
452
453/* print_obj.c */
454void nis_print_rights(u_int r);
455void nis_print_directory(directory_obj *r);
456void nis_print_group(group_obj *g);
457void nis_print_table(table_obj *t);
458void nis_print_link(link_obj *l);
459void nis_print_entry(entry_obj *edata);
460void nis_print_object(nis_object *o);
461
462/* thr_misc.c */
463
464/*
465 * usr/src/lib/libnsl/nsl routines
466 */
467
468/* _conn_util.c */
469
470/* _data2.c */
471
472/* _errlst.c */
473int *__t_errno(void);
474
475/* _utility.c */
476
477/* t_accept.c */
478int t_accept(int, int, struct t_call *);
479
480/* t_alloc.c */
481char *t_alloc(int, int, int);
482
483/* t_bind.c */
484int t_bind(int, struct t_bind *, struct t_bind *);
485
486/* t_close.c */
487int t_close(int);
488
489/* t_connect.c */
490int t_connect(int, struct t_call *, struct t_call *);
491
492/* t_error.c */
493void t_error(const char *);
494
495/* t_free.c */
496int t_free(char *, int);
497
498/* t_getinfo.c */
499int t_getinfo(int, struct t_info *);
500
501/* t_getname.c */
502int t_getname(int, struct netbuf *, int);
503
504/* t_getstate.c */
505int t_getstate(int);
506
507/* t_listen.c */
508int t_listen(int, struct t_call *);
509
510/* t_look.c */
511int t_look(int);
512
513/* t_open.c */
514int t_open(const char *, int, struct t_info *);
515
516/* t_optmgmt.c */
517int t_optmgmt(int, struct t_optmgmt *, struct t_optmgmt *);
518
519/* t_rcv.c */
520int t_rcv(int, char *, unsigned, int *);
521
522/* t_rcvconnect.c */
523int t_rcvconnect(int, struct t_call *);
524
525/* t_rcvdis.c */
526int t_rcvdis(int, struct t_discon *);
527
528/* t_rcvrel.c */
529int t_rcvrel(int);
530
531/* t_rcvudata.c */
532int t_rcvudata(int, struct t_unitdata *, int *);
533
534/* t_rcvuderr.c */
535int t_rcvuderr(int, struct t_uderr *);
536
537/* t_snd.c */
538int t_snd(int, char *, unsigned, int);
539
540/* t_snddis */
541int t_snddis(int, struct t_call *);
542
543/* t_sndrel.c */
544int t_sndrel(int);
545
546/* t_sndudata.c */
547int t_sndudata(int, struct t_unitdata *);
548
549/* t_strerror.c */
550char *t_strerror(int);
551
552/* t_sync.c */
553int t_sync(int);
554
555/* t_unbind.c */
556int t_unbind(int);
557
558/*
559 * struct t_iovec is defined in <xti.h>. But <xti.h> cannot be included
560 * because inclusion of <xti.h> and <tiuser.h> are mututally exclusive
561 * and <tiuser.h> is exposed by the inclusion of <rpc/rpc.h>. Needs to
562 * be seen how to build llib-lnsl.ln from multiple source files to avoid
563 * this problem.
564 */
565struct t_iovec {
566	void	*iov_base;
567	size_t	iov_len;
568};
569
570/* t_sndv.c */
571int t_sndv(int, const struct t_iovec *,  unsigned int, int);
572
573/* t_sndvudata.c */
574int t_sndvudata(int, struct t_unitdata *, struct t_iovec *, unsigned int);
575
576/* t_sndreldata.c */
577int t_sndreldata(int, struct t_discon *);
578
579/* t_rcvv.c */
580int t_rcvv(int, struct t_iovec *, unsigned int, int *);
581
582/* t_rcvvudata.c */
583int t_rcvvudata(int, struct t_unitdata *, struct t_iovec *,
584        unsigned int, int *);
585
586/* t_rcvreldata.c */
587extern int t_rcvreldata(int, struct t_discon *);
588
589/* t_sysconf.c */
590int t_sysconf(int);
591
592/* xti_wrappers.c */
593int _xti_accept(int, int, struct t_call *);
594int _xti_xns5_accept(int, int, struct t_call *);
595char *_xti_alloc(int, int, int);
596int _xti_bind(int, struct t_bind *, struct t_bind *);
597int _xti_close(int);
598int _xti_connect(int, struct t_call *, struct t_call *);
599int _xti_error(char *);
600int _xti_free(char *, int);
601int _xti_getinfo(int, struct t_info *);
602int _xti_getprotaddr(int, struct t_bind *, struct t_bind *);
603int _xti_getstate(int);
604int _xti_listen(int, struct t_call *);
605int _xti_look(int);
606int _xti_open(char *, int, struct t_info *);
607int _xti_optmgmt(int, struct t_optmgmt *, struct t_optmgmt *);
608int _xti_rcv(int, char *, unsigned int, int *);
609int _xti_rcvconnect(int, struct t_call *);
610int _xti_rcvdis(int, struct t_discon *);
611int _xti_rcvrel(int);
612int _xti_rcvreldata(int, struct t_discon *);
613int _xti_rcvudata(int, struct t_unitdata *, int *);
614int _xti_rcvuderr(int, struct t_uderr *);
615int _xti_rcvv(int, struct t_iovec *, unsigned int, int *);
616int _xti_rcvvudata(int, struct t_unitdata *, struct t_iovec *,
617    unsigned int, int *);
618int _xti_snd(int, char *, unsigned int, int);
619int _xti_xns5_snd(int, char *, unsigned int, int);
620int _xti_snddis(int, struct t_call *);
621int _xti_sndrel(int);
622int _xti_sndreldata(int, struct t_discon *);
623int _xti_sndudata(int, struct t_unitdata *);
624int _xti_sndv(int, const struct t_iovec *, unsigned int, int);
625int _xti_sndvudata(int, struct t_unitdata *, struct t_iovec *, unsigned int);
626char *_xti_strerror(int);
627int _xti_sync(int);
628int _xti_sysconf(int);
629int _xti_unbind(int);
630
631/*
632 * usr/src/lib/libnsl/nss routines
633 */
634
635/* gethostby_door.c */
636
637/* gethostbyname_r.c */
638struct hostent *_uncached_gethostbyname_r(const char *nam,
639				struct hostent *result,
640				char *buffer, int buflen, int *h_errnop);
641struct hostent *_uncached_gethostbyaddr_r(const char *addr, int length,
642				int type, struct hostent *result,
643				char *buffer, int buflen, int *h_errnop);
644struct hostent *gethostbyname_r(const char *nam, struct hostent *result,
645				char *buffer, int buflen, int *h_errnop);
646struct hostent *gethostbyaddr_r(const char *addr, int length, int type,
647				struct hostent *result,
648				char *buffer, int buflen, int *h_errnop);
649
650/* gethostent.c */
651struct hostent *gethostbyname(const char *nam);
652struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);
653struct hostent *gethostent(void);
654
655/* gethostent_r.c */
656int sethostent(int stay);
657int endhostent(void);
658struct hostent *gethostent_r(struct hostent *result, char *buffer, int buflen,
659				int *h_errnop);
660
661/* getipnodeby.c */
662void freehostent(struct hostent *hent);
663struct hostent *getipnodebyaddr(const void *src, size_t len, int type,
664				int *error_num);
665struct hostent *getipnodebyname(const char *name, int af, int flags,
666				int *error_num);
667
668/* getrpcent.c */
669struct rpcent *getrpcbyname(const char *nam);
670struct rpcent *getrpcbynumber(const int num);
671struct rpcent *getrpcent(void);
672
673/* getrpcent_r.c */
674struct rpcent *getrpcbyname_r(const char *name, struct rpcent *result,
675				char *buffer, int buflen);
676struct rpcent *getrpcbynumber_r(const int number, struct rpcent *result,
677				char *buffer, int buflen);
678void setrpcent(const int stay);
679void endrpcent(void);
680struct rpcent *getrpcent_r(struct rpcent *result, char *buffer, int buflen);
681
682/* inet_ntop.c */
683const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
684
685/* inet_pton.c */
686int inet_pton(int af, const char *src, void *dst);
687
688/* netdir_inet.c */
689int _get_hostserv_inetnetdir_byname(struct netconfig *nconf,
690				struct nss_netdirbyname_in *args,
691				union nss_netdirbyname_out *res);
692int _get_hostserv_inetnetdir_byaddr(struct netconfig *nconf,
693				struct nss_netdirbyaddr_in *args,
694				union nss_netdirbyaddr_out *res);
695int __nss2herrno(nss_status_t nsstat);
696nss_status_t _herrno2nss(int h_errno);
697struct hostent *_switch_gethostbyname_r(const char *name,
698				struct hostent *result,
699				char *buffer, int buflen, int *h_errnop);
700struct hostent *_switch_gethostbyaddr_r(const char *addr, int len, int type,
701				struct hostent *result,
702				char *buffer, int buflen, int *h_errnop);
703int str2servent(const char *instr, int lenstr, void *ent,
704				char *buffer, int buflen);
705void *__inet_get_local_interfaces(void);
706void __inet_free_local_interfaces(void *p);
707int __inet_address_is_local(void *p, struct in_addr addr);
708int __inet_uaddr_is_local(void *p, struct netconfig *nc, char *uaddr);
709int __inet_address_count(void *p);
710ulong_t __inet_get_addr(void *p, int n);
711char *__inet_get_uaddr(void *p, struct netconfig *nc, int n);
712char *__inet_get_networka(void *p, int n);
713
714/* netdir_inet_sundry.c */
715
716/*
717 * usr/src/lib/libnsl/rpc routines
718 */
719
720/* auth_des.c */
721AUTH *authdes_seccreate(const char *servername, uint_t win,
722			const char *timehost, const des_block *ckey);
723
724/* auth_none.c */
725AUTH *authnone_create(void);
726
727/* auth_sys.c */
728AUTH *authsys_create(const char *machname, uid_t uid, gid_t gid, int len,
729			const gid_t *aup_gids);
730AUTH *authsys_create_default(void);
731
732/* auth_time.c */
733
734/* authdes_prot.c */
735bool_t xdr_authdes_cred(XDR *xdrs, struct authdes_cred *cred);
736bool_t xdr_authdes_verf(XDR *xdrs, struct authdes_verf *verf);
737
738/* authsys_prot.c */
739bool_t xdr_authsys_parms(XDR *xdrs, struct authsys_parms *p);
740bool_t xdr_uid_t(XDR *xdrs, uid_t *ip);
741bool_t xdr_gid_t(XDR *xdrs, gid_t *ip);
742
743/* clnt_bcast.c */
744enum clnt_stat rpc_broadcast_exp(rpcprog_t prog, rpcvers_t vers, rpcproc_t proc,
745		xdrproc_t xargs, caddr_t argsp, xdrproc_t xresults,
746		caddr_t resultsp, resultproc_t eachresult, int inittime,
747		int waittime, const char *netclass);
748enum clnt_stat rpc_broadcast(rpcprog_t prog, rpcvers_t vers, rpcproc_t proc,
749		xdrproc_t xargs, caddr_t argsp, xdrproc_t xresults,
750		caddr_t resultsp, resultproc_t eachresult,
751		const char *netclass);
752
753/* clnt_dg.c */
754CLIENT *clnt_dg_create(int fd, struct netbuf *svcaddr, rpcprog_t program,
755		rpcvers_t version, uint_t sendsz, uint_t recvsz);
756
757/* clnt_door.c */
758CLIENT *clnt_door_create(rpcprog_t program, rpcvers_t version, uint_t sendsz);
759
760/* clnt_generic.c */
761CLIENT *clnt_create_vers(const char *hostname, rpcprog_t prog,
762		rpcvers_t *vers_out, rpcvers_t vers_low,
763		rpcvers_t vers_high, const char *nettype);
764CLIENT *clnt_create_vers_timed(const char *hostname, rpcprog_t prog,
765		rpcvers_t *vers_out, rpcvers_t vers_low,
766		rpcvers_t vers_high, const char *nettype,
767		const struct timeval *tp);
768CLIENT *clnt_create(const char *hostname, rpcprog_t prog, rpcvers_t vers,
769		const char *nettype);
770CLIENT *clnt_create_timed(const char *hostname, rpcprog_t prog, rpcvers_t vers,
771		const char *netclass, const struct timeval *tp);
772CLIENT *clnt_tp_create(const char *hostname, rpcprog_t prog, rpcvers_t vers,
773		const struct netconfig *nconf);
774CLIENT *clnt_tp_create_timed(const char *hostname, rpcprog_t prog,
775		rpcvers_t vers, const struct netconfig *nconf,
776		const struct timeval *tp);
777CLIENT *clnt_tli_create(int fd, const struct netconfig *nconf,
778		struct netbuf *svcaddr, rpcprog_t prog, rpcvers_t vers,
779		uint_t sendsz, uint_t recvsz);
780
781/* clnt_perror.c */
782char *clnt_sperror(const CLIENT *cl, const char *s);
783void clnt_perror(const CLIENT *cl, const char *s);
784void clnt_perrno(enum clnt_stat num);
785char *clnt_spcreateerror(const char *s);
786void clnt_pcreateerror(const char *s);
787const char *clnt_sperrno(const enum clnt_stat stat);
788
789/* clnt_raw.c */
790CLIENT *clnt_raw_create(rpcprog_t prog, rpcvers_t vers);
791
792/* clnt_simple.c */
793enum clnt_stat rpc_call(const char *host, rpcprog_t prognum, rpcvers_t versnum,
794		rpcproc_t procnum, xdrproc_t inproc, const char *in,
795		xdrproc_t outproc, char *out, const char *netclass);
796
797/* clnt_vc.c */
798CLIENT *clnt_vc_create(int fd, struct netbuf *svcaddr, rpcprog_t prog,
799		rpcvers_t vers, uint_t sendsz, uint_t recvsz);
800
801/* getdname.c */
802int getdomainname(char *name, int namelen);
803int setdomainname(char *domain, int len);
804
805/* gethostname.c */
806int gethostname(char *hname, int hlen);
807
808/* inet_ntoa.c */
809char *inet_ntoa_r(struct in_addr in, char b[]);
810char *inet_ntoa(struct in_addr in);
811in_addr_t inet_addr(const char *cp);
812in_addr_t inet_netof(struct in_addr in);
813
814/* key_call.c */
815int key_setsecret(const char *secretkey);
816int key_secretkey_is_set(void);
817int key_encryptsession_pk(const char *remotename, netobj *remotekey,
818				des_block *deskey);
819int key_decryptsession_pk(const char *remotename, netobj *remotekey,
820				des_block *deskey);
821
822int key_encryptsession(const char *remotename, des_block *deskey);
823int key_decryptsession(const char *remotename, des_block *deskey);
824int key_gendes(des_block *key);
825int key_setnet(struct key_netstarg *arg);
826int key_get_conv(char *pkey, des_block *deskey);
827int key_call(ulong_t proc, xdrproc_t xdr_arg, char *arg, xdrproc_t xdr_rslt,
828				char *rslt);
829
830/* key_prot.c */
831bool_t xdr_keystatus(XDR *xdrs, keystatus *objp);
832bool_t xdr_keybuf(XDR *xdrs, keybuf objp);
833bool_t xdr_netnamestr(XDR *xdrs, netnamestr *objp);
834bool_t xdr_cryptkeyarg(XDR *xdrs, cryptkeyarg *objp);
835bool_t xdr_cryptkeyarg2(XDR *xdrs, cryptkeyarg2 *objp);
836bool_t xdr_cryptkeyres(XDR *xdrs, cryptkeyres *objp);
837bool_t xdr_unixcred(XDR *xdrs, unixcred *objp);
838bool_t xdr_getcredres(XDR *xdrs, getcredres *objp);
839bool_t xdr_key_netstarg(XDR *xdrs, key_netstarg *objp);
840bool_t xdr_key_netstres(XDR *xdrs, key_netstres *objp);
841
842/* mt_misc.c */
843#ifdef rpc_createerr
844#undef rpc_createerr
845#endif
846struct rpc_createerr *__rpc_createerr(void);
847
848/* netname.c */
849int getnetname(char *name);
850int __getnetnamebyuid(char *name, uid_t uid);
851int user2netname(char *netname, const uid_t uid, const char *domain);
852int host2netname(char *netname, const char *host, const char *domain);
853
854/* netnamer.c */
855int netname2user(const char *netname, uid_t *uidp, gid_t *gidp,
856					int *gidlenp, gid_t *gidlist);
857int netname2host(const char *netname, char *hostname, int hostlen);
858
859/* openchild.c */
860
861/* pmap_clnt.c */
862int pmap_set(rpcprog_t program, rpcvers_t version, rpcprot_t protocol, ushort_t port);
863bool_t pmap_unset(rpcprog_t program, rpcvers_t version);
864ushort_t pmap_getport(struct sockaddr_in *address, rpcprog_t program,
865			rpcvers_t version, rpcprot_t protocol);
866struct pmaplist *pmap_getmaps(struct sockaddr_in *address);
867enum clnt_stat pmap_rmtcall(struct sockaddr_in *addr, rpcprog_t prog,
868			rpcvers_t vers, rpcproc_t proc, xdrproc_t xdrargs,
869			caddr_t argsp, xdrproc_t xdrres, caddr_t resp,
870			struct timeval tout, rpcport_t *port_ptr);
871
872/* pmap_prot.c */
873bool_t xdr_pmap(XDR *xdrs, struct pmap *objp);
874bool_t xdr_pmaplist_ptr(XDR *xdrs, pmaplist_ptr *rp);
875bool_t xdr_pmaplist(XDR *xdrs, PMAPLIST **rp);
876bool_t xdr_rmtcallargs(XDR *xdrs, struct p_rmtcallargs *cap);
877bool_t xdr_rmtcallres(XDR *xdrs, struct p_rmtcallres *crp);
878
879/* rpc_callmsg.c */
880bool_t xdr_callmsg(XDR *xdrs, struct rpc_msg *cmsg);
881
882/* rpc_comdata.c */
883
884/* rpc_generic.c */
885int __rpc_dtbsize(void);
886uint_t __rpc_get_t_size(t_scalar_t size, t_scalar_t bufsize);
887uint_t __rpc_get_a_size(t_scalar_t size);
888struct netconfig *__rpc_getconfip(char *nettype);
889void *__rpc_setconf(char *nettype);
890struct netconfig *__rpc_getconf(void *vhandle);
891void __rpc_endconf(void *vhandle);
892struct netconfig *__rpcfd_to_nconf(int fd, int servtype);
893int __rpc_matchserv(int servtype, unsigned int nc_semantics);
894
895/* rpc_prot.c */
896bool_t xdr_opaque_auth(XDR *xdrs, struct opaque_auth *ap);
897bool_t xdr_des_block(XDR *xdrs, des_block *blkp);
898bool_t xdr_accepted_reply(XDR *xdrs, struct accepted_reply *ar);
899bool_t xdr_rejected_reply(XDR *xdrs, struct rejected_reply *rr);
900bool_t xdr_replymsg(XDR *xdrs, struct rpc_msg *rmsg);
901bool_t xdr_callhdr(XDR *xdrs, struct rpc_msg *cmsg);
902void __seterr_reply(struct rpc_msg *msg, struct rpc_err *error);
903
904/* rpc_sel2poll.c */
905int __rpc_select_to_poll(int fdmax, fd_set *fdset, struct pollfd *p0);
906int __rpc_timeval_to_msec(struct timeval *t);
907
908/* rpc_soc.c */
909CLIENT *clntudp_bufcreate(struct sockaddr_in *raddr, rpcprog_t prog,
910			rpcvers_t vers, struct timeval wait, int *sockp,
911			uint_t sendsz, uint_t recvsz);
912CLIENT *clntudp_create(struct sockaddr_in *raddr, rpcprog_t program,
913			rpcvers_t version, struct timeval wait, int *sockp);
914CLIENT *clnttcp_create(struct sockaddr_in *raddr, rpcprog_t prog,
915			rpcvers_t vers, int *sockp, uint_t sendsz,
916			uint_t recvsz);
917CLIENT *clntraw_create(rpcprog_t prog, rpcvers_t vers);
918SVCXPRT *svctcp_create(int fd, uint_t sendsize, uint_t recvsize);
919SVCXPRT *svcudp_bufcreate(int fd, uint_t sendsize, uint_t recvsize);
920SVCXPRT *svcfd_create(int fd, uint_t sendsize, uint_t recvsize);
921SVCXPRT *svcudp_create(int fd);
922SVCXPRT *svcraw_create(void);
923int __rpc_bindresvport(int fd, struct sockaddr_in *sin, int *portp, int qlen);
924void get_myaddress(struct sockaddr_in *addr);
925ushort_t getrpcport(char *host, rpcprog_t prognum, rpcvers_t versnum, rpcprot_t proto);
926int callrpc(char *host, rpcprog_t prognum, rpcvers_t versnum, rpcproc_t procnum,
927		xdrproc_t inproc, char *in, xdrproc_t outproc, char *out);
928int registerrpc(rpcprog_t prognum, rpcvers_t versnum, rpcproc_t procnum,
929		char *(*progname)(), xdrproc_t inproc, xdrproc_t outproc);
930enum clnt_stat clnt_broadcast(rpcprog_t prog, rpcvers_t vers, rpcproc_t proc,
931		xdrproc_t xargs, caddr_t argsp, xdrproc_t xresults,
932		caddr_t resultsp, resultproc_t eachresult);
933AUTH *authdes_create(char *servername, uint_t window,
934		struct sockaddr_in *syncaddr, des_block *ckey);
935
936/* rpc_td.c */
937
938/* rpcb_clnt.c */
939bool_t __rpc_control(int request, void *info);
940bool_t rpcb_set(rpcprog_t program, rpcvers_t version,
941		const struct netconfig *nconf, const struct netbuf *address);
942bool_t rpcb_unset(rpcprog_t program, rpcvers_t version,
943		const struct netconfig *nconf);
944int rpcb_getaddr(rpcprog_t program, rpcvers_t version,
945		const struct netconfig *nconf, struct netbuf *address,
946		const char *host);
947rpcblist *rpcb_getmaps(const struct netconfig *nconf, const char *host);
948enum clnt_stat rpcb_rmtcall(const struct netconfig *nconf, const char *host,
949		rpcprog_t prog, rpcvers_t vers, rpcproc_t proc,
950		xdrproc_t xdrargs, caddr_t argsp, xdrproc_t xdrres,
951		caddr_t resp, struct timeval tout,
952		struct netbuf *addr_ptr);
953bool_t rpcb_gettime(const char *host, time_t *timep);
954char *rpcb_taddr2uaddr(struct netconfig *nconf, struct netbuf *taddr);
955struct netbuf *rpcb_uaddr2taddr(struct netconfig *nconf, char *uaddr);
956
957/* rpcb_prot.c */
958bool_t xdr_rpcb(XDR *xdrs, RPCB *objp);
959bool_t xdr_rpcblist_ptr(XDR *xdrs, rpcblist_ptr *rp);
960bool_t xdr_rpcblist(XDR *xdrs, RPCBLIST **rp);
961bool_t xdr_rpcb_entry(XDR *xdrs, rpcb_entry *objp);
962bool_t xdr_rpcb_entry_list_ptr(XDR *xdrs, rpcb_entry_list_ptr *rp);
963bool_t xdr_rpcb_rmtcallargs(XDR *xdrs, struct r_rpcb_rmtcallargs *objp);
964bool_t xdr_rpcb_rmtcallres(XDR *xdrs, struct r_rpcb_rmtcallres *objp);
965bool_t xdr_netbuf(XDR *xdrs, struct netbuf *objp);
966
967/* rpcb_st_xdr.c */
968bool_t xdr_rpcbs_addrlist(XDR *xdrs, rpcbs_addrlist *objp);
969bool_t xdr_rpcbs_addrlist(XDR *xdrs, rpcbs_addrlist *objp);
970
971bool_t xdr_rpcbs_rmtcalllist(XDR *xdrs, rpcbs_rmtcalllist *objp);
972bool_t xdr_rpcbs_proc(XDR *xdrs, rpcbs_proc objp);
973bool_t xdr_rpcbs_addrlist_ptr(XDR *xdrs, rpcbs_addrlist_ptr *objp);
974bool_t xdr_rpcbs_rmtcalllist_ptr(XDR *xdrs, rpcbs_rmtcalllist_ptr *objp);
975bool_t xdr_rpcb_stat(XDR *xdrs, rpcb_stat *objp);
976bool_t xdr_rpcb_stat_byvers(XDR *xdrs, rpcb_stat_byvers objp);
977
978/* rpcdname.c */
979int __rpc_get_default_domain(char **domain);
980
981/* rpcsec_gss_if.c */
982AUTH *rpc_gss_seccreate(CLIENT *clnt, char *principal, char *mechanism,
983		rpc_gss_service_t service_type, char *qop,
984		rpc_gss_options_req_t *options_req,
985		rpc_gss_options_ret_t *options_ret);
986bool_t rpc_gss_set_defaults(AUTH *auth, rpc_gss_service_t service, char *qop);
987bool_t rpc_gss_get_principal_name(rpc_gss_principal_t *principal, char
988		*mechanism, char *user_name, char *node, char *secdomain);
989char **rpc_gss_get_mechanisms(void);
990char **rpc_gss_get_mech_info(char *mechanism, rpc_gss_service_t *service);
991bool_t rpc_gss_get_versions(u_int *vers_hi, u_int *vers_lo);
992bool_t rpc_gss_is_installed(char *mechanism);
993bool_t rpc_gss_set_svc_name(char *principal, char *mechanism, uint_t req_time,
994		uint_t program, uint_t version);
995bool_t rpc_gss_set_callback(rpc_gss_callback_t *cb);
996bool_t rpc_gss_getcred(struct svc_req *req, rpc_gss_rawcred_t **rcred,
997		rpc_gss_ucred_t **ucred, void **cookie);
998bool_t rpc_gss_mech_to_oid(char *mech, rpc_gss_OID *oid);
999bool_t rpc_gss_qop_to_num(char *qop, char *mech, u_int *num);
1000int rpc_gss_max_data_length(AUTH *rpcgss_handle, int max_tp_unit_len);
1001int rpc_gss_svc_max_data_length(struct svc_req *req, int max_tp_unit_len);
1002void rpc_gss_get_error(rpc_gss_error_t *error);
1003
1004/* rtime_tli.c */
1005int rtime_tli(char *host, struct timeval *timep, struct timeval *timeout);
1006
1007/* svc.c */
1008void xprt_register(const SVCXPRT *xprt);
1009void xprt_unregister(const SVCXPRT *xprt);
1010bool_t svc_reg(const SVCXPRT *xprt, rpcprog_t prog, rpcvers_t vers,
1011		void (*dispatch)(), const struct netconfig *nconf);
1012void svc_unreg(rpcprog_t prog, rpcvers_t vers);
1013bool_t svc_register(SVCXPRT *xprt, rpcprog_t prog, rpcvers_t vers,
1014		void (*dispatch)(), int protocol);
1015void svc_unregister(rpcprog_t prog, rpcvers_t vers);
1016bool_t svc_sendreply(const SVCXPRT *xprt, xdrproc_t xdr_results,
1017		caddr_t xdr_location);
1018void svcerr_noproc(const SVCXPRT *xprt);
1019void svcerr_decode(const SVCXPRT *xprt);
1020void svcerr_systemerr(const SVCXPRT *xprt);
1021void svcerr_auth(const SVCXPRT *xprt, enum auth_stat why);
1022void svcerr_weakauth(const SVCXPRT *xprt);
1023void svcerr_noprog(const SVCXPRT *xprt);
1024void svcerr_progvers(const SVCXPRT *xprt, rpcvers_t low_vers,
1025		rpcvers_t high_vers);
1026void svc_getreq(int rdfds);
1027void svc_getreqset(fd_set *readfds);
1028void svc_getreq_poll(struct pollfd *pfdp, int pollretval);
1029void svc_getreq_common(int fd);
1030SVCXPRT *svc_xprt_alloc(void);
1031void svc_xprt_free(SVCXPRT *xprt);
1032bool_t svc_get_local_cred(SVCXPRT *xprt, svc_local_cred_t *lcred);
1033SVCAUTH *__svc_get_svcauth(SVCXPRT *);
1034void *__svc_set_proc_cleanup_cb(void *cb);
1035
1036/* svc_auth.c */
1037enum auth_stat __authenticate(struct svc_req *rqst, struct rpc_msg *msg);
1038int svc_auth_reg(int cred_flavor, enum auth_stat (*handler)());
1039
1040/* svc_auth_sys.c */
1041
1042/* svc_dg.c */
1043SVCXPRT *svc_dg_create(int fd, uint_t sendsize, uint_t recvsize);
1044int svc_dg_enablecache(SVCXPRT *xprt, uint_t size);
1045
1046/* svc_door.c */
1047SVCXPRT *svc_door_create(void (*dispatch)(), rpcprog_t prognum,
1048			rpcvers_t versnum, uint_t sendsize);
1049
1050/* svc_generic.c */
1051int svc_create(void (*dispatch)(), rpcprog_t prognum, rpcvers_t versnum,
1052			const char *nettype);
1053SVCXPRT *svc_tp_create(void (*dispatch)(), rpcprog_t prognum, rpcvers_t versnum,
1054			const struct netconfig *nconf);
1055SVCXPRT *svc_tli_create(int fd, const struct netconfig *nconf,
1056			const struct t_bind *bindaddr, uint_t sendsz,
1057			uint_t recvsz);
1058
1059/* svc_raw.c */
1060SVCXPRT *svc_raw_create(void);
1061
1062/* svc_run.c */
1063void svc_run(void);
1064void svc_exit(void);
1065void svc_done(SVCXPRT *xprt);
1066bool_t rpc_control(int op, void *info);
1067
1068/* svc_simple.c */
1069int rpc_reg(rpcprog_t prognum, rpcvers_t versnum, rpcproc_t procnum,
1070		char *(*progname)(), xdrproc_t inproc, xdrproc_t outproc,
1071		const char *nettype);
1072
1073/* svc_vc.c */
1074SVCXPRT *svc_vc_create(int fd, uint_t sendsize, uint_t recvsize);
1075SVCXPRT *svc_fd_create(int fd, uint_t sendsize, uint_t recvsize);
1076void __svc_nisplus_fdcleanup_hack(void);
1077void __svc_nisplus_enable_timestamps(void);
1078void __svc_nisplus_purge_since(long since);
1079bool_t __svc_vc_dupcache_init(SVCXPRT *xprt, void *condition, int basis);
1080int __svc_vc_dup(struct svc_req *req, caddr_t *resp_buf, uint_t *resp_bufsz);
1081int __svc_vc_dupdone(struct svc_req *req, caddr_t resp_buf, uint_t resp_bufsz,
1082				int status);
1083
1084/* svcauth_des.c */
1085int authdes_getucred(const struct authdes_cred *adc, uid_t *uid, gid_t *gid,
1086				short *grouplen, gid_t *groups);
1087enum auth_stat __svcauth_des(struct svc_req *rqst, struct rpc_msg *msg);
1088
1089/* ti_opts.c */
1090int __rpc_negotiate_uid(int fd);
1091int __rpc_get_local_uid(SVCXPRT *trans, uid_t *uid_out);
1092
1093/* xdr.c */
1094void xdr_free(xdrproc_t proc, char *objp);
1095bool_t xdr_void(void);
1096bool_t xdr_int(XDR *xdrs, int *ip);
1097bool_t xdr_u_int(XDR *xdrs, uint_t *up);
1098bool_t xdr_long(XDR *xdrs, long *lp);
1099bool_t xdr_u_long(XDR *xdrs, ulong_t *ulp);
1100bool_t xdr_short(XDR *xdrs, short *sp);
1101bool_t xdr_u_short(XDR *xdrs, ushort_t *sp);
1102bool_t xdr_char(XDR *xdrs, char *cp);
1103bool_t xdr_u_char(XDR *xdrs, uchar_t *cp);
1104bool_t xdr_bool(XDR *xdrs, bool_t *bp);
1105bool_t xdr_enum(XDR *xdrs, enum_t *ep);
1106bool_t xdr_opaque(XDR *xdrs, caddr_t cp, uint_t cnt);
1107bool_t xdr_bytes(XDR *xdrs, char **cpp, uint_t *sizep, uint_t maxsize);
1108bool_t xdr_netobj(XDR *xdrs, struct netobj *np);
1109bool_t xdr_union(XDR *xdrs, enum_t *dscmp, char *unp,
1110			const struct xdr_discrim *choices, xdrproc_t dfault);
1111bool_t xdr_string(XDR *xdrs, char **cpp, uint_t maxsize);
1112bool_t xdr_hyper(XDR *xdrs, longlong_t *hp);
1113bool_t xdr_u_hyper(XDR *xdrs, u_longlong_t *hp);
1114bool_t xdr_longlong_t(XDR *xdrs, longlong_t *hp);
1115bool_t xdr_u_longlong_t(XDR *xdrs, u_longlong_t *hp);
1116bool_t xdr_ulonglong_t(XDR *xdrs, u_longlong_t *hp);
1117bool_t xdr_wrapstring(XDR *xdrs, char **cpp);
1118
1119/* xdr_array.c */
1120bool_t xdr_array(XDR *xdrs, caddr_t *addrp, uint_t *sizep, uint_t maxsize,
1121				uint_t elsize, xdrproc_t elproc);
1122bool_t xdr_vector(XDR *xdrs, char *basep, uint_t nelem, uint_t elemsize,
1123				xdrproc_t xdr_elem);
1124
1125/* xdr_float.c */
1126bool_t xdr_float(XDR *xdrs, float *fp);
1127bool_t xdr_double(XDR *xdrs, double *dp);
1128bool_t xdr_quadruple(XDR *xdrs, long double *fp);
1129
1130/* xdr_mem.c */
1131void xdrmem_create(XDR *xdrs, caddr_t addr, uint_t size, enum xdr_op op);
1132
1133/* xdr_rec.c */
1134void xdrrec_create(XDR *xdrs, uint_t sendsize, uint_t recvsize,
1135			caddr_t tcp_handle, int (*readit)(), int (*writeit)());
1136
1137uint_t xdrrec_readbytes(XDR *xdrs, caddr_t addr, uint_t l);
1138bool_t xdrrec_skiprecord(XDR *xdrs);
1139bool_t xdrrec_eof(XDR *xdrs);
1140bool_t xdrrec_endofrecord(XDR *xdrs, bool_t sendnow);
1141
1142/* xdr_refer.c */
1143bool_t xdr_reference(XDR *xdrs, caddr_t *pp, uint_t size, xdrproc_t proc);
1144bool_t xdr_pointer(XDR *xdrs, char **objpp, uint_t obj_size, xdrproc_t xdr_obj);
1145
1146/* xdr_sizeof.c */
1147unsigned int xdr_sizeof(xdrproc_t func, void *data);
1148
1149/* xdr_stdio.c */
1150void xdrstdio_create(XDR *xdrs, FILE *file, enum xdr_op op);
1151
1152/* svid_funcs.c */
1153#undef	auth_destroy
1154#undef	clnt_call
1155#undef	clnt_control
1156#undef	clnt_destroy
1157#undef	clnt_freeres
1158#undef	clnt_geterr
1159#undef	svc_destroy
1160#undef	svc_freeargs
1161#undef	svc_getargs
1162#undef	svc_getrpccaller
1163#undef	xdr_destroy
1164#undef	xdr_getpos
1165#undef	xdr_inline
1166#undef	xdr_setpos
1167void auth_destroy(AUTH *auth);
1168enum clnt_stat clnt_call(CLIENT *cl, rpcproc_t proc, xdrproc_t xargs,
1169			caddr_t argsp, xdrproc_t xres, caddr_t resp,
1170			struct timeval timeout);
1171bool_t clnt_control(CLIENT *cl, uint_t rq, void *in);
1172void clnt_destroy(CLIENT *cl);
1173bool_t clnt_freeres(CLIENT *cl, xdrproc_t xres, caddr_t resp);
1174void clnt_geterr(CLIENT *cl, struct rpc_err *errp);
1175bool_t svc_control(SVCXPRT *xprt, const uint_t rq, void *in);
1176bool_t svc_freeargs(SVCXPRT *xprt, xdrproc_t xargs, char *argsp);
1177bool_t svc_getargs(SVCXPRT *xprt, xdrproc_t xargs, char *argsp);
1178struct netbuf *svc_getrpccaller(SVCXPRT *xprt);
1179long *xdr_inline(XDR *xdrs, int len);
1180void xdr_destroy(XDR *xdrs);
1181uint_t xdr_getpos(XDR *xdrs);
1182bool_t xdr_setpos(XDR *xdrs, uint_t pos);
1183
1184/*
1185 * usr/src/lib/libnsl/saf routines
1186 */
1187
1188/* checkver.c */
1189int check_version(int ver, char *fname);
1190
1191/* doconfig.c */
1192int doconfig(int fd, char *script, long rflag);
1193
1194/*
1195 * usr/src/lib/libnsl/yp routines
1196 */
1197
1198/* dbm.c */
1199int dbminit(char *file);
1200int dbmclose(void);
1201datum fetch(datum key);
1202int delete(datum key);
1203int store(datum key, datum dat);
1204datum firstkey(void);
1205datum nextkey(datum key);
1206datum firsthash(long hash);
1207datum makdatum(char *buf, int n);
1208long hashinc(long hash);
1209long calchash(datum item);
1210
1211/* yp_all.c */
1212int yp_all(char *domain, char *map, struct ypall_callback *callback);
1213int __yp_all_rsvdport(char *domain, char *map, struct ypall_callback *callback);
1214
1215/* yp_b_clnt.c */
1216enum ypbind_resptype {
1217	YPBIND_SUCC_VAL = 1,
1218	YPBIND_FAIL_VAL = 2
1219};
1220typedef enum ypbind_resptype ypbind_resptype;
1221struct ypbind_resp {
1222	ypbind_resptype ypbind_status;
1223	union {
1224		uint_t ypbind_error;
1225		struct ypbind_binding *ypbind_bindinfo;
1226	} ypbind_resp_u;
1227};
1228typedef struct ypbind_resp ypbind_resp;
1229struct ypbind_domain {
1230	char *ypbind_domainname;
1231	rpcvers_t ypbind_vers;
1232};
1233typedef struct ypbind_domain ypbind_domain;
1234struct ypbind_setdom {
1235	char *ypsetdom_domain;
1236	struct ypbind_binding *ypsetdom_bindinfo;
1237};
1238typedef struct ypbind_setdom ypbind_setdom;
1239ypbind_resp *ypbindproc_domain_3(ypbind_domain *argp, CLIENT *clnt);
1240
1241/* yp_b_xdr.c */
1242bool_t xdr_ypbind_domain(XDR *xdrs, ypbind_domain *objp);
1243bool_t xdr_ypbind_resp(XDR *xdrs, ypbind_resp *objp);
1244bool_t xdr_ypbind_setdom(XDR *xdrs, ypbind_setdom *objp);
1245bool_t xdr_ypbind_resptype(XDR *xdrs, ypbind_resptype *objp);
1246
1247/* yp_bind.c */
1248struct dom_binding {
1249	struct dom_binding *dom_pnext;
1250	char *dom_domain;
1251	struct ypbind_binding *dom_binding;
1252	CLIENT *dom_client;
1253	int cache_bad;
1254	int fd;
1255	dev_t rdev;
1256	int ref_count;
1257	int need_free;
1258	mutex_t server_name_lock;
1259};
1260int __yp_dobind(char *domain, struct dom_binding **binding);
1261int __yp_rel_binding(struct dom_binding *binding);
1262void yp_unbind(char *domain);
1263int __yp_add_binding(char *domain, char *addr);
1264int yp_bind(char *domain);
1265int yp_get_default_domain(char **domain);
1266int usingypmap(char **ddn, char *map);
1267CLIENT *__clnt_create_loopback(rpcprog_t prog, rpcvers_t vers, int err);
1268
1269/* yp_enum.c */
1270int yp_first(char *domain, char *map, char **key, int *keylen,
1271					char **val, int  *vallen);
1272int yp_next(char *domain, char *map, char *inkey, int inkeylen,
1273		char **outkey, int  *outkeylen, char **val, int *vallen);
1274
1275/* yp_master.c */
1276int yp_master(char *domain, char *map, char **master);
1277int __yp_master_rsvdport(char *domain, char *map, char **master);
1278
1279/* yp_match.c */
1280int yp_match(char *domain, char *map, char *key, int keylen,
1281						char **val, int  *vallen);
1282int yp_match_rsvdport(char *domain, char *map, char *key, int keylen,
1283						char **val, int  *vallen);
1284void __empty_yp_cache(void);
1285
1286/* yp_order.c */
1287int yp_order(char *domain, char *map, unsigned long *order);
1288
1289/* yp_rsvd.c */
1290CLIENT *__yp_clnt_create_rsvdport(const char *hostname,
1291			rpcprog_t prog, rpcvers_t vers,
1292			const char *nettype,
1293			const uint_t sendsz, const uint_t recvsz);
1294
1295/* yp_update.c */
1296int yp_update(char *domain, char *map, unsigned op,
1297			char *key, int keylen, char *data, int datalen);
1298
1299/* yp_xdr.c */
1300bool xdr_datum(XDR * xdrs, datum *pdatum);
1301bool xdr_ypdomain_wrap_string(XDR *xdrs, char **ppstring);
1302bool xdr_ypmap_wrap_string(XDR *xdrs, char **ppstring);
1303bool xdr_ypreq_key(XDR *xdrs, struct ypreq_key *ps);
1304bool xdr_ypreq_nokey(XDR *xdrs, struct ypreq_nokey *ps);
1305bool xdr_ypresp_val(XDR *xdrs, struct ypresp_val *ps);
1306bool xdr_ypresp_key_val(XDR *xdrs, struct ypresp_key_val *ps);
1307bool xdr_ypowner_wrap_string(XDR *xdrs, char **ppstring);
1308bool xdr_ypmap_parms(XDR *xdrs, struct ypmap_parms *ps);
1309bool xdr_ypresp_master(XDR *xdrs, struct ypresp_master *ps);
1310bool xdr_ypresp_order(XDR * xdrs, struct ypresp_order *ps);
1311bool xdr_ypresp_maplist(XDR *xdrs, struct ypresp_maplist *ps);
1312bool xdr_yppushresp_xfr(XDR *xdrs, struct yppushresp_xfr *ps);
1313bool xdr_ypreq_newxfr(XDR *xdrs, struct ypreq_newxfr *ps);
1314bool xdr_ypreq_xfr(XDR *xdrs, struct ypreq_xfr *ps);
1315bool xdr_ypall(XDR *xdrs, struct ypall_callback *callback);
1316
1317/* yperr_string.c */
1318char *yperr_string(int code);
1319
1320/* yppasswd_xdr.c */
1321bool_t xdr_yppasswd(XDR *xdrsp, struct yppasswd *pp);
1322
1323/* ypprot_err.c */
1324int ypprot_err(int yp_protocol_error);
1325
1326/* ypupd.c */
1327bool_t xdr_yp_buf(XDR *xdrs, yp_buf *objp);
1328bool_t xdr_ypupdate_args(XDR *xdrs, ypupdate_args *objp);
1329bool_t xdr_ypdelete_args(XDR *xdrs, ypdelete_args *objp);
1330
1331/* nis_sec_mechs.c */
1332char *__nis_keyalg2authtype(keylen_t keylen, algtype_t algtype,
1333	char *authtype, size_t authtype_len);
1334
1335/* usr/src/lib/libnsl/nss/parse.c */
1336char *_strtok_escape(char *string, char *sepset, char **lasts);
1337