]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/gssd/context_heimdal.c
Merge branch 'sid'
[nfs-utils.git] / utils / gssd / context_heimdal.c
index 6fb8fbdb35da550e3a562f4d66e2268d006f25ab..1e8738aba96b9ad9c8b7017366355cd3001389fb 100644 (file)
@@ -28,7 +28,9 @@
   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
@@ -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",
-                       gssd_k5_err_msg(NULL, 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",
-                       gssd_k5_err_msg(context, 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",
-                       gssd_k5_err_msg(context, 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",
-                       gssd_k5_err_msg(NULL, 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",
-                       gssd_k5_err_msg(context, 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;