Hex Artifact Content
Not logged in

Artifact 2ea5319196adffe9fa548169098571a3cecfa1eb:

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;.. }....