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);

Reply via email to