Rob Pierce(r...@2keys.ca) on 2018.06.10 13:25:23 -0400:
> This brings snmpd agentx.c closer to relayd agentx.c.
>
> In the remaining delta, I am not sure if the pdu context code should be
> removed
> from the snmpd version or added to the relayd version.
>
> Anyway, this is one step closer.
>
> Ok?
ok
> Rob
>
> Index: agentx.c
> ===
> RCS file: /cvs/src/usr.sbin/snmpd/agentx.c,v
> retrieving revision 1.12
> diff -u -p -r1.12 agentx.c
> --- agentx.c 14 Feb 2018 12:43:07 - 1.12
> +++ agentx.c 10 Jun 2018 16:59:01 -
> @@ -18,12 +18,8 @@
> #include
> #include
> #include
> -#include
> #include
>
> -#include
> -
> -#include
> #include
> #include
> #include
> @@ -217,9 +213,14 @@ snmp_agentx_response(struct agentx_handl
> {
> struct agentx_response_data resp;
>
> - if (snmp_agentx_read_response(pdu, &resp) == -1)
> + if (snmp_agentx_read_raw(pdu, &resp, sizeof(resp)) == -1)
> return (-1);
>
> + if (!snmp_agentx_byteorder_native(pdu->hdr)) {
> + resp.error = snmp_agentx_int16_byteswap(resp.error);
> + resp.index = snmp_agentx_int16_byteswap(resp.index);
> + }
> +
> h->error = resp.error;
> if (resp.error != AGENTX_ERR_NONE)
> return (-1);
> @@ -227,20 +228,6 @@ snmp_agentx_response(struct agentx_handl
> return (0);
> }
>
> -int
> -snmp_agentx_read_response(struct agentx_pdu *pdu, struct
> agentx_response_data *resp)
> -{
> - if (snmp_agentx_read_raw(pdu, resp, sizeof(*resp)) == -1)
> - return (-1);
> -
> - if (!snmp_agentx_byteorder_native(pdu->hdr)) {
> - resp->error = snmp_agentx_int16_byteswap(resp->error);
> - resp->index = snmp_agentx_int16_byteswap(resp->index);
> - }
> -
> - return (0);
> -}
> -
> /*
> * Read the response PDU for an open operation.
> */
> @@ -341,7 +328,7 @@ snmp_agentx_recv(struct agentx_handle *h
> if (h->r == NULL) {
> if ((h->r = snmp_agentx_pdu_alloc()) == NULL)
> return (NULL);
> - h->r->datalen = 0; /* XXX -- force this for receive
> buffers */
> + h->r->datalen = 0; /* XXX force this for receive buffers */
> }
> pdu = h->r;
>
> @@ -1038,7 +1025,7 @@ snmp_oid2string(struct snmp_oid *o, char
> bzero(buf, len);
>
> for (i = 0; i < o->o_n; i++) {
> - snprintf(str, sizeof(str), "%d", o->o_id[i]);
> + snprintf(str, sizeof(str), "%u", o->o_id[i]);
> strlcat(buf, str, len);
> if (i < (o->o_n - 1))
> strlcat(buf, ".", len);
> Index: control.c
> ===
> RCS file: /cvs/src/usr.sbin/snmpd/control.c,v
> retrieving revision 1.42
> diff -u -p -r1.42 control.c
> --- control.c 21 Apr 2017 13:50:23 - 1.42
> +++ control.c 10 Jun 2018 16:59:01 -
> @@ -537,7 +537,7 @@ control_dispatch_agentx(int fd, short ev
> struct agentx_varbind_hdrvbhdr;
> struct ber_element **elm, **iter;
>
> - if (snmp_agentx_read_response(pdu, &resp) == -1) {
> + if (snmp_agentx_read_raw(pdu, &resp, sizeof(resp)) ==
> -1) {
> msg->sm_error = SNMP_ERROR_GENERR;
> goto dispatch;
> }
> Index: snmp.h
> ===
> RCS file: /cvs/src/usr.sbin/snmpd/snmp.h,v
> retrieving revision 1.14
> diff -u -p -r1.14 snmp.h
> --- snmp.h11 Jun 2015 18:49:09 - 1.14
> +++ snmp.h10 Jun 2018 16:59:01 -
> @@ -369,7 +369,6 @@ struct agentx_handle *
> struct agentx_handle *
> snmp_agentx_fdopen(int, char *, struct snmp_oid *);
> int snmp_agentx_response(struct agentx_handle *, struct agentx_pdu *);
> -int snmp_agentx_read_response(struct agentx_pdu *, struct
> agentx_response_data *);
> int snmp_agentx_open_response(struct agentx_handle *, struct agentx_pdu *);
> struct agentx_pdu *
> snmp_agentx_open_pdu(struct agentx_handle *, char *descr,
>