When localtime() fails, throw an error instead of returning a
authormartijn <martijn@openbsd.org>
Wed, 22 May 2024 08:44:02 +0000 (08:44 +0000)
committermartijn <martijn@openbsd.org>
Wed, 22 May 2024 08:44:02 +0000 (08:44 +0000)
non-sensical 0 filled string.

OK florian@

libexec/snmpd/snmpd_metrics/mib.c

index 2cda1dd..625f879 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mib.c,v 1.8 2024/04/28 16:42:53 florian Exp $ */
+/*     $OpenBSD: mib.c,v 1.9 2024/05/22 08:44:02 martijn Exp $ */
 
 /*
  * Copyright (c) 2022 Martijn van Duren <martijn@openbsd.org>
@@ -296,29 +296,31 @@ mib_hrsystemdate(struct agentx_varbind *vb)
        int              tzoffset;
        unsigned short   year;
 
-       memset(s, 0, sizeof(s));
        (void)time(&now);
        ptm = localtime(&now);
 
-       if (ptm != NULL) {
-               year = htons(ptm->tm_year + 1900);
-               memcpy(s, &year, 2);
-               s[2] = ptm->tm_mon + 1;
-               s[3] = ptm->tm_mday;
-               s[4] = ptm->tm_hour;
-               s[5] = ptm->tm_min;
-               s[6] = ptm->tm_sec;
-               s[7] = 0;
-
-               tzoffset = ptm->tm_gmtoff;
-               if (tzoffset < 0)
-                       s[8] = '-';
-               else
-                       s[8] = '+';
-
-               s[9] = abs(tzoffset) / 3600;
-               s[10] = (abs(tzoffset) - (s[9] * 3600)) / 60;
+       if (ptm == NULL) {
+               log_warnx("localtime");
+               agentx_varbind_error(vb);
+               return;
        }
+       year = htons(ptm->tm_year + 1900);
+       memcpy(s, &year, 2);
+       s[2] = ptm->tm_mon + 1;
+       s[3] = ptm->tm_mday;
+       s[4] = ptm->tm_hour;
+       s[5] = ptm->tm_min;
+       s[6] = ptm->tm_sec;
+       s[7] = 0;
+
+       tzoffset = ptm->tm_gmtoff;
+       if (tzoffset < 0)
+               s[8] = '-';
+       else
+               s[8] = '+';
+
+       s[9] = abs(tzoffset) / 3600;
+       s[10] = (abs(tzoffset) - (s[9] * 3600)) / 60;
        agentx_varbind_nstring(vb, s, sizeof(s));
 }