Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
184 changes: 92 additions & 92 deletions labels/debug.asm

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions labels/flagparser.asm
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ section .text
parse_flags:
mov rbp, rsp

mov qword [flag_env_path], 0 ; default: not set
mov byte [flag_help], 0
mov byte [flag_version], 0
mov qword [rel flag_env_path], 0 ; default: not set
mov byte [rel flag_help], 0
mov byte [rel flag_version], 0

cmp r15, 1 ; argc = 1: no args passed
je .done
Expand Down Expand Up @@ -66,7 +66,7 @@ parse_flags:
jmp .arg_not_recognized

.is_h:
mov byte [flag_help], 1
mov byte [rel flag_help], 1
call .remove_arg

dec r15
Expand All @@ -81,7 +81,7 @@ parse_flags:
jge .error_e ; -e with no value, ignore

mov rax, [rbp + 8 + 8 + rax * 8] ; argv[rcx+1]
mov [flag_env_path], rax
mov [rel flag_env_path], rax

; remove -e from argv
call .remove_arg
Expand All @@ -94,7 +94,7 @@ parse_flags:
jmp .next_arg

.is_v:
mov byte [flag_version], 1
mov byte [rel flag_version], 1
call .remove_arg

dec r15
Expand Down
50 changes: 25 additions & 25 deletions labels/initialsetup.asm
Original file line number Diff line number Diff line change
Expand Up @@ -142,21 +142,21 @@ section .text
initial_setup:
call .build_server_name ; first of all, build the server name with default_name + version

cmp byte [flag_help], 1 ; -h passed
cmp byte [rel flag_help], 1 ; -h passed
je .display_help

cmp byte [flag_version], 1 ; -v passed
cmp byte [rel flag_version], 1 ; -v passed
je .display_version

mov r14, [flag_env_path]
mov r14, [rel flag_env_path]
test r14, r14
jz .use_default ; -e not passed

FILE_EXISTS r14
cmp rax, 1
jne .failed_read_file

lea rcx, [env_path_buf]
lea rcx, [rel env_path_buf]

.copy_argv1:
mov al, [r14]
Expand All @@ -171,8 +171,8 @@ initial_setup:
jmp .get_uid

.use_default:
lea r14, [env_path]
lea rcx, [env_path_buf]
lea r14, [rel env_path]
lea rcx, [rel env_path_buf]

.copy_default:
mov al, [r14]
Expand All @@ -188,7 +188,7 @@ initial_setup:
; getuid()
mov rax, 102
syscall
mov [current_uid], eax
mov [rel current_uid], eax

.get_pid:
GET_PID
Expand All @@ -214,19 +214,19 @@ initial_setup:
; port: read as ascii, then convert to integer
ENV_DEFAULT env_path_buf, key_port, word_str_buf, 8, default_port
ATOI word_str_buf, rax
mov word [port], ax
mov word [rel port], ax

ENV_DEFAULT env_path_buf, key_maxconns, word_str_buf, 8, default_maxconns ; reuse word_str_buf, we're done with it
ATOI word_str_buf, rax
mov word [max_requests], ax
mov word [rel max_requests], ax

ENV_DEFAULT env_path_buf, key_maxage, max_age_str, 12, default_maxage
ATOI max_age_str, rax
mov dword [max_age], eax
mov dword [rel max_age], eax

ENV_DEFAULT env_path_buf, key_linger_to, max_age_str, 12, default_linger_to
ATOI max_age_str, rax
mov dword [linger_to], eax
mov dword [rel linger_to], eax

ENV_DEFAULT env_path_buf, key_servedots, serve_dots_str, 5, default_servedots
BOOL_FLAG serve_dots_str, serve_dots
Expand All @@ -251,21 +251,21 @@ initial_setup:
ENV_DEFAULT env_path_buf, key_bindaddr, bind_addr_str, 16, default_bindaddr

