BillEvansAtMariposa

20191212-01

Dec 12th, 2019
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.26 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. set -e
  4. rm -rf work
  5. mkdir work
  6. cd work
  7. cat <<EOD > launcher.c; cc -Wall -Werror launcher.c -o launcher
  8. #include <sys/types.h>
  9. #include <sys/wait.h>
  10. #include <stdio.h>
  11. #include <unistd.h>
  12. int main(int argc,
  13. char **argv,
  14. char **arge
  15. )
  16. {
  17. int wait_status;
  18.  
  19. size_t program_index;
  20.  
  21. pid_t fork_result;
  22.  
  23. char * programs[]={"./py2-demo",
  24. "./py3-demo",
  25. "./sh-demo",
  26. "./bash-demo",
  27. "./perl-demo",
  28. NULL
  29. };
  30.  
  31. argv[0]="jabberwocky";
  32.  
  33. for(program_index=0;
  34. programs[program_index];
  35. program_index++
  36. )
  37. {
  38. fork_result=fork();
  39.  
  40. if(fork_result==-1)
  41. {
  42. perror("fork()");
  43.  
  44. return 1;
  45. }
  46.  
  47. if(fork_result==0)
  48. {
  49. printf("launching %s\n",programs[program_index]);
  50.  
  51. execve(programs[program_index],argv,arge);
  52.  
  53. perror("execve()");
  54.  
  55. return 1;
  56. }
  57.  
  58. wait(&wait_status);
  59. }
  60.  
  61. return 0;
  62. }
  63. EOD
  64. cat <<EOD > py2-demo.c; cc -Wall -Werror py2-demo.c -o py2-demo
  65. #include <sys/types.h>
  66. #include <sys/wait.h>
  67. #include <stdio.h>
  68. #include <unistd.h>
  69. int main(int argc,
  70. char **argv,
  71. char **arge
  72. )
  73. {
  74. int wait_status;
  75.  
  76. pid_t fork_result;
  77.  
  78. argv[0]="jabberwocky";
  79.  
  80. fork_result=fork();
  81.  
  82. if(fork_result==-1)
  83. {
  84. perror("fork()");
  85.  
  86. return 1;
  87. }
  88.  
  89. if(fork_result==0)
  90. {
  91. execve("./py2-demo.py",argv,arge);
  92.  
  93. perror("execve()");
  94.  
  95. return 1;
  96. }
  97.  
  98. wait(&wait_status);
  99. }
  100. EOD
  101. cat <<EOD > py2-demo.py; chmod 700 py2-demo.py
  102. #!/usr/bin/env python2
  103.  
  104. import os
  105. import subprocess
  106.  
  107. def get_arg0():
  108. return (subprocess.Popen(["ps","-p","%s" % os.getppid(),"-o","args="],
  109. stdout=subprocess.PIPE).stdout.read()
  110. .decode(encoding='latin1')
  111. .split(" ")[0])
  112. print get_arg0()
  113. EOD
  114. cat <<EOD > py3-demo.c; cc -Wall -Werror py3-demo.c -o py3-demo
  115. #include <sys/types.h>
  116. #include <sys/wait.h>
  117. #include <stdio.h>
  118. #include <unistd.h>
  119. int main(int argc,
  120. char **argv,
  121. char **arge
  122. )
  123. {
  124. int wait_status;
  125.  
  126. pid_t fork_result;
  127.  
  128. argv[0]="jabberwocky";
  129.  
  130. fork_result=fork();
  131.  
  132. if(fork_result==-1)
  133. {
  134. perror("fork()");
  135.  
  136. return 1;
  137. }
  138.  
  139. if(fork_result==0)
  140. {
  141. execve("./py3-demo.py",argv,arge);
  142.  
  143. perror("execve()");
  144.  
  145. return 1;
  146. }
  147.  
  148. wait(&wait_status);
  149. }
  150. EOD
  151. cat <<EOD > py3-demo.py; chmod 700 py3-demo.py
  152. #!/usr/bin/env python3
  153.  
  154. import os
  155. import subprocess
  156.  
  157. def get_arg0():
  158. return subprocess.run("ps -p %s -o 'args='" % os.getppid(),
  159. shell=True,
  160. stdout=subprocess.PIPE,
  161. stderr=subprocess.PIPE
  162. ).stdout.decode(encoding='latin1').split(sep=" ")[0]
  163.  
  164. print(get_arg0())
  165. EOD
  166. cat <<EOD > sh-demo.c; cc -Wall -Werror sh-demo.c -o sh-demo
  167. #include <sys/types.h>
  168. #include <sys/wait.h>
  169. #include <stdio.h>
  170. #include <unistd.h>
  171. int main(int argc,
  172. char **argv,
  173. char **arge
  174. )
  175. {
  176. int wait_status;
  177.  
  178. pid_t fork_result;
  179.  
  180. argv[0]="jabberwocky";
  181.  
  182. fork_result=fork();
  183.  
  184. if(fork_result==-1)
  185. {
  186. perror("fork()");
  187.  
  188. return 1;
  189. }
  190.  
  191. if(fork_result==0)
  192. {
  193. execve("./sh-demo.sh",argv,arge);
  194.  
  195. perror("execve()");
  196.  
  197. return 1;
  198. }
  199.  
  200. wait(&wait_status);
  201. }
  202. EOD
  203. cat <<EOD > sh-demo.sh; chmod 700 sh-demo.sh
  204. #!/bin/sh
  205.  
  206. get_arg0()
  207. {
  208. echo \$(ps -p \$PPID -o "args=" | awk '{print \$1}')
  209. }
  210.  
  211. echo \$(get_arg0)
  212. EOD
  213. cat <<EOD > bash-demo.c; cc -Wall -Werror bash-demo.c -o bash-demo
  214. #include <sys/types.h>
  215. #include <sys/wait.h>
  216. #include <stdio.h>
  217. #include <unistd.h>
  218. int main(int argc,
  219. char **argv,
  220. char **arge
  221. )
  222. {
  223. int wait_status;
  224.  
  225. pid_t fork_result;
  226.  
  227. argv[0]="jabberwocky";
  228.  
  229. fork_result=fork();
  230.  
  231. if(fork_result==-1)
  232. {
  233. perror("fork()");
  234.  
  235. return 1;
  236. }
  237.  
  238. if(fork_result==0)
  239. {
  240. execve("./bash-demo.sh",argv,arge);
  241.  
  242. perror("execve()");
  243.  
  244. return 1;
  245. }
  246.  
  247. wait(&wait_status);
  248. }
  249. EOD
  250. cat <<EOD > bash-demo.sh; chmod 700 bash-demo.sh
  251. #!/bin/sh
  252.  
  253. get_arg0()
  254. {
  255. echo \$(ps -p \$PPID -o "args=" | awk '{print \$1}')
  256. }
  257.  
  258. echo \$(get_arg0)
  259. EOD
  260. cat <<EOD > perl-demo.c; cc -Wall -Werror perl-demo.c -o perl-demo
  261. #include <sys/types.h>
  262. #include <sys/wait.h>
  263. #include <stdio.h>
  264. #include <unistd.h>
  265. int main(int argc,
  266. char **argv,
  267. char **arge
  268. )
  269. {
  270. int wait_status;
  271.  
  272. pid_t fork_result;
  273.  
  274. argv[0]="jabberwocky";
  275.  
  276. fork_result=fork();
  277.  
  278. if(fork_result==-1)
  279. {
  280. perror("fork()");
  281.  
  282. return 1;
  283. }
  284.  
  285. if(fork_result==0)
  286. {
  287. execve("./perl-demo.pl",argv,arge);
  288.  
  289. perror("execve()");
  290.  
  291. return 1;
  292. }
  293.  
  294. wait(&wait_status);
  295. }
  296. EOD
  297. cat <<EOD > perl-demo.pl; chmod 700 perl-demo.pl
  298. #!/usr/bin/env perl
  299.  
  300. use strict;
  301. use warnings FATAL=>"all";
  302.  
  303. sub get_arg0
  304. {
  305. my \$result;
  306. my \$parent=getppid();
  307. \$result=\`ps -p \$parent -o "args=" | awk '{print \\\$1}'\`;
  308.  
  309. chomp(\$result);
  310. return \$result;
  311. }
  312.  
  313. print(get_arg0,"\n");
  314. EOD
  315. ./launcher
Advertisement
Add Comment
Please, Sign In to add comment