(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:
@@ -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;
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user