Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: tjka - 21.09.15 - klo:15.59
-
Hei !
Kuinka Linuxin bash scriptissä muunnetaan OctetString muodossa oleva muuttuja ASCII (?) muotoon??
Kyseessä on AD:n objectSID, joka haettu ldapsearch komennolla.
Nyt muuttujassa...
: AQUAAAAAAAUVAAAAUjxqxzpj5QeZPGgJaG8AAA==
mutta se pitäisi saada muotoon...
S-1-5-21-3345628242-132473658-157826201-28520
###Microsoft Security IDs are stored as binary attributes (LDAP syntax is octet string) and have to be decoded first to get them converted in a familiar, readable form... ###
-tjka-
-
Tässä pikainen toteutus, lähteenä http://www.selfadsi.org/deep-inside/microsoft-sid-attributes.htm
#!/bin/bash
#
# base64sid_to_sddl - Convert Base64-encoded SID to SDDL format
#
# Reference: http://www.selfadsi.org/deep-inside/microsoft-sid-attributes.htm
#
bytestoint_be() {
local value=0
while (( "$#" )); do
let value=value*256+$1
shift
done
echo "$value"
}
bytestoint_le() {
local value=0
multiplier=1
while (( "$#" )); do
let value=value+multiplier*$1
let multiplier=multiplier*256
shift
done
echo "$value"
}
function base64sid_to_sddl() {
local -a data=($(echo -n "$1" | base64 -d -i | hexdump -v -e '1/1 " %u"'))
local revision=${data[0]}
local identifierauthority=$(bytestoint_be ${data[@]:2:6})
local subidcount=${data[1]}
local -a subids
local offset=8
local sid="S-$revision-$identifierauthority"
for ((i=0; i<subidcount; i++)); do
sid="$sid-$(bytestoint_le ${data[@]:offset:4})"
let offset=offset+4
done
echo "$sid"
}
if [ $# -lt 1 ]; then
>&2 echo "usage: $0 <Base64-encoded SID>"
exit 0
fi
echo $(base64sid_to_sddl "$1")
-
Pienen pähkäilyn jälkeen ohjelmointitaidotonkin :-[ sai homman toimimaan... :D
Kiitän ja kumarran.
-tjka-