fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / fs / cifs / cifs_debug.c
index f4124a3..6017c46 100644 (file)
@@ -39,7 +39,7 @@ cifs_dump_mem(char *label, void *data, int length)
        char *charptr = data;
        char buf[10], line[80];
 
-       printk(KERN_DEBUG "%s: dump of %d bytes of data at 0x%p\n\n", 
+       printk(KERN_DEBUG "%s: dump of %d bytes of data at 0x%p\n", 
                label, length, data);
        for (i = 0; i < length; i += 16) {
                line[0] = 0;
@@ -57,6 +57,57 @@ cifs_dump_mem(char *label, void *data, int length)
        }
 }
 
+#ifdef CONFIG_CIFS_DEBUG2
+void cifs_dump_detail(struct smb_hdr * smb)
+{
+       cERROR(1,("Cmd: %d Err: 0x%x Flags: 0x%x Flgs2: 0x%x Mid: %d Pid: %d",
+                 smb->Command, smb->Status.CifsError,
+                 smb->Flags, smb->Flags2, smb->Mid, smb->Pid));
+       cERROR(1,("smb buf %p len %d", smb, smbCalcSize_LE(smb)));
+}
+
+
+void cifs_dump_mids(struct TCP_Server_Info * server)
+{
+       struct list_head *tmp;
+       struct mid_q_entry * mid_entry;
+
+       if(server == NULL)
+               return;
+
+       cERROR(1,("Dump pending requests:"));
+       spin_lock(&GlobalMid_Lock);
+       list_for_each(tmp, &server->pending_mid_q) {
+               mid_entry = list_entry(tmp, struct mid_q_entry, qhead);
+               if(mid_entry) {
+                       cERROR(1,("State: %d Cmd: %d Pid: %d Tsk: %p Mid %d",
+                               mid_entry->midState,
+                               (int)mid_entry->command,
+                               mid_entry->pid,
+                               mid_entry->tsk,
+                               mid_entry->mid));
+#ifdef CONFIG_CIFS_STATS2
+                       cERROR(1,("IsLarge: %d buf: %p time rcv: %ld now: %ld",
+                               mid_entry->largeBuf,
+                               mid_entry->resp_buf,
+                               mid_entry->when_received,
+                               jiffies));
+#endif /* STATS2 */
+                       cERROR(1,("IsMult: %d IsEnd: %d", mid_entry->multiRsp,
+                                 mid_entry->multiEnd));
+                       if(mid_entry->resp_buf) {
+                               cifs_dump_detail(mid_entry->resp_buf);
+                               cifs_dump_mem("existing buf: ",
+                                       mid_entry->resp_buf,
+                                       62 /* fixme */);
+                       }
+                       
+               }
+       }
+       spin_unlock(&GlobalMid_Lock);
+}
+#endif /* CONFIG_CIFS_DEBUG2 */
+
 #ifdef CONFIG_PROC_FS
 static int
 cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
@@ -73,7 +124,6 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
 
        *beginBuffer = buf + offset;
 
