diff options
| author | Greg Hudson <ghudson@mit.edu> | 2008-10-30 19:32:50 +0000 |
|---|---|---|
| committer | Greg Hudson <ghudson@mit.edu> | 2008-10-30 19:32:50 +0000 |
| commit | 5a36d207b1e79b53cd0e440e5b5229148ad23772 (patch) | |
| tree | c149eb4199a310d1bca2c18271c9ab9f222c4bc1 /src/lib/gssapi | |
| parent | 131ac802ba0975a047c72f010657f3200b9a2be5 (diff) | |
| download | krb5-5a36d207b1e79b53cd0e440e5b5229148ad23772.tar.gz krb5-5a36d207b1e79b53cd0e440e5b5229148ad23772.tar.xz krb5-5a36d207b1e79b53cd0e440e5b5229148ad23772.zip | |
Use the k5buf module instead of strcpy/strcat in several places
ticket: 6200
status: open
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20941 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/gssapi')
| -rw-r--r-- | src/lib/gssapi/generic/gssapiP_generic.h | 1 | ||||
| -rw-r--r-- | src/lib/gssapi/mechglue/oid_ops.c | 65 |
2 files changed, 17 insertions, 49 deletions
diff --git a/src/lib/gssapi/generic/gssapiP_generic.h b/src/lib/gssapi/generic/gssapiP_generic.h index 747c6fe6c..03f4a1305 100644 --- a/src/lib/gssapi/generic/gssapiP_generic.h +++ b/src/lib/gssapi/generic/gssapiP_generic.h @@ -45,6 +45,7 @@ #include <errno.h> #include "k5-platform.h" +#include "k5-buf.h" typedef UINT64_TYPE gssint_uint64; /** helper macros **/ diff --git a/src/lib/gssapi/mechglue/oid_ops.c b/src/lib/gssapi/mechglue/oid_ops.c index 11a509984..44d79f361 100644 --- a/src/lib/gssapi/mechglue/oid_ops.c +++ b/src/lib/gssapi/mechglue/oid_ops.c @@ -219,13 +219,11 @@ generic_gss_oid_to_str(minor_status, oid, oid_str) const gss_OID_desc * const oid; gss_buffer_t oid_str; { - char numstr[128]; OM_uint32 number; - int numshift; - OM_uint32 string_length; OM_uint32 i; unsigned char *cp; char *bp; + struct k5buf buf; if (minor_status != NULL) *minor_status = 0; @@ -243,60 +241,29 @@ generic_gss_oid_to_str(minor_status, oid, oid_str) /* Decoded according to krb5/gssapi_krb5.c */ - /* First determine the size of the string */ - string_length = 0; - number = 0; - numshift = 0; cp = (unsigned char *) oid->elements; number = (unsigned long) cp[0]; - snprintf(numstr, sizeof(numstr), "%lu ", (unsigned long)number/40); - string_length += strlen(numstr); - snprintf(numstr, sizeof(numstr), "%lu ", (unsigned long)number%40); - string_length += strlen(numstr); + krb5int_buf_init_dynamic(&buf); + krb5int_buf_add_fmt(&buf, "{ %lu %lu ", (unsigned long)number/40, + (unsigned long)number%40); + number = 0; + cp = (unsigned char *) oid->elements; for (i=1; i<oid->length; i++) { - if ((OM_uint32) (numshift+7) < (sizeof (OM_uint32)*8)) {/* XXX */ - number = (number << 7) | (cp[i] & 0x7f); - numshift += 7; - } - else { - return(GSS_S_FAILURE); - } + number = (number << 7) | (cp[i] & 0x7f); if ((cp[i] & 0x80) == 0) { - snprintf(numstr, sizeof(numstr), "%lu ", (unsigned long)number); - string_length += strlen(numstr); + krb5int_buf_add_fmt(&buf, "%lu ", (unsigned long)number); number = 0; - numshift = 0; } } - /* - * If we get here, we've calculated the length of "n n n ... n ". Add 4 - * here for "{ " and "}\0". - */ - string_length += 4; - if ((bp = (char *) malloc(string_length))) { - strcpy(bp, "{ "); - number = (OM_uint32) cp[0]; - snprintf(numstr, sizeof(numstr), "%lu ", (unsigned long)number/40); - strcat(bp, numstr); - snprintf(numstr, sizeof(numstr), "%lu ", (unsigned long)number%40); - strcat(bp, numstr); - number = 0; - cp = (unsigned char *) oid->elements; - for (i=1; i<oid->length; i++) { - number = (number << 7) | (cp[i] & 0x7f); - if ((cp[i] & 0x80) == 0) { - snprintf(numstr, sizeof(numstr), "%lu ", (unsigned long)number); - strcat(bp, numstr); - number = 0; - } - } - strcat(bp, "}"); - oid_str->length = strlen(bp)+1; - oid_str->value = (void *) bp; - return(GSS_S_COMPLETE); + krb5int_buf_add(&buf, "}"); + bp = krb5int_buf_cstr(&buf); + if (bp == NULL) { + *minor_status = ENOMEM; + return(GSS_S_FAILURE); } - *minor_status = ENOMEM; - return(GSS_S_FAILURE); + oid_str->length = krb5int_buf_len(&buf)+1; + oid_str->value = (void *) bp; + return(GSS_S_COMPLETE); } OM_uint32 |
