2 * Copyright (c) 1997 Cygnus Solutions.
4 * Author: Michael Graff
16 #include "../lib/gic.h"
21 * Use the new functions to change the password.
24 k5_change_password(HWND hwnd, krb5_context context, char *user, char *realm,
25 char *opasswd, char *npasswd, char **text)
28 krb5_data result_string;
29 krb5_data result_code_string;
31 krb5_get_init_creds_opt opts;
39 name = malloc(strlen(user) + strlen(realm) + 2);
41 *text = "Failed to allocate memory while changing password";
44 sprintf(name, "%s@%s", user, realm);
46 ret = krb5_parse_name(context, name, &princ);
49 *text = "while parsing name";
53 krb5_get_init_creds_opt_init(&opts);
54 krb5_get_init_creds_opt_set_tkt_life(&opts, 5*60);
55 krb5_get_init_creds_opt_set_renew_life(&opts, 0);
56 krb5_get_init_creds_opt_set_forwardable(&opts, 0);
57 krb5_get_init_creds_opt_set_proxiable(&opts, 0);
59 gd.hinstance = hinstance;
63 ret = krb5_get_init_creds_password(context, &creds, princ, opasswd, gic_prompter,
64 &gd, 0, "kadmin/changepw", &opts);
66 *text = "while getting creds";
70 ret = krb5_change_password(context, &creds, npasswd, &result_code, &result_code_string,
73 *text = "while changing password";
78 *text = malloc(result_code_string.length + result_string.length + 3);
82 sprintf(*text, "%.*s%s%.*s",
83 result_code_string.length, result_code_string.data,
84 (result_string.length ? ": " : ""),
86 result_string.data ? result_string.data : "");