[BACK]Return to snmpc.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / snmp

Diff for /src/usr.bin/snmp/snmpc.c between version 1.28 and 1.29

version 1.28, 2020/08/03 14:45:54 version 1.29, 2020/09/12 18:11:43
Line 39 
Line 39 
 #include <time.h>  #include <time.h>
 #include <unistd.h>  #include <unistd.h>
 #include <util.h>  #include <util.h>
   #include <wchar.h>
   
 #include "smi.h"  #include "smi.h"
 #include "snmp.h"  #include "snmp.h"
Line 58 
Line 59 
 __dead void snmpc_printerror(enum snmp_error, struct ber_element *, int,  __dead void snmpc_printerror(enum snmp_error, struct ber_element *, int,
     const char *);      const char *);
 char *snmpc_hex2bin(char *, size_t *);  char *snmpc_hex2bin(char *, size_t *);
   ssize_t snmpc_mbswidth(char *);
 struct ber_element *snmpc_varbindparse(int, char *[]);  struct ber_element *snmpc_varbindparse(int, char *[]);
 void usage(void);  void usage(void);
   
Line 820 
Line 822 
 {  {
         struct snmpc_df {          struct snmpc_df {
                 uint32_t index;                  uint32_t index;
                 /* DisplayString is 255a DISPLAY-HINT */                  char *descr;
                 char descr[256];                  int descrwidth;
                 /* Theoretical maximum for 2 32 bit values multiplied */                  /* Theoretical maximum for 2 32 bit values multiplied */
                 char size[21];                  char size[21];
                 char used[21];                  char used[21];
Line 833 
Line 835 
         struct ber_oid sizeoid = {{ 1, 3, 6, 1, 2, 1, 25, 2, 3, 1, 5 }, 11};          struct ber_oid sizeoid = {{ 1, 3, 6, 1, 2, 1, 25, 2, 3, 1, 5 }, 11};
         struct ber_oid usedoid = {{ 1, 3, 6, 1, 2, 1, 25, 2, 3, 1, 6 }, 11};          struct ber_oid usedoid = {{ 1, 3, 6, 1, 2, 1, 25, 2, 3, 1, 6 }, 11};
         struct ber_oid oid, *reqoid;          struct ber_oid oid, *reqoid;
         struct ber_element *pdu, *varbind;          char oids[SNMP_MAX_OID_STRLEN];
           struct ber_element *pdu, *varbind, *elm;
         struct snmp_agent *agent;          struct snmp_agent *agent;
         int errorstatus, errorindex;          int errorstatus, errorindex;
         int class;          int class;
Line 890 
Line 893 
                         return 1;                          return 1;
                 }                  }
                 for (; varbind != NULL; varbind = varbind->be_next) {                  for (; varbind != NULL; varbind = varbind->be_next) {
                         (void) ober_scanf_elements(varbind, "{oS", &oid);                          if (ober_scanf_elements(varbind, "{os", &oid,
                         if (ober_oid_cmp(&descroid, &oid) != 2)                              &string) == -1 ||
                               ober_oid_cmp(&descroid, &oid) != 2)
                                 break;                                  break;
                         rows++;                          rows++;
                 }                  }
Line 899 
Line 903 
                         err(1, "malloc");                          err(1, "malloc");
                 (void) ober_scanf_elements(pdu, "{SSS{e", &varbind);                  (void) ober_scanf_elements(pdu, "{SSS{e", &varbind);
                 for (; i < rows; varbind = varbind->be_next, i++) {                  for (; i < rows; varbind = varbind->be_next, i++) {
                         if (ober_scanf_elements(varbind, "{os", &oid,                          if (ober_scanf_elements(varbind, "{oe", &oid,
                             &string) == -1) {                              &elm) == -1) {
                                 i--;                                  i--;
                                 rows--;                                  rows--;
                                 continue;                                  continue;
                         }                          }
                           if (ober_oid_cmp(&descroid, &oid) != 2)
                                   break;
                         df[i].index = oid.bo_id[oid.bo_n - 1];                          df[i].index = oid.bo_id[oid.bo_n - 1];
                         len = strlcpy(df[i].descr, string,                          if ((df[i].descr = smi_print_element(&oid, elm, 0,
                             sizeof(df[i].descr));                              smi_os_ascii, 0, utf8)) == NULL) {
                         if (len > (int) sizeof(df[i].descr))                                  smi_oid2string(&oid, oids, sizeof(oids),
                                 len = (int) sizeof(df[i].descr) - 1;                                      oid_lookup);
                         if (len > descrlen)                                  warn("df: can't print oid %s", oids);
                                 descrlen = len;                                  i--;
                                   rows--;
                                   continue;
                           }
                           if ((df[i].descrwidth =
                               (int) snmpc_mbswidth(df[i].descr)) == -1)
                                   err(1, "df: invalid hrStorageDescr");
                           if (df[i].descrwidth > descrlen)
                                   descrlen = df[i].descrwidth;
                 }                  }
                 ober_free_elements(pdu);                  ober_free_elements(pdu);
                 if (varbind != NULL)                  if (varbind != NULL)
Line 1031 
Line 1045 
             NEXTTAB(usedlen) + availlen, "Available",              NEXTTAB(usedlen) + availlen, "Available",
             NEXTTAB(availlen) + proclen, "Used%");              NEXTTAB(availlen) + proclen, "Used%");
         for (i = 0; i < rows; i++) {          for (i = 0; i < rows; i++) {
                 printf("%-*s%*s%*s%*s%*s\n",                  printf("%s%*s%*s%*s%*s%*s\n",
                     descrlen, df[i].descr,                      df[i].descr, descrlen - df[i].descrwidth, "",
                     NEXTTAB(descrlen) + sizelen, df[i].size,                      NEXTTAB(descrlen) + sizelen, df[i].size,
                     NEXTTAB(sizelen) + usedlen, df[i].used,                      NEXTTAB(sizelen) + usedlen, df[i].used,
                     NEXTTAB(usedlen) + availlen, df[i].avail,                      NEXTTAB(usedlen) + availlen, df[i].avail,
Line 1325 
Line 1339 
         errno = EINVAL;          errno = EINVAL;
         free(decstr);          free(decstr);
         return NULL;          return NULL;
   }
   
   ssize_t
   snmpc_mbswidth(char *str)
   {
           wchar_t wc;
           size_t width = 0;
           size_t i;
           int len;
   
           for (i = 0; (len = mbtowc(&wc, &(str[i]), MB_CUR_MAX)) != 0; i += len) {
                   if (len == -1) {
                           mbtowc(NULL, NULL, MB_CUR_MAX);
                           return -1;
                   }
                   width += wcwidth(wc);
           }
           return width;
 }  }
   
 struct ber_element *  struct ber_element *

Legend:
Removed from v.1.28  
changed lines
  Added in v.1.29