ftpd: Add MKD command #342

Merged
Burer merged 12 commits from igorsh/kolibrios:ftpd-add-mkd-command into main 2026-06-07 17:12:23 +00:00
Contributor

Added MKD command

Added MKD command
mxlgv requested changes 2026-02-23 21:40:32 +00:00
Dismissed
@@ -334,2 +334,4 @@
ret
align 4
console_fs_error:
Owner

Don't forget the server in floppy disk image. I think here you can write more optimally, for example, get a line with an error by index.

Don't forget the server in floppy disk image. I think here you can write more optimally, for example, get a line with an error by index.
mxlgv marked this conversation as resolved
@@ -1251,0 +1322,4 @@
mov byte [edi], 0x00
call create_path
dec edi
Owner

Bad ident

Bad ident
mxlgv marked this conversation as resolved
mxlgv added the Category/ApplicationsFASM
Kind
Feature
Priority
Low
PR
Request changes
labels 2026-02-23 22:16:44 +00:00
mxlgv requested changes 2026-02-25 18:16:13 +00:00
Dismissed
@@ -336,0 +337,4 @@
fs_err_table:
dd str_fs_error2 ; 2
dd str_fs_error3 ; 3
dd str_fs_error5 ; 5
Owner

I suggest using 4 as str_fs_error

I suggest using 4 as str_fs_error
Burer marked this conversation as resolved
@@ -336,0 +346,4 @@
dd str_fs_error11 ; 11
dd str_fs_error12 ; 12
console_fs_error:
Owner

I think you can shorten it something like this

console_fs_error:
        mov edx, 4 ;  Unknown filesystem error
       
        cmp     eax, 2
        jb      .print_err
        cmp     eax, 12
        ja       .print_err
       
        mov edx, eax
        
.print_err:
        sub     edx, 2
        mov     edx, [fs_err_table + edx*4]
        invoke  con_write_asciiz, edx
        ret
I think you can shorten it something like this ```asm console_fs_error: mov edx, 4 ; Unknown filesystem error cmp eax, 2 jb .print_err cmp eax, 12 ja .print_err mov edx, eax .print_err: sub edx, 2 mov edx, [fs_err_table + edx*4] invoke con_write_asciiz, edx ret ```
Burer marked this conversation as resolved
mxlgv requested changes 2026-02-25 18:29:38 +00:00
Dismissed
@@ -1251,0 +1323,4 @@
; called fs function
push ebx
dec esp
mov byte[esp], 0
Owner

May be xor eax, eax and push eax? I also don’t understand why there is mov and push here. push is smaller in size

May be `xor eax, eax` and `push eax`? I also don’t understand why there is `mov` and `push` here. `push` is smaller in size
Author
Contributor

Эта часть скопирована с cmdDELE. Если не добавить 1 байт в стек - получаю Page Fault.

