Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <sys/wait.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <sys/stat.h>
- #include <limits.h>
- enum
- {
- BASE = 10,
- ENV = 5
- };
- char*
- mkpath(char *tmp)
- {
- char *path = (char*)malloc(sizeof(*path) * PATH_MAX);
- sprintf(path, "%s/prog%d.py", tmp, getpid());
- return path;
- }
- int
- main(int argc, char *argv[])
- {
- setbuf(stdout, NULL);
- char *env = getenv("XDG_RUNTIME_DIR");
- if (!env) {
- env = getenv("TMPDIR");
- if (!env) {
- env = (char*)malloc(ENV);
- sprintf(env, "/tmp");
- }
- }
- printf("%s\n", env);
- char *tmpname = mkpath(env);
- printf("%s\n", tmpname);
- FILE *fl = fopen(tmpname, "w");
- chmod(tmpname, 0700);
- fprintf(fl, "#!usr/bin/env python\nprint(");
- int i = 1;
- while (i < argc) {
- fprintf(fl, "%s * ", argv[i]);
- i++;
- }
- fprintf(fl, "1)\n");
- fclose(fl);
- char *path = (char*)malloc(sizeof(*path) * (PATH_MAX * 2 + BASE * 2));
- sprintf(path, "%s && rm %s", tmpname, tmpname);execl("bin/sh", "sh", "-c", path, NULL);
- printf("%s\n", path);
- execl("bin/sh", "sh", "-c", path, NULL);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement