On Mon, 2021-01-04 at 08:15 +0100, Rob Schmersel wrote:
> On Sun, 03 Jan 2021 21:59:57 +0100
> Martijn van Duren <openbsd+t...@list.imperialat.at> wrote:
> 
> > ping
> > 
> > On Mon, 2020-12-14 at 12:13 +0100, Martijn van Duren wrote:
> > > I can't find any reference in RFC2578 for a boolean type, nor have I
> > > seen it in the wild and the TruthValue diff I just committed give
> > > me a strong indication that this was added without any real reason.
> > > 
> > > OK to remove?
> > > 
> > > martijn@
> > > 
> > > Index: usr.bin/snmp/smi.c
> > > ===================================================================
> > > RCS file: /cvs/src/usr.bin/snmp/smi.c,v
> > > retrieving revision 1.13
> > > diff -u -p -r1.13 smi.c
> > > --- usr.bin/snmp/smi.c  14 Dec 2020 07:44:26 -0000      1.13
> > > +++ usr.bin/snmp/smi.c  14 Dec 2020 11:12:29 -0000
> > > @@ -95,9 +95,6 @@ smi_debug_elements(struct ber_element *r
> > >                 case BER_TYPE_EOC:
> > >                         fprintf(stderr, "end-of-content");
> > >                         break;
> > > -               case BER_TYPE_BOOLEAN:
> > > -                       fprintf(stderr, "boolean");
> > > -                       break;
> > >                 case BER_TYPE_INTEGER:
> > >                         fprintf(stderr, "integer");
> > >                         break;
> > > @@ -196,9 +193,6 @@ smi_debug_elements(struct ber_element *r
> > >                 goto invalid;
> > >  
> > >         switch (root->be_encoding) {
> > > -       case BER_TYPE_BOOLEAN:
> > > -               fprintf(stderr, "%s", value);
> > > -               break;
> > >         case BER_TYPE_INTEGER:
> > >         case BER_TYPE_ENUMERATED:
> > >                 fprintf(stderr, "value %s", value);
> > > @@ -255,7 +249,6 @@ smi_print_element(struct ber_oid *oid, s
> > >         struct textconv  tckey;
> > >         size_t           len, i, slen;
> > >         long long        v, ticks;
> > > -       int              d;
> > >         int              is_hex = 0, ret;
> > >         struct ber_oid   o;
> > >         char             strbuf[BUFSIZ];
> > > @@ -277,17 +270,6 @@ smi_print_element(struct ber_oid *oid, s
> > >         }
> > >  
> > >         switch (root->be_encoding) {
> > > -       case BER_TYPE_BOOLEAN:
> > > -               if (ober_get_boolean(root, &d) == -1)
> > > -                       goto fail;
> > > -               if (print_hint) {
> > > -                       if (asprintf(&str, "INTEGER: %s(%d)",
> > > -                           d ? "true" : "false", d) == -1)
> > > -                               goto fail;
> > > -               } else
> > > -                       if (asprintf(&str, "%s", d ? "true" :
> > > "false") == -1)
> > > -                               goto fail;
> > > -               break;
> > >         case BER_TYPE_INTEGER:
> > >         case BER_TYPE_ENUMERATED:
> > >                 if (ober_get_integer(root, &v) == -1)
> > > Index: usr.sbin/snmpd/smi.c
> > > ===================================================================
> > > RCS file: /cvs/src/usr.sbin/snmpd/smi.c,v
> > > retrieving revision 1.27
> > > diff -u -p -r1.27 smi.c
> > > --- usr.sbin/snmpd/smi.c        24 Oct 2019 12:39:27 -0000      1.27
> > > +++ usr.sbin/snmpd/smi.c        14 Dec 2020 11:12:29 -0000
> > > @@ -317,9 +317,6 @@ smi_debug_elements(struct ber_element *r
> > >                 case BER_TYPE_EOC:
> > >                         fprintf(stderr, "end-of-content");
> > >                         break;
> > > -               case BER_TYPE_BOOLEAN:
> > > -                       fprintf(stderr, "boolean");
> > > -                       break;
> > >                 case BER_TYPE_INTEGER:
> > >                         fprintf(stderr, "integer");
> > >                         break;
> > > @@ -417,9 +414,6 @@ smi_debug_elements(struct ber_element *r
> > >                 goto invalid;
> > >  
> > >         switch (root->be_encoding) {
> > > -       case BER_TYPE_BOOLEAN:
> > > -               fprintf(stderr, "%s", value);
> > > -               break;
> > >         case BER_TYPE_INTEGER:
> > >         case BER_TYPE_ENUMERATED:
> > >                 fprintf(stderr, "value %s", value);
> > > @@ -473,17 +467,10 @@ smi_print_element(struct ber_element *ro
> > >         char            *str = NULL, *buf, *p;
> > >         size_t           len, i;
> > >         long long        v;
> > > -       int              d;
> > >         struct ber_oid   o;
> > >         char             strbuf[BUFSIZ];
> > >  
> > >         switch (root->be_encoding) {
> > > -       case BER_TYPE_BOOLEAN:
> > > -               if (ober_get_boolean(root, &d) == -1)
> > > -                       goto fail;
> > > -               if (asprintf(&str, "%s(%d)", d ? "true" : "false",
> > > d) == -1)
> > > -                       goto fail;
> > > -               break;
> > >         case BER_TYPE_INTEGER:
> > >         case BER_TYPE_ENUMERATED:
> > >                 if (ober_get_integer(root, &v) == -1)
> > > 
> > >   
> > 
> > 
> 
> As an old telecom engineer, I can say that Boolean is a
> defined ASN.1 type and supported in BER (see X.690 section 8.2,
> https://www.itu.int/rec/T-REC-X.690-201508-I/en) and it is used a lot in
> *telecom* standards :)
> 
Thanks for the feedback, it's always nice to get some background
information on old standards. However, this change is specifically for
SNMP, which does not use this part of BER/ASN1 as far as I could find.
I'm not going to remove it from ber.c and someone(tm) should look at
the LDAP spec to see if it's actually prescribed there.

martijn@

Reply via email to