; build sockaddr from the now-loaded port/interface
movzx eax, word [port]
movzx eax, word [rel port]
xchg al, ah ; htons(), swap bytes for big-endian
mov word [sockaddr + 2], ax
mov word [rel sockaddr + 2], ax

; inet_pton(af, src, dst)
mov rdi, 2 ; AF_INET (ipv4)
lea rsi, [bind_addr_str]
lea rdx, [interface]
lea rsi, [rel bind_addr_str]
lea rdx, [rel interface]
call inet_pton

cmp rax, 0
jle .bad_bind_addr ; 0 = invalid format, -1 = unsupported af

mov eax, [interface]
mov dword [sockaddr + 4], eax
mov eax, [rel interface]
mov dword [rel sockaddr + 4], eax

; build errordoc full paths (document_root + errordoc_*)
BUILDPATH errordoc_405_path, document_root, errordoc_405
Expand All @@ -279,32 +279,32 @@ initial_setup:
ret ; initial_setup return point

.build_server_name:
lea r14, [server_w_ver]
lea r14, [rel server_w_ver]
AAPPEND r14, default_name
AAPPEND r14, version
ret ; .build_server_name return point

.open_logfile:
cmp byte [log_file_path], 0
cmp byte [rel log_file_path], 0
je .no_log_file

OPEN_FILE_A log_file_path

cmp rax, 0
jl .no_log_file ; failed to open / create it

mov qword [log_file], rax
mov qword [rel log_file], rax

jmp .log_file_end

.no_log_file:
mov qword [log_file], 1 ; no log file = stdout
mov qword [rel log_file], 1 ; no log file = stdout

.log_file_end:
ret ; open_logfile len

.parse_log_level:
lea rax, [log_level_str]
lea rax, [rel log_level_str]

; "debug"
cmp dword [rax], 'debu'
Expand All @@ -313,7 +313,7 @@ initial_setup:
cmp byte [rax+4], 'g'
jne .check_none

mov byte [log_level], 2
mov byte [rel log_level], 2

jmp .log_level_end

Expand All @@ -322,13 +322,13 @@ initial_setup:
cmp dword [rax], 'none'
jne .check_info

mov byte [log_level], 0
mov byte [rel log_level], 0

jmp .log_level_end

.check_info:
; "info" or anything unrecognized = 0
mov byte [log_level], 1
mov byte [rel log_level], 1
ret

.log_level_end:
Expand Down
62 changes: 31 additions & 31 deletions labels/preserve.asm
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,11 @@ pre_serve:

.chroot:
; chroot into the document_root
mov eax, [current_uid]
mov eax, [rel current_uid]
cmp eax, 0
jne .chroot_end

cmp byte [use_chroot], 1
cmp byte [rel use_chroot], 1
jne .chroot_end

.do_chroot:
Expand All @@ -96,8 +96,8 @@ pre_serve:
call dbg_chroot_success

; set document_root to default_docroot (".")
mov ax, [default_docroot]
mov [document_root], ax
mov ax, [rel default_docroot]
mov [rel document_root], ax

; rebuild errordoc paths now that we're inside the jail
BUILDPATH errordoc_405_path, document_root, errordoc_405
Expand All @@ -118,11 +118,11 @@ pre_serve:

.im_nobody:
; sets current user to "nobody" for minimal privileges (if root)
mov eax, [current_uid]
mov eax, [rel current_uid]
cmp eax, 0
jne .nobody_end

cmp byte [be_nobody], 1
cmp byte [rel be_nobody], 1
jne .nobody_end

; setuid(uid)
Expand All @@ -133,7 +133,7 @@ pre_serve:
cmp rax, 0
jl .nobody_fail

mov dword [current_uid], 65534
mov dword [rel current_uid], 65534

LOG_DEBUG log_nobody_succeeded, log_nobody_succeeded_len
jmp .nobody_end
Expand All @@ -156,23 +156,23 @@ pre_serve:
; setups the SIGCHLD handler (child exits)

