int shell_session(int argc, char *argv[]) { char line[128]; printf("CC3000 command shell -- NuttX style\n"); printf("Type '?' and return for help\n"); #ifdef CONFIG_EXAMPLES_CC3000_MEM_CHECK stkmon_disp(); #endif for (;;) { printf(SHELL_PROMPT); fflush(stdout); if (fgets(line, 128, stdin) == NULL) { break; } shell_parse(line, 128); } return 0; }
int main( void ) { char buf[128] = {}; while ( 1 ) { printf("shell # "); fgets(buf, 128, stdin); shell_parse(buf); } return 0; }
int mymain(void) { char buf[100]; int argc = 0; char * argv[10]; int i = 0; // system sys_init(); // uart init uart_init(); //puts("hello, world! \n"); puts("\n\n" __DATE__ " " __TIME__ "\n"); puts("welcome to my boot v1.0 \n"); //printf("hello, world\n"); //printf("test: %c\n", 'A'); //printf("test: %s\n", "abcdefghihk"); //printf("test: %d %d\n", 123, 0); printf("test: %c,%s,%d,%x\n", 'A', "abcdef", 11, 0x23); // UTXH0 -> data while (1) { puts("akaedu $ "); gets(buf); puts("your input:"); puts(buf); puts("\n"); argc = shell_parse(buf, argv); for (i = 0; i < argc; i++) { puts(argv[i]); puts("\n"); } //if (strcmp(argv[0], "help") == 0) // puts("this is system help\n"); } while(1); return 0; }
void shell_loop() { while (shell_quit == false) { if (shell_wait == true) { __asm__ __volatile("nop"); } else { shell_parse(); shell_wait_cmd(); } } }
int mymain(void) { char buf[100]; int argc = 0; char * argv[8]; int i; // clock init, watch dog disable sys_init(); // UART init uart_init(); printf("\n\nwelcome to my boot v1.0 \n"); printf("Date is %s\n", __DATE__); printf("Version is 0x%x\n", 0x87654321); while(1) { printf("Jobs $ "); gets(buf); printf("user input: <%s>\n", buf); // shell parse buf -> argc, argv[] shell_parse(buf, &argc, argv); for (i = 0; i < argc; i++) printf("%x: <%s>\n", i, argv[i]); // command: help if (strcmp(argv[0], "help") == 0) help(argc, argv); if (strcmp(argv[0], "md") == 0) md(argc, argv); if (strcmp(argv[0], "mw") == 0) mw(argc, argv); } return 0; }
int main(int argc, char *argv[]) { int i = 0; char buf[64]; printf("demo argc & argv \n"); //scanf("%s", buf); //gets(buf); while (1) { printf("NCCL# "); fgets(buf, 64, stdin); //printf("buf = %s\n", buf); shell_parse(buf); } return 0; }
void shell_do(struct cmd_def **defs) { using_history(); while (1) { char *line; char prompt[256]; dpl_ino_t cur_ino; cur_ino = dpl_cwd(ctx, ctx->cur_bucket); snprintf(prompt, sizeof (prompt), "%s:%s%s> ", ctx->cur_bucket, ctx->delim, cur_ino.key); if ((line = readline(prompt))) { enum shell_error shell_err; int ret; ret = shell_parse(defs, line, &shell_err); if (ret == SHELL_EPARSE) { fprintf(stderr, "parsing: %s\n", shell_error_str(shell_err)); } else if (ret == SHELL_RETURN) { return ; } if (strcmp(line, "")) add_history(line); free(line); } else { fprintf(stderr, "quit\n"); return ; } } }
int mymain(void) { int argc = 0; char * argv[10]; int i = 0; led_init(); uart_init(); nand_init(); nand_read_id(buf); putchar_hex(buf[0]); putchar_hex(buf[1]); putchar_hex(buf[2]); putchar_hex(buf[3]); putchar_hex(buf[4]); printf("\n\n" __DATE__ " " __TIME__ "\n"); printf("welcome to my boot v1.0 \n\n"); //printf("test: %c,%s,%d,%x\n", 'A', "abcdef", 11, 0x23); while (1) { printf("LUMIT $ "); gets(buf); printf("your input: <%s>\n", buf); argc = shell_parse(buf, argv); for (i = 0; i < argc; i++) printf("%d: <%s>\n", i, argv[i]); command_do(argc, argv); } }
void shell_eval(const char *command) { shell_parse(command, _do_or_die); }
int main(const int argc, char * const argv[]) /*@globals environ, errno@*/ /*@modifies environ, errno@*/ { struct passwd *pw; char **target_env = environ; static char *empty_env[] = { NULL }; environ = empty_env; (void) umask(~(mode_t)0); /* (no file perms, if signalled to dump core)*/ /* check that calling UID exists, is not root, and shell matches */ if (NULL != (pw = getpwuid(getuid())) && 0 != pw->pw_uid && 0 == memcmp(pw->pw_shell,CHROOTING_SHELL,sizeof(CHROOTING_SHELL)) ) { /* require commands of the form: "sh" "-c" "command args args args" */ if (3 == argc && 0 == memcmp(argv[1], "-c", 3)) { const char *chroot_dir = (const char *)pw->pw_dir; const char *home = "/"; struct stat st; if (0 == memcmp(pw->pw_dir, GROUP_CHROOT_DIR, sizeof(GROUP_CHROOT_DIR)-1) && getgroups(0, (gid_t *)NULL) > 1) { chroot_dir = GROUP_CHROOT_DIR; home = (const char *)pw->pw_dir+(sizeof(GROUP_CHROOT_DIR)-2); if (*home != '/' && *++home != '/') { home = "/"; } } if (!( 0 == stat(chroot_dir, &st) && pw->pw_uid != st.st_uid /* (not caller; typically root) */ && 0 == (st.st_mode & (S_IWGRP|S_IWOTH)))) { fatal(argc, pw, chroot_dir); } openlog("chressh", LOG_NDELAY|LOG_PID, LOG_AUTHPRIV); if (/*@-superuser@*/ 0 == chroot(chroot_dir) /*@=superuser@*/ && 0 == setuid(getuid()) && 0 != setuid(0) && 0 == chdir(home)) { char **target_argv; size_t len; errno = 0; /* (reset errno after expected setuid(0) failure) */ environ = target_env = env_clean(target_env, pw, home); target_argv = shell_parse(argv[2]); if (NULL == target_argv || NULL == target_argv[0]) { fatal(argc, pw, NULL); } (void) umask((mode_t)UMASK); if (0 == strcmp(target_argv[0], "scp")) { if (0 == set_limits(NPROC_SCP)) { (void) execve(CHROOTED_CMD_DIR "scp", target_argv, target_env); } } else if (0 == strcmp(target_argv[0], "rsync")) { if (0 == filter_args_rsync(target_argv) && 0 == set_limits(NPROC_RSYNC)) { (void) execve(CHROOTED_CMD_DIR "rsync", target_argv, target_env); } } else if (0 == strcmp(target_argv[0], "unison")) { if (0 == filter_args_unison(target_argv) && 0 == set_limits(NPROC_UNISON)) { (void) execve(CHROOTED_CMD_DIR "unison", target_argv, target_env); } } else { if ( 11 <= (len = strlen(target_argv[0])) && 0 == memcmp(target_argv[0]+len-11, "sftp-server", 11) && 0 == set_limits(NPROC_SFTP_SERVER)) { /*('chressh -c /usr/local/libexec/sftp-server')*/ /*(only tests for "sftp-server" suffix, which is fine)*/ /*(discard additional args to sftp-server, if present)*/ char sftp_server[] = "sftp-server"; char *target_argv_static[] = { sftp_server, NULL }; (void) execve(CHROOTED_CMD_DIR "sftp-server", target_argv_static, target_env); } } #if 0 /* which code do you think is clearer? above or below? */ switch ((len = strlen(target_argv[0]))) { case 3: if (0 == memcmp(target_argv[0], "scp", 3) && 0 == set_limits(NPROC_SCP)) { (void) execve(CHROOTED_CMD_DIR "scp", target_argv, target_env); } break; case 5: if (0 == memcmp(target_argv[0], "rsync", 5) && 0 == filter_args_rsync(target_argv) && 0 == set_limits(NPROC_RSYNC)) { (void) execve(CHROOTED_CMD_DIR "rsync", target_argv, target_env); } break; case 6: if (0 == memcmp(target_argv[0], "unison", 6) && 0 == filter_args_unison(target_argv) && 0 == set_limits(NPROC_UNISON)) { (void) execve(CHROOTED_CMD_DIR "unison", target_argv, target_env); } break; default: if ( 11 <= len && 0 == memcmp(target_argv[0]+len-11, "sftp-server", 11) && 0 == set_limits(NPROC_SFTP_SERVER)) { /*('chressh -c /usr/local/libexec/sftp-server')*/ /*(only tests for "sftp-server" suffix, which is fine)*/ /*(discard additional args to sftp-server, if present)*/ char sftp_server[] = "sftp-server"; char *target_argv_static[] = { sftp_server, NULL }; (void) execve(CHROOTED_CMD_DIR "sftp-server", target_argv_static, target_env); } break; } #endif } } #ifdef PASSWD_PROGRAM /* If login attempt (argc == 1), use PASSWD_PROGRAM as 'shell' * (*argv[0] == '-', too, for login shells on most (all?) systems) * (privileges intentionally dropped even if passwd_program setuid) */ else if (1 == argc && 0 == setuid(getuid()) && 0 != setuid(0)) { char passwd_program[] = PASSWD_PROGRAM; char *target_argv[] = { passwd_program, NULL }; errno = 0; /* (reset errno after expected setuid(0) failure) */ target_env = env_clean(target_env, pw, NULL); (void) execve(PASSWD_PROGRAM, target_argv, target_env); } #endif } fatal(argc, pw, NULL); return 0; /*(UNREACHED)*/ }