Annotation of /trunk/mkinitrd-magellan/busybox/networking/httpd_post_upload.txt
Parent Directory | Revision Log
Revision 984 -
(hide annotations)
(download)
Sun May 30 11:32:42 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 1613 byte(s)
Sun May 30 11:32:42 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 1613 byte(s)
-updated to busybox-1.16.1 and enabled blkid/uuid support in default config
1 | niro | 816 | POST upload example: |
2 | |||
3 | post_upload.htm | ||
4 | =============== | ||
5 | <html> | ||
6 | <body> | ||
7 | <form action=/cgi-bin/post_upload.cgi method=post enctype=multipart/form-data> | ||
8 | File to upload: <input type=file name=file1> <input type=submit> | ||
9 | </form> | ||
10 | |||
11 | |||
12 | post_upload.cgi | ||
13 | =============== | ||
14 | #!/bin/sh | ||
15 | |||
16 | # POST upload format: | ||
17 | # -----------------------------29995809218093749221856446032^M | ||
18 | # Content-Disposition: form-data; name="file1"; filename="..."^M | ||
19 | # Content-Type: application/octet-stream^M | ||
20 | # ^M <--------- headers end with empty line | ||
21 | # file contents | ||
22 | # file contents | ||
23 | # file contents | ||
24 | # ^M <--------- extra empty line | ||
25 | # -----------------------------29995809218093749221856446032--^M | ||
26 | |||
27 | file=/tmp/$$-$RANDOM | ||
28 | |||
29 | niro | 984 | CR=`printf '\r'` |
30 | |||
31 | niro | 816 | # CGI output must start with at least empty line (or headers) |
32 | printf '\r\n' | ||
33 | |||
34 | niro | 984 | IFS="$CR" |
35 | niro | 816 | read -r delim_line |
36 | niro | 984 | IFS="" |
37 | niro | 816 | |
38 | while read -r line; do | ||
39 | niro | 984 | test x"$line" = x"" && break |
40 | test x"$line" = x"$CR" && break | ||
41 | niro | 816 | done |
42 | |||
43 | niro | 984 | cat >"$file" |
44 | niro | 816 | |
45 | niro | 984 | # We need to delete the tail of "\r\ndelim_line--\r\n" |
46 | tail_len=$((${#delim_line} + 6)) | ||
47 | niro | 816 | |
48 | niro | 984 | # Get and check file size |
49 | filesize=`stat -c"%s" "$file"` | ||
50 | test "$filesize" -lt "$tail_len" && exit 1 | ||
51 | niro | 816 | |
52 | niro | 984 | # Check that tail is correct |
53 | dd if="$file" skip=$((filesize - tail_len)) bs=1 count=1000 >"$file.tail" 2>/dev/null | ||
54 | printf "\r\n%s--\r\n" "$delim_line" >"$file.tail.expected" | ||
55 | if ! diff -q "$file.tail" "$file.tail.expected" >/dev/null; then | ||
56 | printf "<html>\n<body>\nMalformed file upload" | ||
57 | exit 1 | ||
58 | fi | ||
59 | rm "$file.tail" | ||
60 | rm "$file.tail.expected" | ||
61 | |||
62 | # Truncate the file | ||
63 | dd of="$file" seek=$((filesize - tail_len)) bs=1 count=0 >/dev/null 2>/dev/null | ||
64 | |||
65 | printf "<html>\n<body>\nFile upload has been accepted" |