Revert "bpo-32221: makeipaddr(): remove interface part [GH-4724] by 1st1 · Pull Request #5394 · python/cpython
/* 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
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); }
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;
if (pch == h->h_addr_list && alen >= sizeof(sin)) memcpy((char *) addr, &sin, sizeof(sin));
if (pch == h->h_addr_list && alen >= sizeof(sin6)) memcpy((char *) addr, &sin6, sizeof(sin6));
/* 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; }
/* inet_ntop guarantee NUL-termination of resulting string. */ retval = inet_ntop(af, packed_ip.buf, ip, sizeof(ip)); PyBuffer_Release(&packed_ip); if (!retval) {