~ubuntu-branches/ubuntu/maverick/krb5/maverick

« back to all changes in this revision

Viewing changes to src/lib/kadm5/chpass_util.c

  • Committer: Bazaar Package Importer
  • Author(s): Sam Hartman
  • Date: 2009-05-07 16:16:34 UTC
  • mfrom: (13.1.7 sid)
  • Revision ID: james.westby@ubuntu.com-20090507161634-xqyk0s9na0le4flj
Tags: 1.7dfsg~beta1-4
When  decrypting the TGS response fails with the subkey, try with the
session key to work around Heimdal bug, Closes: #527353 

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
#include <memory.h>
10
10
#endif
11
11
#include <time.h>
 
12
#include <string.h>
12
13
 
13
14
#include <kadm5/admin.h>
14
15
#include "admin_internal.h"
139
140
  if ((code != KADM5_PASS_Q_TOOSHORT) && 
140
141
      (code != KADM5_PASS_REUSE) &&(code != KADM5_PASS_Q_CLASS) && 
141
142
      (code != KADM5_PASS_Q_DICT) && (code != KADM5_PASS_TOOSOON)) {
142
 
    /* Can't get more info for other errors */
143
 
    sprintf(buffer, "%s %s", error_message(code), 
144
 
            string_text(CHPASS_UTIL_WHILE_TRYING_TO_CHANGE));
145
 
    sprintf(msg_ret, "%s\n%s\n", string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED), 
146
 
            buffer);
147
 
    return(code);
 
143
      /* Can't get more info for other errors */
 
144
      snprintf(buffer, sizeof(buffer), "%s %s", error_message(code), 
 
145
               string_text(CHPASS_UTIL_WHILE_TRYING_TO_CHANGE));
 
146
      snprintf(msg_ret, msg_len, "%s\n%s\n",
 
147
               string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED), 
 
148
               buffer);
 
149
      return(code);
148
150
  }
149
151
 
150
152
  /* Ok, we have a password quality error. Return a good message */
200
202
  code2 = kadm5_get_policy(lhandle, princ_ent.policy,
201
203
                           &policy_ent);
202
204
  if (code2 != 0) {
203
 
    sprintf(msg_ret, "%s %s\n%s %s\n\n%s\n ", error_message(code2), 
204
 
            string_text(CHPASS_UTIL_GET_POLICY_INFO),
205
 
            error_message(code),
206
 
            string_text(CHPASS_UTIL_WHILE_TRYING_TO_CHANGE),
207
 
            string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED));
208
 
    (void) kadm5_free_principal_ent(lhandle, &princ_ent);
209
 
    return(code);
 
205
      snprintf(msg_ret, msg_len, "%s %s\n%s %s\n\n%s\n ", error_message(code2), 
 
206
               string_text(CHPASS_UTIL_GET_POLICY_INFO),
 
207
               error_message(code),
 
208
               string_text(CHPASS_UTIL_WHILE_TRYING_TO_CHANGE),
 
209
               string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED));
 
210
      (void) kadm5_free_principal_ent(lhandle, &princ_ent);
 
211
      return(code);
210
212
  }
211
213
  
212
214
  if (code == KADM5_PASS_Q_TOOSHORT) {
213
 
    sprintf(msg_ret, string_text(CHPASS_UTIL_PASSWORD_TOO_SHORT), 
214
 
            policy_ent.pw_min_length);
215
 
    (void) kadm5_free_principal_ent(lhandle, &princ_ent);
216
 
    (void) kadm5_free_policy_ent(lhandle, &policy_ent);
217
 
    return(code);
 
215
      snprintf(msg_ret, msg_len, string_text(CHPASS_UTIL_PASSWORD_TOO_SHORT), 
 
216
               policy_ent.pw_min_length);
 
217
      (void) kadm5_free_principal_ent(lhandle, &princ_ent);
 
218
      (void) kadm5_free_policy_ent(lhandle, &policy_ent);
 
219
      return(code);
218
220
  }
219
221
 
220
222
/* Can't get more info for other errors */
221
223
 
222
224
  if (code == KADM5_PASS_Q_CLASS) {
223
 
    sprintf(msg_ret, string_text(CHPASS_UTIL_TOO_FEW_CLASSES), 
224
 
            policy_ent.pw_min_classes);
225
 
    (void) kadm5_free_principal_ent(lhandle, &princ_ent);
226
 
    (void) kadm5_free_policy_ent(lhandle, &policy_ent);
227
 
    return(code);
 
225
      snprintf(msg_ret, msg_len, string_text(CHPASS_UTIL_TOO_FEW_CLASSES), 
 
226
               policy_ent.pw_min_classes);
 
227
      (void) kadm5_free_principal_ent(lhandle, &princ_ent);
 
228
      (void) kadm5_free_policy_ent(lhandle, &policy_ent);
 
229
      return(code);
228
230
  }
229
231
 
230
232
  if (code == KADM5_PASS_TOOSOON) {
237
239
    if (*(ptr = &time_string[strlen(time_string)-1]) == '\n')
238
240
      *ptr = '\0';
239
241
 
240
 
    sprintf(msg_ret, string_text(CHPASS_UTIL_PASSWORD_TOO_SOON), 
241
 
            time_string);
 
242
    snprintf(msg_ret, msg_len, string_text(CHPASS_UTIL_PASSWORD_TOO_SOON), 
 
243
             time_string);
242
244
    (void) kadm5_free_principal_ent(lhandle, &princ_ent);
243
245
    (void) kadm5_free_policy_ent(lhandle, &policy_ent);
244
246
    return(code);
245
247
  }
246
248
 
247
249
  /* We should never get here, but just in case ... */
248
 
  sprintf(buffer, "%s %s", error_message(code), 
249
 
          string_text(CHPASS_UTIL_WHILE_TRYING_TO_CHANGE));
250
 
  sprintf(msg_ret, "%s\n%s\n", string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED), 
251
 
          buffer);
 
250
  snprintf(buffer, sizeof(buffer), "%s %s", error_message(code), 
 
251
           string_text(CHPASS_UTIL_WHILE_TRYING_TO_CHANGE));
 
252
  snprintf(msg_ret, msg_len, "%s\n%s\n",
 
253
           string_text(CHPASS_UTIL_PASSWORD_NOT_CHANGED), 
 
254
           buffer);
252
255
  (void) kadm5_free_principal_ent(lhandle, &princ_ent);
253
256
  (void) kadm5_free_policy_ent(lhandle, &policy_ent);
254
257
  return(code);