gogs-serv.c 618 B

1234567891011121314151617181920212223242526272829303132
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #define GOGS_BIN "@l_prefix@/sbin/gogs"
  6. #define GOGS_CMD "serv"
  7. int main(int argn, char **argv)
  8. {
  9. if (setuid(geteuid()) == -1) {
  10. perror("setuid");
  11. exit(1);
  12. }
  13. if (setgid(getegid()) == -1) {
  14. perror("setgid");
  15. exit(1);
  16. }
  17. int i;
  18. char **args = malloc(sizeof(char *) * (argn + 2));
  19. args[0] = GOGS_BIN;
  20. args[1] = GOGS_CMD;
  21. for (i = 1; i < argn; i++)
  22. args[i + 1] = argv[i];
  23. args[i + 1] = NULL;
  24. if (execv(args[0], args) == -1)
  25. abort();
  26. return 0;
  27. }