summaryrefslogtreecommitdiff
path: root/source4/include
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2006-02-23 12:44:21 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:52:05 -0500
commitd3bcaf66a8568fc19a3013f9dc974fb08ee3a39a (patch)
tree2c567a9bf3c8f28bc19c546dd0cfad2aa0dc816e /source4/include
parent559ba6f12aacf3639ad6268490bc8ed33b1fb803 (diff)
downloadsamba-d3bcaf66a8568fc19a3013f9dc974fb08ee3a39a.tar.gz
samba-d3bcaf66a8568fc19a3013f9dc974fb08ee3a39a.tar.bz2
samba-d3bcaf66a8568fc19a3013f9dc974fb08ee3a39a.zip
r13654: Move some more stuff out of include/
(This used to be commit 2ec7bba03a2edf713004941e9ed74798f5cf8d32)
Diffstat (limited to 'source4/include')
-rw-r--r--source4/include/includes.h2
-rw-r--r--source4/include/mutex.h69
-rw-r--r--source4/include/pstring.h7
-rw-r--r--source4/include/safe_string.h5
-rw-r--r--source4/include/smb_interfaces.h2035
-rw-r--r--source4/include/smb_macros.h2
6 files changed, 8 insertions, 2112 deletions
diff --git a/source4/include/includes.h b/source4/include/includes.h
index 3babb4eef5..444feab6fc 100644
--- a/source4/include/includes.h
+++ b/source4/include/includes.h
@@ -108,7 +108,7 @@ struct ipv4_addr {
#include "librpc/ndr/ndr_orpc.h"
#include "librpc/gen_ndr/orpc.h"
#include "librpc/rpc/dcerpc.h"
-#include "smb_interfaces.h"
+#include "libcli/raw/interfaces.h"
#include "auth/credentials/credentials.h"
#include "libcli/nbt/libnbt.h"
diff --git a/source4/include/mutex.h b/source4/include/mutex.h
deleted file mode 100644
index bb26c84f5d..0000000000
--- a/source4/include/mutex.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#ifndef _MUTEX_H_
-#define _MUTEX_H_
-/*
- Unix SMB/CIFS implementation.
- Samba mutex functions
- Copyright (C) Andrew Tridgell 2003
- Copyright (C) James J Myers 2003
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* To add a new read/write lock, add it to enum rwlock_id
- */
-enum rwlock_id { RWLOCK_SMBD, /* global smbd lock */
-
- RWLOCK_MAX /* this MUST be kept last */
-};
-
-#define MUTEX_LOCK_BY_ID(mutex_index) smb_mutex_lock_by_id(mutex_index, #mutex_index)
-#define MUTEX_UNLOCK_BY_ID(mutex_index) smb_mutex_unlock_by_id(mutex_index, #mutex_index)
-#define MUTEX_INIT(mutex, name) smb_mutex_init(mutex, #name)
-#define MUTEX_DESTROY(mutex, name) smb_mutex_destroy(mutex, #name)
-#define MUTEX_LOCK(mutex, name) smb_mutex_lock(mutex, #name)
-#define MUTEX_UNLOCK(mutex, name) smb_mutex_unlock(mutex, #name)
-
-#define RWLOCK_INIT(rwlock, name) smb_rwlock_init(rwlock, #name)
-#define RWLOCK_DESTROY(rwlock, name) smb_rwlock_destroy(rwlock, #name)
-#define RWLOCK_LOCK_WRITE(rwlock, name) smb_rwlock_lock_write(rwlock, #name)
-#define RWLOCK_LOCK_READ(rwlock, name) smb_rwlock_lock_read(rwlock, #name)
-#define RWLOCK_UNLOCK(rwlock, name) smb_rwlock_unlock(rwlock, #name)
-
-
-
-/* this null typedef ensures we get the types right and avoids the
- pitfalls of void* */
-typedef struct smb_mutex {
- void *mutex;
-} smb_mutex_t;
-typedef struct {
- void *rwlock;
-} smb_rwlock_t;
-
-/* the mutex model operations structure - contains function pointers to
- the model-specific implementations of each operation */
-struct mutex_ops {
- int (*mutex_init)(smb_mutex_t *mutex, const char *name);
- int (*mutex_lock)(smb_mutex_t *mutex, const char *name);
- int (*mutex_unlock)(smb_mutex_t *mutex, const char *name);
- int (*mutex_destroy)(smb_mutex_t *mutex, const char *name);
- int (*rwlock_init)(smb_rwlock_t *rwlock, const char *name);
- int (*rwlock_lock_write)(smb_rwlock_t *rwlock, const char *name);
- int (*rwlock_lock_read)(smb_rwlock_t *rwlock, const char *name);
- int (*rwlock_unlock)(smb_rwlock_t *rwlock, const char *name);
- int (*rwlock_destroy)(smb_rwlock_t *rwlock, const char *name);
-};
-
-#endif /* endif _MUTEX_H_ */
diff --git a/source4/include/pstring.h b/source4/include/pstring.h
index 3683849686..392ada4533 100644
--- a/source4/include/pstring.h
+++ b/source4/include/pstring.h
@@ -26,6 +26,7 @@
*/
#ifndef _PSTRING
+#define _PSTRING
#define PSTRING_LEN 1024
#define FSTRING_LEN 256
@@ -33,5 +34,9 @@
typedef char pstring[PSTRING_LEN];
typedef char fstring[FSTRING_LEN];
-#define _PSTRING
+#define pstrcpy(d,s) safe_strcpy((d), (s),sizeof(pstring)-1)
+#define pstrcat(d,s) safe_strcat((d), (s),sizeof(pstring)-1)
+#define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
+#define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1)
+
#endif
diff --git a/source4/include/safe_string.h b/source4/include/safe_string.h
index 57c5d21429..43e094467c 100644
--- a/source4/include/safe_string.h
+++ b/source4/include/safe_string.h
@@ -47,11 +47,6 @@
#endif /* !_SPLINT_ */
-#define pstrcpy(d,s) safe_strcpy((d), (s),sizeof(pstring)-1)
-#define pstrcat(d,s) safe_strcat((d), (s),sizeof(pstring)-1)
-#define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
-#define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1)
-
/* replace some string functions with multi-byte
versions */
#define strlower(s) strlower_m(s)
diff --git a/source4/include/smb_interfaces.h b/source4/include/smb_interfaces.h
deleted file mode 100644
index 49fe085f2c..0000000000
--- a/source4/include/smb_interfaces.h
+++ /dev/null
@@ -1,2035 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
- SMB request interface structures
- Copyright (C) Andrew Tridgell 2003
- Copyright (C) James J Myers 2003 <myersjj@samba.org>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-
-
-/* this structure is just a wrapper for a string, the only reason we
- bother with this is that it allows us to check the length provided
- on the wire in testsuite test code to ensure that we are
- terminating names in the same way that win2003 is. The *ONLY* time
- you should ever look at the 'private_length' field in this
- structure is inside compliance test code, in all other cases just
- use the null terminated char* as the definitive definition of the
- string
-
- also note that this structure is only used in packets where there
- is an explicit length provided on the wire (hence the name). That
- length is placed in 'private_length'. For packets where the length
- is always determined by NULL or packet termination a normal char*
- is used in the structure definition.
- */
-typedef struct {
- uint32_t private_length;
- const char *s;
-} WIRE_STRING;
-
-
-/*
- use the same structure for dom_sid2 as dom_sid. A dom_sid2 is really
- just a dom sid, but with the sub_auths represented as a conformant
- array. As with all in-structure conformant arrays, the array length
- is placed before the start of the structure. That's what gives rise
- to the extra num_auths elemenent. We don't want the Samba code to
- have to bother with such esoteric NDR details, so its easier to just
- define it as a dom_sid and use pidl magic to make it all work. It
- just means you need to mark a sid as a "dom_sid2" in the IDL when you
- know it is of the conformant array variety
-*/
-#define dom_sid2 dom_sid
-
-/* same struct as dom_sid but inside a 28 bytes fixed buffer in NDR */
-#define dom_sid28 dom_sid
-
-
-/*
- this header defines the structures and unions used between the SMB
- parser and the backends.
-*/
-
-/* struct used for SMBlseek call */
-struct smb_seek {
- struct {
- uint16_t fnum;
- uint16_t mode;
- int32_t offset; /* signed */
- } in;
- struct {
- int32_t offset;
- } out;
-};
-
-
-/* struct used in unlink() call */
-struct smb_unlink {
- struct {
- const char *pattern;
- uint16_t attrib;
- } in;
-};
-
-
-/* struct used in chkpath() call */
-struct smb_chkpath {
- struct {
- const char *path;
- } in;
-};
-
-enum smb_mkdir_level {RAW_MKDIR_GENERIC, RAW_MKDIR_MKDIR, RAW_MKDIR_T2MKDIR};
-
-/* union used in mkdir() call */
-union smb_mkdir {
- /* generic level */
- struct {
- enum smb_mkdir_level level;
- } generic;
-
- struct {
- enum smb_mkdir_level level;
- struct {
- const char *path;
- } in;
- } mkdir;
-
- struct {
- enum smb_mkdir_level level;
- struct {
- const char *path;
- uint_t num_eas;
- struct ea_struct *eas;
- } in;
- } t2mkdir;
-};
-
-/* struct used in rmdir() call */
-struct smb_rmdir {
- struct {
- const char *path;
- } in;
-};
-
-/* struct used in rename() call */
-enum smb_rename_level {RAW_RENAME_RENAME, RAW_RENAME_NTRENAME};
-
-union smb_rename {
- struct {
- enum smb_rename_level level;
- } generic;
-
- /* SMBrename interface */
- struct {
- enum smb_rename_level level;
-
- struct {
- const char *pattern1;
- const char *pattern2;
- uint16_t attrib;
- } in;
- } rename;
-
-
- /* SMBntrename interface */
- struct {
- enum smb_rename_level level;
-
- struct {
- uint16_t attrib;
- uint16_t flags; /* see RENAME_FLAG_* */
- uint32_t cluster_size;
- const char *old_name;
- const char *new_name;
- } in;
- } ntrename;
-};
-
-enum smb_tcon_level {RAW_TCON_TCON, RAW_TCON_TCONX};
-
-/* union used in tree connect call */
-union smb_tcon {
- /* generic interface */
- struct {
- enum smb_tcon_level level;
- } generic;
-
- /* SMBtcon interface */
- struct {
- enum smb_tcon_level level;
-
- struct {
- const char *service;
- const char *password;
- const char *dev;
- } in;
- struct {
- uint16_t max_xmit;
- uint16_t tid;
- } out;
- } tcon;
-
- /* SMBtconX interface */
- struct {
- enum smb_tcon_level level;
-
- struct {
- uint16_t flags;
- DATA_BLOB password;
- const char *path;
- const char *device;
- } in;
- struct {
- uint16_t options;
- char *dev_type;
- char *fs_type;
- uint16_t tid;
- } out;
- } tconx;
-};
-
-
-enum smb_sesssetup_level {RAW_SESSSETUP_OLD, RAW_SESSSETUP_NT1, RAW_SESSSETUP_SPNEGO};
-
-/* union used in session_setup call */
-union smb_sesssetup {
- /* the pre-NT1 interface */
- struct {
- enum smb_sesssetup_level level;
-
- struct {
- uint16_t bufsize;
- uint16_t mpx_max;
- uint16_t vc_num;
- uint32_t sesskey;
- DATA_BLOB password;
- const char *user;
- const char *domain;
- const char *os;
- const char *lanman;
- } in;
- struct {
- uint16_t action;
- uint16_t vuid;
- char *os;
- char *lanman;
- char *domain;
- } out;
- } old;
-
- /* the NT1 interface */
- struct {
- enum smb_sesssetup_level level;
-
- struct {
- uint16_t bufsize;
- uint16_t mpx_max;
- uint16_t vc_num;
- uint32_t sesskey;
- uint32_t capabilities;
- DATA_BLOB password1;
- DATA_BLOB password2;
- const char *user;
- const char *domain;
- const char *os;
- const char *lanman;
- } in;
- struct {
- uint16_t action;
- uint16_t vuid;
- char *os;
- char *lanman;
- char *domain;
- } out;
- } nt1;
-
-
- /* the SPNEGO interface */
- struct {
- enum smb_sesssetup_level level;
-
- struct {
- uint16_t bufsize;
- uint16_t mpx_max;
- uint16_t vc_num;
- uint32_t sesskey;
- uint32_t capabilities;
- DATA_BLOB secblob;
- const char *os;
- const char *lanman;
- const char *workgroup;
- } in;
- struct {
- uint16_t action;
- DATA_BLOB secblob;
- char *os;
- char *lanman;
- char *workgroup;
- uint16_t vuid;
- } out;
- } spnego;
-};
-
-/* Note that the specified enum values are identical to the actual info-levels used
- * on the wire.
- */
-enum smb_fileinfo_level {
- RAW_FILEINFO_GENERIC = 0xF000,
- RAW_FILEINFO_GETATTR, /* SMBgetatr */
- RAW_FILEINFO_GETATTRE, /* SMBgetattrE */
- RAW_FILEINFO_SEC_DESC, /* NT_TRANSACT_QUERY_SECURITY_DESC */
- RAW_FILEINFO_STANDARD = SMB_QFILEINFO_STANDARD,
- RAW_FILEINFO_EA_SIZE = SMB_QFILEINFO_EA_SIZE,
- RAW_FILEINFO_EA_LIST = SMB_QFILEINFO_EA_LIST,
- RAW_FILEINFO_ALL_EAS = SMB_QFILEINFO_ALL_EAS,
- RAW_FILEINFO_IS_NAME_VALID = SMB_QFILEINFO_IS_NAME_VALID,
- RAW_FILEINFO_BASIC_INFO = SMB_QFILEINFO_BASIC_INFO,
- RAW_FILEINFO_STANDARD_INFO = SMB_QFILEINFO_STANDARD_INFO,
- RAW_FILEINFO_EA_INFO = SMB_QFILEINFO_EA_INFO,
- RAW_FILEINFO_NAME_INFO = SMB_QFILEINFO_NAME_INFO,
- RAW_FILEINFO_ALL_INFO = SMB_QFILEINFO_ALL_INFO,
- RAW_FILEINFO_ALT_NAME_INFO = SMB_QFILEINFO_ALT_NAME_INFO,
- RAW_FILEINFO_STREAM_INFO = SMB_QFILEINFO_STREAM_INFO,
- RAW_FILEINFO_COMPRESSION_INFO = SMB_QFILEINFO_COMPRESSION_INFO,
- RAW_FILEINFO_UNIX_BASIC = SMB_QFILEINFO_UNIX_BASIC,
- RAW_FILEINFO_UNIX_LINK = SMB_QFILEINFO_UNIX_LINK,
- RAW_FILEINFO_BASIC_INFORMATION = SMB_QFILEINFO_BASIC_INFORMATION,
- RAW_FILEINFO_STANDARD_INFORMATION = SMB_QFILEINFO_STANDARD_INFORMATION,
- RAW_FILEINFO_INTERNAL_INFORMATION = SMB_QFILEINFO_INTERNAL_INFORMATION,
- RAW_FILEINFO_EA_INFORMATION = SMB_QFILEINFO_EA_INFORMATION,
- RAW_FILEINFO_ACCESS_INFORMATION = SMB_QFILEINFO_ACCESS_INFORMATION,
- RAW_FILEINFO_NAME_INFORMATION = SMB_QFILEINFO_NAME_INFORMATION,
- RAW_FILEINFO_POSITION_INFORMATION = SMB_QFILEINFO_POSITION_INFORMATION,
- RAW_FILEINFO_MODE_INFORMATION = SMB_QFILEINFO_MODE_INFORMATION,
- RAW_FILEINFO_ALIGNMENT_INFORMATION = SMB_QFILEINFO_ALIGNMENT_INFORMATION,
- RAW_FILEINFO_ALL_INFORMATION = SMB_QFILEINFO_ALL_INFORMATION,
- RAW_FILEINFO_ALT_NAME_INFORMATION = SMB_QFILEINFO_ALT_NAME_INFORMATION,
- RAW_FILEINFO_STREAM_INFORMATION = SMB_QFILEINFO_STREAM_INFORMATION,
- RAW_FILEINFO_COMPRESSION_INFORMATION = SMB_QFILEINFO_COMPRESSION_INFORMATION,
- RAW_FILEINFO_NETWORK_OPEN_INFORMATION = SMB_QFILEINFO_NETWORK_OPEN_INFORMATION,
- RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION = SMB_QFILEINFO_ATTRIBUTE_TAG_INFORMATION,
- /* SMB2 specific levels */
- RAW_FILEINFO_SMB2_ALL_EAS = 0x0f01,
- RAW_FILEINFO_SMB2_ALL_INFORMATION = 0x1201
-};
-
-/*
- file handles in SMB2 are 16 bytes
-*/
-struct smb2_handle {
- uint64_t data[2];
-};
-
-
-/* union used in qfileinfo() and qpathinfo() backend calls */
-union smb_fileinfo {
- /* generic interface:
- * matches RAW_FILEINFO_GENERIC */
- struct {
- enum smb_fileinfo_level level;
-
- /* each level can be called on either a pathname or a
- filename, in either case the return format is
- identical
- On SMB2 a 16 byte handle is used
- */
- union smb_fileinfo_in {
- const char *fname;
- uint16_t fnum;
- struct smb2_handle handle;
- } in;
-
- struct {
- uint32_t attrib;
- uint32_t ea_size;
- uint_t num_eas;
- struct ea_struct {
- uint8_t flags;
- WIRE_STRING name;
- DATA_BLOB value;
- } *eas;
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint64_t alloc_size;
- uint64_t size;
- uint32_t nlink;
- WIRE_STRING fname;
- WIRE_STRING alt_fname;
- uint8_t delete_pending;
- uint8_t directory;
- uint64_t compressed_size;
- uint16_t format;
- uint8_t unit_shift;
- uint8_t chunk_shift;
- uint8_t cluster_shift;
- uint64_t file_id;
- uint32_t access_flags; /* seen 0x001f01ff from w2k3 */
- uint64_t position;
- uint32_t mode;
- uint32_t alignment_requirement;
- uint32_t reparse_tag;
- uint_t num_streams;
- struct stream_struct {
- uint64_t size;
- uint64_t alloc_size;
- WIRE_STRING stream_name;
- } *streams;
- } out;
- } generic;
-
-
- /* SMBgetatr interface:
- * matches RAW_FILEINFO_GETATTR */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint16_t attrib;
- uint32_t size;
- time_t write_time;
- } out;
- } getattr;
-
- /* SMBgetattrE and RAW_FILEINFO_STANDARD interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- time_t create_time;
- time_t access_time;
- time_t write_time;
- uint32_t size;
- uint32_t alloc_size;
- uint16_t attrib;
- } out;
- } getattre, standard;
-
- /* trans2 RAW_FILEINFO_EA_SIZE interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- time_t create_time;
- time_t access_time;
- time_t write_time;
- uint32_t size;
- uint32_t alloc_size;
- uint16_t attrib;
- uint32_t ea_size;
- } out;
- } ea_size;
-
- /* trans2 RAW_FILEINFO_EA_LIST interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in file;
-
- struct {
- uint_t num_names;
- struct ea_name {
- WIRE_STRING name;
- } *ea_names;
- } in;
-
- struct smb_ea_list {
- uint_t num_eas;
- struct ea_struct *eas;
- } out;
- } ea_list;
-
- /* trans2 RAW_FILEINFO_ALL_EAS and RAW_FILEINFO_FULL_EA_INFORMATION interfaces */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
- uint8_t continue_flags; /* SMB2 only - SMB2_CONTINUE_FLAG_* */
-
- struct smb_ea_list out;
- } all_eas;
-
- /* trans2 qpathinfo RAW_FILEINFO_IS_NAME_VALID interface
- only valid for a QPATHNAME call - no returned data */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
- } is_name_valid;
-
- /* RAW_FILEINFO_BASIC_INFO and RAW_FILEINFO_BASIC_INFORMATION interfaces */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint32_t attrib;
- } out;
- } basic_info;
-
-
- /* RAW_FILEINFO_STANDARD_INFO and RAW_FILEINFO_STANDARD_INFORMATION interfaces */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint64_t alloc_size;
- uint64_t size;
- uint32_t nlink;
- BOOL delete_pending;
- BOOL directory;
- } out;
- } standard_info;
-
- /* RAW_FILEINFO_EA_INFO and RAW_FILEINFO_EA_INFORMATION interfaces */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint32_t ea_size;
- } out;
- } ea_info;
-
- /* RAW_FILEINFO_NAME_INFO and RAW_FILEINFO_NAME_INFORMATION interfaces */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- WIRE_STRING fname;
- } out;
- } name_info;
-
- /* RAW_FILEINFO_ALL_INFO and RAW_FILEINFO_ALL_INFORMATION interfaces */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint32_t attrib;
- uint64_t alloc_size;
- uint64_t size;
- uint32_t nlink;
- uint8_t delete_pending;
- uint8_t directory;
- uint32_t ea_size;
- WIRE_STRING fname;
- } out;
- } all_info;
-
- /* RAW_FILEINFO_SMB2_ALL_INFORMATION interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint32_t attrib;
- uint32_t unknown1;
- uint64_t alloc_size;
- uint64_t size;
- uint32_t nlink;
- uint8_t delete_pending;
- uint8_t directory;
- /* uint16_t _pad; */
- uint64_t file_id;
- uint32_t ea_size;
- uint32_t access_mask;
- uint64_t position;
- uint64_t mode;
- WIRE_STRING fname;
- } out;
- } all_info2;
-
- /* RAW_FILEINFO_ALT_NAME_INFO and RAW_FILEINFO_ALT_NAME_INFORMATION interfaces */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- WIRE_STRING fname;
- } out;
- } alt_name_info;
-
- /* RAW_FILEINFO_STREAM_INFO and RAW_FILEINFO_STREAM_INFORMATION interfaces */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct stream_information {
- uint_t num_streams;
- struct stream_struct *streams;
- } out;
- } stream_info;
-
- /* RAW_FILEINFO_COMPRESSION_INFO and RAW_FILEINFO_COMPRESSION_INFORMATION interfaces */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint64_t compressed_size;
- uint16_t format;
- uint8_t unit_shift;
- uint8_t chunk_shift;
- uint8_t cluster_shift;
- } out;
- } compression_info;
-
- /* RAW_FILEINFO_UNIX_BASIC interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint64_t end_of_file;
- uint64_t num_bytes;
- NTTIME status_change_time;
- NTTIME access_time;
- NTTIME change_time;
- uint64_t uid;
- uint64_t gid;
- uint32_t file_type;
- uint64_t dev_major;
- uint64_t dev_minor;
- uint64_t unique_id;
- uint64_t permissions;
- uint64_t nlink;
- } out;
- } unix_basic_info;
-
- /* RAW_FILEINFO_UNIX_LINK interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- WIRE_STRING link_dest;
- } out;
- } unix_link_info;
-
- /* RAW_FILEINFO_INTERNAL_INFORMATION interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint64_t file_id;
- } out;
- } internal_information;
-
- /* RAW_FILEINFO_ACCESS_INFORMATION interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint32_t access_flags;
- } out;
- } access_information;
-
- /* RAW_FILEINFO_POSITION_INFORMATION interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint64_t position;
- } out;
- } position_information;
-
- /* RAW_FILEINFO_MODE_INFORMATION interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint32_t mode;
- } out;
- } mode_information;
-
- /* RAW_FILEINFO_ALIGNMENT_INFORMATION interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint32_t alignment_requirement;
- } out;
- } alignment_information;
-
- /* RAW_FILEINFO_NETWORK_OPEN_INFORMATION interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint64_t alloc_size;
- uint64_t size;
- uint32_t attrib;
- } out;
- } network_open_information;
-
-
- /* RAW_FILEINFO_ATTRIBUTE_TAG_INFORMATION interface */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
-
- struct {
- uint32_t attrib;
- uint32_t reparse_tag;
- } out;
- } attribute_tag_information;
-
- /* RAW_FILEINFO_SEC_DESC */
- struct {
- enum smb_fileinfo_level level;
- union smb_fileinfo_in in;
- uint32_t secinfo_flags;
- struct {
- struct security_descriptor *sd;
- } out;
- } query_secdesc;
-};
-
-
-enum smb_setfileinfo_level {
- RAW_SFILEINFO_GENERIC = 0xF000,
- RAW_SFILEINFO_SETATTR, /* SMBsetatr */
- RAW_SFILEINFO_SETATTRE, /* SMBsetattrE */
- RAW_SFILEINFO_SEC_DESC, /* NT_TRANSACT_SET_SECURITY_DESC */
- RAW_SFILEINFO_STANDARD = SMB_SFILEINFO_STANDARD,
- RAW_SFILEINFO_EA_SET = SMB_SFILEINFO_EA_SET,
- RAW_SFILEINFO_BASIC_INFO = SMB_SFILEINFO_BASIC_INFO,
- RAW_SFILEINFO_DISPOSITION_INFO = SMB_SFILEINFO_DISPOSITION_INFO,
- RAW_SFILEINFO_ALLOCATION_INFO = SMB_SFILEINFO_ALLOCATION_INFO,
- RAW_SFILEINFO_END_OF_FILE_INFO = SMB_SFILEINFO_END_OF_FILE_INFO,
- RAW_SFILEINFO_UNIX_BASIC = SMB_SFILEINFO_UNIX_BASIC,
- RAW_SFILEINFO_UNIX_LINK = SMB_SFILEINFO_UNIX_LINK,
- RAW_SFILEINFO_UNIX_HLINK = SMB_SFILEINFO_UNIX_HLINK,
- RAW_SFILEINFO_BASIC_INFORMATION = SMB_SFILEINFO_BASIC_INFORMATION,
- RAW_SFILEINFO_RENAME_INFORMATION = SMB_SFILEINFO_RENAME_INFORMATION,
- RAW_SFILEINFO_DISPOSITION_INFORMATION = SMB_SFILEINFO_DISPOSITION_INFORMATION,
- RAW_SFILEINFO_POSITION_INFORMATION = SMB_SFILEINFO_POSITION_INFORMATION,
- RAW_SFILEINFO_MODE_INFORMATION = SMB_SFILEINFO_MODE_INFORMATION,
- RAW_SFILEINFO_ALLOCATION_INFORMATION = SMB_SFILEINFO_ALLOCATION_INFORMATION,
- RAW_SFILEINFO_END_OF_FILE_INFORMATION = SMB_SFILEINFO_END_OF_FILE_INFORMATION,
- RAW_SFILEINFO_1023 = SMB_SFILEINFO_1023,
- RAW_SFILEINFO_1025 = SMB_SFILEINFO_1025,
- RAW_SFILEINFO_1029 = SMB_SFILEINFO_1029,
- RAW_SFILEINFO_1032 = SMB_SFILEINFO_1032,
- RAW_SFILEINFO_1039 = SMB_SFILEINFO_1039,
- RAW_SFILEINFO_1040 = SMB_SFILEINFO_1040
-};
-
-/* union used in setfileinfo() and setpathinfo() calls */
-union smb_setfileinfo {
- /* generic interface */
- struct {
- enum smb_setfileinfo_level level;
-
- /* we are combining setfileinfo and setpathinfo into one
- interface */
- union setfileinfo_file {
- const char *fname;
- uint16_t fnum;
- struct smb2_handle handle; /* only for SMB2 */
- } file;
- } generic;
-
- /* RAW_SFILEINFO_SETATTR (SMBsetatr) interface - only via setpathinfo() */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
- struct {
- uint16_t attrib;
- time_t write_time;
- } in;
- } setattr;
-
- /* RAW_SFILEINFO_SETATTRE (SMBsetattrE) interface - only via setfileinfo()
- also RAW_SFILEINFO_STANDARD */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
-
- struct {
- time_t create_time;
- time_t access_time;
- time_t write_time;
- /* notice that size, alloc_size and attrib are not settable,
- unlike the corresponding qfileinfo level */
- } in;
- } setattre, standard;
-
- /* RAW_SFILEINFO_EA_SET interface */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
- struct {
- uint_t num_eas;
- struct ea_struct *eas;
- } in;
- } ea_set;
-
- /* RAW_SFILEINFO_BASIC_INFO and
- RAW_SFILEINFO_BASIC_INFORMATION interfaces */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
-
- struct {
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint32_t attrib;
- } in;
- } basic_info;
-
- /* RAW_SFILEINFO_DISPOSITION_INFO and
- RAW_SFILEINFO_DISPOSITION_INFORMATION interfaces */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
-
- struct {
- BOOL delete_on_close;
- } in;
- } disposition_info;
-
- /* RAW_SFILEINFO_ALLOCATION_INFO and
- RAW_SFILEINFO_ALLOCATION_INFORMATION interfaces */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
-
- struct {
- /* w2k3 rounds this up to nearest 4096 */
- uint64_t alloc_size;
- } in;
- } allocation_info;
-
- /* RAW_SFILEINFO_END_OF_FILE_INFO and
- RAW_SFILEINFO_END_OF_FILE_INFORMATION interfaces */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
-
- struct {
- uint64_t size;
- } in;
- } end_of_file_info;
-
- /* RAW_SFILEINFO_RENAME_INFORMATION interface */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
-
- struct smb_rename_information {
- uint8_t overwrite;
- uint32_t root_fid;
- const char *new_name;
- } in;
- } rename_information;
-
- /* RAW_SFILEINFO_POSITION_INFORMATION interface */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
-
- struct {
- uint64_t position;
- } in;
- } position_information;
-
- /* RAW_SFILEINFO_MODE_INFORMATION interface */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
-
- struct {
- /* valid values seem to be 0, 2, 4 and 6 */
- uint32_t mode;
- } in;
- } mode_information;
-
-
-
- /* RAW_SFILEINFO_UNIX_BASIC interface */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
- struct {
- uint32_t mode; /* yuck - this field remains to fix compile of libcli/clifile.c */
- uint64_t end_of_file;
- uint64_t num_bytes;
- NTTIME status_change_time;
- NTTIME access_time;
- NTTIME change_time;
- uint64_t uid;
- uint64_t gid;
- uint32_t file_type;
- uint64_t dev_major;
- uint64_t dev_minor;
- uint64_t unique_id;
- uint64_t permissions;
- uint64_t nlink;
- } in;
- } unix_basic;
-
- /* RAW_SFILEINFO_UNIX_LINK, RAW_SFILEINFO_UNIX_HLINK interface */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
- struct {
- const char *link_dest;
- } in;
- } unix_link, unix_hlink;
-
- /* RAW_FILEINFO_SET_SEC_DESC */
- struct {
- enum smb_setfileinfo_level level;
- union setfileinfo_file file;
- struct {
- uint32_t secinfo_flags;
- struct security_descriptor *sd;
- } in;
- } set_secdesc;
-};
-
-
-enum smb_fsinfo_level {
- RAW_QFS_GENERIC = 0xF000,
- RAW_QFS_DSKATTR, /* SMBdskattr */
- RAW_QFS_ALLOCATION = SMB_QFS_ALLOCATION,
- RAW_QFS_VOLUME = SMB_QFS_VOLUME,
- RAW_QFS_VOLUME_INFO = SMB_QFS_VOLUME_INFO,
- RAW_QFS_SIZE_INFO = SMB_QFS_SIZE_INFO,
- RAW_QFS_DEVICE_INFO = SMB_QFS_DEVICE_INFO,
- RAW_QFS_ATTRIBUTE_INFO = SMB_QFS_ATTRIBUTE_INFO,
- RAW_QFS_UNIX_INFO = SMB_QFS_UNIX_INFO,
- RAW_QFS_VOLUME_INFORMATION = SMB_QFS_VOLUME_INFORMATION,
- RAW_QFS_SIZE_INFORMATION = SMB_QFS_SIZE_INFORMATION,
- RAW_QFS_DEVICE_INFORMATION = SMB_QFS_DEVICE_INFORMATION,
- RAW_QFS_ATTRIBUTE_INFORMATION = SMB_QFS_ATTRIBUTE_INFORMATION,
- RAW_QFS_QUOTA_INFORMATION = SMB_QFS_QUOTA_INFORMATION,
- RAW_QFS_FULL_SIZE_INFORMATION = SMB_QFS_FULL_SIZE_INFORMATION,
- RAW_QFS_OBJECTID_INFORMATION = SMB_QFS_OBJECTID_INFORMATION};
-
-
-/* union for fsinfo() backend call. Note that there are no in
- structures, as this call only contains out parameters */
-union smb_fsinfo {
- /* generic interface */
- struct {
- enum smb_fsinfo_level level;
- struct smb2_handle handle; /* only for smb2 */
-
- struct {
- uint32_t block_size;
- uint64_t blocks_total;
- uint64_t blocks_free;
- uint32_t fs_id;
- NTTIME create_time;
- uint32_t serial_number;
- uint32_t fs_attr;
- uint32_t max_file_component_length;
- uint32_t device_type;
- uint32_t device_characteristics;
- uint64_t quota_soft;
- uint64_t quota_hard;
- uint64_t quota_flags;
- struct GUID guid;
- char *volume_name;
- char *fs_type;
- } out;
- } generic;
-
- /* SMBdskattr interface */
- struct {
- enum smb_fsinfo_level level;
-
- struct {
- uint16_t units_total;
- uint16_t blocks_per_unit;
- uint16_t block_size;
- uint16_t units_free;
- } out;
- } dskattr;
-
- /* trans2 RAW_QFS_ALLOCATION interface */
- struct {
- enum smb_fsinfo_level level;
-
- struct {
- uint32_t fs_id;
- uint32_t sectors_per_unit;
- uint32_t total_alloc_units;
- uint32_t avail_alloc_units;
- uint16_t bytes_per_sector;
- } out;
- } allocation;
-
- /* TRANS2 RAW_QFS_VOLUME interface */
- struct {
- enum smb_fsinfo_level level;
-
- struct {
- uint32_t serial_number;
- WIRE_STRING volume_name;
- } out;
- } volume;
-
- /* TRANS2 RAW_QFS_VOLUME_INFO and RAW_QFS_VOLUME_INFORMATION interfaces */
- struct {
- enum smb_fsinfo_level level;
- struct smb2_handle handle; /* only for smb2 */
-
- struct {
- NTTIME create_time;
- uint32_t serial_number;
- WIRE_STRING volume_name;
- } out;
- } volume_info;
-
- /* trans2 RAW_QFS_SIZE_INFO and RAW_QFS_SIZE_INFORMATION interfaces */
- struct {
- enum smb_fsinfo_level level;
- struct smb2_handle handle; /* only for smb2 */
-
- struct {
- uint64_t total_alloc_units;
- uint64_t avail_alloc_units; /* maps to call_avail_alloc_units */
- uint32_t sectors_per_unit;
- uint32_t bytes_per_sector;
- } out;
- } size_info;
-
- /* TRANS2 RAW_QFS_DEVICE_INFO and RAW_QFS_DEVICE_INFORMATION interfaces */
- struct {
- enum smb_fsinfo_level level;
- struct smb2_handle handle; /* only for smb2 */
-
- struct {
- uint32_t device_type;
- uint32_t characteristics;
- } out;
- } device_info;
-
-
- /* TRANS2 RAW_QFS_ATTRIBUTE_INFO and RAW_QFS_ATTRIBUTE_INFORMATION interfaces */
- struct {
- enum smb_fsinfo_level level;
- struct smb2_handle handle; /* only for smb2 */
-
- struct {
- uint32_t fs_attr;
- uint32_t max_file_component_length;
- WIRE_STRING fs_type;
- } out;
- } attribute_info;
-
-
- /* TRANS2 RAW_QFS_UNIX_INFO interface */
- struct {
- enum smb_fsinfo_level level;
-
- struct {
- uint16_t major_version;
- uint16_t minor_version;
- uint64_t capability;
- } out;
- } unix_info;
-
- /* trans2 RAW_QFS_QUOTA_INFORMATION interface */
- struct {
- enum smb_fsinfo_level level;
- struct smb2_handle handle; /* only for smb2 */
-
- struct {
- uint64_t unknown[3];
- uint64_t quota_soft;
- uint64_t quota_hard;
- uint64_t quota_flags;
- } out;
- } quota_information;
-
- /* trans2 RAW_QFS_FULL_SIZE_INFORMATION interface */
- struct {
- enum smb_fsinfo_level level;
- struct smb2_handle handle; /* only for smb2 */
-
- struct {
- uint64_t total_alloc_units;
- uint64_t call_avail_alloc_units;
- uint64_t actual_avail_alloc_units;
- uint32_t sectors_per_unit;
- uint32_t bytes_per_sector;
- } out;
- } full_size_information;
-
- /* trans2 RAW_QFS_OBJECTID_INFORMATION interface */
- struct {
- enum smb_fsinfo_level level;
- struct smb2_handle handle; /* only for smb2 */
-
- struct {
- struct GUID guid;
- uint64_t unknown[6];
- } out;
- } objectid_information;
-};
-
-
-
-enum smb_open_level {
- RAW_OPEN_OPEN, RAW_OPEN_OPENX,
- RAW_OPEN_MKNEW, RAW_OPEN_CREATE,
- RAW_OPEN_CTEMP, RAW_OPEN_SPLOPEN,
- RAW_OPEN_NTCREATEX, RAW_OPEN_T2OPEN,
- RAW_OPEN_NTTRANS_CREATE,
- RAW_OPEN_OPENX_READX};
-
-/* the generic interface is defined to be equal to the NTCREATEX interface */
-#define RAW_OPEN_GENERIC RAW_OPEN_NTCREATEX
-
-/* union for open() backend call */
-union smb_open {
- /* SMBNTCreateX interface */
- struct {
- enum smb_open_level level;
-
- struct {
- uint32_t flags;
- uint32_t root_fid;
- uint32_t access_mask;
- uint64_t alloc_size;
- uint32_t file_attr;
- uint32_t share_access;
- uint32_t open_disposition;
- uint32_t create_options;
- uint32_t impersonation;
- uint8_t security_flags;
- /* NOTE: fname can also be a pointer to a
- uint64_t file_id if create_options has the
- NTCREATEX_OPTIONS_OPEN_BY_FILE_ID flag set */
- const char *fname;
-
- /* these last 2 elements are only used in the
- NTTRANS varient of the call */
- struct security_descriptor *sec_desc;
- struct smb_ea_list *ea_list;
- } in;
-
- struct {
- uint8_t oplock_level;
- uint16_t fnum;
- uint32_t create_action;
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint32_t attrib;
- uint64_t alloc_size;
- uint64_t size;
- uint16_t file_type;
- uint16_t ipc_state;
- uint8_t is_directory;
- } out;
- } ntcreatex, generic;
-
- /* TRANS2_OPEN interface */
- struct {
- enum smb_open_level level;
-
- struct {
- uint16_t flags;
- uint16_t open_mode;
- uint16_t search_attrs;
- uint16_t file_attrs;
- time_t write_time;
- uint16_t open_func;
- uint32_t size;
- uint32_t timeout;
- const char *fname;
- uint_t num_eas;
- struct ea_struct *eas;
- } in;
-
- struct {
- uint16_t fnum;
- uint16_t attrib;
- time_t write_time;
- uint32_t size;
- uint16_t access;
- uint16_t ftype;
- uint16_t devstate;
- uint16_t action;
- uint32_t file_id;
- } out;
- } t2open;
-
- /* SMBopen interface */
- struct {
- enum smb_open_level level;
-
- struct {
- uint16_t open_mode;
- uint16_t search_attrs;
- const char *fname;
- } in;
- struct {
- uint16_t fnum;
- uint16_t attrib;
- time_t write_time;
- uint32_t size;
- uint16_t rmode;
- } out;
- } openold;
-
- /* SMBopenX interface */
- struct {
- enum smb_open_level level;
-
- struct {
- uint16_t flags;
- uint16_t open_mode;
- uint16_t search_attrs; /* not honoured by win2003 */
- uint16_t file_attrs;
- time_t write_time; /* not honoured by win2003 */
- uint16_t open_func;
- uint32_t size; /* note that this sets the
- initial file size, not
- just allocation size */
- uint32_t timeout; /* not honoured by win2003 */
- const char *fname;
- } in;
- struct {
- uint16_t fnum;
- uint16_t attrib;
- time_t write_time;
- uint32_t size;
- uint16_t access;
- uint16_t ftype;
- uint16_t devstate;
- uint16_t action;
- uint32_t unique_fid;
- uint32_t access_mask;
- uint32_t unknown;
- } out;
- } openx;
-
- /* SMBmknew interface */
- struct {
- enum smb_open_level level;
-
- struct {
- uint16_t attrib;
- time_t write_time;
- const char *fname;
- } in;
- struct {
- uint16_t fnum;
- } out;
- } mknew, create;
-
- /* SMBctemp interface */
- struct {
- enum smb_open_level level;
-
- struct {
- uint16_t attrib;
- time_t write_time;
- const char *directory;
- } in;
- struct {
- uint16_t fnum;
- /* temp name, relative to directory */
- char *name;
- } out;
- } ctemp;
-
- /* SMBsplopen interface */
- struct {
- enum smb_open_level level;
-
- struct {
- uint16_t setup_length;
- uint16_t mode;
- const char *ident;
- } in;
- struct {
- uint16_t fnum;
- } out;
- } splopen;
-
-
- /* chained OpenX/ReadX interface */
- struct {
- enum smb_open_level level;
-
- struct {
- uint16_t flags;
- uint16_t open_mode;
- uint16_t search_attrs; /* not honoured by win2003 */
- uint16_t file_attrs;
- time_t write_time; /* not honoured by win2003 */
- uint16_t open_func;
- uint32_t size; /* note that this sets the
- initial file size, not
- just allocation size */
- uint32_t timeout; /* not honoured by win2003 */
- const char *fname;
-
- /* readx part */
- uint64_t offset;
- uint16_t mincnt;
- uint32_t maxcnt;
- uint16_t remaining;
- } in;
- struct {
- uint16_t fnum;
- uint16_t attrib;
- time_t write_time;
- uint32_t size;
- uint16_t access;
- uint16_t ftype;
- uint16_t devstate;
- uint16_t action;
- uint32_t unique_fid;
- uint32_t access_mask;
- uint32_t unknown;
-
- /* readx part */
- uint8_t *data;
- uint16_t remaining;
- uint16_t compaction_mode;
- uint16_t nread;
- } out;
- } openxreadx;
-};
-
-
-
-enum smb_read_level {RAW_READ_READBRAW, RAW_READ_LOCKREAD, RAW_READ_READ, RAW_READ_READX};
-
-#define RAW_READ_GENERIC RAW_READ_READX
-
-/* union for read() backend call
-
- note that .infoX.out.data will be allocated before the backend is
- called. It will be big enough to hold the maximum size asked for
-*/
-union smb_read {
- /* SMBreadX (and generic) interface */
- struct {
- enum smb_read_level level;
-
- struct {
- uint16_t fnum;
- uint64_t offset;
- uint16_t mincnt;
- uint32_t maxcnt;
- uint16_t remaining;
- } in;
- struct {
- uint8_t *data;
- uint16_t remaining;
- uint16_t compaction_mode;
- uint16_t nread;
- } out;
- } readx, generic;
-
- /* SMBreadbraw interface */
- struct {
- enum smb_read_level level;
-
- struct {
- uint16_t fnum;
- uint64_t offset;
- uint16_t maxcnt;
- uint16_t mincnt;
- uint32_t timeout;
- } in;
- struct {
- uint8_t *data;
- uint32_t nread;
- } out;
- } readbraw;
-
-
- /* SMBlockandread interface */
- struct {
- enum smb_read_level level;
-
- struct {
- uint16_t fnum;
- uint16_t count;
- uint32_t offset;
- uint16_t remaining;
- } in;
- struct {
- uint8_t *data;
- uint16_t nread;
- } out;
- } lockread;
-
- /* SMBread interface */
- struct {
- enum smb_read_level level;
-
- struct {
- uint16_t fnum;
- uint16_t count;
- uint32_t offset;
- uint16_t remaining;
- } in;
- struct {
- uint8_t *data;
- uint16_t nread;
- } out;
- } read;
-};
-
-
-enum smb_write_level {RAW_WRITE_WRITEUNLOCK, RAW_WRITE_WRITE,
- RAW_WRITE_WRITEX, RAW_WRITE_WRITECLOSE,
- RAW_WRITE_SPLWRITE};
-
-#define RAW_WRITE_GENERIC RAW_WRITE_WRITEX
-
-/* union for write() backend call
-*/
-union smb_write {
- /* SMBwriteX interface */
- struct {
- enum smb_write_level level;
-
- struct {
- uint16_t fnum;
- uint64_t offset;
- uint16_t wmode;
- uint16_t remaining;
- uint32_t count;
- const uint8_t *data;
- } in;
- struct {
- uint32_t nwritten;
- uint16_t remaining;
- } out;
- } writex, generic;
-
- /* SMBwriteunlock interface */
- struct {
- enum smb_write_level level;
-
- struct {
- uint16_t fnum;
- uint16_t count;
- uint32_t offset;
- uint16_t remaining;
- const uint8_t *data;
- } in;
- struct {
- uint32_t nwritten;
- } out;
- } writeunlock;
-
- /* SMBwrite interface */
- struct {
- enum smb_write_level level;
-
- struct {
- uint16_t fnum;
- uint16_t count;
- uint32_t offset;
- uint16_t remaining;
- const uint8_t *data;
- } in;
- struct {
- uint16_t nwritten;
- } out;
- } write;
-
- /* SMBwriteclose interface */
- struct {
- enum smb_write_level level;
-
- struct {
- uint16_t fnum;
- uint16_t count;
- uint32_t offset;
- time_t mtime;
- const uint8_t *data;
- } in;
- struct {
- uint16_t nwritten;
- } out;
- } writeclose;
-
- /* SMBsplwrite interface */
- struct {
- enum smb_write_level level;
-
- struct {
- uint16_t fnum;
- uint16_t count;
- const uint8_t *data;
- } in;
- } splwrite;
-};
-
-
-enum smb_lock_level {RAW_LOCK_LOCK, RAW_LOCK_UNLOCK, RAW_LOCK_LOCKX};
-
-/* the generic interface is defined to be equal to the lockingX interface */
-#define RAW_LOCK_GENERIC RAW_LOCK_LOCKX
-
-/* union for lock() backend call
-*/
-union smb_lock {
- /* SMBlockingX (and generic) interface */
- struct {
- enum smb_lock_level level;
-
- struct {
- uint16_t fnum;
- uint16_t mode;
- uint32_t timeout;
- uint16_t ulock_cnt;
- uint16_t lock_cnt;
- struct smb_lock_entry {
- uint16_t pid;
- uint64_t offset;
- uint64_t count;
- } *locks; /* unlocks are first in the arrray */
- } in;
- } lockx, generic;
-
- /* SMBlock and SMBunlock interface */
- struct {
- enum smb_lock_level level;
-
- struct {
- uint16_t fnum;
- uint32_t count;
- uint32_t offset;
- } in;
- } lock, unlock;
-};
-
-
-enum smb_close_level {RAW_CLOSE_CLOSE, RAW_CLOSE_SPLCLOSE};
-
-#define RAW_CLOSE_GENERIC RAW_CLOSE_CLOSE
-
-/*
- union for close() backend call
-*/
-union smb_close {
- /* SMBclose (and generic) interface */
- struct {
- enum smb_close_level level;
-
- struct {
- uint16_t fnum;
- time_t write_time;
- } in;
- } close, generic;
-
- /* SMBsplclose interface - empty! */
- struct {
- enum smb_close_level level;
-
- struct {
- uint16_t fnum;
- } in;
- } splclose;
-};
-
-
-enum smb_lpq_level {RAW_LPQ_GENERIC, RAW_LPQ_RETQ};
-
-/*
- union for lpq() backend
-*/
-union smb_lpq {
- /* generic interface */
- struct {
- enum smb_lpq_level level;
-
- } generic;
-
-
- /* SMBsplretq interface */
- struct {
- enum smb_lpq_level level;
-
- struct {
- uint16_t maxcount;
- uint16_t startidx;
- } in;
- struct {
- uint16_t count;
- uint16_t restart_idx;
- struct {
- time_t time;
- uint8_t status;
- uint16_t job;
- uint32_t size;
- char *user;
- } *queue;
- } out;
- } retq;
-};
-
-enum smb_ioctl_level {RAW_IOCTL_IOCTL, RAW_IOCTL_NTIOCTL};
-
-/*
- union for ioctl() backend
-*/
-union smb_ioctl {
- /* generic interface */
- struct {
- enum smb_ioctl_level level;
-
- } generic;
-
- /* struct for SMBioctl */
- struct {
- enum smb_ioctl_level level;
- struct {
- uint16_t fnum;
- uint32_t request;
- } in;
- struct {
- DATA_BLOB blob;
- } out;
- } ioctl;
-
-
- /* struct for NT ioctl call */
- struct {
- enum smb_ioctl_level level;
- struct {
- uint32_t function;
- uint16_t fnum;
- BOOL fsctl;
- uint8_t filter;
- } in;
- struct {
- DATA_BLOB blob;
- } out;
- } ntioctl;
-};
-
-/* struct for SMBflush */
-struct smb_flush {
- struct {
- uint16_t fnum;
- } in;
-};
-
-
-/* struct for SMBcopy */
-struct smb_copy {
- struct {
- uint16_t tid2;
- uint16_t ofun;
- uint16_t flags;
- const char *path1;
- const char *path2;
- } in;
- struct {
- uint16_t count;
- } out;
-};
-
-
-/* struct for transact/transact2 call */
-struct smb_trans2 {
- struct {
- uint16_t max_param;
- uint16_t max_data;
- uint8_t max_setup;
- uint16_t flags;
- uint32_t timeout;
- uint8_t setup_count;
- uint16_t *setup;
- const char *trans_name; /* SMBtrans only */
- DATA_BLOB params;
- DATA_BLOB data;
- } in;
-
- struct {
- uint8_t setup_count;
- uint16_t *setup;
- DATA_BLOB params;
- DATA_BLOB data;
- } out;
-};
-
-/* struct for nttransact2 call */
-struct smb_nttrans {
- struct {
- uint8_t max_setup;
- uint32_t max_param;
- uint32_t max_data;
- uint32_t setup_count;
- uint16_t function;
- uint16_t *setup;
- DATA_BLOB params;
- DATA_BLOB data;
- } in;
-
- struct {
- uint8_t setup_count;
- uint16_t *setup;
- DATA_BLOB params;
- DATA_BLOB data;
- } out;
-};
-
-
-/* struct for nttrans change notify call */
-struct smb_notify {
- struct {
- uint32_t buffer_size;
- uint32_t completion_filter;
- uint16_t fnum;
- BOOL recursive;
- } in;
-
- struct {
- uint32_t num_changes;
- struct notify_changes {
- uint32_t action;
- WIRE_STRING name;
- } *changes;
- } out;
-};
-
-
-enum smb_search_level {RAW_SEARCH_GENERIC = 0xF000,
- RAW_SEARCH_SEARCH, /* SMBsearch */
- RAW_SEARCH_FFIRST, /* SMBffirst */
- RAW_SEARCH_FUNIQUE, /* SMBfunique */
- RAW_SEARCH_STANDARD = SMB_FIND_STANDARD,
- RAW_SEARCH_EA_SIZE = SMB_FIND_EA_SIZE,
- RAW_SEARCH_EA_LIST = SMB_FIND_EA_LIST,
- RAW_SEARCH_DIRECTORY_INFO = SMB_FIND_DIRECTORY_INFO,
- RAW_SEARCH_FULL_DIRECTORY_INFO = SMB_FIND_FULL_DIRECTORY_INFO,
- RAW_SEARCH_NAME_INFO = SMB_FIND_NAME_INFO,
- RAW_SEARCH_BOTH_DIRECTORY_INFO = SMB_FIND_BOTH_DIRECTORY_INFO,
- RAW_SEARCH_ID_FULL_DIRECTORY_INFO = SMB_FIND_ID_FULL_DIRECTORY_INFO,
- RAW_SEARCH_ID_BOTH_DIRECTORY_INFO = SMB_FIND_ID_BOTH_DIRECTORY_INFO,
- RAW_SEARCH_UNIX_INFO = SMB_FIND_UNIX_INFO};
-
-
-/* union for file search */
-union smb_search_first {
- struct {
- enum smb_search_level level;
- } generic;
-
- /* search (old) findfirst interface.
- Also used for ffirst and funique. */
- struct {
- enum smb_search_level level;
-
- struct {
- uint16_t max_count;
- uint16_t search_attrib;
- const char *pattern;
- } in;
- struct {
- int16_t count;
- } out;
- } search_first;
-
- /* trans2 findfirst interface */
- struct {
- enum smb_search_level level;
-
- struct {
- uint16_t search_attrib;
- uint16_t max_count;
- uint16_t flags;
- uint32_t storage_type;
- const char *pattern;
-
- /* the ea names are only used for RAW_SEARCH_EA_LIST */
- uint_t num_names;
- struct ea_name *ea_names;
- } in;
- struct {
- uint16_t handle;
- uint16_t count;
- uint16_t end_of_search;
- } out;
- } t2ffirst;
-};
-
-/* union for file search continue */
-union smb_search_next {
- struct {
- enum smb_search_level level;
- } generic;
-
- /* search (old) findnext interface. Also used
- for ffirst when continuing */
- struct {
- enum smb_search_level level;
-
- struct {
- uint16_t max_count;
- uint16_t search_attrib;
- struct smb_search_id {
- uint8_t reserved;
- char name[11];
- uint8_t handle;
- uint32_t server_cookie;
- uint32_t client_cookie;
- } id;
- } in;
- struct {
- uint16_t count;
- } out;
- } search_next;
-
- /* trans2 findnext interface */
- struct {
- enum smb_search_level level;
-
- struct {
- uint16_t handle;
- uint16_t max_count;
- uint32_t resume_key;
- uint16_t flags;
- const char *last_name;
-
- /* the ea names are only used for RAW_SEARCH_EA_LIST */
- uint_t num_names;
- struct ea_name *ea_names;
- } in;
- struct {
- uint16_t count;
- uint16_t end_of_search;
- } out;
- } t2fnext;
-};
-
-/* union for search reply file data */
-union smb_search_data {
- /* search (old) findfirst */
- struct {
- uint16_t attrib;
- time_t write_time;
- uint32_t size;
- struct smb_search_id id;
- const char *name;
- } search;
-
- /* trans2 findfirst RAW_SEARCH_STANDARD level */
- struct {
- uint32_t resume_key;
- time_t create_time;
- time_t access_time;
- time_t write_time;
- uint32_t size;
- uint32_t alloc_size;
- uint16_t attrib;
- WIRE_STRING name;
- } standard;
-
- /* trans2 findfirst RAW_SEARCH_EA_SIZE level */
- struct {
- uint32_t resume_key;
- time_t create_time;
- time_t access_time;
- time_t write_time;
- uint32_t size;
- uint32_t alloc_size;
- uint16_t attrib;
- uint32_t ea_size;
- WIRE_STRING name;
- } ea_size;
-
- /* trans2 findfirst RAW_SEARCH_EA_LIST level */
- struct {
- uint32_t resume_key;
- time_t create_time;
- time_t access_time;
- time_t write_time;
- uint32_t size;
- uint32_t alloc_size;
- uint16_t attrib;
- struct smb_ea_list eas;
- WIRE_STRING name;
- } ea_list;
-
- /* RAW_SEARCH_DIRECTORY_INFO interface */
- struct {
- uint32_t file_index;
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint64_t size;
- uint64_t alloc_size;
- uint32_t attrib;
- WIRE_STRING name;
- } directory_info;
-
- /* RAW_SEARCH_FULL_DIRECTORY_INFO interface */
- struct {
- uint32_t file_index;
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint64_t size;
- uint64_t alloc_size;
- uint32_t attrib;
- uint32_t ea_size;
- WIRE_STRING name;
- } full_directory_info;
-
- /* RAW_SEARCH_NAME_INFO interface */
- struct {
- uint32_t file_index;
- WIRE_STRING name;
- } name_info;
-
- /* RAW_SEARCH_BOTH_DIRECTORY_INFO interface */
- struct {
- uint32_t file_index;
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint64_t size;
- uint64_t alloc_size;
- uint32_t attrib;
- uint32_t ea_size;
- WIRE_STRING short_name;
- WIRE_STRING name;
- } both_directory_info;
-
- /* RAW_SEARCH_ID_FULL_DIRECTORY_INFO interface */
- struct {
- uint32_t file_index;
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint64_t size;
- uint64_t alloc_size;
- uint32_t attrib;
- uint32_t ea_size;
- uint64_t file_id;
- WIRE_STRING name;
- } id_full_directory_info;
-
- /* RAW_SEARCH_ID_BOTH_DIRECTORY_INFO interface */
- struct {
- uint32_t file_index;
- NTTIME create_time;
- NTTIME access_time;
- NTTIME write_time;
- NTTIME change_time;
- uint64_t size;
- uint64_t alloc_size;
- uint32_t attrib;
- uint32_t ea_size;
- uint64_t file_id;
- WIRE_STRING short_name;
- WIRE_STRING name;
- } id_both_directory_info;
-
- /* RAW_SEARCH_UNIX_INFO interface */
- struct {
- uint32_t file_index;
- uint64_t size;
- uint64_t alloc_size;
- NTTIME status_change_time;
- NTTIME access_time;
- NTTIME change_time;
- uint64_t uid;
- uint64_t gid;
- uint32_t file_type;
- uint64_t dev_major;
- uint64_t dev_minor;
- uint64_t unique_id;
- uint64_t permissions;
- uint64_t nlink;
- const char *name;
- } unix_info;
-};
-
-
-enum smb_search_close_level {RAW_FINDCLOSE_GENERIC, RAW_FINDCLOSE_FCLOSE, RAW_FINDCLOSE_FINDCLOSE};
-
-/* union for file search close */
-union smb_search_close {
- struct {
- enum smb_search_close_level level;
- } generic;
-
- /* SMBfclose (old search) interface */
- struct {
- enum smb_search_close_level level;
-
- struct {
- /* max_count and search_attrib are not used, but are present */
- uint16_t max_count;
- uint16_t search_attrib;
- struct smb_search_id id;
- } in;
- } fclose;
-
- /* SMBfindclose interface */
- struct {
- enum smb_search_close_level level;
-
- struct {
- uint16_t handle;
- } in;
- } findclose;
-};
-
diff --git a/source4/include/smb_macros.h b/source4/include/smb_macros.h
index 356d968083..956b0709ca 100644
--- a/source4/include/smb_macros.h
+++ b/source4/include/smb_macros.h
@@ -1,6 +1,6 @@
/*
Unix SMB/CIFS implementation.
- SMB parameters and setup
+ Some convenient macros
Copyright (C) Andrew Tridgell 1992-1999
Copyright (C) John H Terpstra 1996-1999
Copyright (C) Luke Kenneth Casson Leighton 1996-1999