]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/gssd/context_heimdal.c
nfs-utils: Fix source code character encoding
[nfs-utils.git] / utils / gssd / context_heimdal.c
index edd4dfcb4649544cf85d66965602fa8fd8e5817f..6f3b8fd03f37e12a048337eed1d0d80e3bdb3224 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2004 The Regents of the University of Michigan.
+  Copyright (c) 2004-2006 The Regents of the University of Michigan.
   All rights reserved.
 
   Redistribution and use in source and binary forms, with or without
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
-#include "config.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /* HAVE_CONFIG_H */
 
+#ifndef HAVE_LUCID_CONTEXT_SUPPORT
 #ifdef HAVE_HEIMDAL
 
 #include <stdio.h>
@@ -46,8 +49,6 @@
 #include "gss_oids.h"
 #include "write_bytes.h"
 
-#define MAX_CTX_LEN 4096
-
 int write_heimdal_keyblock(char **p, char *end, krb5_keyblock *key)
 {
        gss_buffer_desc tmp;
@@ -68,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;
        }
 
@@ -96,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;
@@ -118,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);
 }
@@ -127,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;
        }
 
@@ -161,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);
 }
@@ -199,7 +203,7 @@ 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)
 {
 
        char *p, *end;
@@ -240,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;
@@ -265,3 +272,4 @@ out_err:
 }
 
 #endif /* HAVE_HEIMDAL */
+#endif /* HAVE_LUCID_CONTEXT_SUPPORT */