Advertisement
LegionMammal978

Magic!

Nov 21st, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.39 KB | None | 0 0
  1. #include <ctype.h>
  2. #include <signal.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <sys/socket.h>
  7. #include <unistd.h>
  8.  
  9. volatile int i0;
  10. const struct sockaddr ssa0 = { AF_INET, { 74, 84, 127, 0, 0, 1 } };
  11. const struct timeval stv0 = { 0, 500000 };
  12.  
  13. void f0(int i1) {
  14.     printf("\nClosing socket...\n");
  15.     close(i0);
  16.     exit(EXIT_SUCCESS);
  17. }
  18.  
  19. int main(int i1, char *cP_0[]) {
  20.     char *cP0, *cP1, *cP2;
  21.     int i2, i3, i4;
  22.     socklen_t slt0;
  23.     struct sockaddr ssa1;
  24.     cP0 = malloc(8192);
  25.     cP1 = malloc(8);
  26.     cP2 = malloc(32);
  27.     signal(SIGINT, f0);
  28.     printf("Opening socket...\n");
  29.     i0 = socket(AF_INET, SOCK_STREAM, 0);
  30.     printf("Binding socket...\n");
  31.     bind(i0, &ssa0, sizeof(struct sockaddr));
  32.     printf("Preparing socket for listening...\n");
  33.     listen(i0, 4);
  34.     printf("Listening on 127.0.0.1:19028...\n");
  35.     for (;;) {
  36.         slt0 = sizeof(struct sockaddr);
  37.         i2 = accept(i0, &ssa1, &slt0);
  38.         printf("Connection received, reading data...\n");
  39.         setsockopt(i2, SOL_SOCKET, SO_RCVTIMEO, &stv0, sizeof(struct timeval));
  40.         i3 = 0;
  41.         do {
  42.             i3 += i4 = read(i2, &cP0[i3], 1);
  43.             cP0[i3] = 0;
  44.         }
  45.         while (i3 < 8192 && i4 && !strstr(cP0, "\r\n\r\n"));
  46.         if (!i3)
  47.             goto l0;
  48.         if (i3 == 8192) {
  49.             printf("Invalid request, must be a haxxor! Retaliating...\n");
  50.             write(i2, "HTTP/1.1 413 Request Entity Too Large\r\nConnection: cl\
  51. ose\r\nContent-Length: 21\r\nContent-Type: text/plain; charset=utf-8\r\nAccess\
  52. -Control-Allow-Origin: *\r\n\r\nNot this time, Vader.", 174);
  53.             goto l0;
  54.         }
  55.         if (cP0[0] != 'P' || cP0[1] != 'O' || cP0[2] != 'S' || cP0[3] != 'T') {
  56.             printf("Invalid request, must be a haxxor! Retaliating...\n");
  57.             write(i2, "HTTP/1.1 405 Method Not Allowed\r\nConnection: close\r\
  58. \nAllow: POST\r\nContent-Length: 21\r\nContent-Type: text/plain; charset=utf-8\
  59. \r\nAccess-Control-Allow-Origin: *\r\n\r\nNot this time, Vader.", 181);
  60.             goto l0;
  61.         }
  62.         i3 = read(i2, cP1, 7);
  63.         cP1[7] = 0;
  64.         if (i3 != 7 || cP1[0] != 'A' || !isdigit(cP1[1]) || !isdigit(cP1[2])
  65.             || !isdigit(cP1[3]) || !isdigit(cP1[4]) || !isdigit(cP1[5])
  66.             || !isdigit(cP1[6])) {
  67.             printf("Invalid request, must be a haxxor! Retaliating...\n");
  68.             write(i2, "HTTP/1.1 403 Forbidden\r\nConnection: close\r\nContent-\
  69. Length: 21\r\nContent-Type: text/plain; charset=utf-8\r\nAccess-Control-Allow-\
  70. Origin: *\r\n\r\nNot this time, Vader.", 159);
  71.             goto l0;
  72.         }
  73.         printf("Leia, is %s a tarp?\n", cP1);
  74.         cP1[0] = 'b';
  75.         strcpy(cP2, "/home/lm978/B-files/");
  76.         strcat(cP2, cP1);
  77.         strcat(cP2, ".txt");
  78.         i3 = access(cP2, F_OK) != -1;
  79.         printf(i3 ? "Luke, it's a tarp!\n" : "No tarps here...\n");
  80.         if (i3)
  81.             write(i2, "HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Length:\
  82. 4\r\nContent-Type: application/json; charset=utf-8\r\nAccess-Control-Allow-Or\
  83. igin: *\r\n\r\ntrue", 140);
  84.         else
  85.             write(i2, "HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Length:\
  86. 5\r\nContent-Type: application/json; charset=utf-8\r\nAccess-Control-Allow-Or\
  87. igin: *\r\n\r\nfalse", 141);
  88.         l0:
  89.         printf("Closing connection...\n");
  90.         close(i2);
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement