(krb5_set_real_time): handle negative usec

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23260 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2008-06-21 15:22:37 +00:00
parent 382879d617
commit 1bf90f0016

View File

@@ -35,10 +35,18 @@
RCSID("$Id$");
/*
/**
* Set the absolute time that the caller knows the kdc has so the
* kerberos library can calculate the relative diffrence beteen the
* KDC time and local system time.
*
* @param context Keberos 5 context.
* @param sec The applications new of "now" in seconds
* @param usec The applications new of "now" in micro seconds
* @return Kerberos 5 error code, see krb5_get_error_message().
*
* @ingroup krb5
*/
krb5_error_code KRB5_LIB_FUNCTION
@@ -51,12 +59,21 @@ krb5_set_real_time (krb5_context context,
gettimeofday(&tv, NULL);
context->kdc_sec_offset = sec - tv.tv_sec;
context->kdc_usec_offset = usec - tv.tv_usec;
if (context->kdc_usec_offset < 0) {
context->kdc_sec_offset--;
context->kdc_usec_offset += 1000000;
}
/**
* If the caller passes in a negative usec, its assumed to be
* unknown and the function will use the current time usec.
*/
if (usec >= 0) {
context->kdc_usec_offset = usec - tv.tv_usec;
if (context->kdc_usec_offset < 0) {
context->kdc_sec_offset--;
context->kdc_usec_offset += 1000000;
}
} else
context->kdc_usec_offset = tv.tv_usec;
return 0;
}