Exemple #1
0
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;
}
Exemple #2
0
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));
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}
Exemple #5
0
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);
}
Exemple #6
0
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;
}