missing ntohs on checks and auto binding in pcbbind()
authorKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Wed, 22 Apr 1992 02:27:44 +0000 (18:27 -0800)
committerKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Wed, 22 Apr 1992 02:27:44 +0000 (18:27 -0800)
SCCS-vsn: sys/netiso/iso_pcb.c 7.12

usr/src/sys/netiso/iso_pcb.c

index b2c369f..6927871 100644 (file)
@@ -4,7 +4,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)iso_pcb.c   7.11 (Berkeley) %G%
+ *     @(#)iso_pcb.c   7.12 (Berkeley) %G%
  */
 
 /***********************************************************
  */
 
 /***********************************************************
@@ -168,11 +168,6 @@ iso_pcbbind(isop, nam)
        if( (nam->m_len < 2) || (nam->m_len < siso->siso_len)) {
                        return ENAMETOOLONG;
        }
        if( (nam->m_len < 2) || (nam->m_len < siso->siso_len)) {
                        return ENAMETOOLONG;
        }
-       if (siso->siso_tlen) {
-                       register char *cp = TSEL(siso);
-                       suf.data[0] = cp[0];
-                       suf.data[1] = cp[1];
-       }
        if (siso->siso_nlen) {
                /* non-zero net addr- better match one of our interfaces */
                IFDEBUG(D_ISO)
        if (siso->siso_nlen) {
                /* non-zero net addr- better match one of our interfaces */
                IFDEBUG(D_ISO)
@@ -192,13 +187,17 @@ iso_pcbbind(isop, nam)
                isop->isop_laddr = mtod(nam, struct sockaddr_iso *);
        }
        bcopy((caddr_t)siso, (caddr_t)isop->isop_laddr, siso->siso_len);
                isop->isop_laddr = mtod(nam, struct sockaddr_iso *);
        }
        bcopy((caddr_t)siso, (caddr_t)isop->isop_laddr, siso->siso_len);
-       if (suf.s || siso->siso_tlen != 2) {
-               if((suf.s < ISO_PORT_RESERVED) && (siso->siso_tlen <= 2) &&
+       if (siso->siso_tlen == 0)
+               goto noname;
+       if ((isop->isop_socket->so_options & SO_REUSEADDR) == 0 &&
+               iso_pcblookup(head, 0, (caddr_t)0, isop->isop_laddr))
+               return EADDRINUSE;
+       if (siso->siso_tlen <= 2) {
+               bcopy(TSEL(siso), suf.data, sizeof(suf.data));
+               suf.s = ntohs(suf.s);
+               if((suf.s < ISO_PORT_RESERVED) &&
                   (isop->isop_socket->so_state && SS_PRIV) == 0)
                        return EACCES;
                   (isop->isop_socket->so_state && SS_PRIV) == 0)
                        return EACCES;
-               if ((isop->isop_socket->so_options & SO_REUSEADDR) == 0 &&
-                       iso_pcblookup(head, 0, (caddr_t)0, isop->isop_laddr))
-                       return EADDRINUSE;
        } else {
                register char *cp;
 noname:
        } else {
                register char *cp;
 noname:
@@ -210,7 +209,7 @@ noname:
                        if (head->isop_lport++ < ISO_PORT_RESERVED ||
                            head->isop_lport > ISO_PORT_USERRESERVED)
                                head->isop_lport = ISO_PORT_RESERVED;
                        if (head->isop_lport++ < ISO_PORT_RESERVED ||
                            head->isop_lport > ISO_PORT_USERRESERVED)
                                head->isop_lport = ISO_PORT_RESERVED;
-                       suf.s = head->isop_lport;
+                       suf.s = htons(head->isop_lport);
                        cp[0] = suf.data[0];
                        cp[1] = suf.data[1];
                } while (iso_pcblookup(head, 0, (caddr_t)0, isop->isop_laddr));
                        cp[0] = suf.data[0];
                        cp[1] = suf.data[1];
                } while (iso_pcblookup(head, 0, (caddr_t)0, isop->isop_laddr));