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

« back to all changes in this revision

Viewing changes to src/lib/kadm5/chpass_util.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:
102
102
                msg_ret[msg_len - 1] = '\0';
103
103
                return(code);
104
104
            } else {
105
 
                strncpy(msg_ret, error_message(code), msg_len - 1);
106
 
                strncat(msg_ret, " ", msg_len - 1);
107
 
                strncat(msg_ret, string_text(CHPASS_UTIL_WHILE_READING_PASSWORD),
108
 
                        msg_len - 1);
109
 
                strncat(msg_ret, string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED),
110
 
                        msg_len - 1);
 
105
                snprintf(msg_ret, msg_len, "%s %s\n\n%s",
 
106
                         error_message(code),
 
107
                         string_text(CHPASS_UTIL_WHILE_READING_PASSWORD),
 
108
                         string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED));
111
109
                msg_ret[msg_len - 1] = '\0';
112
110
                return(code);
113
111
            }
142
140
        (code != KADM5_PASS_REUSE) &&(code != KADM5_PASS_Q_CLASS) &&
143
141
        (code != KADM5_PASS_Q_DICT) && (code != KADM5_PASS_TOOSOON)) {
144
142
        /* Can't get more info for other errors */
145
 
        snprintf(buffer, sizeof(buffer), "%s %s", error_message(code),
 
143
        snprintf(msg_ret, msg_len, "%s\n%s %s\n",
 
144
                 string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED),
 
145
                 error_message(code),
146
146
                 string_text(CHPASS_UTIL_WHILE_TRYING_TO_CHANGE));
147
 
        snprintf(msg_ret, msg_len, "%s\n%s\n",
148
 
                 string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED),
149
 
                 buffer);
150
147
        return(code);
151
148
    }
152
149
 
170
167
    code2 = kadm5_get_principal (lhandle, princ, &princ_ent,
171
168
                                 KADM5_PRINCIPAL_NORMAL_MASK);
172
169
    if (code2 != 0) {
173
 
        strncpy(msg_ret, error_message(code2), msg_len - 1);
174
 
        strncat(msg_ret, " ", msg_len - 1 - strlen(msg_ret));
175
 
        strncat(msg_ret, string_text(CHPASS_UTIL_GET_PRINC_INFO), msg_len - 1 - strlen(msg_ret));
176
 
        strncat(msg_ret, "\n", msg_len - 1 - strlen(msg_ret));
177
 
        strncat(msg_ret, error_message(code), msg_len - 1 - strlen(msg_ret));
178
 
        strncat(msg_ret, " ", msg_len - 1 - strlen(msg_ret));
179
 
        strncat(msg_ret, string_text(CHPASS_UTIL_WHILE_TRYING_TO_CHANGE),
180
 
                msg_len - 1 - strlen(msg_ret));
181
 
        strncat(msg_ret, "\n\n", msg_len - 1 - strlen(msg_ret));
182
 
        strncat(msg_ret, string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED),
183
 
                msg_len - 1 - strlen(msg_ret));
184
 
        strncat(msg_ret, "\n", msg_len - 1 - strlen(msg_ret));
 
170
        snprintf(msg_ret, msg_len, "%s %s\n%s %s\n\n%s\n",
 
171
                 error_message(code2),
 
172
                 string_text(CHPASS_UTIL_GET_PRINC_INFO),
 
173
                 error_message(code),
 
174
                 string_text(CHPASS_UTIL_WHILE_TRYING_TO_CHANGE),
 
175
                 string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED));
185
176
        msg_ret[msg_len - 1] = '\0';
186
177
        return(code);
187
178
    }
188
179
 
189
180
    if ((princ_ent.aux_attributes & KADM5_POLICY) == 0) {
190
 
        strncpy(msg_ret, error_message(code), msg_len - 1 - strlen(msg_ret));
191
 
        strncat(msg_ret, " ", msg_len - 1 - strlen(msg_ret));
192
 
        strncpy(msg_ret, string_text(CHPASS_UTIL_NO_POLICY_YET_Q_ERROR),
193
 
                msg_len - 1 - strlen(msg_ret));
194
 
        strncat(msg_ret, "\n\n", msg_len - 1 - strlen(msg_ret));
195
 
        strncpy(msg_ret, string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED),
196
 
                msg_len - 1 - strlen(msg_ret));
 
181
        /* Some module implements its own password policy. */
 
182
        snprintf(msg_ret, msg_len, "%s\n\n%s",
 
183
                 error_message(code),
 
184
                 string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED));
197
185
        msg_ret[msg_len - 1] = '\0';
198
 
 
199
186
        (void) kadm5_free_principal_ent(lhandle, &princ_ent);
200
187
        return(code);
201
188
    }
248
235
    }
249
236
 
250
237
    /* We should never get here, but just in case ... */
251
 
    snprintf(buffer, sizeof(buffer), "%s %s", error_message(code),
 
238
    snprintf(msg_ret, msg_len, "%s\n%s %s\n",
 
239
             string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED),
 
240
             error_message(code),
252
241
             string_text(CHPASS_UTIL_WHILE_TRYING_TO_CHANGE));
253
 
    snprintf(msg_ret, msg_len, "%s\n%s\n",
254
 
             string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED),
255
 
             buffer);
256
242
    (void) kadm5_free_principal_ent(lhandle, &princ_ent);
257
243
    (void) kadm5_free_policy_ent(lhandle, &policy_ent);
258
244
    return(code);