Module Name: src Committed By: riz Date: Mon May 7 17:06:21 UTC 2012
Modified Files: src/usr.bin/passwd [netbsd-6]: krb5_passwd.c Log Message: Pull up following revision(s) (requested by christos in ticket #231): usr.bin/passwd/krb5_passwd.c: revision 1.20 - fix non pam build - merge duplicated error code - fix opt struct leak To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.19.6.1 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.19 src/usr.bin/passwd/krb5_passwd.c:1.19.6.1 --- src/usr.bin/passwd/krb5_passwd.c:1.19 Sun Apr 24 21:16:43 2011 +++ src/usr.bin/passwd/krb5_passwd.c Mon May 7 17:06:21 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: krb5_passwd.c,v 1.19 2011/04/24 21:16:43 elric Exp $ */ +/* $NetBSD: krb5_passwd.c,v 1.19.6.1 2012/05/07 17:06:21 riz Exp $ */ /* * Copyright (c) 2000, 2005 The NetBSD Foundation, Inc. @@ -45,6 +45,17 @@ #include "extern.h" +static void +pwkrb5_warn(const char *msg, krb5_context context, krb5_error_code ret) +{ + const char *errtxt = krb5_get_error_message(context, ret); + if (errtxt != NULL) { + warnx("%s: %s", msg, errtxt); + krb5_free_error_message(context, errtxt); + } else + warnx("%s: %d", msg, ret); +} + #ifdef USE_PAM void @@ -75,7 +86,6 @@ pwkrb5_process(const char *username, int krb5_data result_code_string, result_string; char pwbuf[BUFSIZ]; int ch; - const char *errtxt; while ((ch = getopt(argc, argv, "5ku:")) != -1) { switch (ch) { @@ -131,13 +141,7 @@ pwkrb5_process(const char *username, int 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); - } + pwkrb5_warn("failed to allocate opts", context, ret); goto bad; } @@ -147,13 +151,8 @@ pwkrb5_process(const char *username, int ret = krb5_parse_name(context, username, &principal); if (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); - } + krb5_get_init_creds_opt_free(context, opt); + pwkrb5_warn("failed to parse principal", context, ret); goto bad; } @@ -167,7 +166,7 @@ pwkrb5_process(const char *username, int "kadmin/changepw", opt); - + krb5_get_init_creds_opt_free(context, opt); switch (ret) { case 0: break; @@ -182,13 +181,7 @@ pwkrb5_process(const char *username, int goto bad; default: - 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); - } + pwkrb5_warn("failed to get credentials", context, ret); goto bad; } @@ -205,13 +198,7 @@ pwkrb5_process(const char *username, int &result_code_string, &result_string); if (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); - } + pwkrb5_warn("unable to set password", context, ret); goto bad; } @@ -283,48 +270,39 @@ krb5_end(void) krb5_free_context(defcontext); } - int krb5_chpw(const char *username) { krb5_error_code ret; krb5_context context; krb5_principal principal; - krb5_get_init_creds_opt opt; + krb5_get_init_creds_opt *opt; krb5_creds cred; int result_code; krb5_data result_code_string, result_string; char pwbuf[BUFSIZ]; - const char *errtxt; ret = krb5_init_context (&context); if (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); - } + pwkrb5_warn("failed kerberos initialisation", context, ret); return 1; } - krb5_get_init_creds_opt_init (&opt); + ret = krb5_get_init_creds_opt_alloc (context, &opt); + if (ret) { + pwkrb5_warn("failed to allocate credential opt", context, ret); + return 1; + } - krb5_get_init_creds_opt_set_tkt_life (&opt, 300); - 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, 300); + krb5_get_init_creds_opt_set_forwardable (opt, FALSE); + krb5_get_init_creds_opt_set_proxiable (opt, FALSE); if(username != NULL) { ret = krb5_parse_name (context, username, &principal); if (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); - } + krb5_get_init_creds_opt_free (context, opt); + pwkrb5_warn("failed to parse principal", context, ret); return 1; } } else @@ -338,8 +316,9 @@ krb5_chpw(const char *username) NULL, 0, "kadmin/changepw", - &opt); + opt); + krb5_get_init_creds_opt_free (context, opt); switch (ret) { case 0: break; @@ -352,13 +331,7 @@ krb5_chpw(const char *username) return 1; break; default: - 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); - } + pwkrb5_warn("failed to get credentials", context, ret); return 1; } krb5_data_zero (&result_code_string);