Skip to content

Commit 09521ad

Browse files
committed
SimpleShell to run only executable program
1 parent 77540cd commit 09521ad

File tree

3 files changed

+15
-15
lines changed

3 files changed

+15
-15
lines changed

src/drivers/keyboard/scancode_handler.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,7 @@ static const unsigned char KEYBOARD_ASCII_MAPH_OTHERS[] = {
193193
KEYBOARD_SC_RPF0_keypad_minus, '-',
194194
KEYBOARD_SC_RPF0_keypad_mul, '*',
195195
KEYBOARD_SC_RPF0_keypad_plus, '+',
196-
KEYBOARD_SC_PE0_RPF0_keypad_enter , '\n'
197-
196+
KEYBOARD_SC_PE0_RPF0_keypad_enter, '\n'
198197
};
199198

200199
static unsigned char KEYBOARD_ASCII_MAPPING[256];

src/kernel/process/process.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,10 @@ int syscall_1_process_spawn_fname(unsigned int user_pid,
8383
union FFSFileEntry entry;
8484
int file_id = file_handler_find(filename, &entry);
8585
if (file_id < 0) return file_id;
86-
86+
if (!(entry.content.flags & FFS_FILE_FLAG_EXECUTABLE)) {
87+
// allow only executable files to spawn
88+
return -1;
89+
}
8790

8891
int lba_start = resolve_abs_lba(FFS_UNIQUE_PARITION_ID, entry.content.start_block_id);
8992
int sector_count = (entry.content.filesize + FS_BLOCK_SIZE -1)/FS_BLOCK_SIZE;

src/usr/local/src/sh.c

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ int cmd_help() {
1616
printf("commands\n");
1717
printf(" > help print the available commands\n");
1818
printf(" > exit kill the current shell\n");
19-
printf(" > run ls print list of files\n");
20-
printf(" > run <filename> [arg1]... execute available program\n");
19+
printf(" > <filename> [arg1]... execute executable program\n");
20+
printf(" > ls -h example to show ls usage\n");
2121
return 0;
2222
}
2323

@@ -31,22 +31,20 @@ static char *copy_arg(char *dst, char *src) {
3131
return dst;
3232
}
3333

34-
int cmd_run() {
34+
int cmd_run(char *cmd) {
3535
char *argv[PROCESS_MAX_ARGC];
3636
char argv_data[PROCESS_MAX_ARGC][PROCESS_MAX_ARG_LEN] = {0};
3737

3838
char *token;
3939
int argc = 0;
40+
argv[argc] = copy_arg(argv_data[argc], cmd); // executable filename
41+
argc++;
4042
while ((token = strtok(NULL, COMMAND_DELIM)) != NULL && argc < PROCESS_MAX_ARGC-1) {
4143
argv[argc] = copy_arg(argv_data[argc], token);
4244
argc++;
4345
}
4446
argv[argc] = NULL;
45-
if (argc == 0) {
46-
printf("invalid syntax\n");
47-
printf("usage: run <filename> [arg1...]\n");
48-
return -2;
49-
}
47+
5048
char *filename = argv[0];
5149
int pid = spawnv(filename, argv);
5250
if (pid < 0) {
@@ -73,11 +71,11 @@ void handle_command(char *full_cmd) {
7371
last_status_code = cmd_help();
7472
} else if (strcmp(cmd, "exit")==0) {
7573
last_status_code = cmd_exit();
76-
} else if (strcmp(cmd, "run")==0) {
77-
last_status_code = cmd_run(cmd);
7874
} else {
79-
printf("'%s' command not found\n", cmd);
80-
last_status_code = 404;
75+
last_status_code = cmd_run(cmd);
76+
if (last_status_code < 0) {
77+
printf("failed to run '%s' command\n", cmd);
78+
}
8179
}
8280
}
8381

0 commit comments

Comments
 (0)