glusterfs

Форк
0
/
bug1613098.c 
96 строк · 2.7 Кб
1
#include <inttypes.h>
2
#include <stdio.h>
3
#include <string.h>
4
#include <errno.h>
5

6
#include <glusterfs/api/glfs.h>
7
#include <glusterfs/api/glfs-handles.h>
8

9
#define ACL_TYPE_ACCESS (0x8000)
10

11
#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label)                     \
12
    do {                                                                       \
13
        if (ret < 0) {                                                         \
14
            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \
15
                    strerror(errno));                                          \
16
            goto label;                                                        \
17
        }                                                                      \
18
    } while (0)
19

20
int
21
main(int argc, char *argv[])
22
{
23
    int ret = -1;
24
    int flags = O_RDWR | O_SYNC;
25
    glfs_t *fs = NULL;
26
    glfs_fd_t *fd = NULL;
27
    char *volname = NULL;
28
    char *logfile = NULL;
29
    const char *filename = "file_tmp";
30
    struct glfs_object *object = NULL;
31
    acl_t acl = NULL;
32
    struct stat sb;
33

34
    if (argc != 3) {
35
        fprintf(stderr, "Invalid argument\n");
36
        return 1;
37
    }
38

39
    volname = argv[1];
40
    logfile = argv[2];
41

42
    fs = glfs_new(volname);
43
    if (!fs)
44
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_new", ret, out);
45

46
    ret = glfs_set_volfile_server(fs, "tcp", "localhost", 24007);
47
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_volfile_server", ret, out);
48

49
    ret = glfs_set_logging(fs, logfile, 7);
50
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_logging", ret, out);
51

52
    ret = glfs_init(fs);
53
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_init", ret, out);
54

55
    fd = glfs_creat(fs, filename, flags, 0044);
56
    if (fd == NULL) {
57
        ret = -1;
58
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_creat", ret, out);
59
    }
60
    glfs_close(fd);
61

62
    object = glfs_h_lookupat(fs, NULL, filename, NULL, 0);
63
    if (object == NULL) {
64
        ret = -1;
65
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_h_lookupat", ret, out);
66
    }
67

68
    ret = glfs_chown(fs, filename, 99, 99);
69
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_chown", ret, out);
70

71
    ret = glfs_setfsuid(99);
72
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_setfsuid", ret, out);
73

74
    ret = glfs_setfsgid(99);
75
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_setfsgid", ret, out);
76

77
    acl = glfs_h_acl_get(fs, object, ACL_TYPE_ACCESS);
78
    if (acl == NULL) {
79
        ret = -1;
80
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_h_acl_get", ret, out);
81
    }
82

83
    ret = glfs_h_acl_set(fs, object, ACL_TYPE_ACCESS, acl);
84
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_h_acl_get", ret, out);
85
out:
86
    glfs_setfsuid(0);
87
    glfs_setfsgid(0);
88

89
    if (object)
90
        glfs_h_close(object);
91

92
    if (fs)
93
        glfs_fini(fs);
94

95
    return ret;
96
}
97

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.