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

Diff for /src/usr.bin/snmp/snmp.c between version 1.8 and 1.8.2.1

version 1.8, 2019/10/08 10:00:42 version 1.8.2.1, 2019/10/27 20:05:12
Line 152 
Line 152 
         struct ber_element *pdu, *varbind;          struct ber_element *pdu, *varbind;
         size_t i;          size_t i;
   
         if ((pdu = ber_add_sequence(NULL)) == NULL)          if ((pdu = ober_add_sequence(NULL)) == NULL)
                 return NULL;                  return NULL;
         if ((varbind = ber_printf_elements(pdu, "tddd{", BER_CLASS_CONTEXT,          if ((varbind = ober_printf_elements(pdu, "tddd{", BER_CLASS_CONTEXT,
             SNMP_C_GETREQ, arc4random() & 0x7fffffff, 0, 0)) == NULL)              SNMP_C_GETREQ, arc4random() & 0x7fffffff, 0, 0)) == NULL)
                 goto fail;                  goto fail;
         for (i = 0; i < len; i++)          for (i = 0; i < len; i++)
                 varbind = ber_printf_elements(varbind, "{O0}", &oid[i]);                  varbind = ober_printf_elements(varbind, "{O0}", &oid[i]);
                 if (varbind == NULL)                  if (varbind == NULL)
                         goto fail;                          goto fail;
   
         return snmp_resolve(agent, pdu, 1);          return snmp_resolve(agent, pdu, 1);
 fail:  fail:
         ber_free_elements(pdu);          ober_free_elements(pdu);
         return NULL;          return NULL;
 }  }
   
Line 174 
Line 174 
         struct ber_element *pdu, *varbind;          struct ber_element *pdu, *varbind;
         size_t i;          size_t i;
   
         if ((pdu = ber_add_sequence(NULL)) == NULL)          if ((pdu = ober_add_sequence(NULL)) == NULL)
                 return NULL;                  return NULL;
         if ((varbind = ber_printf_elements(pdu, "tddd{", BER_CLASS_CONTEXT,          if ((varbind = ober_printf_elements(pdu, "tddd{", BER_CLASS_CONTEXT,
             SNMP_C_GETNEXTREQ, arc4random() & 0x7fffffff, 0, 0)) == NULL)              SNMP_C_GETNEXTREQ, arc4random() & 0x7fffffff, 0, 0)) == NULL)
                 goto fail;                  goto fail;
         for (i = 0; i < len; i++)          for (i = 0; i < len; i++)
                 varbind = ber_printf_elements(varbind, "{O0}", &oid[i]);                  varbind = ober_printf_elements(varbind, "{O0}", &oid[i]);
                 if (varbind == NULL)                  if (varbind == NULL)
                         goto fail;                          goto fail;
   
         return snmp_resolve(agent, pdu, 1);          return snmp_resolve(agent, pdu, 1);
 fail:  fail:
         ber_free_elements(pdu);          ober_free_elements(pdu);
         return NULL;          return NULL;
 }  }
   
Line 198 
Line 198 
         struct ber_oid sysuptime, trap;          struct ber_oid sysuptime, trap;
         long long ticks;          long long ticks;
   
         if ((pdu = ber_add_sequence(NULL)) == NULL)          if ((pdu = ober_add_sequence(NULL)) == NULL)
                 return -1;                  return -1;
         if ((varbind = ber_printf_elements(pdu, "tddd{", BER_CLASS_CONTEXT,          if ((varbind = ober_printf_elements(pdu, "tddd{", BER_CLASS_CONTEXT,
             SNMP_C_TRAPV2, arc4random() & 0x7fffffff, 0, 0)) == NULL)              SNMP_C_TRAPV2, arc4random() & 0x7fffffff, 0, 0)) == NULL)
                 goto fail;                  goto fail;
   
