diff options
| author | Greg Hudson <ghudson@mit.edu> | 2013-02-09 00:43:35 -0500 |
|---|---|---|
| committer | Greg Hudson <ghudson@mit.edu> | 2013-02-09 00:43:35 -0500 |
| commit | 7905cd6a2eddbf264242bb2a85f811878b2da7ab (patch) | |
| tree | 72b4028cbe0e399e1d293e2b718530913f0a2673 /src/lib/krb5/krb | |
| parent | 92e2bac0f38f7f60a8fc74b5964357212c4289e1 (diff) | |
| download | krb5-7905cd6a2eddbf264242bb2a85f811878b2da7ab.tar.gz krb5-7905cd6a2eddbf264242bb2a85f811878b2da7ab.tar.xz krb5-7905cd6a2eddbf264242bb2a85f811878b2da7ab.zip | |
Add and use k5memdup, k5memdup0 helpers
Add k5-int.h static functions to duplicate byte ranges, optionally
with a trailing zero byte, and set an error code like k5alloc does.
Use them where they would shorten existing code.
Diffstat (limited to 'src/lib/krb5/krb')
| -rw-r--r-- | src/lib/krb5/krb/copy_tick.c | 6 | ||||
| -rw-r--r-- | src/lib/krb5/krb/fwd_tgt.c | 9 | ||||
| -rw-r--r-- | src/lib/krb5/krb/get_in_tkt.c | 6 | ||||
| -rw-r--r-- | src/lib/krb5/krb/pac.c | 18 | ||||
| -rw-r--r-- | src/lib/krb5/krb/pac_sign.c | 6 | ||||
| -rw-r--r-- | src/lib/krb5/krb/preauth2.c | 9 | ||||
| -rw-r--r-- | src/lib/krb5/krb/send_tgs.c | 8 | ||||
| -rw-r--r-- | src/lib/krb5/krb/walk_rtree.c | 14 |
8 files changed, 27 insertions, 49 deletions
diff --git a/src/lib/krb5/krb/copy_tick.c b/src/lib/krb5/krb/copy_tick.c index c3e33ff824..660d977bb4 100644 --- a/src/lib/krb5/krb/copy_tick.c +++ b/src/lib/krb5/krb/copy_tick.c @@ -53,16 +53,14 @@ copy_enc_tkt_part(krb5_context context, const krb5_enc_tkt_part *partfrom, tempto->transited.tr_contents.data = 0; } else { tempto->transited.tr_contents.data = - malloc(partfrom->transited.tr_contents.length); + k5memdup(partfrom->transited.tr_contents.data, + partfrom->transited.tr_contents.length, &retval); if (!tempto->transited.tr_contents.data) { krb5_free_principal(context, tempto->client); krb5_free_keyblock(context, tempto->session); free(tempto); return ENOMEM; } - memcpy(tempto->transited.tr_contents.data, - (char *)partfrom->transited.tr_contents.data, - partfrom->transited.tr_contents.length); } retval = krb5_copy_addresses(context, partfrom->caddrs, &tempto->caddrs); diff --git a/src/lib/krb5/krb/fwd_tgt.c b/src/lib/krb5/krb/fwd_tgt.c index 8387cea27e..2e55066c7e 100644 --- a/src/lib/krb5/krb/fwd_tgt.c +++ b/src/lib/krb5/krb/fwd_tgt.c @@ -130,14 +130,11 @@ krb5_fwd_tgt_creds(krb5_context context, krb5_auth_context auth_context, goto errout; } - rhost = malloc(server->data[1].length+1); - if (!rhost) { - retval = ENOMEM; + rhost = k5memdup0(server->data[1].data, server->data[1].length, + &retval); + if (rhost == NULL) goto errout; - } free_rhost = 1; - memcpy(rhost, server->data[1].data, server->data[1].length); - rhost[server->data[1].length] = '\0'; } retval = krb5_os_hostaddr(context, rhost, &addrs); diff --git a/src/lib/krb5/krb/get_in_tkt.c b/src/lib/krb5/krb/get_in_tkt.c index df1bacf878..c88b67a6e8 100644 --- a/src/lib/krb5/krb/get_in_tkt.c +++ b/src/lib/krb5/krb/get_in_tkt.c @@ -891,13 +891,11 @@ krb5_init_creds_init(krb5_context context, /* enctypes */ if (opte->flags & KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST) { ctx->request->ktype = - k5alloc((opte->etype_list_length * sizeof(krb5_enctype)), - &code); + k5memdup(opte->etype_list, + opte->etype_list_length * sizeof(krb5_enctype), &code); if (code != 0) goto cleanup; ctx->request->nktypes = opte->etype_list_length; - memcpy(ctx->request->ktype, opte->etype_list, - ctx->request->nktypes * sizeof(krb5_enctype)); } else if (krb5_get_default_in_tkt_ktypes(context, &ctx->request->ktype) == 0) { ctx->request->nktypes = k5_count_etypes(ctx->request->ktype); diff --git a/src/lib/krb5/krb/pac.c b/src/lib/krb5/krb/pac.c index 3262d21d82..cc6f200c69 100644 --- a/src/lib/krb5/krb/pac.c +++ b/src/lib/krb5/krb/pac.c @@ -186,12 +186,10 @@ krb5_pac_get_buffer(krb5_context context, if (ret != 0) return ret; - data->data = malloc(d.length); + data->data = k5memdup(d.data, d.length, &ret); if (data->data == NULL) - return ENOMEM; - + return ret; data->length = d.length; - memcpy(data->data, d.data, d.length); return 0; } @@ -275,14 +273,12 @@ k5_pac_copy(krb5_context context, if (pac == NULL) return ENOMEM; - pac->pac = (PACTYPE *)malloc(header_len); + pac->pac = k5memdup(src->pac, header_len, &code); if (pac->pac == NULL) { free(pac); - return ENOMEM; + return code; } - memcpy(pac->pac, src->pac, header_len); - code = krb5int_copy_data_contents(context, &src->data, &pac->data); if (code != 0) { free(pac->pac); @@ -538,11 +534,9 @@ k5_pac_verify_server_checksum(krb5_context context, return KRB5KRB_AP_ERR_INAPP_CKSUM; pac_data.length = pac->data.length; - pac_data.data = malloc(pac->data.length); + pac_data.data = k5memdup(pac->data.data, pac->data.length, &ret); if (pac_data.data == NULL) - return ENOMEM; - - memcpy(pac_data.data, pac->data.data, pac->data.length); + return ret; /* Zero out both checksum buffers */ ret = k5_pac_zero_signature(context, pac, KRB5_PAC_SERVER_CHECKSUM, diff --git a/src/lib/krb5/krb/pac_sign.c b/src/lib/krb5/krb/pac_sign.c index 49e3862b7b..20535816d7 100644 --- a/src/lib/krb5/krb/pac_sign.c +++ b/src/lib/krb5/krb/pac_sign.c @@ -257,13 +257,11 @@ krb5_pac_sign(krb5_context context, krb5_pac pac, krb5_timestamp authtime, if (ret != 0) return ret; - data->data = malloc(pac->data.length); + data->data = k5memdup(pac->data.data, pac->data.length, &ret); if (data->data == NULL) - return ENOMEM; - + return ret; data->length = pac->data.length; - memcpy(data->data, pac->data.data, pac->data.length); memset(pac->data.data, 0, PACTYPE_LENGTH + (pac->pac->cBuffers * PAC_INFO_BUFFER_LENGTH)); diff --git a/src/lib/krb5/krb/preauth2.c b/src/lib/krb5/krb/preauth2.c index ad1618ab6e..060f98aa00 100644 --- a/src/lib/krb5/krb/preauth2.c +++ b/src/lib/krb5/krb/preauth2.c @@ -802,10 +802,9 @@ copy_cookie(krb5_context context, krb5_pa_data **in_padata, if (pa == NULL) return ret; *pa = *cookie; - pa->contents = k5alloc(cookie->length, &ret); + pa->contents = k5memdup(cookie->contents, cookie->length, &ret); if (pa->contents == NULL) goto error; - memcpy(pa->contents, cookie->contents, cookie->length); ret = grow_pa_list(out_pa_list, out_pa_list_size, &pa, 1); if (ret) goto error; @@ -841,12 +840,12 @@ add_s4u_x509_user_padata(krb5_context context, krb5_s4u_userid *userid, s4u_padata->magic = KV5M_PA_DATA; s4u_padata->pa_type = KRB5_PADATA_S4U_X509_USER; - s4u_padata->contents = malloc(userid->subject_cert.length); + s4u_padata->contents = k5memdup(userid->subject_cert.data, + userid->subject_cert.length, &code); if (s4u_padata->contents == NULL) { free(s4u_padata); - return ENOMEM; + return code; } - memcpy(s4u_padata->contents, userid->subject_cert.data, userid->subject_cert.length); s4u_padata->length = userid->subject_cert.length; code = grow_pa_list(out_pa_list, out_pa_list_size, &s4u_padata, 1); diff --git a/src/lib/krb5/krb/send_tgs.c b/src/lib/krb5/krb/send_tgs.c index f4187dc045..9a7c261dd6 100644 --- a/src/lib/krb5/krb/send_tgs.c +++ b/src/lib/krb5/krb/send_tgs.c @@ -239,10 +239,10 @@ k5_make_tgs_req(krb5_context context, if (padata[0] == NULL) goto cleanup; padata[0]->pa_type = KRB5_PADATA_AP_REQ; - padata[0]->contents = k5alloc(ap_req_asn1->length, &ret); + padata[0]->contents = k5memdup(ap_req_asn1->data, ap_req_asn1->length, + &ret); if (padata[0] == NULL) goto cleanup; - memcpy(padata[0]->contents, ap_req_asn1->data, ap_req_asn1->length); padata[0]->length = ap_req_asn1->length; /* Append copies of any other supplied padata. */ @@ -252,10 +252,10 @@ k5_make_tgs_req(krb5_context context, goto cleanup; pa->pa_type = in_padata[i]->pa_type; pa->length = in_padata[i]->length; - pa->contents = k5alloc(in_padata[i]->length, &ret); + pa->contents = k5memdup(in_padata[i]->contents, in_padata[i]->length, + &ret); if (pa->contents == NULL) goto cleanup; - memcpy(pa->contents, in_padata[i]->contents, in_padata[i]->length); padata[i + 1] = pa; } req.padata = padata; diff --git a/src/lib/krb5/krb/walk_rtree.c b/src/lib/krb5/krb/walk_rtree.c index 10711f1d67..0aed147f34 100644 --- a/src/lib/krb5/krb/walk_rtree.c +++ b/src/lib/krb5/krb/walk_rtree.c @@ -303,19 +303,13 @@ rtree_capath_vals(krb5_context context, *vals = NULL; - clientz = calloc(client->length + 1, 1); - if (clientz == NULL) { - retval = ENOMEM; + clientz = k5memdup0(client->data, client->length, &retval); + if (clientz == NULL) goto error; - } - memcpy(clientz, client->data, client->length); - serverz = calloc(server->length + 1, 1); - if (serverz == NULL) { - retval = ENOMEM; + serverz = k5memdup0(server->data, server->length, &retval); + if (serverz == NULL) goto error; - } - memcpy(serverz, server->data, server->length); key[0] = "capaths"; key[1] = clientz; |
