upload (3299B)
1 #!/bin/sh 2 . /var/common.sh 3 4 LIST=/var/www/list 5 6 [ -e "$DB" ] || mkdir -p "$DB" 7 8 gen_user_token() { 9 get_param token 10 [ "$token" != "Unknown" ] && [ -e "$DB/$token" ] && { 11 echo -en "$token" 12 true 13 } || { 14 echo -en "$REMOTE_ADDR $REMOTE_PORT $HTTP_USER_AGENT $(date +%s) ${RANDOM}" | md5 15 } 16 } 17 18 save_dmesg() { 19 _to_file=$1 20 _length=$(expr $2 - 7) 21 _ret=0 22 stty -icanon -echo 23 _bsd_check="$(dd bs=1 count=7)" 24 [ "$_bsd_check" == "OpenBSD" ] && { 25 echo -en "$_bsd_check" > $_to_file 26 dd bs=1 count=$_length >> $_to_file #2>/dev/null 27 #if !OpenBSD or dd return error than _ret=1 28 } || _ret=1 29 stty icanon echo 30 return $_ret 31 } 32 33 check_dmesg_file() { 34 #_file="$1" 35 #_type="$(file -b $_file)" 36 #[ "$_type" = "ASCII text" ] return 0 37 # it was bad idea because "file: unknown user _file" 38 return 0 39 } 40 41 _RESULT="" 42 43 [ "$REQUEST_METHOD" = "POST" -a "$CONTENT_LENGTH" -gt 0 ] && { 44 45 [ "$CONTENT_LENGTH" -gt $MAX_DMESG_SIZE ] && fail "too much data size" 46 47 TOKEN="$(gen_user_token)" 48 HD="$DB/$TOKEN" 49 DFILE="$HD/dmesg" 50 mkdir -p "$HD" 51 52 [ "$TOKEN" != "Unknown" ] && { 53 _v="$(<$HD/vendor)" 54 _m="$(<$HD/model)" 55 _s="$(<$HD/state)" 56 _md5="$(<$HD/md5)" 57 _OLD_FLN="$_v-$_m[$_s]-${_md5}.txt" 58 _OLD_LN="$_m[$_s]-${_md5}.txt" 59 rm -f "$LIST/$_OLD_FLN" 60 rm -f "$LIST/#$vendor/$_OLD_LN" 61 } 62 63 #LINK_NAME="$(gen_names)" 64 get_param vendor 65 get_param model 66 get_param state 67 echo -en "$vendor" > "$HD/vendor" 68 echo -en "$model" > "$HD/model" 69 echo -en "$state" > "$HD/state" 70 date "+%Y.%m.%d %H:%M" > "$HD/date" 71 72 save_dmesg "$DFILE" "$CONTENT_LENGTH" || { 73 rm -rf "$HD" 74 fail "save dmesg error" 75 } 76 77 check_dmesg_file "$DFILE" || { 78 rm -rf "$HD" 79 fail "Bad dmesg type" 80 } 81 82 grep "not configured" "$DFILE" | wc -l | sed 's/ //g' > "$HD/notconf" 83 84 MD5="$(md5 -q "$DFILE")" 85 echo -en "$MD5" > "$HD/md5" 86 87 grep OpenBSD "$DFILE" > "$HD/uname" 88 89 FULL_LINK_NAME="$vendor-$model[$state]-${MD5}.txt" 90 LINK_NAME="$model[$state]-${MD5}.txt" 91 92 mkdir -p "$LIST/#$vendor" 93 ln -s "../../db/$TOKEN/dmesg" "$LIST/$FULL_LINK_NAME" 94 ln -s "../../../db/$TOKEN/dmesg" "$LIST/#$vendor/$LINK_NAME" 95 96 _RESULT=" 97 Thank you, your dmesg was uploaded! 98 Link: http://$HTTP_HOST/list/$FULL_LINK_NAME 99 Token: $TOKEN 100 Edit: curl --data \"\$(dmesg)\" '/upload?token=$TOKEN&vendor=$vendor&model=$model&state=$state' 101 Also you can add a comment: 102 ftp -V -o - 'http://$HTTP_HOST/comment?token=$TOKEN&comment=ethernet ok, storage ok' 103 " 104 } 105 106 echo -en "Status: 200 OK\r\n" 107 echo -en "Content-type: text/html\r\n\r\n" 108 [ ! -z "$_RESULT" ] && { 109 echo "$_RESULT" 110 exit 0 111 } 112 echo "<HTML><HEAD><title>OpenBSD dmesg database</title></HEAD>\n"; 113 echo "<body>"; 114 echo ' 115 <h1>OpenBSD dmesg collection</h1> 116 <p><a href="/beautylist">Our dmesgs list</a></p> 117 <p>You can send your dmesg from command line:</p> 118 <p><i>curl --data "$(dmesg)" "http://'"$HTTP_HOST"'/upload?<b>vendor=Apple&model=MacBook_Pro_2017_13&state=Bad</b>"</i></p> 119 <p> 120 Or if you'"'"'re a cool hacker:<br> 121 <i>echo -ne "POST /upload?vendor=Apple&model=MacBook_Pro_2017_13&state=Bad HTTP/1.0\\r\\nHost: '"$HTTP_HOST"'\\r\\nContent-Type: application/x-www-form-urlencoded\\r\\nContent-Length: $(dmesg|wc -c|tr -d ' ')\\r\\n\\r\\n$(dmesg)\\r\\n" | nc '"$HTTP_HOST"' 80</i> 122 </p> 123 ' 124 echo "</body></HTML>\n";