@@ -194,15 +194,15 @@ const (
194
194
FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE )
195
195
196
196
// 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
206
206
207
207
// Registry Specific Access Rights.
208
208
KEY_QUERY_VALUE = 0x0001
@@ -227,7 +227,7 @@ const (
227
227
)
228
228
229
229
// 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 {
231
231
"GA" : GENERIC_ALL ,
232
232
"GR" : GENERIC_READ ,
233
233
"GW" : GENERIC_WRITE ,
@@ -263,27 +263,26 @@ var aceRightsMap = map[string]uint32{
263
263
"NX" : SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP ,
264
264
}
265
265
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" ,
287
286
}
288
287
289
288
var (
@@ -837,10 +836,8 @@ func aceRightsToString(aceRights uint32) string {
837
836
/*
838
837
* Check if the aceRights exactly maps to a shorthand name.
839
838
*/
840
- for k , v := range aceRightsMap {
841
- if aceRights == v {
842
- return k
843
- }
839
+ if v , ok := aceRightsToStringMap [aceRights ]; ok {
840
+ return v
844
841
}
845
842
846
843
/*
@@ -850,10 +847,10 @@ func aceRightsToString(aceRights uint32) string {
850
847
aceRightsString := ""
851
848
var allRights uint32 = 0
852
849
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
857
854
}
858
855
}
859
856
@@ -1386,7 +1383,7 @@ func SecurityDescriptorFromString(sddlString string) ([]byte, error) {
1386
1383
1387
1384
right := aceRights [i : i + 2 ]
1388
1385
1389
- if mask , ok := aceRightsMap [right ]; ok {
1386
+ if mask , ok := aceStringToRightsMap [right ]; ok {
1390
1387
accessMask |= mask
1391
1388
} else {
1392
1389
return 0 , fmt .Errorf ("Unknown aceRight(%s): %s" , right , aceRights )
0 commit comments