X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/22c599abc18895f73e96095f35b71cf3357d41b4..93df4153a2028e7c6ffee0d005f58db8cec9917a:/hotline/access.go diff --git a/hotline/access.go b/hotline/access.go index 21b438f..69bf53e 100644 --- a/hotline/access.go +++ b/hotline/access.go @@ -6,7 +6,7 @@ import ( ) const ( - accessAlwaysAllow = -1 // Some transactions are always allowed + accessAlwaysAllow = -1 // Some transactions are always allowed // File System Maintenance accessDeleteFile = 0 @@ -28,32 +28,40 @@ const ( accessOpenUser = 16 accessModifyUser = 17 // accessChangeOwnPass = 18 // Documented but unused? - accessSendPrivMsg = 19 // This doesn't do what it seems like it should do. TODO: Investigate - accessNewsReadArt = 20 - accessNewsPostArt = 21 - accessDisconUser = 22 // Toggles red user name in user list - accessCannotBeDiscon = 23 - accessGetClientInfo = 24 - accessUploadAnywhere = 25 - accessAnyName = 26 - accessNoAgreement = 27 - accessSetFileComment = 28 - accessSetFolderComment = 29 - accessViewDropBoxes = 30 - accessMakeAlias = 31 - accessBroadcast = 32 - accessNewsDeleteArt = 33 - accessNewsCreateCat = 34 - accessNewsDeleteCat = 35 - accessNewsCreateFldr = 36 - accessNewsDeleteFldr = 37 + // accessSendPrivMsg = 19 // This doesn't do what it seems like it should do. TODO: Investigate + accessNewsReadArt = 20 + accessNewsPostArt = 21 + accessDisconUser = 22 // Toggles red user name in user list + accessCannotBeDiscon = 23 + accessGetClientInfo = 24 + accessUploadAnywhere = 25 + // accessAnyName = 26 + // accessNoAgreement = 27 + // accessSetFileComment = 28 + // accessSetFolderComment = 29 + accessViewDropBoxes = 30 + accessMakeAlias = 31 + accessBroadcast = 32 + accessNewsDeleteArt = 33 + accessNewsCreateCat = 34 + // accessNewsDeleteCat = 35 + accessNewsCreateFldr = 36 + // accessNewsDeleteFldr = 37 ) +type accessBitmap [8]byte + +func (bits *accessBitmap) Set(i int) { + bits[i/8] |= 1 << uint(7-i%8) +} + +// authorize checks if 64 bit access slice contain has accessBit set +// TODO: refactor to use accessBitmap type func authorize(access *[]byte, accessBit int) bool { if accessBit == accessAlwaysAllow { return true } - accessBitmap := big.NewInt(int64(binary.BigEndian.Uint64(*access))) + bits := big.NewInt(int64(binary.BigEndian.Uint64(*access))) - return accessBitmap.Bit(63-accessBit) == 1 + return bits.Bit(63-accessBit) == 1 }