#include <stdio.h>
#include <string.h>

/*  C Wrapper för att fixa rättigheter för Apache.
      
      Kör som root:

      gcc suid_wrapper.c -o ../../../sheevaplug.cgi
      chmod a+s ../../../sheevaplug.cgi
      
*/

char s1[99] = "";
char ssh[] = "/usr/bin/ssh ina.nattsjo.se -l root -p 1122 ";
char set_triggers[] = "'/root/bin/set_triggers.pl ";
char elpatron[] = "'/root/bin/elpatron.pl ";
char set_tellstick[] = "'/root/bin/set_tellstick.pl ";

int main (int argc, char *argv[]) {
  setuid(1001);   // Droppa privilegier till josefk

  if (argc > 0) {
    strcat(s1, ssh);
    if (strcmp(argv[1],"1") == 0) {
      strcat(s1, elpatron);
      strcat(s1, "'");
      system(s1);
    }
    if (strcmp(argv[1],"2") == 0) {
      strcat(s1, elpatron);
      strcat(s1, " on x'");
      system(s1);
    }
    if (strcmp(argv[1],"3") == 0) {
      strcat(s1, elpatron);
      strcat(s1, " off x'");
      system(s1);
    }
    if (strcmp(argv[1],"4") == 0) {
      if (argc == 4) {
	strcat(s1, set_triggers);
	strcat(s1, argv[2]);
	strcat(s1, " ");
	strcat(s1, argv[3]);
	strcat(s1, "'");
	printf("%s\n", s1);
	system(s1);
      }
    }
    if (strcmp(argv[1],"5") == 0) {
      strcat(s1, set_tellstick);
      strcat(s1, "update ");
      strcat(s1, argv[2]);
      strcat(s1, " ");
      strcat(s1, argv[3]);
      strcat(s1, " ");
      strcat(s1, argv[4]);
      strcat(s1, "'");
      system(s1);
    }
    if (strcmp(argv[1],"6") == 0) {
      strcat(s1, set_tellstick);
      strcat(s1, "delete ");
      strcat(s1, argv[2]);
      strcat(s1, "'");
      system(s1);
    }
    if (strcmp(argv[1],"7") == 0) {
      strcat(s1, set_tellstick);
      strcat(s1, "execute ");
      strcat(s1, argv[2]);
      strcat(s1, "'");
      system(s1);
    }
    if (strcmp(argv[1],"8") == 0) {
      strcat(s1, set_tellstick);
      strcat(s1, "add ");
      strcat(s1, argv[2]);
      strcat(s1, " ");
      strcat(s1, argv[3]);
      strcat(s1, " ");
      strcat(s1, argv[4]);
      strcat(s1, "'");
      system(s1);
    }
  }
  return 0;
}