summaryrefslogtreecommitdiffstats
path: root/src/plugins
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/plugins
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/plugins')
-rw-r--r--src/plugins/kdb/ldap/libkdb_ldap/ldap_principal.c65
1 files changed, 14 insertions, 51 deletions
diff --git a/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal.c b/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal.c
index ef6786c68e..26f4984532 100644
--- a/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal.c
+++ b/src/plugins/kdb/ldap/libkdb_ldap/ldap_principal.c
@@ -452,62 +452,25 @@ krb5_ldap_parse_principal_name(i_princ_name, o_princ_name)
char *i_princ_name;
char **o_princ_name;
{
- char *tmp_princ_name = NULL, *princ_name = NULL, *at_rlm_name = NULL;
- int l = 0, m = 0, tmp_princ_name_len = 0, princ_name_len = 0, at_count = 0;
- krb5_error_code st = 0;
+ const char *at_rlm_name, *p;
+ struct k5buf buf;
at_rlm_name = strrchr(i_princ_name, '@');
-
if (!at_rlm_name) {
*o_princ_name = strdup(i_princ_name);
- if (!o_princ_name) {
- st = ENOMEM;
- goto cleanup;
- }
+ if (!o_princ_name)
+ return ENOMEM;
} else {
- tmp_princ_name_len = at_rlm_name - i_princ_name;
-
- tmp_princ_name = (char *) malloc ((unsigned) tmp_princ_name_len + 1);
- if (!tmp_princ_name) {
- st = ENOMEM;
- goto cleanup;
- }
- memset(tmp_princ_name, 0, (unsigned) tmp_princ_name_len + 1);
- memcpy(tmp_princ_name, i_princ_name, (unsigned) tmp_princ_name_len);
-
- l = 0;
- while (tmp_princ_name[l]) {
- if (tmp_princ_name[l++] == '@')
- at_count++;
- }
-
- princ_name_len = strlen(i_princ_name) + at_count + 1;
- princ_name = (char *) malloc ((unsigned) princ_name_len);
- if (!princ_name) {
- st = ENOMEM;
- goto cleanup;
+ krb5int_buf_init_dynamic(&buf);
+ for (p = i_princ_name; p < at_rlm_name; p++) {
+ if (*p == '@')
+ krb5int_buf_add(&buf, "\\");
+ krb5int_buf_add_len(&buf, p, 1);
}
- memset(princ_name, 0, (unsigned) princ_name_len);
-
- l = 0;
- m = 0;
- while (tmp_princ_name[l]) {
- if (tmp_princ_name[l] == '@') {
- princ_name[m++]='\\';
- }
- princ_name[m++]=tmp_princ_name[l++];
- }
- strcat(princ_name, at_rlm_name);
-
- *o_princ_name = princ_name;
+ krb5int_buf_add(&buf, at_rlm_name);
+ *o_princ_name = krb5int_buf_cstr(&buf);
+ if (!*o_princ_name)
+ return ENOMEM;
}
-
-cleanup:
-
- if (tmp_princ_name) {
- free(tmp_princ_name);
- tmp_princ_name = NULL;
- }
-
- return st;
+ return 0;
}