csc_policy_logon_updates-20040503
[openafs.git] / src / WINNT / afsd / smb.h
index 201bafd..caa7c13 100644 (file)
 #ifndef __SMB_H_ENV__
 #define __SMB_H_ENV__ 1
 
+#ifdef DJGPP
+#include "netbios95.h"
+#endif /* DJGPP */
+
 /* basic core protocol SMB structure */
 typedef struct smb {
        unsigned char id[4];
@@ -74,6 +78,10 @@ typedef struct smb_packet {
        unsigned char oddByte;
        unsigned short ncb_length;
        unsigned char flags;
+#ifdef DJGPP
+        dos_ptr dos_pkt;
+        unsigned int dos_pkt_sel;
+#endif /* DJGPP */
 } smb_packet_t;
 
 /* smb_packet flags */
@@ -87,6 +95,11 @@ typedef struct myncb {
        NCB ncb;                        /* ncb to use */
         struct myncb *nextp;           /* when on free list */
         long magic;
+#ifdef DJGPP
+        dos_ptr dos_ncb;
+        smb_packet_t *orig_pkt;
+        unsigned int dos_ncb_sel;
+#endif /* DJGPP */
 } smb_ncb_t;
 
 /* structures representing environments from kernel / SMB network.
@@ -111,8 +124,10 @@ typedef struct smb_vc {
         struct smb_fid *fidsp;         /* the first child in the open file list */
        struct smb_user *justLoggedOut; /* ready for profile upload? */
        unsigned long logoffTime;       /* tick count when logged off */
-       struct cm_user *logonDLLUser;   /* integrated logon user */
+       /*struct cm_user *logonDLLUser; /* integrated logon user */
        unsigned char errorCount;
+        char rname[17];
+       int lana;
 } smb_vc_t;
 
                                        /* have we negotiated ... */
@@ -131,10 +146,19 @@ typedef struct smb_user {
         osi_mutex_t mx;
         long userID;                   /* the session identifier */
         struct smb_vc *vcp;            /* back ptr to virtual circuit */
-       struct cm_user *userp;          /* CM user structure */
-       char *name;                     /* user name */
+  struct smb_username *unp;        /* user name struct */
 } smb_user_t;
 
+typedef struct smb_username {
+       struct smb_username *nextp;             /* next sibling */
+        long refCount;                 /* ref count */
+        long flags;                    /* flags; locked by mx */
+        osi_mutex_t mx;
+       struct cm_user *userp;          /* CM user structure */
+        char *name;                    /* user name */
+  char *machine;                  /* machine name */
+} smb_username_t;
+
 #define SMB_USERFLAG_DELETE    1       /* delete struct when ref count zero */
 
 /* one per tree-connect */
@@ -181,6 +205,13 @@ typedef struct smb_ioctl {
        
         /* flags */
         long flags;
+
+        /* fid pointer */
+        struct smb_fid *fidp;
+
+  /* uid pointer */
+  smb_user_t *uidp;
+
 } smb_ioctl_t;
 
 /* flags for smb_ioctl_t */
@@ -209,7 +240,7 @@ typedef struct smb_fid {
        int curr_chunk;                 /* chunk being read */
        int prev_chunk;                 /* previous chunk read */
        int raw_writers;                /* pending async raw writes */
-       HANDLE raw_write_event;         /* signal this when raw_writers zero */
+       EVENT_HANDLE raw_write_event;   /* signal this when raw_writers zero */
 } smb_fid_t;
 
 #define SMB_FID_OPENREAD               1       /* open for reading */
