X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fcifs%2Fasn1.c;h=086ae8f4a207a22f0d1bfe2863439ed20bd88f89;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=a59742e0474b024a55b15d5465b6f5eb188c875a;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/fs/cifs/asn1.c b/fs/cifs/asn1.c index a59742e04..086ae8f4a 100644 --- a/fs/cifs/asn1.c +++ b/fs/cifs/asn1.c @@ -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? ")); }