125 lines
3.2 KiB
Bash
Executable File
125 lines
3.2 KiB
Bash
Executable File
#!/bin/sh
|
|
. /var/common.sh
|
|
|
|
LIST=/var/www/list
|
|
|
|
[ -e "$DB" ] || mkdir -p "$DB"
|
|
|
|
gen_user_token() {
|
|
get_param token
|
|
[ "$token" != "Unknown" ] && [ -e "$DB/$token" ] && {
|
|
echo -en "$token"
|
|
true
|
|
} || {
|
|
echo -en "$REMOTE_ADDR $REMOTE_PORT $HTTP_USER_AGENT $(date +%s) ${RANDOM}" | md5
|
|
}
|
|
}
|
|
|
|
save_dmesg() {
|
|
_to_file=$1
|
|
_length=$(expr $2 - 7)
|
|
_ret=0
|
|
stty -icanon -echo
|
|
_bsd_check="$(dd bs=1 count=7)"
|
|
[ "$_bsd_check" == "OpenBSD" ] && {
|
|
echo -en "$_bsd_check" > $_to_file
|
|
dd bs=1 count=$_length >> $_to_file #2>/dev/null
|
|
#if !OpenBSD or dd return error than _ret=1
|
|
} || _ret=1
|
|
stty icanon echo
|
|
return $_ret
|
|
}
|
|
|
|
check_dmesg_file() {
|
|
#_file="$1"
|
|
#_type="$(file -b $_file)"
|
|
#[ "$_type" = "ASCII text" ] return 0
|
|
# it was bad idea because "file: unknown user _file"
|
|
return 0
|
|
}
|
|
|
|
_RESULT=""
|
|
|
|
[ "$REQUEST_METHOD" = "POST" -a "$CONTENT_LENGTH" -gt 0 ] && {
|
|
|
|
[ "$CONTENT_LENGTH" -gt $MAX_DMESG_SIZE ] && fail "too much data size"
|
|
|
|
TOKEN="$(gen_user_token)"
|
|
HD="$DB/$TOKEN"
|
|
DFILE="$HD/dmesg"
|
|
mkdir -p "$HD"
|
|
|
|
[ "$TOKEN" != "Unknown" ] && {
|
|
_v="$(<$HD/vendor)"
|
|
_m="$(<$HD/model)"
|
|
_s="$(<$HD/state)"
|
|
_md5="$(<$HD/md5)"
|
|
_OLD_FLN="$_v-$_m[$_s]-${_md5}.txt"
|
|
_OLD_LN="$_m[$_s]-${_md5}.txt"
|
|
rm -f "$LIST/$_OLD_FLN"
|
|
rm -f "$LIST/#$vendor/$_OLD_LN"
|
|
}
|
|
|
|
#LINK_NAME="$(gen_names)"
|
|
get_param vendor
|
|
get_param model
|
|
get_param state
|
|
echo -en "$vendor" > "$HD/vendor"
|
|
echo -en "$model" > "$HD/model"
|
|
echo -en "$state" > "$HD/state"
|
|
date "+%Y.%m.%d %H:%M" > "$HD/date"
|
|
|
|
save_dmesg "$DFILE" "$CONTENT_LENGTH" || {
|
|
rm -rf "$HD"
|
|
fail "save dmesg error"
|
|
}
|
|
|
|
check_dmesg_file "$DFILE" || {
|
|
rm -rf "$HD"
|
|
fail "Bad dmesg type"
|
|
}
|
|
|
|
grep "not configured" "$DFILE" | wc -l | sed 's/ //g' > "$HD/notconf"
|
|
|
|
MD5="$(md5 -q "$DFILE")"
|
|
echo -en "$MD5" > "$HD/md5"
|
|
|
|
grep OpenBSD "$DFILE" > "$HD/uname"
|
|
|
|
FULL_LINK_NAME="$vendor-$model[$state]-${MD5}.txt"
|
|
LINK_NAME="$model[$state]-${MD5}.txt"
|
|
|
|
mkdir -p "$LIST/#$vendor"
|
|
ln -s "../../db/$TOKEN/dmesg" "$LIST/$FULL_LINK_NAME"
|
|
ln -s "../../../db/$TOKEN/dmesg" "$LIST/#$vendor/$LINK_NAME"
|
|
|
|
_RESULT="
|
|
Thank you, your dmesg was uploaded!
|
|
Link: http://$HTTP_HOST/list/$FULL_LINK_NAME
|
|
Token: $TOKEN
|
|
Edit: curl --data \"\$(dmesg)\" '/upload?token=$TOKEN&vendor=$vendor&model=$model&state=$state'
|
|
Also you can add a comment:
|
|
ftp -V -o - 'http://$HTTP_HOST/comment?token=$TOKEN&comment=ethernet ok, storage ok'
|
|
"
|
|
}
|
|
|
|
echo -en "Status: 200 OK\r\n"
|
|
echo -en "Content-type: text/html\r\n\r\n"
|
|
[ ! -z "$_RESULT" ] && {
|
|
echo "$_RESULT"
|
|
exit 0
|
|
}
|
|
echo "<HTML><HEAD><title>OpenBSD dmesg database</title></HEAD>\n";
|
|
echo "<body>";
|
|
echo '
|
|
<h1>OpenBSD dmesg collection</h1>
|
|
<p><a href="/beautylist">Our dmesgs list</a></p>
|
|
<p>You can send your dmesg from command line:</p>
|
|
<p><i>curl --data "$(dmesg)" "http://'"$HTTP_HOST"'/upload?<b>vendor=Apple&model=MacBook_Pro_2017_13&state=Bad</b>"</i></p>
|
|
<p>
|
|
Or if you'"'"'re a cool hacker:<br>
|
|
<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>
|
|
</p>
|
|
'
|
|
echo "</body></HTML>\n";
|