1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-21 18:04:06 +03:00

r4075: implement RemoteTOD server function

metze
(This used to be commit 0c6d4246a45f649e7373606f12db74c2acd0f538)
This commit is contained in:
Stefan Metzmacher 2004-12-06 11:10:15 +00:00 committed by Gerald (Jerry) Carter
parent 690b352fc1
commit c62615f268
3 changed files with 36 additions and 6 deletions

View File

@ -82,7 +82,7 @@ static NTSTATUS libnet_RemoteTOD_srvsvc(struct libnet_context *ctx, TALLOC_CTX *
tm.tm_isdst = -1;
r->srvsvc.out.time = timegm(&tm);
r->srvsvc.out.time_zone = ((int32_t)tod.out.info->timezone) * 60;
r->srvsvc.out.time_zone = tod.out.info->timezone * 60;
goto disconnect;

View File

@ -1128,14 +1128,14 @@
/* srvsvc_NetRemoteTOD */
/**************************/
typedef struct {
uint32 elapsed;
uint32 msecs;
uint32 elapsed; /* time(NULL) */
uint32 msecs; /* milliseconds till system reboot (uptime) */
uint32 hours;
uint32 mins;
uint32 secs;
uint32 hunds;
uint32 timezone;
uint32 tinterval;
int32 timezone; /* in minutes */
uint32 tinterval; /* clock tick interval in 0.0001 second units; 310 on windows */
uint32 day;
uint32 month;
uint32 year;

View File

@ -24,6 +24,7 @@
#include "rpc_server/dcerpc_server.h"
#include "librpc/gen_ndr/ndr_srvsvc.h"
#include "rpc_server/common/common.h"
#include "system/time.h"
/*
srvsvc_NetCharDevEnum
@ -807,7 +808,36 @@ static WERROR srvsvc_NETRSERVERTRANSPORTDEL(struct dcesrv_call_state *dce_call,
static WERROR srvsvc_NetRemoteTOD(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetRemoteTOD *r)
{
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
struct timeval tval;
time_t t;
struct tm tm;
r->out.info = talloc_p(mem_ctx, struct srvsvc_NetRemoteTODInfo);
WERR_TALLOC_CHECK(r->out.info);
GetTimeOfDay(&tval);
t = tval.tv_sec;
gmtime_r(&t, &tm);
r->out.info->elapsed = t;
/* fake the uptime: just return the milliseconds till 0:00:00 today */
r->out.info->msecs = (tm.tm_hour*60*60*1000)
+ (tm.tm_min*60*1000)
+ (tm.tm_sec*1000)
+ (tval.tv_usec/1000);
r->out.info->hours = tm.tm_hour;
r->out.info->mins = tm.tm_min;
r->out.info->secs = tm.tm_sec;
r->out.info->hunds = tval.tv_usec/10000;
r->out.info->timezone = get_time_zone(t)/60;
r->out.info->tinterval = 310; /* just return the same as windows */
r->out.info->day = tm.tm_mday;
r->out.info->month = tm.tm_mon + 1;
r->out.info->year = tm.tm_year + 1900;
r->out.info->weekday = tm.tm_wday;
return WERR_OK;
}