1 #include <unistd.h> 2 #include <stdio.h> 3 #include <sys/types.h> 4 #include <errno.h> 5 #include <sys/syscall.h> 6 #include <fcntl.h> 7 #include <sys/xattr.h> 8 #include <string.h> 9 10 int main(int argc, char *argv[]) 11 { 12 ssize_t s; 13 char *tok; 14 char value[1024]; 15 char list[1024]; 16 int rc = 0; 17 char *file; 18 int fd; 19 20 if (argc < 2) { 21 printf("Please enter a file name as argument.\n"); 22 return -1; 23 } 24 25 file = argv[1]; 26 27 fd = open(file, O_RDONLY); 28 if (fd < 0) { 29 printf("Unable to open file %s !", file); 30 return -1; 31 } 32 33 if (-1 == (s = flistxattr(fd, list, 1024))) { 34 perror("flistxattr"); 35 return 1; 36 } 37 if (s == 0) { 38 printf("No xattrs defined for %s, further testcase useless\n", 39 file); 40 return 1; 41 } 42 tok = strtok(list, "\0"); 43 s = fgetxattr(fd, tok, (void *)value, 1024); 44 if (s == -1) { 45 perror("fgetxattr"); 46 return 1; 47 } 48 s = fsetxattr(fd, tok, (void *)value, s, 0); 49 50 if (s == -1) { 51 printf 52 ("User unable to change extended attributes on file %s !\n", 53 argv[1]); 54 printf("errno = %i\n", errno); 55 rc = 1; 56 } 57 //s = syscall(237, fd,tok); //fremovexattr 58 #ifdef __NR_fremovexattr 59 s = syscall(__NR_fremovexattr, fd, tok); //fremovexattr 60 #else 61 s = -1; 62 errno = ENOSYS; 63 #endif 64 if (s == -1) { 65 printf("User unable to remove extended attributes file %s !\n", 66 argv[1]); 67 printf("errno = %i\n", errno); 68 rc = 1; 69 } 70 71 close(fd); 72 return rc; 73 } 74