Skip to content

Commit 341ac5d

Browse files
committed
Apply fmask and dmask even with default_permissions
1 parent 1935f1f commit 341ac5d

3 files changed

Lines changed: 212 additions & 47 deletions

File tree

lib/data_node.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,17 @@ DataNode::operator Stat() const {
171171
st.st_uid = uid;
172172
st.st_gid = gid;
173173
st.st_mode = mode;
174+
switch (GetFileType(mode)) {
175+
case FileType::Directory:
176+
st.st_mode &= ~dmask;
177+
break;
178+
179+
case FileType::Symlink:
180+
break;
181+
182+
default:
183+
st.st_mode &= ~fmask;
184+
}
174185
} else {
175186
st.st_uid = g_uid;
176187
st.st_gid = g_gid;

mount-zip.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -653,8 +653,8 @@ int main(int argc, char* argv[]) try {
653653
return EXIT_FAILURE;
654654
}
655655

656-
DataNode::dmask = param.dmask & 0777;
657-
DataNode::fmask = param.fmask & 0777;
656+
DataNode::dmask = param.dmask & 07777;
657+
DataNode::fmask = param.fmask & 07777;
658658

659659
// No ZIP archive paths.
660660
if (param.paths.empty()) {

tests/blackbox/test.py

Lines changed: 199 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,50 +1528,50 @@ def TestMasks():
15281528

15291529
want_tree = {
15301530
'.': {'ino': 1, 'mode': 'drwxr-xr-x', 'nlink': 24},
1531-
'Dir000': {'mode': 'd---------'},
1532-
'Dir001': {'mode': 'd--------x'},
1533-
'Dir002': {'mode': 'd-------w-'},
1534-
'Dir003': {'mode': 'd-------wx'},
1535-
'Dir004': {'mode': 'd------r--'},
1536-
'Dir005': {'mode': 'd------r-x'},
1537-
'Dir006': {'mode': 'd------rw-'},
1538-
'Dir007': {'mode': 'd------rwx'},
1539-
'Dir010': {'mode': 'd-----x---'},
1540-
'Dir020': {'mode': 'd----w----'},
1541-
'Dir030': {'mode': 'd----wx---'},
1542-
'Dir040': {'mode': 'd---r-----'},
1543-
'Dir050': {'mode': 'd---r-x---'},
1544-
'Dir060': {'mode': 'd---rw----'},
1545-
'Dir070': {'mode': 'd---rwx---'},
1546-
'Dir100': {'mode': 'd--x------'},
1547-
'Dir200': {'mode': 'd-w-------'},
1548-
'Dir300': {'mode': 'd-wx------'},
1549-
'Dir400': {'mode': 'dr--------'},
1550-
'Dir500': {'mode': 'dr-x------'},
1551-
'Dir600': {'mode': 'drw-------'},
1552-
'Dir700': {'mode': 'drwx------'},
1553-
'File000': {'mode': '----------'},
1554-
'File001': {'mode': '---------x'},
1555-
'File002': {'mode': '--------w-'},
1556-
'File003': {'mode': '--------wx'},
1557-
'File004': {'mode': '-------r--'},
1558-
'File005': {'mode': '-------r-x'},
1559-
'File006': {'mode': '-------rw-'},
1560-
'File007': {'mode': '-------rwx'},
1561-
'File010': {'mode': '------x---'},
1562-
'File020': {'mode': '-----w----'},
1563-
'File030': {'mode': '-----wx---'},
1564-
'File040': {'mode': '----r-----'},
1565-
'File050': {'mode': '----r-x---'},
1566-
'File060': {'mode': '----rw----'},
1567-
'File070': {'mode': '----rwx---'},
1568-
'File100': {'mode': '---x------'},
1569-
'File200': {'mode': '--w-------'},
1570-
'File300': {'mode': '--wx------'},
1571-
'File400': {'mode': '-r--------'},
1572-
'File500': {'mode': '-r-x------'},
1573-
'File600': {'mode': '-rw-------'},
1574-
'File700': {'mode': '-rwx------'},
1531+
'Dir000': {'uid': 270632, 'gid': 89939, 'mode': 'd---------'},
1532+
'Dir001': {'uid': 270632, 'gid': 89939, 'mode': 'd--------x'},
1533+
'Dir002': {'uid': 270632, 'gid': 89939, 'mode': 'd---------'},
1534+
'Dir003': {'uid': 270632, 'gid': 89939, 'mode': 'd--------x'},
1535+
'Dir004': {'uid': 270632, 'gid': 89939, 'mode': 'd------r--'},
1536+
'Dir005': {'uid': 270632, 'gid': 89939, 'mode': 'd------r-x'},
1537+
'Dir006': {'uid': 270632, 'gid': 89939, 'mode': 'd------r--'},
1538+
'Dir007': {'uid': 270632, 'gid': 89939, 'mode': 'd------r-x'},
1539+
'Dir010': {'uid': 270632, 'gid': 89939, 'mode': 'd-----x---'},
1540+
'Dir020': {'uid': 270632, 'gid': 89939, 'mode': 'd---------'},
1541+
'Dir030': {'uid': 270632, 'gid': 89939, 'mode': 'd-----x---'},
1542+
'Dir040': {'uid': 270632, 'gid': 89939, 'mode': 'd---r-----'},
1543+
'Dir050': {'uid': 270632, 'gid': 89939, 'mode': 'd---r-x---'},
1544+
'Dir060': {'uid': 270632, 'gid': 89939, 'mode': 'd---r-----'},
1545+
'Dir070': {'uid': 270632, 'gid': 89939, 'mode': 'd---r-x---'},
1546+
'Dir100': {'uid': 270632, 'gid': 89939, 'mode': 'd--x------'},
1547+
'Dir200': {'uid': 270632, 'gid': 89939, 'mode': 'd-w-------'},
1548+
'Dir300': {'uid': 270632, 'gid': 89939, 'mode': 'd-wx------'},
1549+
'Dir400': {'uid': 270632, 'gid': 89939, 'mode': 'dr--------'},
1550+
'Dir500': {'uid': 270632, 'gid': 89939, 'mode': 'dr-x------'},
1551+
'Dir600': {'uid': 270632, 'gid': 89939, 'mode': 'drw-------'},
1552+
'Dir700': {'uid': 270632, 'gid': 89939, 'mode': 'drwx------'},
1553+
'File000': {'uid': 270632, 'gid': 89939, 'mode': '----------'},
1554+
'File001': {'uid': 270632, 'gid': 89939, 'mode': '---------x'},
1555+
'File002': {'uid': 270632, 'gid': 89939, 'mode': '----------'},
1556+
'File003': {'uid': 270632, 'gid': 89939, 'mode': '---------x'},
1557+
'File004': {'uid': 270632, 'gid': 89939, 'mode': '-------r--'},
1558+
'File005': {'uid': 270632, 'gid': 89939, 'mode': '-------r-x'},
1559+
'File006': {'uid': 270632, 'gid': 89939, 'mode': '-------r--'},
1560+
'File007': {'uid': 270632, 'gid': 89939, 'mode': '-------r-x'},
1561+
'File010': {'uid': 270632, 'gid': 89939, 'mode': '------x---'},
1562+
'File020': {'uid': 270632, 'gid': 89939, 'mode': '----------'},
1563+
'File030': {'uid': 270632, 'gid': 89939, 'mode': '------x---'},
1564+
'File040': {'uid': 270632, 'gid': 89939, 'mode': '----r-----'},
1565+
'File050': {'uid': 270632, 'gid': 89939, 'mode': '----r-x---'},
1566+
'File060': {'uid': 270632, 'gid': 89939, 'mode': '----r-----'},
1567+
'File070': {'uid': 270632, 'gid': 89939, 'mode': '----r-x---'},
1568+
'File100': {'uid': 270632, 'gid': 89939, 'mode': '---x------'},
1569+
'File200': {'uid': 270632, 'gid': 89939, 'mode': '--w-------'},
1570+
'File300': {'uid': 270632, 'gid': 89939, 'mode': '--wx------'},
1571+
'File400': {'uid': 270632, 'gid': 89939, 'mode': '-r--------'},
1572+
'File500': {'uid': 270632, 'gid': 89939, 'mode': '-r-x------'},
1573+
'File600': {'uid': 270632, 'gid': 89939, 'mode': '-rw-------'},
1574+
'File700': {'uid': 270632, 'gid': 89939, 'mode': '-rwx------'},
15751575
}
15761576

15771577
MountZipAndCheckTree(
@@ -1581,6 +1581,61 @@ def TestMasks():
15811581
options=['-o', 'default_permissions'],
15821582
)
15831583

1584+
want_tree = {
1585+
'.': {'ino': 1, 'mode': 'drwxr-xr-x', 'nlink': 24},
1586+
'Dir000': {'uid': 270632, 'gid': 89939, 'mode': 'd---------'},
1587+
'Dir001': {'uid': 270632, 'gid': 89939, 'mode': 'd--------x'},
1588+
'Dir002': {'uid': 270632, 'gid': 89939, 'mode': 'd-------w-'},
1589+
'Dir003': {'uid': 270632, 'gid': 89939, 'mode': 'd-------wx'},
1590+
'Dir004': {'uid': 270632, 'gid': 89939, 'mode': 'd------r--'},
1591+
'Dir005': {'uid': 270632, 'gid': 89939, 'mode': 'd------r-x'},
1592+
'Dir006': {'uid': 270632, 'gid': 89939, 'mode': 'd------rw-'},
1593+
'Dir007': {'uid': 270632, 'gid': 89939, 'mode': 'd------rwx'},
1594+
'Dir010': {'uid': 270632, 'gid': 89939, 'mode': 'd-----x---'},
1595+
'Dir020': {'uid': 270632, 'gid': 89939, 'mode': 'd----w----'},
1596+
'Dir030': {'uid': 270632, 'gid': 89939, 'mode': 'd----wx---'},
1597+
'Dir040': {'uid': 270632, 'gid': 89939, 'mode': 'd---r-----'},
1598+
'Dir050': {'uid': 270632, 'gid': 89939, 'mode': 'd---r-x---'},
1599+
'Dir060': {'uid': 270632, 'gid': 89939, 'mode': 'd---rw----'},
1600+
'Dir070': {'uid': 270632, 'gid': 89939, 'mode': 'd---rwx---'},
1601+
'Dir100': {'uid': 270632, 'gid': 89939, 'mode': 'd--x------'},
1602+
'Dir200': {'uid': 270632, 'gid': 89939, 'mode': 'd-w-------'},
1603+
'Dir300': {'uid': 270632, 'gid': 89939, 'mode': 'd-wx------'},
1604+
'Dir400': {'uid': 270632, 'gid': 89939, 'mode': 'dr--------'},
1605+
'Dir500': {'uid': 270632, 'gid': 89939, 'mode': 'dr-x------'},
1606+
'Dir600': {'uid': 270632, 'gid': 89939, 'mode': 'drw-------'},
1607+
'Dir700': {'uid': 270632, 'gid': 89939, 'mode': 'drwx------'},
1608+
'File000': {'uid': 270632, 'gid': 89939, 'mode': '----------'},
1609+
'File001': {'uid': 270632, 'gid': 89939, 'mode': '---------x'},
1610+
'File002': {'uid': 270632, 'gid': 89939, 'mode': '--------w-'},
1611+
'File003': {'uid': 270632, 'gid': 89939, 'mode': '--------wx'},
1612+
'File004': {'uid': 270632, 'gid': 89939, 'mode': '-------r--'},
1613+
'File005': {'uid': 270632, 'gid': 89939, 'mode': '-------r-x'},
1614+
'File006': {'uid': 270632, 'gid': 89939, 'mode': '-------rw-'},
1615+
'File007': {'uid': 270632, 'gid': 89939, 'mode': '-------rwx'},
1616+
'File010': {'uid': 270632, 'gid': 89939, 'mode': '------x---'},
1617+
'File020': {'uid': 270632, 'gid': 89939, 'mode': '-----w----'},
1618+
'File030': {'uid': 270632, 'gid': 89939, 'mode': '-----wx---'},
1619+
'File040': {'uid': 270632, 'gid': 89939, 'mode': '----r-----'},
1620+
'File050': {'uid': 270632, 'gid': 89939, 'mode': '----r-x---'},
1621+
'File060': {'uid': 270632, 'gid': 89939, 'mode': '----rw----'},
1622+
'File070': {'uid': 270632, 'gid': 89939, 'mode': '----rwx---'},
1623+
'File100': {'uid': 270632, 'gid': 89939, 'mode': '---x------'},
1624+
'File200': {'uid': 270632, 'gid': 89939, 'mode': '--w-------'},
1625+
'File300': {'uid': 270632, 'gid': 89939, 'mode': '--wx------'},
1626+
'File400': {'uid': 270632, 'gid': 89939, 'mode': '-r--------'},
1627+
'File500': {'uid': 270632, 'gid': 89939, 'mode': '-r-x------'},
1628+
'File600': {'uid': 270632, 'gid': 89939, 'mode': '-rw-------'},
1629+
'File700': {'uid': 270632, 'gid': 89939, 'mode': '-rwx------'},
1630+
}
1631+
1632+
MountZipAndCheckTree(
1633+
'permissions.zip',
1634+
want_tree,
1635+
use_md5=False,
1636+
options=['-o', 'default_permissions,dmask=0,fmask=0'],
1637+
)
1638+
15841639

15851640
# Tests the ZIP with lots of files.
15861641
def TestZipWithManyFiles():
@@ -2387,6 +2442,105 @@ def TestZipWithSpecialFiles():
23872442
)
23882443

23892444
# Tests -o default_permissions
2445+
want_tree = {
2446+
'.': {'ino': 1, 'mode': 'drwxr-xr-x', 'nlink': 2},
2447+
'z-hardlink2': {
2448+
'mode': '-rw-r--r--',
2449+
'uid': 1000,
2450+
'gid': 1000,
2451+
'nlink': 3,
2452+
'size': 32,
2453+
'md5': '456e611a5420b7dd09bae143a7b2deb0',
2454+
},
2455+
'z-hardlink1': {
2456+
'mode': '-rw-r--r--',
2457+
'uid': 1000,
2458+
'gid': 1000,
2459+
'nlink': 3,
2460+
'size': 32,
2461+
'md5': '456e611a5420b7dd09bae143a7b2deb0',
2462+
},
2463+
'z-hardlink-symlink': {
2464+
'mode': 'lrwxrwxrwx',
2465+
'uid': 1000,
2466+
'gid': 1000,
2467+
'target': 'regular',
2468+
},
2469+
'symlink': {
2470+
'mode': 'lrwxrwxrwx',
2471+
'uid': 1000,
2472+
'gid': 1000,
2473+
'target': 'regular',
2474+
},
2475+
'z-hardlink-socket': {
2476+
'mode': 'srw-------',
2477+
'uid': 1000,
2478+
'gid': 1000,
2479+
},
2480+
'z-hardlink-fifo': {
2481+
'mode': 'prw-r--r--',
2482+
'uid': 1000,
2483+
'gid': 1000,
2484+
},
2485+
'z-hardlink-char': {
2486+
'mode': 'crw-------',
2487+
'uid': 0,
2488+
'gid': 5,
2489+
'rdev': 1024,
2490+
},
2491+
'z-hardlink-block': {
2492+
'mode': 'brw-r-----',
2493+
'uid': 0,
2494+
'gid': 6,
2495+
'rdev': 2049,
2496+
},
2497+
'symlink2': {
2498+
'mode': 'lrwxrwxrwx',
2499+
'target': 'regular',
2500+
'uid': 1000,
2501+
'gid': 1000,
2502+
},
2503+
'socket': {
2504+
'mode': 'srw-------',
2505+
'uid': 1000,
2506+
'gid': 1000,
2507+
},
2508+
'regular': {
2509+
'mode': '-rw-r--r--',
2510+
'uid': 1000,
2511+
'gid': 1000,
2512+
'nlink': 3,
2513+
'size': 32,
2514+
'md5': '456e611a5420b7dd09bae143a7b2deb0',
2515+
},
2516+
'fifo': {
2517+
'mode': 'prw-r--r--',
2518+
'uid': 1000,
2519+
'gid': 1000,
2520+
},
2521+
'char': {
2522+
'mode': 'crw-------',
2523+
'uid': 0,
2524+
'gid': 5,
2525+
'rdev': 1024,
2526+
},
2527+
'block': {
2528+
'mode': 'brw-r-----',
2529+
'uid': 0,
2530+
'gid': 6,
2531+
'rdev': 2049,
2532+
},
2533+
}
2534+
2535+
MountZipAndCheckTree(
2536+
zip_name,
2537+
want_tree,
2538+
want_blocks=19,
2539+
want_inodes=15,
2540+
options=['-o', 'default_permissions'],
2541+
)
2542+
2543+
# Tests -o default_permissions,fmask=0
23902544
want_tree = {
23912545
'.': {'ino': 1, 'mode': 'drwxr-xr-x', 'nlink': 2},
23922546
'z-hardlink2': {
@@ -2482,7 +2636,7 @@ def TestZipWithSpecialFiles():
24822636
want_tree,
24832637
want_blocks=19,
24842638
want_inodes=15,
2485-
options=['-o', 'default_permissions'],
2639+
options=['-o', 'default_permissions,fmask=0'],
24862640
)
24872641

24882642

0 commit comments

Comments
 (0)