xref: /illumos-gate/usr/src/lib/libsmbfs/smb/private.h (revision b424305435881ac456a9343be2898f1f86440f31)
1 /*
2  * Copyright (c) 2000-2001 Boris Popov
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *    This product includes software developed by Boris Popov.
16  * 4. Neither the name of the author nor the names of any co-contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  */
32 
33 /*
34  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
35  * Use is subject to license terms.
36  */
37 
38 #ifndef _PRIVATE_H
39 #define	_PRIVATE_H
40 
41 /*
42  * Private declarations for this library.
43  * Moved from smb_lib.h
44  */
45 
46 #include <inttypes.h>
47 
48 /*
49  * BSD-style mbuf simulation
50  */
51 struct mbuf {
52 	int		m_len;
53 	int		m_maxlen;
54 	char		*m_data;
55 	struct mbuf	*m_next;
56 };
57 typedef struct mbuf mbuf_t;
58 
59 #if 0 /* in smb_lib.h */
60 struct mbdata {
61 	struct mbuf	*mb_top;
62 	struct mbuf	*mb_cur;
63 	char		*mb_pos;
64 	int		mb_count;
65 };
66 typedef struct mbdata mbdata_t;
67 #endif
68 
69 #define	M_ALIGNFACTOR	(sizeof (long))
70 #define	M_ALIGN(len)	(((len) + M_ALIGNFACTOR - 1) & ~(M_ALIGNFACTOR - 1))
71 #define	M_BASESIZE	(sizeof (struct mbuf))
72 #define	M_MINSIZE	(256 - M_BASESIZE)
73 #define	M_TOP(m)	((char *)(m) + M_BASESIZE)
74 #define	M_TRAILINGSPACE(m) ((m)->m_maxlen - (m)->m_len)
75 #define	mtod(m, t)	((t)(m)->m_data)
76 
77 /*
78  * request handling structures
79  */
80 struct smb_rq {
81 	uchar_t		rq_cmd;
82 	struct mbdata	rq_rq;
83 	struct mbdata	rq_rp;
84 	struct smb_ctx *rq_ctx;
85 	int		rq_wcount;
86 	int		rq_bcount;
87 };
88 typedef struct smb_rq smb_rq_t;
89 
90 #define	smb_rq_getrequest(rqp)	(&(rqp)->rq_rq)
91 #define	smb_rq_getreply(rqp)	(&(rqp)->rq_rp)
92 
93 int  smb_rq_init(struct smb_ctx *, uchar_t, size_t, struct smb_rq **);
94 void smb_rq_done(struct smb_rq *);
95 void smb_rq_wend(struct smb_rq *);
96 int  smb_rq_simple(struct smb_rq *);
97 int  smb_rq_dmem(struct mbdata *, const char *, size_t);
98 int  smb_rq_dstring(struct mbdata *, const char *);
99 
100 
101 /*
102  * Message compose/parse
103  */
104 
105 int  m_getm(struct mbuf *, size_t, struct mbuf **);
106 int  m_lineup(struct mbuf *, struct mbuf **);
107 int  mb_init(struct mbdata *, size_t);
108 int  mb_initm(struct mbdata *, struct mbuf *);
109 int  mb_done(struct mbdata *);
110 int  mb_fit(struct mbdata *mbp, size_t size, char **pp);
111 int  mb_put_uint8(struct mbdata *, uint8_t);
112 int  mb_put_uint16be(struct mbdata *, uint16_t);
113 int  mb_put_uint16le(struct mbdata *, uint16_t);
114 int  mb_put_uint32be(struct mbdata *, uint32_t);
115 int  mb_put_uint32le(struct mbdata *, uint32_t);
116 int  mb_put_uint64be(struct mbdata *, uint64_t);
117 int  mb_put_uint64le(struct mbdata *, uint64_t);
118 int  mb_put_mem(struct mbdata *, const char *, size_t);
119 int  mb_put_pstring(struct mbdata *mbp, const char *s);
120 int  mb_put_mbuf(struct mbdata *, struct mbuf *);
121 
122 int  mb_get_uint8(struct mbdata *, uint8_t *);
123 int  mb_get_uint16(struct mbdata *, uint16_t *);
124 int  mb_get_uint16le(struct mbdata *, uint16_t *);
125 int  mb_get_uint16be(struct mbdata *, uint16_t *);
126 int  mb_get_uint32(struct mbdata *, uint32_t *);
127 int  mb_get_uint32be(struct mbdata *, uint32_t *);
128 int  mb_get_uint32le(struct mbdata *, uint32_t *);
129 int  mb_get_uint64(struct mbdata *, uint64_t *);
130 int  mb_get_uint64be(struct mbdata *, uint64_t *);
131 int  mb_get_uint64le(struct mbdata *, uint64_t *);
132 int  mb_get_mem(struct mbdata *, char *, size_t);
133 
134 /*
135  * Network stuff (NetBIOS and otherwise)
136  */
137 
138 int nb_name_len(struct nb_name *);
139 /* new flag UCflag. 1=uppercase,0=don't */
140 int nb_name_encode(struct nb_name *, uchar_t *);
141 int nb_encname_len(const uchar_t *);
142 
143 int  nb_snballoc(int namelen, struct sockaddr_nb **);
144 void nb_snbfree(struct sockaddr *);
145 int  nb_sockaddr(struct sockaddr *, struct nb_name *, struct sockaddr_nb **);
146 
147 int  nbns_resolvename(const char *, struct nb_ctx *, struct sockaddr **);
148 int  nbns_getnodestatus(struct sockaddr *targethost,
149     struct nb_ctx *ctx, char *system, char *workgroup);
150 int  nb_getlocalname(char *name, size_t maxlen);
151 
152 extern uchar_t nls_lower[256], nls_upper[256];
153 
154 #endif /* _PRIVATE_H */
155