Advertisement
Nasekoma

9-4

Dec 15th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.21 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <sys/wait.h>
  3. #include <stdlib.h>
  4. #include <fcntl.h>
  5. #include <stdio.h>
  6. #include <sys/stat.h>
  7. #include <limits.h>
  8.  
  9. enum
  10. {
  11.     BASE = 10,
  12.     ENV = 5
  13. };
  14.  
  15. char*
  16. mkpath(char *tmp)
  17. {
  18.     char *path = (char*)malloc(sizeof(*path) * PATH_MAX);
  19.     sprintf(path, "%s/prog%d.py", tmp, getpid());
  20.     return path;
  21. }
  22.  
  23. int
  24. main(int argc, char *argv[])
  25. {
  26.     setbuf(stdout, NULL);
  27.     char *env = getenv("XDG_RUNTIME_DIR");
  28.     if (!env) {
  29.         env = getenv("TMPDIR");
  30.         if (!env) {
  31.             env = (char*)malloc(ENV);
  32.             sprintf(env, "/tmp");
  33.         }
  34.     }
  35.     printf("%s\n", env);
  36.     char *tmpname = mkpath(env);
  37.     printf("%s\n", tmpname);
  38.     FILE *fl = fopen(tmpname, "w");
  39.     chmod(tmpname, 0700);
  40.     fprintf(fl, "#!usr/bin/env python\nprint(");
  41.     int i = 1;
  42.     while (i < argc) {
  43.         fprintf(fl, "%s * ", argv[i]);
  44.         i++;
  45.     }
  46.     fprintf(fl, "1)\n");
  47.     fclose(fl);
  48.     char *path = (char*)malloc(sizeof(*path) * (PATH_MAX * 2 + BASE * 2));
  49.     sprintf(path, "%s && rm %s", tmpname, tmpname);execl("bin/sh", "sh", "-c", path, NULL);
  50.     printf("%s\n", path);
  51.     execl("bin/sh", "sh", "-c", path, NULL);
  52.     return 1;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement