From: Theodore Tso Date: Fri, 21 Apr 1995 03:10:41 +0000 (+0000) Subject: Unless HAVE_C_STRUCTURE_ASSIGNMENT is defined, use memcpy to copy X-Git-Tag: krb5-1.0-beta5~323 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=69e5511fe7fe37d20da05c3ea64138d5ad4fa807;p=krb5.git Unless HAVE_C_STRUCTURE_ASSIGNMENT is defined, use memcpy to copy structures around, instead of using structure assignments. (Which aren't guaranteed to work on some broken compilers.) git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@5423 dc483132-0cff-0310-8789-dd5450dbe970 --- diff --git a/src/lib/krb5/krb/ChangeLog b/src/lib/krb5/krb/ChangeLog index cbe035a77..55e9f2974 100644 --- a/src/lib/krb5/krb/ChangeLog +++ b/src/lib/krb5/krb/ChangeLog @@ -1,5 +1,13 @@ Thu Apr 20 16:23:23 1995 Theodore Y. Ts'o (tytso@dcl) + * copy_addrs.c, copy_athctr.c, copy_auth.c, copy_cksum.c, + copy_creds.c, copy_key.c, copy_princ.c, copy_tick.c, + gc_2tgt.c, gc_frm_kdc.c, gc_via_tgt.c, get_creds.c, + mk_req_ext.c: Unless HAVE_C_STRUCTURE_ASSIGNMENT is defined, use + memcpy to copy structures around, instead of using + structure assignments. (Which aren't guaranteed to work + on some broken compilers.) + * mk_req.c (krb5_mk_req): Use krb5_sname_to_principal() in order to create the service principal from the service and hostname pair. This allows for the host cannoncialization diff --git a/src/lib/krb5/krb/copy_addrs.c b/src/lib/krb5/krb/copy_addrs.c index fa3773103..5d17ed3e7 100644 --- a/src/lib/krb5/krb/copy_addrs.c +++ b/src/lib/krb5/krb/copy_addrs.c @@ -36,7 +36,11 @@ krb5_address **outad; if (!(tmpad = (krb5_address *)malloc(sizeof(*tmpad)))) return ENOMEM; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT *tmpad = *inad; +#else + memcpy(tmpad, inad, sizeof(krb5_address)); +#endif if (!(tmpad->contents = (krb5_octet *)malloc(inad->length))) { krb5_xfree(tmpad); return ENOMEM; diff --git a/src/lib/krb5/krb/copy_athctr.c b/src/lib/krb5/krb/copy_athctr.c index 5523f3134..d162fb215 100644 --- a/src/lib/krb5/krb/copy_athctr.c +++ b/src/lib/krb5/krb/copy_athctr.c @@ -37,7 +37,11 @@ krb5_authenticator **authto; if (!(tempto = (krb5_authenticator *)malloc(sizeof(*tempto)))) return ENOMEM; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT *tempto = *authfrom; +#else + memcpy(tempto, authfrom, sizeof(krb5_authenticator)); +#endif retval = krb5_copy_principal(context, authfrom->client, &tempto->client); if (retval) { diff --git a/src/lib/krb5/krb/copy_auth.c b/src/lib/krb5/krb/copy_auth.c index 23c91dc28..759608ca5 100644 --- a/src/lib/krb5/krb/copy_auth.c +++ b/src/lib/krb5/krb/copy_auth.c @@ -36,7 +36,11 @@ krb5_authdata **outad; if (!(tmpad = (krb5_authdata *)malloc(sizeof(*tmpad)))) return ENOMEM; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT *tmpad = *inad; +#else + memcpy(tmpad, inad, sizeof(krb5_authdata)); +#endif if (!(tmpad->contents = (krb5_octet *)malloc(inad->length))) { krb5_xfree(tmpad); return ENOMEM; diff --git a/src/lib/krb5/krb/copy_cksum.c b/src/lib/krb5/krb/copy_cksum.c index 4d8d3efc6..5a9a893d4 100644 --- a/src/lib/krb5/krb/copy_cksum.c +++ b/src/lib/krb5/krb/copy_cksum.c @@ -36,7 +36,11 @@ krb5_copy_checksum(context, ckfrom, ckto) if (!(tempto = (krb5_checksum *)malloc(sizeof(*tempto)))) return ENOMEM; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT *tempto = *ckfrom; +#else + memcpy(tempto, ckfrom, sizeof(krb5_checksum)); +#endif if (!(tempto->contents = (krb5_octet *)malloc(tempto->length))) { diff --git a/src/lib/krb5/krb/copy_creds.c b/src/lib/krb5/krb/copy_creds.c index 1b58af914..712ca3833 100644 --- a/src/lib/krb5/krb/copy_creds.c +++ b/src/lib/krb5/krb/copy_creds.c @@ -43,7 +43,11 @@ krb5_copy_creds(context, incred, outcred) if (!(tempcred = (krb5_creds *)malloc(sizeof(*tempcred)))) return ENOMEM; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT *tempcred = *incred; /* copy everything quickly */ +#else + memcpy(tempcred, incred, sizeof(krb5_creds)); +#endif retval = krb5_copy_principal(context, incred->client, &tempcred->client); if (retval) goto cleanlast; diff --git a/src/lib/krb5/krb/copy_key.c b/src/lib/krb5/krb/copy_key.c index 065b66ef8..e71f39961 100644 --- a/src/lib/krb5/krb/copy_key.c +++ b/src/lib/krb5/krb/copy_key.c @@ -39,7 +39,11 @@ krb5_copy_keyblock(context, from, to) if (!(new_key = (krb5_keyblock *) malloc(sizeof(krb5_keyblock)))) return ENOMEM; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT *new_key = *from; +#else + memcpy(new_key, from, sizeof(krb5_keyblock)); +#endif if (!(new_key->contents = (krb5_octet *)malloc(new_key->length))) { krb5_xfree(new_key); return(ENOMEM); diff --git a/src/lib/krb5/krb/copy_princ.c b/src/lib/krb5/krb/copy_princ.c index 43836eb06..4dbf44e7e 100644 --- a/src/lib/krb5/krb/copy_princ.c +++ b/src/lib/krb5/krb/copy_princ.c @@ -43,7 +43,11 @@ krb5_copy_principal(context, inprinc, outprinc) if (tempprinc == 0) return ENOMEM; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT *tempprinc = *inprinc; /* Copy all of the non-allocated pieces */ +#else + memcpy(tempprinc, inprinc, sizeof(krb5_principal_data)); +#endif nelems = (int) krb5_princ_size(context, inprinc); tempprinc->data = malloc(nelems * sizeof(krb5_data)); diff --git a/src/lib/krb5/krb/copy_tick.c b/src/lib/krb5/krb/copy_tick.c index 3d9b99a99..a4dbed4df 100644 --- a/src/lib/krb5/krb/copy_tick.c +++ b/src/lib/krb5/krb/copy_tick.c @@ -37,7 +37,11 @@ krb5_copy_enc_tkt_part(context, partfrom, partto) if (!(tempto = (krb5_enc_tkt_part *)malloc(sizeof(*tempto)))) return ENOMEM; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT *tempto = *partfrom; +#else + memcpy(tempto, partfrom, sizeof(krb5_enc_tkt_part)); +#endif retval = krb5_copy_keyblock(context, partfrom->session, &tempto->session); if (retval) { @@ -103,7 +107,11 @@ krb5_copy_ticket(context, from, pto) if (!(tempto = (krb5_ticket *)malloc(sizeof(*tempto)))) return ENOMEM; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT *tempto = *from; +#else + memcpy(tempto, from, sizeof(krb5_ticket)); +#endif retval = krb5_copy_principal(context, from->server, &tempto->server); if (retval) { krb5_xfree(tempto); diff --git a/src/lib/krb5/krb/gc_2tgt.c b/src/lib/krb5/krb/gc_2tgt.c index 9f9106fc0..c5ddcf7c4 100644 --- a/src/lib/krb5/krb/gc_2tgt.c +++ b/src/lib/krb5/krb/gc_2tgt.c @@ -139,7 +139,13 @@ krb5_get_cred_via_2tgt (context, tgt, kdcoptions, sumtype, in_cred, out_cred) goto errout; /* Should verify that the ticket is what we asked for. */ +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT (*out_cred)->times = dec_rep->enc_part2->times; +#else + memcpy(&(*out_cred)->times, &dec_rep->enc_part2->times, + sizeof(krb5_ticket_times)); +#endif + (*out_cred)->ticket_flags = dec_rep->enc_part2->flags; (*out_cred)->is_skey = TRUE; if (dec_rep->enc_part2->caddrs) diff --git a/src/lib/krb5/krb/gc_frm_kdc.c b/src/lib/krb5/krb/gc_frm_kdc.c index 30e278d38..b82d023a1 100644 --- a/src/lib/krb5/krb/gc_frm_kdc.c +++ b/src/lib/krb5/krb/gc_frm_kdc.c @@ -241,7 +241,12 @@ krb5_get_cred_from_kdc(context, ccache, in_cred, out_cred, tgts) krb5_free_cred_contents(context, &tgtq); memset(&tgtq, 0, sizeof(tgtq)); +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT tgtq.times = tgt.times; +#else + memcpy(&tgtq.times, &tgt.times, sizeof(krb5_ticket_times)); +#endif + if (retval = krb5_copy_principal(context, tgt.client, &tgtq.client)) goto cleanup; if(retval = krb5_copy_principal(context, int_server, &tgtq.server)) diff --git a/src/lib/krb5/krb/gc_via_tgt.c b/src/lib/krb5/krb/gc_via_tgt.c index c0d31c25d..5c15a0138 100644 --- a/src/lib/krb5/krb/gc_via_tgt.c +++ b/src/lib/krb5/krb/gc_via_tgt.c @@ -137,7 +137,12 @@ krb5_get_cred_via_tgt (context, tgt, kdcoptions, sumtype, in_cred, out_cred) } (*out_cred)->keyblock.etype = dec_rep->ticket->enc_part.etype; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT (*out_cred)->times = dec_rep->enc_part2->times; +#else + memcpy(&(*out_cred)->times, &dec_rep->enc_part2->times, + sizeof(krb5_ticket_times)); +#endif #if 0 /* XXX probably need access to the request */ diff --git a/src/lib/krb5/krb/get_creds.c b/src/lib/krb5/krb/get_creds.c index bc9360a93..58ecd0035 100644 --- a/src/lib/krb5/krb/get_creds.c +++ b/src/lib/krb5/krb/get_creds.c @@ -61,7 +61,11 @@ krb5_get_credentials(context, options, ccache, in_creds, out_creds) memset((char *)&mcreds, 0, sizeof(krb5_creds)); mcreds.times.endtime = in_creds->times.endtime; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT mcreds.keyblock = in_creds->keyblock; +#else + memcpy(&mcreds.keyblock, &in_creds->keyblock, sizeof(krb5_keyblock)); +#endif mcreds.authdata = in_creds->authdata; mcreds.server = in_creds->server; mcreds.client = in_creds->client; diff --git a/src/lib/krb5/krb/mk_req_ext.c b/src/lib/krb5/krb/mk_req_ext.c index f146d1483..6cfaf11b3 100644 --- a/src/lib/krb5/krb/mk_req_ext.c +++ b/src/lib/krb5/krb/mk_req_ext.c @@ -221,7 +221,12 @@ krb5_mk_req_extended(context, auth_context, ap_req_options, in_data, in_creds, if (retval = encode_krb5_ap_req(&request, &toutbuf)) goto cleanup_cksum; +#ifdef HAVE_C_STRUCTURE_ASSIGNMENT *outbuf = *toutbuf; +#else + memcpy(outbuf, toutbuf, sizeof(krb5_data)); +#endif + krb5_xfree(toutbuf); cleanup_cksum: