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
main(int argc,char * argv[])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