1 /*
2    Unix SMB/CIFS implementation.
3    SMB parameters and setup
4    Copyright (C) Andrew Tridgell 1992-1998
5    Copyright (C) Luke Kenneth Casson Leighton 1996-1998
6    Copyright (C) Jeremy Allison 1998
7 
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12 
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17 
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 */
21 
22 #ifndef _CLIENT_H
23 #define _CLIENT_H
24 
25 #define CLI_BUFFER_SIZE SMB_BUFFER_SIZE_MAX
26 
27 /* default client timeout to 20 seconds on most commands */
28 #define CLIENT_TIMEOUT (20 * 1000)
29 
30 /*
31  * These definitions depend on smb.h
32  */
33 
34 struct print_job_info {
35 	uint16_t id;
36 	uint16_t priority;
37 	size_t size;
38 	fstring user;
39 	fstring name;
40 	time_t t;
41 };
42 
43 struct smbXcli_conn;
44 struct smbXcli_session;
45 
46 struct cli_state {
47 	/**
48 	 * A list of subsidiary connections for DFS.
49 	 */
50         struct cli_state *prev, *next;
51 	int rap_error;
52 	NTSTATUS raw_status; /* maybe via NT_STATUS_DOS() */
53 	bool map_dos_errors;
54 
55 	/*
56 	 * The following strings are the
57 	 * ones returned by the server if
58 	 * the protocol > NT1.
59 	 */
60 	char *server_type;
61 	char *server_os;
62 	char *server_domain;
63 
64 	char *share;
65 	char *dev;
66 
67 	int timeout; /* in milliseconds. */
68 	int initialised;
69 	int win95;
70 	/* What the server offered. */
71 	uint32_t server_posix_capabilities;
72 	/* What the client requested. */
73 	uint32_t requested_posix_capabilities;
74 	bool backup_intent;
75 
76 	/* The list of pipes currently open on this connection. */
77 	struct rpc_pipe_client *pipe_list;
78 
79 	bool use_kerberos;
80 	bool fallback_after_kerberos;
81 	bool use_ccache;
82 	bool pw_nt_hash;
83 
84 	bool use_oplocks; /* should we use oplocks? */
85 
86 	/* Where (if anywhere) this is mounted under DFS. */
87 	char *dfs_mountpoint;
88 
89 	struct smbXcli_conn *conn;
90 
91 	struct {
92 		uint32_t pid;
93 		uint16_t vc_num;
94 		struct smbXcli_session *session;
95 		struct smbXcli_tcon *tcon;
96 	} smb1;
97 
98 	struct {
99 		struct smbXcli_session *session;
100 		struct smbXcli_tcon *tcon;
101 		struct idr_context *open_handles;
102 	} smb2;
103 };
104 
105 struct file_info {
106 	uint64_t size;
107 	uint64_t allocated_size;
108 	uint16_t mode;
109 	uid_t uid;
110 	gid_t gid;
111 	uint64_t ino;
112 	/* these times are normally kept in GMT */
113 	struct timespec btime_ts; /* Birth-time if supported by system */
114 	struct timespec mtime_ts;
115 	struct timespec atime_ts;
116 	struct timespec ctime_ts;
117 	char *name;
118 	char *short_name;
119 };
120 
121 #define CLI_FULL_CONNECTION_DONT_SPNEGO 0x0001
122 #define CLI_FULL_CONNECTION_USE_KERBEROS 0x0002
123 #define CLI_FULL_CONNECTION_ANONYMOUS_FALLBACK 0x0004
124 #define CLI_FULL_CONNECTION_FALLBACK_AFTER_KERBEROS 0x0008
125 #define CLI_FULL_CONNECTION_OPLOCKS 0x0010
126 #define CLI_FULL_CONNECTION_LEVEL_II_OPLOCKS 0x0020
127 #define CLI_FULL_CONNECTION_USE_CCACHE 0x0040
128 #define CLI_FULL_CONNECTION_FORCE_DOS_ERRORS 0x0080
129 #define CLI_FULL_CONNECTION_FORCE_ASCII 0x0100
130 #define CLI_FULL_CONNECTION_USE_NT_HASH 0x0200
131 #define CLI_FULL_CONNECTION_FORCE_SMB1 0x0400
132 #define CLI_FULL_CONNECTION_DISABLE_SMB1 0x0800
133 
134 #endif /* _CLIENT_H */
135