Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / fs / cifs / asn1.c
index a59742e..086ae8f 100644 (file)
@@ -26,6 +26,7 @@
 #include "cifspdu.h"
 #include "cifsglob.h"
 #include "cifs_debug.h"
+#include "cifsproto.h"
 
 /*****************************************************************************
  *
@@ -77,8 +78,8 @@
 
 #define SPNEGO_OID_LEN 7
 #define NTLMSSP_OID_LEN  10
-unsigned long SPNEGO_OID[7] = { 1, 3, 6, 1, 5, 5, 2 };
-unsigned long NTLMSSP_OID[10] = { 1, 3, 6, 1, 4, 1, 311, 2, 2, 10 };
+static unsigned long SPNEGO_OID[7] = { 1, 3, 6, 1, 5, 5, 2 };
+static unsigned long NTLMSSP_OID[10] = { 1, 3, 6, 1, 4, 1, 311, 2, 2, 10 };
 
 /* 
  * ASN.1 context.
@@ -190,7 +191,8 @@ asn1_header_decode(struct asn1_ctx *ctx,
                   unsigned char **eoc,
                   unsigned int *cls, unsigned int *con, unsigned int *tag)
 {
-       unsigned int def, len;
+       unsigned int def = 0; 
+       unsigned int len = 0;
 
        if (!asn1_id_decode(ctx, cls, con, tag))
                return 0;
@@ -201,7 +203,7 @@ asn1_header_decode(struct asn1_ctx *ctx,
        if (def)
                *eoc = ctx->pointer + len;
        else
-               *eoc = 0;
+               *eoc = NULL;
        return 1;
 }
 
@@ -210,7 +212,7 @@ asn1_eoc_decode(struct asn1_ctx *ctx, unsigned char *eoc)
 {
        unsigned char ch;
 
-       if (eoc == 0) {
+       if (eoc == NULL) {
                if (!asn1_octet_decode(ctx, &ch))
                        return 0;
 
@@ -375,7 +377,7 @@ asn1_subid_decode(struct asn1_ctx *ctx, unsigned long *subid)
        return 1;
 }
 
-static unsigned char
+static int 
 asn1_oid_decode(struct asn1_ctx *ctx,
                unsigned char *eoc, unsigned long **oid, unsigned int *len)
 {
@@ -454,11 +456,11 @@ decode_negTokenInit(unsigned char *security_blob, int length,
        struct asn1_ctx ctx;
        unsigned char *end;
        unsigned char *sequence_end;
-       unsigned long *oid;
+       unsigned long *oid = NULL;
        unsigned int cls, con, tag, oidlen, rc;
        int use_ntlmssp = FALSE;
 
-    *secType = NTLM; /* BB eventually make Kerberos or NLTMSSP the default */
+       *secType = NTLM; /* BB eventually make Kerberos or NLTMSSP the default */
 
        /* cifs_dump_mem(" Received SecBlob ", security_blob, length); */
 
@@ -543,16 +545,18 @@ decode_negTokenInit(unsigned char *security_blob, int length,
                                return 0;
                        }
                        if ((tag == ASN1_OJI) && (con == ASN1_PRI)) {
-                               asn1_oid_decode(&ctx, end, &oid, &oidlen);
-                               cFYI(1,
-                                    ("OID len = %d oid = 0x%lx 0x%lx 0x%lx 0x%lx",
-                                     oidlen, *oid, *(oid + 1), *(oid + 2),
-                                     *(oid + 3)));
-                               rc = compare_oid(oid, oidlen, NTLMSSP_OID,
+                               rc = asn1_oid_decode(&ctx, end, &oid, &oidlen);
+                               if(rc) {                
+                                       cFYI(1,
+                                         ("OID len = %d oid = 0x%lx 0x%lx 0x%lx 0x%lx",
+                                          oidlen, *oid, *(oid + 1), *(oid + 2),
+                                          *(oid + 3)));
+                                       rc = compare_oid(oid, oidlen, NTLMSSP_OID,
                                                 NTLMSSP_OID_LEN);
-                               kfree(oid);
-                               if (rc)
-                                       use_ntlmssp = TRUE;
+                                       kfree(oid);
+                                       if (rc)
+                                               use_ntlmssp = TRUE;
+                               }
                        } else {
                                cFYI(1,("This should be an oid what is going on? "));
                        }