def RenderAjax(self, request, response): """Handle the upload via ajax.""" try: self.uploaded_file = request.FILES.items()[0][1] self.dest_path, aff4_type = self.GetFilePath(request) content = StringIO.StringIO() for chunk in self.uploaded_file.chunks(): content.write(chunk) if aff4_type == "GRRMemoryDriver": # TODO(user): Add support for driver parameters. self.dest_path = maintenance_utils.UploadSignedDriverBlob( content.getvalue(), aff4_path=self.dest_path, token=request.token) else: self.dest_path = maintenance_utils.UploadSignedConfigBlob( content.getvalue(), aff4_path=self.dest_path, token=request.token) return renderers.TemplateRenderer.Layout(self, request, response, self.success_template) except (IOError) as e: self.error = "Could not write file to database %s" % e except (IndexError) as e: self.error = "No file provided." except message.DecodeError as e: self.error = ( "Could not decode driver. This should be a signed protobuf" " generated with sign_blob") return renderers.TemplateRenderer.Layout(self, request, response, self.error_template)
def LoadMemoryDrivers(grr_dir): """Load memory drivers from disk to database.""" for client_context in [["Platform:Darwin", "Arch:amd64"], ["Platform:Windows", "Arch:i386"], ["Platform:Windows", "Arch:amd64"]]: file_paths = config_lib.CONFIG.Get( "MemoryDriver.driver_files", context=client_context) aff4_paths = config_lib.CONFIG.Get( "MemoryDriver.aff4_paths", context=client_context) if len(file_paths) != len(aff4_paths): print "Length mismatch:" print "%s.", file_paths print "%s.", aff4_paths raise RuntimeError("Could not find all files/aff4 paths.") for file_path, aff4_path in zip(file_paths, aff4_paths): f_path = os.path.join(grr_dir, file_path) print "Signing and uploading %s to %s" % (f_path, aff4_path) up_path = maintenance_utils.UploadSignedDriverBlob( open(f_path).read(), aff4_path=aff4_path, client_context=client_context) print "uploaded %s" % up_path
def testInstallDriver(self): for driver_path in self.drivers: print "Attempting to load %s" % driver_path client_context = ["Platform:Darwin"] # Make sure there is a signed driver for our client. vfs_path = maintenance_utils.UploadSignedDriverBlob( open(driver_path).read(), client_context=client_context, token=self.token) fd = aff4.FACTORY.Create(vfs_path, "GRRMemoryDriver", mode="r", token=self.token) self.blob = fd.Get(fd.Schema.BINARY) request = rdfvalue.DriverInstallTemplate(driver=self.blob, write_path=None, force_reload=0) osx.client_utils_osx.InstallDriver( mox.Func(lambda x: x.endswith(".kext"))) self.mox.ReplayAll() self.RunAction("InstallDriver", request) self.mox.VerifyAll()
uploaded = maintenance_utils.UploadSignedConfigBlob( content, aff4_path=dest_path, client_context=context, token=token) print "Uploaded to %s" % dest_path elif flags.FLAGS.subparser_name == "upload_memory_driver": client_context = [ "Platform:%s" % flags.FLAGS.platform.title(), "Arch:%s" % flags.FLAGS.arch ] content = open(flags.FLAGS.file).read(1024 * 1024 * 30) if flags.FLAGS.dest_path: uploaded = maintenance_utils.UploadSignedDriverBlob( content, aff4_path=flags.FLAGS.dest_path, client_context=client_context, token=token) else: uploaded = maintenance_utils.UploadSignedDriverBlob( content, client_context=client_context, token=token) print "Uploaded to %s" % uploaded elif flags.FLAGS.subparser_name == "set_var": config = config_lib.CONFIG print "Setting %s to %s" % (flags.FLAGS.var, flags.FLAGS.val) if flags.FLAGS.val.startswith("["): # Allow setting of basic lists. flags.FLAGS.val = flags.FLAGS.val[1:-1].split(",") config.Set(flags.FLAGS.var, flags.FLAGS.val)