Module Name: src Committed By: elric Date: Sun Apr 24 21:16:44 UTC 2011
Modified Files: src/usr.bin/passwd: krb5_passwd.c Log Message: 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. To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 src/usr.bin/passwd/krb5_passwd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/passwd/krb5_passwd.c diff -u src/usr.bin/passwd/krb5_passwd.c:1.18 src/usr.bin/passwd/krb5_passwd.c:1.19 --- src/usr.bin/passwd/krb5_passwd.c:1.18 Sat Apr 18 09:04:34 2009 +++ src/usr.bin/passwd/krb5_passwd.c Sun Apr 24 21:16:43 2011 @@ -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);