dmesgdb

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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";