Line 208 
Line 208 
         ticks += uptime->tv_nsec / 10000000;          ticks += uptime->tv_nsec / 10000000;
         if (smi_string2oid("sysUpTime.0", &sysuptime) == -1)          if (smi_string2oid("sysUpTime.0", &sysuptime) == -1)
                 goto fail;                  goto fail;
         if ((varbind = ber_printf_elements(varbind, "{Oit}", &sysuptime, ticks,          if ((varbind = ober_printf_elements(varbind, "{Oit}", &sysuptime, ticks,
             BER_CLASS_APPLICATION, SNMP_T_TIMETICKS)) == NULL)              BER_CLASS_APPLICATION, SNMP_T_TIMETICKS)) == NULL)
                 goto fail;                  goto fail;
         if (smi_string2oid("snmpTrapOID.0", &trap) == -1)          if (smi_string2oid("snmpTrapOID.0", &trap) == -1)
                 goto fail;                  goto fail;
         if ((varbind = ber_printf_elements(varbind, "{OO}", &trap, oid)) == NULL)          if ((varbind = ober_printf_elements(varbind, "{OO}", &trap, oid)) == NULL)
                 goto fail;                  goto fail;
         if (custvarbind != NULL)          if (custvarbind != NULL)
                 ber_link_elements(varbind, custvarbind);                  ober_link_elements(varbind, custvarbind);
   
         snmp_resolve(agent, pdu, 0);          snmp_resolve(agent, pdu, 0);
         return 0;          return 0;
 fail:  fail:
         ber_free_elements(pdu);          ober_free_elements(pdu);
         return -1;          return -1;
 }  }
   
Line 232 
Line 232 
         struct ber_element *pdu, *varbind;          struct ber_element *pdu, *varbind;
         size_t i;          size_t i;
   
         if ((pdu = ber_add_sequence(NULL)) == NULL)          if ((pdu = ober_add_sequence(NULL)) == NULL)
                 return NULL;                  return NULL;
         if ((varbind = ber_printf_elements(pdu, "tddd{", BER_CLASS_CONTEXT,          if ((varbind = ober_printf_elements(pdu, "tddd{", BER_CLASS_CONTEXT,
             SNMP_C_GETBULKREQ, arc4random() & 0x7fffffff, non_repeaters,              SNMP_C_GETBULKREQ, arc4random() & 0x7fffffff, non_repeaters,
             max_repetitions)) == NULL)              max_repetitions)) == NULL)
                 goto fail;                  goto fail;
         for (i = 0; i < len; i++)          for (i = 0; i < len; i++)
                 varbind = ber_printf_elements(varbind, "{O0}", &oid[i]);                  varbind = ober_printf_elements(varbind, "{O0}", &oid[i]);
                 if (varbind == NULL)                  if (varbind == NULL)
                         goto fail;                          goto fail;
   
         return snmp_resolve(agent, pdu, 1);          return snmp_resolve(agent, pdu, 1);
 fail:  fail:
         ber_free_elements(pdu);          ober_free_elements(pdu);
         return NULL;          return NULL;
 }  }
   
