Skip to content

Commit

Permalink
Add tool setuid
Browse files Browse the repository at this point in the history
Add a simple tool to execute a command with another uid.
  • Loading branch information
donald committed Nov 2, 2018
1 parent 79ab777 commit bde8788
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 4 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
setuid/setuid
10 changes: 6 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,12 @@ INSTALL=install -v
INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL) -m 644

all:
@echo 'Nothing to be done. Ready for "make install"'
all: setuid/setuid

install:
clean:
@rm setuid/setuid 2>/dev/null || true

install: all
@prefix="$(prefix)" usr_prefix="$(usr_prefix)" usrlocal_prefix="$(usrlocal_prefix)" \
root_exec_prefix="$(root_exec_prefix)" root_bindir="$(root_bindir)" root_sbindir="$(root_sbindir)" \
usr_exec_prefix="$(usr_exec_prefix)" use_bindir="$(usr_bindir)" usr_sbindir="$(usr_sbindir)" \
Expand All @@ -79,6 +81,6 @@ install:
DESTDIR="$(DESTDIR)" \
./install.sh

.PHONY: all install
.PHONY: all install clean


1 change: 1 addition & 0 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,5 @@ install_data blink/blinkd.service "$DESTDIR$systemdunitdi
install_data blink/51-blink.rules "$DESTDIR$udev_rulesdir/51-blink.rules"
install_data clusterd/clusterd.service "$DESTDIR$systemdunitdir/clusterd.service"
install_exec clusterd/clusterd "$DESTDIR$usr_sbindir/clusterd"
install_exec setuid/setuid "$DESTDIR$usr_sbindir/setuid"
exit
32 changes: 32 additions & 0 deletions setuid/setuid.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc,char **argv) {
uid_t uid;
char *end;
int status;

if (argc<3) {
fprintf(stderr,"usage: %s uid cmd...\n",argv[0]);
exit(1);
}
uid=strtoul(argv[1],&end,10);
if (end==argv[1] || *end != '\0') {
fprintf(stderr,"%s: %s: invalid uid\n",argv[0],argv[1]);
exit(1);
}
status=setuid(uid);
if (status==-1) {
perror(argv[0]);
exit(1);
}

status=execvp(argv[2],&argv[2]);
if (status==-1) {
perror(argv[0]);
exit(1);
}
exit(0);
}

0 comments on commit bde8788

Please sign in to comment.