Some changes to Utilities folder
This commit is contained in:
Executable
+70
@@ -0,0 +1,70 @@
|
||||
import binascii, subprocess, sys
|
||||
|
||||
def get_clover_uuid():
|
||||
bd = bdmesg()
|
||||
if not len(bd):
|
||||
return ""
|
||||
# Get bdmesg output - then parse for SelfDevicePath
|
||||
if not "SelfDevicePath=" in bd:
|
||||
# Not found
|
||||
return ""
|
||||
try:
|
||||
# Split to just the contents of that line
|
||||
line = bd.split("SelfDevicePath=")[1].split("\n")[0]
|
||||
# Get the HD section
|
||||
hd = line.split("HD(")[1].split(")")[0]
|
||||
# Get the UUID
|
||||
uuid = hd.split(",")[2]
|
||||
return uuid
|
||||
except:
|
||||
pass
|
||||
return ""
|
||||
|
||||
def get_oc_uuid():
|
||||
p = subprocess.Popen(["nvram","4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:boot-path"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
oc, oe = p.communicate()
|
||||
oc = _decode(oc)
|
||||
try:
|
||||
path = oc.split("GPT,")[1].split(",")[0]
|
||||
except:
|
||||
path = ""
|
||||
return path
|
||||
|
||||
def get_bootloader_uuid():
|
||||
b_uuid = get_clover_uuid()
|
||||
if not b_uuid:
|
||||
b_uuid = get_oc_uuid()
|
||||
return b_uuid
|
||||
|
||||
def bdmesg(just_clover = True):
|
||||
b = "" if just_clover else _bdmesg(["ioreg","-l","-p","IOService","-w0"])
|
||||
if b == "":
|
||||
b = _bdmesg(["ioreg","-l","-p","IODeviceTree","-w0"])
|
||||
return b
|
||||
|
||||
def _decode(var):
|
||||
if sys.version_info >= (3,0) and isinstance(var, bytes):
|
||||
var = var.decode("utf-8","ignore")
|
||||
return var
|
||||
|
||||
def _bdmesg(comm):
|
||||
# Runs ioreg -l -p IODeviceTree -w0 and searches for "boot-log"
|
||||
p = subprocess.Popen(comm, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
bd, be = p.communicate()
|
||||
bd = _decode(bd)
|
||||
for line in bd.split("\n"):
|
||||
# We're just looking for the "boot-log" property, then we need to format it
|
||||
if not '"boot-log"' in line:
|
||||
# Skip it!
|
||||
continue
|
||||
# Must have found it - let's try to split it, then get the hex data and process it
|
||||
try:
|
||||
# Split it up, then convert from hex to ascii
|
||||
ascii_bytes = binascii.unhexlify(line.split("<")[1].split(">")[0].encode("utf-8"))
|
||||
ascii_bytes = _decode(ascii_bytes)
|
||||
return ascii_bytes
|
||||
except:
|
||||
# Failed to convert
|
||||
return ""
|
||||
# Didn't find it
|
||||
return ""
|
||||
Reference in New Issue
Block a user