chpw.c revision 45526e9775395f5d44bad3f5430041f32c84ce1e
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include <string.h>
#include <k5-int.h>
#include <client_internal.h>
#include <auth_con.h>
#include <locale.h>
/*
* krb5_mk_chpw_req
*
* Generate a CHANGEPW request packet to send to a
* password server.
* The format of the packet used here is defined in the
* Marc Horowitz Password change protocol document (1998)
* (expired).
* protocol IETF draft document by UMich, Cisco, and MS.
*/
char *passwd;
{
krb5_error_code ret = 0;
char *ptr;
goto cleanup;
goto cleanup;
{
goto cleanup;
}
/* length */
/*
* version == 0x0001 big-endian
* NOTE: when MS and MIT start supporting the latest
* version of the passwd change protocol (v2),
* this value will change to 2.
*/
*ptr++ = 0;
*ptr++ = 1;
/* ap_req length, big-endian */
/* ap-req data */
/* krb-priv of password */
return (ret);
}
/*
* krb5_rd_chpw_rep
*
* Decode and parse the reply from the CHANGEPW request.
*/
int *result_code;
{
char *ptr;
int local_result_code;
/*
* either this, or the server is printing bad messages,
* or the caller passed in garbage
*/
return (KRB5KRB_AP_ERR_MODIFIED);
/* verify length */
return (KRB5KRB_AP_ERR_MODIFIED);
/* verify version number */
/*
* when the servers update to v2 of the protocol,
* "2" will be a valid version number here
*/
return (KRB5KDC_ERR_BAD_PVNO);
/* read, check ap-rep length */
return (KRB5KRB_AP_ERR_MODIFIED);
/* verify ap_rep */
/*
* Save send_subkey to later smash recv_subkey.
*/
if (ret)
return (ret);
&ap_rep_enc)) {
return (ret);
}
/* extract and decrypt the result */
/*
* Smash recv_subkey to be send_subkey, per spec.
*/
if (ret)
return (ret);
&clearresult, &replay);
if (ret)
return (ret);
} else {
return (ret);
}
goto cleanup;
}
if (result_code)
/*
* Make sure the result code is in range for this
* protocol.
*/
if ((local_result_code < KRB5_KPASSWD_SUCCESS) ||
goto cleanup;
}
/* all success replies should be authenticated/encrypted */
goto cleanup;
}
if (result_data->length) {
goto cleanup;
}
} else {
}
ret = 0;
} else {
}
return (ret);
}