; 0 the struct
lea rdi, [sigaction]
lea rdi, [rel sigaction]
mov rcx, 152
xor al, al
rep stosb

lea rax, [.sigchld_handler]
mov [sigaction], rax ; sa_handler
lea rax, [rel .sigchld_handler]
mov [rel sigaction], rax ; sa_handler

mov qword [sigaction + 8], 0x14000000 ; sa_flags SA_RESTART | SA_RESTORER
mov qword [rel sigaction + 8], 0x14000000 ; sa_flags SA_RESTART | SA_RESTORER

lea rax, [.sig_restorer]
mov [sigaction + 16], rax ; sa_restorer
lea rax, [rel .sig_restorer]
mov [rel sigaction + 16], rax ; sa_restorer

; rt_sigaction(signum, newact, oldact)
mov rax, 13
mov rdi, 17 ; SIGCHLD
lea rsi, [sigaction]
lea rsi, [rel sigaction]
xor rdx, rdx
mov r10, 8 ; "sigsetsize"
syscall
Expand Down Expand Up @@ -207,7 +207,7 @@ pre_serve:
cmp rax, 0
jle .sigchld_ok ; no child reaped, stop

dec word [process_count]
dec word [rel process_count]

call dbg_process_reaped
jmp .sigchld_handler
Expand All @@ -219,23 +219,23 @@ pre_serve:
; setups the SIGTERM handler

; 0 the struct
lea rdi, [sigaction]
lea rdi, [rel sigaction]
mov rcx, 152
xor al, al
rep stosb

lea rax, [.sigterm_handler]
mov [sigaction], rax ; sa_handler
lea rax, [rel .sigterm_handler]
mov [rel sigaction], rax ; sa_handler

mov qword [sigaction + 8], 0x04000000 ; sa_flag SA_RESTORER
mov qword [rel sigaction + 8], 0x04000000 ; sa_flag SA_RESTORER

lea rax, [.sig_restorer]
mov [sigaction + 16], rax ; sa_restorer
lea rax, [rel .sig_restorer]
mov [rel sigaction + 16], rax ; sa_restorer

; rt_sigaction(signum, newact, oldact)
mov rax, 13
mov rdi, 15 ; SIGTERM
lea rsi, [sigaction]
lea rsi, [rel sigaction]
xor rdx, rdx
mov r10, 8 ; "sigsetsize"
syscall
Expand All @@ -257,30 +257,30 @@ pre_serve:
ret ; return point for .sigterm_setup

.sigterm_handler:
mov byte [shutdown], 1
mov byte [rel shutdown], 1
ret ; return point for .sigterm_handler

.sigint_setup:
; setups the SIGINT handler

; 0 the struct
lea rdi, [sigaction]
lea rdi, [rel sigaction]
mov rcx, 152
xor al, al
rep stosb

lea rax, [.sigint_handler]
mov [sigaction], rax ; sa_handler
lea rax, [rel .sigint_handler]
mov [rel sigaction], rax ; sa_handler

mov qword [sigaction + 8], 0x04000000 ; sa_flag SA_RESTORER
mov qword [rel sigaction + 8], 0x04000000 ; sa_flag SA_RESTORER

lea rax, [.sig_restorer]
mov [sigaction + 16], rax ; sa_restorer
lea rax, [rel .sig_restorer]
mov [rel sigaction + 16], rax ; sa_restorer

; rt_sigaction(signum, newact, oldact)
mov rax, 13
mov rdi, 2 ; SIGINT
lea rsi, [sigaction]
lea rsi, [rel sigaction]
xor rdx, rdx
mov r10, 8 ; "sigsetsize"
syscall
Expand All @@ -302,7 +302,7 @@ pre_serve:
ret ; return point for .sigint_setup

.sigint_handler:
mov byte [shutdown], 1
mov byte [rel shutdown], 1
ret ; return point for .sigint_handler

.fail_socket:
Expand Down
Loading
Loading