Sun Apr 24 21:16:44 2011 UTC ()
Stop using functions deprecated by Heimdal.  Also, if krb5_init_context()
fails, we can't use Kerberos functions to grab error strings, we
resort to strerror(3) which is what Heimdal's deprecated function
does in this case.


(elric)
diff -r1.18 -r1.19 src/usr.bin/passwd/krb5_passwd.c

cvs diff -r1.18 -r1.19 src/usr.bin/passwd/krb5_passwd.c (expand / switch to context diff)
--- src/usr.bin/passwd/krb5_passwd.c 2009/04/18 09:04:34 1.18
+++ src/usr.bin/passwd/krb5_passwd.c 2011/04/24 21:16:43 1.19
@@ -1,4 +1,4 @@
-/* $NetBSD: krb5_passwd.c,v 1.18 2009/04/18 09:04:34 mlelstv Exp $ */
+/* $NetBSD: krb5_passwd.c,v 1.19 2011/04/24 21:16:43 elric Exp $ */
 
 /*
  * Copyright (c) 2000, 2005 The NetBSD Foundation, Inc.
@@ -68,13 +68,14 @@
 {
 	krb5_context context;
 	krb5_error_code ret;
-	krb5_get_init_creds_opt opt;
+	krb5_get_init_creds_opt *opt;
 	krb5_principal principal;
 	krb5_creds cred;
 	int result_code;
 	krb5_data result_code_string, result_string;
 	char pwbuf[BUFSIZ];
 	int ch;
+	const char *errtxt;
 
 	while ((ch = getopt(argc, argv, "5ku:")) != -1) {
 		switch (ch) {
@@ -125,21 +126,34 @@
 	if (ret != 0) {
 		if (ret == ENXIO)
 			errx(1, "Kerberos 5 not in use.");
-		warnx("Unable to initialize Kerberos 5: %s",
-		    krb5_get_err_text(context, ret));
-		goto bad;
+		errx(1, "Unable to initialize Kerberos 5: %s", strerror(ret));
 	}
 
-	krb5_get_init_creds_opt_init(&opt);
+	ret = krb5_get_init_creds_opt_alloc(context, &opt);
+	if (ret) {
+		errtxt = krb5_get_error_message(context, ret);
+		if (errtxt != NULL) {
+			warnx("failed to allocate opts: %s", errtxt);
+			krb5_free_error_message(context, errtxt);
+		} else {
+			warnx("failed to allocate opts: %d", ret);
+		}
+		goto bad;
+	}
     
-	krb5_get_init_creds_opt_set_tkt_life(&opt, 300L);
-	krb5_get_init_creds_opt_set_forwardable(&opt, FALSE);
-	krb5_get_init_creds_opt_set_proxiable(&opt, FALSE);
+	krb5_get_init_creds_opt_set_tkt_life(opt, 300L);
+	krb5_get_init_creds_opt_set_forwardable(opt, FALSE);
+	krb5_get_init_creds_opt_set_proxiable(opt, FALSE);
 
 	ret = krb5_parse_name(context, username, &principal);
 	if (ret) {
-		warnx("failed to parse principal: %s", 
-		    krb5_get_err_text(context, ret));
+		errtxt = krb5_get_error_message(context, ret);
+		if (errtxt != NULL) {
+			warnx("failed to parse principal: %s", errtxt);
+			krb5_free_error_message(context, errtxt);
+		} else {
+			warnx("failed to parse principal: %d", ret);
+		}
 		goto bad;
 	}
 
@@ -151,7 +165,7 @@
 					   NULL,
 					   0L,
 					   "kadmin/changepw",
-					   &opt);
+					   opt);
 
 
 	switch (ret) {
@@ -168,8 +182,13 @@
 		goto bad;
 
 	default:
-		warnx("failed to get credentials: %s", 
-		    krb5_get_err_text(context, ret));
+		errtxt = krb5_get_error_message(context, ret);
+		if (errtxt != NULL) {
+			warnx("failed to get credentials: %s", errtxt);
+			krb5_free_error_message(context, errtxt);
+		} else {
+			warnx("failed to get credentials: %d", ret);
+		}
 		goto bad;
  	}
 
@@ -186,8 +205,13 @@
 				&result_code_string,
 				&result_string);
 	if (ret) {
-		warnx("unable to set password: %s",
-		    krb5_get_err_text(context, ret));
+		errtxt = krb5_get_error_message(context, ret);
+		if (errtxt != NULL) {
+			warnx("unable to set password: %s", errtxt);
+			krb5_free_error_message(context, errtxt);
+		} else {
+			warnx("unable to set password: %d", ret);
+		}
 		goto bad;
 	}
 
@@ -271,11 +295,17 @@
     int result_code;
     krb5_data result_code_string, result_string;
     char pwbuf[BUFSIZ];
+    const char *errtxt;
 
     ret = krb5_init_context (&context);
     if (ret) {
-	warnx("failed kerberos initialisation: %s", 
-	      krb5_get_err_text(context, ret));
+	errtxt = krb5_get_error_message(context, ret);
+	if (errtxt != NULL) {
+	    warnx("failed kerberos initialisation: %s", errtxt);
+	    krb5_free_error_message(context, errtxt);
+	} else {
+	    warnx("failed kerberos initialisation: %d", ret);
+	}
 	return 1;
     }
 
@@ -288,8 +318,13 @@
     if(username != NULL) {
         ret = krb5_parse_name (context, username, &principal);
         if (ret) {
-	    warnx("failed to parse principal: %s", 
-		  krb5_get_err_text(context, ret));
+	    errtxt = krb5_get_error_message(context, ret);
+	    if (errtxt != NULL) {
+		warnx("failed to parse principal: %s", errtxt);
+		krb5_free_error_message(context, errtxt);
+	    } else {
+		warnx("failed to parse principal: %d", ret);
+	    }
 	    return 1;
 	}
     } else
@@ -317,8 +352,13 @@
 	return 1;
         break;
     default:
-	warnx("failed to get credentials: %s", 
-	      krb5_get_err_text(context, ret));
+	errtxt = krb5_get_error_message(context, ret);
+	if (errtxt != NULL) {
+	    warnx("failed to get credentials: %s", errtxt);
+	    krb5_free_error_message(context, errtxt);
+	} else {
+	    warnx("failed to get credentials: %d", ret);
+	}
 	return 1;
     }
     krb5_data_zero (&result_code_string);