dce/rpc net time command from jean-francois. does not support timezones
authorLuke Leighton <lkcl@samba.org>
Wed, 20 May 1998 13:17:26 +0000 (13:17 +0000)
committerLuke Leighton <lkcl@samba.org>
Wed, 20 May 1998 13:17:26 +0000 (13:17 +0000)
source/include/proto.h
source/include/rpc_srvsvc.h
source/rpc_parse/parse_srv.c
source/rpc_server/srv_srvsvc.c

index 760f889dd954f56e578ddada4a1d1121f7a25acf..005911d1f66fede2b076a14144b070513f587804 100644 (file)
@@ -828,6 +828,13 @@ void srv_io_q_net_srv_set_info(char *desc,  SRV_Q_NET_SRV_SET_INFO *q_n, prs_str
 void make_srv_r_net_srv_set_info(SRV_R_NET_SRV_SET_INFO *srv,
                                uint32 switch_value, SRV_INFO_CTR *ctr, uint32 status);
 void srv_io_r_net_srv_set_info(char *desc,  SRV_R_NET_SRV_SET_INFO *r_n, prs_struct *ps, int depth);
+void srv_io_q_net_remote_tod(char *desc,  SRV_Q_NET_REMOTE_TOD *q_n, prs_struct *ps, int depth);
+void srv_io_time_of_day_info(char *desc, TIME_OF_DAY_INFO  *tod, prs_struct *ps, int depth);
+void make_time_of_day_info(TIME_OF_DAY_INFO *tod, uint32 elapsedt, uint32 msecs,
+                           uint32 hours, uint32 mins, uint32 secs, uint32 hunds,
+                          uint32 zone, uint32 tintervals, uint32 day,
+                          uint32 month, uint32 year, uint32 weekday);
+void srv_io_r_net_remote_tod(char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *ps, int depth);
 
 /*The following definitions come from  lib/rpc/parse/parse_wks.c  */
 
index 6ba137da2f3e377490181ae4007caee33c2fcfba..afcef4e168569dc9bfe9d228123496122a3b413f 100644 (file)
@@ -32,7 +32,7 @@
 #define SRV_NETSHAREENUM     0x0f
 #define SRV_NET_SRV_GET_INFO 0x15
 #define SRV_NET_SRV_SET_INFO 0x16
-
+#define        SRV_NET_REMOTE_TOD   0x1c
 
 /* SESS_INFO_0 (pointers to level 0 session info strings) */
 typedef struct ptr_sess_info0
@@ -535,6 +535,42 @@ typedef struct r_net_srv_set_info
 
 } SRV_R_NET_SRV_SET_INFO;
 
+/* SRV_Q_NET_REMOTE_TOD */
+typedef struct q_net_remote_tod
+{
+       uint32  ptr_srv_name;
+       UNISTR2 uni_srv_name; /* "\\server" */
+
+} SRV_Q_NET_REMOTE_TOD;
+
+/* TIME_OF_DAY_INFO */
+typedef struct time_of_day_info
+{
+       uint32  elapsedt;
+       uint32  msecs;
+       uint32  hours;
+       uint32  mins;
+       uint32  secs;
+       uint32  hunds;
+       uint32  zone;
+       uint32  tintervals;
+       uint32  day;
+       uint32  month;
+       uint32  year;
+       uint32  weekday;
+       
+} TIME_OF_DAY_INFO;
+
+/* SRV_R_NET_REMOTE_TOD */
+typedef struct r_net_remote_tod
+{
+       uint32 ptr_srv_tod;         /* pointer to TOD */
+       TIME_OF_DAY_INFO *tod;
+       
+       uint32 status;               /* return status */
+
+} SRV_R_NET_REMOTE_TOD;
+
 
 #endif /* _RPC_SRVSVC_H */
 
index 959a6096aa52dd207543598b43fd11f8b1cbe338..592aece439558a0e8f8299c50a060ea41dd59956 100644 (file)
@@ -1525,4 +1525,91 @@ void srv_io_r_net_srv_set_info(char *desc,  SRV_R_NET_SRV_SET_INFO *r_n, prs_str
        prs_uint32("status      ", ps, depth, &(r_n->status      ));
 }
 
