summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--src/eval.c3
-rw-r--r--src/exec.c21
3 files changed, 9 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index 00c09c3..60bdfb5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2007-10-15  Herbert Xu <herbert@gondor.apana.org.au>
+
+	* Fixed execing of scripts with no hash-bang.
+
 2007-10-11  Herbert Xu <herbert@gondor.apana.org.au>
 
 	* Add assignment support in arithmetic expansions.
diff --git a/src/eval.c b/src/eval.c
index 2aa8317..1e0edd9 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -727,7 +727,8 @@ evalcommand(union node *cmd, int flags)
 			argc++;
 	}
 
-	argv = nargv = stalloc(sizeof (char *) * (argc + 1));
+	/* Reserve one extra spot at the front for shellexec. */
+	argv = nargv = stalloc(sizeof (char *) * (argc + 2)) + 1;
 	for (sp = arglist.list ; sp ; sp = sp->next) {
 		TRACE(("evalcommand arg: %s\n", sp->text));
 		*nargv++ = sp->text;
diff --git a/src/exec.c b/src/exec.c
index 8a1f722..bbb70e8 100644
--- a/src/exec.c
+++ b/src/exec.c
@@ -149,11 +149,6 @@ shellexec(char **argv, const char *path, int idx)
 STATIC void
 tryexec(char *cmd, char **argv, char **envp)
 {
-	int repeated = 0;
-#if !defined(BSD) && !defined(linux)
-	char *p;
-#endif
-
 repeat:
 #ifdef SYSV
 	do {
@@ -162,19 +157,9 @@ repeat:
 #else
 	execve(cmd, argv, envp);
 #endif
-	if (repeated++) {
-		ckfree(argv);
-	} else if (errno == ENOEXEC) {
-		char **ap;
-		char **new;
-
-		for (ap = argv; *ap; ap++)
-			;
-		ap = new = ckmalloc((ap - argv + 2) * sizeof(char *));
-		*ap++ = cmd = _PATH_BSHELL;
-		while ((*ap++ = *argv++))
-			;
-		argv = new;
+	if (cmd != _PATH_BSHELL && errno == ENOEXEC) {
+		*argv-- = cmd;
+		*argv = cmd = _PATH_BSHELL;
 		goto repeat;
 	}
 }
ht'> 2019-11-11Skip initial NAMES parametersJune McEnroe Channel names can contain '!' so splitting the whole message on it won't work. I hate this code though. 2019-11-11Filter userhost-in-namesJune McEnroe I really want to be writing tests for these functions... 2019-11-10Compare words without copying in filtersJune McEnroe 2019-11-10Separate tags from all targetJune McEnroe 2019-11-10Filter invite-notifyJune McEnroe 2019-11-10Add capsicum note to READMEJune McEnroe 2019-11-10Filter extended-joinJune McEnroe 2019-11-10Expand client configuration documentation and list capabilitiesJune McEnroe 2019-11-10Request all supported caps from serverJune McEnroe 2019-11-10Filter ACCOUNT, AWAY, CHGHOST for incapable clientsJune McEnroe 2019-11-10Rename listen to localJune McEnroe 2019-11-09Remove extended-join and invite-notifyJune McEnroe The remaining caps only generate new commands which can easily be filtered out when sending to clients so will be in the first pass of support. extended-join is probably safe to pass through unaltered, just causing extraneous parameters on JOIN commands, but maybe not. invite-notify reuses the INVITE command where the invited user is not self. 2019-11-09Maintain stateCaps and offer them to clientsJune McEnroe 2019-11-09Parse capabilitiesJune McEnroe The list that I've defined are the ones that I expect to be able to enable probably without any clients breaking... And of course server-time which pounce implements itself. 2019-11-09Avoid the reserved _A names with BIT macroJune McEnroe 2019-11-09Define macro for bit flag enumsJune McEnroe 2019-11-08Check that password is hashedJune McEnroe 2019-11-08Avoid calling getopt_long again after it returns -1June McEnroe On GNU, calling getopt_long again will reset optind back to the first non-option argument, which would cause an infinite loop of reading the same configurtion file forever. 2019-11-08Only change AWAY status for registered clientsJune McEnroe Turns out I did eventually fix this, because I may want to implement "passive clients" for logging or notification stuff, which wouldn't affect AWAY status either. 2019-11-07Just write the example normallyJune McEnroe 2019-11-07Include path in readlinkat errorJune McEnroe 2019-11-07Call clientConsume before clientRecvJune McEnroe This might reduce the frequency of a client getting its own message back because it was behind in the ring when it sent it. 2019-11-06Use -l:filename in Linux.mkJune McEnroe 2019-11-06Fix compat.h for #defined strlcpyJune McEnroe 2019-11-06Allow unsetting LIBRESSL_PREFIXJune McEnroe 2019-11-06Document calico service configurationJune McEnroe 2019-11-06Document SASL EXTERNAL configuration in more detailJune McEnroe 2019-11-06Document pounce service configurationJune McEnroe 2019-11-06Mention Darwin and GNU/Linux in READMEJune McEnroe 2019-11-06Assume LibreSSL from brew on DarwinJune McEnroe 2019-11-06Remove -DNO_EXPLICIT_BZERO from Darwin.mkJune McEnroe 2019-11-06Don't install rc scripts or dirs on LinuxJune McEnroe