s3/net: don't use external "date" to make "net time set" more portable
authorBjörn Jacke <bj@sernet.de>
Tue, 14 Dec 2010 12:28:49 +0000 (13:28 +0100)
committerBjoern Jacke <bj@sernet.de>
Tue, 14 Dec 2010 14:31:03 +0000 (15:31 +0100)
the "date" syntax is different for example on *BSD

Autobuild-User: Björn Jacke <bj@sernet.de>
Autobuild-Date: Tue Dec 14 15:31:03 CET 2010 on sn-devel-104

source3/utils/net_time.c

index d9b6f2755102e574b2b019e667c033538205252a..a02387f6aa78be73d49494689f79730bff87e4b3 100644 (file)
@@ -103,26 +103,22 @@ int net_time_usage(struct net_context *c, int argc, const char **argv)
        return -1;
 }
 
-/* try to set the system clock using /bin/date */
+/* try to set the system clock */
 static int net_time_set(struct net_context *c, int argc, const char **argv)
 {
-       time_t t = nettime(c, NULL);
-       char *cmd;
+       struct timeval tv;
        int result;
 
-       if (t == 0) return -1;
+       tv.tv_sec = nettime(c, NULL);
+       tv.tv_usec=0;
+
+       if (tv.tv_sec == 0) return -1;
+
+       result = settimeofday(&tv,0);
 
-       /* yes, I know this is cheesy. Use "net time system" if you want to
-          roll your own. I'm putting this in as it works on a large number
-          of systems and the user has a choice in whether its used or not */
-       if (asprintf(&cmd, "/bin/date %s", systime(t)) == -1) {
-               return -1;
-       }
-       result = system(cmd);
        if (result)
-               d_fprintf(stderr, _("%s failed.  Error was (%s)\n"),
-                       cmd, strerror(errno));
-       free(cmd);
+               d_fprintf(stderr, _("setting system clock failed.  Error was (%s)\n"),
+                       strerror(errno));
 
        return result;
 }