X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Flib%2Fkrb5%2Frcache%2Frc_dfl.c;h=c4d2c744da402410159e70369567fdcd25b85a35;hb=47b9ae4278e3e92734d2e0af09ff34058477dfa4;hp=cc42f461f21f9959bc842fb2d02964d3de7907e0;hpb=c2f6a99f73a045c349787dd6e3036f97d5244492;p=platform%2Fupstream%2Fkrb5.git diff --git a/src/lib/krb5/rcache/rc_dfl.c b/src/lib/krb5/rcache/rc_dfl.c index cc42f46..c4d2c74 100644 --- a/src/lib/krb5/rcache/rc_dfl.c +++ b/src/lib/krb5/rcache/rc_dfl.c @@ -9,10 +9,10 @@ /* * An implementation for the default replay cache type. */ +#include "k5-int.h" #include "rc_base.h" #include "rc_dfl.h" #include "rc_io.h" -#include "k5-int.h" #include "rc-int.h" /* @@ -201,12 +201,9 @@ krb5_error_code KRB5_CALLCONV krb5_rc_dfl_get_span(krb5_context context, krb5_rcache id, krb5_deltat *lifespan) { - krb5_error_code err; struct dfl_data *t; - err = k5_mutex_lock(&id->lock); - if (err) - return err; + k5_mutex_lock(&id->lock); t = (struct dfl_data *) id->data; *lifespan = t->lifespan; k5_mutex_unlock(&id->lock); @@ -239,9 +236,7 @@ krb5_rc_dfl_init(krb5_context context, krb5_rcache id, krb5_deltat lifespan) { krb5_error_code retval; - retval = k5_mutex_lock(&id->lock); - if (retval) - return retval; + k5_mutex_lock(&id->lock); retval = krb5_rc_dfl_init_locked(context, id, lifespan); k5_mutex_unlock(&id->lock); return retval; @@ -276,10 +271,7 @@ krb5_rc_dfl_close_no_free(krb5_context context, krb5_rcache id) krb5_error_code KRB5_CALLCONV krb5_rc_dfl_close(krb5_context context, krb5_rcache id) { - krb5_error_code retval; - retval = k5_mutex_lock(&id->lock); - if (retval) - return retval; + k5_mutex_lock(&id->lock); krb5_rc_dfl_close_no_free(context, id); k5_mutex_unlock(&id->lock); k5_mutex_destroy(&id->lock); @@ -394,7 +386,7 @@ parse_counted_string(char **strptr, char **result) /* * Hash extension records have the format: * client = - * server = HASH: : : + * server = SHA256: : : * Spaces in the client and server string are represented with * with backslashes. Client and server lengths are represented in * ASCII decimal (which is different from the 32-bit binary we use @@ -411,19 +403,17 @@ check_hash_extension(krb5_donot_replay *rep) /* Check if this appears to match the hash extension format. */ if (*rep->client) return 0; - if (strncmp(rep->server, "HASH:", 5) != 0) + if (strncmp(rep->server, "SHA256:", 7) != 0) return 0; /* Parse out the message hash. */ - str = rep->server + 5; + str = rep->server + 7; end = strchr(str, ' '); if (!end) return 0; - msghash = malloc(end - str + 1); + msghash = k5memdup0(str, end - str, &retval); if (!msghash) return KRB5_RC_MALLOC; - memcpy(msghash, str, end - str); - msghash[end - str] = '\0'; str = end + 1; /* Parse out the client and server. */ @@ -626,9 +616,8 @@ krb5_error_code KRB5_CALLCONV krb5_rc_dfl_recover(krb5_context context, krb5_rcache id) { krb5_error_code ret; - ret = k5_mutex_lock(&id->lock); - if (ret) - return ret; + + k5_mutex_lock(&id->lock); ret = krb5_rc_dfl_recover_locked(context, id); k5_mutex_unlock(&id->lock); return ret; @@ -640,9 +629,7 @@ krb5_rc_dfl_recover_or_init(krb5_context context, krb5_rcache id, { krb5_error_code retval; - retval = k5_mutex_lock(&id->lock); - if (retval) - return retval; + k5_mutex_lock(&id->lock); retval = krb5_rc_dfl_recover_locked(context, id); if (retval) retval = krb5_rc_dfl_init_locked(context, id, lifespan); @@ -655,11 +642,10 @@ krb5_rc_io_store(krb5_context context, struct dfl_data *t, krb5_donot_replay *rep) { size_t clientlen, serverlen; - ssize_t buflen; unsigned int len; krb5_error_code ret; struct k5buf buf, extbuf; - char *bufptr, *extstr; + char *extstr; clientlen = strlen(rep->client); serverlen = strlen(rep->server); @@ -672,47 +658,45 @@ krb5_rc_io_store(krb5_context context, struct dfl_data *t, */ /* Format the extension value so we know its length. */ - krb5int_buf_init_dynamic(&extbuf); - krb5int_buf_add_fmt(&extbuf, "HASH:%s %lu:%s %lu:%s", rep->msghash, - (unsigned long) clientlen, rep->client, - (unsigned long) serverlen, rep->server); - extstr = krb5int_buf_data(&extbuf); - if (!extstr) + k5_buf_init_dynamic(&extbuf); + k5_buf_add_fmt(&extbuf, "SHA256:%s %lu:%s %lu:%s", rep->msghash, + (unsigned long)clientlen, rep->client, + (unsigned long)serverlen, rep->server); + if (k5_buf_status(&extbuf) != 0) return KRB5_RC_MALLOC; + extstr = extbuf.data; /* * Put the extension value into the server field of a * regular-format record, with an empty client field. */ - krb5int_buf_init_dynamic(&buf); + k5_buf_init_dynamic(&buf); len = 1; - krb5int_buf_add_len(&buf, (char *) &len, sizeof(len)); - krb5int_buf_add_len(&buf, "", 1); + k5_buf_add_len(&buf, (char *)&len, sizeof(len)); + k5_buf_add_len(&buf, "", 1); len = strlen(extstr) + 1; - krb5int_buf_add_len(&buf, (char *) &len, sizeof(len)); - krb5int_buf_add_len(&buf, extstr, len); - krb5int_buf_add_len(&buf, (char *) &rep->cusec, sizeof(rep->cusec)); - krb5int_buf_add_len(&buf, (char *) &rep->ctime, sizeof(rep->ctime)); + k5_buf_add_len(&buf, (char *)&len, sizeof(len)); + k5_buf_add_len(&buf, extstr, len); + k5_buf_add_len(&buf, (char *)&rep->cusec, sizeof(rep->cusec)); + k5_buf_add_len(&buf, (char *)&rep->ctime, sizeof(rep->ctime)); free(extstr); } else /* No extension record needed. */ - krb5int_buf_init_dynamic(&buf); + k5_buf_init_dynamic(&buf); len = clientlen + 1; - krb5int_buf_add_len(&buf, (char *) &len, sizeof(len)); - krb5int_buf_add_len(&buf, rep->client, len); + k5_buf_add_len(&buf, (char *)&len, sizeof(len)); + k5_buf_add_len(&buf, rep->client, len); len = serverlen + 1; - krb5int_buf_add_len(&buf, (char *) &len, sizeof(len)); - krb5int_buf_add_len(&buf, rep->server, len); - krb5int_buf_add_len(&buf, (char *) &rep->cusec, sizeof(rep->cusec)); - krb5int_buf_add_len(&buf, (char *) &rep->ctime, sizeof(rep->ctime)); - - bufptr = krb5int_buf_data(&buf); - buflen = krb5int_buf_len(&buf); - if (bufptr == NULL || buflen < 0) + k5_buf_add_len(&buf, (char *)&len, sizeof(len)); + k5_buf_add_len(&buf, rep->server, len); + k5_buf_add_len(&buf, (char *)&rep->cusec, sizeof(rep->cusec)); + k5_buf_add_len(&buf, (char *)&rep->ctime, sizeof(rep->ctime)); + + if (k5_buf_status(&buf) != 0) return KRB5_RC_MALLOC; - ret = krb5_rc_io_write(context, &t->d, bufptr, buflen); - krb5int_free_buf(&buf); + ret = krb5_rc_io_write(context, &t->d, buf.data, buf.len); + k5_buf_free(&buf); return ret; } @@ -729,9 +713,7 @@ krb5_rc_dfl_store(krb5_context context, krb5_rcache id, krb5_donot_replay *rep) if (ret) return ret; - ret = k5_mutex_lock(&id->lock); - if (ret) - return ret; + k5_mutex_lock(&id->lock); switch(rc_store(context, id, rep, now, FALSE)) { case CMP_MALLOC: @@ -861,9 +843,8 @@ krb5_error_code KRB5_CALLCONV krb5_rc_dfl_expunge(krb5_context context, krb5_rcache id) { krb5_error_code ret; - ret = k5_mutex_lock(&id->lock); - if (ret) - return ret; + + k5_mutex_lock(&id->lock); ret = krb5_rc_dfl_expunge_locked(context, id); k5_mutex_unlock(&id->lock); return ret;