Attachment "patch" to
ticket [7e32f0c179]
added by
anonymous
2010-08-17 02:10:54.
0000: 49 6e 64 65 78 3a 20 73 72 63 2f 61 64 64 2e 63 Index: src/add.c
0010: 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..==============
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 72 63 2f 61 =====..--- src/a
0060: 64 64 2e 63 0d 0a 2b 2b 2b 20 73 72 63 2f 61 64 dd.c..+++ src/ad
0070: 64 2e 63 0d 0a 40 40 20 2d 31 36 33 2c 31 30 20 d.c..@@ -163,10
0080: 2b 31 36 33 2c 31 32 20 40 40 0d 0a 20 20 20 66 +163,12 @@.. f
0090: 6f 72 28 69 3d 32 3b 20 69 3c 67 2e 61 72 67 63 or(i=2; i<g.argc
00a0: 3b 20 69 2b 2b 29 7b 0d 0a 20 20 20 20 20 63 68 ; i++){.. ch
00b0: 61 72 20 2a 7a 4e 61 6d 65 3b 0d 0a 20 20 20 20 ar *zName;..
00c0: 20 69 6e 74 20 69 73 44 69 72 3b 0d 0a 20 0d 0a int isDir;.. ..
00d0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 6d 70 72 zName = mpr
00e0: 69 6e 74 66 28 22 25 2f 22 2c 20 67 2e 61 72 67 intf("%/", g.arg
00f0: 76 5b 69 5d 29 3b 0d 0a 2b 20 20 20 20 66 69 6c v[i]);..+ fil
0100: 65 5f 73 69 6d 70 6c 69 66 79 5f 6e 61 6d 65 28 e_simplify_name(
0110: 7a 4e 61 6d 65 2c 20 2d 31 29 3b 0d 0a 2b 0d 0a zName, -1);..+..
0120: 20 20 20 20 20 69 73 44 69 72 20 3d 20 66 69 6c isDir = fil
0130: 65 5f 69 73 64 69 72 28 7a 4e 61 6d 65 29 3b 0d e_isdir(zName);.
0140: 0a 20 20 20 20 20 69 66 28 20 69 73 44 69 72 3d . if( isDir=
0150: 3d 31 20 29 7b 0d 0a 20 20 20 20 20 20 20 61 64 =1 ){.. ad
0160: 64 5f 64 69 72 65 63 74 6f 72 79 28 7a 4e 61 6d d_directory(zNam
0170: 65 2c 20 76 69 64 2c 20 26 72 65 70 6f 29 3b 0d e, vid, &repo);.
0180: 0a 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 . }else if(
0190: 69 73 44 69 72 3d 3d 30 20 29 7b 0d 0a 20 20 20 isDir==0 ){..
01a0: 20 20 20 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c fossil_fatal
01b0: 28 22 6e 6f 74 20 66 6f 75 6e 64 3a 20 25 73 22 ("not found: %s"
01c0: 2c 20 7a 4e 61 6d 65 29 3b 0d 0a 40 40 20 2d 32 , zName);..@@ -2
01d0: 35 32 2c 31 30 20 2b 32 35 34 2c 31 32 20 40 40 52,10 +254,12 @@
01e0: 0d 0a 20 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 .. db_begin_tr
01f0: 61 6e 73 61 63 74 69 6f 6e 28 29 3b 0d 0a 20 20 ansaction();..
0200: 20 66 6f 72 28 69 3d 32 3b 20 69 3c 67 2e 61 72 for(i=2; i<g.ar
0210: 67 63 3b 20 69 2b 2b 29 7b 0d 0a 20 20 20 20 20 gc; i++){..
0220: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0d 0a 20 0d char *zName;.. .
0230: 0a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 6d 70 . zName = mp
0240: 72 69 6e 74 66 28 22 25 2f 22 2c 20 67 2e 61 72 rintf("%/", g.ar
0250: 67 76 5b 69 5d 29 3b 0d 0a 2b 20 20 20 20 66 69 gv[i]);..+ fi
0260: 6c 65 5f 73 69 6d 70 6c 69 66 79 5f 6e 61 6d 65 le_simplify_name
0270: 28 7a 4e 61 6d 65 2c 20 2d 31 29 3b 0d 0a 2b 0d (zName, -1);..+.
0280: 0a 20 20 20 20 20 69 66 28 20 66 69 6c 65 5f 69 . if( file_i
0290: 73 64 69 72 28 7a 4e 61 6d 65 29 20 3d 3d 20 31 sdir(zName) == 1
02a0: 20 29 7b 0d 0a 20 20 20 20 20 20 20 64 65 6c 5f ){.. del_
02b0: 64 69 72 65 63 74 6f 72 79 5f 63 6f 6e 74 65 6e directory_conten
02c0: 74 28 7a 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 t(zName);..
02d0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {..
02e0: 20 63 68 61 72 20 2a 7a 50 61 74 68 3b 0d 0a 20 char *zPath;..
02f0: 20 20 20 20 20 20 42 6c 6f 62 20 70 61 74 68 6e Blob pathn
0300: 61 6d 65 3b 0d 0a 0d 0a 49 6e 64 65 78 3a 20 73 ame;....Index: s
0310: 72 63 2f 63 61 70 74 63 68 61 2e 63 0d 0a 3d 3d rc/captcha.c..==
0320: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0330: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0340: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0350: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0360: 3d 0d 0a 2d 2d 2d 20 73 72 63 2f 63 61 70 74 63 =..--- src/captc
0370: 68 61 2e 63 0d 0a 2b 2b 2b 20 73 72 63 2f 63 61 ha.c..+++ src/ca
0380: 70 74 63 68 61 2e 63 0d 0a 40 40 20 2d 34 32 39 ptcha.c..@@ -429
0390: 2c 31 32 20 2b 34 32 39 2c 31 32 20 40 40 0d 0a ,12 +429,12 @@..
03a0: 20 20 20 20 20 29 3b 0d 0a 20 20 20 20 20 7a 53 );.. zS
03b0: 65 63 72 65 74 20 3d 20 64 62 5f 67 65 74 28 22 ecret = db_get("
03c0: 63 61 70 74 63 68 61 2d 73 65 63 72 65 74 22 2c captcha-secret",
03d0: 20 30 29 3b 0d 0a 20 20 20 20 20 61 73 73 65 72 0);.. asser
03e0: 74 28 20 7a 53 65 63 72 65 74 21 3d 30 20 29 3b t( zSecret!=0 );
03f0: 0d 0a 20 20 20 7d 0d 0a 20 20 20 62 6c 6f 62 5f .. }.. blob_
0400: 69 6e 69 74 28 26 62 2c 20 30 2c 20 30 29 3b 0d init(&b, 0, 0);.
0410: 0a 2d 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 .- blob_appendf
0420: 28 26 62 2c 20 22 25 73 2d 25 78 22 2c 20 7a 53 (&b, "%s-%x", zS
0430: 65 63 72 65 74 2c 20 73 65 65 64 29 3b 0d 0a 2b ecret, seed);..+
0440: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 blob_appendf(&
0450: 62 2c 20 22 25 7a 2d 25 78 22 2c 20 7a 53 65 63 b, "%z-%x", zSec
0460: 72 65 74 2c 20 73 65 65 64 29 3b 0d 0a 20 20 20 ret, seed);..
0470: 73 68 61 31 73 75 6d 5f 62 6c 6f 62 28 26 62 2c sha1sum_blob(&b,
0480: 20 26 62 29 3b 0d 0a 20 20 20 7a 20 3d 20 62 6c &b);.. z = bl
0490: 6f 62 5f 62 75 66 66 65 72 28 26 62 29 3b 0d 0a ob_buffer(&b);..
04a0: 20 20 20 6d 65 6d 63 70 79 28 7a 52 65 73 2c 20 memcpy(zRes,
04b0: 7a 2c 20 38 29 3b 0d 0a 20 20 20 7a 52 65 73 5b z, 8);.. zRes[
04c0: 38 5d 20 3d 20 30 3b 0d 0a 20 20 20 72 65 74 75 8] = 0;.. retu
04d0: 72 6e 20 7a 52 65 73 3b 0d 0a 20 7d 0d 0a 0d 0a rn zRes;.. }....
04e0: 49 6e 64 65 78 3a 20 73 72 63 2f 63 67 69 2e 63 Index: src/cgi.c
04f0: 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..==============
0500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0510: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0530: 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 72 63 2f 63 =====..--- src/c
0540: 67 69 2e 63 0d 0a 2b 2b 2b 20 73 72 63 2f 63 67 gi.c..+++ src/cg
0550: 69 2e 63 0d 0a 40 40 20 2d 31 33 39 2c 32 30 20 i.c..@@ -139,20
0560: 2b 31 33 39 2c 32 30 20 40 40 0d 0a 20 7d 0d 0a +139,20 @@.. }..
0570: 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 41 64 64 69 .. /*.. ** Addi
0580: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 tional informati
0590: 6f 6e 20 75 73 65 64 20 74 6f 20 66 6f 72 6d 20 on used to form
05a0: 74 68 65 20 48 54 54 50 20 72 65 70 6c 79 0d 0a the HTTP reply..
05b0: 20 2a 2f 0d 0a 2d 73 74 61 74 69 63 20 63 68 61 */..-static cha
05c0: 72 20 2a 7a 43 6f 6e 74 65 6e 74 54 79 70 65 20 r *zContentType
05d0: 3d 20 22 74 65 78 74 2f 68 74 6d 6c 22 3b 20 20 = "text/html";
05e0: 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 74 79 /* Content ty
05f0: 70 65 20 6f 66 20 74 68 65 20 72 65 70 6c 79 20 pe of the reply
0600: 2a 2f 0d 0a 2d 73 74 61 74 69 63 20 63 68 61 72 */..-static char
0610: 20 2a 7a 52 65 70 6c 79 53 74 61 74 75 73 20 3d *zReplyStatus =
0620: 20 22 4f 4b 22 3b 20 20 20 20 20 20 20 20 20 20 "OK";
0630: 20 20 2f 2a 20 52 65 70 6c 79 20 73 74 61 74 75 /* Reply statu
0640: 73 20 64 65 73 63 72 69 70 74 69 6f 6e 20 2a 2f s description */
0650: 0d 0a 2b 73 74 61 74 69 63 20 63 68 61 72 20 7a ..+static char z
0660: 43 6f 6e 74 65 6e 74 54 79 70 65 5b 31 30 30 5d ContentType[100]
0670: 20 3d 20 22 74 65 78 74 2f 68 74 6d 6c 22 3b 20 = "text/html";
0680: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 74 /* Content t
0690: 79 70 65 20 6f 66 20 74 68 65 20 72 65 70 6c 79 ype of the reply
06a0: 20 2a 2f 0d 0a 2b 73 74 61 74 69 63 20 63 68 61 */..+static cha
06b0: 72 20 7a 52 65 70 6c 79 53 74 61 74 75 73 5b 31 r zReplyStatus[1
06c0: 30 30 5d 20 3d 20 22 4f 4b 22 3b 20 20 20 20 20 00] = "OK";
06d0: 20 20 20 20 20 20 20 2f 2a 20 52 65 70 6c 79 20 /* Reply
06e0: 73 74 61 74 75 73 20 64 65 73 63 72 69 70 74 69 status descripti
06f0: 6f 6e 20 2a 2f 0d 0a 20 73 74 61 74 69 63 20 69 on */.. static i
0700: 6e 74 20 69 52 65 70 6c 79 53 74 61 74 75 73 20 nt iReplyStatus
0710: 3d 20 32 30 30 3b 20 20 20 20 20 20 20 20 20 20 = 200;
0720: 20 20 20 20 20 2f 2a 20 52 65 70 6c 79 20 73 74 /* Reply st
0730: 61 74 75 73 20 63 6f 64 65 20 2a 2f 0d 0a 20 73 atus code */.. s
0740: 74 61 74 69 63 20 42 6c 6f 62 20 65 78 74 72 61 tatic Blob extra
0750: 48 65 61 64 65 72 20 3d 20 42 4c 4f 42 5f 49 4e Header = BLOB_IN
0760: 49 54 49 41 4c 49 5a 45 52 3b 20 20 2f 2a 20 45 ITIALIZER; /* E
0770: 78 74 72 61 20 68 65 61 64 65 72 20 74 65 78 74 xtra header text
0780: 20 2a 2f 0d 0a 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a */.. .. /*.. **
0790: 20 53 65 74 20 74 68 65 20 72 65 70 6c 79 20 63 Set the reply c
07a0: 6f 6e 74 65 6e 74 20 74 79 70 65 0d 0a 20 2a 2f ontent type.. */
07b0: 0d 0a 20 76 6f 69 64 20 63 67 69 5f 73 65 74 5f .. void cgi_set_
07c0: 63 6f 6e 74 65 6e 74 5f 74 79 70 65 28 63 6f 6e content_type(con
07d0: 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29 7b st char *zType){
07e0: 0d 0a 2d 20 20 7a 43 6f 6e 74 65 6e 74 54 79 70 ..- zContentTyp
07f0: 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 22 e = mprintf("%s"
0800: 2c 20 7a 54 79 70 65 29 3b 0d 0a 2b 20 20 73 74 , zType);..+ st
0810: 72 6e 63 70 79 28 7a 43 6f 6e 74 65 6e 74 54 79 rncpy(zContentTy
0820: 70 65 2c 20 7a 54 79 70 65 2c 20 73 69 7a 65 6f pe, zType, sizeo
0830: 66 28 7a 43 6f 6e 74 65 6e 74 54 79 70 65 29 20 f(zContentType)
0840: 2d 31 29 3b 0d 0a 20 7d 0d 0a 20 0d 0a 20 2f 2a -1);.. }.. .. /*
0850: 0d 0a 20 2a 2a 20 53 65 74 20 74 68 65 20 72 65 .. ** Set the re
0860: 70 6c 79 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74 ply content to t
0870: 68 65 20 73 70 65 63 69 66 69 65 64 20 42 4c 4f he specified BLO
0880: 42 2e 0d 0a 20 2a 2f 0d 0a 40 40 20 2d 31 36 35 B... */..@@ -165
0890: 2c 31 31 20 2b 31 36 35 2c 31 31 20 40 40 0d 0a ,11 +165,11 @@..
08a0: 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 53 65 74 20 .. /*.. ** Set
08b0: 74 68 65 20 72 65 70 6c 79 20 73 74 61 74 75 73 the reply status
08c0: 20 63 6f 64 65 0d 0a 20 2a 2f 0d 0a 20 76 6f 69 code.. */.. voi
08d0: 64 20 63 67 69 5f 73 65 74 5f 73 74 61 74 75 73 d cgi_set_status
08e0: 28 69 6e 74 20 69 53 74 61 74 2c 20 63 6f 6e 73 (int iStat, cons
08f0: 74 20 63 68 61 72 20 2a 7a 53 74 61 74 29 7b 0d t char *zStat){.
0900: 0a 2d 20 20 7a 52 65 70 6c 79 53 74 61 74 75 73 .- zReplyStatus
0910: 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 22 2c = mprintf("%s",
0920: 20 7a 53 74 61 74 29 3b 0d 0a 2b 20 20 73 74 72 zStat);..+ str
0930: 6e 63 70 79 28 7a 52 65 70 6c 79 53 74 61 74 75 ncpy(zReplyStatu
0940: 73 2c 20 7a 53 74 61 74 2c 20 73 69 7a 65 6f 66 s, zStat, sizeof
0950: 28 7a 52 65 70 6c 79 53 74 61 74 75 73 29 20 2d (zReplyStatus) -
0960: 31 29 3b 0d 0a 20 20 20 69 52 65 70 6c 79 53 74 1);.. iReplySt
0970: 61 74 75 73 20 3d 20 69 53 74 61 74 3b 0d 0a 20 atus = iStat;..
0980: 7d 0d 0a 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 41 }.. .. /*.. ** A
0990: 70 70 65 6e 64 20 74 65 78 74 20 74 6f 20 74 68 ppend text to th
09a0: 65 20 68 65 61 64 65 72 20 6f 66 20 61 6e 20 48 e header of an H
09b0: 54 54 50 20 72 65 70 6c 79 0d 0a 40 40 20 2d 32 TTP reply..@@ -2
09c0: 36 30 2c 31 31 20 2b 32 36 30 2c 31 31 20 40 40 60,11 +260,11 @@
09d0: 0d 0a 20 2a 2f 0d 0a 20 76 6f 69 64 20 63 67 69 .. */.. void cgi
09e0: 5f 72 65 70 6c 79 28 76 6f 69 64 29 7b 0d 0a 20 _reply(void){..
09f0: 20 20 69 6e 74 20 74 6f 74 61 6c 5f 73 69 7a 65 int total_size
0a00: 3b 0d 0a 20 20 20 69 66 28 20 69 52 65 70 6c 79 ;.. if( iReply
0a10: 53 74 61 74 75 73 3c 3d 30 20 29 7b 0d 0a 20 20 Status<=0 ){..
0a20: 20 20 20 69 52 65 70 6c 79 53 74 61 74 75 73 20 iReplyStatus
0a30: 3d 20 32 30 30 3b 0d 0a 2d 20 20 20 20 7a 52 65 = 200;..- zRe
0a40: 70 6c 79 53 74 61 74 75 73 20 3d 20 22 4f 4b 22 plyStatus = "OK"
0a50: 3b 0d 0a 2b 20 20 20 20 73 74 72 6e 63 70 79 28 ;..+ strncpy(
0a60: 7a 52 65 70 6c 79 53 74 61 74 75 73 2c 20 22 4f zReplyStatus, "O
0a70: 4b 22 2c 20 73 69 7a 65 6f 66 28 7a 52 65 70 6c K", sizeof(zRepl
0a80: 79 53 74 61 74 75 73 29 20 2d 31 29 3b 0d 0a 20 yStatus) -1);..
0a90: 20 20 7d 0d 0a 20 0d 0a 20 23 69 66 20 30 0d 0a }.. .. #if 0..
0aa0: 20 20 20 69 66 28 20 69 52 65 70 6c 79 53 74 61 if( iReplySta
0ab0: 74 75 73 3d 3d 32 30 30 20 26 26 20 63 68 65 63 tus==200 && chec
0ac0: 6b 5f 63 61 63 68 65 5f 63 6f 6e 74 72 6f 6c 28 k_cache_control(
0ad0: 29 20 29 20 7b 0d 0a 20 20 20 20 20 2f 2a 20 63 ) ) {.. /* c
0ae0: 68 61 6e 67 65 20 74 68 65 20 73 74 61 74 75 73 hange the status
0af0: 20 74 6f 20 22 75 6e 63 68 61 6e 67 65 64 22 20 to "unchanged"
0b00: 61 6e 64 20 77 65 20 63 61 6e 20 73 6b 69 70 20 and we can skip
0b10: 73 65 6e 64 69 6e 67 20 74 68 65 0d 0a 40 40 20 sending the..@@
0b20: 2d 31 32 33 36 2c 31 37 20 2b 31 32 33 36 2c 31 -1236,17 +1236,1
0b30: 34 20 40 40 0d 0a 20 20 20 20 20 20 20 20 20 63 4 @@.. c
0b40: 68 69 6c 64 20 3d 20 66 6f 72 6b 28 29 3b 0d 0a hild = fork();..
0b50: 20 20 20 20 20 20 20 20 20 69 66 28 20 63 68 69 if( chi
0b60: 6c 64 21 3d 30 20 29 7b 0d 0a 20 20 20 20 20 20 ld!=0 ){..
0b70: 20 20 20 20 20 69 66 28 20 63 68 69 6c 64 3e 30 if( child>0
0b80: 20 29 20 6e 63 68 69 6c 64 72 65 6e 2b 2b 3b 0d ) nchildren++;.
0b90: 0a 20 20 20 20 20 20 20 20 20 20 20 63 6c 6f 73 . clos
0ba0: 65 28 63 6f 6e 6e 65 63 74 69 6f 6e 29 3b 0d 0a e(connection);..
0bb0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0d }else{.
0bc0: 0a 2d 20 20 20 20 20 20 20 20 20 20 63 6c 6f 73 .- clos
0bd0: 65 28 30 29 3b 0d 0a 2d 20 20 20 20 20 20 20 20 e(0);..-
0be0: 20 20 64 75 70 28 63 6f 6e 6e 65 63 74 69 6f 6e dup(connection
0bf0: 29 3b 0d 0a 2d 20 20 20 20 20 20 20 20 20 20 63 );..- c
0c00: 6c 6f 73 65 28 31 29 3b 0d 0a 2d 20 20 20 20 20 lose(1);..-
0c10: 20 20 20 20 20 64 75 70 28 63 6f 6e 6e 65 63 74 dup(connect
0c20: 69 6f 6e 29 3b 0d 0a 2b 20 20 20 20 20 20 20 20 ion);..+
0c30: 20 20 64 75 70 32 28 63 6f 6e 6e 65 63 74 69 6f dup2(connectio
0c40: 6e 2c 20 30 29 3b 0d 0a 2b 20 20 20 20 20 20 20 n, 0);..+
0c50: 20 20 20 64 75 70 32 28 63 6f 6e 6e 65 63 74 69 dup2(connecti
0c60: 6f 6e 2c 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 on, 1);..
0c70: 20 20 20 20 69 66 28 20 21 67 2e 66 48 74 74 70 if( !g.fHttp
0c80: 54 72 61 63 65 20 26 26 20 21 67 2e 66 53 71 6c Trace && !g.fSql
0c90: 54 72 61 63 65 20 29 7b 0d 0a 2d 20 20 20 20 20 Trace ){..-
0ca0: 20 20 20 20 20 20 20 63 6c 6f 73 65 28 32 29 3b close(2);
0cb0: 0d 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 64 ..- d
0cc0: 75 70 28 63 6f 6e 6e 65 63 74 69 6f 6e 29 3b 0d up(connection);.
0cd0: 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 64 75 .+ du
0ce0: 70 32 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 32 p2(connection, 2
0cf0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 7d );.. }
0d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 63 6c 6f .. clo
0d10: 73 65 28 63 6f 6e 6e 65 63 74 69 6f 6e 29 3b 0d se(connection);.
0d20: 0a 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 . retu
0d30: 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 rn 0;..
0d40: 7d 0d 0a 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 49 }.. }....I
0d50: 6e 64 65 78 3a 20 73 72 63 2f 63 68 65 63 6b 69 ndex: src/checki
0d60: 6e 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d n.c..===========
0d70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0da0: 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 72 ========..--- sr
0db0: 63 2f 63 68 65 63 6b 69 6e 2e 63 0d 0a 2b 2b 2b c/checkin.c..+++
0dc0: 20 73 72 63 2f 63 68 65 63 6b 69 6e 2e 63 0d 0a src/checkin.c..
0dd0: 40 40 20 2d 31 31 32 2c 31 30 20 2b 31 31 32 2c @@ -112,10 +112,
0de0: 31 31 20 40 40 0d 0a 20 20 20 62 6c 6f 62 5f 7a 11 @@.. blob_z
0df0: 65 72 6f 28 26 72 65 70 6f 72 74 29 3b 0d 0a 20 ero(&report);..
0e00: 20 20 76 69 64 20 3d 20 64 62 5f 6c 67 65 74 5f vid = db_lget_
0e10: 69 6e 74 28 22 63 68 65 63 6b 6f 75 74 22 2c 20 int("checkout",
0e20: 30 29 3b 0d 0a 20 20 20 76 66 69 6c 65 5f 63 68 0);.. vfile_ch
0e30: 65 63 6b 5f 73 69 67 6e 61 74 75 72 65 28 76 69 eck_signature(vi
0e40: 64 2c 20 30 29 3b 0d 0a 20 20 20 73 74 61 74 75 d, 0);.. statu
0e50: 73 5f 72 65 70 6f 72 74 28 26 72 65 70 6f 72 74 s_report(&report
0e60: 2c 20 22 22 2c 20 30 29 3b 0d 0a 20 20 20 62 6c , "", 0);.. bl
0e70: 6f 62 5f 77 72 69 74 65 5f 74 6f 5f 66 69 6c 65 ob_write_to_file
0e80: 28 26 72 65 70 6f 72 74 2c 20 22 2d 22 29 3b 0d (&report, "-");.
0e90: 0a 2b 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 .+ blob_reset(&
0ea0: 72 65 70 6f 72 74 29 3b 0d 0a 20 7d 0d 0a 20 0d report);.. }.. .
0eb0: 0a 20 2f 2a 0d 0a 20 2a 2a 20 43 4f 4d 4d 41 4e . /*.. ** COMMAN
0ec0: 44 3a 20 73 74 61 74 75 73 0d 0a 20 2a 2a 0d 0a D: status.. **..
0ed0: 40 40 20 2d 31 32 33 2c 31 35 20 2b 31 32 34 2c @@ -123,15 +124,
0ee0: 32 30 20 40 40 0d 0a 20 2a 2a 0d 0a 20 2a 2a 20 20 @@.. **.. **
0ef0: 52 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 73 74 Report on the st
0f00: 61 74 75 73 20 6f 66 20 74 68 65 20 63 75 72 72 atus of the curr
0f10: 65 6e 74 20 63 68 65 63 6b 6f 75 74 2e 0d 0a 20 ent checkout...
0f20: 2a 2f 0d 0a 20 76 6f 69 64 20 73 74 61 74 75 73 */.. void status
0f30: 5f 63 6d 64 28 76 6f 69 64 29 7b 0d 0a 20 20 20 _cmd(void){..
0f40: 69 6e 74 20 76 69 64 3b 0d 0a 2b 20 20 42 6c 6f int vid;..+ Blo
0f50: 62 20 6f 75 74 3b 0d 0a 2b 0d 0a 2b 20 20 62 6c b out;..+..+ bl
0f60: 6f 62 5f 7a 65 72 6f 28 26 6f 75 74 29 3b 0d 0a ob_zero(&out);..
0f70: 20 20 20 64 62 5f 6d 75 73 74 5f 62 65 5f 77 69 db_must_be_wi
0f80: 74 68 69 6e 5f 74 72 65 65 28 29 3b 0d 0a 20 20 thin_tree();..
0f90: 20 20 20 20 20 20 2f 2a 20 30 31 32 33 34 35 36 /* 0123456
0fa0: 37 38 39 30 31 32 33 34 20 2a 2f 0d 0a 2d 20 20 78901234 */..-
0fb0: 70 72 69 6e 74 66 28 22 72 65 70 6f 73 69 74 6f printf("reposito
0fc0: 72 79 3a 20 20 20 25 73 5c 6e 22 2c 20 64 62 5f ry: %s\n", db_
0fd0: 6c 67 65 74 28 22 72 65 70 6f 73 69 74 6f 72 79 lget("repository
0fe0: 22 2c 22 22 29 29 3b 0d 0a 2d 20 20 70 72 69 6e ",""));..- prin
0ff0: 74 66 28 22 6c 6f 63 61 6c 2d 72 6f 6f 74 3a 20 tf("local-root:
1000: 20 20 25 73 5c 6e 22 2c 20 67 2e 7a 4c 6f 63 61 %s\n", g.zLoca
1010: 6c 52 6f 6f 74 29 3b 0d 0a 2d 20 20 70 72 69 6e lRoot);..- prin
1020: 74 66 28 22 73 65 72 76 65 72 2d 63 6f 64 65 3a tf("server-code:
1030: 20 20 25 73 5c 6e 22 2c 20 64 62 5f 67 65 74 28 %s\n", db_get(
1040: 22 73 65 72 76 65 72 2d 63 6f 64 65 22 2c 20 22 "server-code", "
1050: 22 29 29 3b 0d 0a 2b 20 20 62 6c 6f 62 5f 61 70 "));..+ blob_ap
1060: 70 65 6e 64 66 28 26 6f 75 74 2c 20 22 72 65 70 pendf(&out, "rep
1070: 6f 73 69 74 6f 72 79 3a 20 20 20 25 7a 5c 6e 22 ository: %z\n"
1080: 2c 20 64 62 5f 6c 67 65 74 28 22 72 65 70 6f 73 , db_lget("repos
1090: 69 74 6f 72 79 22 2c 22 22 29 29 3b 0d 0a 2b 20 itory",""));..+
10a0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6f blob_appendf(&o
10b0: 75 74 2c 20 22 6c 6f 63 61 6c 2d 72 6f 6f 74 3a ut, "local-root:
10c0: 20 20 20 25 73 5c 6e 22 2c 20 67 2e 7a 4c 6f 63 %s\n", g.zLoc
10d0: 61 6c 52 6f 6f 74 29 3b 0d 0a 2b 20 20 62 6c 6f alRoot);..+ blo
10e0: 62 5f 61 70 70 65 6e 64 66 28 26 6f 75 74 2c 20 b_appendf(&out,
10f0: 22 73 65 72 76 65 72 2d 63 6f 64 65 3a 20 20 25 "server-code: %
1100: 7a 5c 6e 22 2c 20 64 62 5f 67 65 74 28 22 73 65 z\n", db_get("se
1110: 72 76 65 72 2d 63 6f 64 65 22 2c 20 22 22 29 29 rver-code", ""))
1120: 3b 0d 0a 2b 20 20 62 6c 6f 62 5f 77 72 69 74 65 ;..+ blob_write
1130: 5f 74 6f 5f 66 69 6c 65 28 26 6f 75 74 2c 20 22 _to_file(&out, "
1140: 2d 22 29 3b 0d 0a 2b 20 20 62 6c 6f 62 5f 72 65 -");..+ blob_re
1150: 73 65 74 28 26 6f 75 74 29 3b 0d 0a 20 20 20 76 set(&out);.. v
1160: 69 64 20 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74 id = db_lget_int
1170: 28 22 63 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b ("checkout", 0);
1180: 0d 0a 20 20 20 69 66 28 20 76 69 64 20 29 7b 0d .. if( vid ){.
1190: 0a 20 20 20 20 20 73 68 6f 77 5f 63 6f 6d 6d 6f . show_commo
11a0: 6e 5f 69 6e 66 6f 28 76 69 64 2c 20 22 63 68 65 n_info(vid, "che
11b0: 63 6b 6f 75 74 3a 22 2c 20 30 29 3b 0d 0a 20 20 ckout:", 0);..
11c0: 20 7d 0d 0a 20 20 20 63 68 61 6e 67 65 73 5f 63 }.. changes_c
11d0: 6d 64 28 29 3b 0d 0a 40 40 20 2d 33 36 39 2c 31 md();..@@ -369,1
11e0: 30 20 2b 33 37 35 2c 31 31 20 40 40 0d 0a 20 20 0 +375,11 @@..
11f0: 20 69 6e 74 20 70 61 72 65 6e 74 5f 72 69 64 0d int parent_rid.
1200: 0a 20 29 7b 0d 0a 20 20 20 63 6f 6e 73 74 20 63 . ){.. const c
1210: 68 61 72 20 2a 7a 45 64 69 74 6f 72 3b 0d 0a 20 har *zEditor;..
1220: 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0d 0a 20 char *zCmd;..
1230: 20 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 0d 0a char *zFile;..
1240: 2b 20 20 63 68 61 72 20 2a 7a 45 64 69 74 6f 72 + char *zEditor
1250: 46 72 6f 6d 44 42 20 3d 20 30 3b 0d 0a 20 20 20 FromDB = 0;..
1260: 42 6c 6f 62 20 74 65 78 74 2c 20 6c 69 6e 65 3b Blob text, line;
1270: 0d 0a 20 20 20 63 68 61 72 20 2a 7a 43 6f 6d 6d .. char *zComm
1280: 65 6e 74 3b 0d 0a 20 20 20 69 6e 74 20 69 3b 0d ent;.. int i;.
1290: 0a 20 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26 74 . blob_init(&t
12a0: 65 78 74 2c 20 7a 49 6e 69 74 2c 20 2d 31 29 3b ext, zInit, -1);
12b0: 0d 0a 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 .. blob_append
12c0: 28 26 74 65 78 74 2c 0d 0a 40 40 20 2d 33 39 33 (&text,..@@ -393
12d0: 2c 31 31 20 2b 34 30 30 2c 31 31 20 40 40 0d 0a ,11 +400,11 @@..
12e0: 20 20 20 20 20 20 20 22 23 20 72 65 70 6f 73 69 "# reposi
12f0: 74 6f 72 69 65 73 2e 5c 6e 22 0d 0a 20 20 20 20 tories.\n"..
1300: 20 20 20 22 23 5c 6e 22 2c 20 2d 31 0d 0a 20 20 "#\n", -1..
1310: 20 20 20 29 3b 0d 0a 20 20 20 7d 0d 0a 20 20 20 );.. }..
1320: 73 74 61 74 75 73 5f 72 65 70 6f 72 74 28 26 74 status_report(&t
1330: 65 78 74 2c 20 22 23 20 22 2c 20 31 29 3b 0d 0a ext, "# ", 1);..
1340: 2d 20 20 7a 45 64 69 74 6f 72 20 3d 20 64 62 5f - zEditor = db_
1350: 67 65 74 28 22 65 64 69 74 6f 72 22 2c 20 30 29 get("editor", 0)
1360: 3b 0d 0a 2b 20 20 7a 45 64 69 74 6f 72 20 3d 20 ;..+ zEditor =
1370: 7a 45 64 69 74 6f 72 46 72 6f 6d 44 42 20 3d 20 zEditorFromDB =
1380: 64 62 5f 67 65 74 28 22 65 64 69 74 6f 72 22 2c db_get("editor",
1390: 20 30 29 3b 0d 0a 20 20 20 69 66 28 20 7a 45 64 0);.. if( zEd
13a0: 69 74 6f 72 3d 3d 30 20 29 7b 0d 0a 20 20 20 20 itor==0 ){..
13b0: 20 7a 45 64 69 74 6f 72 20 3d 20 67 65 74 65 6e zEditor = geten
13c0: 76 28 22 56 49 53 55 41 4c 22 29 3b 0d 0a 20 20 v("VISUAL");..
13d0: 20 7d 0d 0a 20 20 20 69 66 28 20 7a 45 64 69 74 }.. if( zEdit
13e0: 6f 72 3d 3d 30 20 29 7b 0d 0a 20 20 20 20 20 7a or==0 ){.. z
13f0: 45 64 69 74 6f 72 20 3d 20 67 65 74 65 6e 76 28 Editor = getenv(
1400: 22 45 44 49 54 4f 52 22 29 3b 0d 0a 40 40 20 2d "EDITOR");..@@ -
1410: 34 31 38 2c 31 30 20 2b 34 32 35 2c 31 31 20 40 418,10 +425,11 @
1420: 40 0d 0a 20 20 20 7a 43 6d 64 20 3d 20 6d 70 72 @.. zCmd = mpr
1430: 69 6e 74 66 28 22 25 73 20 5c 22 25 73 5c 22 22 intf("%s \"%s\""
1440: 2c 20 7a 45 64 69 74 6f 72 2c 20 7a 46 69 6c 65 , zEditor, zFile
1450: 29 3b 0d 0a 20 20 20 70 72 69 6e 74 66 28 22 25 );.. printf("%
1460: 73 5c 6e 22 2c 20 7a 43 6d 64 29 3b 0d 0a 20 20 s\n", zCmd);..
1470: 20 69 66 28 20 70 6f 72 74 61 62 6c 65 5f 73 79 if( portable_sy
1480: 73 74 65 6d 28 7a 43 6d 64 29 20 29 7b 0d 0a 20 stem(zCmd) ){..
1490: 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 fossil_panic
14a0: 28 22 65 64 69 74 6f 72 20 61 62 6f 72 74 65 64 ("editor aborted
14b0: 22 29 3b 0d 0a 20 20 20 7d 0d 0a 2b 20 20 66 72 ");.. }..+ fr
14c0: 65 65 28 7a 43 6d 64 29 3b 20 7a 43 6d 64 20 3d ee(zCmd); zCmd =
14d0: 20 30 3b 0d 0a 20 20 20 62 6c 6f 62 5f 72 65 73 0;.. blob_res
14e0: 65 74 28 26 74 65 78 74 29 3b 0d 0a 20 20 20 62 et(&text);.. b
14f0: 6c 6f 62 5f 72 65 61 64 5f 66 72 6f 6d 5f 66 69 lob_read_from_fi
1500: 6c 65 28 26 74 65 78 74 2c 20 7a 46 69 6c 65 29 le(&text, zFile)
1510: 3b 0d 0a 20 20 20 62 6c 6f 62 5f 72 65 6d 6f 76 ;.. blob_remov
1520: 65 5f 63 72 28 26 74 65 78 74 29 3b 0d 0a 20 20 e_cr(&text);..
1530: 20 75 6e 6c 69 6e 6b 28 7a 46 69 6c 65 29 3b 0d unlink(zFile);.
1540: 0a 20 20 20 66 72 65 65 28 7a 46 69 6c 65 29 3b . free(zFile);
1550: 0d 0a 40 40 20 2d 34 34 30 2c 31 30 20 2b 34 34 ..@@ -440,10 +44
1560: 38 2c 31 32 20 40 40 0d 0a 20 20 20 62 6c 6f 62 8,12 @@.. blob
1570: 5f 72 65 73 65 74 28 26 74 65 78 74 29 3b 0d 0a _reset(&text);..
1580: 20 20 20 7a 43 6f 6d 6d 65 6e 74 20 3d 20 62 6c zComment = bl
1590: 6f 62 5f 73 74 72 28 70 43 6f 6d 6d 65 6e 74 29 ob_str(pComment)
15a0: 3b 0d 0a 20 20 20 69 20 3d 20 73 74 72 6c 65 6e ;.. i = strlen
15b0: 28 7a 43 6f 6d 6d 65 6e 74 29 3b 0d 0a 20 20 20 (zComment);..
15c0: 77 68 69 6c 65 28 20 69 3e 30 20 26 26 20 69 73 while( i>0 && is
15d0: 73 70 61 63 65 28 7a 43 6f 6d 6d 65 6e 74 5b 69 space(zComment[i
15e0: 2d 31 5d 29 20 29 7b 20 69 2d 2d 3b 20 7d 0d 0a -1]) ){ i--; }..
15f0: 20 20 20 62 6c 6f 62 5f 72 65 73 69 7a 65 28 70 blob_resize(p
1600: 43 6f 6d 6d 65 6e 74 2c 20 69 29 3b 0d 0a 2b 0d Comment, i);..+.
1610: 0a 2b 20 20 69 66 28 20 7a 45 64 69 74 6f 72 46 .+ if( zEditorF
1620: 72 6f 6d 44 42 20 29 20 66 72 65 65 28 7a 45 64 romDB ) free(zEd
1630: 69 74 6f 72 46 72 6f 6d 44 42 29 3b 0d 0a 20 7d itorFromDB);.. }
1640: 0d 0a 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 50 6f .. .. /*.. ** Po
1650: 70 75 6c 61 74 65 20 74 68 65 20 47 6c 6f 62 61 pulate the Globa
1660: 6c 2e 61 43 6f 6d 6d 69 74 46 69 6c 65 5b 5d 20 l.aCommitFile[]
1670: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6d based on the com
1680: 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 mand line argume
1690: 6e 74 73 0d 0a 20 2a 2a 20 74 6f 20 61 20 5b 63 nts.. ** to a [c
16a0: 6f 6d 6d 69 74 5d 20 63 6f 6d 6d 61 6e 64 2e 20 ommit] command.
16b0: 47 6c 6f 62 61 6c 2e 61 43 6f 6d 6d 69 74 46 69 Global.aCommitFi
16c0: 6c 65 20 69 73 20 61 6e 20 61 72 72 61 79 20 6f le is an array o
16d0: 66 20 69 6e 74 65 67 65 72 73 0d 0a 0d 0a 49 6e f integers....In
16e0: 64 65 78 3a 20 73 72 63 2f 63 6c 65 61 72 73 69 dex: src/clearsi
16f0: 67 6e 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d gn.c..==========
1700: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1710: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1720: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 =========..--- s
1740: 72 63 2f 63 6c 65 61 72 73 69 67 6e 2e 63 0d 0a rc/clearsign.c..
1750: 2b 2b 2b 20 73 72 63 2f 63 6c 65 61 72 73 69 67 +++ src/clearsig
1760: 6e 2e 63 0d 0a 40 40 20 2d 33 32 2c 31 37 20 2b n.c..@@ -32,17 +
1770: 33 32 2c 31 38 20 40 40 0d 0a 20 20 20 63 68 61 32,18 @@.. cha
1780: 72 20 2a 7a 4f 75 74 3b 0d 0a 20 20 20 63 68 61 r *zOut;.. cha
1790: 72 20 2a 7a 42 61 73 65 20 3d 20 64 62 5f 67 65 r *zBase = db_ge
17a0: 74 28 22 70 67 70 2d 63 6f 6d 6d 61 6e 64 22 2c t("pgp-command",
17b0: 20 22 67 70 67 20 2d 2d 63 6c 65 61 72 73 69 67 "gpg --clearsig
17c0: 6e 20 2d 6f 20 22 29 3b 0d 0a 20 20 20 63 68 61 n -o ");.. cha
17d0: 72 20 2a 7a 43 6d 64 3b 0d 0a 20 20 20 69 6e 74 r *zCmd;.. int
17e0: 20 72 63 3b 0d 0a 20 20 20 69 66 28 20 69 73 5f rc;.. if( is_
17f0: 66 61 6c 73 65 28 7a 42 61 73 65 29 20 29 7b 0d false(zBase) ){.
1800: 0a 2b 20 20 20 20 66 72 65 65 28 7a 42 61 73 65 .+ free(zBase
1810: 29 3b 0d 0a 20 20 20 20 20 72 65 74 75 72 6e 20 );.. return
1820: 30 3b 0d 0a 20 20 20 7d 0d 0a 20 20 20 7a 52 61 0;.. }.. zRa
1830: 6e 64 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 nd = db_text(0,
1840: 22 53 45 4c 45 43 54 20 68 65 78 28 72 61 6e 64 "SELECT hex(rand
1850: 6f 6d 62 6c 6f 62 28 31 30 29 29 22 29 3b 0d 0a omblob(10))");..
1860: 20 20 20 7a 4f 75 74 20 3d 20 6d 70 72 69 6e 74 zOut = mprint
1870: 66 28 22 6f 75 74 2d 25 73 22 2c 20 7a 52 61 6e f("out-%s", zRan
1880: 64 29 3b 0d 0a 20 20 20 7a 49 6e 20 3d 20 6d 70 d);.. zIn = mp
1890: 72 69 6e 74 66 28 22 69 6e 2d 25 7a 22 2c 20 7a rintf("in-%z", z
18a0: 52 61 6e 64 29 3b 0d 0a 20 20 20 62 6c 6f 62 5f Rand);.. blob_
18b0: 77 72 69 74 65 5f 74 6f 5f 66 69 6c 65 28 70 49 write_to_file(pI
18c0: 6e 2c 20 7a 4f 75 74 29 3b 0d 0a 2d 20 20 7a 43 n, zOut);..- zC
18d0: 6d 64 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 md = mprintf("%s
18e0: 20 25 73 20 25 73 22 2c 20 7a 42 61 73 65 2c 20 %s %s", zBase,
18f0: 7a 49 6e 2c 20 7a 4f 75 74 29 3b 0d 0a 2b 20 20 zIn, zOut);..+
1900: 7a 43 6d 64 20 3d 20 6d 70 72 69 6e 74 66 28 22 zCmd = mprintf("
1910: 25 7a 20 25 73 20 25 73 22 2c 20 7a 42 61 73 65 %z %s %s", zBase
1920: 2c 20 7a 49 6e 2c 20 7a 4f 75 74 29 3b 0d 0a 20 , zIn, zOut);..
1930: 20 20 72 63 20 3d 20 70 6f 72 74 61 62 6c 65 5f rc = portable_
1940: 73 79 73 74 65 6d 28 7a 43 6d 64 29 3b 0d 0a 20 system(zCmd);..
1950: 20 20 66 72 65 65 28 7a 43 6d 64 29 3b 0d 0a 20 free(zCmd);..
1960: 20 20 69 66 28 20 72 63 3d 3d 30 20 29 7b 0d 0a if( rc==0 ){..
1970: 20 20 20 20 20 69 66 28 20 70 4f 75 74 3d 3d 70 if( pOut==p
1980: 49 6e 20 29 7b 0d 0a 20 20 20 20 20 20 20 62 6c In ){.. bl
1990: 6f 62 5f 72 65 73 65 74 28 70 49 6e 29 3b 0d 0a ob_reset(pIn);..
19a0: 0d 0a 49 6e 64 65 78 3a 20 73 72 63 2f 63 6c 6f ..Index: src/clo
19b0: 6e 65 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ne.c..==========
19c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
19d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
19e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
19f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 =========..--- s
1a00: 72 63 2f 63 6c 6f 6e 65 2e 63 0d 0a 2b 2b 2b 20 rc/clone.c..+++
1a10: 73 72 63 2f 63 6c 6f 6e 65 2e 63 0d 0a 40 40 20 src/clone.c..@@
1a20: 2d 33 39 2c 31 33 20 2b 33 39 2c 31 35 20 40 40 -39,13 +39,15 @@
1a30: 0d 0a 20 2a 2a 0d 0a 20 2a 2a 20 20 20 20 2d 2d .. **.. ** --
1a40: 61 64 6d 69 6e 2d 75 73 65 72 7c 2d 41 20 55 53 admin-user|-A US
1a50: 45 52 4e 41 4d 45 0d 0a 20 2a 2a 0d 0a 20 2a 2f ERNAME.. **.. */
1a60: 0d 0a 20 76 6f 69 64 20 63 6c 6f 6e 65 5f 63 6d .. void clone_cm
1a70: 64 28 76 6f 69 64 29 7b 0d 0a 2b 20 20 42 6c 6f d(void){..+ Blo
1a80: 62 20 6f 75 74 3b 0d 0a 20 20 20 63 68 61 72 20 b out;.. char
1a90: 2a 7a 50 61 73 73 77 6f 72 64 3b 0d 0a 20 20 20 *zPassword;..
1aa0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 65 66 const char *zDef
1ab0: 61 75 6c 74 55 73 65 72 3b 20 20 20 2f 2a 20 4f aultUser; /* O
1ac0: 70 74 69 6f 6e 61 6c 20 6e 61 6d 65 20 6f 66 20 ptional name of
1ad0: 74 68 65 20 64 65 66 61 75 6c 74 20 75 73 65 72 the default user
1ae0: 20 2a 2f 0d 0a 20 0d 0a 2b 20 20 62 6c 6f 62 5f */.. ..+ blob_
1af0: 7a 65 72 6f 28 26 6f 75 74 29 3b 0d 0a 20 20 20 zero(&out);..
1b00: 75 72 6c 5f 70 72 6f 78 79 5f 6f 70 74 69 6f 6e url_proxy_option
1b10: 73 28 29 3b 0d 0a 20 20 20 69 66 28 20 67 2e 61 s();.. if( g.a
1b20: 72 67 63 20 3c 20 34 20 29 7b 0d 0a 20 20 20 20 rgc < 4 ){..
1b30: 20 75 73 61 67 65 28 22 3f 4f 50 54 49 4f 4e 53 usage("?OPTIONS
1b40: 3f 20 46 49 4c 45 2d 4f 52 2d 55 52 4c 20 4e 45 ? FILE-OR-URL NE
1b50: 57 2d 52 45 50 4f 53 49 54 4f 52 59 22 29 3b 0d W-REPOSITORY");.
1b60: 0a 20 20 20 7d 0d 0a 20 20 20 64 62 5f 6f 70 65 . }.. db_ope
1b70: 6e 5f 63 6f 6e 66 69 67 28 30 29 3b 0d 0a 40 40 n_config(0);..@@
1b80: 20 2d 37 36 2c 31 31 20 2b 37 38 2c 31 31 20 40 -76,11 +78,11 @
1b90: 40 0d 0a 20 20 20 20 20 73 68 75 6e 5f 61 72 74 @.. shun_art
1ba0: 69 66 61 63 74 73 28 29 3b 0d 0a 20 20 20 20 20 ifacts();..
1bb0: 67 2e 7a 4c 6f 67 69 6e 20 3d 20 64 62 5f 74 65 g.zLogin = db_te
1bc0: 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 6c 6f xt(0, "SELECT lo
1bd0: 67 69 6e 20 46 52 4f 4d 20 75 73 65 72 20 57 48 gin FROM user WH
1be0: 45 52 45 20 63 61 70 20 4c 49 4b 45 20 27 25 25 ERE cap LIKE '%%
1bf0: 73 25 25 27 22 29 3b 0d 0a 20 20 20 20 20 69 66 s%%'");.. if
1c00: 28 20 67 2e 7a 4c 6f 67 69 6e 3d 3d 30 20 29 7b ( g.zLogin==0 ){
1c10: 0d 0a 20 20 20 20 20 20 20 64 62 5f 63 72 65 61 .. db_crea
1c20: 74 65 5f 64 65 66 61 75 6c 74 5f 75 73 65 72 73 te_default_users
1c30: 28 31 2c 7a 44 65 66 61 75 6c 74 55 73 65 72 29 (1,zDefaultUser)
1c40: 3b 0d 0a 20 20 20 20 20 7d 0d 0a 2d 20 20 20 20 ;.. }..-
1c50: 70 72 69 6e 74 66 28 22 52 65 70 6f 73 69 74 6f printf("Reposito
1c60: 72 79 20 63 6c 6f 6e 65 64 20 69 6e 74 6f 20 25 ry cloned into %
1c70: 73 5c 6e 22 2c 20 67 2e 61 72 67 76 5b 33 5d 29 s\n", g.argv[3])
1c80: 3b 0d 0a 2b 20 20 20 20 62 6c 6f 62 5f 61 70 70 ;..+ blob_app
1c90: 65 6e 64 66 28 26 6f 75 74 2c 20 22 52 65 70 6f endf(&out, "Repo
1ca0: 73 69 74 6f 72 79 20 63 6c 6f 6e 65 64 20 69 6e sitory cloned in
1cb0: 74 6f 20 25 73 5c 6e 22 2c 20 67 2e 61 72 67 76 to %s\n", g.argv
1cc0: 5b 33 5d 29 3b 0d 0a 20 20 20 7d 65 6c 73 65 7b [3]);.. }else{
1cd0: 0d 0a 20 20 20 20 20 64 62 5f 63 72 65 61 74 65 .. db_create
1ce0: 5f 72 65 70 6f 73 69 74 6f 72 79 28 67 2e 61 72 _repository(g.ar
1cf0: 67 76 5b 33 5d 29 3b 0d 0a 20 20 20 20 20 64 62 gv[3]);.. db
1d00: 5f 6f 70 65 6e 5f 72 65 70 6f 73 69 74 6f 72 79 _open_repository
1d10: 28 67 2e 61 72 67 76 5b 33 5d 29 3b 0d 0a 20 20 (g.argv[3]);..
1d20: 20 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e db_begin_tran
1d30: 73 61 63 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 saction();..
1d40: 20 64 62 5f 72 65 63 6f 72 64 5f 72 65 70 6f 73 db_record_repos
1d50: 69 74 6f 72 79 5f 66 69 6c 65 6e 61 6d 65 28 67 itory_filename(g
1d60: 2e 61 72 67 76 5b 33 5d 29 3b 0d 0a 40 40 20 2d .argv[3]);..@@ -
1d70: 31 30 31 2c 31 33 20 2b 31 30 33 2c 31 36 20 40 101,13 +103,16 @
1d80: 40 0d 0a 20 20 20 20 20 64 62 5f 65 6e 64 5f 74 @.. db_end_t
1d90: 72 61 6e 73 61 63 74 69 6f 6e 28 30 29 3b 0d 0a ransaction(0);..
1da0: 20 20 20 20 20 64 62 5f 63 6c 6f 73 65 28 29 3b db_close();
1db0: 0d 0a 20 20 20 20 20 64 62 5f 6f 70 65 6e 5f 72 .. db_open_r
1dc0: 65 70 6f 73 69 74 6f 72 79 28 67 2e 61 72 67 76 epository(g.argv
1dd0: 5b 33 5d 29 3b 0d 0a 20 20 20 7d 0d 0a 20 20 20 [3]);.. }..
1de0: 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 db_begin_transac
1df0: 74 69 6f 6e 28 29 3b 0d 0a 2d 20 20 70 72 69 6e tion();..- prin
1e00: 74 66 28 22 52 65 62 75 69 6c 64 69 6e 67 20 72 tf("Rebuilding r
1e10: 65 70 6f 73 69 74 6f 72 79 20 6d 65 74 61 2d 64 epository meta-d
1e20: 61 74 61 2e 2e 2e 5c 6e 22 29 3b 0d 0a 2b 20 20 ata...\n");..+
1e30: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 6f 75 blob_appendf(&ou
1e40: 74 2c 20 22 52 65 62 75 69 6c 64 69 6e 67 20 72 t, "Rebuilding r
1e50: 65 70 6f 73 69 74 6f 72 79 20 6d 65 74 61 2d 64 epository meta-d
1e60: 61 74 61 2e 2e 2e 5c 6e 22 29 3b 0d 0a 20 20 20 ata...\n");..
1e70: 72 65 62 75 69 6c 64 5f 64 62 28 30 2c 20 31 29 rebuild_db(0, 1)
1e80: 3b 0d 0a 2d 20 20 70 72 69 6e 74 66 28 22 70 72 ;..- printf("pr
1e90: 6f 6a 65 63 74 2d 69 64 3a 20 25 73 5c 6e 22 2c oject-id: %s\n",
1ea0: 20 64 62 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 db_get("project
1eb0: 2d 63 6f 64 65 22 2c 20 30 29 29 3b 0d 0a 2d 20 -code", 0));..-
1ec0: 20 70 72 69 6e 74 66 28 22 73 65 72 76 65 72 2d printf("server-
1ed0: 69 64 3a 20 20 25 73 5c 6e 22 2c 20 64 62 5f 67 id: %s\n", db_g
1ee0: 65 74 28 22 73 65 72 76 65 72 2d 63 6f 64 65 22 et("server-code"
1ef0: 2c 20 30 29 29 3b 0d 0a 2b 20 20 62 6c 6f 62 5f , 0));..+ blob_
1f00: 61 70 70 65 6e 64 66 28 26 6f 75 74 2c 20 22 70 appendf(&out, "p
1f10: 72 6f 6a 65 63 74 2d 69 64 3a 20 25 7a 5c 6e 22 roject-id: %z\n"
1f20: 2c 20 64 62 5f 67 65 74 28 22 70 72 6f 6a 65 63 , db_get("projec
1f30: 74 2d 63 6f 64 65 22 2c 20 30 29 29 3b 0d 0a 2b t-code", 0));..+
1f40: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 blob_appendf(&
1f50: 6f 75 74 2c 20 22 73 65 72 76 65 72 2d 69 64 3a out, "server-id:
1f60: 20 20 25 7a 5c 6e 22 2c 20 64 62 5f 67 65 74 28 %z\n", db_get(
1f70: 22 73 65 72 76 65 72 2d 63 6f 64 65 22 2c 20 30 "server-code", 0
1f80: 29 29 3b 0d 0a 20 20 20 7a 50 61 73 73 77 6f 72 ));.. zPasswor
1f90: 64 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 d = db_text(0, "
1fa0: 53 45 4c 45 43 54 20 70 77 20 46 52 4f 4d 20 75 SELECT pw FROM u
1fb0: 73 65 72 20 57 48 45 52 45 20 6c 6f 67 69 6e 3d ser WHERE login=
1fc0: 25 51 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 3b 0d %Q", g.zLogin);.
1fd0: 0a 2d 20 20 70 72 69 6e 74 66 28 22 61 64 6d 69 .- printf("admi
1fe0: 6e 2d 75 73 65 72 3a 20 25 73 20 28 70 61 73 73 n-user: %s (pass
1ff0: 77 6f 72 64 20 69 73 20 5c 22 25 73 5c 22 29 5c word is \"%s\")\
2000: 6e 22 2c 20 67 2e 7a 4c 6f 67 69 6e 2c 20 7a 50 n", g.zLogin, zP
2010: 61 73 73 77 6f 72 64 29 3b 0d 0a 2b 20 20 62 6c assword);..+ bl
2020: 6f 62 5f 61 70 70 65 6e 64 66 28 26 6f 75 74 2c ob_appendf(&out,
2030: 20 22 61 64 6d 69 6e 2d 75 73 65 72 3a 20 25 73 "admin-user: %s
2040: 20 28 70 61 73 73 77 6f 72 64 20 69 73 20 5c 22 (password is \"
2050: 25 7a 5c 22 29 5c 6e 22 2c 20 67 2e 7a 4c 6f 67 %z\")\n", g.zLog
2060: 69 6e 2c 20 7a 50 61 73 73 77 6f 72 64 29 3b 0d in, zPassword);.
2070: 0a 20 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73 . db_end_trans
2080: 61 63 74 69 6f 6e 28 30 29 3b 0d 0a 2b 0d 0a 2b action(0);..+..+
2090: 20 20 62 6c 6f 62 5f 77 72 69 74 65 5f 74 6f 5f blob_write_to_
20a0: 66 69 6c 65 28 26 6f 75 74 2c 20 22 2d 22 29 3b file(&out, "-");
20b0: 0d 0a 2b 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 ..+ blob_reset(
20c0: 26 6f 75 74 29 3b 0d 0a 20 7d 0d 0a 0d 0a 49 6e &out);.. }....In
20d0: 64 65 78 3a 20 73 72 63 2f 63 6f 6e 66 69 67 75 dex: src/configu
20e0: 72 65 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d re.c..==========
20f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2100: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2110: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 =========..--- s
2130: 72 63 2f 63 6f 6e 66 69 67 75 72 65 2e 63 0d 0a rc/configure.c..
2140: 2b 2b 2b 20 73 72 63 2f 63 6f 6e 66 69 67 75 72 +++ src/configur
2150: 65 2e 63 0d 0a 40 40 20 2d 34 33 38 2c 31 39 20 e.c..@@ -438,19
2160: 2b 34 33 38 2c 31 39 20 40 40 0d 0a 20 20 20 20 +438,19 @@..
2170: 20 63 6f 6e 66 69 67 75 72 65 5f 66 69 6e 61 6c configure_final
2180: 69 7a 65 5f 72 65 63 65 69 76 65 28 29 3b 0d 0a ize_receive();..
2190: 20 20 20 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e db_end_tran
21a0: 73 61 63 74 69 6f 6e 28 30 29 3b 0d 0a 20 20 20 saction(0);..
21b0: 7d 65 6c 73 65 0d 0a 20 20 20 69 66 28 20 73 74 }else.. if( st
21c0: 72 6e 63 6d 70 28 7a 4d 65 74 68 6f 64 2c 20 22 rncmp(zMethod, "
21d0: 70 75 6c 6c 22 2c 20 6e 29 3d 3d 30 20 7c 7c 20 pull", n)==0 ||
21e0: 73 74 72 6e 63 6d 70 28 7a 4d 65 74 68 6f 64 2c strncmp(zMethod,
21f0: 20 22 70 75 73 68 22 2c 20 6e 29 3d 3d 30 20 29 "push", n)==0 )
2200: 7b 0d 0a 20 20 20 20 20 69 6e 74 20 6d 61 73 6b {.. int mask
2210: 3b 0d 0a 2d 20 20 20 20 63 6f 6e 73 74 20 63 68 ;..- const ch
2220: 61 72 20 2a 7a 53 65 72 76 65 72 3b 0d 0a 2d 20 ar *zServer;..-
2230: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a const char *z
2240: 50 77 3b 0d 0a 2b 20 20 20 20 63 68 61 72 20 2a Pw;..+ char *
2250: 7a 53 65 72 76 65 72 20 3d 30 3b 0d 0a 2b 20 20 zServer =0;..+
2260: 20 20 63 68 61 72 20 2a 7a 50 77 20 3d 30 3b 0d char *zPw =0;.
2270: 0a 20 20 20 20 20 75 72 6c 5f 70 72 6f 78 79 5f . url_proxy_
2280: 6f 70 74 69 6f 6e 73 28 29 3b 0d 0a 20 20 20 20 options();..
2290: 20 69 66 28 20 67 2e 61 72 67 63 21 3d 34 20 26 if( g.argc!=4 &
22a0: 26 20 67 2e 61 72 67 63 21 3d 35 20 29 7b 0d 0a & g.argc!=5 ){..
22b0: 20 20 20 20 20 20 20 75 73 61 67 65 28 22 70 75 usage("pu
22c0: 6c 6c 20 41 52 45 41 20 3f 55 52 4c 3f 22 29 3b ll AREA ?URL?");
22d0: 0d 0a 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 6d .. }.. m
22e0: 61 73 6b 20 3d 20 66 69 6e 64 5f 61 72 65 61 28 ask = find_area(
22f0: 67 2e 61 72 67 76 5b 33 5d 29 3b 0d 0a 20 20 20 g.argv[3]);..
2300: 20 20 69 66 28 20 67 2e 61 72 67 63 3d 3d 35 20 if( g.argc==5
2310: 29 7b 0d 0a 2d 20 20 20 20 20 20 7a 53 65 72 76 ){..- zServ
2320: 65 72 20 3d 20 67 2e 61 72 67 76 5b 34 5d 3b 0d er = g.argv[4];.
2330: 0a 2b 20 20 20 20 20 20 7a 53 65 72 76 65 72 20 .+ zServer
2340: 3d 20 53 54 52 44 55 50 28 67 2e 61 72 67 76 5b = STRDUP(g.argv[
2350: 34 5d 29 3b 0d 0a 20 20 20 20 20 20 20 7a 50 77 4]);.. zPw
2360: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 67 2e = 0;.. g.
2370: 64 6f 6e 74 4b 65 65 70 55 72 6c 20 3d 20 31 3b dontKeepUrl = 1;
2380: 0d 0a 20 20 20 20 20 7d 65 6c 73 65 7b 0d 0a 20 .. }else{..
2390: 20 20 20 20 20 20 7a 53 65 72 76 65 72 20 3d 20 zServer =
23a0: 64 62 5f 67 65 74 28 22 6c 61 73 74 2d 73 79 6e db_get("last-syn
23b0: 63 2d 75 72 6c 22 2c 20 30 29 3b 0d 0a 20 20 20 c-url", 0);..
23c0: 20 20 20 20 69 66 28 20 7a 53 65 72 76 65 72 3d if( zServer=
23d0: 3d 30 20 29 7b 0d 0a 40 40 20 2d 34 35 38 2c 31 =0 ){..@@ -458,1
23e0: 30 20 2b 34 35 38 2c 31 32 20 40 40 0d 0a 20 20 0 +458,12 @@..
23f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 7a }.. z
2400: 50 77 20 3d 20 64 62 5f 67 65 74 28 22 6c 61 73 Pw = db_get("las
2410: 74 2d 73 79 6e 63 2d 70 77 22 2c 20 30 29 3b 0d t-sync-pw", 0);.
2420: 0a 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 75 72 . }.. ur
2430: 6c 5f 70 61 72 73 65 28 7a 53 65 72 76 65 72 29 l_parse(zServer)
2440: 3b 0d 0a 20 20 20 20 20 69 66 28 20 67 2e 75 72 ;.. if( g.ur
2450: 6c 50 61 73 73 77 64 3d 3d 30 20 26 26 20 7a 50 lPasswd==0 && zP
2460: 77 20 29 20 67 2e 75 72 6c 50 61 73 73 77 64 20 w ) g.urlPasswd
2470: 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 = mprintf("%s",
2480: 7a 50 77 29 3b 0d 0a 2b 20 20 20 20 66 72 65 65 zPw);..+ free
2490: 28 7a 53 65 72 76 65 72 29 3b 20 7a 53 65 72 76 (zServer); zServ
24a0: 65 72 20 3d 20 30 3b 0d 0a 2b 20 20 20 20 66 72 er = 0;..+ fr
24b0: 65 65 28 7a 50 77 29 3b 20 7a 50 77 20 3d 20 30 ee(zPw); zPw = 0
24c0: 3b 0d 0a 20 20 20 20 20 75 73 65 72 5f 73 65 6c ;.. user_sel
24d0: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 69 66 28 ect();.. if(
24e0: 20 73 74 72 6e 63 6d 70 28 7a 4d 65 74 68 6f 64 strncmp(zMethod
24f0: 2c 20 22 70 75 73 68 22 2c 20 6e 29 3d 3d 30 20 , "push", n)==0
2500: 29 7b 0d 0a 20 20 20 20 20 20 20 63 6c 69 65 6e ){.. clien
2510: 74 5f 73 79 6e 63 28 30 2c 30 2c 30 2c 30 2c 6d t_sync(0,0,0,0,m
2520: 61 73 6b 29 3b 0d 0a 20 20 20 20 20 7d 65 6c 73 ask);.. }els
2530: 65 7b 0d 0a 20 20 20 20 20 20 20 63 6c 69 65 6e e{.. clien
2540: 74 5f 73 79 6e 63 28 30 2c 30 2c 30 2c 6d 61 73 t_sync(0,0,0,mas
2550: 6b 2c 30 29 3b 0d 0a 0d 0a 49 6e 64 65 78 3a 20 k,0);....Index:
2560: 73 72 63 2f 64 62 2e 63 0d 0a 3d 3d 3d 3d 3d 3d src/db.c..======
2570: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2580: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2590: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
25a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d =============..-
25b0: 2d 2d 20 73 72 63 2f 64 62 2e 63 0d 0a 2b 2b 2b -- src/db.c..+++
25c0: 20 73 72 63 2f 64 62 2e 63 0d 0a 40 40 20 2d 33 src/db.c..@@ -3
25d0: 33 2c 31 30 20 2b 33 33 2c 31 31 20 40 40 0d 0a 3,10 +33,11 @@..
25e0: 20 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 #include <sys/t
25f0: 79 70 65 73 2e 68 3e 0d 0a 20 23 69 6e 63 6c 75 ypes.h>.. #inclu
2600: 64 65 20 3c 73 79 73 2f 73 74 61 74 2e 68 3e 0d de <sys/stat.h>.
2610: 0a 20 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 . #include <unis
2620: 74 64 2e 68 3e 0d 0a 20 23 69 6e 63 6c 75 64 65 td.h>.. #include
2630: 20 22 64 62 2e 68 22 0d 0a 20 0d 0a 2b 0d 0a 20 "db.h".. ..+..
2640: 23 69 66 20 49 4e 54 45 52 46 41 43 45 0d 0a 20 #if INTERFACE..
2650: 2f 2a 0d 0a 20 2a 2a 20 41 6e 20 73 69 6e 67 6c /*.. ** An singl
2660: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 e SQL statement
2670: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 61 is represented a
2680: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 s an instance of
2690: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0d 0a the following..
26a0: 20 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 0d 0a ** structure...
26b0: 20 2a 2f 0d 0a 40 40 20 2d 34 34 2c 31 30 20 2b */..@@ -44,10 +
26c0: 34 35 2c 31 33 20 40 40 0d 0a 20 20 20 42 6c 6f 45,13 @@.. Blo
26d0: 62 20 73 71 6c 3b 20 20 20 20 20 20 20 20 20 20 b sql;
26e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 /* The SQL
26f0: 66 6f 72 20 74 68 69 73 20 73 74 61 74 65 6d 65 for this stateme
2700: 6e 74 20 2a 2f 0d 0a 20 20 20 73 71 6c 69 74 65 nt */.. sqlite
2710: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 20 20 3_stmt *pStmt;
2720: 20 20 2f 2a 20 54 68 65 20 72 65 73 75 6c 74 73 /* The results
2730: 20 6f 66 20 73 71 6c 69 74 65 33 5f 70 72 65 70 of sqlite3_prep
2740: 61 72 65 28 29 20 2a 2f 0d 0a 20 20 20 53 74 6d are() */.. Stm
2750: 74 20 2a 70 4e 65 78 74 2c 20 2a 70 50 72 65 76 t *pNext, *pPrev
2760: 3b 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 ; /* List of
2770: 61 6c 6c 20 75 6e 66 69 6e 61 6c 69 7a 65 64 20 all unfinalized
2780: 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0d 0a 20 statements */..
2790: 20 20 69 6e 74 20 6e 53 74 65 70 3b 20 20 20 20 int nStep;
27a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d /* Num
27b0: 62 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 ber of sqlite3_s
27c0: 74 65 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0d 0a tep() calls */..
27d0: 20 7d 3b 0d 0a 2b 0d 0a 2b 23 64 65 66 69 6e 65 };..+..+#define
27e0: 20 53 54 52 44 55 50 28 78 29 20 6d 70 72 69 6e STRDUP(x) mprin
27f0: 74 66 28 22 25 73 22 2c 20 28 78 29 29 0d 0a 2b tf("%s", (x))..+
2800: 0d 0a 20 23 65 6e 64 69 66 20 2f 2a 20 49 4e 54 .. #endif /* INT
2810: 45 52 46 41 43 45 20 2a 2f 0d 0a 20 0d 0a 20 2f ERFACE */.. .. /
2820: 2a 0d 0a 20 2a 2a 20 43 61 6c 6c 20 74 68 69 73 *.. ** Call this
2830: 20 72 6f 75 74 69 6e 65 20 77 68 65 6e 20 61 20 routine when a
2840: 64 61 74 61 62 61 73 65 20 65 72 72 6f 72 20 6f database error o
2850: 63 63 75 72 73 2e 0d 0a 20 2a 2f 0d 0a 40 40 20 ccurs... */..@@
2860: 2d 35 37 35 2c 31 30 20 2b 35 37 39 2c 31 33 20 -575,10 +579,13
2870: 40 40 0d 0a 20 20 20 20 20 7d 0d 0a 20 20 20 7d @@.. }.. }
2880: 0d 0a 20 20 20 76 61 5f 65 6e 64 28 61 70 29 3b .. va_end(ap);
2890: 0d 0a 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 .. sqlite3_exe
28a0: 63 28 64 62 2c 20 22 43 4f 4d 4d 49 54 22 2c 20 c(db, "COMMIT",
28b0: 30 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 73 71 0, 0, 0);.. sq
28c0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b lite3_close(db);
28d0: 0d 0a 2b 23 69 66 64 65 66 20 5f 5f 4d 49 4e 47 ..+#ifdef __MING
28e0: 57 33 32 5f 5f 0d 0a 2b 20 20 66 72 65 65 28 7a W32__..+ free(z
28f0: 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 66 72 FileName); /* fr
2900: 65 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 66 6f ee the memory fo
2910: 72 20 22 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 r "sqlite3_win32
2920: 5f 6d 62 63 73 5f 74 6f 5f 75 74 66 38 22 20 2a _mbcs_to_utf8" *
2930: 2f 0d 0a 2b 23 65 6e 64 69 66 0d 0a 20 7d 0d 0a /..+#endif.. }..
2940: 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 4f 70 65 6e .. /*.. ** Open
2950: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 a database file
2960: 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e . Return a poin
2970: 74 65 72 20 74 6f 20 74 68 65 20 6e 65 77 20 64 ter to the new d
2980: 61 74 61 62 61 73 65 0d 0a 20 2a 2a 20 63 6f 6e atabase.. ** con
2990: 6e 65 63 74 69 6f 6e 2e 20 20 41 6e 20 65 72 72 nection. An err
29a0: 6f 72 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 or results in pr
29b0: 6f 63 65 73 73 20 61 62 6f 72 74 2e 0d 0a 40 40 ocess abort...@@
29c0: 20 2d 36 30 30 2c 31 30 20 2b 36 30 37 2c 31 33 -600,10 +607,13
29d0: 20 40 40 0d 0a 20 20 20 69 66 28 20 72 63 21 3d @@.. if( rc!=
29e0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20 SQLITE_OK ){..
29f0: 20 20 20 64 62 5f 65 72 72 28 73 71 6c 69 74 65 db_err(sqlite
2a00: 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0d 0a 3_errmsg(db));..
2a10: 20 20 20 7d 0d 0a 20 20 20 73 71 6c 69 74 65 33 }.. sqlite3
2a20: 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 _busy_timeout(db
2a30: 2c 20 35 30 30 30 29 3b 0d 0a 20 20 20 73 71 6c , 5000);.. sql
2a40: 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 ite3_wal_autoche
2a50: 63 6b 70 6f 69 6e 74 28 64 62 2c 20 31 29 3b 20 ckpoint(db, 1);
2a60: 20 2f 2a 20 53 65 74 20 74 6f 20 63 68 65 63 6b /* Set to check
2a70: 70 6f 69 6e 74 20 66 72 65 71 75 65 6e 74 6c 79 point frequently
2a80: 20 2a 2f 0d 0a 2b 23 69 66 64 65 66 20 5f 5f 4d */..+#ifdef __M
2a90: 49 4e 47 57 33 32 5f 5f 0d 0a 2b 20 20 66 72 65 INGW32__..+ fre
2aa0: 65 28 7a 44 62 4e 61 6d 65 29 3b 20 2f 2a 20 66 e(zDbName); /* f
2ab0: 72 65 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 66 ree the memory f
2ac0: 6f 72 20 22 73 71 6c 69 74 65 33 5f 77 69 6e 33 or "sqlite3_win3
2ad0: 32 5f 6d 62 63 73 5f 74 6f 5f 75 74 66 38 22 20 2_mbcs_to_utf8"
2ae0: 2a 2f 0d 0a 2b 23 65 6e 64 69 66 0d 0a 20 20 20 */..+#endif..
2af0: 72 65 74 75 72 6e 20 64 62 3b 0d 0a 20 7d 0d 0a return db;.. }..
2b00: 20 0d 0a 20 0d 0a 20 2f 2a 0d 0a 40 40 20 2d 36 .. .. /*..@@ -6
2b10: 32 30 2c 31 30 20 2b 36 33 30 2c 31 33 20 40 40 20,10 +630,13 @@
2b20: 0d 0a 20 23 69 66 64 65 66 20 5f 5f 4d 49 4e 47 .. #ifdef __MING
2b30: 57 33 32 5f 5f 0d 0a 20 20 20 20 20 7a 44 62 4e W32__.. zDbN
2b40: 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 ame = sqlite3_wi
2b50: 6e 33 32 5f 6d 62 63 73 5f 74 6f 5f 75 74 66 38 n32_mbcs_to_utf8
2b60: 28 7a 44 62 4e 61 6d 65 29 3b 0d 0a 20 23 65 6e (zDbName);.. #en
2b70: 64 69 66 0d 0a 20 20 20 20 20 64 62 5f 6d 75 6c dif.. db_mul
2b80: 74 69 5f 65 78 65 63 28 22 41 54 54 41 43 48 20 ti_exec("ATTACH
2b90: 44 41 54 41 42 41 53 45 20 25 51 20 41 53 20 25 DATABASE %Q AS %
2ba0: 73 22 2c 20 7a 44 62 4e 61 6d 65 2c 20 7a 4c 61 s", zDbName, zLa
2bb0: 62 65 6c 29 3b 0d 0a 20 20 20 20 20 67 2e 7a 52 bel);.. g.zR
2bc0: 65 70 6f 44 62 20 3d 20 6d 70 72 69 6e 74 66 28 epoDb = mprintf(
2bd0: 22 25 73 22 2c 20 7a 4c 61 62 65 6c 29 3b 0d 0a "%s", zLabel);..
2be0: 2b 23 69 66 64 65 66 20 5f 5f 4d 49 4e 47 57 33 +#ifdef __MINGW3
2bf0: 32 5f 5f 0d 0a 2b 20 20 20 20 66 72 65 65 28 7a 2__..+ free(z
2c00: 44 62 4e 61 6d 65 29 3b 20 2f 2a 20 66 72 65 65 DbName); /* free
2c10: 20 74 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 the memory for
2c20: 22 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 6d "sqlite3_win32_m
2c30: 62 63 73 5f 74 6f 5f 75 74 66 38 22 20 2a 2f 0d bcs_to_utf8" */.
2c40: 0a 2b 23 65 6e 64 69 66 0d 0a 20 20 20 7d 0d 0a .+#endif.. }..
2c50: 20 7d 0d 0a 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 }.. .. /*.. **
2c60: 4f 70 65 6e 20 74 68 65 20 75 73 65 72 20 64 61 Open the user da
2c70: 74 61 62 61 73 65 20 69 6e 20 22 7e 2f 2e 66 6f tabase in "~/.fo
2c80: 73 73 69 6c 22 2e 20 20 43 72 65 61 74 65 20 74 ssil". Create t
2c90: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 65 77 he database anew
2ca0: 20 69 66 0d 0a 40 40 20 2d 36 38 34 2c 31 30 20 if..@@ -684,10
2cb0: 2b 36 39 37 2c 31 32 20 40 40 0d 0a 20 20 20 20 +697,12 @@..
2cc0: 20 67 2e 64 62 43 6f 6e 66 69 67 20 3d 20 30 3b g.dbConfig = 0;
2cd0: 0d 0a 20 20 20 7d 65 6c 73 65 7b 0d 0a 20 20 20 .. }else{..
2ce0: 20 20 67 2e 64 62 43 6f 6e 66 69 67 20 3d 20 6f g.dbConfig = o
2cf0: 70 65 6e 44 61 74 61 62 61 73 65 28 7a 44 62 4e penDatabase(zDbN
2d00: 61 6d 65 29 3b 0d 0a 20 20 20 7d 0d 0a 20 20 20 ame);.. }..
2d10: 67 2e 63 6f 6e 66 69 67 4f 70 65 6e 20 3d 20 31 g.configOpen = 1
2d20: 3b 0d 0a 2b 0d 0a 2b 20 20 66 72 65 65 28 7a 44 ;..+..+ free(zD
2d30: 62 4e 61 6d 65 29 3b 0d 0a 20 7d 0d 0a 20 0d 0a bName);.. }.. ..
2d40: 20 2f 2a 0d 0a 20 2a 2a 20 49 66 20 7a 44 62 4e /*.. ** If zDbN
2d50: 61 6d 65 20 69 73 20 61 20 76 61 6c 69 64 20 6c ame is a valid l
2d60: 6f 63 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 ocal database fi
2d70: 6c 65 2c 20 6f 70 65 6e 20 69 74 20 61 6e 64 20 le, open it and
2d80: 72 65 74 75 72 6e 0d 0a 20 2a 2a 20 74 72 75 65 return.. ** true
2d90: 2e 20 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 . If it is not
2da0: 61 20 76 61 6c 69 64 20 6c 6f 63 61 6c 20 64 61 a valid local da
2db0: 74 61 62 61 73 65 20 66 69 6c 65 2c 20 72 65 74 tabase file, ret
2dc0: 75 72 6e 20 30 2e 0d 0a 40 40 20 2d 37 39 38 2c urn 0...@@ -798,
2dd0: 31 37 20 2b 38 31 33 2c 32 30 20 40 40 0d 0a 20 17 +813,20 @@..
2de0: 2f 2a 0d 0a 20 2a 2a 20 4f 70 65 6e 20 74 68 65 /*.. ** Open the
2df0: 20 72 65 70 6f 73 69 74 6f 72 79 20 64 61 74 61 repository data
2e00: 62 61 73 65 20 67 69 76 65 6e 20 62 79 20 7a 44 base given by zD
2e10: 62 4e 61 6d 65 2e 20 20 49 66 20 7a 44 62 4e 61 bName. If zDbNa
2e20: 6d 65 3d 3d 4e 55 4c 4c 20 74 68 65 6e 0d 0a 20 me==NULL then..
2e30: 2a 2a 20 67 65 74 20 74 68 65 20 6e 61 6d 65 20 ** get the name
2e40: 66 72 6f 6d 20 74 68 65 20 61 6c 72 65 61 64 79 from the already
2e50: 20 6f 70 65 6e 20 6c 6f 63 61 6c 20 64 61 74 61 open local data
2e60: 62 61 73 65 2e 0d 0a 20 2a 2f 0d 0a 20 76 6f 69 base... */.. voi
2e70: 64 20 64 62 5f 6f 70 65 6e 5f 72 65 70 6f 73 69 d db_open_reposi
2e80: 74 6f 72 79 28 63 6f 6e 73 74 20 63 68 61 72 20 tory(const char
2e90: 2a 7a 44 62 4e 61 6d 65 29 7b 0d 0a 2b 20 20 69 *zDbName){..+ i
2ea0: 6e 74 20 6e 65 65 64 54 6f 46 72 65 65 20 3d 20 nt needToFree =
2eb0: 30 3b 20 20 20 2f 2a 20 31 20 6d 65 61 6e 73 20 0; /* 1 means
2ec0: 22 7a 44 62 4e 61 6d 65 22 20 6d 75 73 74 20 62 "zDbName" must b
2ed0: 65 20 66 72 65 65 64 20 2a 2f 0d 0a 20 20 20 69 e freed */.. i
2ee0: 66 28 20 67 2e 72 65 70 6f 73 69 74 6f 72 79 4f f( g.repositoryO
2ef0: 70 65 6e 20 29 20 72 65 74 75 72 6e 3b 0d 0a 20 pen ) return;..
2f00: 20 20 69 66 28 20 7a 44 62 4e 61 6d 65 3d 3d 30 if( zDbName==0
2f10: 20 29 7b 0d 0a 20 20 20 20 20 69 66 28 20 67 2e ){.. if( g.
2f20: 6c 6f 63 61 6c 4f 70 65 6e 20 29 7b 0d 0a 20 20 localOpen ){..
2f30: 20 20 20 20 20 7a 44 62 4e 61 6d 65 20 3d 20 64 zDbName = d
2f40: 62 5f 6c 67 65 74 28 22 72 65 70 6f 73 69 74 6f b_lget("reposito
2f50: 72 79 22 2c 20 30 29 3b 0d 0a 20 20 20 20 20 7d ry", 0);.. }
2f60: 0d 0a 20 20 20 20 20 69 66 28 20 7a 44 62 4e 61 .. if( zDbNa
2f70: 6d 65 3d 3d 30 20 29 7b 0d 0a 20 20 20 20 20 20 me==0 ){..
2f80: 20 64 62 5f 65 72 72 28 22 75 6e 61 62 6c 65 20 db_err("unable
2f90: 74 6f 20 66 69 6e 64 20 74 68 65 20 6e 61 6d 65 to find the name
2fa0: 20 6f 66 20 61 20 72 65 70 6f 73 69 74 6f 72 79 of a repository
2fb0: 20 64 61 74 61 62 61 73 65 22 29 3b 0d 0a 2b 20 database");..+
2fc0: 20 20 20 7d 65 6c 73 65 7b 0d 0a 2b 20 20 20 20 }else{..+
2fd0: 20 20 20 20 6e 65 65 64 54 6f 46 72 65 65 20 3d needToFree =
2fe0: 20 31 3b 0d 0a 20 20 20 20 20 7d 0d 0a 20 20 20 1;.. }..
2ff0: 7d 0d 0a 20 20 20 69 66 28 20 61 63 63 65 73 73 }.. if( access
3000: 28 7a 44 62 4e 61 6d 65 2c 20 52 5f 4f 4b 29 20 (zDbName, R_OK)
3010: 7c 7c 20 66 69 6c 65 5f 73 69 7a 65 28 7a 44 62 || file_size(zDb
3020: 4e 61 6d 65 29 3c 31 30 32 34 20 29 7b 0d 0a 20 Name)<1024 ){..
3030: 20 20 20 20 69 66 28 20 61 63 63 65 73 73 28 7a if( access(z
3040: 44 62 4e 61 6d 65 2c 20 30 29 20 29 7b 0d 0a 20 DbName, 0) ){..
3050: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e fossil_pan
3060: 69 63 28 22 72 65 70 6f 73 69 74 6f 72 79 20 64 ic("repository d
3070: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 oes not exist or
3080: 22 0d 0a 40 40 20 2d 38 32 30 2c 31 30 20 2b 38 "..@@ -820,10 +8
3090: 33 38 2c 31 32 20 40 40 0d 0a 20 20 20 20 20 7d 38,12 @@.. }
30a0: 0d 0a 20 20 20 7d 0d 0a 20 20 20 64 62 5f 6f 70 .. }.. db_op
30b0: 65 6e 5f 6f 72 5f 61 74 74 61 63 68 28 7a 44 62 en_or_attach(zDb
30c0: 4e 61 6d 65 2c 20 22 72 65 70 6f 73 69 74 6f 72 Name, "repositor
30d0: 79 22 29 3b 0d 0a 20 20 20 67 2e 72 65 70 6f 73 y");.. g.repos
30e0: 69 74 6f 72 79 4f 70 65 6e 20 3d 20 31 3b 0d 0a itoryOpen = 1;..
30f0: 20 20 20 67 2e 7a 52 65 70 6f 73 69 74 6f 72 79 g.zRepository
3100: 4e 61 6d 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 Name = mprintf("
3110: 25 73 22 2c 20 7a 44 62 4e 61 6d 65 29 3b 0d 0a %s", zDbName);..
3120: 2b 0d 0a 2b 20 20 69 66 28 20 6e 65 65 64 54 6f +..+ if( needTo
3130: 46 72 65 65 20 29 20 66 72 65 65 28 7a 44 62 4e Free ) free(zDbN
3140: 61 6d 65 29 3b 0d 0a 20 7d 0d 0a 20 0d 0a 20 2f ame);.. }.. .. /
3150: 2a 0d 0a 20 2a 2a 20 54 72 79 20 74 6f 20 66 69 *.. ** Try to fi
3160: 6e 64 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 nd the repositor
3170: 79 20 61 6e 64 20 6f 70 65 6e 20 69 74 2e 20 20 y and open it.
3180: 55 73 65 20 74 68 65 20 2d 52 20 6f 72 20 2d 2d Use the -R or --
3190: 72 65 70 6f 73 69 74 6f 72 79 0d 0a 20 2a 2a 20 repository.. **
31a0: 6f 70 74 69 6f 6e 20 74 6f 20 6c 6f 63 61 74 65 option to locate
31b0: 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 2e the repository.
31c0: 20 20 49 66 20 6e 6f 20 73 75 63 68 20 6f 70 74 If no such opt
31d0: 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 ion is available
31e0: 2c 20 74 68 65 6e 0d 0a 40 40 20 2d 39 32 38 2c , then..@@ -928,
31f0: 32 39 20 2b 39 34 38 2c 33 34 20 40 40 0d 0a 20 29 +948,34 @@..
3200: 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 43 72 65 61 74 .. /*.. ** Creat
3210: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 75 73 e the default us
3220: 65 72 20 61 63 63 6f 75 6e 74 73 20 69 6e 20 74 er accounts in t
3230: 68 65 20 55 53 45 52 20 74 61 62 6c 65 2e 0d 0a he USER table...
3240: 20 2a 2f 0d 0a 20 76 6f 69 64 20 64 62 5f 63 72 */.. void db_cr
3250: 65 61 74 65 5f 64 65 66 61 75 6c 74 5f 75 73 65 eate_default_use
3260: 72 73 28 69 6e 74 20 73 65 74 75 70 55 73 65 72 rs(int setupUser
3270: 4f 6e 6c 79 2c 20 63 6f 6e 73 74 20 63 68 61 72 Only, const char
3280: 20 2a 7a 44 65 66 61 75 6c 74 55 73 65 72 29 7b *zDefaultUser){
3290: 0d 0a 2d 20 20 63 6f 6e 73 74 20 63 68 61 72 20 ..- const char
32a0: 2a 7a 55 73 65 72 3b 0d 0a 2d 20 20 7a 55 73 65 *zUser;..- zUse
32b0: 72 20 3d 20 64 62 5f 67 65 74 28 22 64 65 66 61 r = db_get("defa
32c0: 75 6c 74 2d 75 73 65 72 22 2c 20 30 29 3b 0d 0a ult-user", 0);..
32d0: 2d 20 20 69 66 28 20 7a 55 73 65 72 3d 3d 30 20 - if( zUser==0
32e0: 29 7b 0d 0a 2d 20 20 20 20 7a 55 73 65 72 20 3d ){..- zUser =
32f0: 20 7a 44 65 66 61 75 6c 74 55 73 65 72 3b 0d 0a zDefaultUser;..
3300: 2d 20 20 7d 0d 0a 2b 20 20 69 6e 74 20 6e 65 65 - }..+ int nee
3310: 64 54 6f 46 72 65 65 20 3d 30 3b 20 2f 2a 20 31 dToFree =0; /* 1
3320: 20 6d 65 61 6e 73 20 74 68 61 74 20 55 73 65 72 means that User
3330: 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 need to be free
3340: 64 20 2a 2f 0d 0a 2b 20 20 63 68 61 72 20 2a 7a d */..+ char *z
3350: 55 73 65 72 3b 0d 0a 2b 0d 0a 2b 20 20 7a 55 73 User;..+..+ zUs
3360: 65 72 20 3d 20 64 62 5f 67 65 74 28 22 64 65 66 er = db_get("def
3370: 61 75 6c 74 2d 75 73 65 72 22 2c 20 7a 44 65 66 ault-user", zDef
3380: 61 75 6c 74 55 73 65 72 29 3b 0d 0a 20 20 20 69 aultUser);.. i
3390: 66 28 20 7a 55 73 65 72 3d 3d 30 20 29 7b 0d 0a f( zUser==0 ){..
33a0: 20 23 69 66 64 65 66 20 5f 5f 4d 49 4e 47 57 33 #ifdef __MINGW3
33b0: 32 5f 5f 0d 0a 20 20 20 20 20 7a 55 73 65 72 20 2__.. zUser
33c0: 3d 20 67 65 74 65 6e 76 28 22 55 53 45 52 4e 41 = getenv("USERNA
33d0: 4d 45 22 29 3b 0d 0a 20 23 65 6c 73 65 0d 0a 20 ME");.. #else..
33e0: 20 20 20 20 7a 55 73 65 72 20 3d 20 67 65 74 65 zUser = gete
33f0: 6e 76 28 22 55 53 45 52 22 29 3b 0d 0a 20 23 65 nv("USER");.. #e
3400: 6e 64 69 66 0d 0a 2b 20 20 7d 65 6c 73 65 7b 0d ndif..+ }else{.
3410: 0a 2b 20 20 20 20 6e 65 65 64 54 6f 46 72 65 65 .+ needToFree
3420: 20 3d 20 31 3b 0d 0a 20 20 20 7d 0d 0a 20 20 20 = 1;.. }..
3430: 69 66 28 20 7a 55 73 65 72 3d 3d 30 20 29 7b 0d if( zUser==0 ){.
3440: 0a 20 20 20 20 20 7a 55 73 65 72 20 3d 20 22 72 . zUser = "r
3450: 6f 6f 74 22 3b 0d 0a 20 20 20 7d 0d 0a 20 20 20 oot";.. }..
3460: 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0d 0a db_multi_exec(..
3470: 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e "INSERT IN
3480: 54 4f 20 75 73 65 72 28 6c 6f 67 69 6e 2c 20 70 TO user(login, p
3490: 77 2c 20 63 61 70 2c 20 69 6e 66 6f 29 22 0d 0a w, cap, info)"..
34a0: 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 25 51 "VALUES(%Q
34b0: 2c 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f ,lower(hex(rando
34c0: 6d 62 6c 6f 62 28 33 29 29 29 2c 27 73 27 2c 27 mblob(3))),'s','
34d0: 27 29 22 2c 20 7a 55 73 65 72 0d 0a 20 20 20 29 ')", zUser.. )
34e0: 3b 0d 0a 2b 20 20 69 66 28 20 6e 65 65 64 54 6f ;..+ if( needTo
34f0: 46 72 65 65 20 29 7b 0d 0a 2b 20 20 20 20 66 72 Free ){..+ fr
3500: 65 65 28 7a 55 73 65 72 29 3b 0d 0a 2b 20 20 20 ee(zUser);..+
3510: 20 7a 55 73 65 72 20 3d 20 30 3b 0d 0a 2b 20 20 zUser = 0;..+
3520: 7d 0d 0a 20 20 20 69 66 28 20 21 73 65 74 75 70 }.. if( !setup
3530: 55 73 65 72 4f 6e 6c 79 20 29 7b 0d 0a 20 20 20 UserOnly ){..
3540: 20 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 db_multi_exec(
3550: 0d 0a 20 20 20 20 20 20 20 20 22 49 4e 53 45 52 .. "INSER
3560: 54 20 49 4e 54 4f 20 75 73 65 72 28 6c 6f 67 69 T INTO user(logi
3570: 6e 2c 70 77 2c 63 61 70 2c 69 6e 66 6f 29 22 0d n,pw,cap,info)".
3580: 0a 20 20 20 20 20 20 20 20 22 20 20 20 56 41 4c . " VAL
3590: 55 45 53 28 27 61 6e 6f 6e 79 6d 6f 75 73 27 2c UES('anonymous',
35a0: 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 38 hex(randomblob(8
35b0: 29 29 2c 27 67 68 6d 6e 63 7a 27 2c 27 41 6e 6f )),'ghmncz','Ano
35c0: 6e 27 29 3b 22 0d 0a 20 20 20 20 20 20 20 20 22 n');".. "
35d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 75 73 65 72 INSERT INTO user
35e0: 28 6c 6f 67 69 6e 2c 70 77 2c 63 61 70 2c 69 6e (login,pw,cap,in
35f0: 66 6f 29 22 0d 0a 40 40 20 2d 31 30 33 37 2c 31 fo)"..@@ -1037,1
3600: 34 20 2b 31 30 36 32 2c 31 36 20 40 40 0d 0a 20 4 +1062,16 @@..
3610: 2a 2a 20 20 20 20 2d 2d 61 64 6d 69 6e 2d 75 73 ** --admin-us
3620: 65 72 7c 2d 41 20 55 53 45 52 4e 41 4d 45 0d 0a er|-A USERNAME..
3630: 20 2a 2a 20 20 20 20 2d 2d 64 61 74 65 2d 6f 76 ** --date-ov
3640: 65 72 72 69 64 65 20 44 41 54 45 54 49 4d 45 0d erride DATETIME.
3650: 0a 20 2a 2a 0d 0a 20 2a 2f 0d 0a 20 76 6f 69 64 . **.. */.. void
3660: 20 63 72 65 61 74 65 5f 72 65 70 6f 73 69 74 6f create_reposito
3670: 72 79 5f 63 6d 64 28 76 6f 69 64 29 7b 0d 0a 2b ry_cmd(void){..+
3680: 20 20 42 6c 6f 62 20 6f 75 74 3b 0d 0a 20 20 20 Blob out;..
3690: 63 68 61 72 20 2a 7a 50 61 73 73 77 6f 72 64 3b char *zPassword;
36a0: 0d 0a 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 .. const char
36b0: 2a 7a 44 61 74 65 3b 20 20 20 20 20 20 20 20 20 *zDate;
36c0: 20 2f 2a 20 44 61 74 65 20 6f 66 20 74 68 65 20 /* Date of the
36d0: 69 6e 69 74 69 61 6c 20 63 68 65 63 6b 2d 69 6e initial check-in
36e0: 20 2a 2f 0d 0a 20 20 20 63 6f 6e 73 74 20 63 68 */.. const ch
36f0: 61 72 20 2a 7a 44 65 66 61 75 6c 74 55 73 65 72 ar *zDefaultUser
3700: 3b 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 ; /* Optional
3710: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 65 66 61 name of the defa
3720: 75 6c 74 20 75 73 65 72 20 2a 2f 0d 0a 20 0d 0a ult user */.. ..
3730: 2b 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 6f 75 + blob_zero(&ou
3740: 74 29 3b 0d 0a 20 20 20 7a 44 61 74 65 20 3d 20 t);.. zDate =
3750: 66 69 6e 64 5f 6f 70 74 69 6f 6e 28 22 64 61 74 find_option("dat
3760: 65 2d 6f 76 65 72 72 69 64 65 22 2c 30 2c 31 29 e-override",0,1)
3770: 3b 0d 0a 20 20 20 7a 44 65 66 61 75 6c 74 55 73 ;.. zDefaultUs
3780: 65 72 20 3d 20 66 69 6e 64 5f 6f 70 74 69 6f 6e er = find_option
3790: 28 22 61 64 6d 69 6e 2d 75 73 65 72 22 2c 22 41 ("admin-user","A
37a0: 22 2c 31 29 3b 0d 0a 20 20 20 69 66 28 20 7a 44 ",1);.. if( zD
37b0: 61 74 65 3d 3d 30 20 29 20 7a 44 61 74 65 20 3d ate==0 ) zDate =
37c0: 20 22 6e 6f 77 22 3b 0d 0a 20 20 20 69 66 28 20 "now";.. if(
37d0: 67 2e 61 72 67 63 21 3d 33 20 29 7b 0d 0a 20 20 g.argc!=3 ){..
37e0: 20 20 20 75 73 61 67 65 28 22 52 45 50 4f 53 49 usage("REPOSI
37f0: 54 4f 52 59 2d 4e 41 4d 45 22 29 3b 0d 0a 40 40 TORY-NAME");..@@
3800: 20 2d 31 30 35 33 2c 31 34 20 2b 31 30 38 30 2c -1053,14 +1080,
3810: 31 38 20 40 40 0d 0a 20 20 20 64 62 5f 6f 70 65 18 @@.. db_ope
3820: 6e 5f 72 65 70 6f 73 69 74 6f 72 79 28 67 2e 61 n_repository(g.a
3830: 72 67 76 5b 32 5d 29 3b 0d 0a 20 20 20 64 62 5f rgv[2]);.. db_
3840: 6f 70 65 6e 5f 63 6f 6e 66 69 67 28 30 29 3b 0d open_config(0);.
3850: 0a 20 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 . db_begin_tra
3860: 6e 73 61 63 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 nsaction();..
3870: 64 62 5f 69 6e 69 74 69 61 6c 5f 73 65 74 75 70 db_initial_setup
3880: 28 7a 44 61 74 65 2c 20 7a 44 65 66 61 75 6c 74 (zDate, zDefault
3890: 55 73 65 72 2c 20 31 29 3b 0d 0a 20 20 20 64 62 User, 1);.. db
38a0: 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e _end_transaction
38b0: 28 30 29 3b 0d 0a 2d 20 20 70 72 69 6e 74 66 28 (0);..- printf(
38c0: 22 70 72 6f 6a 65 63 74 2d 69 64 3a 20 25 73 5c "project-id: %s\
38d0: 6e 22 2c 20 64 62 5f 67 65 74 28 22 70 72 6f 6a n", db_get("proj
38e0: 65 63 74 2d 63 6f 64 65 22 2c 20 30 29 29 3b 0d ect-code", 0));.
38f0: 0a 2d 20 20 70 72 69 6e 74 66 28 22 73 65 72 76 .- printf("serv
3900: 65 72 2d 69 64 3a 20 20 25 73 5c 6e 22 2c 20 64 er-id: %s\n", d
3910: 62 5f 67 65 74 28 22 73 65 72 76 65 72 2d 63 6f b_get("server-co
3920: 64 65 22 2c 20 30 29 29 3b 0d 0a 2b 20 20 62 6c de", 0));..+ bl
3930: 6f 62 5f 61 70 70 65 6e 64 66 28 26 6f 75 74 2c ob_appendf(&out,
3940: 20 22 70 72 6f 6a 65 63 74 2d 69 64 3a 20 25 7a "project-id: %z
3950: 5c 6e 22 2c 20 64 62 5f 67 65 74 28 22 70 72 6f \n", db_get("pro
3960: 6a 65 63 74 2d 63 6f 64 65 22 2c 20 30 29 29 3b ject-code", 0));
3970: 0d 0a 2b 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 ..+ blob_append
3980: 66 28 26 6f 75 74 2c 20 22 73 65 72 76 65 72 2d f(&out, "server-
3990: 69 64 3a 20 20 25 7a 5c 6e 22 2c 20 64 62 5f 67 id: %z\n", db_g
39a0: 65 74 28 22 73 65 72 76 65 72 2d 63 6f 64 65 22 et("server-code"
39b0: 2c 20 30 29 29 3b 0d 0a 20 20 20 7a 50 61 73 73 , 0));.. zPass
39c0: 77 6f 72 64 20 3d 20 64 62 5f 74 65 78 74 28 30 word = db_text(0
39d0: 2c 20 22 53 45 4c 45 43 54 20 70 77 20 46 52 4f , "SELECT pw FRO
39e0: 4d 20 75 73 65 72 20 57 48 45 52 45 20 6c 6f 67 M user WHERE log
39f0: 69 6e 3d 25 51 22 2c 20 67 2e 7a 4c 6f 67 69 6e in=%Q", g.zLogin
3a00: 29 3b 0d 0a 2d 20 20 70 72 69 6e 74 66 28 22 61 );..- printf("a
3a10: 64 6d 69 6e 2d 75 73 65 72 3a 20 25 73 20 28 69 dmin-user: %s (i
3a20: 6e 69 74 69 61 6c 20 70 61 73 73 77 6f 72 64 20 nitial password
3a30: 69 73 20 5c 22 25 73 5c 22 29 5c 6e 22 2c 20 67 is \"%s\")\n", g
3a40: 2e 7a 4c 6f 67 69 6e 2c 20 7a 50 61 73 73 77 6f .zLogin, zPasswo
3a50: 72 64 29 3b 0d 0a 2b 20 20 62 6c 6f 62 5f 61 70 rd);..+ blob_ap
3a60: 70 65 6e 64 66 28 26 6f 75 74 2c 20 22 61 64 6d pendf(&out, "adm
3a70: 69 6e 2d 75 73 65 72 3a 20 25 73 20 28 69 6e 69 in-user: %s (ini
3a80: 74 69 61 6c 20 70 61 73 73 77 6f 72 64 20 69 73 tial password is
3a90: 20 5c 22 25 7a 5c 22 29 5c 6e 22 2c 20 67 2e 7a \"%z\")\n", g.z
3aa0: 4c 6f 67 69 6e 2c 20 7a 50 61 73 73 77 6f 72 64 Login, zPassword
3ab0: 29 3b 0d 0a 2b 20 20 7a 50 61 73 73 77 6f 72 64 );..+ zPassword
3ac0: 20 3d 20 30 3b 0d 0a 2b 0d 0a 2b 20 20 62 6c 6f = 0;..+..+ blo
3ad0: 62 5f 77 72 69 74 65 5f 74 6f 5f 66 69 6c 65 28 b_write_to_file(
3ae0: 26 6f 75 74 2c 20 22 2d 22 29 3b 0d 0a 2b 20 20 &out, "-");..+
3af0: 62 6c 6f 62 5f 72 65 73 65 74 28 26 6f 75 74 29 blob_reset(&out)
3b00: 3b 0d 0a 20 7d 0d 0a 20 0d 0a 20 2f 2a 0d 0a 20 ;.. }.. .. /*..
3b10: 2a 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 ** SQL functions
3b20: 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 0d for debugging..
3b30: 0a 20 2a 2a 0d 0a 40 40 20 2d 31 32 37 32 2c 31 . **..@@ -1272,1
3b40: 32 20 2b 31 33 30 33 2c 31 32 20 40 40 0d 0a 20 2 +1303,12 @@..
3b50: 20 20 69 66 28 20 7a 3d 3d 30 20 26 26 20 67 2e if( z==0 && g.
3b60: 63 6f 6e 66 69 67 4f 70 65 6e 20 29 7b 0d 0a 20 configOpen ){..
3b70: 20 20 20 20 64 62 5f 73 77 61 70 5f 63 6f 6e 6e db_swap_conn
3b80: 65 63 74 69 6f 6e 73 28 29 3b 0d 0a 20 20 20 20 ections();..
3b90: 20 7a 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 z = db_text(0,
3ba0: 22 53 45 4c 45 43 54 20 76 61 6c 75 65 20 46 52 "SELECT value FR
3bb0: 4f 4d 20 67 6c 6f 62 61 6c 5f 63 6f 6e 66 69 67 OM global_config
3bc0: 20 57 48 45 52 45 20 6e 61 6d 65 3d 25 51 22 2c WHERE name=%Q",
3bd0: 20 7a 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 64 zName);.. d
3be0: 62 5f 73 77 61 70 5f 63 6f 6e 6e 65 63 74 69 6f b_swap_connectio
3bf0: 6e 73 28 29 3b 0d 0a 20 20 20 7d 0d 0a 2d 20 20 ns();.. }..-
3c00: 69 66 28 20 7a 3d 3d 30 20 29 7b 0d 0a 2d 20 20 if( z==0 ){..-
3c10: 20 20 7a 20 3d 20 7a 44 65 66 61 75 6c 74 3b 0d z = zDefault;.
3c20: 0a 2b 20 20 69 66 28 20 7a 3d 3d 30 20 26 26 20 .+ if( z==0 &&
3c30: 7a 44 65 66 61 75 6c 74 29 7b 0d 0a 2b 20 20 20 zDefault){..+
3c40: 20 7a 20 3d 20 53 54 52 44 55 50 28 7a 44 65 66 z = STRDUP(zDef
3c50: 61 75 6c 74 29 3b 0d 0a 20 20 20 7d 0d 0a 20 20 ault);.. }..
3c60: 20 72 65 74 75 72 6e 20 7a 3b 0d 0a 20 7d 0d 0a return z;.. }..
3c70: 20 76 6f 69 64 20 64 62 5f 73 65 74 28 63 6f 6e void db_set(con
3c80: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 st char *zName,
3c90: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 6c const char *zVal
3ca0: 75 65 2c 20 69 6e 74 20 67 6c 6f 62 61 6c 46 6c ue, int globalFl
3cb0: 61 67 29 7b 0d 0a 20 20 20 64 62 5f 62 65 67 69 ag){.. db_begi
3cc0: 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b n_transaction();
3cd0: 0d 0a 40 40 20 2d 31 33 35 32 2c 31 34 20 2b 31 ..@@ -1352,14 +1
3ce0: 33 38 33 2c 32 32 20 40 40 0d 0a 20 20 20 69 66 383,22 @@.. if
3cf0: 28 20 67 6c 6f 62 61 6c 46 6c 61 67 20 26 26 20 ( globalFlag &&
3d00: 67 2e 72 65 70 6f 73 69 74 6f 72 79 4f 70 65 6e g.repositoryOpen
3d10: 20 29 7b 0d 0a 20 20 20 20 20 64 62 5f 6d 75 6c ){.. db_mul
3d20: 74 69 5f 65 78 65 63 28 22 44 45 4c 45 54 45 20 ti_exec("DELETE
3d30: 46 52 4f 4d 20 63 6f 6e 66 69 67 20 57 48 45 52 FROM config WHER
3d40: 45 20 6e 61 6d 65 3d 25 51 22 2c 20 7a 4e 61 6d E name=%Q", zNam
3d50: 65 29 3b 0d 0a 20 20 20 7d 0d 0a 20 7d 0d 0a 20 e);.. }.. }..
3d60: 69 6e 74 20 64 62 5f 67 65 74 5f 62 6f 6f 6c 65 int db_get_boole
3d70: 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a an(const char *z
3d80: 4e 61 6d 65 2c 20 69 6e 74 20 64 66 6c 74 29 7b Name, int dflt){
3d90: 0d 0a 2b 20 20 69 6e 74 20 76 61 6c 20 3d 20 2d ..+ int val = -
3da0: 31 3b 0d 0a 20 20 20 63 68 61 72 20 2a 7a 56 61 1;.. char *zVa
3db0: 6c 20 3d 20 64 62 5f 67 65 74 28 7a 4e 61 6d 65 l = db_get(zName
3dc0: 2c 20 64 66 6c 74 20 3f 20 22 6f 6e 22 20 3a 20 , dflt ? "on" :
3dd0: 22 6f 66 66 22 29 3b 0d 0a 2d 20 20 69 66 28 20 "off");..- if(
3de0: 69 73 5f 74 72 75 74 68 28 7a 56 61 6c 29 20 29 is_truth(zVal) )
3df0: 20 72 65 74 75 72 6e 20 31 3b 0d 0a 2d 20 20 69 return 1;..- i
3e00: 66 28 20 69 73 5f 66 61 6c 73 65 28 7a 56 61 6c f( is_false(zVal
3e10: 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0d 0a 2d ) ) return 0;..-
3e20: 20 20 72 65 74 75 72 6e 20 64 66 6c 74 3b 0d 0a return dflt;..
3e30: 2b 20 20 69 66 28 20 69 73 5f 74 72 75 74 68 28 + if( is_truth(
3e40: 7a 56 61 6c 29 20 29 7b 0d 0a 2b 20 20 20 20 76 zVal) ){..+ v
3e50: 61 6c 20 3d 20 31 3b 0d 0a 2b 20 20 7d 65 6c 73 al = 1;..+ }els
3e60: 65 0d 0a 2b 20 20 69 66 28 20 69 73 5f 66 61 6c e..+ if( is_fal
3e70: 73 65 28 7a 56 61 6c 29 20 29 7b 0d 0a 2b 20 20 se(zVal) ){..+
3e80: 20 20 76 61 6c 20 3d 20 30 3b 0d 0a 2b 20 20 7d val = 0;..+ }
3e90: 65 6c 73 65 7b 0d 0a 2b 20 20 20 20 76 61 6c 20 else{..+ val
3ea0: 3d 20 64 66 6c 74 3b 0d 0a 2b 20 20 7d 0d 0a 2b = dflt;..+ }..+
3eb0: 20 20 66 72 65 65 28 7a 56 61 6c 29 3b 0d 0a 2b free(zVal);..+
3ec0: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0d 0a 20 return val;..
3ed0: 7d 0d 0a 20 63 68 61 72 20 2a 64 62 5f 6c 67 65 }.. char *db_lge
3ee0: 74 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e t(const char *zN
3ef0: 61 6d 65 2c 20 63 68 61 72 20 2a 7a 44 65 66 61 ame, char *zDefa
3f00: 75 6c 74 29 7b 0d 0a 20 20 20 72 65 74 75 72 6e ult){.. return
3f10: 20 64 62 5f 74 65 78 74 28 28 63 68 61 72 2a 29 db_text((char*)
3f20: 7a 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20 20 20 zDefault,..
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 45 "SE
3f40: 4c 45 43 54 20 76 61 6c 75 65 20 46 52 4f 4d 20 LECT value FROM
3f50: 76 76 61 72 20 57 48 45 52 45 20 6e 61 6d 65 3d vvar WHERE name=
3f60: 25 51 22 2c 20 7a 4e 61 6d 65 29 3b 0d 0a 20 7d %Q", zName);.. }
3f70: 0d 0a 0d 0a 49 6e 64 65 78 3a 20 73 72 63 2f 64 ....Index: src/d
3f80: 69 66 66 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d iff.c..=========
3f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3fb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 ==========..---
3fd0: 73 72 63 2f 64 69 66 66 2e 63 0d 0a 2b 2b 2b 20 src/diff.c..+++
3fe0: 73 72 63 2f 64 69 66 66 2e 63 0d 0a 40 40 20 2d src/diff.c..@@ -
3ff0: 35 32 36 2c 31 33 20 2b 35 32 36 2c 31 34 20 40 526,13 +526,14 @
4000: 40 0d 0a 20 20 20 20 20 62 6c 6f 62 5f 72 65 61 @.. blob_rea
4010: 64 5f 66 72 6f 6d 5f 66 69 6c 65 28 26 62 2c 20 d_from_file(&b,
4020: 67 2e 61 72 67 76 5b 69 5d 29 3b 0d 0a 20 20 20 g.argv[i]);..
4030: 20 20 52 20 3d 20 74 65 78 74 5f 64 69 66 66 28 R = text_diff(
4040: 26 61 2c 20 26 62 2c 20 30 2c 20 30 29 3b 0d 0a &a, &b, 0, 0);..
4050: 20 20 20 20 20 66 6f 72 28 72 3d 30 3b 20 52 5b for(r=0; R[
4060: 72 5d 20 7c 7c 20 52 5b 72 2b 31 5d 20 7c 7c 20 r] || R[r+1] ||
4070: 52 5b 72 2b 32 5d 3b 20 72 20 2b 3d 20 33 29 7b R[r+2]; r += 3){
4080: 0d 0a 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 .. printf(
4090: 22 20 63 6f 70 79 20 25 34 64 20 20 64 65 6c 65 " copy %4d dele
40a0: 74 65 20 25 34 64 20 20 69 6e 73 65 72 74 20 25 te %4d insert %
40b0: 34 64 5c 6e 22 2c 20 52 5b 72 5d 2c 20 52 5b 72 4d\n", R[r], R[r
40c0: 2b 31 5d 2c 20 52 5b 72 2b 32 5d 29 3b 0d 0a 20 +1], R[r+2]);..
40d0: 20 20 20 20 7d 0d 0a 2d 20 20 20 20 2f 2a 20 66 }..- /* f
40e0: 72 65 65 28 52 29 3b 20 2a 2f 0d 0a 2b 20 20 20 ree(R); */..+
40f0: 20 66 72 65 65 28 52 29 3b 0d 0a 20 20 20 20 20 free(R);..
4100: 62 6c 6f 62 5f 72 65 73 65 74 28 26 62 29 3b 0d blob_reset(&b);.
4110: 0a 20 20 20 7d 0d 0a 2b 20 20 62 6c 6f 62 5f 72 . }..+ blob_r
4120: 65 73 65 74 28 26 61 29 3b 0d 0a 20 7d 0d 0a 20 eset(&a);.. }..
4130: 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 43 4f 4d 4d 41 .. /*.. ** COMMA
4140: 4e 44 3a 20 74 65 73 74 2d 75 64 69 66 66 0d 0a ND: test-udiff..
4150: 20 2a 2f 0d 0a 40 40 20 2d 35 34 32 2c 31 30 20 */..@@ -542,10
4160: 2b 35 34 33 2c 31 33 20 40 40 0d 0a 20 20 20 62 +543,13 @@.. b
4170: 6c 6f 62 5f 72 65 61 64 5f 66 72 6f 6d 5f 66 69 lob_read_from_fi
4180: 6c 65 28 26 61 2c 20 67 2e 61 72 67 76 5b 32 5d le(&a, g.argv[2]
4190: 29 3b 0d 0a 20 20 20 62 6c 6f 62 5f 72 65 61 64 );.. blob_read
41a0: 5f 66 72 6f 6d 5f 66 69 6c 65 28 26 62 2c 20 67 _from_file(&b, g
41b0: 2e 61 72 67 76 5b 33 5d 29 3b 0d 0a 20 20 20 62 .argv[3]);.. b
41c0: 6c 6f 62 5f 7a 65 72 6f 28 26 6f 75 74 29 3b 0d lob_zero(&out);.
41d0: 0a 20 20 20 74 65 78 74 5f 64 69 66 66 28 26 61 . text_diff(&a
41e0: 2c 20 26 62 2c 20 26 6f 75 74 2c 20 33 29 3b 0d , &b, &out, 3);.
41f0: 0a 20 20 20 62 6c 6f 62 5f 77 72 69 74 65 5f 74 . blob_write_t
4200: 6f 5f 66 69 6c 65 28 26 6f 75 74 2c 20 22 2d 22 o_file(&out, "-"
4210: 29 3b 0d 0a 2b 20 20 62 6c 6f 62 5f 72 65 73 65 );..+ blob_rese
4220: 74 28 26 61 29 3b 0d 0a 2b 20 20 62 6c 6f 62 5f t(&a);..+ blob_
4230: 72 65 73 65 74 28 26 62 29 3b 0d 0a 2b 20 20 62 reset(&b);..+ b
4240: 6c 6f 62 5f 72 65 73 65 74 28 26 6f 75 74 29 3b lob_reset(&out);
4250: 0d 0a 20 7d 0d 0a 20 0d 0a 20 2f 2a 2a 2a 2a 2a .. }.. .. /*****
4260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
42a0: 2a 2a 2a 2a 2a 0d 0a 20 2a 2a 20 54 68 65 20 62 *****.. ** The b
42b0: 61 73 69 63 20 64 69 66 66 65 72 65 6e 63 65 20 asic difference
42c0: 65 6e 67 69 6e 65 20 69 73 20 61 62 6f 76 65 2e engine is above.
42d0: 20 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 What follows i
42e0: 73 20 74 68 65 20 61 6e 6e 6f 74 61 74 69 6f 6e s the annotation
42f0: 0d 0a 20 2a 2a 20 65 6e 67 69 6e 65 2e 20 20 42 .. ** engine. B
4300: 6f 74 68 20 61 72 65 20 69 6e 20 74 68 65 20 73 oth are in the s
4310: 61 6d 65 20 66 69 6c 65 20 73 69 6e 63 65 20 74 ame file since t
4320: 68 65 79 20 73 68 61 72 65 20 6d 61 6e 79 20 63 hey share many c
4330: 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 0d 0a 49 6e omponents.....In
4340: 64 65 78 3a 20 73 72 63 2f 64 6f 63 2e 63 0d 0a dex: src/doc.c..
4350: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4360: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4380: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4390: 3d 3d 3d 0d 0a 2d 2d 2d 20 73 72 63 2f 64 6f 63 ===..--- src/doc
43a0: 2e 63 0d 0a 2b 2b 2b 20 73 72 63 2f 64 6f 63 2e .c..+++ src/doc.
43b0: 63 0d 0a 40 40 20 2d 35 34 36 2c 31 37 20 2b 35 c..@@ -546,17 +5
43c0: 34 36 2c 31 39 20 40 40 0d 0a 20 2a 2a 20 74 68 46,19 @@.. ** th
43d0: 65 20 6c 6f 67 69 6e 20 70 61 67 65 2e 20 20 49 e login page. I
43e0: 74 20 69 73 20 64 65 73 69 67 6e 65 64 20 66 6f t is designed fo
43f0: 72 20 75 73 65 20 69 6e 20 74 68 65 20 75 70 70 r use in the upp
4400: 65 72 20 6c 65 66 74 2d 68 61 6e 64 20 63 6f 72 er left-hand cor
4410: 6e 65 72 0d 0a 20 2a 2a 20 6f 66 20 74 68 65 20 ner.. ** of the
4420: 68 65 61 64 65 72 2e 0d 0a 20 2a 2f 0d 0a 20 76 header... */.. v
4430: 6f 69 64 20 6c 6f 67 6f 5f 70 61 67 65 28 76 6f oid logo_page(vo
4440: 69 64 29 7b 0d 0a 20 20 20 42 6c 6f 62 20 6c 6f id){.. Blob lo
4450: 67 6f 3b 0d 0a 2d 20 20 63 68 61 72 20 2a 7a 4d go;..- char *zM
4460: 69 6d 65 3b 0d 0a 2b 20 20 63 68 61 72 20 2a 7a ime;..+ char *z
4470: 4d 69 6d 65 20 3d 20 30 3b 0d 0a 20 0d 0a 20 20 Mime = 0;.. ..
4480: 20 7a 4d 69 6d 65 20 3d 20 64 62 5f 67 65 74 28 zMime = db_get(
4490: 22 6c 6f 67 6f 2d 6d 69 6d 65 74 79 70 65 22 2c "logo-mimetype",
44a0: 20 22 69 6d 61 67 65 2f 67 69 66 22 29 3b 0d 0a "image/gif");..
44b0: 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 6c 6f blob_zero(&lo
44c0: 67 6f 29 3b 0d 0a 20 20 20 64 62 5f 62 6c 6f 62 go);.. db_blob
44d0: 28 26 6c 6f 67 6f 2c 20 22 53 45 4c 45 43 54 20 (&logo, "SELECT
44e0: 76 61 6c 75 65 20 46 52 4f 4d 20 63 6f 6e 66 69 value FROM confi
44f0: 67 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 6c 6f g WHERE name='lo
4500: 67 6f 2d 69 6d 61 67 65 27 22 29 3b 0d 0a 20 20 go-image'");..
4510: 20 69 66 28 20 62 6c 6f 62 5f 73 69 7a 65 28 26 if( blob_size(&
4520: 6c 6f 67 6f 29 3d 3d 30 20 29 7b 0d 0a 20 20 20 logo)==0 ){..
4530: 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26 6c 6f 67 blob_init(&log
4540: 6f 2c 20 28 63 68 61 72 2a 29 61 4c 6f 67 6f 2c o, (char*)aLogo,
4550: 20 73 69 7a 65 6f 66 28 61 4c 6f 67 6f 29 29 3b sizeof(aLogo));
4560: 0d 0a 20 20 20 7d 0d 0a 20 20 20 63 67 69 5f 73 .. }.. cgi_s
4570: 65 74 5f 63 6f 6e 74 65 6e 74 5f 74 79 70 65 28 et_content_type(
4580: 7a 4d 69 6d 65 29 3b 0d 0a 2b 20 20 66 72 65 65 zMime);..+ free
4590: 28 7a 4d 69 6d 65 29 3b 0d 0a 2b 20 20 7a 4d 69 (zMime);..+ zMi
45a0: 6d 65 20 3d 20 30 3b 0d 0a 20 20 20 63 67 69 5f me = 0;.. cgi_
45b0: 73 65 74 5f 63 6f 6e 74 65 6e 74 28 26 6c 6f 67 set_content(&log
45c0: 6f 29 3b 0d 0a 20 20 20 67 2e 69 73 43 6f 6e 73 o);.. g.isCons
45d0: 74 20 3d 20 31 3b 0d 0a 20 7d 0d 0a 0d 0a 49 6e t = 1;.. }....In
45e0: 64 65 78 3a 20 73 72 63 2f 66 69 6c 65 2e 63 0d dex: src/file.c.
45f0: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .===============
4600: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4610: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4620: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4630: 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 72 63 2f 66 69 ====..--- src/fi
4640: 6c 65 2e 63 0d 0a 2b 2b 2b 20 73 72 63 2f 66 69 le.c..+++ src/fi
4650: 6c 65 2e 63 0d 0a 40 40 20 2d 31 36 2c 31 34 20 le.c..@@ -16,14
4660: 2b 31 36 2c 31 37 20 40 40 0d 0a 20 2a 2a 2a 2a +16,17 @@.. ****
4670: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4680: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4690: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
46a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
46b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 2a ***********.. **
46c0: 0d 0a 20 2a 2a 20 46 69 6c 65 20 75 74 69 6c 69 .. ** File utili
46d0: 74 69 65 73 0d 0a 20 2a 2f 0d 0a 20 23 69 6e 63 ties.. */.. #inc
46e0: 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0d lude "config.h".
46f0: 0a 2b 23 69 6e 63 6c 75 64 65 20 22 66 69 6c 65 .+#include "file
4700: 2e 68 22 0d 0a 20 23 69 6e 63 6c 75 64 65 20 3c .h".. #include <
4710: 73 79 73 2f 74 79 70 65 73 2e 68 3e 0d 0a 20 23 sys/types.h>.. #
4720: 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 74 61 include <sys/sta
4730: 74 2e 68 3e 0d 0a 20 23 69 6e 63 6c 75 64 65 20 t.h>.. #include
4740: 3c 75 6e 69 73 74 64 2e 68 3e 0d 0a 2d 23 69 6e <unistd.h>..-#in
4750: 63 6c 75 64 65 20 22 66 69 6c 65 2e 68 22 0d 0a clude "file.h"..
4760: 2b 23 69 66 64 65 66 20 5f 5f 4d 49 4e 47 57 33 +#ifdef __MINGW3
4770: 32 5f 5f 20 20 20 20 20 20 20 20 20 20 20 2f 2a 2__ /*
4780: 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 66 6f This code is fo
4790: 72 20 77 69 6e 33 32 20 6f 6e 6c 79 20 2a 2f 0d r win32 only */.
47a0: 0a 2b 23 69 6e 63 6c 75 64 65 20 3c 77 69 6e 64 .+#include <wind
47b0: 6f 77 73 2e 68 3e 0d 0a 2b 23 65 6e 64 69 66 0d ows.h>..+#endif.
47c0: 0a 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 54 68 65 . .. /*.. ** The
47d0: 20 66 69 6c 65 20 73 74 61 74 75 73 20 69 6e 66 file status inf
47e0: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 ormation from th
47f0: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 74 e most recent st
4800: 61 74 28 29 20 63 61 6c 6c 2e 0d 0a 20 2a 2f 0d at() call... */.
4810: 0a 20 73 74 61 74 69 63 20 73 74 72 75 63 74 20 . static struct
4820: 73 74 61 74 20 66 69 6c 65 53 74 61 74 3b 0d 0a stat fileStat;..
4830: 40 40 20 2d 31 32 37 2c 31 30 20 2b 31 33 30 2c @@ -127,10 +130,
4840: 31 35 20 40 40 0d 0a 20 0d 0a 20 2f 2a 0d 0a 20 15 @@.. .. /*..
4850: 2a 2a 20 43 6f 70 79 20 74 68 65 20 63 6f 6e 74 ** Copy the cont
4860: 65 6e 74 20 6f 66 20 61 20 66 69 6c 65 20 66 72 ent of a file fr
4870: 6f 6d 20 6f 6e 65 20 70 6c 61 63 65 20 74 6f 20 om one place to
4880: 61 6e 6f 74 68 65 72 2e 0d 0a 20 2a 2f 0d 0a 20 another... */..
4890: 76 6f 69 64 20 66 69 6c 65 5f 63 6f 70 79 28 63 void file_copy(c
48a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 72 6f 6d onst char *zFrom
48b0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 , const char *zT
48c0: 6f 29 7b 0d 0a 2b 23 69 66 20 64 65 66 69 6e 65 o){..+#if define
48d0: 64 28 5f 5f 4d 49 4e 47 57 33 32 5f 5f 29 20 26 d(__MINGW32__) &
48e0: 26 20 57 49 4e 56 45 52 3e 3d 30 78 30 35 30 30 & WINVER>=0x0500
48f0: 0d 0a 2b 20 20 69 66 28 30 3d 3d 43 6f 70 79 46 ..+ if(0==CopyF
4900: 69 6c 65 28 7a 46 72 6f 6d 2c 20 7a 54 6f 2c 20 ile(zFrom, zTo,
4910: 31 29 20 29 7b 0d 0a 2b 20 20 20 20 20 20 66 6f 1) ){..+ fo
4920: 73 73 69 6c 5f 66 61 74 61 6c 28 22 63 61 6e 6e ssil_fatal("cann
4930: 6f 74 20 63 6f 70 79 20 66 69 6c 65 20 66 72 6f ot copy file fro
4940: 6d 20 5c 22 25 73 5c 22 20 74 6f 20 5c 22 25 73 m \"%s\" to \"%s
4950: 5c 22 22 2c 20 7a 46 72 6f 6d 2c 20 7a 54 6f 29 \"", zFrom, zTo)
4960: 3b 0d 0a 2b 20 20 7d 0d 0a 2b 23 65 6c 73 65 0d ;..+ }..+#else.
4970: 0a 20 20 20 46 49 4c 45 20 2a 69 6e 2c 20 2a 6f . FILE *in, *o
4980: 75 74 3b 0d 0a 20 20 20 69 6e 74 20 67 6f 74 3b ut;.. int got;
4990: 0d 0a 20 20 20 63 68 61 72 20 7a 42 75 66 5b 38 .. char zBuf[8
49a0: 31 39 32 5d 3b 0d 0a 20 20 20 69 6e 20 3d 20 66 192];.. in = f
49b0: 6f 70 65 6e 28 7a 46 72 6f 6d 2c 20 22 72 62 22 open(zFrom, "rb"
49c0: 29 3b 0d 0a 20 20 20 69 66 28 20 69 6e 3d 3d 30 );.. if( in==0
49d0: 20 29 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28 ) fossil_fatal(
49e0: 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 "cannot open \"%
49f0: 73 5c 22 20 66 6f 72 20 72 65 61 64 69 6e 67 22 s\" for reading"
4a00: 2c 20 7a 46 72 6f 6d 29 3b 0d 0a 40 40 20 2d 31 , zFrom);..@@ -1
4a10: 33 39 2c 31 30 20 2b 31 34 37 2c 31 31 20 40 40 39,10 +147,11 @@
4a20: 0d 0a 20 20 20 77 68 69 6c 65 28 20 28 67 6f 74 .. while( (got
4a30: 3d 66 72 65 61 64 28 7a 42 75 66 2c 20 31 2c 20 =fread(zBuf, 1,
4a40: 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c 20 69 6e sizeof(zBuf), in
4a50: 29 29 3e 30 20 29 7b 0d 0a 20 20 20 20 20 66 77 ))>0 ){.. fw
4a60: 72 69 74 65 28 7a 42 75 66 2c 20 31 2c 20 67 6f rite(zBuf, 1, go
4a70: 74 2c 20 6f 75 74 29 3b 0d 0a 20 20 20 7d 0d 0a t, out);.. }..
4a80: 20 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0d 0a fclose(in);..
4a90: 20 20 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0d fclose(out);.
4aa0: 0a 2b 23 65 6e 64 69 66 0d 0a 20 7d 0d 0a 20 0d .+#endif.. }.. .
4ab0: 0a 20 2f 2a 0d 0a 20 2a 2a 20 53 65 74 20 6f 72 . /*.. ** Set or
4ac0: 20 63 6c 65 61 72 20 74 68 65 20 65 78 65 63 75 clear the execu
4ad0: 74 65 20 62 69 74 20 6f 6e 20 61 20 66 69 6c 65 te bit on a file
4ae0: 2e 0d 0a 20 2a 2f 0d 0a 0d 0a 49 6e 64 65 78 3a ... */....Index:
4af0: 20 73 72 63 2f 6d 61 69 6e 2e 63 0d 0a 3d 3d 3d src/main.c..===
4b00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4b10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4b20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4b30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4b40: 0d 0a 2d 2d 2d 20 73 72 63 2f 6d 61 69 6e 2e 63 ..--- src/main.c
4b50: 0d 0a 2b 2b 2b 20 73 72 63 2f 6d 61 69 6e 2e 63 ..+++ src/main.c
4b60: 0d 0a 40 40 20 2d 36 31 35 2c 31 31 20 2b 36 31 ..@@ -615,11 +61
4b70: 35 2c 31 31 20 40 40 0d 0a 20 0d 0a 20 2f 2a 0d 5,11 @@.. .. /*.
4b80: 0a 20 2a 2a 20 53 65 6e 64 20 61 6e 20 48 54 54 . ** Send an HTT
4b90: 50 20 72 65 64 69 72 65 63 74 20 62 61 63 6b 20 P redirect back
4ba0: 74 6f 20 74 68 65 20 64 65 73 69 67 6e 61 74 65 to the designate
4bb0: 64 20 49 6e 64 65 78 20 50 61 67 65 2e 0d 0a 20 d Index Page...
4bc0: 2a 2f 0d 0a 20 76 6f 69 64 20 66 6f 73 73 69 6c */.. void fossil
4bd0: 5f 72 65 64 69 72 65 63 74 5f 68 6f 6d 65 28 76 _redirect_home(v
4be0: 6f 69 64 29 7b 0d 0a 2d 20 20 63 67 69 5f 72 65 oid){..- cgi_re
4bf0: 64 69 72 65 63 74 66 28 22 25 73 25 73 22 2c 20 directf("%s%s",
4c00: 67 2e 7a 42 61 73 65 55 52 4c 2c 20 64 62 5f 67 g.zBaseURL, db_g
4c10: 65 74 28 22 69 6e 64 65 78 2d 70 61 67 65 22 2c et("index-page",
4c20: 20 22 2f 69 6e 64 65 78 22 29 29 3b 0d 0a 2b 20 "/index"));..+
4c30: 20 63 67 69 5f 72 65 64 69 72 65 63 74 66 28 22 cgi_redirectf("
4c40: 25 73 25 7a 22 2c 20 67 2e 7a 42 61 73 65 55 52 %s%z", g.zBaseUR
4c50: 4c 2c 20 64 62 5f 67 65 74 28 22 69 6e 64 65 78 L, db_get("index
4c60: 2d 70 61 67 65 22 2c 20 22 2f 69 6e 64 65 78 22 -page", "/index"
4c70: 29 29 3b 0d 0a 20 7d 0d 0a 20 0d 0a 20 2f 2a 0d ));.. }.. .. /*.
4c80: 0a 20 2a 2a 20 49 66 20 72 75 6e 6e 69 6e 67 20 . ** If running
4c90: 61 73 20 72 6f 6f 74 2c 20 63 68 72 6f 6f 74 20 as root, chroot
4ca0: 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 to the directory
4cb0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d containing the.
4cc0: 0a 20 2a 2a 20 72 65 70 6f 73 69 74 6f 72 79 20 . ** repository
4cd0: 7a 52 65 70 6f 20 61 6e 64 20 74 68 65 6e 20 64 zRepo and then d
4ce0: 72 6f 70 20 72 6f 6f 74 20 70 72 69 76 69 6c 65 rop root privile
4cf0: 67 65 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65 ges. Return the
4d00: 0d 0a 40 40 20 2d 39 39 32 2c 31 31 20 2b 39 39 ..@@ -992,11 +99
4d10: 32 2c 31 31 20 40 40 0d 0a 20 2a 2a 20 76 61 72 2,11 @@.. ** var
4d20: 69 6f 75 73 20 72 65 70 6f 73 69 74 6f 72 69 65 ious repositorie
4d30: 73 2e 0d 0a 20 2a 2f 0d 0a 20 76 6f 69 64 20 63 s... */.. void c
4d40: 6d 64 5f 77 65 62 73 65 72 76 65 72 28 76 6f 69 md_webserver(voi
4d50: 64 29 7b 0d 0a 20 20 20 69 6e 74 20 69 50 6f 72 d){.. int iPor
4d60: 74 2c 20 6d 78 50 6f 72 74 3b 20 20 20 20 20 20 t, mxPort;
4d70: 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 54 43 /* Range of TC
4d80: 50 20 70 6f 72 74 73 20 61 6c 6c 6f 77 65 64 20 P ports allowed
4d90: 2a 2f 0d 0a 20 20 20 63 6f 6e 73 74 20 63 68 61 */.. const cha
4da0: 72 20 2a 7a 50 6f 72 74 3b 20 20 20 20 20 20 20 r *zPort;
4db0: 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 74 68 65 /* Value of the
4dc0: 20 2d 2d 70 6f 72 74 20 6f 70 74 69 6f 6e 20 2a --port option *
4dd0: 2f 0d 0a 2d 20 20 63 68 61 72 20 2a 7a 42 72 6f /..- char *zBro
4de0: 77 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 wser;
4df0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 77 65 62 20 62 /* Name of web b
4e00: 72 6f 77 73 65 72 20 70 72 6f 67 72 61 6d 20 2a rowser program *
4e10: 2f 0d 0a 2b 20 20 63 68 61 72 20 2a 7a 42 72 6f /..+ char *zBro
4e20: 77 73 65 72 20 3d 20 30 3b 20 20 20 20 20 20 20 wser = 0;
4e30: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 77 /* Name of w
4e40: 65 62 20 62 72 6f 77 73 65 72 20 70 72 6f 67 72 eb browser progr
4e50: 61 6d 20 2a 2f 0d 0a 20 20 20 63 68 61 72 20 2a am */.. char *
4e60: 7a 42 72 6f 77 73 65 72 43 6d 64 20 3d 20 30 3b zBrowserCmd = 0;
4e70: 20 20 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 74 /* Command t
4e80: 6f 20 6c 61 75 6e 63 68 20 74 68 65 20 77 65 62 o launch the web
4e90: 20 62 72 6f 77 73 65 72 20 2a 2f 0d 0a 20 20 20 browser */..
4ea0: 69 6e 74 20 69 73 55 69 43 6d 64 3b 20 20 20 20 int isUiCmd;
4eb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 /* Tru
4ec0: 65 20 69 66 20 63 6f 6d 6d 61 6e 64 20 69 73 20 e if command is
4ed0: 22 75 69 22 2c 20 6e 6f 74 20 22 73 65 72 76 65 "ui", not "serve
4ee0: 72 27 20 2a 2f 0d 0a 20 20 20 63 6f 6e 73 74 20 r' */.. const
4ef0: 63 68 61 72 20 2a 7a 4e 6f 74 46 6f 75 6e 64 3b char *zNotFound;
4f00: 20 20 20 20 2f 2a 20 54 68 65 20 2d 2d 6e 6f 74 /* The --not
4f10: 66 6f 75 6e 64 20 6f 70 74 69 6f 6e 20 6f 72 20 found option or
4f20: 4e 55 4c 4c 20 2a 2f 0d 0a 20 0d 0a 20 23 69 66 NULL */.. .. #if
4f30: 64 65 66 20 5f 5f 4d 49 4e 47 57 33 32 5f 5f 0d def __MINGW32__.
4f40: 0a 40 40 20 2d 31 30 33 32 2c 31 30 20 2b 31 30 .@@ -1032,10 +10
4f50: 33 32 2c 31 31 20 40 40 0d 0a 20 20 20 20 20 20 32,11 @@..
4f60: 20 20 20 69 66 28 20 62 69 6e 61 72 79 4f 6e 50 if( binaryOnP
4f70: 61 74 68 28 61 7a 42 72 6f 77 73 65 72 50 72 6f ath(azBrowserPro
4f80: 67 5b 69 5d 29 20 29 7b 0d 0a 20 20 20 20 20 20 g[i]) ){..
4f90: 20 20 20 20 20 7a 42 72 6f 77 73 65 72 20 3d 20 zBrowser =
4fa0: 61 7a 42 72 6f 77 73 65 72 50 72 6f 67 5b 69 5d azBrowserProg[i]
4fb0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 62 72 ;.. br
4fc0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 7d eak;.. }
4fd0: 0d 0a 20 20 20 20 20 20 20 7d 0d 0a 2b 20 20 20 .. }..+
4fe0: 20 20 20 7a 42 72 6f 77 73 65 72 20 3d 20 6d 70 zBrowser = mp
4ff0: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 42 72 6f rintf("%s", zBro
5000: 77 73 65 72 29 3b 20 2f 2a 20 65 6e 73 75 72 65 wser); /* ensure
5010: 20 7a 42 72 6f 77 73 65 72 20 61 6c 77 61 79 73 zBrowser always
5020: 20 70 6f 69 6e 74 20 74 6f 20 64 79 6e 61 6d 69 point to dynami
5030: 63 20 73 74 72 69 6e 67 20 2a 2f 0d 0a 20 20 20 c string */..
5040: 20 20 7d 0d 0a 20 23 65 6c 73 65 0d 0a 20 20 20 }.. #else..
5050: 20 20 7a 42 72 6f 77 73 65 72 20 3d 20 64 62 5f zBrowser = db_
5060: 67 65 74 28 22 77 65 62 2d 62 72 6f 77 73 65 72 get("web-browser
5070: 22 2c 20 22 6f 70 65 6e 22 29 3b 0d 0a 20 23 65 ", "open");.. #e
5080: 6e 64 69 66 0d 0a 20 20 20 20 20 7a 42 72 6f 77 ndif.. zBrow
5090: 73 65 72 43 6d 64 20 3d 20 6d 70 72 69 6e 74 66 serCmd = mprintf
50a0: 28 22 25 73 20 68 74 74 70 3a 2f 2f 6c 6f 63 61 ("%s http://loca
50b0: 6c 68 6f 73 74 3a 25 25 64 2f 20 26 22 2c 20 7a lhost:%%d/ &", z
50c0: 42 72 6f 77 73 65 72 29 3b 0d 0a 40 40 20 2d 31 Browser);..@@ -1
50d0: 30 36 31 2c 36 20 2b 31 30 36 32 2c 31 30 20 40 061,6 +1062,10 @
50e0: 40 0d 0a 20 20 20 20 20 7a 42 72 6f 77 73 65 72 @.. zBrowser
50f0: 43 6d 64 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 Cmd = mprintf("%
5100: 73 20 68 74 74 70 3a 2f 2f 31 32 37 2e 30 2e 30 s http://127.0.0
5110: 2e 31 3a 25 25 64 2f 22 2c 20 7a 42 72 6f 77 73 .1:%%d/", zBrows
5120: 65 72 29 3b 0d 0a 20 20 20 7d 0d 0a 20 20 20 64 er);.. }.. d
5130: 62 5f 63 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 77 b_close();.. w
5140: 69 6e 33 32 5f 68 74 74 70 5f 73 65 72 76 65 72 in32_http_server
5150: 28 69 50 6f 72 74 2c 20 6d 78 50 6f 72 74 2c 20 (iPort, mxPort,
5160: 7a 42 72 6f 77 73 65 72 43 6d 64 2c 20 7a 53 74 zBrowserCmd, zSt
5170: 6f 70 70 65 72 46 69 6c 65 2c 20 7a 4e 6f 74 46 opperFile, zNotF
5180: 6f 75 6e 64 29 3b 0d 0a 20 23 65 6e 64 69 66 0d ound);.. #endif.
5190: 0a 2b 20 20 69 66 28 20 69 73 55 69 43 6d 64 20 .+ if( isUiCmd
51a0: 29 7b 0d 0a 2b 20 20 20 20 66 72 65 65 28 7a 42 ){..+ free(zB
51b0: 72 6f 77 73 65 72 43 6d 64 29 3b 20 7a 42 72 6f rowserCmd); zBro
51c0: 77 73 65 72 43 6d 64 20 3d 20 30 3b 0d 0a 2b 20 wserCmd = 0;..+
51d0: 20 20 20 66 72 65 65 28 7a 42 72 6f 77 73 65 72 free(zBrowser
51e0: 29 3b 20 7a 42 72 6f 77 73 65 72 20 3d 20 30 3b ); zBrowser = 0;
51f0: 0d 0a 2b 20 20 7d 0d 0a 20 7d 0d 0a 0d 0a 49 6e ..+ }.. }....In
5200: 64 65 78 3a 20 73 72 63 2f 73 74 79 6c 65 2e 63 dex: src/style.c
5210: 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..==============
5220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5250: 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 72 63 2f 73 =====..--- src/s
5260: 74 79 6c 65 2e 63 0d 0a 2b 2b 2b 20 73 72 63 2f tyle.c..+++ src/
5270: 73 74 79 6c 65 2e 63 0d 0a 40 40 20 2d 31 31 32 style.c..@@ -112
5280: 2c 31 31 20 2b 31 31 32 2c 31 31 20 40 40 0d 0a ,11 +112,11 @@..
5290: 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 44 72 61 77 .. /*.. ** Draw
52a0: 20 74 68 65 20 66 6f 6f 74 65 72 20 61 74 20 74 the footer at t
52b0: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 74 68 65 he bottom of the
52c0: 20 70 61 67 65 2e 0d 0a 20 2a 2f 0d 0a 20 76 6f page... */.. vo
52d0: 69 64 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 id style_footer(
52e0: 76 6f 69 64 29 7b 0d 0a 2d 20 20 63 6f 6e 73 74 void){..- const
52f0: 20 63 68 61 72 20 2a 7a 46 6f 6f 74 65 72 3b 0d char *zFooter;.
5300: 0a 2b 20 20 63 68 61 72 20 2a 7a 46 6f 6f 74 65 .+ char *zFoote
5310: 72 20 3d 20 30 3b 0d 0a 20 0d 0a 20 20 20 69 66 r = 0;.. .. if
5320: 28 20 21 68 65 61 64 65 72 48 61 73 42 65 65 6e ( !headerHasBeen
5330: 47 65 6e 65 72 61 74 65 64 20 29 20 72 65 74 75 Generated ) retu
5340: 72 6e 3b 0d 0a 20 0d 0a 20 20 20 2f 2a 20 47 6f rn;.. .. /* Go
5350: 20 62 61 63 6b 20 61 6e 64 20 70 75 74 20 74 68 back and put th
5360: 65 20 73 75 62 6d 65 6e 75 20 61 74 20 74 68 65 e submenu at the
5370: 20 74 6f 70 20 6f 66 20 74 68 65 20 70 61 67 65 top of the page
5380: 2e 20 20 57 65 20 64 65 6c 61 79 20 74 68 65 0d . We delay the.
5390: 0a 20 20 20 2a 2a 20 63 72 65 61 74 69 6f 6e 20 . ** creation
53a0: 6f 66 20 74 68 65 20 73 75 62 6d 65 6e 75 20 75 of the submenu u
53b0: 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 73 6f 20 ntil the end so
53c0: 74 68 61 74 20 77 65 20 63 61 6e 20 61 64 64 20 that we can add
53d0: 65 6c 65 6d 65 6e 74 73 0d 0a 40 40 20 2d 31 35 elements..@@ -15
53e0: 32 2c 31 30 20 2b 31 35 32 2c 31 32 20 40 40 0d 2,10 +152,12 @@.
53f0: 0a 20 20 20 69 66 28 20 67 2e 74 68 54 72 61 63 . if( g.thTrac
5400: 65 20 29 7b 0d 0a 20 20 20 20 20 63 67 69 5f 61 e ){.. cgi_a
5410: 70 70 65 6e 64 5f 63 6f 6e 74 65 6e 74 28 22 3c ppend_content("<
5420: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 72 65 64 font color=\"red
5430: 5c 22 3e 3c 68 72 3e 5c 6e 22 2c 20 2d 31 29 3b \"><hr>\n", -1);
5440: 0d 0a 20 20 20 20 20 63 67 69 5f 61 70 70 65 6e .. cgi_appen
5450: 64 5f 63 6f 6e 74 65 6e 74 28 62 6c 6f 62 5f 73 d_content(blob_s
5460: 74 72 28 26 67 2e 74 68 4c 6f 67 29 2c 20 62 6c tr(&g.thLog), bl
5470: 6f 62 5f 73 69 7a 65 28 26 67 2e 74 68 4c 6f 67 ob_size(&g.thLog
5480: 29 29 3b 0d 0a 20 20 20 20 20 63 67 69 5f 61 70 ));.. cgi_ap
5490: 70 65 6e 64 5f 63 6f 6e 74 65 6e 74 28 22 3c 2f pend_content("</
54a0: 66 6f 6e 74 3e 5c 6e 22 2c 20 2d 31 29 3b 0d 0a font>\n", -1);..
54b0: 20 20 20 7d 0d 0a 2b 0d 0a 2b 20 20 66 72 65 65 }..+..+ free
54c0: 28 7a 46 6f 6f 74 65 72 29 3b 20 7a 46 6f 6f 74 (zFooter); zFoot
54d0: 65 72 20 3d 20 30 3b 0d 0a 20 7d 0d 0a 20 0d 0a er = 0;.. }.. ..
54e0: 20 2f 2a 0d 0a 20 2a 2a 20 42 65 67 69 6e 20 61 /*.. ** Begin a
54f0: 20 73 69 64 65 2d 62 6f 78 20 6f 6e 20 74 68 65 side-box on the
5500: 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 right-hand side
5510: 20 6f 66 20 61 20 70 61 67 65 2e 20 20 54 68 65 of a page. The
5520: 20 74 69 74 6c 65 20 61 6e 64 0d 0a 20 2a 2a 20 title and.. **
5530: 74 68 65 20 77 69 64 74 68 20 6f 66 20 74 68 65 the width of the
5540: 20 62 6f 78 20 61 72 65 20 67 69 76 65 6e 20 61 box are given a
5550: 73 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 s arguments. Th
5560: 65 20 77 69 64 74 68 20 69 73 20 75 73 75 61 6c e width is usual
5570: 6c 79 0d 0a 0d 0a 49 6e 64 65 78 3a 20 73 72 63 ly....Index: src
5580: 2f 75 73 65 72 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d /user.c..=======
5590: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
55a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
55b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
55c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d ============..--
55d0: 2d 20 73 72 63 2f 75 73 65 72 2e 63 0d 0a 2b 2b - src/user.c..++
55e0: 2b 20 73 72 63 2f 75 73 65 72 2e 63 0d 0a 40 40 + src/user.c..@@
55f0: 20 2d 32 37 32 2c 32 34 20 2b 32 37 32 2c 33 32 -272,24 +272,32
5600: 20 40 40 0d 0a 20 20 20 7d 0d 0a 20 7d 0d 0a 20 @@.. }.. }..
5610: 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 41 74 74 65 6d .. /*.. ** Attem
5620: 70 74 20 74 6f 20 73 65 74 20 74 68 65 20 75 73 pt to set the us
5630: 65 72 20 74 6f 20 7a 4c 6f 67 69 6e 0d 0a 2b 2a er to zLogin..+*
5640: 2a 20 4e 6f 74 69 63 65 3a 20 61 72 67 75 6d 65 * Notice: argume
5650: 6e 74 20 22 7a 4c 6f 67 69 6e 22 20 6d 75 73 74 nt "zLogin" must
5660: 20 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 be dynamically
5670: 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67 allocated string
5680: 73 2e 0d 0a 20 2a 2f 0d 0a 2d 73 74 61 74 69 63 s... */..-static
5690: 20 69 6e 74 20 61 74 74 65 6d 70 74 5f 75 73 65 int attempt_use
56a0: 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c r(const char *zL
56b0: 6f 67 69 6e 29 7b 0d 0a 2b 73 74 61 74 69 63 20 ogin){..+static
56c0: 69 6e 74 20 61 74 74 65 6d 70 74 5f 75 73 65 72 int attempt_user
56d0: 5f 6e 6f 63 6f 70 79 28 63 6f 6e 73 74 20 63 68 _nocopy(const ch
56e0: 61 72 20 2a 7a 4c 6f 67 69 6e 29 7b 0d 0a 20 20 ar *zLogin){..
56f0: 20 69 6e 74 20 75 69 64 3b 0d 0a 20 0d 0a 20 20 int uid;.. ..
5700: 20 69 66 28 20 7a 4c 6f 67 69 6e 3d 3d 30 20 29 if( zLogin==0 )
5710: 7b 0d 0a 20 20 20 20 20 72 65 74 75 72 6e 20 30 {.. return 0
5720: 3b 0d 0a 20 20 20 7d 0d 0a 20 20 20 75 69 64 20 ;.. }.. uid
5730: 3d 20 64 62 5f 69 6e 74 28 30 2c 20 22 53 45 4c = db_int(0, "SEL
5740: 45 43 54 20 75 69 64 20 46 52 4f 4d 20 75 73 65 ECT uid FROM use
5750: 72 20 57 48 45 52 45 20 6c 6f 67 69 6e 3d 25 51 r WHERE login=%Q
5760: 22 2c 20 7a 4c 6f 67 69 6e 29 3b 0d 0a 20 20 20 ", zLogin);..
5770: 69 66 28 20 75 69 64 20 29 7b 0d 0a 20 20 20 20 if( uid ){..
5780: 20 67 2e 75 73 65 72 55 69 64 20 3d 20 75 69 64 g.userUid = uid
5790: 3b 0d 0a 2d 20 20 20 20 67 2e 7a 4c 6f 67 69 6e ;..- g.zLogin
57a0: 20 3d 20 6d 70 72 69 6e 74 66 28 22 25 73 22 2c = mprintf("%s",
57b0: 20 7a 4c 6f 67 69 6e 29 3b 0d 0a 2b 20 20 20 20 zLogin);..+
57c0: 67 2e 7a 4c 6f 67 69 6e 20 3d 20 7a 4c 6f 67 69 g.zLogin = zLogi
57d0: 6e 3b 0d 0a 20 20 20 20 20 72 65 74 75 72 6e 20 n;.. return
57e0: 31 3b 0d 0a 20 20 20 7d 0d 0a 20 20 20 72 65 74 1;.. }.. ret
57f0: 75 72 6e 20 30 3b 0d 0a 2b 7d 0d 0a 2b 0d 0a 2b urn 0;..+}..+..+
5800: 2f 2a 0d 0a 2b 2a 2a 20 41 74 74 65 6d 70 74 20 /*..+** Attempt
5810: 74 6f 20 73 65 74 20 74 68 65 20 75 73 65 72 20 to set the user
5820: 74 6f 20 7a 4c 6f 67 69 6e 0d 0a 2b 2a 2f 0d 0a to zLogin..+*/..
5830: 2b 73 74 61 74 69 63 20 69 6e 74 20 61 74 74 65 +static int atte
5840: 6d 70 74 5f 75 73 65 72 28 63 6f 6e 73 74 20 63 mpt_user(const c
5850: 68 61 72 20 2a 7a 4c 6f 67 69 6e 29 7b 0d 0a 2b har *zLogin){..+
5860: 20 20 20 20 61 74 74 65 6d 70 74 5f 75 73 65 72 attempt_user
5870: 5f 6e 6f 63 6f 70 79 28 53 54 52 44 55 50 28 7a _nocopy(STRDUP(z
5880: 4c 6f 67 69 6e 29 29 3b 0d 0a 20 7d 0d 0a 20 0d Login));.. }.. .
5890: 0a 20 2f 2a 0d 0a 20 2a 2a 20 46 69 67 75 72 65 . /*.. ** Figure
58a0: 20 6f 75 74 20 77 68 61 74 20 75 73 65 72 20 69 out what user i
58b0: 73 20 61 74 20 74 68 65 20 63 6f 6e 74 72 6f 6c s at the control
58c0: 73 2e 0d 0a 20 2a 2a 0d 0a 40 40 20 2d 33 30 39 s... **..@@ -309
58d0: 2c 31 33 20 2b 33 31 37 2c 31 33 20 40 40 0d 0a ,13 +317,13 @@..
58e0: 20 20 20 53 74 6d 74 20 73 3b 0d 0a 20 0d 0a 20 Stmt s;.. ..
58f0: 20 20 69 66 28 20 67 2e 75 73 65 72 55 69 64 20 if( g.userUid
5900: 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 69 66 ) return;.. if
5910: 28 20 61 74 74 65 6d 70 74 5f 75 73 65 72 28 67 ( attempt_user(g
5920: 2e 7a 4c 6f 67 69 6e 29 20 29 20 72 65 74 75 72 .zLogin) ) retur
5930: 6e 3b 0d 0a 20 0d 0a 2d 20 20 69 66 28 20 67 2e n;.. ..- if( g.
5940: 6c 6f 63 61 6c 4f 70 65 6e 20 26 26 20 61 74 74 localOpen && att
5950: 65 6d 70 74 5f 75 73 65 72 28 64 62 5f 6c 67 65 empt_user(db_lge
5960: 74 28 22 64 65 66 61 75 6c 74 2d 75 73 65 72 22 t("default-user"
5970: 2c 30 29 29 20 29 20 72 65 74 75 72 6e 3b 0d 0a ,0)) ) return;..
5980: 2b 20 20 69 66 28 20 67 2e 6c 6f 63 61 6c 4f 70 + if( g.localOp
5990: 65 6e 20 26 26 20 61 74 74 65 6d 70 74 5f 75 73 en && attempt_us
59a0: 65 72 5f 6e 6f 63 6f 70 79 28 64 62 5f 6c 67 65 er_nocopy(db_lge
59b0: 74 28 22 64 65 66 61 75 6c 74 2d 75 73 65 72 22 t("default-user"
59c0: 2c 30 29 29 20 29 20 72 65 74 75 72 6e 3b 0d 0a ,0)) ) return;..
59d0: 20 0d 0a 2d 20 20 69 66 28 20 61 74 74 65 6d 70 ..- if( attemp
59e0: 74 5f 75 73 65 72 28 64 62 5f 67 65 74 28 22 64 t_user(db_get("d
59f0: 65 66 61 75 6c 74 2d 75 73 65 72 22 2c 20 30 29 efault-user", 0)
5a00: 29 20 29 20 72 65 74 75 72 6e 3b 0d 0a 2b 20 20 ) ) return;..+
5a10: 69 66 28 20 61 74 74 65 6d 70 74 5f 75 73 65 72 if( attempt_user
5a20: 5f 6e 6f 63 6f 70 79 28 64 62 5f 67 65 74 28 22 _nocopy(db_get("
5a30: 64 65 66 61 75 6c 74 2d 75 73 65 72 22 2c 20 30 default-user", 0
5a40: 29 29 20 29 20 72 65 74 75 72 6e 3b 0d 0a 20 0d )) ) return;.. .
5a50: 0a 20 20 20 69 66 28 20 61 74 74 65 6d 70 74 5f . if( attempt_
5a60: 75 73 65 72 28 67 65 74 65 6e 76 28 22 55 53 45 user(getenv("USE
5a70: 52 22 29 29 20 29 20 72 65 74 75 72 6e 3b 0d 0a R")) ) return;..
5a80: 20 0d 0a 20 20 20 64 62 5f 70 72 65 70 61 72 65 .. db_prepare
5a90: 28 26 73 2c 0d 0a 20 20 20 20 20 22 53 45 4c 45 (&s,.. "SELE
5aa0: 43 54 20 75 69 64 2c 20 6c 6f 67 69 6e 20 46 52 CT uid, login FR
5ab0: 4f 4d 20 75 73 65 72 22 0d 0a 0d 0a 49 6e 64 65 OM user"....Inde
5ac0: 78 3a 20 73 72 63 2f 77 69 6b 69 2e 63 0d 0a 3d x: src/wiki.c..=
5ad0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5ae0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5af0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5b00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5b10: 3d 3d 0d 0a 2d 2d 2d 20 73 72 63 2f 77 69 6b 69 ==..--- src/wiki
5b20: 2e 63 0d 0a 2b 2b 2b 20 73 72 63 2f 77 69 6b 69 .c..+++ src/wiki
5b30: 2e 63 0d 0a 40 40 20 2d 33 36 36 2c 31 30 20 2b .c..@@ -366,10 +
5b40: 33 36 36 2c 31 32 20 40 40 0d 0a 20 20 20 40 20 366,12 @@.. @
5b50: 3c 2f 66 6f 72 6d 3e 0d 0a 20 20 20 69 66 28 20 </form>.. if(
5b60: 21 69 73 53 61 6e 64 62 6f 78 20 29 7b 0d 0a 20 !isSandbox ){..
5b70: 20 20 20 20 6d 61 6e 69 66 65 73 74 5f 63 6c 65 manifest_cle
5b80: 61 72 28 26 6d 29 3b 0d 0a 20 20 20 7d 0d 0a 20 ar(&m);.. }..
5b90: 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 style_footer()
5ba0: 3b 0d 0a 2b 0d 0a 2b 20 20 66 72 65 65 28 7a 42 ;..+..+ free(zB
5bb0: 6f 64 79 29 3b 0d 0a 20 7d 0d 0a 20 0d 0a 20 2f ody);.. }.. .. /
5bc0: 2a 0d 0a 20 2a 2a 20 57 45 42 50 41 47 45 3a 20 *.. ** WEBPAGE:
5bd0: 77 69 6b 69 6e 65 77 0d 0a 20 2a 2a 20 55 52 4c wikinew.. ** URL
5be0: 20 2f 77 69 6b 69 6e 65 77 0d 0a 40 40 20 2d 34 /wikinew..@@ -4
5bf0: 36 39 2c 31 31 20 2b 34 37 31 2c 31 31 20 40 40 69,11 +471,11 @@
5c00: 0d 0a 20 20 20 20 20 42 6c 6f 62 20 77 69 6b 69 .. Blob wiki
5c10: 3b 0d 0a 20 20 20 20 20 4d 61 6e 69 66 65 73 74 ;.. Manifest
5c20: 20 6d 3b 0d 0a 20 0d 0a 20 20 20 20 20 62 6c 6f m;.. .. blo
5c30: 62 5f 7a 65 72 6f 28 26 62 6f 64 79 29 3b 0d 0a b_zero(&body);..
5c40: 20 20 20 20 20 69 66 28 20 69 73 53 61 6e 64 62 if( isSandb
5c50: 6f 78 20 29 7b 0d 0a 2d 20 20 20 20 20 20 62 6c ox ){..- bl
5c60: 6f 62 5f 61 70 70 65 6e 64 66 28 26 62 6f 64 79 ob_appendf(&body
5c70: 2c 20 64 62 5f 67 65 74 28 22 73 61 6e 64 62 6f , db_get("sandbo
5c80: 78 22 2c 22 22 29 29 3b 0d 0a 2b 20 20 20 20 20 x",""));..+
5c90: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 62 blob_appendf(&b
5ca0: 6f 64 79 2c 20 22 25 7a 22 2c 20 64 62 5f 67 65 ody, "%z", db_ge
5cb0: 74 28 22 73 61 6e 64 62 6f 78 22 2c 22 22 29 29 t("sandbox",""))
5cc0: 3b 0d 0a 20 20 20 20 20 20 20 61 70 70 65 6e 64 ;.. append
5cd0: 52 65 6d 61 72 6b 28 26 62 6f 64 79 29 3b 0d 0a Remark(&body);..
5ce0: 20 20 20 20 20 20 20 64 62 5f 73 65 74 28 22 73 db_set("s
5cf0: 61 6e 64 62 6f 78 22 2c 20 62 6c 6f 62 5f 73 74 andbox", blob_st
5d00: 72 28 26 62 6f 64 79 29 2c 20 30 29 3b 0d 0a 20 r(&body), 0);..
5d10: 20 20 20 20 7d 65 6c 73 65 7b 0d 0a 20 20 20 20 }else{..
5d20: 20 20 20 6c 6f 67 69 6e 5f 76 65 72 69 66 79 5f login_verify_
5d30: 63 73 72 66 5f 73 65 63 72 65 74 28 29 3b 0d 0a csrf_secret();..
5d40: 20 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 5f 67 content_g
5d50: 65 74 28 72 69 64 2c 20 26 63 6f 6e 74 65 6e 74 et(rid, &content
5d60: 29 3b 0d 0a 0d 0a 49 6e 64 65 78 3a 20 73 72 63 );....Index: src
5d70: 2f 77 69 6b 69 66 6f 72 6d 61 74 2e 63 0d 0a 3d /wikiformat.c..=
5d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5da0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5db0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5dc0: 3d 3d 0d 0a 2d 2d 2d 20 73 72 63 2f 77 69 6b 69 ==..--- src/wiki
5dd0: 66 6f 72 6d 61 74 2e 63 0d 0a 2b 2b 2b 20 73 72 format.c..+++ sr
5de0: 63 2f 77 69 6b 69 66 6f 72 6d 61 74 2e 63 0d 0a c/wikiformat.c..
5df0: 40 40 20 2d 39 33 37 2c 31 31 20 2b 39 33 37 2c @@ -937,11 +937,
5e00: 31 31 20 40 40 0d 0a 20 20 20 6d 65 6d 63 70 79 11 @@.. memcpy
5e10: 28 7a 55 70 70 65 72 2c 20 7a 4c 6f 77 65 72 2c (zUpper, zLower,
5e20: 20 6e 2b 31 29 3b 0d 0a 20 20 20 7a 55 70 70 65 n+1);.. zUppe
5e30: 72 5b 6e 2d 31 5d 2b 2b 3b 0d 0a 20 20 20 69 66 r[n-1]++;.. if
5e40: 28 20 6f 6e 63 65 20 29 7b 0d 0a 20 20 20 20 20 ( once ){..
5e50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6c 6f const char *zClo
5e60: 73 65 64 45 78 70 72 20 3d 20 64 62 5f 67 65 74 sedExpr = db_get
5e70: 28 22 74 69 63 6b 65 74 2d 63 6c 6f 73 65 64 2d ("ticket-closed-
5e80: 65 78 70 72 22 2c 20 22 73 74 61 74 75 73 3d 27 expr", "status='
5e90: 43 6c 6f 73 65 64 27 22 29 3b 0d 0a 20 20 20 20 Closed'");..
5ea0: 20 64 62 5f 73 74 61 74 69 63 5f 70 72 65 70 61 db_static_prepa
5eb0: 72 65 28 26 71 2c 0d 0a 2d 20 20 20 20 20 20 22 re(&q,..- "
5ec0: 53 45 4c 45 43 54 20 25 73 20 46 52 4f 4d 20 74 SELECT %s FROM t
5ed0: 69 63 6b 65 74 20 22 0d 0a 2b 20 20 20 20 20 20 icket "..+
5ee0: 22 53 45 4c 45 43 54 20 25 7a 20 46 52 4f 4d 20 "SELECT %z FROM
5ef0: 74 69 63 6b 65 74 20 22 0d 0a 20 20 20 20 20 20 ticket "..
5f00: 20 22 20 57 48 45 52 45 20 74 6b 74 5f 75 75 69 " WHERE tkt_uui
5f10: 64 3e 3d 3a 6c 77 72 20 41 4e 44 20 74 6b 74 5f d>=:lwr AND tkt_
5f20: 75 75 69 64 3c 3a 75 70 72 22 2c 0d 0a 20 20 20 uuid<:upr",..
5f30: 20 20 20 20 7a 43 6c 6f 73 65 64 45 78 70 72 0d zClosedExpr.
5f40: 0a 20 20 20 20 20 29 3b 0d 0a 20 20 20 20 20 6f . );.. o
5f50: 6e 63 65 20 3d 20 30 3b 0d 0a 20 20 20 7d 0d 0a nce = 0;.. }..
5f60: 0d 0a 49 6e 64 65 78 3a 20 73 72 63 2f 78 66 65 ..Index: src/xfe
5f70: 72 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d r.c..===========
5f80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5fb0: 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 72 ========..--- sr
5fc0: 63 2f 78 66 65 72 2e 63 0d 0a 2b 2b 2b 20 73 72 c/xfer.c..+++ sr
5fd0: 63 2f 78 66 65 72 2e 63 0d 0a 40 40 20 2d 36 37 c/xfer.c..@@ -67
5fe0: 38 2c 31 31 20 2b 36 37 38 2c 31 31 20 40 40 0d 8,11 +678,11 @@.
5ff0: 0a 20 20 20 20 20 69 66 28 20 78 66 65 72 2e 6e . if( xfer.n
6000: 54 6f 6b 65 6e 3d 3d 33 0d 0a 20 20 20 20 20 20 Token==3..
6010: 26 26 20 28 62 6c 6f 62 5f 65 71 28 26 78 66 65 && (blob_eq(&xfe
6020: 72 2e 61 54 6f 6b 65 6e 5b 30 5d 2c 20 22 70 75 r.aToken[0], "pu
6030: 6c 6c 22 29 20 7c 7c 20 62 6c 6f 62 5f 65 71 28 ll") || blob_eq(
6040: 26 78 66 65 72 2e 61 54 6f 6b 65 6e 5b 30 5d 2c &xfer.aToken[0],
6050: 20 22 70 75 73 68 22 29 29 0d 0a 20 20 20 20 20 "push"))..
6060: 20 26 26 20 62 6c 6f 62 5f 69 73 5f 75 75 69 64 && blob_is_uuid
6070: 28 26 78 66 65 72 2e 61 54 6f 6b 65 6e 5b 31 5d (&xfer.aToken[1]
6080: 29 0d 0a 20 20 20 20 20 20 26 26 20 62 6c 6f 62 ).. && blob
6090: 5f 69 73 5f 75 75 69 64 28 26 78 66 65 72 2e 61 _is_uuid(&xfer.a
60a0: 54 6f 6b 65 6e 5b 32 5d 29 0d 0a 20 20 20 20 20 Token[2])..
60b0: 29 7b 0d 0a 2d 20 20 20 20 20 20 63 6f 6e 73 74 ){..- const
60c0: 20 63 68 61 72 20 2a 7a 50 43 6f 64 65 3b 0d 0a char *zPCode;..
60d0: 2b 20 20 20 20 20 20 63 68 61 72 20 2a 7a 50 43 + char *zPC
60e0: 6f 64 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 ode = 0;..
60f0: 20 7a 50 43 6f 64 65 20 3d 20 64 62 5f 67 65 74 zPCode = db_get
6100: 28 22 70 72 6f 6a 65 63 74 2d 63 6f 64 65 22 2c ("project-code",
6110: 20 30 29 3b 0d 0a 20 20 20 20 20 20 20 69 66 28 0);.. if(
6120: 20 7a 50 43 6f 64 65 3d 3d 30 20 29 7b 0d 0a 20 zPCode==0 ){..
6130: 20 20 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70 fossil_p
6140: 61 6e 69 63 28 22 6d 69 73 73 69 6e 67 20 70 72 anic("missing pr
6150: 6f 6a 65 63 74 20 63 6f 64 65 22 29 3b 0d 0a 20 oject code");..
6160: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
6170: 69 66 28 20 21 62 6c 6f 62 5f 65 71 5f 73 74 72 if( !blob_eq_str
6180: 28 26 78 66 65 72 2e 61 54 6f 6b 65 6e 5b 32 5d (&xfer.aToken[2]
6190: 2c 20 7a 50 43 6f 64 65 2c 20 2d 31 29 20 29 7b , zPCode, -1) ){
61a0: 0d 0a 40 40 20 2d 36 38 39 2c 31 30 20 2b 36 38 ..@@ -689,10 +68
61b0: 39 2c 31 33 20 40 40 0d 0a 20 20 20 20 20 20 20 9,13 @@..
61c0: 20 20 63 67 69 5f 72 65 73 65 74 5f 63 6f 6e 74 cgi_reset_cont
61d0: 65 6e 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 ent();..
61e0: 20 40 20 65 72 72 6f 72 20 77 72 6f 6e 67 5c 73 @ error wrong\s
61f0: 70 72 6f 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 project..
6200: 20 20 6e 45 72 72 2b 2b 3b 0d 0a 20 20 20 20 20 nErr++;..
6210: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 break;..
6220: 20 20 20 7d 0d 0a 2b 20 20 20 20 20 20 66 72 65 }..+ fre
6230: 65 28 7a 50 43 6f 64 65 29 3b 0d 0a 2b 20 20 20 e(zPCode);..+
6240: 20 20 20 7a 50 43 6f 64 65 20 3d 20 30 3b 0d 0a zPCode = 0;..
6250: 2b 0d 0a 20 20 20 20 20 20 20 6c 6f 67 69 6e 5f +.. login_
6260: 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c check_credential
6270: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 69 66 28 s();.. if(
6280: 20 62 6c 6f 62 5f 65 71 28 26 78 66 65 72 2e 61 blob_eq(&xfer.a
6290: 54 6f 6b 65 6e 5b 30 5d 2c 20 22 70 75 6c 6c 22 Token[0], "pull"
62a0: 29 20 29 7b 0d 0a 20 20 20 20 20 20 20 20 20 69 ) ){.. i
62b0: 66 28 20 21 67 2e 6f 6b 52 65 61 64 20 29 7b 0d f( !g.okRead ){.
62c0: 0a 20 20 20 20 20 20 20 20 20 20 20 63 67 69 5f . cgi_
62d0: 72 65 73 65 74 5f 63 6f 6e 74 65 6e 74 28 29 3b reset_content();
62e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 40 20 65 .. @ e
62f0: 72 72 6f 72 20 6e 6f 74 5c 73 61 75 74 68 6f 72 rror not\sauthor
6300: 69 7a 65 64 5c 73 74 6f 5c 73 72 65 61 64 0d 0a ized\sto\sread..
6310: 40 40 20 2d 37 32 31 2c 31 39 20 2b 37 32 34 2c @@ -721,19 +724,
6320: 31 39 20 40 40 0d 0a 20 20 20 20 20 2a 2f 0d 0a 19 @@.. */..
6330: 20 20 20 20 20 69 66 28 20 62 6c 6f 62 5f 65 71 if( blob_eq
6340: 28 26 78 66 65 72 2e 61 54 6f 6b 65 6e 5b 30 5d (&xfer.aToken[0]
6350: 2c 20 22 63 6c 6f 6e 65 22 29 20 29 7b 0d 0a 20 , "clone") ){..
6360: 20 20 20 20 20 20 6c 6f 67 69 6e 5f 63 68 65 63 login_chec
6370: 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b k_credentials();
6380: 0d 0a 20 20 20 20 20 20 20 69 66 28 20 21 67 2e .. if( !g.
6390: 6f 6b 43 6c 6f 6e 65 20 29 7b 0d 0a 20 20 20 20 okClone ){..
63a0: 20 20 20 20 20 63 67 69 5f 72 65 73 65 74 5f 63 cgi_reset_c
63b0: 6f 6e 74 65 6e 74 28 29 3b 0d 0a 2d 20 20 20 20 ontent();..-
63c0: 20 20 20 20 40 20 70 75 73 68 20 25 73 28 64 62 @ push %s(db
63d0: 5f 67 65 74 28 22 73 65 72 76 65 72 2d 63 6f 64 _get("server-cod
63e0: 65 22 2c 20 22 78 22 29 29 20 25 73 28 64 62 5f e", "x")) %s(db_
63f0: 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 63 6f 64 get("project-cod
6400: 65 22 2c 20 22 78 22 29 29 0d 0a 2b 20 20 20 20 e", "x"))..+
6410: 20 20 20 20 40 20 70 75 73 68 20 25 7a 28 64 62 @ push %z(db
6420: 5f 67 65 74 28 22 73 65 72 76 65 72 2d 63 6f 64 _get("server-cod
6430: 65 22 2c 20 22 78 22 29 29 20 25 7a 28 64 62 5f e", "x")) %z(db_
6440: 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 63 6f 64 get("project-cod
6450: 65 22 2c 20 22 78 22 29 29 0d 0a 20 20 20 20 20 e", "x"))..
6460: 20 20 20 20 40 20 65 72 72 6f 72 20 6e 6f 74 5c @ error not\
6470: 73 61 75 74 68 6f 72 69 7a 65 64 5c 73 74 6f 5c sauthorized\sto\
6480: 73 63 6c 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 sclone..
6490: 20 6e 45 72 72 2b 2b 3b 0d 0a 20 20 20 20 20 20 nErr++;..
64a0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 break;..
64b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 69 73 43 6c }.. isCl
64c0: 6f 6e 65 20 3d 20 31 3b 0d 0a 20 20 20 20 20 20 one = 1;..
64d0: 20 69 73 50 75 6c 6c 20 3d 20 31 3b 0d 0a 20 20 isPull = 1;..
64e0: 20 20 20 20 20 64 65 6c 74 61 46 6c 61 67 20 3d deltaFlag =
64f0: 20 31 3b 0d 0a 2d 20 20 20 20 20 20 40 20 70 75 1;..- @ pu
6500: 73 68 20 25 73 28 64 62 5f 67 65 74 28 22 73 65 sh %s(db_get("se
6510: 72 76 65 72 2d 63 6f 64 65 22 2c 20 22 78 22 29 rver-code", "x")
6520: 29 20 25 73 28 64 62 5f 67 65 74 28 22 70 72 6f ) %s(db_get("pro
6530: 6a 65 63 74 2d 63 6f 64 65 22 2c 20 22 78 22 29 ject-code", "x")
6540: 29 0d 0a 2b 20 20 20 20 20 20 40 20 70 75 73 68 )..+ @ push
6550: 20 25 7a 28 64 62 5f 67 65 74 28 22 73 65 72 76 %z(db_get("serv
6560: 65 72 2d 63 6f 64 65 22 2c 20 22 78 22 29 29 20 er-code", "x"))
6570: 25 7a 28 64 62 5f 67 65 74 28 22 70 72 6f 6a 65 %z(db_get("proje
6580: 63 74 2d 63 6f 64 65 22 2c 20 22 78 22 29 29 0d ct-code", "x")).
6590: 0a 20 20 20 20 20 7d 65 6c 73 65 0d 0a 20 0d 0a . }else.. ..
65a0: 20 20 20 20 20 2f 2a 20 20 20 20 6c 6f 67 69 6e /* login
65b0: 20 20 55 53 45 52 20 20 4e 4f 4e 43 45 20 20 53 USER NONCE S
65c0: 49 47 4e 41 54 55 52 45 0d 0a 20 20 20 20 20 2a IGNATURE.. *
65d0: 2a 0d 0a 20 20 20 20 20 2a 2a 20 43 68 65 63 6b *.. ** Check
65e0: 20 66 6f 72 20 61 20 76 61 6c 69 64 20 6c 6f 67 for a valid log
65f0: 69 6e 2e 20 20 54 68 69 73 20 68 61 73 20 74 6f in. This has to
6600: 20 68 61 70 70 65 6e 20 62 65 66 6f 72 65 20 61 happen before a
6610: 6e 79 74 68 69 6e 67 20 65 6c 73 65 2e 0d 0a 40 nything else...@
6620: 40 20 2d 39 33 36 2c 31 37 20 2b 39 33 39 2c 31 @ -936,17 +939,1
6630: 37 20 40 40 0d 0a 20 20 20 69 6e 74 20 73 69 7a 7 @@.. int siz
6640: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e;
6650: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 61 20 63 6f /* Size of a co
6660: 6e 66 69 67 20 76 61 6c 75 65 20 2a 2f 0d 0a 20 nfig value */..
6670: 20 20 69 6e 74 20 6e 46 69 6c 65 53 65 6e 64 20 int nFileSend
6680: 3d 20 30 3b 0d 0a 20 20 20 69 6e 74 20 6f 72 69 = 0;.. int ori
6690: 67 43 6f 6e 66 69 67 52 63 76 4d 61 73 6b 3b 20 gConfigRcvMask;
66a0: 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 76 61 6c /* Original val
66b0: 75 65 20 6f 66 20 63 6f 6e 66 69 67 52 63 76 4d ue of configRcvM
66c0: 61 73 6b 20 2a 2f 0d 0a 20 20 20 69 6e 74 20 6e ask */.. int n
66d0: 46 69 6c 65 52 65 63 76 3b 20 20 20 20 20 20 20 FileRecv;
66e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 /* Number of
66f0: 66 69 6c 65 73 20 72 65 63 65 69 76 65 64 20 2a files received *
6700: 2f 0d 0a 20 20 20 69 6e 74 20 6d 78 50 68 61 6e /.. int mxPhan
6710: 74 6f 6d 52 65 71 20 3d 20 32 30 30 3b 20 2f 2a tomReq = 200; /*
6720: 20 4d 61 78 20 6e 75 6d 62 65 72 20 6f 66 20 70 Max number of p
6730: 68 61 6e 74 6f 6d 73 20 74 6f 20 72 65 71 75 65 hantoms to reque
6740: 73 74 20 70 65 72 20 63 6f 6d 6d 20 2a 2f 0d 0a st per comm */..
6750: 2d 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a - const char *z
6760: 43 6f 6f 6b 69 65 3b 20 20 20 20 2f 2a 20 53 65 Cookie; /* Se
6770: 72 76 65 72 20 63 6f 6f 6b 69 65 20 2a 2f 0d 0a rver cookie */..
6780: 2b 20 20 63 68 61 72 20 2a 7a 43 6f 6f 6b 69 65 + char *zCookie
6790: 20 3d 20 30 3b 20 20 20 20 2f 2a 20 53 65 72 76 = 0; /* Serv
67a0: 65 72 20 63 6f 6f 6b 69 65 20 2a 2f 0d 0a 20 20 er cookie */..
67b0: 20 69 6e 74 20 6e 53 65 6e 74 2c 20 6e 52 63 76 int nSent, nRcv
67c0: 64 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 d; /* Byte
67d0: 73 20 73 65 6e 74 20 61 6e 64 20 72 65 63 65 69 s sent and recei
67e0: 76 65 64 20 28 61 66 74 65 72 20 63 6f 6d 70 72 ved (after compr
67f0: 65 73 73 69 6f 6e 29 20 2a 2f 0d 0a 20 20 20 42 ession) */.. B
6800: 6c 6f 62 20 73 65 6e 64 3b 20 20 20 20 20 20 20 lob send;
6810: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 77 /* Text w
6820: 65 20 61 72 65 20 73 65 6e 64 69 6e 67 20 74 6f e are sending to
6830: 20 74 68 65 20 73 65 72 76 65 72 20 2a 2f 0d 0a the server */..
6840: 20 20 20 42 6c 6f 62 20 72 65 63 76 3b 20 20 20 Blob recv;
6850: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 /* Re
6860: 70 6c 79 20 77 65 20 67 6f 74 20 62 61 63 6b 20 ply we got back
6870: 66 72 6f 6d 20 74 68 65 20 73 65 72 76 65 72 20 from the server
6880: 2a 2f 0d 0a 20 20 20 58 66 65 72 20 78 66 65 72 */.. Xfer xfer
6890: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f ; /
68a0: 2a 20 54 72 61 6e 73 66 65 72 20 64 61 74 61 20 * Transfer data
68b0: 2a 2f 0d 0a 2d 20 20 63 6f 6e 73 74 20 63 68 61 */..- const cha
68c0: 72 20 2a 7a 53 43 6f 64 65 20 3d 20 64 62 5f 67 r *zSCode = db_g
68d0: 65 74 28 22 73 65 72 76 65 72 2d 63 6f 64 65 22 et("server-code"
68e0: 2c 20 22 78 22 29 3b 0d 0a 2d 20 20 63 6f 6e 73 , "x");..- cons
68f0: 74 20 63 68 61 72 20 2a 7a 50 43 6f 64 65 20 3d t char *zPCode =
6900: 20 64 62 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 db_get("project
6910: 2d 63 6f 64 65 22 2c 20 30 29 3b 0d 0a 2b 20 20 -code", 0);..+
6920: 63 68 61 72 20 2a 7a 53 43 6f 64 65 20 3d 20 64 char *zSCode = d
6930: 62 5f 67 65 74 28 22 73 65 72 76 65 72 2d 63 6f b_get("server-co
6940: 64 65 22 2c 20 22 78 22 29 3b 0d 0a 2b 20 20 63 de", "x");..+ c
6950: 68 61 72 20 2a 7a 50 43 6f 64 65 20 3d 20 64 62 har *zPCode = db
6960: 5f 67 65 74 28 22 70 72 6f 6a 65 63 74 2d 63 6f _get("project-co
6970: 64 65 22 2c 20 30 29 3b 0d 0a 20 0d 0a 20 20 20 de", 0);.. ..
6980: 69 66 28 20 64 62 5f 67 65 74 5f 62 6f 6f 6c 65 if( db_get_boole
6990: 61 6e 28 22 64 6f 6e 74 2d 70 75 73 68 22 2c 20 an("dont-push",
69a0: 30 29 20 29 20 70 75 73 68 46 6c 61 67 20 3d 20 0) ) pushFlag =
69b0: 30 3b 0d 0a 20 20 20 69 66 28 20 70 75 73 68 46 0;.. if( pushF
69c0: 6c 61 67 20 2b 20 70 75 6c 6c 46 6c 61 67 20 2b lag + pullFlag +
69d0: 20 63 6c 6f 6e 65 46 6c 61 67 20 3d 3d 20 30 0d cloneFlag == 0.
69e0: 0a 20 20 20 20 20 20 26 26 20 63 6f 6e 66 69 67 . && config
69f0: 52 63 76 4d 61 73 6b 3d 3d 30 20 26 26 20 63 6f RcvMask==0 && co
6a00: 6e 66 69 67 53 65 6e 64 4d 61 73 6b 3d 3d 30 20 nfigSendMask==0
6a10: 29 20 72 65 74 75 72 6e 3b 0d 0a 20 0d 0a 40 40 ) return;.. ..@@
6a20: 20 2d 39 39 37 2c 31 31 20 2b 31 30 30 30 2c 31 -997,11 +1000,1
6a30: 33 20 40 40 0d 0a 20 20 20 20 20 2f 2a 20 53 65 3 @@.. /* Se
6a40: 6e 64 20 6d 61 6b 65 20 74 68 65 20 6d 6f 73 74 nd make the most
6a50: 20 72 65 63 65 6e 74 6c 79 20 72 65 63 65 69 76 recently receiv
6a60: 65 64 20 63 6f 6f 6b 69 65 2e 20 20 4c 65 74 20 ed cookie. Let
6a70: 74 68 65 20 73 65 72 76 65 72 0d 0a 20 20 20 20 the server..
6a80: 20 2a 2a 20 66 69 67 75 72 65 20 6f 75 74 20 69 ** figure out i
6a90: 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 6f 6b f this is a cook
6aa0: 69 65 20 74 68 61 74 20 69 74 20 63 61 72 65 73 ie that it cares
6ab0: 20 61 62 6f 75 74 2e 0d 0a 20 20 20 20 20 2a 2f about... */
6ac0: 0d 0a 20 20 20 20 20 7a 43 6f 6f 6b 69 65 20 3d .. zCookie =
6ad0: 20 64 62 5f 67 65 74 28 22 63 6f 6f 6b 69 65 22 db_get("cookie"
6ae0: 2c 20 30 29 3b 0d 0a 20 20 20 20 20 69 66 28 20 , 0);.. if(
6af0: 7a 43 6f 6f 6b 69 65 20 29 7b 0d 0a 2d 20 20 20 zCookie ){..-
6b00: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
6b10: 26 73 65 6e 64 2c 20 22 63 6f 6f 6b 69 65 20 25 &send, "cookie %
6b20: 73 5c 6e 22 2c 20 7a 43 6f 6f 6b 69 65 29 3b 0d s\n", zCookie);.
6b30: 0a 2b 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 .+ blob_app
6b40: 65 6e 64 66 28 26 73 65 6e 64 2c 20 22 63 6f 6f endf(&send, "coo
6b50: 6b 69 65 20 25 7a 5c 6e 22 2c 20 7a 43 6f 6f 6b kie %z\n", zCook
6b60: 69 65 29 3b 0d 0a 2b 0d 0a 2b 20 20 20 20 20 20 ie);..+..+
6b70: 7a 43 6f 6f 6b 69 65 20 3d 20 30 3b 0d 0a 20 20 zCookie = 0;..
6b80: 20 20 20 7d 0d 0a 20 0d 0a 20 20 20 20 20 2f 2a }.. .. /*
6b90: 20 47 65 6e 65 72 61 74 65 20 67 69 6d 6d 65 20 Generate gimme
6ba0: 63 61 72 64 73 20 66 6f 72 20 70 68 61 6e 74 6f cards for phanto
6bb0: 6d 73 20 61 6e 64 20 6c 65 61 66 20 63 61 72 64 ms and leaf card
6bc0: 73 0d 0a 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 s.. ** for a
6bd0: 6c 6c 20 6c 65 61 76 65 73 2e 0d 0a 20 20 20 20 ll leaves...
6be0: 20 2a 2f 0d 0a 40 40 20 2d 31 33 31 37 2c 36 20 */..@@ -1317,6
6bf0: 2b 31 33 32 32 2c 39 20 40 40 0d 0a 20 20 20 74 +1322,9 @@.. t
6c00: 72 61 6e 73 70 6f 72 74 5f 63 6c 6f 73 65 28 29 ransport_close()
6c10: 3b 0d 0a 20 20 20 74 72 61 6e 73 70 6f 72 74 5f ;.. transport_
6c20: 67 6c 6f 62 61 6c 5f 73 68 75 74 64 6f 77 6e 28 global_shutdown(
6c30: 29 3b 0d 0a 20 20 20 64 62 5f 6d 75 6c 74 69 5f );.. db_multi_
6c40: 65 78 65 63 28 22 44 52 4f 50 20 54 41 42 4c 45 exec("DROP TABLE
6c50: 20 6f 6e 72 65 6d 6f 74 65 22 29 3b 0d 0a 20 20 onremote");..
6c60: 20 6d 61 6e 69 66 65 73 74 5f 63 72 6f 73 73 6c manifest_crossl
6c70: 69 6e 6b 5f 65 6e 64 28 29 3b 0d 0a 20 20 20 64 ink_end();.. d
6c80: 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f b_end_transactio
6c90: 6e 28 30 29 3b 0d 0a 2b 0d 0a 2b 20 20 66 72 65 n(0);..+..+ fre
6ca0: 65 28 7a 53 43 6f 64 65 29 3b 20 7a 53 43 6f 64 e(zSCode); zSCod
6cb0: 65 20 3d 20 30 3b 0d 0a 2b 20 20 66 72 65 65 28 e = 0;..+ free(
6cc0: 7a 50 43 6f 64 65 29 3b 20 7a 50 43 6f 64 65 20 zPCode); zPCode
6cd0: 3d 20 30 3b 0d 0a 20 7d 0d 0a 0d 0a = 0;.. }....