Line 254 
Line 254 
 {  {
         struct ber_element *pdu;          struct ber_element *pdu;
   
         if ((pdu = ber_add_sequence(NULL)) == NULL)          if ((pdu = ober_add_sequence(NULL)) == NULL)
                 return NULL;                  return NULL;
         if (ber_printf_elements(pdu, "tddd{e", BER_CLASS_CONTEXT,          if (ober_printf_elements(pdu, "tddd{e", BER_CLASS_CONTEXT,
             SNMP_C_SETREQ, arc4random() & 0x7fffffff, 0, 0, vblist) == NULL) {              SNMP_C_SETREQ, arc4random() & 0x7fffffff, 0, 0, vblist) == NULL) {
                 ber_free_elements(pdu);                  ober_free_elements(pdu);
                 ber_free_elements(vblist);                  ober_free_elements(vblist);
                 return NULL;                  return NULL;
         }          }
   
Line 281 
Line 281 
         int tries;          int tries;
         char buf[READ_BUF_SIZE];          char buf[READ_BUF_SIZE];
   
         if (ber_scanf_elements(pdu, "{i", &reqid) != 0) {          if (ober_scanf_elements(pdu, "{i", &reqid) != 0) {
                 errno = EINVAL;                  errno = EINVAL;
                 ber_free_elements(pdu);                  ober_free_elements(pdu);
                 return NULL;                  return NULL;
         }          }
   
Line 340 
Line 340 
                         continue;                          continue;
                 }                  }
                 /* Validate pdu format and check request id */                  /* Validate pdu format and check request id */
                 if (ber_scanf_elements(pdu, "{iSSe", &rreqid, &varbind) != 0 ||                  if (ober_scanf_elements(pdu, "{iSSe", &rreqid, &varbind) != 0 ||
                     varbind->be_encoding != BER_TYPE_SEQUENCE) {                      varbind->be_encoding != BER_TYPE_SEQUENCE) {
                         errno = EPROTO;                          errno = EPROTO;
                         direction = POLLOUT;                          direction = POLLOUT;
Line 355 
Line 355 
                 }                  }
                 for (varbind = varbind->be_sub; varbind != NULL;                  for (varbind = varbind->be_sub; varbind != NULL;
                     varbind = varbind->be_next) {                      varbind = varbind->be_next) {
                         if (ber_scanf_elements(varbind, "{oS}", &oid) != 0) {                          if (ober_scanf_elements(varbind, "{oS}", &oid) != 0) {
                                 errno = EPROTO;                                  errno = EPROTO;
                                 direction = POLLOUT;                                  direction = POLLOUT;
                                 tries--;                                  tries--;
Line 384 
Line 384 
         void *cookie = NULL;          void *cookie = NULL;
   
         bzero(&ber, sizeof(ber));          bzero(&ber, sizeof(ber));
         ber_set_application(&ber, smi_application);          ober_set_application(&ber, smi_application);
   
         if ((message = ber_add_sequence(NULL)) == NULL) {          if ((message = ober_add_sequence(NULL)) == NULL) {
                 ber_free_elements(pdu);                  ober_free_elements(pdu);
                 goto fail;                  goto fail;
         }          }
   
         switch (agent->version) {          switch (agent->version) {
         case SNMP_V1:          case SNMP_V1:
         case SNMP_V2C:          case SNMP_V2C:
                 if (ber_printf_elements(message, "dse", agent->version,                  if (ober_printf_elements(message, "dse", agent->version,
                     agent->community, pdu) == NULL) {                      agent->community, pdu) == NULL) {
                         ber_free_elements(pdu);                          ober_free_elements(pdu);
                         goto fail;                          goto fail;
                 }                  }
                 break;                  break;
         case SNMP_V3:          case SNMP_V3:
                 msgid = arc4random_uniform(2147483647);                  msgid = arc4random_uniform(2147483647);
                 if ((scopedpdu = ber_add_sequence(NULL)) == NULL) {                  if ((scopedpdu = ober_add_sequence(NULL)) == NULL) {
                         ber_free_elements(pdu);                          ober_free_elements(pdu);
                         goto fail;                          goto fail;
                 }                  }
                 if (ber_printf_elements(scopedpdu, "xxe",                  if (ober_printf_elements(scopedpdu, "xxe",
                     agent->v3->engineid, agent->v3->engineidlen,                      agent->v3->engineid, agent->v3->engineidlen,
                     agent->v3->ctxname, agent->v3->ctxnamelen, pdu) == NULL) {                      agent->v3->ctxname, agent->v3->ctxnamelen, pdu) == NULL) {
                         ber_free_elements(pdu);                          ober_free_elements(pdu);
                         ber_free_elements(scopedpdu);                          ober_free_elements(scopedpdu);
                         goto fail;                          goto fail;
                 }                  }
                 pdu = NULL;                  pdu = NULL;
                 if ((securityparams = agent->v3->sec->genparams(agent,                  if ((securityparams = agent->v3->sec->genparams(agent,
                     &securitysize, &cookie)) == NULL) {                      &securitysize, &cookie)) == NULL) {
                         ber_free_elements(scopedpdu);                          ober_free_elements(scopedpdu);
                         goto fail;                          goto fail;
                 }                  }
                 if (agent->v3->level & SNMP_MSGFLAG_PRIV) {                  if (agent->v3->level & SNMP_MSGFLAG_PRIV) {
                         if ((encpdu = agent->v3->sec->encpdu(agent, scopedpdu,                          if ((encpdu = agent->v3->sec->encpdu(agent, scopedpdu,
                             cookie)) == NULL)                              cookie)) == NULL)
                                 goto fail;                                  goto fail;
                         ber_free_elements(scopedpdu);                          ober_free_elements(scopedpdu);
                         scopedpdu = encpdu;                          scopedpdu = encpdu;
                 }                  }
                 if (ber_printf_elements(message, "d{idxd}xe",                  if (ober_printf_elements(message, "d{idxd}xe",
                     agent->version, msgid, UDP_MAXPACKET, &(agent->v3->level),                      agent->version, msgid, UDP_MAXPACKET, &(agent->v3->level),
                     (size_t) 1, agent->v3->sec->model, securityparams,                      (size_t) 1, agent->v3->sec->model, securityparams,
                     securitysize, scopedpdu) == NULL) {                      securitysize, scopedpdu) == NULL) {
                         ber_free_elements(scopedpdu);                          ober_free_elements(scopedpdu);
                         goto fail;                          goto fail;
                 }                  }
                 if (ber_scanf_elements(message, "{SSe", &secparams) == -1)                  if (ober_scanf_elements(message, "{SSe", &secparams) == -1)
                         goto fail;                          goto fail;
                 ber_set_writecallback(secparams, snmp_v3_secparamsoffset,                  ober_set_writecallback(secparams, snmp_v3_secparamsoffset,
                     &secparamsoffset);                      &secparamsoffset);
                 break;                  break;
         }          }
   
         if (ber_write_elements(&ber, message) == -1)          if (ober_write_elements(&ber, message) == -1)
                 goto fail;                  goto fail;
         ret = ber_copy_writebuf(&ber, (void **)&packet);          ret = ber_copy_writebuf(&ber, (void **)&packet);
   
         *len = (size_t) ret;          *len = (size_t) ret;
         ber_free(&ber);          ober_free(&ber);
   
         if (agent->version == SNMP_V3 && packet != NULL) {          if (agent->version == SNMP_V3 && packet != NULL) {
                 if (agent->v3->sec->finalparams(agent, packet,                  if (agent->v3->sec->finalparams(agent, packet,
Line 458 
Line 458 
 fail:  fail:
         if (agent->version == SNMP_V3)          if (agent->version == SNMP_V3)
                 agent->v3->sec->freecookie(cookie);                  agent->v3->sec->freecookie(cookie);
         ber_free_elements(message);          ober_free_elements(message);
         free(securityparams);          free(securityparams);
         return packet;          return packet;
 }  }
Line 481 
Line 481 
         void *cookie = NULL;          void *cookie = NULL;
   
         bzero(&ber, sizeof(ber));          bzero(&ber, sizeof(ber));
         ber_set_application(&ber, smi_application);          ober_set_application(&ber, smi_application);
   
         ber_set_readbuf(&ber, buf, buflen);          ober_set_readbuf(&ber, buf, buflen);
         if ((message = ber_read_elements(&ber, NULL)) == NULL)          if ((message = ober_read_elements(&ber, NULL)) == NULL)
                 return NULL;                  return NULL;
         ber_free(&ber);          ober_free(&ber);
   
         if (ber_scanf_elements(message, "{de", &version, &payload) != 0)          if (ober_scanf_elements(message, "{de", &version, &payload) != 0)
                 goto fail;                  goto fail;
   
         if (version != agent->version)          if (version != agent->version)
Line 497 
Line 497 
         switch (version) {          switch (version) {
         case SNMP_V1:          case SNMP_V1:
         case SNMP_V2C:          case SNMP_V2C:
                 if (ber_scanf_elements(payload, "se", &community, &pdu) == -1)                  if (ober_scanf_elements(payload, "se", &community, &pdu) == -1)
                         goto fail;                          goto fail;
                 if (strcmp(community, agent->community) != 0)                  if (strcmp(community, agent->community) != 0)
                         goto fail;                          goto fail;
                 ber_unlink_elements(payload);                  ober_unlink_elements(payload);
                 ber_free_elements(message);                  ober_free_elements(message);
                 return pdu;                  return pdu;
         case SNMP_V3:          case SNMP_V3:
                 if (ber_scanf_elements(payload, "{idxi}pxe", &msgid, &msgsz,                  if (ober_scanf_elements(payload, "{idxi}pxe", &msgid, &msgsz,
                     &msgflags, &msgflagslen, &model, &secparamsoffset,                      &msgflags, &msgflagslen, &model, &secparamsoffset,
                     &secparams, &secparamslen, &scopedpdu) == -1)                      &secparams, &secparamslen, &scopedpdu) == -1)
                         goto fail;                          goto fail;
Line 518 
Line 518 
                         goto fail;                          goto fail;
                 }                  }
                 if (msgflags[0] & SNMP_MSGFLAG_PRIV) {                  if (msgflags[0] & SNMP_MSGFLAG_PRIV) {
                         if (ber_scanf_elements(scopedpdu, "x", &encpdu,                          if (ober_scanf_elements(scopedpdu, "x", &encpdu,
                             &encpdulen) == -1)                              &encpdulen) == -1)
                                 goto fail;                                  goto fail;
                         if ((scopedpdu = agent->v3->sec->decpdu(agent, encpdu,                          if ((scopedpdu = agent->v3->sec->decpdu(agent, encpdu,
                             encpdulen, cookie)) == NULL)                              encpdulen, cookie)) == NULL)
                                 goto fail;                                  goto fail;
                 }                  }
                 if (ber_scanf_elements(scopedpdu, "{xeS{", &engineid,                  if (ober_scanf_elements(scopedpdu, "{xeS{", &engineid,
                     &engineidlen, &ctxname) == -1)                      &engineidlen, &ctxname) == -1)
                         goto fail;                          goto fail;
                 if (!agent->v3->engineidset) {                  if (!agent->v3->engineidset) {
Line 533 
Line 533 
                             engineidlen) == -1)                              engineidlen) == -1)
                                 goto fail;                                  goto fail;
                 }                  }
                 pdu = ber_unlink_elements(ctxname);                  pdu = ober_unlink_elements(ctxname);
                 /* Accept reports, so we can continue if possible */                  /* Accept reports, so we can continue if possible */
                 if (pdu->be_type != SNMP_C_REPORT) {                  if (pdu->be_type != SNMP_C_REPORT) {
                         if ((msgflags[0] & SNMP_MSGFLAG_SECMASK) !=                          if ((msgflags[0] & SNMP_MSGFLAG_SECMASK) !=
Line 541 
Line 541 
                                 goto fail;                                  goto fail;
                 }                  }
   
                 ber_free_elements(message);                  ober_free_elements(message);
                 agent->v3->sec->freecookie(cookie);                  agent->v3->sec->freecookie(cookie);
                 return pdu;                  return pdu;
         }          }
Line 550 
Line 550 
 fail:  fail:
         if (version == SNMP_V3)          if (version == SNMP_V3)
                 agent->v3->sec->freecookie(cookie);                  agent->v3->sec->freecookie(cookie);
         ber_free_elements(message);          ober_free_elements(message);
         return NULL;          return NULL;
 }  }
   
Line 569 
Line 569 
         ssize_t ret;          ssize_t ret;
   
         *buf = NULL;          *buf = NULL;
         if ((ret = ber_get_writebuf(ber, (void **)&bbuf)) == -1)          if ((ret = ober_get_writebuf(ber, (void **)&bbuf)) == -1)
                 return -1;                  return -1;
         if ((*buf = malloc(ret)) == NULL)          if ((*buf = malloc(ret)) == NULL)
                 return -1;                  return -1;

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.8.2.1