Develop and Download Open Source Software

Browse Subversion Repository

Contents of /branches/readpolicy.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4669 - (hide annotations) (download) (as text)
Tue Mar 1 07:15:10 2011 UTC (2 years, 3 months ago) by kumaneko
File MIME type: text/x-csrc
File size: 2150 byte(s)
1 kumaneko 4661 #include <sys/types.h>
2     #include <sys/stat.h>
3     #include <fcntl.h>
4     #include <unistd.h>
5 kumaneko 4666 #include <stdio.h>
6     #include <string.h>
7 kumaneko 4661
8 kumaneko 4666 static void run_gc(void)
9     {
10     fprintf(stderr, "Running GC.\n");
11     close(open("/proc/ccs/profile", O_WRONLY));
12     sleep(3);
13     }
14    
15     static unsigned int read1(const int fd, unsigned int size)
16     {
17     char c;
18     unsigned int len = 0;
19     while (size-- && read(fd, &c, 1) == 1 && write(1, "{", 1) == 1 &&
20     write(1, &c, 1) == 1 && write(1, "}", 1) == 1)
21     len++;
22     return len;
23     }
24    
25     static void write1(const int fd, const char *str)
26     {
27     write(1, str, strlen(str));
28     write(fd, str, strlen(str));
29     }
30    
31     static inline void write2(const int fd, const char *str1, const char *str2)
32     {
33     write1(fd, str1);
34     write1(fd, str2);
35     }
36    
37 kumaneko 4661 int main(int argc, char *argv[])
38     {
39 kumaneko 4666 static const char *path1 = "/path/to/some/file/in/very/very/deep/"
40     "location/which/will/surely/stop/within/this/pathname/"
41     "while/reading/policy\n";
42     static const char *path2 = "/path/to/other/file/in/very/very/deep/"
43     "location/which/will/surely/stop/within/this/pathname/"
44     "while/reading/policy\n";
45     int fd1 = open("/proc/ccs/domain_policy", O_RDWR);
46     int fd2 = open("/proc/ccs/domain_policy", O_RDWR);
47     write1(fd1, "<kernel> /foo/bar /foo/bar/buz\n");
48     write2(fd1, "file read/write/execute ", path1);
49     write2(fd1, "file read/write/execute ", path2);
50     write2(fd2, "select ", "<kernel> /foo/bar /foo/bar/buz\n");
51     read1(fd2, 128);
52     write1(fd1, "delete ");
53     write2(fd1, "file read/write/execute ", path2);
54     write1(fd1, "delete ");
55     write2(fd1, "file read/write/execute ", path1);
56     run_gc();
57     write2(fd1, "delete ", "<kernel> /foo/bar /foo/bar/buz\n");
58     run_gc();
59     while (read1(fd2, 1) > 0);
60     close(fd1);
61     close(fd2);
62     fd1 = open("/proc/ccs/exception_policy", O_RDWR);
63     fd2 = open("/proc/ccs/exception_policy", O_RDWR);
64     write2(fd1, "path_group VERY_VERY_LONG_PATH ", path1);
65     write2(fd1, "path_group VERY_VERY_LONG_PATH ", path2);
66     read1(fd2, 128);
67     write1(fd1, "delete ");
68     write2(fd1, "path_group VERY_VERY_LONG_PATH ", path1);
69     write1(fd1, "delete ");
70     write2(fd1, "path_group VERY_VERY_LONG_PATH ", path2);
71     run_gc();
72     while (read1(fd2, 1) > 0);
73     close(fd1);
74     close(fd2);
75 kumaneko 4661 return 0;
76     }

SourceForge.JP is a Japanese version of SourceForge.net. For developments that are not related to Japan, we recommend you to use SourceForge.net.