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