String HHVM_FUNCTION(gethostbyname, const String& hostname) { IOStatusHelper io("gethostbyname", hostname.data()); if (RuntimeOption::EnableDnsCache) { Variant success; Variant resolved = f_apc_fetch(hostname, ref(success), SHARED_STORE_DNS_CACHE); if (same(success, true)) { if (same(resolved, false)) { return hostname; } return resolved.toString(); } } HostEnt result; if (!safe_gethostbyname(hostname.data(), result)) { if (RuntimeOption::EnableDnsCache) { f_apc_store(hostname, false, RuntimeOption::DnsCacheTTL, SHARED_STORE_DNS_CACHE); } return hostname; } struct in_addr in; memcpy(&in.s_addr, *(result.hostbuf.h_addr_list), sizeof(in.s_addr)); String ret(safe_inet_ntoa(in)); if (RuntimeOption::EnableDnsCache) { f_apc_store(hostname, ret, RuntimeOption::DnsCacheTTL, SHARED_STORE_DNS_CACHE); } return ret; }
Variant HHVM_FUNCTION(socket_create_listen, int port, int backlog /* = 128 */) { HostEnt result; if (!safe_gethostbyname("0.0.0.0", result)) { return false; } struct sockaddr_in la; memcpy((char *) &la.sin_addr, result.hostbuf.h_addr, result.hostbuf.h_length); la.sin_family = result.hostbuf.h_addrtype; la.sin_port = htons((unsigned short)port); auto sock = makeSmartPtr<Socket>( socket(PF_INET, SOCK_STREAM, 0), PF_INET, "0.0.0.0", port); if (!sock->valid()) { SOCKET_ERROR(sock, "unable to create listening socket", errno); return false; } if (::bind(sock->fd(), (struct sockaddr *)&la, sizeof(la)) < 0) { SOCKET_ERROR(sock, "unable to bind to given address", errno); return false; } if (listen(sock->fd(), backlog) < 0) { SOCKET_ERROR(sock, "unable to listen on socket", errno); return false; } return Variant(std::move(sock)); }
static int ossweb_login(const char *host, int port, const char *user, const char *passwd) { struct sockaddr_in remote; struct hostent *hp; char buf[512]; int sock; fd_set fds; struct timeval t; _pam_log(LOG_DEBUG, "checking %s:%d for %s", host, port, user); if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { _pam_log(LOG_DEBUG, "socket: %s", strerror(errno)); return PAM_SERVICE_ERR; } remote.sin_family = AF_INET; remote.sin_addr.s_addr = safe_gethostbyname(host); remote.sin_port = htons(port); if (connect(sock, (struct sockaddr *) &remote, sizeof(struct sockaddr_in)) < 0) { close(sock); _pam_log(LOG_DEBUG, "connect: %s", strerror(errno)); return PAM_SERVICE_ERR; } snprintf(buf, sizeof(buf), "GET /ossweb/pub/verify.tcl?user_name=%s&password=%s HTTP/1.0\n\n", user, passwd); write(sock, buf, strlen(buf)); t.tv_usec = 0; t.tv_sec = 5; FD_ZERO(&fds); FD_SET(sock, &fds); if (select(sock + 1, &fds, 0, 0, &t) == 1) read(sock, buf, sizeof(buf)); close(sock); if (!strncmp(buf, "HTTP/1.0 200 OK", 15)) return PAM_SUCCESS; return PAM_AUTH_ERR; }
bool XDebugServer::lookupHostname(const char* hostname, struct in_addr& in) { HostEnt result; if (safe_gethostbyname(hostname, result)) { in = *((struct in_addr*) result.hostbuf.h_addr); return true; } return false; }
std::string Util::GetPrimaryIP() { struct utsname buf; uname((struct utsname *)&buf); HostEnt result; if (!safe_gethostbyname(buf.nodename, result)) { return buf.nodename; } struct in_addr in; memcpy(&in.s_addr, *(result.hostbuf.h_addr_list), sizeof(in.s_addr)); return safe_inet_ntoa(in); }
Variant HHVM_FUNCTION(gethostbynamel, const String& hostname) { IOStatusHelper io("gethostbynamel", hostname.data()); HostEnt result; if (!safe_gethostbyname(hostname.data(), result)) { return false; } Array ret; for (int i = 0 ; result.hostbuf.h_addr_list[i] != 0 ; i++) { struct in_addr in = *(struct in_addr *)result.hostbuf.h_addr_list[i]; ret.append(String(safe_inet_ntoa(in))); } return ret; }
String HHVM_FUNCTION(gethostbyname, const String& hostname) { IOStatusHelper io("gethostbyname", hostname.data()); HostEnt result; if (!safe_gethostbyname(hostname.data(), result)) { return hostname; } struct in_addr in; memcpy(&in.s_addr, *(result.hostbuf.h_addr_list), sizeof(in.s_addr)); try { return String(folly::IPAddressV4(in).str()); } catch (folly::IPAddressFormatException &e) { return hostname; } }
Variant HHVM_FUNCTION(gethostbynamel, const String& hostname) { IOStatusHelper io("gethostbynamel", hostname.data()); HostEnt result; if (!safe_gethostbyname(hostname.data(), result)) { return false; } Array ret; for (int i = 0 ; result.hostbuf.h_addr_list[i] != 0 ; i++) { struct in_addr in = *(struct in_addr *)result.hostbuf.h_addr_list[i]; try { ret.append(String(folly::IPAddressV4(in).str())); } catch (folly::IPAddressFormatException &e) { // ok to skip } } return ret; }