~ubuntu-branches/ubuntu/precise/krb5/precise-updates

« back to all changes in this revision

Viewing changes to src/clients/kpasswd/kpasswd.c

  • Committer: Package Import Robot
  • Author(s): Sam Hartman
  • Date: 2011-12-01 19:34:41 UTC
  • mfrom: (28.1.14 sid)
  • Revision ID: package-import@ubuntu.com-20111201193441-9tipg3aru1jsidyv
Tags: 1.10+dfsg~alpha1-6
* Fix segfault with unknown hostnames in krb5_sname_to_principal,
  Closes: #650671
* Indicate that this library breaks libsmbclient versions that depend on
  krb5_locate_kdc, Closes: #650603, #650611

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
2
#include <stdio.h>
3
3
#include <sys/types.h>
4
 
#include "autoconf.h"
 
4
#include "k5-platform.h"
5
5
 
6
6
#ifndef _WIN32
7
7
#include <unistd.h>
9
9
 
10
10
#include <krb5.h>
11
11
 
12
 
#define P1 "Enter new password"
13
 
#define P2 "Enter it again"
 
12
#define P1 _("Enter new password")
 
13
#define P2 _("Enter it again")
14
14
 
15
15
#ifdef HAVE_PWD_H
16
16
#include <pwd.h>
25
25
    krb5_error_code code;
26
26
    if ((pw = getpwuid(getuid()))) {
27
27
        if ((code = krb5_parse_name(kcontext, pw->pw_name, me))) {
28
 
            com_err (program_name, code, "when parsing name %s", pw->pw_name);
 
28
            com_err(program_name, code, _("when parsing name %s"),
 
29
                    pw->pw_name);
29
30
            exit(1);
30
31
        }
31
32
    } else {
32
 
        fprintf(stderr, "Unable to identify user from password file\n");
 
33
        fprintf(stderr, _("Unable to identify user from password file\n"));
33
34
        exit(1);
34
35
    }
35
36
}
38
39
    krb5_context kcontext;
39
40
    krb5_principal * me;
40
41
{
41
 
    fprintf(stderr, "Unable to identify user\n");
 
42
    fprintf(stderr, _("Unable to identify user\n"));
42
43
    exit(1);
43
44
}
44
45
#endif /* HAVE_PWD_H */
58
59
    int result_code;
59
60
    krb5_data result_code_string, result_string;
60
61
 
 
62
    setlocale(LC_MESSAGES, "");
61
63
    if (argc > 2) {
62
 
        fprintf(stderr, "usage: %s [principal]\n", argv[0]);
 
64
        fprintf(stderr, _("usage: %s [principal]\n"), argv[0]);
63
65
        exit(1);
64
66
    }
65
67
 
67
69
 
68
70
    ret = krb5_init_context(&context);
69
71
    if (ret) {
70
 
        com_err(argv[0], ret, "initializing kerberos library");
 
72
        com_err(argv[0], ret, _("initializing kerberos library"));
71
73
        exit(1);
72
74
    }
73
75
    if ((ret = krb5_get_init_creds_opt_alloc(context, &opts))) {
74
 
        com_err(argv[0], ret, "allocating krb5_get_init_creds_opt");
 
76
        com_err(argv[0], ret, _("allocating krb5_get_init_creds_opt"));
75
77
        exit(1);
76
78
    }
77
79
 
86
88
    */
87
89
    ret = krb5_cc_default(context, &ccache);
88
90
    if (ret != 0) {
89
 
        com_err(argv[0], ret, "opening default ccache");
 
91
        com_err(argv[0], ret, _("opening default ccache"));
90
92
        exit(1);
91
93
    }
92
94
    ret = krb5_cc_get_principal(context, ccache, &princ);
93
95
    if (ret != 0 && ret != KRB5_CC_NOTFOUND && ret != KRB5_FCC_NOFILE) {
94
 
        com_err(argv[0], ret, "getting principal from ccache");
 
96
        com_err(argv[0], ret, _("getting principal from ccache"));
95
97
        exit(1);
96
98
    } else {
97
99
        if (princ != NULL) {
98
100
            ret = krb5_get_init_creds_opt_set_fast_ccache(context, opts,
99
101
                                                          ccache);
100
102
            if (ret) {
101
 
                com_err(argv[0], ret, "while setting FAST ccache");
 
103
                com_err(argv[0], ret, _("while setting FAST ccache"));
102
104
                exit(1);
103
105
            }
104
106
        }
105
107
    }
106
108
    ret = krb5_cc_close(context, ccache);
107
109
    if (ret != 0) {
108
 
        com_err(argv[0], ret, "closing ccache");
 
110
        com_err(argv[0], ret, _("closing ccache"));
109
111
        exit(1);
110
112
    }
111
113
    if (pname) {
112
114
        krb5_free_principal(context, princ);
113
115
        princ = NULL;
114
116
        if ((ret = krb5_parse_name(context, pname, &princ))) {
115
 
            com_err(argv[0], ret, "parsing client name");
 
117
            com_err(argv[0], ret, _("parsing client name"));
116
118
            exit(1);
117
119
        }
118
120
    }
129
131
                                            0, "kadmin/changepw", opts))) {
130
132
        if (ret == KRB5KRB_AP_ERR_BAD_INTEGRITY)
131
133
            com_err(argv[0], 0,
132
 
                    "Password incorrect while getting initial ticket");
 
134
                    _("Password incorrect while getting initial ticket"));
133
135
        else
134
 
            com_err(argv[0], ret, "getting initial ticket");
 
136
            com_err(argv[0], ret, _("getting initial ticket"));
135
137
        krb5_get_init_creds_opt_free(context, opts);
136
138
        exit(1);
137
139
    }
138
140
 
139
141
    pwlen = sizeof(pw);
140
142
    if ((ret = krb5_read_password(context, P1, P2, pw, &pwlen))) {
141
 
        com_err(argv[0], ret, "while reading password");
 
143
        com_err(argv[0], ret, _("while reading password"));
142
144
        krb5_get_init_creds_opt_free(context, opts);
143
145
        exit(1);
144
146
    }
146
148
    if ((ret = krb5_change_password(context, &creds, pw,
147
149
                                    &result_code, &result_code_string,
148
150
                                    &result_string))) {
149
 
        com_err(argv[0], ret, "changing password");
 
151
        com_err(argv[0], ret, _("changing password"));
150
152
        krb5_get_init_creds_opt_free(context, opts);
151
153
        exit(1);
152
154
    }
167
169
        free(result_code_string.data);
168
170
    krb5_get_init_creds_opt_free(context, opts);
169
171
 
170
 
    printf("Password changed.\n");
 
172
    printf(_("Password changed.\n"));
171
173
    exit(0);
172
174
}