summaryrefslogtreecommitdiffstats
path: root/usr.bin/perl
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2002-06-06 12:12:23 +0000
committerdes <des@FreeBSD.org>2002-06-06 12:12:23 +0000
commit3be5f8e9018ab74ba968d04eb034c0e8b11c6042 (patch)
tree8e5b801a6c4e0e6f7e06b4e23056ef058a0d8ab8 /usr.bin/perl
parentaffb92279eec3d9851693121cffb2e06cced591f (diff)
downloadFreeBSD-src-3be5f8e9018ab74ba968d04eb034c0e8b11c6042.zip
FreeBSD-src-3be5f8e9018ab74ba968d04eb034c0e8b11c6042.tar.gz
Support suidperl as well.
Diffstat (limited to 'usr.bin/perl')
-rw-r--r--usr.bin/perl/Makefile3
-rw-r--r--usr.bin/perl/perl.c8
2 files changed, 8 insertions, 3 deletions
diff --git a/usr.bin/perl/Makefile b/usr.bin/perl/Makefile
index fea5979..0c03778 100644
--- a/usr.bin/perl/Makefile
+++ b/usr.bin/perl/Makefile
@@ -3,6 +3,7 @@
PROG= perl
NOMAN=
WARNS?= 6
-LINKS= ${BINDIR}/perl ${BINDIR}/perl5
+LINKS= ${BINDIR}/perl ${BINDIR}/perl5 \
+ ${BINDIR}/perl ${BINDIR}/suidperl
.include <bsd.prog.mk>
diff --git a/usr.bin/perl/perl.c b/usr.bin/perl/perl.c
index 15a155d..7bd52ad 100644
--- a/usr.bin/perl/perl.c
+++ b/usr.bin/perl/perl.c
@@ -44,15 +44,19 @@ int
main(int argc __unused, char *argv[])
{
char path[PATH_MAX];
- const char *p, *q, *self;
+ const char *cmd, *p, *q, *self;
size_t len;
self = argv[0];
+ if ((cmd = strrchr(self, '/')) == NULL)
+ cmd = self;
+ else
+ cmd++;
argv[0] = path;
for (p = q = getenv("PATH"); p && *p && *q; p = q + 1) {
for (q = p; *q && *q != ':'; ++q)
/* nothing */ ;
- len = snprintf(path, sizeof path, "%.*s/perl", (int)(q - p), p);
+ len = snprintf(path, sizeof path, "%.*s/%s", (int)(q - p), p, cmd);
if (len >= PATH_MAX || strcmp(path, self) == 0)
continue;
execve(path, argv, environ);
OpenPOWER on IntegriCloud