Skip to content

Commit 3421e69

Browse files
Nagendra TomarNagendra Tomar
Nagendra Tomar
authored and
Nagendra Tomar
committed
Minor fix after running azcopy on a large dir.
This was something which I have doubt on. Now that we got a real world issue due to this, it's all clear :-)
1 parent aa7375a commit 3421e69

File tree

1 file changed

+37
-40
lines changed

1 file changed

+37
-40
lines changed

sddl/sddlHelper_linux.go

+37-40
Original file line numberDiff line numberDiff line change
@@ -194,15 +194,15 @@ const (
194194
FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE)
195195

196196
// Access rights for DS objects.
197-
ADS_RIGHT_DS_CREATE_CHILD = 0x1
198-
ADS_RIGHT_DS_DELETE_CHILD = 0x2
199-
ADS_RIGHT_ACTRL_DS_LIST = 0x4
200-
ADS_RIGHT_DS_SELF = 0x8
201-
ADS_RIGHT_DS_READ_PROP = 0x10
202-
ADS_RIGHT_DS_WRITE_PROP = 0x20
203-
ADS_RIGHT_DS_DELETE_TREE = 0x40
204-
ADS_RIGHT_DS_LIST_OBJECT = 0x80
205-
ADS_RIGHT_DS_CONTROL_ACCESS = 0x100
197+
ADS_RIGHT_DS_CREATE_CHILD = 0x0001
198+
ADS_RIGHT_DS_DELETE_CHILD = 0x0002
199+
ADS_RIGHT_ACTRL_DS_LIST = 0x0004
200+
ADS_RIGHT_DS_SELF = 0x0008
201+
ADS_RIGHT_DS_READ_PROP = 0x0010
202+
ADS_RIGHT_DS_WRITE_PROP = 0x0020
203+
ADS_RIGHT_DS_DELETE_TREE = 0x0040
204+
ADS_RIGHT_DS_LIST_OBJECT = 0x0080
205+
ADS_RIGHT_DS_CONTROL_ACCESS = 0x0100
206206

207207
// Registry Specific Access Rights.
208208
KEY_QUERY_VALUE = 0x0001
@@ -227,7 +227,7 @@ const (
227227
)
228228

229229
// Access mask exactly matching the value here will be mapped to the key.
230-
var aceRightsMap = map[string]uint32{
230+
var aceStringToRightsMap = map[string]uint32{
231231
"GA": GENERIC_ALL,
232232
"GR": GENERIC_READ,
233233
"GW": GENERIC_WRITE,
@@ -263,27 +263,26 @@ var aceRightsMap = map[string]uint32{
263263
"NX": SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP,
264264
}
265265

266-
// Access mask comprising of these values will contain a concatenation of all corresponding keys.
267-
var aceRightsMapConcat = map[string]uint32{
268-
"GA": GENERIC_ALL,
269-
"GR": GENERIC_READ,
270-
"GW": GENERIC_WRITE,
271-
"GX": GENERIC_EXECUTE,
272-
273-
"RC": READ_CONTROL,
274-
"SD": DELETE,
275-
"WD": WRITE_DAC,
276-
"WO": WRITE_OWNER,
277-
278-
"RP": ADS_RIGHT_DS_READ_PROP,
279-
"WP": ADS_RIGHT_DS_WRITE_PROP,
280-
"CC": ADS_RIGHT_DS_CREATE_CHILD,
281-
"DC": ADS_RIGHT_DS_DELETE_CHILD,
282-
"LC": ADS_RIGHT_ACTRL_DS_LIST,
283-
"SW": ADS_RIGHT_DS_SELF,
284-
"LO": ADS_RIGHT_DS_LIST_OBJECT,
285-
"DT": ADS_RIGHT_DS_DELETE_TREE,
286-
"CR": ADS_RIGHT_DS_CONTROL_ACCESS,
266+
// Access rights to their corresponding friendly names.
267+
// Note that this intentionally has some of the fields left out from aceStringToRightsMap.
268+
var aceRightsToStringMap = map[uint32]string{
269+
GENERIC_ALL: "GA",
270+
GENERIC_READ: "GR",
271+
GENERIC_WRITE: "GW",
272+
GENERIC_EXECUTE: "GX",
273+
READ_CONTROL: "RC",
274+
DELETE: "SD",
275+
WRITE_DAC: "WD",
276+
WRITE_OWNER: "WO",
277+
ADS_RIGHT_DS_READ_PROP: "RP",
278+
ADS_RIGHT_DS_WRITE_PROP: "WP",
279+
ADS_RIGHT_DS_CREATE_CHILD: "CC",
280+
ADS_RIGHT_DS_DELETE_CHILD: "DC",
281+
ADS_RIGHT_ACTRL_DS_LIST: "LC",
282+
ADS_RIGHT_DS_SELF: "SW",
283+
ADS_RIGHT_DS_LIST_OBJECT: "LO",
284+
ADS_RIGHT_DS_DELETE_TREE: "DT",
285+
ADS_RIGHT_DS_CONTROL_ACCESS: "CR",
287286
}
288287

289288
var (
@@ -837,10 +836,8 @@ func aceRightsToString(aceRights uint32) string {
837836
/*
838837
* Check if the aceRights exactly maps to a shorthand name.
839838
*/
840-
for k, v := range aceRightsMap {
841-
if aceRights == v {
842-
return k
843-
}
839+
if v, ok := aceRightsToStringMap[aceRights]; ok {
840+
return v
844841
}
845842

846843
/*
@@ -850,10 +847,10 @@ func aceRightsToString(aceRights uint32) string {
850847
aceRightsString := ""
851848
var allRights uint32 = 0
852849

853-
for k, v := range aceRightsMapConcat {
854-
if (aceRights & v) == v {
855-
aceRightsString += k
856-
allRights |= v
850+
for k, v := range aceRightsToStringMap {
851+
if (aceRights & k) == k {
852+
aceRightsString += v
853+
allRights |= k
857854
}
858855
}
859856

@@ -1386,7 +1383,7 @@ func SecurityDescriptorFromString(sddlString string) ([]byte, error) {
13861383

13871384
right := aceRights[i : i+2]
13881385

1389-
if mask, ok := aceRightsMap[right]; ok {
1386+
if mask, ok := aceStringToRightsMap[right]; ok {
13901387
accessMask |= mask
13911388
} else {
13921389
return 0, fmt.Errorf("Unknown aceRight(%s): %s", right, aceRights)

0 commit comments

Comments
 (0)