Esempio n. 1
0
def getpathtoupdate(dbcursor, filedigest):

    global _wdblogger

    hexfiledigest = verifyhex(filedigest)
    
    if hexfiledigest is None:
        _wdblogger.log(logging.DEBUG, "[WUAPIS] argument not valid hex: getpathtoupdate")
        return hexfiledigest

    # Verify file is available

    sql = ("SELECT * FROM " + globs.UPDATEFILESDBNAME + " WHERE " +
        "FileName = '{}'").format(hexfiledigest[2:])

    dbcursor.execute(sql)
    result = dbcursor.fetchall()
    
    if len(result) == 0:
        _wdblogger.log(logging.DEBUG, "[BAMA] Did not find entries from getpathtoupdate")
        return result

    diskpath = ""
    for row in result:
        for column in row.keys():
            if column == "DiskPath":
                diskpath = row[column]

    _wdblogger.log(logging.DEBUG, "[WUAPIS] Found entries from getpathtoupdate")
    return diskpath
Esempio n. 2
0
def kbtosupersedingkb(kbarticle, filedigest):
    global _wulogger

    result = []

    try:
        kbarticleint = int(kbarticle)
    except ValueError:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] argument not valid int: kbtosupersedingkb" + "(" +
            str(kbarticle) + ")")
        return result

    hexfiledigest = verifyhex(filedigest)

    if hexfiledigest is None:
        _wulogger.log(logging.DEBUG,
                      "[WUAPIS] argument not valid hex: kbtosupersedingkb")
        return result

    updateinfo = []
    fdlist = getKBtoufiledigest(kbarticle, hexfiledigest)

    if len(fdlist) == 0:
        return result

    for filed in fdlist:
        superfiles = getsupersedingfromfile(filed[0])

        if len(superfiles) == 0:
            continue

        for superfile in superfiles:
            uinfo = findupdateinfo(superfile[1])

            if len(uinfo) == 0:
                continue

            if uinfo[0][13] is not None:
                updateinfo.append(uinfo[0][13])

    kbsorted = []

    if len(updateinfo) != 0:
        kbsorted = list(sorted(set(updateinfo)))

    _wulogger.log(
        logging.DEBUG, "[WUAPIS] Found entries from kbtosupersedingkb (" +
        str(kbarticle) + ")")
    return kbsorted
Esempio n. 3
0
def getsupersededfromfiledigest_custom(filedigest):
    '''
    File to superseded updates; Determines if Digest is superseding (list all superseded updates for file if any)
    '''

    global _wulogger

    result = []

    hexfiledigest = verifyhex(filedigest)

    if hexfiledigest is None:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] argument not valid hex: getsupersededfromfile")
        return result

    wsuscursor = globs.DBWSUSCONN.cursor()

    tsql = (
        'SET NOCOUNT ON;'
        'DECLARE @supersededupdates table '
        '(FileDigest varbinary(max), RevisionID INT, FileName varchar(max), '
        'LegacyName varchar(max), SupersededUpdateID uniqueidentifier);'
        'INSERT INTO @supersededupdates (FileDigest, RevisionID, FileName, LegacyName, SupersededUpdateID) '
        'SELECT ffr.FileDigest, ffr.RevisionID, f.FileName, u.LegacyName, rsu.SupersededUpdateID '
        'FROM SUSDB.dbo.tbFileForRevision as ffr '
        'JOIN SUSDB.dbo.tbBundleDependency tbd ON tbd.BundledRevisionID = ffr.RevisionID '
        'JOIN SUSDB.dbo.tbRevisionSupersedesUpdate rsu ON rsu.RevisionID = tbd.RevisionID '
        'JOIN SUSDB.dbo.tbUpdate u ON u.UpdateID = rsu.SupersededUpdateID '
        'JOIN SUSDB.dbo.tbFile f ON f.FileDigest = ffr.FileDigest '
        'WHERE ffr.FileDigest = {};'
        'SELECT * FROM @supersededupdates').format(hexfiledigest)

    check = wsuscursor.execute(tsql)

    if check is None:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] Did not find entries from getsupersededfromfile")
        wsuscursor.close()
        return result

    result = wsuscursor.fetchall()

    _wulogger.log(
        logging.DEBUG, "[WUAPIS] Found entries from getsupersededfromfile (" +
        str(filedigest) + ")")
    wsuscursor.close()
    return result
