diff -rc checkinstall-orig/installwatch/installwatch.c checkinstall/installwatch/installwatch.c
*** checkinstall-orig/installwatch/installwatch.c	2009-03-12 13:40:24.000000000 +0100
--- checkinstall/installwatch/installwatch.c	2009-03-27 22:42:19.000000000 +0100
***************
*** 110,115 ****
--- 110,117 ----
  static int (*true_setxattr)(const char *,const char *,const void *,
                              size_t, int);
  static int (*true_removexattr)(const char *,const char *);
+ static ssize_t (*true_getxattr)(const char *,const char *,const void *,size_t);
+ static ssize_t (*true_lgetxattr)(const char *,const char *,const void *,size_t);
  
  #if(GLIBC_MINOR >= 1)
  
***************
*** 369,374 ****
--- 371,378 ----
  	true_unlink      = dlsym(libc_handle, "unlink");
  	true_utime       = dlsym(libc_handle, "utime");
  	true_setxattr    = dlsym(libc_handle, "setxattr");
+ 	true_getxattr    = dlsym(libc_handle, "getxattr");
+ 	true_lgetxattr   = dlsym(libc_handle, "lgetxattr");
          true_utimes      = dlsym(libc_handle, "utimes");
          true_access      = dlsym(libc_handle, "access");
  
***************
*** 3494,3499 ****
--- 3498,3587 ----
          return result;
  }
  
+ int getxattr (const char *pathname, const char *name,
+               const void *value, size_t size)
+ {
+         int result;
+         instw_t instw;
+ 	int status;
+ 
+         REFCOUNT;
+ 
+         if (!libc_handle)
+                initialize();
+ 
+ #if DEBUG
+         debug(2,"getxattr(%s,%s)\n",pathname,name);
+ #endif
+ 
+          /* We were asked to work in "real" mode */
+         if( !(__instw.gstatus & INSTW_INITIALIZED) ||
+            !(__instw.gstatus & INSTW_OKWRAP) ) {
+                result=true_getxattr(pathname,name,value,size);
+                return result;
+         }
+ 
+         instw_new(&instw);
+         instw_setpath(&instw,pathname);
+ 	instw_getstatus(&instw,&status);
+ 
+ #if DEBUG
+         instw_print(&instw);
+ #endif
+ 
+ 	if(status&INSTW_TRANSLATED) {
+             result=true_getxattr(instw.translpath,name,value,size);
+         } else {
+             result=true_getxattr(instw.path,name,value,size);
+         }
+ 
+         instw_delete(&instw);
+ 
+         return result;
+ }
+ 
+ int lgetxattr (const char *pathname, const char *name,
+               const void *value, size_t size)
+ {
+         int result;
+         instw_t instw;
+ 	int status;
+ 
+         REFCOUNT;
+ 
+         if (!libc_handle)
+                initialize();
+ 
+ #if DEBUG
+         debug(2,"lgetxattr(%s,%s)\n",pathname,name);
+ #endif
+ 
+          /* We were asked to work in "real" mode */
+         if( !(__instw.gstatus & INSTW_INITIALIZED) ||
+            !(__instw.gstatus & INSTW_OKWRAP) ) {
+                result=true_lgetxattr(pathname,name,value,size);
+                return result;
+         }
+ 
+         instw_new(&instw);
+         instw_setpath(&instw,pathname);
+ 	instw_getstatus(&instw,&status);
+ 
+ #if DEBUG
+         instw_print(&instw);
+ #endif
+ 
+ 	if(status&INSTW_TRANSLATED) {
+             result=true_lgetxattr(instw.translpath,name,value,size);
+         } else {
+             result=true_lgetxattr(instw.path,name,value,size);
+         }
+ 
+         instw_delete(&instw);
+ 
+         return result;
+ }
+ 
  #if(GLIBC_MINOR >= 1)
  
  int creat64(const char *pathname, __mode_t mode) {
***************
*** 3663,3668 ****
--- 3751,3791 ----
  	return result;
  }
  
+ int __open_2(const char *pathname, int flags, ...) {
+ 	va_list ap;
+ 	mode_t mode;
+         
+ #if DEBUG
+ 	debug(2,"__open_2(%s,%d,mode)\n",pathname,flags);
+ #endif
+ 
+ 	va_start(ap, flags);
+ 	mode = va_arg(ap, mode_t);
+ 	va_end(ap);
+         
+         /* The open() function in Glibc 2.9 is an always-inline
+            function that may call __open_2(), so it's important that
+            we handle it.  I don't know what __open_2() is supposed to
+            do, but redirecting it to open() seems to work fine.  */
+         
+         return open(pathname,flags,mode);
+ }
+ 
+ int __open64_2(const char *pathname, int flags, ...) {
+ 	va_list ap;
+ 	mode_t mode;
+         
+ #if DEBUG
+ 	debug(2,"__open64_2(%s,%d,mode)\n",pathname,flags);
+ #endif
+ 
+ 	va_start(ap, flags);
+ 	mode = va_arg(ap, mode_t);
+ 	va_end(ap);
+         
+         return open64(pathname,flags,mode);
+ }
+ 
  struct dirent64 *readdir64(DIR *dir) {
  	struct dirent64 *result;
  
