File: extattr.c

package info (click to toggle)
valgrind 1%3A3.24.0-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 176,332 kB
  • sloc: ansic: 795,029; exp: 26,134; xml: 23,472; asm: 14,393; cpp: 9,397; makefile: 7,464; sh: 6,122; perl: 5,446; python: 1,498; javascript: 981; awk: 166; csh: 1
file content (99 lines) | stat: -rw-r--r-- 4,695 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
 * Test this family of functions
 *    extattr_get_fd, extattr_set_fd, extattr_delete_fd, extattr_list_fd,
 *    extattr_get_file, extattr_set_file, extattr_delete_file,
 *    extattr_list_file, extattr_get_link, extattr_set_link,
 *    extattr_delete_link, extattr_list_link - system calls to manipulate VFS
 */

#include <sys/types.h>
#include <sys/extattr.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include "../../memcheck.h"

int main()
{
    ssize_t n;
    char buff[64];
    char tmpfile[] = "test1.XXXXXX";
    int tmpfd = mkstemp(tmpfile);
    memset(buff, 0, sizeof(buff));
    sprintf(buff, "some data");
 
    // valid calls even though "test1" does not exist
    n = extattr_get_file("test1", EXTATTR_NAMESPACE_USER, "bar", NULL, 0);
    (void)extattr_get_file("test1", EXTATTR_NAMESPACE_USER, "bar", buff, sizeof(buff));
    (void)extattr_get_link("test1", EXTATTR_NAMESPACE_USER, "bar", buff, sizeof(buff));
    (void)extattr_list_file("test1", EXTATTR_NAMESPACE_USER, buff, sizeof(buff));
    (void)extattr_list_link("test1", EXTATTR_NAMESPACE_USER, buff, sizeof(buff));
 
    n = extattr_get_fd(tmpfd, EXTATTR_NAMESPACE_USER, "bar", NULL, 0);
    (void)extattr_get_fd(tmpfd, EXTATTR_NAMESPACE_USER, "bar", buff, sizeof(buff));
    (void)extattr_list_fd(tmpfd, EXTATTR_NAMESPACE_USER, buff, sizeof(buff));
 
    n = extattr_set_file("test1", EXTATTR_NAMESPACE_USER, "bar", NULL, 0);
    (void)extattr_set_file("test1", EXTATTR_NAMESPACE_USER, "bar", buff, sizeof(buff));
    (void)extattr_set_link("test1", EXTATTR_NAMESPACE_USER, "bar", buff, sizeof(buff));
 
    n = extattr_set_fd(tmpfd, EXTATTR_NAMESPACE_USER, "bar", NULL, 0);
    (void)extattr_set_fd(tmpfd, EXTATTR_NAMESPACE_USER, "bar", buff, sizeof(buff));
 
    (void)extattr_delete_file("test1", EXTATTR_NAMESPACE_USER, "foo");
    (void)extattr_delete_link("test1", EXTATTR_NAMESPACE_USER, "foo");
    (void)extattr_delete_fd(tmpfd, EXTATTR_NAMESPACE_USER, "foo");
 
    // now some invalid calls
    int uninit;
    (void)extattr_get_file("test1", uninit, "bar", buff, sizeof(buff));
    (void)extattr_get_link("test1", uninit, "bar", buff, sizeof(buff));
    (void)extattr_get_fd(tmpfd, uninit, "bar", buff, sizeof(buff));
    (void)extattr_list_file("test1", uninit, buff, sizeof(buff));
    (void)extattr_list_link("test1", uninit, buff, sizeof(buff));
    (void)extattr_list_fd(tmpfd, uninit, buff, sizeof(buff));
    (void)extattr_delete_file("test1", uninit, "foo");
    (void)extattr_delete_link("test1", uninit, "foo");
    (void)extattr_delete_fd(tmpfd, uninit, "foo");
 
    char* badbuff = malloc(64);
    free(badbuff);
    (void)extattr_get_file("test1", EXTATTR_NAMESPACE_USER, "bar", badbuff, 64);
    (void)extattr_get_link("test1", EXTATTR_NAMESPACE_USER, "bar", badbuff, 64);
    (void)extattr_get_fd(tmpfd, EXTATTR_NAMESPACE_USER, "bar", badbuff, 64);
    badbuff = malloc(64);
    free(badbuff);
    (void)extattr_list_file("test1", EXTATTR_NAMESPACE_USER, badbuff, 64);
    (void)extattr_list_link("test1", EXTATTR_NAMESPACE_USER, badbuff, 64);
    (void)extattr_list_fd(tmpfd, EXTATTR_NAMESPACE_USER, badbuff, 64);
 
    char* badstring = strdup("test2");
    free(badstring);
    (void)extattr_get_file(badstring, EXTATTR_NAMESPACE_USER, "bar", buff, sizeof(buff));
    (void)extattr_get_link(badstring, EXTATTR_NAMESPACE_USER, "bar", buff, sizeof(buff));
    (void)extattr_get_file("test1", EXTATTR_NAMESPACE_USER, badstring, buff, sizeof(buff));
    (void)extattr_get_link("test1", EXTATTR_NAMESPACE_USER, badstring, buff, sizeof(buff));
    (void)extattr_list_file(badstring, EXTATTR_NAMESPACE_USER, buff, sizeof(buff));
    (void)extattr_delete_file(badstring, EXTATTR_NAMESPACE_USER, "foo");
    (void)extattr_delete_link(badstring, EXTATTR_NAMESPACE_USER, "foo");
 
    int badfd = tmpfd;
    VALGRIND_MAKE_MEM_UNDEFINED(&badfd, sizeof(int));
    (void)extattr_get_fd(badfd, EXTATTR_NAMESPACE_USER, "bar", buff, sizeof(buff));
    (void)extattr_list_fd(badfd, EXTATTR_NAMESPACE_USER, buff, sizeof(buff));
    (void)extattr_delete_fd(badfd, EXTATTR_NAMESPACE_USER, "foo");

    int badsize = sizeof(buff);
    VALGRIND_MAKE_MEM_UNDEFINED(&badsize, sizeof(int));    
    extattr_get_file("test1", EXTATTR_NAMESPACE_USER, "bar", buff, badsize);
    extattr_get_link("test1", EXTATTR_NAMESPACE_USER, "bar", buff, badsize);
    extattr_get_fd(tmpfd, EXTATTR_NAMESPACE_USER, "bar", buff, badsize);
    extattr_list_file("test1", EXTATTR_NAMESPACE_USER, buff, badsize);
    extattr_list_link("test1", EXTATTR_NAMESPACE_USER, buff, badsize);
    extattr_list_fd(tmpfd, EXTATTR_NAMESPACE_USER, buff, badsize);

    close (tmpfd);
    unlink(tmpfile);
}