11
from __future__ import print_function
20
from errno import EEXIST
22
Xattr = libcxattr.Xattr()
28
return "!II%dsI%dsIII" % (37, l+1)
31
return "!II%dsI%dsII" % (37, l+1)
33
def _fmt_symlink(l1, l2):
34
return "!II%dsI%ds%ds" % (37, l1+1, l2+1)
37
if sys.version_info > (3,):
38
def entry_pack_reg(gf, bn, mo, uid, gid):
39
bn_encoded = bn.encode()
40
blen = len(bn_encoded)
41
return struct.pack(_fmt_mknod(blen),
42
uid, gid, gf.encode(), mo, bn_encoded,
43
stat.S_IMODE(mo), 0, umask())
46
def entry_pack_dir(gf, bn, mo, uid, gid):
47
bn_encoded = bn.encode()
48
blen = len(bn_encoded)
49
return struct.pack(_fmt_mkdir(blen),
50
uid, gid, gf.encode(), mo, bn_encoded,
51
stat.S_IMODE(mo), umask())
53
def entry_pack_symlink(gf, bn, lnk, st):
54
bn_encoded = bn.encode()
55
blen = len(bn_encoded)
56
lnk_encoded = lnk.encode()
57
llen = len(lnk_encoded)
58
return struct.pack(_fmt_symlink(blen, llen),
60
gf.encode(), st['mode'], bn_encoded,
64
def entry_pack_reg(gf, bn, mo, uid, gid):
66
return struct.pack(_fmt_mknod(blen),
68
stat.S_IMODE(mo), 0, umask())
70
def entry_pack_dir(gf, bn, mo, uid, gid):
72
return struct.pack(_fmt_mkdir(blen),
74
stat.S_IMODE(mo), umask())
76
def entry_pack_symlink(gf, bn, lnk, mo, uid, gid):
79
return struct.pack(_fmt_symlink(blen, llen),
80
uid, gid, gf, mo, bn, lnk)
82
if __name__ == '__main__':
84
print(("USAGE: %s <mount> <pargfid|ROOT> <filename> <GFID> <file type>"
85
" <uid> <gid> <file permission(octal str)>" % (sys.argv[0])))
90
randomgfid = sys.argv[4]
92
uid = int(sys.argv[6])
93
gid = int(sys.argv[7])
94
perm = int(sys.argv[8], 8)
98
pargfid = '.gfid/00000000-0000-0000-0000-000000000001'
100
pargfid = '.gfid/' + pargfid
106
mode = stat.S_IFREG | perm
107
blob = entry_pack_reg(randomgfid, fname, mode, uid, gid)
109
mode = stat.S_IFDIR | perm
110
blob = entry_pack_dir(randomgfid, fname, mode, uid, gid)
117
Xattr.lsetxattr(pargfid, 'glusterfs.gfid.newfile', blob)
119
ex = sys.exc_info()[1]
120
if not ex.errno in [EEXIST]:
123
print("File creation OK")