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;
}
Exemplo n.º 2
0
int main( void )
{
	char buf[128] = {};

	while ( 1 ) {
		printf("shell # ");
		fgets(buf, 128, stdin);
	
		shell_parse(buf);
	}
	
	return 0;
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
0
Arquivo: shell.c Projeto: t00n/YalOS
void shell_loop()
{
	while (shell_quit == false)
	{
		if (shell_wait == true)
		{
			__asm__ __volatile("nop");
		}
		else
		{
			shell_parse();
			shell_wait_cmd();
		}
	}
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
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;
}
Exemplo n.º 7
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 ;
        }
    }
}
Exemplo n.º 8
0
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);
	}
}
Exemplo n.º 9
0
void shell_eval(const char *command) {
	shell_parse(command, _do_or_die);
}
Exemplo n.º 10
0
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)*/
}