Attachment "rcvlogin-record.tar" to
tech note [c8e705f2d2]
added by
opus-ocx2
2026-10-28 19:58:45.
0000: 72 63 76 6c 6f 67 69 6e 2d 72 65 63 6f 72 64 2f rcvlogin-record/
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060: 00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 30 ....0000755.0000
0070: 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 000.0000000.0000
0080: 30 30 30 30 30 30 30 00 31 35 32 37 30 34 35 31 0000000.15270451
0090: 37 34 37 00 30 31 32 36 36 37 00 20 35 00 00 00 747.012667. 5...
00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0100: 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 .ustar .root...
0110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0120: 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 .........root...
0130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0200: 72 63 76 6c 6f 67 69 6e 2d 72 65 63 6f 72 64 2f rcvlogin-record/
0210: 72 63 76 6c 6f 67 69 6e 2e 70 61 74 63 68 00 00 rcvlogin.patch..
0220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0260: 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 ....0000644.0000
0270: 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 000.0000000.0000
0280: 30 30 30 35 37 33 32 00 31 35 32 37 30 34 35 31 0005732.15270451
0290: 37 34 37 00 30 31 35 35 34 32 00 20 30 00 00 00 747.015542. 0...
02a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0300: 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 .ustar .root...
0310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0320: 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 .........root...
0330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0350: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
03a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
03b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
03c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
03d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
03e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
03f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0400: 2d 2d 2d 20 66 6f 73 73 69 6c 2d 32 2e 32 37 2f --- fossil-2.27/
0410: 73 72 63 2f 73 68 75 6e 2e 63 0a 2b 2b 2b 20 66 src/shun.c.+++ f
0420: 6f 73 73 69 6c 2d 72 65 63 65 69 70 74 2f 73 72 ossil-receipt/sr
0430: 63 2f 73 68 75 6e 2e 63 0a 40 40 20 2d 36 31 33 c/shun.c.@@ -613
0440: 2c 33 20 2b 36 31 33 2c 37 33 20 40 40 0a 20 20 ,3 +613,73 @@.
0450: 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 26 71 29 db_finalize(&q)
0460: 3b 0a 20 20 20 73 74 79 6c 65 5f 66 69 6e 69 73 ;. style_finis
0470: 68 5f 70 61 67 65 28 29 3b 0a 20 7d 0a 2b 0a 2b h_page();. }.+.+
0480: 2f 2a 0a 2b 2a 2a 20 57 45 42 50 41 47 45 3a 20 /*.+** WEBPAGE:
0490: 72 63 76 6c 6f 67 69 6e 0a 2b 2a 2a 0a 2b 2a 2a rcvlogin.+**.+**
04a0: 20 51 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 Query parameter
04b0: 73 3a 20 20 6e 61 6d 65 3d 48 41 53 48 20 2e 2e s: name=HASH ..
04c0: 2e 20 20 28 77 68 69 74 65 73 70 61 63 65 20 6f . (whitespace o
04d0: 72 20 63 6f 6d 6d 61 20 73 65 70 61 72 61 74 65 r comma separate
04e0: 64 29 0a 2b 2a 2a 20 20 20 20 20 20 20 20 20 20 d).+**
04f0: 20 20 20 20 20 20 20 20 20 20 75 73 65 72 3d 4c user=L
0500: 4f 47 49 4e 0a 2b 2a 2a 0a 2b 2a 2a 20 46 6f 72 OGIN.+**.+** For
0510: 20 65 61 63 68 20 66 75 6c 6c 20 61 72 74 69 66 each full artif
0520: 61 63 74 20 68 61 73 68 2c 20 74 68 65 20 75 73 act hash, the us
0530: 65 72 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 er the repositor
0540: 79 20 72 65 63 65 69 76 65 64 20 69 74 0a 2b 2a y received it.+*
0550: 2a 20 66 72 6f 6d 20 61 6e 64 20 74 68 61 74 20 * from and that
0560: 75 73 65 72 27 73 20 63 61 70 61 62 69 6c 69 74 user's capabilit
0570: 69 65 73 20 61 73 20 46 6f 73 73 69 6c 20 67 72 ies as Fossil gr
0580: 61 6e 74 73 20 74 68 65 6d 20 28 69 6e 68 65 72 ants them (inher
0590: 69 74 65 64 0a 2b 2a 2a 20 6f 6e 65 73 20 69 6e ited.+** ones in
05a0: 63 6c 75 64 65 64 29 2c 20 61 73 20 4a 53 4f 4e cluded), as JSON
05b0: 2e 20 20 4e 65 76 65 72 20 74 68 65 20 61 64 64 . Never the add
05c0: 72 65 73 73 20 69 74 20 63 61 6d 65 20 66 72 6f ress it came fro
05d0: 6d 2e 20 20 46 6f 72 0a 2b 2a 2a 20 75 73 65 72 m. For.+** user
05e0: 3d 4c 4f 47 49 4e 2c 20 74 68 61 74 20 75 73 65 =LOGIN, that use
05f0: 72 27 73 20 63 61 70 61 62 69 6c 69 74 69 65 73 r's capabilities
0600: 20 61 6e 64 20 77 68 65 74 68 65 72 20 74 68 65 and whether the
0610: 69 72 20 77 69 6b 69 20 65 64 69 74 73 20 61 6e ir wiki edits an
0620: 64 0a 2b 2a 2a 20 74 69 63 6b 65 74 20 63 68 61 d.+** ticket cha
0630: 6e 67 65 73 20 77 61 69 74 20 66 6f 72 20 61 20 nges wait for a
0640: 6d 6f 64 65 72 61 74 6f 72 2e 20 20 52 65 71 75 moderator. Requ
0650: 69 72 65 73 20 52 65 61 64 20 61 6e 64 20 74 68 ires Read and th
0660: 65 20 73 65 74 74 69 6e 67 0a 2b 2a 2a 20 22 72 e setting.+** "r
0670: 63 76 6c 6f 67 69 6e 22 20 6f 6e 3b 20 61 20 70 cvlogin" on; a p
0680: 72 69 76 61 74 65 20 61 72 74 69 66 61 63 74 20 rivate artifact
0690: 69 73 20 73 68 6f 77 6e 20 6f 6e 6c 79 20 74 6f is shown only to
06a0: 20 61 20 75 73 65 72 20 68 6f 6c 64 69 6e 67 0a a user holding.
06b0: 2b 2a 2a 20 50 72 69 76 61 74 65 2e 0a 2b 2a 2f +** Private..+*/
06c0: 0a 2b 76 6f 69 64 20 72 63 76 6c 6f 67 69 6e 5f .+void rcvlogin_
06d0: 70 61 67 65 28 76 6f 69 64 29 7b 0a 2b 20 20 63 page(void){.+ c
06e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 onst char *zName
06f0: 73 20 3d 20 50 44 28 22 6e 61 6d 65 22 2c 22 22 s = PD("name",""
0700: 29 3b 0a 2b 20 20 63 6f 6e 73 74 20 63 68 61 72 );.+ const char
0710: 20 2a 7a 55 73 65 72 20 3d 20 50 28 22 75 73 65 *zUser = P("use
0720: 72 22 29 3b 0a 2b 20 20 69 6e 74 20 66 69 72 73 r");.+ int firs
0730: 74 20 3d 20 31 3b 0a 2b 20 20 53 74 6d 74 20 71 t = 1;.+ Stmt q
0740: 3b 0a 2b 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b ;.+ login_check
0750: 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a _credentials();.
0760: 2b 20 20 69 66 28 20 21 67 2e 70 65 72 6d 2e 52 + if( !g.perm.R
0770: 65 61 64 20 7c 7c 20 21 64 62 5f 67 65 74 5f 62 ead || !db_get_b
0780: 6f 6f 6c 65 61 6e 28 22 72 63 76 6c 6f 67 69 6e oolean("rcvlogin
0790: 22 2c 30 29 20 29 7b 0a 2b 20 20 20 20 6c 6f 67 ",0) ){.+ log
07a0: 69 6e 5f 6e 65 65 64 65 64 28 67 2e 61 6e 6f 6e in_needed(g.anon
07b0: 2e 52 65 61 64 29 3b 0a 2b 20 20 20 20 72 65 74 .Read);.+ ret
07c0: 75 72 6e 3b 0a 2b 20 20 7d 0a 2b 20 20 63 67 69 urn;.+ }.+ cgi
07d0: 5f 73 65 74 5f 63 6f 6e 74 65 6e 74 5f 74 79 70 _set_content_typ
07e0: 65 28 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a e("application/j
07f0: 73 6f 6e 22 29 3b 0a 2b 20 20 69 66 28 20 7a 55 son");.+ if( zU
0800: 73 65 72 20 29 7b 0a 2b 20 20 20 20 63 68 61 72 ser ){.+ char
0810: 20 2a 7a 43 61 70 20 3d 20 64 62 5f 74 65 78 74 *zCap = db_text
0820: 28 30 2c 0a 2b 20 20 20 20 20 20 20 22 53 45 4c (0,.+ "SEL
0830: 45 43 54 20 66 75 6c 6c 63 61 70 28 63 61 70 29 ECT fullcap(cap)
0840: 20 46 52 4f 4d 20 75 73 65 72 20 57 48 45 52 45 FROM user WHERE
0850: 20 6c 6f 67 69 6e 3d 25 51 22 2c 20 7a 55 73 65 login=%Q", zUse
0860: 72 29 3b 0a 2b 20 20 20 20 69 66 28 20 7a 43 61 r);.+ if( zCa
0870: 70 3d 3d 30 20 29 7b 0a 2b 20 20 20 20 20 20 40 p==0 ){.+ @
0880: 20 7b 22 75 73 65 72 22 3a 20 25 21 6a 28 7a 55 {"user": %!j(zU
0890: 73 65 72 29 2c 20 22 6b 6e 6f 77 6e 22 3a 20 66 ser), "known": f
08a0: 61 6c 73 65 7d 0a 2b 20 20 20 20 7d 65 6c 73 65 alse}.+ }else
08b0: 7b 0a 2b 20 20 20 20 20 20 40 20 7b 22 75 73 65 {.+ @ {"use
08c0: 72 22 3a 20 25 21 6a 28 7a 55 73 65 72 29 2c 20 r": %!j(zUser),
08d0: 22 6b 6e 6f 77 6e 22 3a 20 74 72 75 65 2c 20 22 "known": true, "
08e0: 63 61 70 61 62 69 6c 69 74 69 65 73 22 3a 20 25 capabilities": %
08f0: 21 6a 28 7a 43 61 70 29 2c 0a 2b 20 20 20 20 20 !j(zCap),.+
0900: 20 40 20 20 22 6d 6f 64 72 65 71 5f 77 69 6b 69 @ "modreq_wiki
0910: 22 3a 20 25 73 28 64 62 5f 67 65 74 5f 62 6f 6f ": %s(db_get_boo
0920: 6c 65 61 6e 28 22 6d 6f 64 72 65 71 2d 77 69 6b lean("modreq-wik
0930: 69 22 2c 30 29 3f 22 74 72 75 65 22 3a 22 66 61 i",0)?"true":"fa
0940: 6c 73 65 22 29 2c 0a 2b 20 20 20 20 20 20 40 20 lse"),.+ @
0950: 20 22 6d 6f 64 72 65 71 5f 74 6b 74 22 3a 20 25 "modreq_tkt": %
0960: 73 28 64 62 5f 67 65 74 5f 62 6f 6f 6c 65 61 6e s(db_get_boolean
0970: 28 22 6d 6f 64 72 65 71 2d 74 6b 74 22 2c 30 29 ("modreq-tkt",0)
0980: 3f 22 74 72 75 65 22 3a 22 66 61 6c 73 65 22 29 ?"true":"false")
0990: 7d 0a 2b 20 20 20 20 20 20 66 6f 73 73 69 6c 5f }.+ fossil_
09a0: 66 72 65 65 28 7a 43 61 70 29 3b 0a 2b 20 20 20 free(zCap);.+
09b0: 20 7d 0a 2b 20 20 20 20 72 65 74 75 72 6e 3b 0a }.+ return;.
09c0: 2b 20 20 7d 0a 2b 20 20 40 20 7b 22 61 72 74 69 + }.+ @ {"arti
09d0: 66 61 63 74 73 22 3a 20 5b 0a 2b 20 20 77 68 69 facts": [.+ whi
09e0: 6c 65 28 20 7a 4e 61 6d 65 73 5b 30 5d 20 29 7b le( zNames[0] ){
09f0: 0a 2b 20 20 20 20 69 6e 74 20 6e 20 3d 20 30 3b .+ int n = 0;
0a00: 0a 2b 20 20 20 20 63 68 61 72 20 2a 7a 48 61 73 .+ char *zHas
0a10: 68 3b 0a 2b 20 20 20 20 77 68 69 6c 65 28 20 7a h;.+ while( z
0a20: 4e 61 6d 65 73 5b 30 5d 3d 3d 27 2c 27 20 7c 7c Names[0]==',' ||
0a30: 20 66 6f 73 73 69 6c 5f 69 73 73 70 61 63 65 28 fossil_isspace(
0a40: 7a 4e 61 6d 65 73 5b 30 5d 29 20 29 20 7a 4e 61 zNames[0]) ) zNa
0a50: 6d 65 73 2b 2b 3b 0a 2b 20 20 20 20 77 68 69 6c mes++;.+ whil
0a60: 65 28 20 7a 4e 61 6d 65 73 5b 6e 5d 20 26 26 20 e( zNames[n] &&
0a70: 7a 4e 61 6d 65 73 5b 6e 5d 21 3d 27 2c 27 20 26 zNames[n]!=',' &
0a80: 26 20 21 66 6f 73 73 69 6c 5f 69 73 73 70 61 63 & !fossil_isspac
0a90: 65 28 7a 4e 61 6d 65 73 5b 6e 5d 29 20 29 20 6e e(zNames[n]) ) n
0aa0: 2b 2b 3b 0a 2b 20 20 20 20 69 66 28 20 6e 3d 3d ++;.+ if( n==
0ab0: 30 20 29 20 62 72 65 61 6b 3b 0a 2b 20 20 20 20 0 ) break;.+
0ac0: 7a 48 61 73 68 20 3d 20 6d 70 72 69 6e 74 66 28 zHash = mprintf(
0ad0: 22 25 2e 2a 73 22 2c 20 6e 2c 20 7a 4e 61 6d 65 "%.*s", n, zName
0ae0: 73 29 3b 0a 2b 20 20 20 20 7a 4e 61 6d 65 73 20 s);.+ zNames
0af0: 2b 3d 20 6e 3b 0a 2b 20 20 20 20 69 66 28 20 21 += n;.+ if( !
0b00: 66 69 72 73 74 20 29 7b 0a 2b 20 20 20 20 20 20 first ){.+
0b10: 40 20 2c 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 @ ,.+ }.+
0b20: 66 69 72 73 74 20 3d 20 30 3b 0a 2b 20 20 20 20 first = 0;.+
0b30: 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c 0a 2b db_prepare(&q,.+
0b40: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 62 6c "SELECT bl
0b50: 6f 62 2e 72 69 64 2c 20 62 6c 6f 62 2e 72 63 76 ob.rid, blob.rcv
0b60: 69 64 2c 20 75 73 65 72 2e 6c 6f 67 69 6e 2c 20 id, user.login,
0b70: 66 75 6c 6c 63 61 70 28 75 73 65 72 2e 63 61 70 fullcap(user.cap
0b80: 29 22 0a 2b 20 20 20 20 20 20 22 20 20 46 52 4f )".+ " FRO
0b90: 4d 20 62 6c 6f 62 20 4c 45 46 54 20 4a 4f 49 4e M blob LEFT JOIN
0ba0: 20 72 63 76 66 72 6f 6d 20 55 53 49 4e 47 28 72 rcvfrom USING(r
0bb0: 63 76 69 64 29 20 4c 45 46 54 20 4a 4f 49 4e 20 cvid) LEFT JOIN
0bc0: 75 73 65 72 20 55 53 49 4e 47 28 75 69 64 29 22 user USING(uid)"
0bd0: 0a 2b 20 20 20 20 20 20 22 20 57 48 45 52 45 20 .+ " WHERE
0be0: 62 6c 6f 62 2e 75 75 69 64 3d 25 51 20 41 4e 44 blob.uuid=%Q AND
0bf0: 20 62 6c 6f 62 2e 73 69 7a 65 3e 3d 30 22 2c 20 blob.size>=0",
0c00: 7a 48 61 73 68 29 3b 0a 2b 20 20 20 20 69 66 28 zHash);.+ if(
0c10: 20 64 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 db_step(&q)==SQ
0c20: 4c 49 54 45 5f 52 4f 57 0a 2b 20 20 20 20 20 26 LITE_ROW.+ &
0c30: 26 20 28 67 2e 70 65 72 6d 2e 50 72 69 76 61 74 & (g.perm.Privat
0c40: 65 20 7c 7c 20 21 63 6f 6e 74 65 6e 74 5f 69 73 e || !content_is
0c50: 5f 70 72 69 76 61 74 65 28 64 62 5f 63 6f 6c 75 _private(db_colu
0c60: 6d 6e 5f 69 6e 74 28 26 71 2c 30 29 29 29 0a 2b mn_int(&q,0))).+
0c70: 20 20 20 20 29 7b 0a 2b 20 20 20 20 20 20 40 20 ){.+ @
0c80: 7b 22 68 61 73 68 22 3a 20 25 21 6a 28 7a 48 61 {"hash": %!j(zHa
0c90: 73 68 29 2c 20 22 72 65 63 65 69 76 65 64 22 3a sh), "received":
0ca0: 20 74 72 75 65 2c 20 22 72 69 64 22 3a 20 25 64 true, "rid": %d
0cb0: 28 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 (db_column_int(&
0cc0: 71 2c 30 29 29 2c 0a 2b 20 20 20 20 20 20 40 20 q,0)),.+ @
0cd0: 20 22 72 63 76 69 64 22 3a 20 25 64 28 64 62 5f "rcvid": %d(db_
0ce0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26 71 2c 31 29 column_int(&q,1)
0cf0: 29 2c 20 22 75 73 65 72 22 3a 20 25 21 6a 28 64 ), "user": %!j(d
0d00: 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 b_column_text(&q
0d10: 2c 32 29 29 2c 0a 2b 20 20 20 20 20 20 40 20 20 ,2)),.+ @
0d20: 22 63 61 70 61 62 69 6c 69 74 69 65 73 22 3a 20 "capabilities":
0d30: 25 21 6a 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 %!j(db_column_te
0d40: 78 74 28 26 71 2c 33 29 29 7d 0a 2b 20 20 20 20 xt(&q,3))}.+
0d50: 7d 65 6c 73 65 7b 0a 2b 20 20 20 20 20 20 40 20 }else{.+ @
0d60: 7b 22 68 61 73 68 22 3a 20 25 21 6a 28 7a 48 61 {"hash": %!j(zHa
0d70: 73 68 29 2c 20 22 72 65 63 65 69 76 65 64 22 3a sh), "received":
0d80: 20 66 61 6c 73 65 7d 0a 2b 20 20 20 20 7d 0a 2b false}.+ }.+
0d90: 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28 db_finalize(
0da0: 26 71 29 3b 0a 2b 20 20 20 20 66 6f 73 73 69 6c &q);.+ fossil
0db0: 5f 66 72 65 65 28 7a 48 61 73 68 29 3b 0a 2b 20 _free(zHash);.+
0dc0: 20 7d 0a 2b 20 20 40 20 5d 7d 0a 2b 7d 0a 2d 2d }.+ @ ]}.+}.--
0dd0: 2d 20 66 6f 73 73 69 6c 2d 32 2e 32 37 2f 73 72 - fossil-2.27/sr
0de0: 63 2f 64 62 2e 63 0a 2b 2b 2b 20 66 6f 73 73 69 c/db.c.+++ fossi
0df0: 6c 2d 72 65 63 65 69 70 74 2f 73 72 63 2f 64 62 l-receipt/src/db
0e00: 2e 63 0a 40 40 20 2d 35 30 34 34 2c 36 20 2b 35 .c.@@ -5044,6 +5
0e10: 30 34 34 2c 31 32 20 40 40 0a 20 2a 2a 20 75 73 044,12 @@. ** us
0e20: 65 64 2e 0a 20 2a 2f 0a 20 2f 2a 0a 2b 2a 2a 20 ed.. */. /*.+**
0e30: 53 45 54 54 49 4e 47 3a 20 72 63 76 6c 6f 67 69 SETTING: rcvlogi
0e40: 6e 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c n bool
0e50: 65 61 6e 20 64 65 66 61 75 6c 74 3d 6f 66 66 0a ean default=off.
0e60: 2b 2a 2a 20 49 66 20 65 6e 61 62 6c 65 64 2c 20 +** If enabled,
0e70: 74 68 65 20 2f 72 63 76 6c 6f 67 69 6e 20 70 61 the /rcvlogin pa
0e80: 67 65 20 73 68 6f 77 73 20 61 20 75 73 65 72 20 ge shows a user
0e90: 68 6f 6c 64 69 6e 67 20 52 65 61 64 20 77 68 6f holding Read who
0ea0: 20 73 65 6e 74 0a 2b 2a 2a 20 65 61 63 68 20 61 sent.+** each a
0eb0: 72 74 69 66 61 63 74 20 74 68 65 79 20 6d 61 79 rtifact they may
0ec0: 20 72 65 61 64 2c 20 61 6e 64 20 74 68 61 74 20 read, and that
0ed0: 75 73 65 72 27 73 20 63 61 70 61 62 69 6c 69 74 user's capabilit
0ee0: 69 65 73 2c 20 62 75 74 0a 2b 2a 2a 20 6e 65 76 ies, but.+** nev
0ef0: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 er the address i
0f00: 74 20 63 61 6d 65 20 66 72 6f 6d 2e 0a 2b 2a 2f t came from..+*/
0f10: 0a 2b 2f 2a 0a 20 2a 2a 20 53 45 54 54 49 4e 47 .+/*. ** SETTING
0f20: 3a 20 72 65 64 69 72 65 63 74 2d 74 6f 2d 68 74 : redirect-to-ht
0f30: 74 70 73 20 20 20 64 65 66 61 75 6c 74 3d 30 20 tps default=0
0f40: 77 69 64 74 68 3d 32 0a 20 2a 2a 20 53 70 65 63 width=2. ** Spec
0f50: 69 66 69 65 73 20 77 68 65 74 68 65 72 20 6f 72 ifies whether or
0f60: 20 6e 6f 74 20 74 6f 20 72 65 64 69 72 65 63 74 not to redirect
0f70: 20 75 6e 65 6e 63 72 79 70 74 65 64 20 22 68 74 unencrypted "ht
0f80: 74 70 3a 2f 2f 22 20 72 65 71 75 65 73 74 73 20 tp://" requests
0f90: 74 6f 0a 20 2a 2a 20 65 6e 63 72 79 70 74 65 64 to. ** encrypted
0fa0: 20 22 68 74 74 70 73 3a 2f 2f 22 20 55 52 49 73 "https://" URIs
0fb0: 2e 20 41 20 76 61 6c 75 65 20 6f 66 20 30 20 28 . A value of 0 (
0fc0: 74 68 65 20 64 65 66 61 75 6c 74 29 20 6d 65 61 the default) mea
0fd0: 6e 73 20 64 6f 20 6e 6f 74 0a 00 00 00 00 00 00 ns do not.......
0fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1000: 72 63 76 6c 6f 67 69 6e 2d 72 65 63 6f 72 64 2f rcvlogin-record/
1010: 74 72 69 61 6c 2e 70 79 00 00 00 00 00 00 00 00 trial.py........
1020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1060: 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 ....0000644.0000
1070: 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 000.0000000.0000
1080: 30 30 30 31 37 34 32 00 31 35 32 37 30 34 35 31 0001742.15270451
1090: 37 34 37 00 30 31 34 33 36 30 00 20 30 00 00 00 747.014360. 0...
10a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1100: 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 .ustar .root...
1110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1120: 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 .........root...
1130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
11a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
11b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
11c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
11d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
11e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
11f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1200: 69 6d 70 6f 72 74 20 68 74 74 70 2e 63 6f 6f 6b import http.cook
1210: 69 65 6a 61 72 2c 20 6a 73 6f 6e 2c 20 72 65 2c iejar, json, re,
1220: 20 73 79 73 2c 20 75 72 6c 6c 69 62 2e 70 61 72 sys, urllib.par
1230: 73 65 2c 20 75 72 6c 6c 69 62 2e 72 65 71 75 65 se, urllib.reque
1240: 73 74 0a 62 61 73 65 20 3d 20 73 79 73 2e 61 72 st.base = sys.ar
1250: 67 76 5b 31 5d 3b 20 63 69 20 3d 20 73 79 73 2e gv[1]; ci = sys.
1260: 61 72 67 76 5b 32 5d 0a 64 65 66 20 73 65 73 73 argv[2].def sess
1270: 69 6f 6e 28 75 73 65 72 2c 20 70 77 29 3a 0a 20 ion(user, pw):.
1280: 20 20 20 6a 61 72 20 3d 20 68 74 74 70 2e 63 6f jar = http.co
1290: 6f 6b 69 65 6a 61 72 2e 43 6f 6f 6b 69 65 4a 61 okiejar.CookieJa
12a0: 72 28 29 0a 20 20 20 20 6f 70 20 3d 20 75 72 6c r(). op = url
12b0: 6c 69 62 2e 72 65 71 75 65 73 74 2e 62 75 69 6c lib.request.buil
12c0: 64 5f 6f 70 65 6e 65 72 28 75 72 6c 6c 69 62 2e d_opener(urllib.
12d0: 72 65 71 75 65 73 74 2e 48 54 54 50 43 6f 6f 6b request.HTTPCook
12e0: 69 65 50 72 6f 63 65 73 73 6f 72 28 6a 61 72 29 ieProcessor(jar)
12f0: 29 0a 20 20 20 20 69 66 20 75 73 65 72 3a 0a 20 ). if user:.
1300: 20 20 20 20 20 20 20 6f 70 2e 6f 70 65 6e 28 62 op.open(b
1310: 61 73 65 20 2b 20 22 2f 6c 6f 67 69 6e 22 2c 20 ase + "/login",
1320: 75 72 6c 6c 69 62 2e 70 61 72 73 65 2e 75 72 6c urllib.parse.url
1330: 65 6e 63 6f 64 65 28 7b 22 75 22 3a 20 75 73 65 encode({"u": use
1340: 72 2c 20 22 70 22 3a 20 70 77 2c 20 22 69 6e 22 r, "p": pw, "in"
1350: 3a 20 22 31 22 7d 29 2e 65 6e 63 6f 64 65 28 29 : "1"}).encode()
1360: 29 0a 20 20 20 20 72 65 74 75 72 6e 20 6f 70 0a ). return op.
1370: 64 65 66 20 67 65 74 28 6f 70 2c 20 70 61 74 68 def get(op, path
1380: 2c 20 64 61 74 61 3d 4e 6f 6e 65 2c 20 72 65 66 , data=None, ref
1390: 65 72 65 72 3d 4e 6f 6e 65 29 3a 0a 20 20 20 20 erer=None):.
13a0: 72 65 71 20 3d 20 75 72 6c 6c 69 62 2e 72 65 71 req = urllib.req
13b0: 75 65 73 74 2e 52 65 71 75 65 73 74 28 62 61 73 uest.Request(bas
13c0: 65 20 2b 20 70 61 74 68 2c 20 64 61 74 61 3d 75 e + path, data=u
13d0: 72 6c 6c 69 62 2e 70 61 72 73 65 2e 75 72 6c 65 rllib.parse.urle
13e0: 6e 63 6f 64 65 28 64 61 74 61 29 2e 65 6e 63 6f ncode(data).enco
13f0: 64 65 28 29 20 69 66 20 64 61 74 61 20 65 6c 73 de() if data els
1400: 65 20 4e 6f 6e 65 29 0a 20 20 20 20 69 66 20 72 e None). if r
1410: 65 66 65 72 65 72 3a 20 72 65 71 2e 61 64 64 5f eferer: req.add_
1420: 68 65 61 64 65 72 28 22 52 65 66 65 72 65 72 22 header("Referer"
1430: 2c 20 62 61 73 65 20 2b 20 72 65 66 65 72 65 72 , base + referer
1440: 29 0a 20 20 20 20 74 72 79 3a 0a 20 20 20 20 20 ). try:.
1450: 20 20 20 72 20 3d 20 6f 70 2e 6f 70 65 6e 28 72 r = op.open(r
1460: 65 71 29 3b 20 72 65 74 75 72 6e 20 72 2e 73 74 eq); return r.st
1470: 61 74 75 73 2c 20 72 2e 72 65 61 64 28 29 2e 64 atus, r.read().d
1480: 65 63 6f 64 65 28 29 2c 20 64 69 63 74 28 72 2e ecode(), dict(r.
1490: 68 65 61 64 65 72 73 29 2c 20 72 2e 67 65 74 75 headers), r.getu
14a0: 72 6c 28 29 0a 20 20 20 20 65 78 63 65 70 74 20 rl(). except
14b0: 75 72 6c 6c 69 62 2e 65 72 72 6f 72 2e 48 54 54 urllib.error.HTT
14c0: 50 45 72 72 6f 72 20 61 73 20 65 3a 0a 20 20 20 PError as e:.
14d0: 20 20 20 20 20 72 65 74 75 72 6e 20 65 2e 63 6f return e.co
14e0: 64 65 2c 20 65 2e 72 65 61 64 28 29 2e 64 65 63 de, e.read().dec
14f0: 6f 64 65 28 29 2c 20 64 69 63 74 28 65 2e 68 65 ode(), dict(e.he
1500: 61 64 65 72 73 29 2c 20 70 61 74 68 0a 6f 75 74 aders), path.out
1510: 20 3d 20 7b 7d 0a 62 6f 62 2c 20 61 6c 69 63 65 = {}.bob, alice
1520: 2c 20 61 6e 6f 6e 20 3d 20 73 65 73 73 69 6f 6e , anon = session
1530: 28 22 62 6f 62 22 2c 20 22 70 77 2d 62 6f 62 22 ("bob", "pw-bob"
1540: 29 2c 20 73 65 73 73 69 6f 6e 28 22 61 6c 69 63 ), session("alic
1550: 65 22 2c 20 22 70 77 2d 61 6c 69 63 65 22 29 2c e", "pw-alice"),
1560: 20 73 65 73 73 69 6f 6e 28 4e 6f 6e 65 2c 20 4e session(None, N
1570: 6f 6e 65 29 0a 6f 75 74 5b 22 31 20 62 6f 62 2c one).out["1 bob,
1580: 20 73 65 74 74 69 6e 67 20 6f 66 66 22 5d 20 3d setting off"] =
1590: 20 67 65 74 28 62 6f 62 2c 20 22 2f 72 63 76 6c get(bob, "/rcvl
15a0: 6f 67 69 6e 3f 6e 61 6d 65 3d 22 20 2b 20 63 69 ogin?name=" + ci
15b0: 29 5b 30 3a 31 5d 0a 70 72 69 6e 74 28 6a 73 6f )[0:1].print(jso
15c0: 6e 2e 64 75 6d 70 73 28 6f 75 74 29 29 3b 20 73 n.dumps(out)); s
15d0: 79 73 2e 73 74 64 6f 75 74 2e 66 6c 75 73 68 28 ys.stdout.flush(
15e0: 29 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 )...............
15f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1600: 72 63 76 6c 6f 67 69 6e 2d 72 65 63 6f 72 64 2f rcvlogin-record/
1610: 74 72 69 61 6c 32 2e 70 79 00 00 00 00 00 00 00 trial2.py.......
1620: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1630: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1640: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1650: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1660: 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 ....0000644.0000
1670: 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 000.0000000.0000
1680: 30 30 30 35 31 34 34 00 31 35 32 37 30 34 35 31 0005144.15270451
1690: 37 34 37 00 30 31 34 34 34 32 00 20 30 00 00 00 747.014442. 0...
16a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
16b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
16c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
16d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
16e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
16f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1700: 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 .ustar .root...
1710: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1720: 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 .........root...
1730: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1740: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1750: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
17a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
17b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
17c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
17d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
17e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
17f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
1800: 69 6d 70 6f 72 74 20 68 74 74 70 2e 63 6f 6f 6b import http.cook
1810: 69 65 6a 61 72 2c 20 6a 73 6f 6e 2c 20 72 65 2c iejar, json, re,
1820: 20 73 79 73 2c 20 75 72 6c 6c 69 62 2e 70 61 72 sys, urllib.par
1830: 73 65 2c 20 75 72 6c 6c 69 62 2e 72 65 71 75 65 se, urllib.reque
1840: 73 74 0a 62 61 73 65 20 3d 20 73 79 73 2e 61 72 st.base = sys.ar
1850: 67 76 5b 31 5d 3b 20 63 69 20 3d 20 73 79 73 2e gv[1]; ci = sys.
1860: 61 72 67 76 5b 32 5d 0a 64 65 66 20 73 65 73 73 argv[2].def sess
1870: 69 6f 6e 28 75 73 65 72 2c 20 70 77 29 3a 0a 20 ion(user, pw):.
1880: 20 20 20 6a 61 72 20 3d 20 68 74 74 70 2e 63 6f jar = http.co
1890: 6f 6b 69 65 6a 61 72 2e 43 6f 6f 6b 69 65 4a 61 okiejar.CookieJa
18a0: 72 28 29 0a 20 20 20 20 6f 70 20 3d 20 75 72 6c r(). op = url
18b0: 6c 69 62 2e 72 65 71 75 65 73 74 2e 62 75 69 6c lib.request.buil
18c0: 64 5f 6f 70 65 6e 65 72 28 75 72 6c 6c 69 62 2e d_opener(urllib.
18d0: 72 65 71 75 65 73 74 2e 48 54 54 50 43 6f 6f 6b request.HTTPCook
18e0: 69 65 50 72 6f 63 65 73 73 6f 72 28 6a 61 72 29 ieProcessor(jar)
18f0: 29 0a 20 20 20 20 69 66 20 75 73 65 72 3a 0a 20 ). if user:.
1900: 20 20 20 20 20 20 20 6f 70 2e 6f 70 65 6e 28 62 op.open(b
1910: 61 73 65 20 2b 20 22 2f 6c 6f 67 69 6e 22 2c 20 ase + "/login",
1920: 75 72 6c 6c 69 62 2e 70 61 72 73 65 2e 75 72 6c urllib.parse.url
1930: 65 6e 63 6f 64 65 28 7b 22 75 22 3a 20 75 73 65 encode({"u": use
1940: 72 2c 20 22 70 22 3a 20 70 77 2c 20 22 69 6e 22 r, "p": pw, "in"
1950: 3a 20 22 31 22 7d 29 2e 65 6e 63 6f 64 65 28 29 : "1"}).encode()
1960: 29 0a 20 20 20 20 72 65 74 75 72 6e 20 6f 70 0a ). return op.
1970: 64 65 66 20 72 65 71 28 6f 70 2c 20 70 61 74 68 def req(op, path
1980: 2c 20 64 61 74 61 3d 4e 6f 6e 65 2c 20 72 65 66 , data=None, ref
1990: 65 72 65 72 3d 4e 6f 6e 65 29 3a 0a 20 20 20 20 erer=None):.
19a0: 72 20 3d 20 75 72 6c 6c 69 62 2e 72 65 71 75 65 r = urllib.reque
19b0: 73 74 2e 52 65 71 75 65 73 74 28 62 61 73 65 20 st.Request(base
19c0: 2b 20 70 61 74 68 2c 20 64 61 74 61 3d 75 72 6c + path, data=url
19d0: 6c 69 62 2e 70 61 72 73 65 2e 75 72 6c 65 6e 63 lib.parse.urlenc
19e0: 6f 64 65 28 64 61 74 61 29 2e 65 6e 63 6f 64 65 ode(data).encode
19f0: 28 29 20 69 66 20 64 61 74 61 20 69 73 20 6e 6f () if data is no
1a00: 74 20 4e 6f 6e 65 20 65 6c 73 65 20 4e 6f 6e 65 t None else None
1a10: 29 0a 20 20 20 20 69 66 20 72 65 66 65 72 65 72 ). if referer
1a20: 3a 20 72 2e 61 64 64 5f 68 65 61 64 65 72 28 22 : r.add_header("
1a30: 52 65 66 65 72 65 72 22 2c 20 62 61 73 65 20 2b Referer", base +
1a40: 20 72 65 66 65 72 65 72 29 0a 20 20 20 20 74 72 referer). tr
1a50: 79 3a 0a 20 20 20 20 20 20 20 20 78 20 3d 20 6f y:. x = o
1a60: 70 2e 6f 70 65 6e 28 72 29 3b 20 72 65 74 75 72 p.open(r); retur
1a70: 6e 20 78 2e 73 74 61 74 75 73 2c 20 78 2e 72 65 n x.status, x.re
1a80: 61 64 28 29 2e 64 65 63 6f 64 65 28 29 2c 20 64 ad().decode(), d
1a90: 69 63 74 28 78 2e 68 65 61 64 65 72 73 29 2c 20 ict(x.headers),
1aa0: 78 2e 67 65 74 75 72 6c 28 29 0a 20 20 20 20 65 x.geturl(). e
1ab0: 78 63 65 70 74 20 75 72 6c 6c 69 62 2e 65 72 72 xcept urllib.err
1ac0: 6f 72 2e 48 54 54 50 45 72 72 6f 72 20 61 73 20 or.HTTPError as
1ad0: 65 3a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 e:. retur
1ae0: 6e 20 65 2e 63 6f 64 65 2c 20 65 2e 72 65 61 64 n e.code, e.read
1af0: 28 29 2e 64 65 63 6f 64 65 28 29 2c 20 64 69 63 ().decode(), dic
1b00: 74 28 65 2e 68 65 61 64 65 72 73 29 2c 20 62 61 t(e.headers), ba
1b10: 73 65 20 2b 20 70 61 74 68 0a 62 6f 62 2c 20 61 se + path.bob, a
1b20: 6c 69 63 65 2c 20 61 6e 6f 6e 20 3d 20 73 65 73 lice, anon = ses
1b30: 73 69 6f 6e 28 22 62 6f 62 22 2c 20 22 70 77 2d sion("bob", "pw-
1b40: 62 6f 62 22 29 2c 20 73 65 73 73 69 6f 6e 28 22 bob"), session("
1b50: 61 6c 69 63 65 22 2c 20 22 70 77 2d 61 6c 69 63 alice", "pw-alic
1b60: 65 22 29 2c 20 73 65 73 73 69 6f 6e 28 4e 6f 6e e"), session(Non
1b70: 65 2c 20 4e 6f 6e 65 29 0a 73 2c 20 62 6f 64 79 e, None).s, body
1b80: 2c 20 68 2c 20 75 72 6c 20 3d 20 72 65 71 28 62 , h, url = req(b
1b90: 6f 62 2c 20 22 2f 72 63 76 6c 6f 67 69 6e 3f 6e ob, "/rcvlogin?n
1ba0: 61 6d 65 3d 22 20 2b 20 63 69 29 0a 70 72 69 6e ame=" + ci).prin
1bb0: 74 28 22 32 20 62 6f 62 2c 20 73 65 74 74 69 6e t("2 bob, settin
1bc0: 67 20 6f 6e 3a 22 2c 20 73 2c 20 68 2e 67 65 74 g on:", s, h.get
1bd0: 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 22 29 ("Content-Type")
1be0: 2c 20 62 6f 64 79 2e 73 74 72 69 70 28 29 29 0a , body.strip()).
1bf0: 70 72 69 6e 74 28 22 20 20 20 61 64 64 72 65 73 print(" addres
1c00: 73 20 73 68 6f 77 6e 3a 22 2c 20 22 31 32 37 2e s shown:", "127.
1c10: 30 2e 30 2e 31 22 20 69 6e 20 62 6f 64 79 20 6f 0.0.1" in body o
1c20: 72 20 22 69 70 61 64 64 72 22 20 69 6e 20 62 6f r "ipaddr" in bo
1c30: 64 79 29 0a 73 2c 20 62 6f 64 79 2c 20 68 2c 20 dy).s, body, h,
1c40: 75 72 6c 20 3d 20 72 65 71 28 61 6e 6f 6e 2c 20 url = req(anon,
1c50: 22 2f 72 63 76 6c 6f 67 69 6e 3f 6e 61 6d 65 3d "/rcvlogin?name=
1c60: 22 20 2b 20 63 69 29 0a 70 72 69 6e 74 28 22 33 " + ci).print("3
1c70: 20 61 6e 6f 6e 79 6d 6f 75 73 3a 22 2c 20 73 2c anonymous:", s,
1c80: 20 75 72 6c 2e 72 65 70 6c 61 63 65 28 62 61 73 url.replace(bas
1c90: 65 2c 20 22 22 29 2c 20 62 6f 64 79 2e 73 74 72 e, ""), body.str
1ca0: 69 70 28 29 5b 3a 31 32 30 5d 2e 72 65 70 6c 61 ip()[:120].repla
1cb0: 63 65 28 22 5c 6e 22 2c 20 22 20 22 29 29 0a 73 ce("\n", " ")).s
1cc0: 2c 20 62 6f 64 79 2c 20 68 2c 20 75 72 6c 20 3d , body, h, url =
1cd0: 20 72 65 71 28 62 6f 62 2c 20 22 2f 72 63 76 6c req(bob, "/rcvl
1ce0: 6f 67 69 6e 3f 75 73 65 72 3d 61 6c 69 63 65 22 ogin?user=alice"
1cf0: 29 0a 70 72 69 6e 74 28 22 34 20 62 6f 62 20 61 ).print("4 bob a
1d00: 73 6b 73 20 61 6c 69 63 65 27 73 20 63 61 70 61 sks alice's capa
1d10: 62 69 6c 69 74 69 65 73 3a 22 2c 20 62 6f 64 79 bilities:", body
1d20: 2e 73 74 72 69 70 28 29 29 0a 23 20 61 6c 69 63 .strip()).# alic
1d30: 65 20 70 6f 73 74 73 20 61 20 74 68 72 65 61 64 e posts a thread
1d40: 20 74 68 72 6f 75 67 68 20 46 6f 73 73 69 6c 27 through Fossil'
1d50: 73 20 6f 77 6e 20 66 6f 72 6d 0a 73 2c 20 62 6f s own form.s, bo
1d60: 64 79 2c 20 68 2c 20 75 72 6c 20 3d 20 72 65 71 dy, h, url = req
1d70: 28 61 6c 69 63 65 2c 20 22 2f 66 6f 72 75 6d 6e (alice, "/forumn
1d80: 65 77 22 29 0a 63 73 72 66 20 3d 20 72 65 2e 73 ew").csrf = re.s
1d90: 65 61 72 63 68 28 72 27 6e 61 6d 65 3d 22 63 73 earch(r'name="cs
1da0: 72 66 22 20 76 61 6c 75 65 3d 22 28 5b 5e 22 5d rf" value="([^"]
1db0: 2b 29 22 27 2c 20 62 6f 64 79 29 2e 67 72 6f 75 +)"', body).grou
1dc0: 70 28 31 29 0a 73 2c 20 62 6f 64 79 2c 20 68 2c p(1).s, body, h,
1dd0: 20 75 72 6c 20 3d 20 72 65 71 28 61 6c 69 63 65 url = req(alice
1de0: 2c 20 22 2f 66 6f 72 75 6d 65 31 22 2c 20 7b 22 , "/forume1", {"
1df0: 63 73 72 66 22 3a 20 63 73 72 66 2c 20 22 74 69 csrf": csrf, "ti
1e00: 74 6c 65 22 3a 20 22 61 20 74 68 72 65 61 64 22 tle": "a thread"
1e10: 2c 20 22 6d 69 6d 65 74 79 70 65 22 3a 20 22 74 , "mimetype": "t
1e20: 65 78 74 2f 78 2d 6d 61 72 6b 64 6f 77 6e 22 2c ext/x-markdown",
1e30: 20 22 63 6f 6e 74 65 6e 74 22 3a 20 22 77 6f 72 "content": "wor
1e40: 6b 22 2c 20 22 73 75 62 6d 69 74 22 3a 20 22 53 k", "submit": "S
1e50: 75 62 6d 69 74 22 7d 2c 20 72 65 66 65 72 65 72 ubmit"}, referer
1e60: 3d 22 2f 66 6f 72 75 6d 6e 65 77 22 29 0a 70 6f ="/forumnew").po
1e70: 73 74 20 3d 20 75 72 6c 2e 72 73 70 6c 69 74 28 st = url.rsplit(
1e80: 22 2f 22 2c 20 31 29 5b 2d 31 5d 0a 70 72 69 6e "/", 1)[-1].prin
1e90: 74 28 22 35 20 61 6c 69 63 65 27 73 20 70 6f 73 t("5 alice's pos
1ea0: 74 20 74 68 72 6f 75 67 68 20 2f 66 6f 72 75 6d t through /forum
1eb0: 65 31 3a 22 2c 20 73 2c 20 75 72 6c 2e 72 65 70 e1:", s, url.rep
1ec0: 6c 61 63 65 28 62 61 73 65 2c 20 22 22 29 29 0a lace(base, "")).
1ed0: 73 2c 20 62 6f 64 79 2c 20 68 2c 20 75 72 6c 20 s, body, h, url
1ee0: 3d 20 72 65 71 28 62 6f 62 2c 20 22 2f 72 63 76 = req(bob, "/rcv
1ef0: 6c 6f 67 69 6e 3f 6e 61 6d 65 3d 22 20 2b 20 70 login?name=" + p
1f00: 6f 73 74 29 0a 70 72 69 6e 74 28 22 20 20 20 62 ost).print(" b
1f10: 6f 62 20 72 65 61 64 73 20 69 74 73 20 72 65 63 ob reads its rec
1f20: 65 69 70 74 3a 22 2c 20 62 6f 64 79 2e 73 74 72 eipt:", body.str
1f30: 69 70 28 29 29 0a 23 20 70 72 65 66 69 6c 6c 3a ip()).# prefill:
1f40: 20 4f 43 58 27 73 20 70 61 67 65 20 77 6f 75 6c OCX's page woul
1f50: 64 20 50 4f 53 54 20 74 68 65 73 65 20 66 69 65 d POST these fie
1f60: 6c 64 73 2c 20 77 69 74 68 20 6e 6f 20 63 73 72 lds, with no csr
1f70: 66 2c 20 74 6f 20 46 6f 73 73 69 6c 27 73 20 6f f, to Fossil's o
1f80: 77 6e 20 72 65 70 6c 79 20 66 6f 72 6d 0a 73 2c wn reply form.s,
1f90: 20 62 6f 64 79 2c 20 68 2c 20 75 72 6c 20 3d 20 body, h, url =
1fa0: 72 65 71 28 61 6c 69 63 65 2c 20 22 2f 66 6f 72 req(alice, "/for
1fb0: 75 6d 65 32 22 2c 20 7b 22 66 70 69 64 22 3a 20 ume2", {"fpid":
1fc0: 70 6f 73 74 2c 20 22 72 65 70 6c 79 22 3a 20 22 post, "reply": "
1fd0: 31 22 2c 20 22 6d 69 6d 65 74 79 70 65 22 3a 20 1", "mimetype":
1fe0: 22 74 65 78 74 2f 78 2d 6d 61 72 6b 64 6f 77 6e "text/x-markdown
1ff0: 22 2c 20 22 63 6f 6e 74 65 6e 74 22 3a 20 22 50 ", "content": "P
2000: 52 45 46 49 4c 4c 20 60 60 60 6a 73 6f 6e 5c 6e REFILL ```json\n
2010: 7b 5c 22 6f 63 78 5c 22 3a 20 31 7d 5c 6e 60 60 {\"ocx\": 1}\n``
2020: 60 22 2c 20 22 70 72 65 76 69 65 77 22 3a 20 22 `", "preview": "
2030: 31 22 7d 2c 20 72 65 66 65 72 65 72 3d 22 2f 65 1"}, referer="/e
2040: 78 74 2f 6f 63 78 32 2d 63 67 69 22 29 0a 70 72 xt/ocx2-cgi").pr
2050: 69 6e 74 28 22 36 20 70 72 65 66 69 6c 6c 65 64 int("6 prefilled
2060: 20 72 65 70 6c 79 20 66 6f 72 6d 3a 22 2c 20 73 reply form:", s
2070: 2c 20 22 63 6f 6e 74 65 6e 74 20 73 68 6f 77 6e , "content shown
2080: 3a 22 2c 20 22 50 52 45 46 49 4c 4c 22 20 69 6e :", "PREFILL" in
2090: 20 62 6f 64 79 2c 20 22 7c 20 53 75 62 6d 69 74 body, "| Submit
20a0: 20 62 75 74 74 6f 6e 3a 22 2c 20 27 6e 61 6d 65 button:", 'name
20b0: 3d 22 73 75 62 6d 69 74 22 27 20 69 6e 20 62 6f ="submit"' in bo
20c0: 64 79 2c 20 22 7c 20 63 73 72 66 20 69 6e 20 66 dy, "| csrf in f
20d0: 6f 72 6d 3a 22 2c 20 27 6e 61 6d 65 3d 22 63 73 orm:", 'name="cs
20e0: 72 66 22 27 20 69 6e 20 62 6f 64 79 29 0a 73 2c rf"' in body).s,
20f0: 20 62 6f 64 79 2c 20 68 2c 20 75 72 6c 20 3d 20 body, h, url =
2100: 72 65 71 28 62 6f 62 2c 20 22 2f 72 63 76 6c 6f req(bob, "/rcvlo
2110: 67 69 6e 3f 6e 61 6d 65 3d 22 20 2b 20 70 6f 73 gin?name=" + pos
2120: 74 29 20 20 23 20 6e 6f 74 68 69 6e 67 20 6e 65 t) # nothing ne
2130: 77 20 77 61 73 20 73 74 6f 72 65 64 20 62 79 20 w was stored by
2140: 74 68 65 20 70 72 65 66 69 6c 6c 0a 73 32 2c 20 the prefill.s2,
2150: 62 6f 64 79 32 2c 20 68 32 2c 20 75 72 6c 32 20 body2, h2, url2
2160: 3d 20 72 65 71 28 61 6c 69 63 65 2c 20 22 2f 66 = req(alice, "/f
2170: 6f 72 75 6d 70 6f 73 74 2f 22 20 2b 20 70 6f 73 orumpost/" + pos
2180: 74 29 0a 70 72 69 6e 74 28 22 20 20 20 72 65 70 t).print(" rep
2190: 6c 69 65 73 20 73 74 6f 72 65 64 20 62 79 20 74 lies stored by t
21a0: 68 65 20 70 72 65 66 69 6c 6c 20 61 6c 6f 6e 65 he prefill alone
21b0: 3a 22 2c 20 62 6f 64 79 32 2e 63 6f 75 6e 74 28 :", body2.count(
21c0: 22 66 6f 72 75 6d 50 6f 73 74 48 64 72 22 29 20 "forumPostHdr")
21d0: 2d 20 31 20 69 66 20 22 66 6f 72 75 6d 50 6f 73 - 1 if "forumPos
21e0: 74 48 64 72 22 20 69 6e 20 62 6f 64 79 32 20 65 tHdr" in body2 e
21f0: 6c 73 65 20 22 6e 2f 61 22 29 0a 70 72 69 6e 74 lse "n/a").print
2200: 28 22 37 20 43 53 50 20 6f 6e 20 46 6f 73 73 69 ("7 CSP on Fossi
2210: 6c 27 73 20 70 61 67 65 73 3a 22 2c 20 68 2e 67 l's pages:", h.g
2220: 65 74 28 22 43 6f 6e 74 65 6e 74 2d 53 65 63 75 et("Content-Secu
2230: 72 69 74 79 2d 50 6f 6c 69 63 79 22 29 20 6f 72 rity-Policy") or
2240: 20 68 32 2e 67 65 74 28 22 43 6f 6e 74 65 6e 74 h2.get("Content
2250: 2d 53 65 63 75 72 69 74 79 2d 50 6f 6c 69 63 79 -Security-Policy
2260: 22 29 29 0a 00 00 00 00 00 00 00 00 00 00 00 00 ")).............
2270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
22a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
22b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
22c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
22d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
22e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
22f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2320: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2350: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
23a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
23b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
23c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
23d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
23e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
23f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2400: 72 63 76 6c 6f 67 69 6e 2d 72 65 63 6f 72 64 2f rcvlogin-record/
2410: 74 72 69 61 6c 32 2e 74 78 74 00 00 00 00 00 00 trial2.txt......
2420: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2430: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2440: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2450: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2460: 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 ....0000644.0000
2470: 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 000.0000000.0000
2480: 30 30 30 32 35 35 37 00 31 35 32 37 30 34 35 31 0002557.15270451
2490: 37 34 37 00 30 31 34 36 33 36 00 20 30 00 00 00 747.014636. 0...
24a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
24b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
24c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
24d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
24e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
24f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2500: 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 .ustar .root...
2510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2520: 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 .........root...
2530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2540: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
25a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
25b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
25c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
25d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
25e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
25f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2600: 32 20 62 6f 62 2c 20 73 65 74 74 69 6e 67 20 6f 2 bob, setting o
2610: 6e 3a 20 32 30 30 20 61 70 70 6c 69 63 61 74 69 n: 200 applicati
2620: 6f 6e 2f 6a 73 6f 6e 20 7b 22 61 72 74 69 66 61 on/json {"artifa
2630: 63 74 73 22 3a 20 5b 0a 7b 22 68 61 73 68 22 3a cts": [.{"hash":
2640: 20 22 39 36 63 66 32 36 66 34 63 64 65 37 64 66 "96cf26f4cde7df
2650: 37 34 34 66 37 39 37 64 35 39 34 64 35 61 64 38 744f797d594d5ad8
2660: 62 38 34 37 38 34 30 39 33 32 35 61 62 66 35 35 b8478409325abf55
2670: 63 62 64 31 37 33 65 64 34 64 30 66 36 36 64 37 cbd173ed4d0f66d7
2680: 64 66 22 2c 20 22 72 65 63 65 69 76 65 64 22 3a df", "received":
2690: 20 74 72 75 65 2c 20 22 72 69 64 22 3a 20 33 2c true, "rid": 3,
26a0: 0a 20 22 72 63 76 69 64 22 3a 20 32 2c 20 22 75 . "rcvid": 2, "u
26b0: 73 65 72 22 3a 20 22 61 6c 69 63 65 22 2c 0a 20 ser": "alice",.
26c0: 22 63 61 70 61 62 69 6c 69 74 69 65 73 22 3a 20 "capabilities":
26d0: 22 63 67 68 69 6a 6e 6f 72 7a 32 33 34 22 7d 0a "cghijnorz234"}.
26e0: 5d 7d 0a 20 20 20 61 64 64 72 65 73 73 20 73 68 ]}. address sh
26f0: 6f 77 6e 3a 20 46 61 6c 73 65 0a 33 20 61 6e 6f own: False.3 ano
2700: 6e 79 6d 6f 75 73 3a 20 32 30 30 20 2f 72 63 76 nymous: 200 /rcv
2710: 6c 6f 67 69 6e 3f 6e 61 6d 65 3d 39 36 63 66 32 login?name=96cf2
2720: 36 66 34 63 64 65 37 64 66 37 34 34 66 37 39 37 6f4cde7df744f797
2730: 64 35 39 34 64 35 61 64 38 62 38 34 37 38 34 30 d594d5ad8b847840
2740: 39 33 32 35 61 62 66 35 35 63 62 64 31 37 33 65 9325abf55cbd173e
2750: 64 34 64 30 66 36 36 64 37 64 66 20 7b 22 61 72 d4d0f66d7df {"ar
2760: 74 69 66 61 63 74 73 22 3a 20 5b 20 7b 22 68 61 tifacts": [ {"ha
2770: 73 68 22 3a 20 22 39 36 63 66 32 36 66 34 63 64 sh": "96cf26f4cd
2780: 65 37 64 66 37 34 34 66 37 39 37 64 35 39 34 64 e7df744f797d594d
2790: 35 61 64 38 62 38 34 37 38 34 30 39 33 32 35 61 5ad8b8478409325a
27a0: 62 66 35 35 63 62 64 31 37 33 65 64 34 64 30 66 bf55cbd173ed4d0f
27b0: 36 36 64 37 64 66 22 2c 20 22 72 65 63 65 69 76 66d7df", "receiv
27c0: 65 64 22 3a 20 74 72 75 65 2c 20 22 72 69 64 22 ed": true, "rid"
27d0: 3a 20 33 2c 0a 34 20 62 6f 62 20 61 73 6b 73 20 : 3,.4 bob asks
27e0: 61 6c 69 63 65 27 73 20 63 61 70 61 62 69 6c 69 alice's capabili
27f0: 74 69 65 73 3a 20 7b 22 75 73 65 72 22 3a 20 22 ties: {"user": "
2800: 61 6c 69 63 65 22 2c 20 22 6b 6e 6f 77 6e 22 3a alice", "known":
2810: 20 74 72 75 65 2c 20 22 63 61 70 61 62 69 6c 69 true, "capabili
2820: 74 69 65 73 22 3a 20 22 63 67 68 69 6a 6e 6f 72 ties": "cghijnor
2830: 7a 32 33 34 22 2c 0a 20 22 6d 6f 64 72 65 71 5f z234",. "modreq_
2840: 77 69 6b 69 22 3a 20 66 61 6c 73 65 2c 0a 20 22 wiki": false,. "
2850: 6d 6f 64 72 65 71 5f 74 6b 74 22 3a 20 66 61 6c modreq_tkt": fal
2860: 73 65 7d 0a 35 20 61 6c 69 63 65 27 73 20 70 6f se}.5 alice's po
2870: 73 74 20 74 68 72 6f 75 67 68 20 2f 66 6f 72 75 st through /foru
2880: 6d 65 31 3a 20 32 30 30 20 2f 66 6f 72 75 6d 70 me1: 200 /forump
2890: 6f 73 74 2f 33 64 37 34 62 61 61 37 62 38 0a 20 ost/3d74baa7b8.
28a0: 20 20 62 6f 62 20 72 65 61 64 73 20 69 74 73 20 bob reads its
28b0: 72 65 63 65 69 70 74 3a 20 7b 22 61 72 74 69 66 receipt: {"artif
28c0: 61 63 74 73 22 3a 20 5b 0a 7b 22 68 61 73 68 22 acts": [.{"hash"
28d0: 3a 20 22 33 64 37 34 62 61 61 37 62 38 22 2c 20 : "3d74baa7b8",
28e0: 22 72 65 63 65 69 76 65 64 22 3a 20 66 61 6c 73 "received": fals
28f0: 65 7d 0a 5d 7d 0a 36 20 70 72 65 66 69 6c 6c 65 e}.]}.6 prefille
2900: 64 20 72 65 70 6c 79 20 66 6f 72 6d 3a 20 32 30 d reply form: 20
2910: 30 20 63 6f 6e 74 65 6e 74 20 73 68 6f 77 6e 3a 0 content shown:
2920: 20 54 72 75 65 20 7c 20 53 75 62 6d 69 74 20 62 True | Submit b
2930: 75 74 74 6f 6e 3a 20 54 72 75 65 20 7c 20 63 73 utton: True | cs
2940: 72 66 20 69 6e 20 66 6f 72 6d 3a 20 54 72 75 65 rf in form: True
2950: 0a 20 20 20 72 65 70 6c 69 65 73 20 73 74 6f 72 . replies stor
2960: 65 64 20 62 79 20 74 68 65 20 70 72 65 66 69 6c ed by the prefil
2970: 6c 20 61 6c 6f 6e 65 3a 20 30 0a 37 20 43 53 50 l alone: 0.7 CSP
2980: 20 6f 6e 20 46 6f 73 73 69 6c 27 73 20 70 61 67 on Fossil's pag
2990: 65 73 3a 20 64 65 66 61 75 6c 74 2d 73 72 63 20 es: default-src
29a0: 27 73 65 6c 66 27 20 64 61 74 61 3a 3b 20 73 63 'self' data:; sc
29b0: 72 69 70 74 2d 73 72 63 20 27 73 65 6c 66 27 20 ript-src 'self'
29c0: 27 6e 6f 6e 63 65 2d 35 35 32 61 66 61 65 31 35 'nonce-552afae15
29d0: 38 35 64 38 63 64 30 30 30 37 34 39 61 32 61 36 85d8cd000749a2a6
29e0: 61 64 32 33 64 34 34 64 37 33 35 39 38 64 61 63 ad23d44d73598dac
29f0: 34 32 31 63 30 30 35 27 3b 20 73 74 79 6c 65 2d 421c005'; style-
2a00: 73 72 63 20 27 73 65 6c 66 27 20 27 75 6e 73 61 src 'self' 'unsa
2a10: 66 65 2d 69 6e 6c 69 6e 65 27 3b 20 69 6d 67 2d fe-inline'; img-
2a20: 73 72 63 20 2a 20 64 61 74 61 3a 0a 7b 22 61 72 src * data:.{"ar
2a30: 74 69 66 61 63 74 73 22 3a 20 5b 7b 22 68 61 73 tifacts": [{"has
2a40: 68 22 3a 20 22 33 64 37 34 62 61 61 37 62 38 65 h": "3d74baa7b8e
2a50: 63 38 32 39 66 39 39 65 34 36 31 35 31 34 34 39 c829f99e46151449
2a60: 32 32 32 32 39 32 63 62 36 65 36 38 39 61 33 65 222292cb6e689a3e
2a70: 36 65 66 63 64 61 64 35 61 36 62 63 36 34 33 30 6efcdad5a6bc6430
2a80: 38 38 65 34 38 22 2c 20 22 72 65 63 65 69 76 65 88e48", "receive
2a90: 64 22 3a 20 74 72 75 65 2c 20 22 72 69 64 22 3a d": true, "rid":
2aa0: 20 34 2c 20 22 72 63 76 69 64 22 3a 20 33 2c 20 4, "rcvid": 3,
2ab0: 22 75 73 65 72 22 3a 20 22 61 6c 69 63 65 22 2c "user": "alice",
2ac0: 20 22 63 61 70 61 62 69 6c 69 74 69 65 73 22 3a "capabilities":
2ad0: 20 22 63 67 68 69 6a 6e 6f 72 7a 32 33 34 22 7d "cghijnorz234"}
2ae0: 5d 7d 73 65 74 74 69 6e 67 20 6f 66 66 3a 20 33 ]}setting off: 3
2af0: 30 32 20 2d 3e 20 68 74 74 70 3a 2f 2f 31 32 37 02 -> http://127
2b00: 2e 30 2e 30 2e 31 3a 35 34 37 36 39 2f 6c 6f 67 .0.0.1:54769/log
2b10: 69 6e 3f 67 3d 72 63 76 6c 6f 67 69 6e 25 33 66 in?g=rcvlogin%3f
2b20: 6e 61 6d 65 25 33 44 33 64 37 34 62 61 61 37 62 name%3D3d74baa7b
2b30: 38 65 63 38 32 39 66 39 39 65 34 36 31 35 31 34 8ec829f99e461514
2b40: 34 39 32 32 32 32 39 32 63 62 36 65 36 38 39 61 49222292cb6e689a
2b50: 33 65 36 65 66 63 64 61 64 35 61 36 62 63 36 34 3e6efcdad5a6bc64
2b60: 33 30 38 38 65 34 38 26 61 6e 6f 6e 3d 31 0a 00 3088e48&anon=1..
2b70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2b90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2ba0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2bb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2bc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2bd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2be0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2bf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2c00: 72 63 76 6c 6f 67 69 6e 2d 72 65 63 6f 72 64 2f rcvlogin-record/
2c10: 52 45 41 44 4d 45 2e 74 78 74 00 00 00 00 00 00 README.txt......
2c20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2c30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2c40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2c50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2c60: 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 ....0000644.0000
2c70: 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 000.0000000.0000
2c80: 30 30 30 30 36 33 30 00 31 35 32 37 30 34 35 31 0000630.15270451
2c90: 37 34 37 00 30 31 34 33 36 34 00 20 30 00 00 00 747.014364. 0...
2ca0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2cb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2cc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2cd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2ce0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2cf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2d00: 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 .ustar .root...
2d10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2d20: 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 .........root...
2d30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2d40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2d50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2d60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2d70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2d80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2d90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2da0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2db0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2dc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2dd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2de0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2df0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2e00: 53 63 72 61 74 63 68 20 74 72 69 61 6c 2c 20 32 Scratch trial, 2
2e10: 30 32 36 2d 31 30 2d 32 38 20 7e 32 30 3a 30 30 026-10-28 ~20:00
2e20: 20 55 54 43 2c 20 46 6f 73 73 69 6c 20 32 2e 32 UTC, Fossil 2.2
2e30: 37 20 5b 39 39 36 37 35 38 38 34 61 39 5d 20 62 7 [99675884a9] b
2e40: 75 69 6c 74 20 66 72 6f 6d 20 73 6f 75 72 63 65 uilt from source
2e50: 20 77 69 74 68 20 72 63 76 6c 6f 67 69 6e 2e 70 with rcvlogin.p
2e60: 61 74 63 68 2e 0a 55 73 65 72 73 3a 20 61 6c 69 atch..Users: ali
2e70: 63 65 20 28 6f 69 32 33 34 6e 63 29 2c 20 62 6f ce (oi234nc), bo
2e80: 62 20 28 6f 32 29 2e 20 61 6c 69 63 65 20 70 75 b (o2). alice pu
2e90: 73 68 65 64 20 61 20 63 68 65 63 6b 2d 69 6e 20 shed a check-in
2ea0: 66 72 6f 6d 20 68 65 72 20 63 6c 6f 6e 65 20 61 from her clone a
2eb0: 6e 64 20 70 6f 73 74 65 64 20 61 20 74 68 72 65 nd posted a thre
2ec0: 61 64 20 74 68 72 6f 75 67 68 20 2f 66 6f 72 75 ad through /foru
2ed0: 6d 65 31 2e 0a 74 72 69 61 6c 32 2e 74 78 74 3a me1..trial2.txt:
2ee0: 20 74 68 65 20 6f 75 74 70 75 74 73 20 28 62 6f the outputs (bo
2ef0: 62 20 72 65 61 64 73 20 62 6f 74 68 20 72 65 63 b reads both rec
2f00: 65 69 70 74 73 20 77 69 74 68 20 74 68 65 20 73 eipts with the s
2f10: 65 74 74 69 6e 67 20 6f 6e 3b 20 74 68 65 20 73 etting on; the s
2f20: 65 74 74 69 6e 67 20 6f 66 66 20 73 65 6e 64 73 etting off sends
2f30: 20 68 69 6d 20 74 6f 20 2f 6c 6f 67 69 6e 3b 20 him to /login;
2f40: 74 68 65 20 70 72 65 66 69 6c 6c 65 64 20 72 65 the prefilled re
2f50: 70 6c 79 20 66 6f 72 6d 20 73 68 6f 77 73 20 74 ply form shows t
2f60: 68 65 20 74 65 78 74 2c 20 46 6f 73 73 69 6c 27 he text, Fossil'
2f70: 73 20 53 75 62 6d 69 74 20 61 6e 64 20 63 73 72 s Submit and csr
2f80: 66 2c 20 61 6e 64 20 73 74 6f 72 65 73 20 6e 6f f, and stores no
2f90: 74 68 69 6e 67 29 2e 0a 00 00 00 00 00 00 00 00 thing)..........
2fa0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
30a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
30b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
30c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
30d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
30e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
30f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
31a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
31b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
31c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
31d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
31e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
31f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
32a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
32b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
32c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
32d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
32e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
32f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3310: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3320: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3350: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
33a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
33b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
33c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
33d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
33e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
33f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................