Esempio n. 4
0
def getKBtoufiledigest(kbarticle, filedigest):
    '''
    KB to filedigest with matching platform
    '''
    global _wulogger

    result = []

    try:
        kbarticleint = int(kbarticle)
    except ValueError:
        _wulogger.log(logging.DEBUG,
                      "[WUAPIS] argument not valid int: getKBtofiledigest")
        return result

    hexfiledigest = verifyhex(filedigest)

    if hexfiledigest is None:
        _wulogger.log(logging.DEBUG,
                      "[WUAPIS] argument not valid hex: getKBoffiledigest")
        return result

    wsuscursor = globs.DBWSUSCONN.cursor()

    tsql = (
        'SET NOCOUNT ON;SELECT f.FileDigest, f.FileName, kbafr.KBArticleID '
        'FROM SUSDB.dbo.tbKBArticleForRevision kbafr '
        'JOIN SUSDB.dbo.tbBundleDependency bd ON kbafr.RevisionID = bd.RevisionID '
        'JOIN SUSDB.dbo.tbFileForRevision ffr ON ffr.RevisionID = bd.BundledRevisionID '
        'JOIN SUSDB.dbo.tbFile f ON f.FileDigest = ffr.FileDigest '
        'WHERE kbafr.KBArticleID = {} AND ffr.FileDigest =  {} '
        '').format(str(kbarticle), hexfiledigest)

    check = wsuscursor.execute(tsql)

    if check is None:
        _wulogger.log(logging.DEBUG,
                      "[WUAPIS] Did not find entries from getKBtofiledigest")
        wsuscursor.close()
        return result

    result = wsuscursor.fetchall()

    _wulogger.log(
        logging.DEBUG, "[WUAPIS] Found entries from getKBtofiledigest (" +
        str(kbarticle) + ")")
    wsuscursor.close()
    return result
Esempio n. 5
0
def getsupersedingfromfile(filedigest):
    global _wulogger

    result = []

    hexfiledigest = verifyhex(filedigest)

    if hexfiledigest is None:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] argument not valid hex: getsupersedingfromfile")
        return result

    wsuscursor = globs.DBWSUSCONN.cursor()

    tsql = (
        ''
        'SET NOCOUNT ON;DECLARE @supersedingupdates table (FileDigest varbinary(max), RevisionID INT, '
        'LegacyName varchar(max), SuperRevisionID int);'
        'INSERT INTO @supersedingupdates (FileDigest, RevisionID, LegacyName, SuperRevisionID) '
        '   SELECT ffr.FileDigest, ffr.RevisionID, u.LegacyName, rsu.RevisionID FROM SUSDB.dbo.tbFileForRevision as ffr'
        '   JOIN SUSDB.dbo.tbBundleDependency tbd ON tbd.BundledRevisionID = ffr.RevisionID'
        '   JOIN SUSDB.dbo.tbRevision r ON r.RevisionID = tbd.RevisionID'
        '   JOIN SUSDB.dbo.tbUpdate u ON u.LocalUpdateID = r.LocalUpdateID'
        '   JOIN SUSDB.dbo.tbRevisionSupersedesUpdate rsu ON rsu.SupersededUpdateID = u.UpdateID'
        '   WHERE ffr.FileDigest = {};'
        'SELECT * FROM tbUpdate WHERE LocalUpdateID IN (SELECT LocalUpdateID FROM tbRevision'
        '   WHERE RevisionID IN (SELECT SuperRevisionID FROM @supersedingupdates));'
    ).format(hexfiledigest)

    check = wsuscursor.execute(tsql)

    if check is None:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] Did not find entries from getsupersedingfromfile")
        wsuscursor.close()
        return result

    result = wsuscursor.fetchall()

    _wulogger.log(
        logging.DEBUG, "[WUAPIS] Found entries from getsupersedingfromfile (" +
        str(filedigest) + ")")
    wsuscursor.close()
    return result
Esempio n. 6
0
def getfiledigestattributeswodu(filedigest):
    '''
    Digest (cab/exe) to KB (file to KB) with other WSUS information
    without DefinitionUpdates.
    May return multiple results.
    '''
    global _wulogger

    result = []

    hexfiledigest = verifyhex(filedigest)

    if hexfiledigest is None:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] argument not valid hex: getfiledigestattributeswodu")
        return result

    wsuscursor = globs.DBWSUSCONN.cursor()

    tsql = (
        'SET NOCOUNT ON;SELECT * FROM SUSDB.dbo.tbFileForRevision AS ffr'
        ' JOIN SUSDB.dbo.tbRevision r ON r.RevisionID = ffr.RevisionID'
        ' JOIN SUSDB.dbo.tbUpdate u ON u.LocalUpdateID = r.LocalUpdateID'
        ' JOIN SUSDB.PUBLIC_VIEWS.vUpdate vu ON vu.UpdateId = u.UpdateID'
        " WHERE ffr.FileDigest = {} AND ClassificationId != 'E0789628-CE08-4437-BE74-2495B842F43B'"
    ).format(hexfiledigest)

    check = wsuscursor.execute(tsql)

    if check is None:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] Did not find entries from getfiledigestattributeswodu")
        wsuscursor.close()
        return result

    result = wsuscursor.fetchall()

    _wulogger.log(
        logging.DEBUG,
        "[WUAPIS] Found entries from getfiledigestattributeswodu (" +
        str(filedigest) + ")")
    wsuscursor.close()
    return result
