◐ Shell
clean mode source ↗

Revert "bpo-32221: makeipaddr(): remove interface part [GH-4724] by 1st1 · Pull Request #5394 · python/cpython

Expand Up @@ -1094,33 +1094,25 @@ setipaddr(const char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int }

/* Convert IPv4 sockaddr to a Python str. */ /* Create a string object representing an IP address. This is always a string of the form 'dd.dd.dd.dd' (with variable size numbers). */
static PyObject * make_ipv4_addr(const struct sockaddr_in *addr) makeipaddr(struct sockaddr *addr, int addrlen) { char buf[INET_ADDRSTRLEN]; if (inet_ntop(AF_INET, &addr->sin_addr, buf, sizeof(buf)) == NULL) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } return PyUnicode_FromString(buf); }
#ifdef ENABLE_IPV6 /* Convert IPv6 sockaddr to a Python str. */ char buf[NI_MAXHOST]; int error;
static PyObject * make_ipv6_addr(const struct sockaddr_in6 *addr) { char buf[INET6_ADDRSTRLEN]; if (inet_ntop(AF_INET6, &addr->sin6_addr, buf, sizeof(buf)) == NULL) { PyErr_SetFromErrno(PyExc_OSError); error = getnameinfo(addr, addrlen, buf, sizeof(buf), NULL, 0, NI_NUMERICHOST); if (error) { set_gaierror(error); return NULL; } return PyUnicode_FromString(buf); } #endif

#ifdef USE_BLUETOOTH /* Convert a string representation of a Bluetooth address into a numeric Expand Down Expand Up @@ -1185,10 +1177,11 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
case AF_INET: { const struct sockaddr_in *a = (const struct sockaddr_in *)addr; PyObject *addrobj = make_ipv4_addr(a); struct sockaddr_in *a; PyObject *addrobj = makeipaddr(addr, sizeof(*a)); PyObject *ret = NULL; if (addrobj) { a = (struct sockaddr_in *)addr; ret = Py_BuildValue("Oi", addrobj, ntohs(a->sin_port)); Py_DECREF(addrobj); } Expand Down Expand Up @@ -1232,10 +1225,11 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) #ifdef ENABLE_IPV6 case AF_INET6: { const struct sockaddr_in6 *a = (const struct sockaddr_in6 *)addr; PyObject *addrobj = make_ipv6_addr(a); struct sockaddr_in6 *a; PyObject *addrobj = makeipaddr(addr, sizeof(*a)); PyObject *ret = NULL; if (addrobj) { a = (struct sockaddr_in6 *)addr; ret = Py_BuildValue("OiII", addrobj, ntohs(a->sin6_port), Expand Down Expand Up @@ -5042,14 +5036,14 @@ static PyObject * socket_gethostbyname(PyObject *self, PyObject *args) { char *name; struct sockaddr_in addrbuf; sock_addr_t addrbuf; PyObject *ret = NULL;
if (!PyArg_ParseTuple(args, "et:gethostbyname", "idna", &name)) return NULL; if (setipaddr(name, (struct sockaddr *)&addrbuf, sizeof(addrbuf), AF_INET) < 0) if (setipaddr(name, SAS2SA(&addrbuf), sizeof(addrbuf), AF_INET) < 0) goto finally; ret = make_ipv4_addr(&addrbuf); ret = makeipaddr(SAS2SA(&addrbuf), sizeof(struct sockaddr_in)); finally: PyMem_Free(name); return ret; Expand Down Expand Up @@ -5151,7 +5145,7 @@ gethost_common(struct hostent *h, struct sockaddr *addr, size_t alen, int af) sin.sin_len = sizeof(sin); #endif memcpy(&sin.sin_addr, *pch, sizeof(sin.sin_addr)); tmp = make_ipv4_addr(&sin); tmp = makeipaddr((struct sockaddr *)&sin, sizeof(sin));
if (pch == h->h_addr_list && alen >= sizeof(sin)) memcpy((char *) addr, &sin, sizeof(sin)); Expand All @@ -5168,7 +5162,8 @@ gethost_common(struct hostent *h, struct sockaddr *addr, size_t alen, int af) sin6.sin6_len = sizeof(sin6); #endif memcpy(&sin6.sin6_addr, *pch, sizeof(sin6.sin6_addr)); tmp = make_ipv6_addr(&sin6); tmp = makeipaddr((struct sockaddr *)&sin6, sizeof(sin6));
if (pch == h->h_addr_list && alen >= sizeof(sin6)) memcpy((char *) addr, &sin6, sizeof(sin6)); Expand Down Expand Up @@ -5939,11 +5934,14 @@ socket_inet_ntop(PyObject *self, PyObject *args) Py_buffer packed_ip; const char* retval; #ifdef ENABLE_IPV6 char ip[Py_MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN)]; char ip[Py_MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) + 1]; #else char ip[INET_ADDRSTRLEN]; char ip[INET_ADDRSTRLEN + 1]; #endif
/* Guarantee NUL-termination for PyUnicode_FromString() below */ memset((void *) &ip[0], '\0', sizeof(ip));
if (!PyArg_ParseTuple(args, "iy*:inet_ntop", &af, &packed_ip)) { return NULL; } Expand Down Expand Up @@ -5971,7 +5969,6 @@ socket_inet_ntop(PyObject *self, PyObject *args) return NULL; }
/* inet_ntop guarantee NUL-termination of resulting string. */ retval = inet_ntop(af, packed_ip.buf, ip, sizeof(ip)); PyBuffer_Release(&packed_ip); if (!retval) { Expand Down