view usr/src/lib/libsmbfs/smb/private.h @ 13394:96340372b72d

1120 Use real file descriptors for smbfs named pipes. Reviewed by: Eric Schrock <eric.schrock@delphix.com> Reviewed by: Albert Lee <trisk@nexenta.com> Approved by: Garrett D'Amore <garrett@nexenta.com>
author Gordon Ross <gwr@nexenta.com>
date Thu, 30 Jun 2011 17:58:05 -0400
parents ed3411181494
children
line wrap: on
line source

/*
 * Copyright (c) 2000-2001 Boris Popov
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *    This product includes software developed by Boris Popov.
 * 4. Neither the name of the author nor the names of any co-contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

/*
 * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _PRIVATE_H
#define	_PRIVATE_H

/*
 * Private declarations for this library.
 * Moved from smb_lib.h
 */

#include <inttypes.h>
#include <sys/byteorder.h>
#include <sys/ccompile.h>

#include <netsmb/mchain.h>
#include <netsmb/netbios.h>

extern void dprint(const char *, const char *, ...)
	__PRINTFLIKE(2);

#if defined(DEBUG) || defined(__lint)
#define	DPRINT(...) dprint(__func__, __VA_ARGS__)
#else
#define	DPRINT(...) ((void)0)
#endif

/*
 * Flags bits in ct_vcflags (copied from smb_conn.h)
 * Pass these to the driver?
 */
#define	SMBV_RECONNECTING	0x0002	/* conn in process of reconnection */
#define	SMBV_LONGNAMES		0x0004	/* conn configured to use long names */
#define	SMBV_ENCRYPT		0x0008	/* server demands encrypted password */
#define	SMBV_WIN95		0x0010	/* used to apply bugfixes for this OS */
#define	SMBV_NT4		0x0020	/* used when NT4 issues invalid resp */
#define	SMBV_UNICODE		0x0040	/* conn configured to use Unicode */
#define	SMBV_EXT_SEC		0x0080	/* conn to use extended security */
#define	SMBV_WILL_SIGN		0x0100	/* negotiated signing */

/*
 * request handling structures
 */
struct smb_rq {
	struct smb_ctx *rq_ctx;
	struct mbdata	rq_rq;
	struct mbdata	rq_rp;
	int		rq_rpbufsz;
	uint8_t		rq_cmd;
	uint8_t		rq_hflags;
	uint16_t	rq_hflags2;
	uint32_t	rq_status;
	uint16_t	rq_uid;
	uint16_t	rq_tid;
	uint16_t	rq_mid;
	uint32_t	rq_seqno;
	/* See rq_[bw]{start,end} functions */
	char		*rq_wcntp;
	int		rq_wcbase;
	char		*rq_bcntp;
	int		rq_bcbase;
};
typedef struct smb_rq smb_rq_t;

#define	smb_rq_getrequest(rqp)	(&(rqp)->rq_rq)
#define	smb_rq_getreply(rqp)	(&(rqp)->rq_rp)

int  smb_rq_init(struct smb_ctx *, uchar_t, struct smb_rq **);
void smb_rq_done(struct smb_rq *);
void smb_rq_bstart(struct smb_rq *);
void smb_rq_bend(struct smb_rq *);
void smb_rq_wstart(struct smb_rq *);
void smb_rq_wend(struct smb_rq *);
int  smb_rq_simple(struct smb_rq *);
int  smb_rq_dmem(struct mbdata *, const char *, size_t);
int  smb_rq_internal(struct smb_ctx *, struct smb_rq *);
void smb_rq_sign(struct smb_rq *);
int  smb_rq_verify(struct smb_rq *);
int  smb_t2_request(int, int, uint16_t *, const char *,
	int, void *, int, void *, int *, void *, int *, void *, int *);

/*
 * This library extends the mchain.h function set a little.
 */
int  m_getm(struct mbuf *, int, struct mbuf **);
int  m_lineup(struct mbuf *, struct mbuf **);
size_t m_totlen(struct mbuf *);

int  mb_init_sz(struct mbdata *, int);
int  mb_fit(struct mbdata *mbp, int size, char **pp);

int  mb_put_string(struct mbdata *mbp, const char *s, int);
int  mb_put_astring(struct mbdata *mbp, const char *s);
int  mb_put_ustring(struct mbdata *mbp, const char *s);

int  md_get_string(struct mbdata *, char **, int);
int  md_get_astring(struct mbdata *, char **);
int  md_get_ustring(struct mbdata *, char **);

/*
 * Network stuff (NetBIOS and otherwise)
 */
struct nb_name;
struct sockaddr_nb;

extern int smb_recv_timeout; /* seconds */

void dump_ctx(char *, struct smb_ctx *);
void dump_addrinfo(struct addrinfo *);
void dump_sockaddr(struct sockaddr *);
int nb_ssn_request(struct smb_ctx *, char *);

int nb_name_len(struct nb_name *);
int nb_name_encode(struct mbdata *, struct nb_name *);
int nb_encname_len(const uchar_t *);

int  nb_snballoc(struct sockaddr_nb **);
void nb_snbfree(struct sockaddr *);
int  nb_sockaddr(struct sockaddr *, struct nb_name *, struct sockaddr_nb **);

int nbns_getaddrinfo(const char *name, struct nb_ctx *nbc,
	struct addrinfo **res);
int  nbns_resolvename(const char *, struct nb_ctx *, struct sockaddr **);
int  get_xti_err(int);


/*
 * Private SMB stuff
 */

struct smb_bitname {
	uint_t	bn_bit;
	char	*bn_name;
};
typedef struct smb_bitname smb_bitname_t;
char *smb_printb(char *, int, const struct smb_bitname *);

int smb_ctx_getaddr(struct smb_ctx *ctx);
int smb_ctx_gethandle(struct smb_ctx *ctx);

int  smb_iod_start(struct smb_ctx *);

int smb_ssn_send(struct smb_ctx *, struct mbdata *);
int smb_ssn_recv(struct smb_ctx *, struct mbdata *);

int smb_negprot(struct smb_ctx *, struct mbdata *);

int smb_ssnsetup_null(struct smb_ctx *);
int smb_ssnsetup_ntlm1(struct smb_ctx *);
int smb_ssnsetup_ntlm2(struct smb_ctx *);
int smb_ssnsetup_spnego(struct smb_ctx *, struct mbdata *);

void smb_time_local2server(struct timeval *, int, long *);
void smb_time_server2local(ulong_t, int, struct timeval *);
void smb_time_NT2local(uint64_t, int, struct timeval *);
void smb_time_local2NT(struct timeval *, int, uint64_t *);

int smb_getlocalname(char **);
int smb_get_authentication(struct smb_ctx *);
int smb_get_keychain(struct smb_ctx *ctx);
void smb_hexdump(const void *buf, int len);

/* See ssp.c */
int ssp_ctx_create_client(struct smb_ctx *, struct mbdata *);
int ssp_ctx_next_token(struct smb_ctx *, struct mbdata *, struct mbdata *);
void ssp_ctx_destroy(struct smb_ctx *);

#ifdef KICONV_SUPPORT
/* See nls.c (get rid of this?) */
extern uchar_t nls_lower[256], nls_upper[256];
#endif	/* KICONV_SUPPORT */

#endif /* _PRIVATE_H */