예제 #1
0
파일: cmd3.c 프로젝트: AhmadTux/freebsd
/*
 * Process a shell escape by saving signals, ignoring signals,
 * and forking a sh -c
 */
int
shell(char *str)
{
	sig_t sigint = signal(SIGINT, SIG_IGN);
	char *sh;
	char cmd[BUFSIZ];

	if (strlcpy(cmd, str, sizeof(cmd)) >= sizeof(cmd))
		return (1);
	if (bangexp(cmd, sizeof(cmd)) < 0)
		return (1);
	if ((sh = value("SHELL")) == NULL)
		sh = _PATH_CSHELL;
	(void)run_command(sh, 0, -1, -1, "-c", cmd, NULL);
	(void)signal(SIGINT, sigint);
	printf("!\n");
	return (0);
}
예제 #2
0
파일: cmd3.c 프로젝트: ajinkya93/OpenBSD
/*
 * Process a shell escape by saving signals, ignoring signals,
 * and forking a sh -c
 */
int
shell(void *v)
{
	char *str = v;
	char *shell;
	char cmd[BUFSIZ];
	struct sigaction oact;
	sigset_t oset;

	(void)ignoresig(SIGINT, &oact, &oset);
	(void)strlcpy(cmd, str, sizeof(cmd));
	if (bangexp(cmd, sizeof(cmd)) < 0)
		return(1);
	shell = value("SHELL");
	(void)run_command(shell, 0, 0, -1, "-c", cmd, NULL);
	(void)sigprocmask(SIG_SETMASK, &oset, NULL);
	(void)sigaction(SIGINT, &oact, NULL);
	puts("!");
	return(0);
}