(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$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Set the absolute time that the caller knows the kdc has so the
|
* Set the absolute time that the caller knows the kdc has so the
|
||||||
* kerberos library can calculate the relative diffrence beteen the
|
* kerberos library can calculate the relative diffrence beteen the
|
||||||
* KDC time and local system time.
|
* 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
|
krb5_error_code KRB5_LIB_FUNCTION
|
||||||
@@ -51,12 +59,21 @@ krb5_set_real_time (krb5_context context,
|
|||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
|
|
||||||
context->kdc_sec_offset = sec - tv.tv_sec;
|
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--;
|
* If the caller passes in a negative usec, its assumed to be
|
||||||
context->kdc_usec_offset += 1000000;
|
* 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user