On Mon, Feb 05, 2018 at 06:52:39PM +0100, Jeremie Courreges-Anglas wrote:
> 
> Hi,
> 
> while reviewing an snmpd diff, I noticed that the fd in struct ber was
> always set to -1; and indeed snmpd, ldapd and ypldap only pass buffers
> to the ber API.  So this diff removes support for direct read/writes
> from file descriptors and kills the related XXX.
> 
> ok?

Sure, kill it with fire. Happy to see this go.
 
> 
> Index: usr.sbin/ldapd/ber.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ldapd/ber.c,v
> retrieving revision 1.12
> diff -u -p -r1.12 ber.c
> --- usr.sbin/ldapd/ber.c      11 Feb 2017 20:40:03 -0000      1.12
> +++ usr.sbin/ldapd/ber.c      5 Feb 2018 17:51:37 -0000
> @@ -783,10 +783,6 @@ ber_write_elements(struct ber *ber, stru
>       if (ber_dump_element(ber, root) == -1)
>               return -1;
>  
> -     /* XXX this should be moved to a different function */
> -     if (ber->fd != -1)
> -             return write(ber->fd, ber->br_wbuf, len);
> -
>       return (len);
>  }
>  
> @@ -1095,9 +1091,9 @@ ber_read_element(struct ber *ber, struct
>       DPRINTF("ber read element size %zd\n", len);
>       totlen += r + len;
>  
> -     /* If using an external buffer and the total size of the element
> -      * is larger then the external buffer don't bother to continue. */
> -     if (ber->fd == -1 && len > ber->br_rend - ber->br_rptr) {
> +     /* If the total size of the element is larger than the buffer
> +      * don't bother to continue. */
> +     if (len > ber->br_rend - ber->br_rptr) {
>               errno = ECANCELED;
>               return -1;
>       }
> @@ -1243,17 +1239,7 @@ ber_free(struct ber *b)
>  static ssize_t
>  ber_getc(struct ber *b, u_char *c)
>  {
> -     ssize_t r;
> -     /*
> -      * XXX calling read here is wrong in many ways. The most obvious one
> -      * being that we will block till data arrives.
> -      * But for now it is _good enough_ *gulp*
> -      */
> -     if (b->fd == -1)
> -             r = ber_readbuf(b, c, 1);
> -     else
> -             r = read(b->fd, c, 1);
> -     return r;
> +     return ber_readbuf(b, c, 1);
>  }
>  
>  static ssize_t
> @@ -1262,22 +1248,10 @@ ber_read(struct ber *ber, void *buf, siz
>       u_char *b = buf;
>       ssize_t r, remain = len;
>  
> -     /*
> -      * XXX calling read here is wrong in many ways. The most obvious one
> -      * being that we will block till data arrives.
> -      * But for now it is _good enough_ *gulp*
> -      */
> -
>       while (remain > 0) {
> -             if (ber->fd == -1)
> -                     r = ber_readbuf(ber, b, remain);
> -             else
> -                     r = read(ber->fd, b, remain);
> -             if (r == -1) {
> -                     if (errno == EINTR || errno == EAGAIN)
> -                             continue;
> +             r = ber_readbuf(ber, b, remain);
> +             if (r == -1)
>                       return -1;
> -             }
>               if (r == 0)
>                       return (b - (u_char *)buf);
>               b += r;
> Index: usr.sbin/ldapd/ber.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ldapd/ber.h,v
> retrieving revision 1.2
> diff -u -p -r1.2 ber.h
> --- usr.sbin/ldapd/ber.h      11 Feb 2017 20:40:03 -0000      1.2
> +++ usr.sbin/ldapd/ber.h      5 Feb 2018 17:51:37 -0000
> @@ -35,7 +35,6 @@ struct ber_element {
>  };
>  
>  struct ber {
> -     int      fd;
>       u_char  *br_wbuf;
>       u_char  *br_wptr;
>       u_char  *br_wend;
> Index: usr.sbin/ldapd/conn.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ldapd/conn.c,v
> retrieving revision 1.14
> diff -u -p -r1.14 conn.c
> --- usr.sbin/ldapd/conn.c     20 Jan 2017 11:55:08 -0000      1.14
> +++ usr.sbin/ldapd/conn.c     5 Feb 2018 17:51:37 -0000
> @@ -296,7 +296,6 @@ conn_accept(int fd, short event, void *d
>               log_warn("malloc");
>               goto giveup;
>       }
> -     conn->ber.fd = -1;
>       ber_set_application(&conn->ber, ldap_application);
>       conn->fd = afd;
>       conn->listener = l;
> Index: usr.sbin/ldapd/util.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ldapd/util.c,v
> retrieving revision 1.8
> diff -u -p -r1.8 util.c
> --- usr.sbin/ldapd/util.c     20 Jan 2017 11:55:08 -0000      1.8
> +++ usr.sbin/ldapd/util.c     5 Feb 2018 17:51:37 -0000
> @@ -113,7 +113,6 @@ ber2db(struct ber_element *root, struct 
>       memset(val, 0, sizeof(*val));
>  
>       memset(&ber, 0, sizeof(ber));
> -     ber.fd = -1;
>       ber_write_elements(&ber, root);
>  
>       if ((len = ber_get_writebuf(&ber, &buf)) == -1)
> @@ -168,7 +167,6 @@ db2ber(struct btval *val, int compressio
>       assert(val != NULL);
>  
>       memset(&ber, 0, sizeof(ber));
> -     ber.fd = -1;
>  
>       if (compression_level > 0) {
>               if (val->size < sizeof(uint32_t))
> Index: usr.sbin/snmpctl/snmpclient.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/snmpctl/snmpclient.c,v
> retrieving revision 1.14
> diff -u -p -r1.14 snmpclient.c
> --- usr.sbin/snmpctl/snmpclient.c     10 Aug 2017 16:03:10 -0000      1.14
> +++ usr.sbin/snmpctl/snmpclient.c     5 Feb 2018 17:51:37 -0000
> @@ -423,7 +423,6 @@ snmpc_sendreq(struct snmpc *sc, u_long t
>  #endif
>  
>       bzero(&ber, sizeof(ber));
> -     ber.fd = -1;
>  
>       len = ber_write_elements(&ber, root);
>       if (ber_get_writebuf(&ber, (void *)&ptr) < 1)
> @@ -459,7 +458,6 @@ snmpc_recvresp(int s, int msgver, u_int3
>               return (-1);
>  
>       bzero(&ber, sizeof(ber));
> -     ber.fd = -1;
>       ber_set_application(&ber, smi_application);
>       ber_set_readbuf(&ber, buf, rlen);
>  
> Index: usr.sbin/snmpd/ber.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/snmpd/ber.c,v
> retrieving revision 1.31
> diff -u -p -r1.31 ber.c
> --- usr.sbin/snmpd/ber.c      5 Mar 2016 03:31:36 -0000       1.31
> +++ usr.sbin/snmpd/ber.c      5 Feb 2018 17:51:37 -0000
> @@ -796,10 +796,6 @@ ber_write_elements(struct ber *ber, stru
>       if (ber_dump_element(ber, root) == -1)
>               return -1;
>  
> -     /* XXX this should be moved to a different function */
> -     if (ber->fd != -1)
> -             return write(ber->fd, ber->br_wbuf, len);
> -
>       return (len);
>  }
>  
> @@ -1104,9 +1100,9 @@ ber_read_element(struct ber *ber, struct
>       DPRINTF("ber read element size %zd\n", len);
>       totlen += r + len;
>  
> -     /* If using an external buffer and the total size of the element
> -      * is larger then the external buffer don't bother to continue. */
> -     if (ber->fd == -1 && len > ber->br_rend - ber->br_rptr) {
> +     /* If the total size of the element is larger than the buffer
> +      * don't bother to continue. */
> +     if (len > ber->br_rend - ber->br_rptr) {
>               errno = ECANCELED;
>               return -1;
>       }
> @@ -1271,22 +1267,10 @@ ber_read(struct ber *ber, void *buf, siz
>       u_char *b = buf;
>       ssize_t r, remain = len;
>  
> -     /*
> -      * XXX calling read here is wrong in many ways. The most obvious one
> -      * being that we will block till data arrives.
> -      * But for now it is _good enough_ *gulp*
> -      */
> -
>       while (remain > 0) {
> -             if (ber->fd == -1)
> -                     r = ber_readbuf(ber, b, remain);
> -             else
> -                     r = read(ber->fd, b, remain);
> -             if (r == -1) {
> -                     if (errno == EINTR || errno == EAGAIN)
> -                             continue;
> +             r = ber_readbuf(ber, b, remain);
> +             if (r == -1)
>                       return -1;
> -             }
>               if (r == 0)
>                       return (b - (u_char *)buf);
>               b += r;
> Index: usr.sbin/snmpd/ber.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/snmpd/ber.h,v
> retrieving revision 1.9
> diff -u -p -r1.9 ber.h
> --- usr.sbin/snmpd/ber.h      1 Oct 2013 12:41:47 -0000       1.9
> +++ usr.sbin/snmpd/ber.h      5 Feb 2018 17:51:37 -0000
> @@ -41,7 +41,6 @@ struct ber_element {
>  };
>  
>  struct ber {
> -     int      fd;
>       off_t    br_offs;
>       u_char  *br_wbuf;
>       u_char  *br_wptr;
> Index: usr.sbin/snmpd/snmpe.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/snmpd/snmpe.c,v
> retrieving revision 1.50
> diff -u -p -r1.50 snmpe.c
> --- usr.sbin/snmpd/snmpe.c    12 Aug 2017 16:31:09 -0000      1.50
> +++ usr.sbin/snmpd/snmpe.c    5 Feb 2018 17:51:37 -0000
> @@ -514,7 +514,6 @@ snmpe_recvmsg(int fd, short sig, void *a
>       msg->sm_datalen = (size_t)len;
>  
>       bzero(&msg->sm_ber, sizeof(msg->sm_ber));
> -     msg->sm_ber.fd = -1;
>       ber_set_application(&msg->sm_ber, smi_application);
>       ber_set_readbuf(&msg->sm_ber, msg->sm_data, msg->sm_datalen);
>  
> Index: usr.sbin/snmpd/trap.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/snmpd/trap.c,v
> retrieving revision 1.30
> diff -u -p -r1.30 trap.c
> --- usr.sbin/snmpd/trap.c     20 Jan 2018 18:49:12 -0000      1.30
> +++ usr.sbin/snmpd/trap.c     5 Feb 2018 17:51:37 -0000
> @@ -183,7 +183,6 @@ trap_send(struct ber_oid *oid, struct be
>               ber_link_elements(c, elm);
>  
>       bzero(&ber, sizeof(ber));
> -     ber.fd = -1;
>  
>       TAILQ_FOREACH(tr, &snmpd_env->sc_trapreceivers, entry) {
>               if (tr->sa_oid != NULL && tr->sa_oid->bo_n) {
> Index: usr.sbin/snmpd/traphandler.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/snmpd/traphandler.c,v
> retrieving revision 1.10
> diff -u -p -r1.10 traphandler.c
> --- usr.sbin/snmpd/traphandler.c      5 Jan 2018 08:13:32 -0000       1.10
> +++ usr.sbin/snmpd/traphandler.c      5 Feb 2018 17:51:37 -0000
> @@ -218,7 +218,6 @@ traphandler_parse(char *buf, size_t n, s
>       u_int                    vers, gtype, etype;
>  
>       bzero(&ber, sizeof(ber));
> -     ber.fd = -1;
>       ber_set_application(&ber, smi_application);
>       ber_set_readbuf(&ber, buf, n);
>  
> Index: usr.sbin/snmpd/usm.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/snmpd/usm.c,v
> retrieving revision 1.11
> diff -u -p -r1.11 usm.c
> --- usr.sbin/snmpd/usm.c      28 Oct 2016 08:01:53 -0000      1.11
> +++ usr.sbin/snmpd/usm.c      5 Feb 2018 17:51:37 -0000
> @@ -229,7 +229,6 @@ usm_decode(struct snmp_message *msg, str
>               goto done;
>       }
>  
> -     ber.fd = -1;
>       ber_set_readbuf(&ber, usmparams, len);
>       usm = ber_read_elements(&ber, NULL);
>       if (usm == NULL) {
> @@ -341,7 +340,6 @@ usm_encode(struct snmp_message *msg, str
>  
>       msg->sm_digest_offs = 0;
>       bzero(&ber, sizeof(ber));
> -     ber.fd = -1;
>  
>       usm = ber_add_sequence(NULL);
>  
> @@ -424,7 +422,6 @@ usm_encrypt(struct snmp_message *msg, st
>               return pdu;
>  
>       bzero(&ber, sizeof(ber));
> -     ber.fd = -1;
>  
>  #ifdef DEBUG
>       fprintf(stderr, "encrypted PDU:\n");
> @@ -544,7 +541,6 @@ usm_decrypt(struct snmp_message *msg, st
>               return NULL;
>  
>       bzero(&ber, sizeof(ber));
> -     ber.fd = -1;
>       ber_set_readbuf(&ber, buf, scoped_pdu_len);
>       scoped_pdu = ber_read_elements(&ber, NULL);
>  
> Index: usr.sbin/ypldap/aldap.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ypldap/aldap.c,v
> retrieving revision 1.38
> diff -u -p -r1.38 aldap.c
> --- usr.sbin/ypldap/aldap.c   21 Dec 2017 05:09:56 -0000      1.38
> +++ usr.sbin/ypldap/aldap.c   5 Feb 2018 17:51:37 -0000
> @@ -91,7 +91,6 @@ aldap_init(int fd)
>               return NULL;
>       a->buf = evbuffer_new();
>       a->fd = fd;
> -     a->ber.fd = -1;
>       ber_set_application(&a->ber, aldap_application);
>  
>       return a;
> @@ -318,7 +317,6 @@ aldap_create_page_control(struct ber_ele
>       struct ber_element *ber = NULL;
>  
>       c.br_wbuf = NULL;
> -     c.fd = -1;
>  
>       ber = ber_add_sequence(NULL);
>  
> @@ -462,7 +460,6 @@ aldap_parse_page_control(struct ber_elem
>       struct aldap_page_control *page;
>  
>       b.br_wbuf = NULL;
> -     b.fd = -1;
>       ber_scanf_elements(control, "ss", &oid, &encoded);
>       ber_set_readbuf(&b, encoded, control->be_next->be_len);
>       elm = ber_read_elements(&b, NULL);
> Index: usr.sbin/ypldap/ber.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ypldap/ber.c,v
> retrieving revision 1.12
> diff -u -p -r1.12 ber.c
> --- usr.sbin/ypldap/ber.c     6 Apr 2016 13:04:10 -0000       1.12
> +++ usr.sbin/ypldap/ber.c     5 Feb 2018 17:51:37 -0000
> @@ -783,10 +783,6 @@ ber_write_elements(struct ber *ber, stru
>       if (ber_dump_element(ber, root) == -1)
>               return -1;
>  
> -     /* XXX this should be moved to a different function */
> -     if (ber->fd != -1)
> -             return write(ber->fd, ber->br_wbuf, len);
> -
>       return (len);
>  }
>  
> @@ -1082,9 +1078,9 @@ ber_read_element(struct ber *ber, struct
>       DPRINTF("ber read element size %zd\n", len);
>       totlen += r + len;
>  
> -     /* If using an external buffer and the total size of the element
> -      * is larger then the external buffer don't bother to continue. */
> -     if (ber->fd == -1 && len > ber->br_rend - ber->br_rptr) {
> +     /* If the total size of the element is larger than external
> +      * buffer don't bother to continue. */
> +     if (len > ber->br_rend - ber->br_rptr) {
>               errno = ECANCELED;
>               return -1;
>       }
> @@ -1230,17 +1226,7 @@ ber_free(struct ber *b)
>  static ssize_t
>  ber_getc(struct ber *b, u_char *c)
>  {
> -     ssize_t r;
> -     /*
> -      * XXX calling read here is wrong in many ways. The most obvious one
> -      * being that we will block till data arrives.
> -      * But for now it is _good enough_ *gulp*
> -      */
> -     if (b->fd == -1)
> -             r = ber_readbuf(b, c, 1);
> -     else
> -             r = read(b->fd, c, 1);
> -     return r;
> +     return ber_readbuf(b, c, 1);
>  }
>  
>  static ssize_t
> @@ -1249,22 +1235,10 @@ ber_read(struct ber *ber, void *buf, siz
>       u_char *b = buf;
>       ssize_t r, remain = len;
>  
> -     /*
> -      * XXX calling read here is wrong in many ways. The most obvious one
> -      * being that we will block till data arrives.
> -      * But for now it is _good enough_ *gulp*
> -      */
> -
>       while (remain > 0) {
> -             if (ber->fd == -1)
> -                     r = ber_readbuf(ber, b, remain);
> -             else
> -                     r = read(ber->fd, b, remain);
> -             if (r == -1) {
> -                     if (errno == EINTR || errno == EAGAIN)
> -                             continue;
> +             r = ber_readbuf(ber, b, remain);
> +             if (r == -1)
>                       return -1;
> -             }
>               if (r == 0)
>                       return (b - (u_char *)buf);
>               b += r;
> Index: usr.sbin/ypldap/ber.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ypldap/ber.h,v
> retrieving revision 1.2
> diff -u -p -r1.2 ber.h
> --- usr.sbin/ypldap/ber.h     29 Dec 2008 15:48:13 -0000      1.2
> +++ usr.sbin/ypldap/ber.h     5 Feb 2018 17:51:37 -0000
> @@ -35,7 +35,6 @@ struct ber_element {
>  };
>  
>  struct ber {
> -     int      fd;
>       u_char  *br_wbuf;
>       u_char  *br_wptr;
>       u_char  *br_wend;
> 
> -- 
> jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

-- 
:wq Claudio

Reply via email to