X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fgssd%2Fcontext_heimdal.c;h=1e8738aba96b9ad9c8b7017366355cd3001389fb;hp=5520cbcc61d15850b16f9d249ed28de139f2a41c;hb=HEAD;hpb=582e963f4aa62c9c6957c3868d487a82385cc5a1 diff --git a/utils/gssd/context_heimdal.c b/utils/gssd/context_heimdal.c index 5520cbc..1e8738a 100644 --- a/utils/gssd/context_heimdal.c +++ b/utils/gssd/context_heimdal.c @@ -28,7 +28,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "config.h" +#ifdef HAVE_CONFIG_H +#include +#endif /* HAVE_CONFIG_H */ #ifndef HAVE_LUCID_CONTEXT_SUPPORT #ifdef HAVE_HEIMDAL @@ -67,19 +69,19 @@ int write_heimdal_enc_key(char **p, char *end, gss_ctx_id_t ctx) krb5_context context; krb5_error_code ret; int i; - char *skd, *dkd; + char *skd, *dkd, *k5err = NULL; int code = -1; if ((ret = krb5_init_context(&context))) { - printerr(0, "ERROR: initializing krb5_context: %s\n", - error_message(ret)); + k5err = gssd_k5_err_msg(NULL, ret); + printerr(0, "ERROR: initializing krb5_context: %s\n", k5err); goto out_err; } if ((ret = krb5_auth_con_getlocalsubkey(context, ctx->auth_context, &key))){ - printerr(0, "ERROR: getting auth_context key: %s\n", - error_message(ret)); + k5err = gssd_k5_err_msg(context, ret); + printerr(0, "ERROR: getting auth_context key: %s\n", k5err); goto out_err_free_context; } @@ -95,9 +97,9 @@ int write_heimdal_enc_key(char **p, char *end, gss_ctx_id_t ctx) enc_key.keyvalue.length = key->keyvalue.length; if ((enc_key.keyvalue.data = calloc(1, enc_key.keyvalue.length)) == NULL) { - + k5err = gssd_k5_err_msg(context, ENOMEM); printerr(0, "ERROR: allocating memory for enc key: %s\n", - error_message(ENOMEM)); + k5err); goto out_err_free_key; } skd = (char *) key->keyvalue.data; @@ -117,6 +119,7 @@ int write_heimdal_enc_key(char **p, char *end, gss_ctx_id_t ctx) out_err_free_context: krb5_free_context(context); out_err: + free(k5err); printerr(2, "write_heimdal_enc_key: %s\n", code ? "FAILED" : "SUCCESS"); return(code); } @@ -126,18 +129,19 @@ int write_heimdal_seq_key(char **p, char *end, gss_ctx_id_t ctx) krb5_keyblock *key; krb5_context context; krb5_error_code ret; + char *k5err = NULL; int code = -1; if ((ret = krb5_init_context(&context))) { - printerr(0, "ERROR: initializing krb5_context: %s\n", - error_message(ret)); + k5err = gssd_k5_err_msg(NULL, ret); + printerr(0, "ERROR: initializing krb5_context: %s\n", k5err); goto out_err; } if ((ret = krb5_auth_con_getlocalsubkey(context, ctx->auth_context, &key))){ - printerr(0, "ERROR: getting auth_context key: %s\n", - error_message(ret)); + k5err = gssd_k5_err_msg(context, ret); + printerr(0, "ERROR: getting auth_context key: %s\n", k5err); goto out_err_free_context; } @@ -160,6 +164,7 @@ int write_heimdal_seq_key(char **p, char *end, gss_ctx_id_t ctx) out_err_free_context: krb5_free_context(context); out_err: + free(k5err); printerr(2, "write_heimdal_seq_key: %s\n", code ? "FAILED" : "SUCCESS"); return(code); } @@ -198,9 +203,9 @@ int write_heimdal_seq_key(char **p, char *end, gss_ctx_id_t ctx) */ int -serialize_krb5_ctx(gss_ctx_id_t ctx, gss_buffer_desc *buf) +serialize_krb5_ctx(gss_ctx_id_t *_ctx, gss_buffer_desc *buf, int32_t *endtime) { - + gss_ctx_id_t ctx = *_ctx; char *p, *end; static int constant_one = 1; static int constant_zero = 0; @@ -239,6 +244,9 @@ serialize_krb5_ctx(gss_ctx_id_t ctx, gss_buffer_desc *buf) /* endtime */ if (WRITE_BYTES(&p, end, ctx->lifetime)) goto out_err; + if (endtime) + *endtime = ctx->lifetime; + /* seq_send */ if (WRITE_BYTES(&p, end, ctx->auth_context->local_seqnumber)) goto out_err;