summaryrefslogtreecommitdiffstats
path: root/src/lib/gssapi
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2008-10-30 19:32:50 +0000
committerGreg Hudson <ghudson@mit.edu>2008-10-30 19:32:50 +0000
commit5a36d207b1e79b53cd0e440e5b5229148ad23772 (patch)
treec149eb4199a310d1bca2c18271c9ab9f222c4bc1 /src/lib/gssapi
parent131ac802ba0975a047c72f010657f3200b9a2be5 (diff)
downloadkrb5-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.h1
-rw-r--r--src/lib/gssapi/mechglue/oid_ops.c65
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