View | Details | Raw Unified
Collapse All | Expand All

(-) snmplib/snmpUDPDomain.c.original (-4 / +30 lines)
 Lines 103-114    Link Here 
        struct sockaddr_in *to = NULL;
        struct sockaddr_in *to = NULL;
	char tmp[64];
	char tmp[64];
        to = (struct sockaddr_in *) &(addr_pair->remote_addr);
        to = (struct sockaddr_in *) &(addr_pair->remote_addr);
        /* Using strdup on the output of inet_ntoa is important! */
        /* "inet_ntoa" uses a statically allocated buffer to store
           its information.  To use two in a row, the first needs
           to be saved somewhere else so that the second does not
           overwrite it.  However, it is important to remember that
           all "strdup" calls MUST be freed. */
        if (to == NULL) {
        if (to == NULL) {
            return strdup("UDP: unknown");
            sprintf(tmp, "UDP: [%s]->unknown",
                    inet_ntoa(addr_pair->local_addr));
        } else {
            /* This will store the first address from strdup so that the second
               call will not overwrite it. */
            char* local_addr_copy = strdup( inet_ntoa(addr_pair->local_addr) );
            sprintf(tmp, "UDP: [%s]->[%s]:%hu",
                    local_addr_copy,
                    inet_ntoa(to->sin_addr), ntohs(to->sin_port));
            /* Remember, we must free our copy now. */
            free( local_addr_copy );
        }
        }
        sprintf(tmp, "UDP: [%s]:%hu",
                inet_ntoa(to->sin_addr), ntohs(to->sin_port));
        return strdup(tmp);
        return strdup(tmp);
    }
    }
}
}
 Lines 666-676    Link Here 
                                              NETSNMP_DS_LIB_CLIENT_ADDR);
                                              NETSNMP_DS_LIB_CLIENT_ADDR);
        if (client_socket) {
        if (client_socket) {
            struct sockaddr_in client_addr;
            struct sockaddr_in client_addr;
            int ret;
            netsnmp_sockaddr_in2(&client_addr, client_socket, NULL);
            netsnmp_sockaddr_in2(&client_addr, client_socket, NULL);
            addr_pair.local_addr = client_addr.sin_addr;
            client_addr.sin_port = 0;
            client_addr.sin_port = 0;
            bind(t->sock, (struct sockaddr *)&client_addr,
            ret = bind(t->sock, (struct sockaddr *)&client_addr,
                  sizeof(struct sockaddr));
                  sizeof(struct sockaddr));
            if(ret)
                DEBUGMSGTL(("netsnmp_udp", "failed to bind for clientaddr: %d %s\n",
                            errno,strerror(errno)));
            /* TODO: should we exit here? */
        }
        }
        str = netsnmp_udp_fmtaddr(NULL, (void *)&addr_pair, 
                sizeof(netsnmp_udp_addr_pair));
        DEBUGMSGTL(("netsnmp_udp", "client open %s\n", str));
        free(str);
        /*
        /*
         * Save the (remote) address in the
         * Save the (remote) address in the
         * transport-specific data pointer for later use by netsnmp_udp_send.
         * transport-specific data pointer for later use by netsnmp_udp_send.