public async Task <IActionResult> RenameFile(Guid fileUniqId, [FromBody] RenameRequest request) { try { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var callerEmail = User.FindFirst(ClaimTypes.NameIdentifier).Value; await _fileService.RenameFileAsync(fileUniqId, request.NewName, callerEmail); if (!_fileService.State.IsValid) { return(ServiceResponseDispatcher.ExecuteServiceResponse(this, _fileService.State.TypeOfError, _fileService.State.ErrorMessage)); } return(StatusCode(204)); } catch (Exception ex) { return(StatusCode(500, ex.Message)); } }
public async Task <IActionResult> Rename( [FromForm] RenameRequest renameRequest) { try { if (renameRequest.source == null) { return(BadRequest("Rename source is not specified")); } if (renameRequest.target == null) { return(BadRequest("Rename target is not specified")); } var result = await _fileSystemService .RenameAsync( new RenameState( new NPath(renameRequest.target), new NPath(renameRequest.source))); if (result == null) { throw new SystemException("Unable to process rename"); } return(Json(result)); } catch (Exception e) { return(BadRequest(e)); } }
private IEnumerable <ModifiedFileResponse> Rename(string renameTo, params Buffer[] buffers) { RenameRequest request = null; var solutionBuilder = new FakeSolutionBuilder(); foreach (var buffer in buffers) { if (buffer.Text.Contains("$")) { var location = TestHelpers.GetLineAndColumnFromDollar(buffer.Text); buffer.Text = buffer.Text.Replace("$", ""); request = new RenameRequest { Buffer = buffer.Text, Column = location.Column - 1, Line = location.Line, RenameTo = renameTo, FileName = buffer.Filename }; } //solutionBuilder = solutionBuilder.AddProject(); solutionBuilder = solutionBuilder.AddFile(buffer.Text, buffer.Filename); } var solution = solutionBuilder.Build(); var bufferParser = new BufferParser(solution); var renameHandler = new RenameHandler(solution, bufferParser, new OmniSharpConfiguration(), new FindUsagesHandler(bufferParser, solution, new ProjectFinder(solution))); var response = renameHandler.Rename(request); return(response.Changes); }
public override async Task <WorkspaceEdit> Handle(RenameParams request, CancellationToken token) { var omnisharpRequest = new RenameRequest { FileName = Helpers.FromUri(request.TextDocument.Uri), RenameTo = request.NewName, Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line), Buffer = request.NewName, WantsTextChanges = true, ApplyTextChanges = false }; var omnisharpResponse = await _renameHandler.Handle(omnisharpRequest); if (omnisharpResponse.ErrorMessage != null) { return(new WorkspaceEdit()); } var changes = omnisharpResponse.Changes.ToDictionary(change => Helpers.ToUri(change.FileName), x => x.Changes.Select(edit => new TextEdit { NewText = edit.NewText, Range = Helpers.ToRange((edit.StartColumn, edit.StartLine), (edit.EndColumn, edit.EndLine)) }));
private string Rename(string buffer, string renameTo) { var location = TestHelpers.GetLineAndColumnFromDollar(buffer); buffer = buffer.Replace("$", ""); var solution = new FakeSolutionBuilder() .AddFile(buffer) .Build(); var bufferParser = new BufferParser(solution); var renameHandler = new RenameHandler(solution, bufferParser); var request = new RenameRequest { Buffer = buffer, Column = location.Column - 1, Line = location.Line, RenameTo = renameTo, FileName = "myfile" }; var response = renameHandler.Rename(request); if (response.Changes.Any()) { return(response.Changes.First().Buffer); } return(buffer); }
internal static SMB1Command GetRenameResponse(SMB1Header header, RenameRequest request, ISMBShare share, SMB1ConnectionState state) { SMB1Session session = state.GetSession(header.UID); if (share is FileSystemShare) { if (!((FileSystemShare)share).HasWriteAccess(session.SecurityContext, request.OldFileName)) { state.LogToServer(Severity.Verbose, "Rename '{0}{1}' to '{0}{2}' failed. User '{3}' was denied access.", share.Name, request.OldFileName, request.NewFileName, session.UserName); header.Status = NTStatus.STATUS_ACCESS_DENIED; return(new ErrorResponse(request.CommandName)); } if (!((FileSystemShare)share).HasWriteAccess(session.SecurityContext, request.NewFileName)) { state.LogToServer(Severity.Verbose, "Rename '{0}{1}' to '{0}{2}' failed. User '{3}' was denied access.", share.Name, request.OldFileName, request.NewFileName, session.UserName); header.Status = NTStatus.STATUS_ACCESS_DENIED; return(new ErrorResponse(request.CommandName)); } } header.Status = SMB1FileStoreHelper.Rename(share.FileStore, request.OldFileName, request.NewFileName, request.SearchAttributes, session.SecurityContext); if (header.Status != NTStatus.STATUS_SUCCESS) { state.LogToServer(Severity.Verbose, "Rename '{0}{1}' to '{0}{2}' failed. NTStatus: {3}.", share.Name, request.OldFileName, request.NewFileName, header.Status); return(new ErrorResponse(request.CommandName)); } state.LogToServer(Severity.Verbose, "Rename: User '{0}' renamed '{1}{2}' to '{1}{3}'.", session.UserName, share.Name, request.OldFileName, request.NewFileName); return(new RenameResponse()); }
private async Task <RenameResponse> SendRequest(OmnisharpWorkspace workspace, string renameTo, string filename, string fileContent, bool wantsTextChanges = false, bool applyTextChanges = true) { var lineColumn = TestHelpers.GetLineAndColumnFromDollar(fileContent); var controller = new OmnisharpController(workspace, new FakeOmniSharpOptions()); var request = new RenameRequest { Line = lineColumn.Line, Column = lineColumn.Column, RenameTo = renameTo, FileName = filename, Buffer = fileContent.Replace("$", ""), WantsTextChanges = wantsTextChanges, ApplyTextChanges = applyTextChanges }; var bufferFilter = new UpdateBufferFilter(workspace); bufferFilter.OnActionExecuting(TestHelpers.CreateActionExecutingContext(request, controller)); return(await controller.Rename(request)); }
private async Task <RenameResponse> PerformRename( OmniSharpTestHost host, TestFile[] testFiles, string renameTo, bool wantsTextChanges = false, bool applyTextChanges = true, bool updateBuffer = false) { var activeFile = testFiles.Single(tf => tf.Content.HasPosition); var point = activeFile.Content.GetPointFromPosition(); var request = new RenameRequest { Line = point.Line, Column = point.Offset, RenameTo = renameTo, FileName = activeFile.FileName, Buffer = activeFile.Content.Code, WantsTextChanges = wantsTextChanges, ApplyTextChanges = applyTextChanges }; var requestHandler = GetRequestHandler(host); if (updateBuffer) { await host.Workspace.BufferManager.UpdateBufferAsync(request); } return(await requestHandler.Handle(request)); }
internal async Task HandleRenameRequestAsync(RenameRequest req, IEmote emote, IUser approver, IUserMessage message) { if (emote.Name != _acceptEmote.Name && emote.Name != _denyEmote.Name) return; if (IsStaffMember(approver as IGuildUser) == false) { var m = await message.Channel.SendMessageAsync($"{approver.Mention} you cannot approve/deny this name change."); _deleteService.ScheduleDeletion(m, 5); return; } bool accepted = emote.Name == _acceptEmote.Name; if (req != null) { if (!accepted) { await message.ModifyAsync(x => x.Embed = Embeds.RequestRename(req.GuildUser, req.Type, req.NewName, accepted, approver.Mention)); _renameRequests.Remove(req); return; } if (req.Type == "discord" || req.Type == "both") { string newDiscordName = ""; if (req.GuildUser.Nickname != null) { int indexOfBracket = req.GuildUser.Nickname.IndexOf("]"); if (indexOfBracket == -1) newDiscordName = req.NewName; else newDiscordName = req.GuildUser.Nickname.Substring(0, indexOfBracket + 1) + " " + req.NewName; } else newDiscordName = req.NewName; await req.GuildUser.ModifyAsync(x => { x.Nickname = newDiscordName; }).ConfigureAwait(false); } if (req.Type == "spreadsheet" || req.Type == "both") { int row = _dsn.GetRowNumber(req.GuildUser.Id); if (row != -1) { string sectionToEdit = $"Player Data!C{row}"; _dsn.MakeRequest(sectionToEdit, new List<object>() { req.NewName }); return; } } await message.ModifyAsync(x => x.Embed = Embeds.RequestRename(req.GuildUser, req.Type, req.NewName, accepted, approver.Mention)); _renameRequests.Remove(req); } }
private async Task HandleExtraReactionMethodsAsync(ulong messageId, SocketReaction reaction, IUser approver, IUserMessage message) { RenameRequest req = _renameRequests.Find(x => x.MessageId == messageId); if (req != null) { await HandleRenameRequestAsync(req, reaction.Emote, approver, message).ConfigureAwait(false); return; } }
void RenameView() { if (rt == null) { UnityEditor.EditorUtility.DisplayDialog("No GameObject", "GameObject for the node is not found!", "OK"); return; } RenameRequest?.Invoke(this); }
private async Task DoRename() { var name = await RenameRequest.Handle(Unit.Default); if (string.IsNullOrWhiteSpace(name)) { return; } Title = _category.Title = name; await _categoryManager.Update(_category); }
/// <summary> /// Renames the specified request. /// </summary> /// <param name="request">The request.</param> /// <param name="db">The database.</param> public ProcessResponse Rename(RenameRequest request, string db) { this.SetDatabase(db); var processId = Guid.NewGuid(); progressStatus.TryAdd(processId, new ConcurrentQueue <string>()); request.Items.ForEach(t => progressStatus[processId].Enqueue(t)); Action action = () => { string itemId; while (progressStatus[processId].TryDequeue(out itemId)) { try { var item = this.database.GetItem(new ID(itemId)); using (new EditContext(item)) { item.Name = this.GetName(item.Name, request.NameOrPattern, request.Items.IndexOf(itemId)); } } catch (Exception ex) { List <string> errorMessages = new List <string>(); if (errors == null) { errors = new ConcurrentDictionary <Guid, List <string> >(); } if (errors.TryGetValue(processId, out errorMessages)) { var newErrors = new List <string>(); newErrors.AddRange(errorMessages); newErrors.Add(ex.Message + " Item Id: " + itemId); errors.TryUpdate(processId, newErrors, errorMessages); } else { errors.TryAdd(processId, new List <string> { ex.Message + " Item Id: " + itemId }); } } } }; Task.Run(() => Parallel.Invoke(new Action[] { action })); return(new ProcessResponse { StatusId = processId }); }
public async Task <IActionResult> Rename([FromBody] RenameRequest request) { _workspace.EnsureBufferUpdated(request); var response = new RenameResponse(); var documentId = _workspace.GetDocumentId(request.FileName); if (documentId != null) { var document = _workspace.CurrentSolution.GetDocument(documentId); var sourceText = await document.GetTextAsync(); var position = sourceText.Lines.GetPosition(new LinePosition(request.Line - 1, request.Column)); var symbol = await SymbolFinder.FindSymbolAtPositionAsync(document, position); Solution solution = _workspace.CurrentSolution; if (symbol != null) { solution = await Renamer.RenameSymbolAsync(solution, symbol, request.RenameTo, _workspace.Options); } var changes = new List <ModifiedFileResponse>(); var solutionChanges = solution.GetChanges(_workspace.CurrentSolution); foreach (var projectChange in solutionChanges.GetProjectChanges()) { foreach (var changedDocumentId in projectChange.GetChangedDocuments()) { var changedDocument = solution.GetDocument(changedDocumentId); var changedText = await changedDocument.GetTextAsync(); var modifiedFileResponse = new ModifiedFileResponse(changedDocument.FilePath, changedText.ToString()); changes.Add(modifiedFileResponse); } } // Attempt to update the workspace if (_workspace.TryApplyChanges(solution)) { response.Changes = changes; } } return(new ObjectResult(response)); }
public async Task ShouldSupportLoadedFiles() { using (var testProject = await TestAssets.Instance.GetTestProjectAsync("CakeProject", shadowCopy: false)) using (var host = CreateOmniSharpHost(testProject.Directory)) { var fileName = Path.Combine(testProject.Directory, "build.cake"); var request = new RenameRequest { FileName = fileName, Line = 8, Column = 10, WantsTextChanges = true, RenameTo = "Build" }; var requestHandler = GetRequestHandler(host); var response = await requestHandler.Handle(request); Assert.Equal(2, response.Changes.Count()); var loadedFile = response.Changes.FirstOrDefault(x => x.FileName.Equals(Path.Combine(testProject.Directory, "foo.cake"))); Assert.NotNull(loadedFile); Assert.Contains(new LinePositionSpanTextChange { NewText = "Build", StartLine = 4, EndLine = 4, StartColumn = 22, EndColumn = 28 }, loadedFile.Changes); var sameFile = response.Changes.FirstOrDefault(x => x.FileName.Equals(Path.Combine(testProject.Directory, "build.cake"))); Assert.NotNull(sameFile); Assert.Contains(new LinePositionSpanTextChange { NewText = "Build", StartLine = 8, EndLine = 8, StartColumn = 5, EndColumn = 11 }, sameFile.Changes); } }
internal static SMBCommand GetRenameResponse(SMBHeader header, RenameRequest request, FileSystemShare share, StateObject state) { string userName = state.GetConnectedUserName(header.UID); if (!share.HasWriteAccess(userName)) { header.Status = NTStatus.STATUS_ACCESS_DENIED; return(new ErrorResponse(CommandName.SMB_COM_RENAME)); } IFileSystem fileSystem = share.FileSystem; FileSystemEntry sourceEntry = fileSystem.GetEntry(request.OldFileName); if (sourceEntry == null) { header.Status = NTStatus.STATUS_NO_SUCH_FILE; return(new ErrorResponse(CommandName.SMB_COM_RENAME)); } // The file must not already exist unless we just want to upcase / downcase a filename letter FileSystemEntry destinationEntry = fileSystem.GetEntry(request.NewFileName); if (destinationEntry != null && !String.Equals(request.OldFileName, request.NewFileName, StringComparison.InvariantCultureIgnoreCase)) { // The new file already exists. header.Status = NTStatus.STATUS_OBJECT_NAME_COLLISION; return(new ErrorResponse(CommandName.SMB_COM_RENAME)); } try { fileSystem.Move(request.OldFileName, request.NewFileName); return(new RenameResponse()); } catch (IOException) { header.Status = NTStatus.STATUS_SHARING_VIOLATION; return(new ErrorResponse(CommandName.SMB_COM_RENAME)); } catch (UnauthorizedAccessException) { header.Status = NTStatus.STATUS_ACCESS_DENIED; return(new ErrorResponse(CommandName.SMB_COM_RENAME)); } }
private async Task <RenameResponse> SendRequest(OmnisharpWorkspace workspace, string renameTo, string filename, string fileContent, bool wantsTextChanges = false, bool applyTextChanges = true) { var lineColumn = TestHelpers.GetLineAndColumnFromDollar(fileContent); var controller = new RenameService(workspace); var request = new RenameRequest { Line = lineColumn.Line, Column = lineColumn.Column, RenameTo = renameTo, FileName = filename, Buffer = fileContent.Replace("$", ""), WantsTextChanges = wantsTextChanges, ApplyTextChanges = applyTextChanges }; await workspace.BufferManager.UpdateBuffer(request); return(await controller.Handle(request)); }
public static void InvokeRenameRequest(RenameRequestEventArgs e) { RenameRequest?.Invoke(e); }
public async Task <RenameResponse> Rename(RenameRequest request) { var response = new RenameResponse(); var document = _workspace.GetDocument(request.FileName); if (document != null) { var sourceText = await document.GetTextAsync(); var position = sourceText.Lines.GetPosition(new LinePosition(request.Line - 1, request.Column - 1)); var symbol = await SymbolFinder.FindSymbolAtPositionAsync(document, position); Solution solution = _workspace.CurrentSolution; if (symbol != null) { try { solution = await Renamer.RenameSymbolAsync(solution, symbol, request.RenameTo, _workspace.Options); } catch (ArgumentException e) { response.ErrorMessage = e.Message; } } var changes = new Dictionary <string, ModifiedFileResponse>(); var solutionChanges = solution.GetChanges(_workspace.CurrentSolution); foreach (var projectChange in solutionChanges.GetProjectChanges()) { foreach (var changedDocumentId in projectChange.GetChangedDocuments()) { var changedDocument = solution.GetDocument(changedDocumentId); ModifiedFileResponse modifiedFileResponse; if (!changes.TryGetValue(changedDocument.FilePath, out modifiedFileResponse)) { modifiedFileResponse = new ModifiedFileResponse(changedDocument.FilePath); changes[changedDocument.FilePath] = modifiedFileResponse; } if (!request.WantsTextChanges) { var changedText = await changedDocument.GetTextAsync(); modifiedFileResponse.Buffer = changedText.ToString(); } else { var originalDocument = _workspace.CurrentSolution.GetDocument(changedDocumentId); var textChanges = await changedDocument.GetTextChangesAsync(originalDocument); var linePositionSpanTextChanges = await LinePositionSpanTextChange.Convert(originalDocument, textChanges); modifiedFileResponse.Changes = modifiedFileResponse.Changes != null ? modifiedFileResponse.Changes.Union(linePositionSpanTextChanges) : linePositionSpanTextChanges; } } } if (request.ApplyTextChanges) { // Attempt to update the workspace if (_workspace.TryApplyChanges(solution)) { response.Changes = changes.Values; } } else { response.Changes = changes.Values; } } return(response); }
public static void InvokeRenameRequest(Mobile from, Mobile target, string name) => RenameRequest?.Invoke(from, target, name);
public ProcessResponse Rename([FromBody] RenameRequest renameRequest) { return(this._customRepositoryActions.Rename(renameRequest, renameRequest.Database)); }
public static async Task <RenameResponse> TranslateAsync(this RenameResponse response, OmniSharpWorkspace workspace, RenameRequest request) { var changes = new Dictionary <string, List <LinePositionSpanTextChange> >(); foreach (var change in response.Changes) { await PopulateModificationsAsync(change, workspace, changes); } response.Changes = changes.Select(x => new ModifiedFileResponse(x.Key) { Changes = x.Value }); return(response); }
private List <SMB1Command> ProcessSMB1Command(SMB1Header header, SMB1Command command, SMB1ConnectionState state) { if (command is SessionSetupAndXRequest) { SessionSetupAndXRequest request = (SessionSetupAndXRequest)command; state.MaxBufferSize = request.MaxBufferSize; return(SessionSetupHelper.GetSessionSetupResponse(header, request, m_securityProvider, state)); } else if (command is SessionSetupAndXRequestExtended) { SessionSetupAndXRequestExtended request = (SessionSetupAndXRequestExtended)command; state.MaxBufferSize = request.MaxBufferSize; return(SessionSetupHelper.GetSessionSetupResponseExtended(header, request, m_securityProvider, state)); } else if (command is EchoRequest) { return(ServerResponseHelper.GetEchoResponse((EchoRequest)command)); } else { SMB1Session session = state.GetSession(header.UID); if (session == null) { header.Status = NTStatus.STATUS_USER_SESSION_DELETED; return(new ErrorResponse(command.CommandName)); } if (command is TreeConnectAndXRequest) { TreeConnectAndXRequest request = (TreeConnectAndXRequest)command; return(TreeConnectHelper.GetTreeConnectResponse(header, request, state, m_services, m_shares)); } else if (command is LogoffAndXRequest) { state.LogToServer(Severity.Information, "Logoff: User '{0}' logged off.", session.UserName); m_securityProvider.DeleteSecurityContext(ref session.SecurityContext.AuthenticationContext); state.RemoveSession(header.UID); return(new LogoffAndXResponse()); } else { ISMBShare share = session.GetConnectedTree(header.TID); if (share == null) { header.Status = NTStatus.STATUS_SMB_BAD_TID; return(new ErrorResponse(command.CommandName)); } if (command is CreateDirectoryRequest) { CreateDirectoryRequest request = (CreateDirectoryRequest)command; return(FileStoreResponseHelper.GetCreateDirectoryResponse(header, request, share, state)); } else if (command is DeleteDirectoryRequest) { DeleteDirectoryRequest request = (DeleteDirectoryRequest)command; return(FileStoreResponseHelper.GetDeleteDirectoryResponse(header, request, share, state)); } else if (command is CloseRequest) { CloseRequest request = (CloseRequest)command; return(ServerResponseHelper.GetCloseResponse(header, request, share, state)); } else if (command is FlushRequest) { return(new FlushResponse()); } else if (command is DeleteRequest) { DeleteRequest request = (DeleteRequest)command; return(FileStoreResponseHelper.GetDeleteResponse(header, request, share, state)); } else if (command is RenameRequest) { RenameRequest request = (RenameRequest)command; return(FileStoreResponseHelper.GetRenameResponse(header, request, share, state)); } else if (command is QueryInformationRequest) { QueryInformationRequest request = (QueryInformationRequest)command; return(FileStoreResponseHelper.GetQueryInformationResponse(header, request, share, state)); } else if (command is SetInformationRequest) { SetInformationRequest request = (SetInformationRequest)command; return(FileStoreResponseHelper.GetSetInformationResponse(header, request, share, state)); } else if (command is ReadRequest) { ReadRequest request = (ReadRequest)command; return(ReadWriteResponseHelper.GetReadResponse(header, request, share, state)); } else if (command is WriteRequest) { WriteRequest request = (WriteRequest)command; return(ReadWriteResponseHelper.GetWriteResponse(header, request, share, state)); } else if (command is CheckDirectoryRequest) { CheckDirectoryRequest request = (CheckDirectoryRequest)command; return(FileStoreResponseHelper.GetCheckDirectoryResponse(header, request, share, state)); } else if (command is WriteRawRequest) { // [MS-CIFS] 3.3.5.26 - Receiving an SMB_COM_WRITE_RAW Request: // the server MUST verify that the Server.Capabilities include CAP_RAW_MODE, // If an error is detected [..] the Write Raw operation MUST fail and // the server MUST return a Final Server Response [..] with the Count field set to zero. return(new WriteRawFinalResponse()); } else if (command is SetInformation2Request) { SetInformation2Request request = (SetInformation2Request)command; return(FileStoreResponseHelper.GetSetInformation2Response(header, request, share, state)); } else if (command is LockingAndXRequest) { header.Status = NTStatus.STATUS_ACCESS_DENIED; return(new ErrorResponse(command.CommandName)); } else if (command is OpenAndXRequest) { OpenAndXRequest request = (OpenAndXRequest)command; return(OpenAndXHelper.GetOpenAndXResponse(header, request, share, state)); } else if (command is ReadAndXRequest) { ReadAndXRequest request = (ReadAndXRequest)command; return(ReadWriteResponseHelper.GetReadResponse(header, request, share, state)); } else if (command is WriteAndXRequest) { WriteAndXRequest request = (WriteAndXRequest)command; return(ReadWriteResponseHelper.GetWriteResponse(header, request, share, state)); } else if (command is FindClose2Request) { return(ServerResponseHelper.GetFindClose2Request(header, (FindClose2Request)command, state)); } else if (command is TreeDisconnectRequest) { TreeDisconnectRequest request = (TreeDisconnectRequest)command; return(TreeConnectHelper.GetTreeDisconnectResponse(header, request, share, state)); } else if (command is TransactionRequest) // Both TransactionRequest and Transaction2Request { TransactionRequest request = (TransactionRequest)command; return(TransactionHelper.GetTransactionResponse(header, request, share, state)); } else if (command is TransactionSecondaryRequest) // Both TransactionSecondaryRequest and Transaction2SecondaryRequest { TransactionSecondaryRequest request = (TransactionSecondaryRequest)command; return(TransactionHelper.GetTransactionResponse(header, request, share, state)); } else if (command is NTTransactRequest) { NTTransactRequest request = (NTTransactRequest)command; return(NTTransactHelper.GetNTTransactResponse(header, request, share, state)); } else if (command is NTTransactSecondaryRequest) { NTTransactSecondaryRequest request = (NTTransactSecondaryRequest)command; return(NTTransactHelper.GetNTTransactResponse(header, request, share, state)); } else if (command is NTCreateAndXRequest) { NTCreateAndXRequest request = (NTCreateAndXRequest)command; return(NTCreateHelper.GetNTCreateResponse(header, request, share, state)); } } } header.Status = NTStatus.STATUS_SMB_BAD_COMMAND; return(new ErrorResponse(command.CommandName)); }
/// <summary> /// May return null /// </summary> public SMBCommand ProcessCommand(SMBHeader header, SMBCommand command, StateObject state, List <SMBCommand> sendQueue) { if (command is NegotiateRequest) { NegotiateRequest request = (NegotiateRequest)command; if (request.Dialects.Contains(SMBServer.NTLanManagerDialect)) { if (EnableExtendedSecurity && header.ExtendedSecurityFlag) { return(NegotiateHelper.GetNegotiateResponseExtended(request, m_serverGuid)); } else { return(new NegotiateResponseNotSupported()); } } else { return(new NegotiateResponseNotSupported()); } } else if (command is SessionSetupAndXRequest) { SessionSetupAndXRequest request = (SessionSetupAndXRequest)command; state.MaxBufferSize = request.MaxBufferSize; //this probably won't work return(NegotiateHelper.GetSessionSetupResponse(header, request, state)); } else if (command is SessionSetupAndXRequestExtended) { SessionSetupAndXRequestExtended request = (SessionSetupAndXRequestExtended)command; state.MaxBufferSize = request.MaxBufferSize; return(NegotiateHelper.GetSessionSetupResponseExtended(header, request, state)); } else if (command is EchoRequest) { return(ServerResponseHelper.GetEchoResponse((EchoRequest)command, sendQueue)); } else if (state.IsAuthenticated(header.UID)) { if (command is TreeConnectAndXRequest) { TreeConnectAndXRequest request = (TreeConnectAndXRequest)command; return(TreeConnectHelper.GetTreeConnectResponse(header, request, state, m_shares)); } else if (command is LogoffAndXRequest) { return(new LogoffAndXResponse()); } else if (state.IsTreeConnected(header.TID)) { string rootPath = state.GetConnectedTreePath(header.TID); object share; if (state.IsIPC(header.TID)) { share = m_services; } else { share = m_shares.GetShareFromRelativePath(rootPath); } if (command is CreateDirectoryRequest) { if (!(share is FileSystemShare)) { header.Status = NTStatus.STATUS_SMB_BAD_COMMAND; return(new ErrorResponse(command.CommandName)); } CreateDirectoryRequest request = (CreateDirectoryRequest)command; return(FileSystemResponseHelper.GetCreateDirectoryResponse(header, request, (FileSystemShare)share, state)); } else if (command is DeleteDirectoryRequest) { if (!(share is FileSystemShare)) { header.Status = NTStatus.STATUS_SMB_BAD_COMMAND; return(new ErrorResponse(command.CommandName)); } DeleteDirectoryRequest request = (DeleteDirectoryRequest)command; return(FileSystemResponseHelper.GetDeleteDirectoryResponse(header, request, (FileSystemShare)share, state)); } else if (command is CloseRequest) { CloseRequest request = (CloseRequest)command; return(ServerResponseHelper.GetCloseResponse(header, request, state)); } else if (command is FlushRequest) { return(new FlushResponse()); } else if (command is DeleteRequest) { if (!(share is FileSystemShare)) { header.Status = NTStatus.STATUS_SMB_BAD_COMMAND; return(new ErrorResponse(command.CommandName)); } DeleteRequest request = (DeleteRequest)command; return(FileSystemResponseHelper.GetDeleteResponse(header, request, (FileSystemShare)share, state)); } else if (command is RenameRequest) { if (!(share is FileSystemShare)) { header.Status = NTStatus.STATUS_SMB_BAD_COMMAND; return(new ErrorResponse(command.CommandName)); } RenameRequest request = (RenameRequest)command; return(FileSystemResponseHelper.GetRenameResponse(header, request, (FileSystemShare)share, state)); } else if (command is QueryInformationRequest) { if (!(share is FileSystemShare)) { header.Status = NTStatus.STATUS_SMB_BAD_COMMAND; return(new ErrorResponse(command.CommandName)); } QueryInformationRequest request = (QueryInformationRequest)command; return(FileSystemResponseHelper.GetQueryInformationResponse(header, request, (FileSystemShare)share)); } else if (command is SetInformationRequest) { if (!(share is FileSystemShare)) { header.Status = NTStatus.STATUS_SMB_BAD_COMMAND; return(new ErrorResponse(command.CommandName)); } SetInformationRequest request = (SetInformationRequest)command; return(FileSystemResponseHelper.GetSetInformationResponse(header, request, (FileSystemShare)share, state)); } else if (command is ReadRequest) { ReadRequest request = (ReadRequest)command; return(ReadWriteResponseHelper.GetReadResponse(header, request, share, state)); } else if (command is WriteRequest) { string userName = state.GetConnectedUserName(header.UID); if (share is FileSystemShare && !((FileSystemShare)share).HasWriteAccess(userName)) { header.Status = NTStatus.STATUS_ACCESS_DENIED; return(new ErrorResponse(command.CommandName)); } WriteRequest request = (WriteRequest)command; return(ReadWriteResponseHelper.GetWriteResponse(header, request, share, state)); } else if (command is CheckDirectoryRequest) { if (!(share is FileSystemShare)) { header.Status = NTStatus.STATUS_SMB_BAD_COMMAND; return(new ErrorResponse(command.CommandName)); } CheckDirectoryRequest request = (CheckDirectoryRequest)command; return(FileSystemResponseHelper.GetCheckDirectoryResponse(header, request, (FileSystemShare)share)); } else if (command is WriteRawRequest) { // [MS-CIFS] 3.3.5.26 - Receiving an SMB_COM_WRITE_RAW Request: // the server MUST verify that the Server.Capabilities include CAP_RAW_MODE, // If an error is detected [..] the Write Raw operation MUST fail and // the server MUST return a Final Server Response [..] with the Count field set to zero. return(new WriteRawFinalResponse()); } else if (command is SetInformation2Request) { if (!(share is FileSystemShare)) { header.Status = NTStatus.STATUS_SMB_BAD_COMMAND; return(new ErrorResponse(command.CommandName)); } SetInformation2Request request = (SetInformation2Request)command; return(FileSystemResponseHelper.GetSetInformation2Response(header, request, (FileSystemShare)share, state)); } else if (command is LockingAndXRequest) { header.Status = NTStatus.STATUS_ACCESS_DENIED; return(new ErrorResponse(CommandName.SMB_COM_LOCKING_ANDX)); } else if (command is OpenAndXRequest) { OpenAndXRequest request = (OpenAndXRequest)command; return(OpenAndXHelper.GetOpenAndXResponse(header, request, share, state)); } else if (command is ReadAndXRequest) { ReadAndXRequest request = (ReadAndXRequest)command; return(ReadWriteResponseHelper.GetReadResponse(header, request, share, state)); } else if (command is WriteAndXRequest) { string userName = state.GetConnectedUserName(header.UID); if (share is FileSystemShare && !((FileSystemShare)share).HasWriteAccess(userName)) { header.Status = NTStatus.STATUS_ACCESS_DENIED; return(new ErrorResponse(command.CommandName)); } WriteAndXRequest request = (WriteAndXRequest)command; return(ReadWriteResponseHelper.GetWriteResponse(header, request, share, state)); } else if (command is FindClose2Request) { return(ServerResponseHelper.GetFindClose2Request(header, (FindClose2Request)command, state)); } else if (command is TreeDisconnectRequest) { TreeDisconnectRequest request = (TreeDisconnectRequest)command; return(TreeConnectHelper.GetTreeDisconnectResponse(header, request, state)); } else if (command is TransactionRequest) // Both TransactionRequest and Transaction2Request { TransactionRequest request = (TransactionRequest)command; try { return(TransactionHelper.GetTransactionResponse(header, request, share, state, sendQueue)); } catch (UnsupportedInformationLevelException) { header.Status = NTStatus.STATUS_INVALID_PARAMETER; return(new ErrorResponse(command.CommandName)); } } else if (command is TransactionSecondaryRequest) // Both TransactionSecondaryRequest and Transaction2SecondaryRequest { TransactionSecondaryRequest request = (TransactionSecondaryRequest)command; try { return(TransactionHelper.GetTransactionResponse(header, request, share, state, sendQueue)); } catch (UnsupportedInformationLevelException) { header.Status = NTStatus.STATUS_INVALID_PARAMETER; return(new ErrorResponse(command.CommandName)); } } else if (command is NTTransactRequest) { NTTransactRequest request = (NTTransactRequest)command; return(NTTransactHelper.GetNTTransactResponse(header, request, share, state, sendQueue)); } else if (command is NTTransactSecondaryRequest) { NTTransactSecondaryRequest request = (NTTransactSecondaryRequest)command; return(NTTransactHelper.GetNTTransactResponse(header, request, share, state, sendQueue)); } else if (command is NTCreateAndXRequest) { NTCreateAndXRequest request = (NTCreateAndXRequest)command; return(NTCreateHelper.GetNTCreateResponse(header, request, share, state)); } } else { header.Status = NTStatus.STATUS_SMB_BAD_TID; return(new ErrorResponse(command.CommandName)); } } header.Status = NTStatus.STATUS_SMB_BAD_COMMAND; return(new ErrorResponse(command.CommandName)); }
internal void AddRenameRequest(RenameRequest req) { _renameRequests.Add(req); }