Эта часть скопирована с **cmdDELE**. Если не добавить 1 байт в стек - получаю Page Fault.
mxlgv marked this conversation as resolved
mxlgv requested changes 2026-03-02 17:41:28 +00:00
Dismissed
@@ -1251,0 +1331,4 @@
push dword SSF_CREATE_FOLDER
mov ebx, esp
mcall SF_FILE
add esp, 6*4 + 1
Owner
I guess the problem (https://git.kolibrios.org/KolibriOS/kolibrios/pulls/342/files#issuecomment-4485) is here
Author
Contributor

No, at that line - mcall SF_FILE

No, at that line - `mcall SF_FILE`
Owner

You are right. I read SF 70 and understood why there is one byte.
But I would still recommend storing 0 in the register and then doing a push and mov.

You are right. I read SF 70 and understood why there is one byte. But I would still recommend storing 0 in the register and then doing a `push` and `mov`.
Author
Contributor

But I would still recommend storing 0 in the register and then doing a push and mov.

Немного не пойму что ты предлагаешь:
push ebx
xor eax, eax
push eax
add esp, 3

вместо
push ebx
dec esp
mov byte[esp], 0
?

> But I would still recommend storing 0 in the register and then doing a push and mov. Немного не пойму что ты предлагаешь: `push ebx` `xor eax, eax` `push eax` `add esp, 3` вместо `push ebx` `dec esp` `mov byte[esp], 0` ?
Owner

I suggest leaving it as is. I'm already confused myself.

I suggest leaving it as is. I'm already confused myself.
mxlgv marked this conversation as resolved
mxlgv approved these changes 2026-03-07 20:48:54 +00:00
mxlgv removed the
PR
Request changes
label 2026-03-07 20:49:08 +00:00
mxlgv requested review from Burer 2026-03-07 20:49:14 +00:00
Burer added 4 commits 2026-03-14 11:18:15 +00:00
ftpd: Simplify console_fs_error logic
Build system / Check kernel codestyle (pull_request) Successful in 23s
Build system / Build (pull_request) Successful in 9m22s
27c3bcbbd0
Burer force-pushed ftpd-add-mkd-command from e72e908c1a to 27c3bcbbd0 2026-03-14 11:18:15 +00:00 Compare
Burer requested changes 2026-03-14 11:39:47 +00:00
Dismissed
Burer left a comment
Owner
  1. MKD не проверяет, что путь вообще передан, и при пустом аргументе может попытаться создать текущий каталог вместо того, чтобы вернуть ошибку, в programs/network/ftpd/commands.inc (line 1348). В отличие от cmdDELE (line 496), cmdRETR (line 981) и cmdSTOR (line 1079), здесь нет проверки вида sub ecx, 5 / jb .... Для MKD\r\n код соберёт пустое имя, вызовет create_path, и дальше операция пойдёт по пути текущей директории, что выглядит как неверное поведение.

  2. MKD обрабатывает абсолютные пути не так, как остальные файловые команды, в programs/network/ftpd/commands.inc (line 1369). В DELE/RETR/STOR есть специальное пропускание ведущего / перед дописыванием к fpath (см. commands.inc (line 512), commands.inc (line 998), commands.inc (line 1099)). У MKD этого нет, поэтому MKD /foo будет собираться иначе, чем аналогичные операции над файлами. Это как минимум несогласованность поведения, а возможно и неправильная логика.

1. ~~MKD не проверяет, что путь вообще передан, и при пустом аргументе может попытаться создать текущий каталог вместо того, чтобы вернуть ошибку, в programs/network/ftpd/commands.inc (line 1348). В отличие от cmdDELE (line 496), cmdRETR (line 981) и cmdSTOR (line 1079), здесь нет проверки вида `sub ecx, 5 / jb ...`. Для MKD\r\n код соберёт пустое имя, вызовет create_path, и дальше операция пойдёт по пути текущей директории, что выглядит как неверное поведение.~~ 2. ~~MKD обрабатывает абсолютные пути не так, как остальные файловые команды, в programs/network/ftpd/commands.inc (line 1369). В DELE/RETR/STOR есть специальное пропускание ведущего / перед дописыванием к fpath (см. commands.inc (line 512), commands.inc (line 998), commands.inc (line 1099)). У MKD этого нет, поэтому MKD /foo будет собираться иначе, чем аналогичные операции над файлами. Это как минимум несогласованность поведения, а возможно и неправильная логика.~~
igorsh changed title from ftpd: Add mkd command to ftpd: Add MKD command 2026-03-15 06:50:51 +00:00
igorsh marked the pull request as work in progress 2026-03-21 06:27:39 +00:00
igorsh added 2 commits 2026-06-02 18:56:55 +00:00
ftpd: Check "/"
Build system / Check kernel codestyle (pull_request) Successful in 26s
Build system / Build (pull_request) Successful in 11m5s
1d20c72bcd
igorsh marked the pull request as ready for review 2026-06-02 19:00:21 +00:00
igorsh added 1 commit 2026-06-02 19:06:31 +00:00
cmd_MKD -> cmdMKD
Build system / Check kernel codestyle (pull_request) Successful in 39s
Build system / Build (pull_request) Successful in 10m39s
41591d9264
Burer requested review from Doczom 2026-06-02 19:13:29 +00:00
Burer requested review from dunkaist 2026-06-02 19:13:29 +00:00
Owner

Hi, @igorsh.
PR is okay overall, but I propose this changes before it got merged.
Please, check them.

ftpd.asm
commands.inc

Hi, @igorsh. PR is okay overall, but I propose this changes before it got merged. Please, check them. [ftpd.asm](/attachments/966d763f-a55b-47e7-a890-19222908410f) [commands.inc](/attachments/8708c854-a594-4ed1-b999-4f7a83a14d0e)
Doczom requested changes 2026-06-05 14:12:21 +00:00
Dismissed
@@ -1313,0 +1355,4 @@
mov ecx, 1024
cmp byte[esi], 0x20
jb .error
Owner

An undefined value in the eax register

An undefined value in the eax register
Burer marked this conversation as resolved
igorsh added 1 commit 2026-06-06 07:14:55 +00:00
ftpd: Improve code
Build system / Check kernel codestyle (pull_request) Successful in 1m33s
Build system / Build (pull_request) Successful in 11m55s
ad32a51776
Burer requested changes 2026-06-06 08:45:37 +00:00
Dismissed
Burer left a comment
Owner

1: Сломана проверка пустого аргумента

ecx включает завершающий CR/LF, поэтому проверка по длине не отличает пустое MKD\r\n (ecx=5, 5-5=0, не jb) от 1-символьного имени - пустой аргумент проходит, и SF_CREATE_FOLDER вызывается на текущем каталоге. Проверка первого байта аргумента надёжна независимо от CR/LF и разделителя.

Исправление:

-        sub     ecx, 5
+        cmp     byte [ebp + thread_data.buffer + 4], 0x20
         jb      .error

2: Ответ 257 отдаёт абсолютный путь сервера

fpath = home_dir + work_dir + имя (реальный путь на сервере): отдавать его в 257 - это утечка структуры ФС и поломка round-trip (клиент подставит путь в CWD => демон снова допишет home_dir). Эхо-им запрошенный клиентом путь (buffer+4); ответ собираем в fpath (после syscall не нужен), чтобы не было самоперекрытия буфера.

Исправление:

-        lea     edi, [ebp + thread_data.buffer]
+        lea     edi, [ebp + thread_data.fpath]
         mov     eax, '257 '
         stosd
         mov     al, '"'
         stosb
-        lea     esi, [ebp + thread_data.fpath]
+        lea     esi, [ebp + thread_data.buffer + 4]
     .reply_send:
         mov     ecx, [ebp + thread_data.socketnum]
-        lea     edx, [ebp + thread_data.buffer]
+        lea     edx, [ebp + thread_data.fpath]
1: Сломана проверка пустого аргумента `ecx` включает завершающий CR/LF, поэтому проверка по длине не отличает пустое `MKD\r\n` (ecx=5, `5-5=0`, не `jb`) от 1-символьного имени - пустой аргумент проходит, и `SF_CREATE_FOLDER` вызывается на текущем каталоге. Проверка первого байта аргумента надёжна независимо от CR/LF и разделителя. Исправление: ```diff - sub ecx, 5 + cmp byte [ebp + thread_data.buffer + 4], 0x20 jb .error ``` 2: Ответ 257 отдаёт абсолютный путь сервера `fpath` = `home_dir + work_dir + имя` (реальный путь на сервере): отдавать его в 257 - это утечка структуры ФС и поломка round-trip (клиент подставит путь в `CWD` => демон снова допишет `home_dir`). Эхо-им запрошенный клиентом путь (`buffer+4`); ответ собираем в `fpath` (после syscall не нужен), чтобы не было самоперекрытия буфера. Исправление: ```diff - lea edi, [ebp + thread_data.buffer] + lea edi, [ebp + thread_data.fpath] mov eax, '257 ' stosd mov al, '"' stosb - lea esi, [ebp + thread_data.fpath] + lea esi, [ebp + thread_data.buffer + 4] ``` ```diff .reply_send: mov ecx, [ebp + thread_data.socketnum] - lea edx, [ebp + thread_data.buffer] + lea edx, [ebp + thread_data.fpath] ```
igorsh added 1 commit 2026-06-06 11:45:16 +00:00
ftpd: Do not show full path
Build system / Check kernel codestyle (pull_request) Successful in 35s
Build system / Build (pull_request) Successful in 14m49s
4f8acf0a7e
Burer added 1 commit 2026-06-06 14:16:50 +00:00
apps/ftpd: full created directory path in MKD reply
Build system / Check kernel codestyle (pull_request) Successful in 27s
Build system / Build (pull_request) Successful in 10m15s
fc56464396
Doczom requested changes 2026-06-06 15:51:03 +00:00
Dismissed
@@ -1313,0 +1350,4 @@
test [ebp + thread_data.permissions], PERMISSION_WRITE
jz permission_denied
mov eax, 4 ; Unknown filesystem error
Owner

костыль
UPD: при обнаружении ошибочного запроса, который не может быть корректно обработан сервером, клиенту должно отправляться сообщение об ошибке(что реализовано), но при этом, так как не возникла ошибка файловой системы в консоль не должно выводится ошибочное сообщение о проблемах с фс

костыль UPD: при обнаружении ошибочного запроса, который не может быть корректно обработан сервером, клиенту должно отправляться сообщение об ошибке(что реализовано), но при этом, так как не возникла ошибка файловой системы в консоль не должно выводится ошибочное сообщение о проблемах с фс
Owner

Should be fixed, check, please.

Should be fixed, check, please.
Burer marked this conversation as resolved
Burer added 1 commit 2026-06-07 14:25:50 +00:00
apps/ftpd: don't report FS error for invalid MKD request
Build system / Check kernel codestyle (pull_request) Successful in 23s
Build system / Build (pull_request) Failing after 32s
14df7a1ccf
Burer added 1 commit 2026-06-07 15:44:23 +00:00
Remove accidentally committed kterm submodule
Build system / Check kernel codestyle (pull_request) Successful in 37s
Build system / Build (pull_request) Successful in 17m18s
7ad6cc3e28
Doczom approved these changes 2026-06-07 17:00:49 +00:00
Burer approved these changes 2026-06-07 17:09:54 +00:00
Burer merged commit ae758389f5 into main 2026-06-07 17:12:23 +00:00
Burer deleted branch ftpd-add-mkd-command 2026-06-07 17:12:23 +00:00
Sign in to join this conversation.
4 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: KolibriOS/kolibrios#342