windows-smb-and-symlinks-20041213
[openafs.git] / src / WINNT / afsd / smb3.h
index 7a897e9..6b79566 100644 (file)
@@ -1,16 +1,18 @@
-/* 
- * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved
- *
- * (C) COPYRIGHT IBM CORPORATION 1987, 1988
- * LICENSED MATERIALS - PROPERTY OF IBM
- *
- *
+/*
+ * Copyright 2000, International Business Machines Corporation and others.
+ * All Rights Reserved.
+ * 
+ * This software has been released under the terms of the IBM Public
+ * License.  For details, see the LICENSE file in the top-level source
+ * directory or online at http://www.openafs.org/dl/license10.html
  */
+
 #ifndef __SMB3_H_ENV__
 #define __SMB3_H_ENV__ 1
 
 typedef struct smb_tran2Packet {
        osi_queue_t q;                  /* queue of all packets */
+               int com;                        /* Trans or Trans2 (0x25 or 0x32) */
         int totalData;                 /* total # of expected data bytes */
         int totalParms;                        /* total # of expected parm bytes */
        int oldTotalParms;              /* initial estimate of parm bytes */
@@ -39,43 +41,45 @@ typedef struct smb_tran2Dispatch {
 } smb_tran2Dispatch_t;
 
 typedef struct smb_tran2QFSInfo {
-       union {
-               struct {
-                       long FSID;                      /* file system ID */
-                        long sectorsPerAllocUnit;
-                        long totalAllocUnits;          /* on the disk */
-                        long availAllocUnits;          /* free blocks */
-                        unsigned short bytesPerSector; /* bytes per sector */
-                } allocInfo;
-                struct {
-                       long vsn;       /* volume serial number */
-                        char vnCount;  /* count of chars in label, incl null */
-                        char label[12];        /* pad out with nulls */
-                } volumeInfo;
-               struct {
-                       FILETIME vct;   /* volume creation time */
-                       long vsn;       /* volume serial number */
-                       long vnCount;   /* length of volume label in bytes */
-                       char res[2];    /* reserved */
-                       char label[10]; /* volume label */
-               } FSvolumeInfo;
-               struct {
-                       osi_hyper_t totalAllocUnits;    /* on the disk */
-                       osi_hyper_t availAllocUnits;    /* free blocks */
-                       long sectorsPerAllocUnit;
-                       long bytesPerSector;            /* bytes per sector */
-               } FSsizeInfo;
-               struct {
-                       long devType;   /* device type */
-                       long characteristics;
-               } FSdeviceInfo;
-               struct {
-                       long attributes;
-                       long maxCompLength;     /* max path component length */
-                       long FSnameLength;      /* length of file system name */
-                       char FSname[12];
-               } FSattributeInfo;
-        } u;
+    union {
+#pragma pack(push, 2)
+        struct {
+            long FSID;                 /* file system ID */
+            long sectorsPerAllocUnit;
+            long totalAllocUnits;              /* on the disk */
+            long availAllocUnits;              /* free blocks */
+            unsigned short bytesPerSector;     /* bytes per sector */
+        } allocInfo;
+#pragma pack(pop)
+        struct {
+            long vsn;          /* volume serial number */
+            char vnCount;      /* count of chars in label, incl null */
+            char label[12];    /* pad out with nulls */
+        } volumeInfo;
+        struct {
+            FILETIME vct;      /* volume creation time */
+            long vsn;          /* volume serial number */
+            long vnCount;      /* length of volume label in bytes */
+            char res[2];       /* reserved */
+            char label[10];    /* volume label */
+        } FSvolumeInfo;
+        struct {
+            osi_hyper_t totalAllocUnits;       /* on the disk */
+            osi_hyper_t availAllocUnits;       /* free blocks */
+            long sectorsPerAllocUnit;
+            long bytesPerSector;               /* bytes per sector */
+        } FSsizeInfo;
+        struct {
+            long devType;      /* device type */
+            long characteristics;
+        } FSdeviceInfo;
+        struct {
+            long attributes;
+            long maxCompLength;        /* max path component length */
+            long FSnameLength; /* length of file system name */
+            char FSname[12];
+        } FSattributeInfo;
+    } u;
 } smb_tran2QFSInfo_t;
 
 /* more than enough opcodes for today, anyway */
@@ -83,12 +87,26 @@ typedef struct smb_tran2QFSInfo {
 
 extern smb_tran2Dispatch_t smb_tran2DispatchTable[SMB_TRAN2_NOPCODES];
 
+#define SMB_RAP_NOPCODES       64
+
+extern smb_tran2Dispatch_t smb_rapDispatchTable[SMB_RAP_NOPCODES];
+
 extern long smb_ReceiveV3SessionSetupX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
 
 extern long smb_ReceiveV3TreeConnectX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
 
+extern long smb_ReceiveV3Trans(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
+
 extern long smb_ReceiveV3Tran2A(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
 
+extern long smb_ReceiveRAPNetShareEnum(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
+
+extern long smb_ReceiveRAPNetShareGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
+
+extern long smb_ReceiveRAPNetWkstaGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
+
+extern long smb_ReceiveRAPNetServerGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
+
 extern long smb_ReceiveTran2Open(smb_vc_t *vcp, smb_tran2Packet_t *p,
        smb_packet_t *outp);
 
@@ -131,7 +149,16 @@ extern long smb_ReceiveTran2FindNotifyFirst(smb_vc_t *vcp, smb_tran2Packet_t *p,
 extern long smb_ReceiveTran2FindNotifyNext(smb_vc_t *vcp, smb_tran2Packet_t *p,
        smb_packet_t *outp);
 
-extern long smb_ReceiveTran2MKDir(smb_vc_t *vcp, smb_tran2Packet_t *p,
+extern long smb_ReceiveTran2CreateDirectory(smb_vc_t *vcp, smb_tran2Packet_t *p,
+       smb_packet_t *outp);
+
+extern long smb_ReceiveTran2SessionSetup(smb_vc_t *vcp, smb_tran2Packet_t *p,
+       smb_packet_t *outp);
+
+extern long smb_ReceiveTran2GetDFSReferral(smb_vc_t *vcp, smb_tran2Packet_t *p,
+       smb_packet_t *outp);
+
+extern long smb_ReceiveTran2ReportDFSInconsistency(smb_vc_t *vcp, smb_tran2Packet_t *p,
        smb_packet_t *outp);
 
 extern long smb_ReceiveV3FindClose(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
@@ -160,8 +187,24 @@ extern void smb_NotifyChange(DWORD action, DWORD notifyFilter,
 
 extern long smb_ReceiveNTCancel(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
 
+extern long smb_ReceiveNTRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
+
 extern int smb_V3MatchMask(char *namep, char *maskp, int flags);
 
 extern void smb3_Init();
+extern cm_user_t *smb_FindCMUserByName(/*smb_vc_t *vcp,*/ char *usern, char *machine);
+
+/* SMB auth related functions */
+extern void smb_NegotiateExtendedSecurity(void ** secBlob, int * secBlobLength);
+
+#ifdef DJGPP
+#define DELETE (0x00010000)
+#define READ_CONTROL (0x00020000)
+#define SYNCHRONIZE (0x00100000)
+#define FILE_WRITE_ATTRIBUTES ( 0x0100 )
+#define FILE_GENERIC_READ (0x00120089)
+#define FILE_GENERIC_WRITE (0x00120116)
+#define FILE_GENERIC_EXECUTE (0x001200a0)
+#endif /* DJGPP */
 
 #endif /*  __SMB3_H_ENV__ */