dns-and-server-ref-counts-20040530
[openafs.git] / src / WINNT / afsd / smb_ioctl.c
index ca40f64..db5cbf0 100644 (file)
@@ -27,7 +27,7 @@
 
 smb_ioctlProc_t *smb_ioctlProcsp[SMB_IOCTL_MAXPROCS];
 
-extern unsigned char smb_LANadapter;
+/*extern unsigned char smb_LANadapter;*/
 
 void smb_InitIoctl(void)
 {
@@ -68,9 +68,12 @@ void smb_InitIoctl(void)
        smb_ioctlProcsp[VIOC_MAKESUBMOUNT] = cm_IoctlMakeSubmount;
        smb_ioctlProcsp[VIOC_GETRXKCRYPT] = cm_IoctlGetRxkcrypt;
        smb_ioctlProcsp[VIOC_SETRXKCRYPT] = cm_IoctlSetRxkcrypt;
+       smb_ioctlProcsp[VIOC_ISSYMLINK] = cm_IoctlIslink;
 #ifdef DJGPP
        smb_ioctlProcsp[VIOC_SHUTDOWN] = cm_IoctlShutdown;
 #endif
+       smb_ioctlProcsp[VIOC_TRACEMEMDUMP] = cm_IoctlMemoryDump;
+       smb_ioctlProcsp[VIOC_ISSYMLINK] = cm_IoctlIslink;
 }
 
 /* called to make a fid structure into an IOCTL fid structure */
@@ -86,6 +89,7 @@ void smb_SetupIoctlFid(smb_fid_t *fidp, cm_space_t *prefix)
                iop = malloc(sizeof(*iop));
                 memset(iop, 0, sizeof(*iop));
                 fidp->ioctlp = iop;
+                               iop->fidp = fidp;
         }
        if (prefix) {
                copyPrefix = cm_GetSpace();
@@ -147,6 +151,10 @@ void smb_IoctlPrepareWrite(smb_fid_t *fidp, smb_ioctl_t *ioctlp)
        if (!ioctlp->inAllocp) ioctlp->inAllocp = malloc(SMB_IOCTL_MAXDATA);
         if (!ioctlp->outAllocp) ioctlp->outAllocp = malloc(SMB_IOCTL_MAXDATA);
 
+       /* Fixes fs la problem.  We do a StrToOEM later and if this data isn't initialized we get memory issues. */
+       (void) memset(ioctlp->inAllocp, 0, SMB_IOCTL_MAXDATA);
+       (void) memset(ioctlp->outAllocp, 0, SMB_IOCTL_MAXDATA);
+
        /* and make sure that we've reset our state for the new incoming request */
        if (!(ioctlp->flags & SMB_IOCTLFLAG_DATAIN)) {
                ioctlp->inCopied = 0;
@@ -183,11 +191,6 @@ long smb_IoctlRead(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
                return code;
         }
 
-       if (iop->flags & SMB_IOCTLFLAG_LOGON) {
-               vcp->logonDLLUser = userp;
-               userp->flags |= CM_USERFLAG_WASLOGON;
-       }
-
        leftToCopy = (iop->outDatap - iop->outAllocp) - iop->outCopied;
         if (count > leftToCopy) count = leftToCopy;
         
@@ -202,8 +205,8 @@ long smb_IoctlRead(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
 
         op = smb_GetSMBData(outp, NULL);
         *op++ = 1;
-        *op++ = count & 0xff;
-        *op++ = (count >> 8) & 0xff;
+        *op++ = (char)(count & 0xff);
+        *op++ = (char)((count >> 8) & 0xff);
         
        /* now copy the data into the response packet */
         memcpy(op, iop->outCopied + iop->outAllocp, count);
@@ -273,15 +276,25 @@ long smb_IoctlV3Read(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_pack
         count = smb_GetSMBParm(inp, 5);
        
        userp = smb_GetUser(vcp, inp);
+       osi_assert(userp != 0);
 
        {
                smb_user_t *uidp;
 
                uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
-               osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
-                        uidp->userID, userp,
-                        osi_LogSaveString(afsd_logp, uidp->name));
-               smb_ReleaseUID(uidp);
+               if (uidp && uidp->unp)
+                   osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
+                            uidp->userID, userp,
+                            osi_LogSaveString(afsd_logp, uidp->unp->name));
+               else {
+                       if (uidp)
+                   osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
+                            uidp->userID, userp);
+                       else
+                   osi_Log1(afsd_logp, "Ioctl no uid user %x no name",
+                            userp);
+               }
+               if (uidp) smb_ReleaseUID(uidp);
        }
 
        iop->tidPathp = smb_GetTIDPath(vcp, ((smb_t *)inp)->tid);
@@ -293,11 +306,6 @@ long smb_IoctlV3Read(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_pack
                return code;
         }
 
-       if (iop->flags & SMB_IOCTLFLAG_LOGON) {
-               vcp->logonDLLUser = userp;
-               userp->flags |= CM_USERFLAG_WASLOGON;
-       }
-
        leftToCopy = (iop->outDatap - iop->outAllocp) - iop->outCopied;
         if (count > leftToCopy) count = leftToCopy;
         
@@ -370,10 +378,17 @@ long smb_IoctlReadRaw(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
                smb_user_t *uidp;
 
                uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
-               osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
-                        uidp->userID, userp,
-                        osi_LogSaveString(afsd_logp, uidp->name));
-               smb_ReleaseUID(uidp);
+               if (uidp && uidp->unp)
+                   osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
+                            uidp->userID, userp,
+                            osi_LogSaveString(afsd_logp, uidp->unp->name));
+               else if (uidp)
+                   osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
+                            uidp->userID, userp);
+        else 
+                   osi_Log1(afsd_logp, "Ioctl no uid user %x no name",
+                            userp);
+               if (uidp) smb_ReleaseUID(uidp);
        }
 
        iop->tidPathp = smb_GetTIDPath(vcp, ((smb_t *)inp)->tid);
@@ -385,11 +400,6 @@ long smb_IoctlReadRaw(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
                return code;
        }
 
-       if (iop->flags & SMB_IOCTLFLAG_LOGON) {
-               vcp->logonDLLUser = userp;
-               userp->flags |= CM_USERFLAG_WASLOGON;
-       }
-
        leftToCopy = (iop->outDatap - iop->outAllocp) - iop->outCopied;
 
        ncbp = outp->ncbp;
@@ -398,7 +408,8 @@ long smb_IoctlReadRaw(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
        ncbp->ncb_length = (unsigned short) leftToCopy;
        ncbp->ncb_lsn = (unsigned char) vcp->lsn;
        ncbp->ncb_command = NCBSEND;
-        ncbp->ncb_lana_num = smb_LANadapter;
+    /*ncbp->ncb_lana_num = smb_LANadapter;*/
+       ncbp->ncb_lana_num = vcp->lana;
 
 #ifndef DJGPP
        ncbp->ncb_buffer = iop->outCopied + iop->outAllocp;