00001
00002
00003 #include <sys/io.h>
00004 #include <stdlib.h>
00005 #include <stdio.h>
00006 #include <string.h>
00007 #include <errno.h>
00008 #include <unistd.h>
00009
00010
00011 int main(int argc, char * const *argv)
00012 {
00013 int uid, euid;
00014 uid = getuid();
00015 euid = geteuid();
00016 fprintf(stderr,"ioexec : uid=%d\n",uid);
00017 fprintf(stderr,"ioexec : euid=%d\n",euid);
00018 if(argc < 2)
00019 {
00020 fprintf(stderr,"ioexec: <CMD> . . .\n");
00021 exit(-1);
00022 }
00023 char * const * args = NULL;
00024 if(argc > 2)
00025 {
00026 args = argv+1;
00027 }
00028 if(iopl(3))
00029 {
00030 fprintf(stderr,"iopl(3): %s\n",strerror(errno));
00031 exit(-1);
00032 }
00033 if(uid != 0 && euid == 0)
00034 {
00035 setreuid(uid,uid);
00036 }
00037 if(execv(argv[1],args) < 0)
00038 {
00039 fprintf(stderr,"execv(%s, . . .): %s\n",argv[1],strerror(errno));
00040 exit(-1);
00041 }
00042 }