Resolve links to their target in os.utime to fix #49
diff --git a/fake_filesystem.py b/fake_filesystem.py
index e45e639..5d1a49a 100644
--- a/fake_filesystem.py
+++ b/fake_filesystem.py
@@ -1743,7 +1743,7 @@
           number of elements in the tuple is not equal to 2.
     """
     try:
-      file_object = self.filesystem.GetObject(path)
+      file_object = self.filesystem.ResolveObject(path)
     except IOError as io_error:
       if io_error.errno == errno.ENOENT:
         raise OSError(errno.ENOENT,
@@ -1758,7 +1758,7 @@
         raise TypeError('utime() arg 2 must be a tuple (atime, mtime)')
       for t in times:
         if not isinstance(t, (int, float)):
-          raise TypeError('an integer is required')
+          raise TypeError('atime and mtime must be numbers')
 
       file_object.st_atime = times[0]
       file_object.st_mtime = times[1]
diff --git a/fake_filesystem_test.py b/fake_filesystem_test.py
index 54aa256..0dfdeae 100644
--- a/fake_filesystem_test.py
+++ b/fake_filesystem_test.py
@@ -1379,7 +1379,7 @@
     self._CreateTestDirectory(path)
     # actual tests
     self.assertRaisesWithRegexpMatch(
-        TypeError, 'an integer is required',
+        TypeError, 'atime and mtime must be numbers',
         self.os.utime, path, (1, 'str'))
 
   def testChownExistingFile(self):
@@ -2785,6 +2785,22 @@
     self.__WriteToFile('/a/b/c/d/e')
     self.assertTrue(self.filesystem.Exists(final_target))
 
+  def testUtimeLink(self):
+    '''os.utime() and os.stat() via symbolic link (issue #49)'''
+    self.filesystem.CreateDirectory('/foo/baz')
+    self.__WriteToFile('/foo/baz/bip')
+    link_name = '/foo/bar'
+    self.filesystem.CreateLink(link_name, '/foo/baz/bip')
+
+    self.os.utime(link_name, (1, 2))
+    st = self.os.stat(link_name)
+    self.assertEqual(1, st.st_atime)
+    self.assertEqual(2, st.st_mtime)
+    self.os.utime(link_name, (3, 4))
+    st = self.os.stat(link_name)
+    self.assertEqual(3, st.st_atime)
+    self.assertEqual(4, st.st_mtime)
+
   def testTooManyLinks(self):
     self.filesystem.CreateLink('/a/loop', 'loop')
     self.assertFalse(self.filesystem.Exists('/a/loop'))