Esempio n. 7
0
def getfiledigestbattributes(filedigest):
    '''
    Digest (cab/exe) to KB (file to KB) with other WSUS information (Bundled)
    '''
    global _wulogger

    result = []

    hexfiledigest = verifyhex(filedigest)

    if hexfiledigest is None:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] argument not valid hex: getfiledigestbattributes")
        return result

    wsuscursor = globs.DBWSUSCONN.cursor()

    tsql = (
        'SET NOCOUNT ON;SELECT * FROM SUSDB.dbo.tbFileForRevision AS ffr '
        'JOIN SUSDB.dbo.tbBundleDependency tbd ON tbd.BundledRevisionID = ffr.RevisionID '
        'JOIN SUSDB.dbo.tbRevision r ON r.RevisionID = tbd.RevisionID '
        'JOIN SUSDB.dbo.tbUpdate u ON u.LocalUpdateID = r.LocalUpdateID '
        'JOIN SUSDB.PUBLIC_VIEWS.vUpdate vu ON vu.UpdateId = u.UpdateID '
        ' WHERE ffr.FileDigest = {}').format(hexfiledigest)

    check = wsuscursor.execute(tsql)

    if check is None:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] Did not find entries from getfiledigestbattributes")
        wsuscursor.close()
        return result

    result = wsuscursor.fetchall()

    _wulogger.log(
        logging.DEBUG,
        "[WUAPIS] Found entries from getfiledigestbattributes (" +
        str(filedigest) + ")")
    wsuscursor.close()
    return result
Esempio n. 8
0
def getsupersededfromfiledigest(filedigest):
    '''
    Lists all superseded updates
    '''
    global _wulogger

    result = []

    hexfiledigest = verifyhex(filedigest)

    if hexfiledigest is None:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] argument not valid hex: getsupersededfromfile")
        return result

    wsuscursor = globs.DBWSUSCONN.cursor()

    tsql = (
        'SET NOCOUNT ON;SELECT * FROM SUSDB.dbo.tbFileForRevision as ffr '
        'JOIN SUSDB.dbo.tbBundleDependency tbd ON tbd.BundledRevisionID = ffr.RevisionID '
        'JOIN SUSDB.dbo.tbRevisionSupersedesUpdate rsu ON rsu.RevisionID = tbd.RevisionID '
        'JOIN SUSDB.dbo.tbUpdate u ON u.UpdateID = rsu.SupersededUpdateID '
        'WHERE ffr.FileDigest = {}').format(hexfiledigest)

    check = wsuscursor.execute(tsql)

    if check is None:
        _wulogger.log(
            logging.DEBUG,
            "[WUAPIS] Did not find entries from getsupersededfromfile")
        wsuscursor.close()
        return result

    result = wsuscursor.fetchall()

    _wulogger.log(
        logging.DEBUG, "[WUAPIS] Found entries from getsupersededfromfile (" +
        str(filedigest) + ")")
    wsuscursor.close()
    return result
Esempio n. 9
0
def getKBoffiledigest(filedigest):
    '''
    Digest (cab/exe) to KB (file to KB)
    '''
    global _wulogger

    result = []

    hexfiledigest = verifyhex(filedigest)

    if hexfiledigest is None:
        _wulogger.log(logging.DEBUG,
                      "[WUAPIS] argument not valid hex: getKBoffiledigest")
        return result

    wsuscursor = globs.DBWSUSCONN.cursor()

    tsql = (
        'SET NOCOUNT ON;SELECT * FROM SUSDB.dbo.tbFileForRevision  as ffr '
        'JOIN SUSDB.dbo.tbBundleDependency tbd ON ffr.RevisionID = tbd.BundledRevisionID '
        'JOIN SUSDB.dbo.tbKBArticleForRevision kbfr ON kbfr.RevisionID = tbd.RevisionID '
        'WHERE ffr.FileDigest = {}').format(hexfiledigest)

    check = wsuscursor.execute(tsql)

    if check is None:
        _wulogger.log(logging.DEBUG,
                      "[WUAPIS] Did not find entries from getKBoffiledigest")
        wsuscursor.close()
        return result

    result = wsuscursor.fetchall()

    _wulogger.log(
        logging.DEBUG, "[WUAPIS] Found entries from getKBoffiledigest (" +
        str(filedigest) + ")")
    wsuscursor.close()
    return result
Esempio n. 10
0
def getfileattrbyfnprodv(filename, prodversion):
    bamcursor = globs.DBCONN.cursor()
    wsuscursor = globs.DBWSUSCONN.cursor()
    filelist = prodvgtebyname(bamcursor, filename, prodversion)

    hashlist = []

    for row in filelist:
        for column in row.keys():
            if column == 'UpdateId':
                result = findupdate(row[column])

                if len(result) == 0:
                    continue

                hexfiledigest = verifyhex("0x" + row[column])

                if hexfiledigest is None:
                    _wulogger.log(
                        logging.DEBUG,
                        "[WUAPIS] {} not valid hex: getfileattrbyfnprodv".
                        format(row[column]))
                    continue

                hashlist.append(hexfiledigest)

    fileattrlist = []

    for hash in hashlist:
        r = getfiledigestbattributes(hash)
        if len(r) == 0:
            continue
        fileattrlist.append(r)

    bamcursor.close()
    wsuscursor.close()
    return fileattrlist