-       
        length =
            sprintf(buf,
                    "Display Internal CIFS Data Structures for Debugging\n"
@@ -93,8 +143,8 @@ cifs_debug_data_read(char *buf, char **beginBuffer, off_t offset,
                ses = list_entry(tmp, struct cifsSesInfo, cifsSessionList);
                if((ses->serverDomain == NULL) || (ses->serverOS == NULL) ||
                   (ses->serverNOS == NULL)) {
-                       buf += sprintf("\nentry for %s not fully displayed\n\t",
-                                       ses->serverName);
+                       buf += sprintf(buf, "\nentry for %s not fully "
+                                       "displayed\n\t", ses->serverName);
                        
                } else {
                        length =
@@ -395,12 +445,12 @@ static read_proc_t traceSMB_read;
 static write_proc_t traceSMB_write;
 static read_proc_t multiuser_mount_read;
 static write_proc_t multiuser_mount_write;
-static read_proc_t extended_security_read;
-static write_proc_t extended_security_write;
-static read_proc_t ntlmv2_enabled_read;
+static read_proc_t security_flags_read;
+static write_proc_t security_flags_write;
+/* static read_proc_t ntlmv2_enabled_read;
 static write_proc_t ntlmv2_enabled_write;
 static read_proc_t packet_signing_enabled_read;
-static write_proc_t packet_signing_enabled_write;
+static write_proc_t packet_signing_enabled_write;*/
 static read_proc_t experimEnabled_read;
 static write_proc_t experimEnabled_write;
 static read_proc_t linuxExtensionsEnabled_read;
@@ -458,10 +508,10 @@ cifs_proc_init(void)
                pde->write_proc = multiuser_mount_write;
 
        pde =
-           create_proc_read_entry("ExtendedSecurity", 0, proc_fs_cifs,
-                               extended_security_read, NULL);
+           create_proc_read_entry("SecurityFlags", 0, proc_fs_cifs,
+                               security_flags_read, NULL);
        if (pde)
-               pde->write_proc = extended_security_write;
+               pde->write_proc = security_flags_write;
 
        pde =
        create_proc_read_entry("LookupCacheEnabled", 0, proc_fs_cifs,
@@ -469,7 +519,7 @@ cifs_proc_init(void)
        if (pde)
                pde->write_proc = lookupFlag_write;
 
-       pde =
+/*     pde =
            create_proc_read_entry("NTLMV2Enabled", 0, proc_fs_cifs,
                                ntlmv2_enabled_read, NULL);
        if (pde)
@@ -479,7 +529,7 @@ cifs_proc_init(void)
            create_proc_read_entry("PacketSigningEnabled", 0, proc_fs_cifs,
                                packet_signing_enabled_read, NULL);
        if (pde)
-               pde->write_proc = packet_signing_enabled_write;
+               pde->write_proc = packet_signing_enabled_write;*/
 }
 
 void
@@ -496,9 +546,9 @@ cifs_proc_clean(void)
 #endif
        remove_proc_entry("MultiuserMount", proc_fs_cifs);
        remove_proc_entry("OplockEnabled", proc_fs_cifs);
-       remove_proc_entry("NTLMV2Enabled",proc_fs_cifs);
-       remove_proc_entry("ExtendedSecurity",proc_fs_cifs);
-       remove_proc_entry("PacketSigningEnabled",proc_fs_cifs);
+/*     remove_proc_entry("NTLMV2Enabled",proc_fs_cifs); */
+       remove_proc_entry("SecurityFlags",proc_fs_cifs);
+/*     remove_proc_entry("PacketSigningEnabled",proc_fs_cifs); */
        remove_proc_entry("LinuxExtensionsEnabled",proc_fs_cifs);
        remove_proc_entry("Experimental",proc_fs_cifs);
        remove_proc_entry("LookupCacheEnabled",proc_fs_cifs);
@@ -782,12 +832,12 @@ multiuser_mount_write(struct file *file, const char __user *buffer,
 }
 
 static int
-extended_security_read(char *page, char **start, off_t off,
+security_flags_read(char *page, char **start, off_t off,
                       int count, int *eof, void *data)
 {
        int len;
 
-       len = sprintf(page, "%d\n", extended_security);
+       len = sprintf(page, "0x%x\n", extended_security);
 
        len -= off;
        *start = page + off;
@@ -803,24 +853,52 @@ extended_security_read(char *page, char **start, off_t off,
        return len;
 }
 static int
-extended_security_write(struct file *file, const char __user *buffer,
+security_flags_write(struct file *file, const char __user *buffer,
                        unsigned long count, void *data)
 {
+       unsigned int flags;
+       char flags_string[12];
        char c;
-       int rc;
 
-       rc = get_user(c, buffer);
-       if (rc)
-               return rc;
-       if (c == '0' || c == 'n' || c == 'N')
-               extended_security = 0;
-       else if (c == '1' || c == 'y' || c == 'Y')
-               extended_security = 1;
+       if((count < 1) || (count > 11))
+               return -EINVAL;
+
+       memset(flags_string, 0, 12);
+
+       if(copy_from_user(flags_string, buffer, count))
+               return -EFAULT;
+
+       if(count < 3) {
+               /* single char or single char followed by null */
+               c = flags_string[0];
+               if (c == '0' || c == 'n' || c == 'N')
+                       extended_security = CIFSSEC_DEF; /* default */
+               else if (c == '1' || c == 'y' || c == 'Y')
+                       extended_security = CIFSSEC_MAX;
+               return count;
+       }
+       /* else we have a number */
+
+       flags = simple_strtoul(flags_string, NULL, 0);
+
+       cFYI(1,("sec flags 0x%x", flags));
+
+       if(flags <= 0)  {
+               cERROR(1,("invalid security flags %s",flags_string));
+               return -EINVAL;
+       }
 
+       if(flags & ~CIFSSEC_MASK) {
+               cERROR(1,("attempt to set unsupported security flags 0x%x",
+                       flags & ~CIFSSEC_MASK));
+               return -EINVAL;
+       }
+       /* flags look ok - update the global security flags for cifs module */
+       extended_security = flags;
        return count;
 }
 
-static int
+/* static int
 ntlmv2_enabled_read(char *page, char **start, off_t off,
                       int count, int *eof, void *data)
 {
@@ -855,6 +933,8 @@ ntlmv2_enabled_write(struct file *file, const char __user *buffer,
                ntlmv2_support = 0;
        else if (c == '1' || c == 'y' || c == 'Y')
                ntlmv2_support = 1;
+       else if (c == '2')
+               ntlmv2_support = 2;
 
        return count;
 }
@@ -898,7 +978,7 @@ packet_signing_enabled_write(struct file *file, const char __user *buffer,
                sign_CIFS_PDUs = 2;
 
        return count;
-}
+} */
 
 
 #endif