use C-wrapper for setgid perl script

Because perl-suid does not exist on wheezy.
This commit is contained in:
Dietmar Maurer 2013-03-25 12:39:40 +01:00
parent 2401834625
commit 46c17bd23b
4 changed files with 29 additions and 5 deletions

View File

@ -5,7 +5,9 @@ DESTDIR=
#SUBDIRS = bin lib www aplinfo
SUBDIRS = aplinfo PVE bin www po
DEB=${PACKAGE}_${VERSION}-${PACKAGERELEASE}_all.deb
ARCH:=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
DEB=${PACKAGE}_${VERSION}-${PACKAGERELEASE}_${ARCH}.deb
all: ${SUBDIRS}
@ -43,7 +45,8 @@ ${DEB} deb:
dpkg-deb --build dest
mv dest.deb ${DEB}
rm -rf dest
lintian ${DEB}
# supress lintian error: statically-linked-binary usr/bin/pvemailforward
lintian -X binaries ${DEB}
.PHONY: upload
upload: ${DEB} check

View File

@ -13,6 +13,7 @@ SCRIPTS = \
pvedaemon \
pveversion \
pvesubscription \
pvemailforward.pl \
pveperf
MANS = \
@ -25,7 +26,7 @@ MANS = \
pvesubscription.1 \
pveperf.1
all: ${MANS}
all: ${MANS} pvemailforward
%.1: %.1.pod
rm -f $@
@ -46,12 +47,15 @@ pvesubscription.1.pod: pvesubscription
vzrestore.1.pod: vzrestore
perl -I.. ./vzrestore printmanpod >$@
pvemailforward: pvemailforward.c
gcc $< -o $@ -g -O2 -Wall -ldl -lc
.PHONY: install
install: ${SCRIPTS} ${MANS} pvemailforward
perl -I.. ./pvesh verifyapi
install -d ${BINDIR}
install -m 0755 ${SCRIPTS} ${BINDIR}
install -m 2755 -g www-data pvemailforward ${BINDIR}
install -s -m 2755 -g www-data pvemailforward ${BINDIR}
install -d ${MAN1DIR}
install -m 0644 ${MANS} ${MAN1DIR}
install -d ${PODDIR}
@ -67,5 +71,5 @@ distclean: clean
.PHONY: clean
clean:
rm -rf *~ ${MANS} *.1.pod
rm -rf *~ ${MANS} *.1.pod pvemailforward
set -e && for i in ${SUBDIRS}; do ${MAKE} -C $$i $@; done

17
bin/pvemailforward.c Normal file
View File

@ -0,0 +1,17 @@
/* see 'man perlsec'
*
*/
#include <unistd.h>
#include <stdio.h>
#define REAL_PATH "/usr/bin/pvemailforward.pl"
int main(ac, av)
char **av;
{
execv(REAL_PATH, av);
fprintf(stderr, "exec '%s' failed\n", REAL_PATH);
return -1;
}