+/*******************************************************************
+ reads or writes a structure.
+ ********************************************************************/
+void srv_io_q_net_remote_tod(char *desc,  SRV_Q_NET_REMOTE_TOD *q_n, prs_struct *ps, int depth)
+{
+       if (q_n == NULL) return;
+
+       prs_debug(ps, depth, desc, "srv_io_q_net_remote_tod");
+       depth++;
+
+       prs_align(ps);
+
+       prs_uint32("ptr_srv_name  ", ps, depth, &(q_n->ptr_srv_name));
+       smb_io_unistr2("", &(q_n->uni_srv_name), True, ps, depth); 
+}
+
+/*******************************************************************
+ reads or writes a TIME_OF_DAY_INFO structure.
+ ********************************************************************/
+void srv_io_time_of_day_info(char *desc, TIME_OF_DAY_INFO  *tod, prs_struct *ps, int depth)
+{
+       if (tod == NULL) return;
+
+       prs_debug(ps, depth, desc, "srv_io_time_of_day_info");
+       depth++;
+
+       prs_align(ps);
+       
+       prs_uint32("elapsedt   ", ps, depth, &(tod->elapsedt  ));
+       prs_uint32("msecs      ", ps, depth, &(tod->msecs     ));
+       prs_uint32("hours      ", ps, depth, &(tod->hours     ));
+       prs_uint32("mins       ", ps, depth, &(tod->mins      ));
+       prs_uint32("secs       ", ps, depth, &(tod->secs      ));
+       prs_uint32("hunds      ", ps, depth, &(tod->hunds     ));
+       prs_uint32("timezone   ", ps, depth, &(tod->zone  ));
+       prs_uint32("tintervals ", ps, depth, &(tod->tintervals));
+       prs_uint32("day        ", ps, depth, &(tod->day       ));
+       prs_uint32("month      ", ps, depth, &(tod->month     ));
+       prs_uint32("year       ", ps, depth, &(tod->year      ));
+       prs_uint32("weekday    ", ps, depth, &(tod->weekday   ));
 
+}
+
+/*******************************************************************
+ makes a TIME_OF_DAY_INFO structure.
+ ********************************************************************/
+void make_time_of_day_info(TIME_OF_DAY_INFO *tod, uint32 elapsedt, uint32 msecs,
+                           uint32 hours, uint32 mins, uint32 secs, uint32 hunds,
+                          uint32 zone, uint32 tintervals, uint32 day,
+                          uint32 month, uint32 year, uint32 weekday)
+{
+       if (tod == NULL) return;
+
+       DEBUG(5,("make_time_of_day_info\n"));
+
+       tod->elapsedt   = elapsedt;
+       tod->msecs      = msecs;
+       tod->hours      = hours;
+       tod->mins       = mins;
+       tod->secs       = secs;
+       tod->hunds      = hunds;
+       tod->zone       = zone;
+       tod->tintervals = tintervals;
+       tod->day        = day;
+       tod->month      = month;
+       tod->year       = year;
+       tod->weekday    = weekday;
+}
+
+
+/*******************************************************************
+ reads or writes a structure.
+ ********************************************************************/
+void srv_io_r_net_remote_tod(char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *ps, int depth)
+{
+       if (r_n == NULL) return;
+
+       prs_debug(ps, depth, desc, "srv_io_r_net_remote_tod");
+       depth++;
+
+       prs_align(ps);
+       
+       prs_uint32("ptr_srv_tod ", ps, depth, &(r_n->ptr_srv_tod));
+
+       srv_io_time_of_day_info("tod", r_n->tod, ps, depth); 
+
+       prs_uint32("status      ", ps, depth, &(r_n->status));
+}
index d06e2ac6600641d9f8510da84eea1c1958eef35f..fedc7089e30b7972f551fe23aefc6f9c988f7a65 100644 (file)
@@ -989,6 +989,59 @@ static void api_srv_net_share_enum( int uid, prs_struct *data,
        srv_reply_net_share_enum(&q_n, rdata);
 }
 
+/*******************************************************************
+time of day
+********************************************************************/
+static void srv_reply_net_remote_tod(SRV_Q_NET_REMOTE_TOD *q_n,
+                               prs_struct *rdata)
+{
+       SRV_R_NET_REMOTE_TOD r_n;
+       TIME_OF_DAY_INFO tod;
+       struct tm *t;
+       time_t unixdate = time(NULL);
+
+       r_n.tod = &tod;
+       r_n.ptr_srv_tod = 0x1;
+       r_n.status = 0x0;
+
+       DEBUG(5,("srv_reply_net_remote_tod: %d\n", __LINE__));
+
+       t = LocalTime(&unixdate);
+
+       /* set up the */
+       make_time_of_day_info(&tod,
+                             unixdate,
+                             0,
+                             t->tm_hour,
+                             t->tm_min,
+                             t->tm_sec,
+                             0,
+                             TimeDiff(unixdate)/60,
+                             10000,
+                             t->tm_mday,
+                             t->tm_mon + 1,
+                             1900+t->tm_year,
+                             t->tm_wday);
+       
+       /* store the response in the SMB stream */
+       srv_io_r_net_remote_tod("", &r_n, rdata, 0);
+       
+       DEBUG(5,("srv_reply_net_remote_tod: %d\n", __LINE__));
+}
+/*******************************************************************
+********************************************************************/
+static void api_srv_net_remote_tod( int uid, prs_struct *data,
+                                    prs_struct *rdata )
+{
+       SRV_Q_NET_REMOTE_TOD q_n;
+
+       /* grab the net server get enum */
+       srv_io_q_net_remote_tod("", &q_n, data, 0);
+
+       /* construct reply.  always indicate success */
+       srv_reply_net_remote_tod(&q_n, rdata);
+}
+
 
 /*******************************************************************
 \PIPE\srvsvc commands
@@ -1000,6 +1053,7 @@ struct api_struct api_srv_cmds[] =
        { "SRV_NETSHAREENUM"    , SRV_NETSHAREENUM    , api_srv_net_share_enum   },
        { "SRV_NETFILEENUM"     , SRV_NETFILEENUM     , api_srv_net_file_enum    },
        { "SRV_NET_SRV_GET_INFO", SRV_NET_SRV_GET_INFO, api_srv_net_srv_get_info },
+       { "SRV_NET_REMOTE_TOD"  , SRV_NET_REMOTE_TOD  , api_srv_net_remote_tod   },
        { NULL                  , 0                   , NULL                     }
 };