Ethernet shield, get NTP server via DHCP?

Is there any way with the ethernet library to expose the IP's of NTP servers assigned via option 42 from the DHCP server? It is already set up for IP phones and would mean I dont have to hard code it into the sketch.

You can use dns to get a NTP server IP.

#include <SPI.h>
#include <Ethernet.h>
#include <Dns.h>

byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
IPAddress ntpIP;

void setup() {
  Serial.begin(9600);

  pinMode(4,OUTPUT);
  digitalWrite(4,HIGH);

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    for(;;)
      ;
  }
  Serial.print("My IP address: ");
  Serial.println(Ethernet.localIP());

  DNSClient dns;
  dns.begin(Ethernet.dnsServerIP());
  if(dns.getHostByName("pool.ntp.org",ntpIP) == 1) {
    Serial.print("NTP IP from the pool: ");
    Serial.println(ntpIP);
  }
  else Serial.println("DNS lookup failed");
}

void loop() {
}

Is there any way with the ethernet library to expose the IP's of NTP servers assigned via option 42 from the DHCP server?

You have to patch the Ethernet library, extend the case block around line 300 of Dhcp.cpp and insert the parsing for option 42 (ntpServers), don't forget to uncomment the option in Dhcp.h.

The following code is a quick hack to show you how it can be done, uses just the first server in the list:

                case ntpServers :
                    opt_len = _dhcpUdpSocket.read();
                    _dhcpUdpSocket.read(_dhcpNtpServerIp, 4);
                    for (int i = 0; i < opt_len-4; i++)
                    {
                        _dhcpUdpSocket.read();
                    }
                    break;