Mercurial > hg > Applications > virsh-wrapper
view ie-vagrant.c @ 12:4e34b48bf7c7
fix
author | taiki |
---|---|
date | Mon, 11 Nov 2013 09:36:21 -1000 |
parents | 422041acef4c |
children | 7003cdf42392 |
line wrap: on
line source
#include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <signal.h> #include <string.h> #include <sys/types.h> #include <regex.h> /******************************************** * Vagrant Wrapper - Secure Yourself * * * * 2007 - Mike Golvach - eggi@comcast.net * * 2013 - Shinji KONO kono@ie.u-rykyu.ac.jp * * * * Usage: COMMAND [init|up|destroy|ssh] * * * ********************************************/ /* Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License */ #define command "/usr/bin/vagrant" #define init_command "init" #define up_command "up" #define destroy_command "destroy" #define ssh_command "ssh" #define NEW(type) ((type*)malloc(sizeof(type))) /* Define global variables */ void usage() { printf("Usage: COMMAND [init|up|destroy|ssh]\n"); } /* main(int argc, char **argv) - main process loop */ int main(int argc, char **argv) { int gid; int uid; /* Set euid and egid to actual user */ char *name = getlogin(); uid = getuid(); gid = getgid(); printf("uid %d gid %d name %s\n", uid,gid,name); setegid(getgid()); seteuid(getuid()); regex_t *pattern = NEW(regex_t); if (regcomp(pattern, name, 0) != 0) { exit(0); } /* Confirm user is in GROUP(999) group */ /* if ( gid != 999 ) { printf("User Not Authorized! Exiting...\n"); exit(1); } */ /* Set uid, gid, euid and egid to root */ setegid(0); seteuid(0); setgid(0); setuid(0); /* Check argv for proper arguments and run * the corresponding script, if invoked. */ if ( strncmp(argv[1], "init", 4) == 0 ) { if (execl(command, command, init_command, NULL) < 0) { perror("Execl:"); } } else if ( strncmp(argv[1], "destroy", 4) == 0 ) { if (execl(command, command, destroy_command, NULL) < 0) { perror("Execl:"); } } else if ( strncmp(argv[1], "up", 2) == 0 ) { if (execl(command, command, up_command, NULL) < 0) { perror("Execl:"); } } else if ( strncmp(argv[1], "ssh", 6) == 0 ) { if (execl(command, command, ssh_command, NULL) < 0) { perror("Execl:"); } } else { usage(); exit(1); } exit(0); } /* end */