@@ -227,6 +258,18 @@ typedef struct smb_fid {
 #define SMB_FID_LOOKSLIKECOPY  (SMB_FID_LENGTHSETDONE | SMB_FID_MTIMESETDONE)
 #define SMB_FID_NTOPEN                 0x100   /* have dscp and pathp */
 
+/*
+ * SMB file attributes
+ */
+#define SMB_ATTR_ARCHIVE  0x20
+#define SMB_ATTR_COMPRESSED 0x800 /* file or dir is compressed */
+#define SMB_ATTR_NORMAL 0x80 /* normal file. Only valid if used alone */
+#define SMB_ATTR_HIDDEN 0x2 /* hidden file for the purpose of dir listings */
+#define SMB_ATTR_READONLY 0x1
+#define SMB_ATTR_TEMPORARY 0x100
+#define SMB_ATTR_DIRECTORY 0x10
+#define SMB_ATTR_SYSTEM 0x4
+
 /* for tracking in-progress directory searches */
 typedef struct smb_dirSearch {
        osi_queue_t q;                  /* queue of all outstanding cookies */
@@ -250,10 +293,16 @@ typedef struct smb_dirSearch {
 /* type for patching directory listings */
 typedef struct smb_dirListPatch {
        osi_queue_t q;
-        char *dptr;            /* ptr to attr, time, data, sizel, sizeh */
+    char *dptr;                /* ptr to attr, time, data, sizel, sizeh */
+    long flags;     /* flags.  See below */
        cm_fid_t fid;
+  cm_dirEntry_t *dep;   /* temp */
 } smb_dirListPatch_t;
 
+/* dirListPatch Flags */
+#define SMB_DIRLISTPATCH_DOTFILE 1  /* the file referenced is a dot file 
+                                                                          Note: will not be set if smb_hideDotFiles is false */
+
 /* waiting lock list elements */
 typedef struct smb_waitingLock {
        osi_queue_t q;
@@ -264,7 +313,7 @@ typedef struct smb_waitingLock {
        void *lockp;
 } smb_waitingLock_t;
 
-smb_waitingLock_t *smb_allWaitingLocks;
+extern smb_waitingLock_t *smb_allWaitingLocks;
 
 typedef long (smb_proc_t)(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
 
@@ -279,11 +328,16 @@ typedef struct smb_dispatch {
                                                 * the response was already
                                                 * sent.
                                                  */
+#define SMB_MAX_PATH                    256     /* max path length */
 
 /* prototypes */
 
 extern void smb_Init(osi_log_t *logp, char *smbNamep, int useV3, int LANadapt,
-       int nThreads, void *aMBfunc);
+       int nThreads
+#ifndef DJGPP
+        , void *aMBfunc
+#endif
+  );
 
 extern void smb_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, long unixTime);
 
@@ -297,7 +351,7 @@ extern void smb_DosUTimeFromUnixTime(long *dosUTimep, long unixTime);
 
 extern void smb_UnixTimeFromDosUTime(long *unixTimep, long dosUTime);
 
-extern smb_vc_t *smb_FindVC(unsigned short lsn, int flags);
+extern smb_vc_t *smb_FindVC(unsigned short lsn, int flags, int lana);
 
 extern void smb_ReleaseVC(smb_vc_t *vcp);
 
@@ -307,6 +361,14 @@ extern void smb_ReleaseTID(smb_tid_t *tidp);
 
 extern smb_user_t *smb_FindUID(smb_vc_t *vcp, unsigned short uid, int flags);
 
+extern smb_username_t *smb_FindUserByName(char *usern, char *machine, int flags);
+
+extern smb_user_t *smb_FindUserByNameThisSession(smb_vc_t *vcp, char *usern); 
+
+extern smb_username_t *smb_FindUserByName(char *usern, char *machine, int flags);
+
+extern smb_user_t *smb_FindUserByNameThisSession(smb_vc_t *vcp, char *usern);
+
 extern void smb_ReleaseUID(smb_user_t *uidp);
 
 extern cm_user_t *smb_GetUser(smb_vc_t *vcp, smb_packet_t *inp);
@@ -319,6 +381,8 @@ extern void smb_ReleaseFID(smb_fid_t *fidp);
 
 extern int smb_FindShare(smb_vc_t *vcp, smb_packet_t *inp, char *shareName, char **pathNamep);
 
+extern int smb_FindShareCSCPolicy(char *shareName);
+
 extern smb_dirSearch_t *smb_FindDirSearchNL(long cookie);
 
 extern void smb_DeleteDirSearch(smb_dirSearch_t *dsp);
@@ -383,9 +447,19 @@ extern osi_rwlock_t smb_rctLock;
 extern int smb_LogoffTokenTransfer;
 extern unsigned long smb_LogoffTransferTimeout;
 
+extern int smb_maxVCPerServer; /* max # of VCs per server */
+extern int smb_maxMpxRequests; /* max # of mpx requests */
+
+extern int smb_hideDotFiles;
+extern unsigned int smb_IsDotFile(char *lastComp);
+
 extern void smb_FormatResponsePacket(smb_vc_t *vcp, smb_packet_t *inp,
        smb_packet_t *op);
 
+extern char *myCrt_2Dispatch(int i); 
+
+extern char *myCrt_2Dispatch(int i);
+
 extern unsigned int smb_Attributes(cm_scache_t *scp);
 
 extern int smb_ChainFID(int fid, smb_packet_t *inp);
@@ -402,14 +476,26 @@ extern unsigned char *smb_ParseVblBlock(unsigned char *inp, char **chainpp, int
 
 extern int smb_SUser(cm_user_t *userp);
 
+#ifndef DJGPP
 extern long smb_ReadData(smb_fid_t *fidp, osi_hyper_t *offsetp, long count,
        char *op, cm_user_t *userp, long *readp);
+#else /* DJGPP */
+extern long smb_ReadData(smb_fid_t *fidp, osi_hyper_t *offsetp, long count,
+       char *op, cm_user_t *userp, long *readp, int dosflag);
+#endif /* !DJGPP */
 
 extern BOOL smb_IsLegalFilename(char *filename);
 
+extern char *smb_GetSharename(void);
+
 /* include other include files */
 #include "smb3.h"
 #include "smb_ioctl.h"
 #include "smb_iocons.h"
 
+cm_user_t *smb_FindOrCreateUser(smb_vc_t *vcp, char *usern);
+
+#ifdef NOTSERVICE
+extern void smb_LogPacket(smb_packet_t *packet);
+#endif /* NOTSERVICE */
 #endif /* whole file */