Hex Artifact Content
Not logged in

Artifact 5bcc525b3be30f1929fffc61dbfaa05b69f667eb:

File src/setup.c part of check-in [07eaead5dc] - Added RSS feed. You can set the RSS title, description in Setup. Added header to style to include title and pointer to the new RSS feed. The new RSS feed is BaseURL/timeline.rss by jnc on 2007-09-23 18:24:21. Also file src/setup.c part of check-in [dad40ffac0] - Merge the RSS changes. by drh on 2007-09-23 20:18:58.

0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 32 30 30 37 20 44 2e 20 52 69 63 68  (c) 2007 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54  ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66  his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75  u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20  te it and/or.** 
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20  modify it under 
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  the terms of the
0090: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62   GNU General Pub
00a0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61  lic.** License a
00b0: 73 20 70 75 62 6c 69 73 68 65 64 20 62 79 20 74  s published by t
00c0: 68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65  he Free Software
00d0: 20 46 6f 75 6e 64 61 74 69 6f 6e 3b 20 65 69 74   Foundation; eit
00e0: 68 65 72 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 32  her.** version 2
00f0: 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c   of the License,
0100: 20 6f 72 20 28 61 74 20 79 6f 75 72 20 6f 70 74   or (at your opt
0110: 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76  ion) any later v
0120: 65 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ersion..**.** Th
0130: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69  is program is di
0140: 73 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65  stributed in the
0150: 20 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69   hope that it wi
0160: 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a  ll be useful,.**
0170: 20 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59   but WITHOUT ANY
0180: 20 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f   WARRANTY; witho
0190: 75 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c  ut even the impl
01a0: 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a  ied warranty of.
01b0: 2a 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49  ** MERCHANTABILI
01c0: 54 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f  TY or FITNESS FO
01d0: 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50  R A PARTICULAR P
01e0: 55 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65  URPOSE.  See the
01f0: 20 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20   GNU.** General 
0200: 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66  Public License f
0210: 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e  or more details.
0220: 0a 2a 2a 20 0a 2a 2a 20 59 6f 75 20 73 68 6f 75  .** .** You shou
0230: 6c 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64  ld have received
0240: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47   a copy of the G
0250: 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69  NU General Publi
0260: 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f  c.** License alo
0270: 6e 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62  ng with this lib
0280: 72 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72  rary; if not, wr
0290: 69 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72  ite to the.** Fr
02a0: 65 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e  ee Software Foun
02b0: 64 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39  dation, Inc., 59
02c0: 20 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20   Temple Place - 
02d0: 53 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f  Suite 330,.** Bo
02e0: 73 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d  ston, MA  02111-
02f0: 31 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a  1307, USA..**.**
0300: 20 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20   Author contact 
0310: 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20  information:.** 
0320: 20 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a    drh@hwaci.com.
0330: 2a 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e  **   http://www.
0340: 68 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a  hwaci.com/drh/.*
0350: 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  *.**************
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
03a0: 2a 0a 2a 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e  *.**.** Implemen
03b0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 65  tation of the Se
03c0: 74 75 70 20 70 61 67 65 0a 2a 2f 0a 23 69 6e 63  tup page.*/.#inc
03d0: 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a  lude <assert.h>.
03e0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
03f0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 73 65  .h".#include "se
0400: 74 75 70 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 4f  tup.h".../*.** O
0410: 75 74 70 75 74 20 61 20 73 69 6e 67 6c 65 20 65  utput a single e
0420: 6e 74 72 79 20 66 6f 72 20 61 20 6d 65 6e 75 20  ntry for a menu 
0430: 67 65 6e 65 72 61 74 65 64 20 75 73 69 6e 67 20  generated using 
0440: 61 6e 20 48 54 4d 4c 20 74 61 62 6c 65 2e 0a 2a  an HTML table..*
0450: 2a 20 49 66 20 7a 4c 69 6e 6b 20 69 73 20 6e 6f  * If zLink is no
0460: 74 20 4e 55 4c 4c 20 6f 72 20 61 6e 20 65 6d 70  t NULL or an emp
0470: 74 79 20 73 74 72 69 6e 67 2c 20 74 68 65 6e 20  ty string, then 
0480: 69 74 20 69 73 20 74 68 65 20 70 61 67 65 20 74  it is the page t
0490: 68 61 74 0a 2a 2a 20 74 68 65 20 6d 65 6e 75 20  hat.** the menu 
04a0: 65 6e 74 72 79 20 77 69 6c 6c 20 68 79 70 65 72  entry will hyper
04b0: 6c 69 6e 6b 20 74 6f 2e 20 20 49 66 20 7a 4c 69  link to.  If zLi
04c0: 6e 6b 20 69 73 20 4e 55 4c 4c 20 6f 72 20 22 22  nk is NULL or ""
04d0: 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6d 65  , then.** the me
04e0: 6e 75 20 65 6e 74 72 79 20 68 61 73 20 6e 6f 20  nu entry has no 
04f0: 68 79 70 65 72 6c 69 6e 6b 20 2d 20 69 74 20 69  hyperlink - it i
0500: 73 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 73  s disabled..*/.s
0510: 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6e 75 5f  tatic void menu_
0520: 65 6e 74 72 79 28 0a 20 20 63 6f 6e 73 74 20 63  entry(.  const c
0530: 68 61 72 20 2a 7a 54 69 74 6c 65 2c 0a 20 20 63  har *zTitle,.  c
0540: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69 6e 6b  onst char *zLink
0550: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
0560: 7a 44 65 73 63 0a 29 7b 0a 20 20 40 20 3c 64 74  zDesc.){.  @ <dt
0570: 3e 0a 20 20 69 66 28 20 7a 4c 69 6e 6b 20 26 26  >.  if( zLink &&
0580: 20 7a 4c 69 6e 6b 5b 30 5d 20 29 7b 0a 20 20 20   zLink[0] ){.   
0590: 20 40 20 3c 61 20 68 72 65 66 3d 22 25 73 28 7a   @ <a href="%s(z
05a0: 4c 69 6e 6b 29 22 3e 25 68 28 7a 54 69 74 6c 65  Link)">%h(zTitle
05b0: 29 3c 2f 61 3e 0a 20 20 7d 65 6c 73 65 7b 0a 20  )</a>.  }else{. 
05c0: 20 20 20 40 20 25 68 28 7a 54 69 74 6c 65 29 0a     @ %h(zTitle).
05d0: 20 20 7d 0a 20 20 40 20 3c 2f 64 74 3e 0a 20 20    }.  @ </dt>.  
05e0: 40 20 3c 64 64 3e 25 68 28 7a 44 65 73 63 29 3c  @ <dd>%h(zDesc)<
05f0: 2f 64 64 3e 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45  /dd>.}../*.** WE
0600: 42 50 41 47 45 3a 20 2f 73 65 74 75 70 0a 2a 2f  BPAGE: /setup.*/
0610: 0a 76 6f 69 64 20 73 65 74 75 70 5f 70 61 67 65  .void setup_page
0620: 28 76 6f 69 64 29 7b 0a 20 20 6c 6f 67 69 6e 5f  (void){.  login_
0630: 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c  check_credential
0640: 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b  s();.  if( !g.ok
0650: 53 65 74 75 70 20 29 7b 0a 20 20 20 20 6c 6f 67  Setup ){.    log
0660: 69 6e 5f 6e 65 65 64 65 64 28 29 3b 0a 20 20 7d  in_needed();.  }
0670: 0a 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72  ..  style_header
0680: 28 22 53 65 74 75 70 22 29 3b 0a 20 20 40 20 3c  ("Setup");.  @ <
0690: 64 6c 20 69 64 3d 22 73 65 74 75 70 22 3e 0a 20  dl id="setup">. 
06a0: 20 6d 65 6e 75 5f 65 6e 74 72 79 28 22 55 73 65   menu_entry("Use
06b0: 72 73 22 2c 20 22 73 65 74 75 70 5f 75 6c 69 73  rs", "setup_ulis
06c0: 74 22 2c 0a 20 20 20 20 22 47 72 61 6e 74 20 70  t",.    "Grant p
06d0: 72 69 76 69 6c 65 67 65 73 20 74 6f 20 69 6e 64  rivileges to ind
06e0: 69 76 69 64 75 61 6c 20 75 73 65 72 73 2e 22 29  ividual users.")
06f0: 3b 0a 20 20 6d 65 6e 75 5f 65 6e 74 72 79 28 22  ;.  menu_entry("
0700: 41 63 63 65 73 73 22 2c 20 22 73 65 74 75 70 5f  Access", "setup_
0710: 61 63 63 65 73 73 22 2c 0a 20 20 20 20 22 43 6f  access",.    "Co
0720: 6e 74 72 6f 6c 20 61 63 63 65 73 73 20 73 65 74  ntrol access set
0730: 74 69 6e 67 73 2e 22 29 3b 0a 20 20 6d 65 6e 75  tings.");.  menu
0740: 5f 65 6e 74 72 79 28 22 43 6f 6e 66 69 67 75 72  _entry("Configur
0750: 61 74 69 6f 6e 22 2c 20 22 73 65 74 75 70 5f 63  ation", "setup_c
0760: 6f 6e 66 69 67 22 2c 0a 20 20 20 20 22 43 6f 6e  onfig",.    "Con
0770: 66 69 67 75 72 65 20 74 68 65 20 57 57 57 20 63  figure the WWW c
0780: 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 74 68 65  omponents of the
0790: 20 72 65 70 6f 73 69 74 6f 72 79 22 29 3b 0a 20   repository");. 
07a0: 20 40 20 3c 2f 64 6c 3e 0a 0a 20 20 73 74 79 6c   @ </dl>..  styl
07b0: 65 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 2f  e_footer();.}../
07c0: 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 73 65  *.** WEBPAGE: se
07d0: 74 75 70 5f 75 6c 69 73 74 0a 2a 2a 0a 2a 2a 20  tup_ulist.**.** 
07e0: 53 68 6f 77 20 61 20 6c 69 73 74 20 6f 66 20 75  Show a list of u
07f0: 73 65 72 73 2e 20 20 43 6c 69 63 6b 69 6e 67 20  sers.  Clicking 
0800: 6f 6e 20 61 6e 79 20 75 73 65 72 20 6a 75 6d 70  on any user jump
0810: 73 20 74 6f 20 74 68 65 20 65 64 69 74 0a 2a 2a  s to the edit.**
0820: 20 73 63 72 65 65 6e 20 66 6f 72 20 74 68 61 74   screen for that
0830: 20 75 73 65 72 2e 0a 2a 2f 0a 76 6f 69 64 20 73   user..*/.void s
0840: 65 74 75 70 5f 75 6c 69 73 74 28 76 6f 69 64 29  etup_ulist(void)
0850: 7b 0a 20 20 53 74 6d 74 20 73 3b 0a 20 20 0a 20  {.  Stmt s;.  . 
0860: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b   style_footer();
0870: 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f 63  .  login_check_c
0880: 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20 20  redentials();.  
0890: 69 66 28 20 21 67 2e 6f 6b 53 65 74 75 70 20 29  if( !g.okSetup )
08a0: 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 65 64  {.    login_need
08b0: 65 64 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  ed();.    return
08c0: 3b 0a 20 20 7d 0a 0a 20 20 73 74 79 6c 65 5f 73  ;.  }..  style_s
08d0: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22  ubmenu_element("
08e0: 41 64 64 22 2c 20 22 41 64 64 20 55 73 65 72 22  Add", "Add User"
08f0: 2c 20 22 73 65 74 75 70 5f 75 65 64 69 74 22 29  , "setup_uedit")
0900: 3b 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72  ;.  style_header
0910: 28 22 55 73 65 72 20 4c 69 73 74 22 29 3b 0a 20  ("User List");. 
0920: 20 40 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 72   @ <table border
0930: 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67  ="0" cellpadding
0940: 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67  ="0" cellspacing
0950: 3d 22 32 35 22 3e 0a 20 20 40 20 3c 74 72 3e 3c  ="25">.  @ <tr><
0960: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
0970: 0a 20 20 40 20 3c 62 3e 55 73 65 72 73 3a 3c 2f  .  @ <b>Users:</
0980: 62 3e 0a 20 20 40 20 3c 74 61 62 6c 65 20 62 6f  b>.  @ <table bo
0990: 72 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64  rder="1" cellpad
09a0: 64 69 6e 67 3d 22 31 30 22 3e 3c 74 72 3e 3c 74  ding="10"><tr><t
09b0: 64 3e 0a 20 20 40 20 3c 74 61 62 6c 65 20 63 65  d>.  @ <table ce
09c0: 6c 6c 73 70 61 63 69 6e 67 3d 30 20 63 65 6c 6c  llspacing=0 cell
09d0: 70 61 64 64 69 6e 67 3d 30 20 62 6f 72 64 65 72  padding=0 border
09e0: 3d 30 3e 0a 20 20 40 20 3c 74 72 3e 0a 20 20 40  =0>.  @ <tr>.  @
09f0: 20 20 20 3c 74 68 20 61 6c 69 67 6e 3d 22 72 69     <th align="ri
0a00: 67 68 74 22 3e 55 73 65 72 26 6e 62 73 70 3b 49  ght">User&nbsp;I
0a10: 44 3c 2f 74 68 3e 3c 74 68 20 77 69 64 74 68 3d  D</th><th width=
0a20: 22 31 35 22 3e 3c 2f 74 64 3e 0a 20 20 40 20 20  "15"></td>.  @  
0a30: 20 3c 74 68 3e 43 61 70 61 62 69 6c 69 74 69 65   <th>Capabilitie
0a40: 73 3c 2f 74 68 3e 3c 74 68 20 77 69 64 74 68 3d  s</th><th width=
0a50: 22 31 35 22 3e 3c 2f 74 64 3e 0a 20 20 40 20 20  "15"></td>.  @  
0a60: 20 3c 74 68 3e 43 6f 6e 74 61 63 74 26 6e 62 73   <th>Contact&nbs
0a70: 70 3b 49 6e 66 6f 3c 2f 74 68 3e 0a 20 20 40 20  p;Info</th>.  @ 
0a80: 3c 2f 74 72 3e 0a 20 20 64 62 5f 70 72 65 70 61  </tr>.  db_prepa
0a90: 72 65 28 26 73 2c 20 22 53 45 4c 45 43 54 20 75  re(&s, "SELECT u
0aa0: 69 64 2c 20 6c 6f 67 69 6e 2c 20 63 61 70 2c 20  id, login, cap, 
0ab0: 69 6e 66 6f 20 46 52 4f 4d 20 75 73 65 72 20 4f  info FROM user O
0ac0: 52 44 45 52 20 42 59 20 6c 6f 67 69 6e 22 29 3b  RDER BY login");
0ad0: 0a 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65  .  while( db_ste
0ae0: 70 28 26 73 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  p(&s)==SQLITE_RO
0af0: 57 20 29 7b 0a 20 20 20 20 40 20 3c 74 72 3e 0a  W ){.    @ <tr>.
0b00: 20 20 20 20 40 20 3c 74 64 20 61 6c 69 67 6e 3d      @ <td align=
0b10: 22 72 69 67 68 74 22 3e 0a 20 20 20 20 69 66 28  "right">.    if(
0b20: 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20 20   g.okAdmin ){.  
0b30: 20 20 20 20 40 20 3c 61 20 68 72 65 66 3d 22 73      @ <a href="s
0b40: 65 74 75 70 5f 75 65 64 69 74 3f 69 64 3d 25 64  etup_uedit?id=%d
0b50: 28 64 62 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 26  (db_column_int(&
0b60: 73 2c 30 29 29 22 3e 0a 20 20 20 20 7d 0a 20 20  s,0))">.    }.  
0b70: 20 20 40 20 3c 6e 6f 62 72 3e 25 68 28 64 62 5f    @ <nobr>%h(db_
0b80: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 73 2c 31  column_text(&s,1
0b90: 29 29 3c 2f 6e 6f 62 72 3e 0a 20 20 20 20 69 66  ))</nobr>.    if
0ba0: 28 20 67 2e 6f 6b 41 64 6d 69 6e 20 29 7b 0a 20  ( g.okAdmin ){. 
0bb0: 20 20 20 20 20 40 20 3c 2f 61 3e 0a 20 20 20 20       @ </a>.    
0bc0: 7d 0a 20 20 20 20 40 20 3c 2f 74 64 3e 3c 74 64  }.    @ </td><td
0bd0: 3e 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64  ></td>.    @ <td
0be0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
0bf0: 25 73 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78  %s(db_column_tex
0c00: 74 28 26 73 2c 32 29 29 3c 2f 74 64 3e 3c 74 64  t(&s,2))</td><td
0c10: 3e 3c 2f 74 64 3e 0a 20 20 20 20 40 20 3c 74 64  ></td>.    @ <td
0c20: 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22 3e 25 73   align="left">%s
0c30: 28 64 62 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  (db_column_text(
0c40: 26 73 2c 33 29 29 3c 2f 74 64 3e 0a 20 20 20 20  &s,3))</td>.    
0c50: 40 20 3c 2f 74 72 3e 0a 20 20 7d 0a 20 20 40 20  @ </tr>.  }.  @ 
0c60: 3c 2f 74 61 62 6c 65 3e 3c 2f 74 64 3e 3c 2f 74  </table></td></t
0c70: 72 3e 3c 2f 74 61 62 6c 65 3e 0a 20 20 40 20 3c  r></table>.  @ <
0c80: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
0c90: 0a 20 20 40 20 3c 62 3e 4e 6f 74 65 73 3a 3c 2f  .  @ <b>Notes:</
0ca0: 62 3e 0a 20 20 40 20 3c 6f 6c 3e 0a 20 20 40 20  b>.  @ <ol>.  @ 
0cb0: 3c 6c 69 3e 3c 70 3e 54 68 65 20 70 65 72 6d 69  <li><p>The permi
0cc0: 73 73 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 20  ssion flags are 
0cd0: 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
0ce0: 20 20 40 20 3c 6f 6c 20 74 79 70 65 3d 22 61 22    @ <ol type="a"
0cf0: 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 65 3d  >.  @ <li value=
0d00: 22 31 22 3e 3c 62 3e 41 64 6d 69 6e 3c 2f 62 3e  "1"><b>Admin</b>
0d10: 3a 20 43 72 65 61 74 65 20 61 6e 64 20 64 65 6c  : Create and del
0d20: 65 74 65 20 75 73 65 72 73 3c 2f 6c 69 3e 0a 20  ete users</li>. 
0d30: 20 40 20 3c 6c 69 20 76 61 6c 75 65 3d 22 33 22   @ <li value="3"
0d40: 3e 3c 62 3e 41 70 70 65 6e 64 2d 54 6b 74 3c 2f  ><b>Append-Tkt</
0d50: 62 3e 3a 20 41 70 70 65 6e 64 20 74 6f 20 74 69  b>: Append to ti
0d60: 63 6b 65 74 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c  ckets</li>.  @ <
0d70: 6c 69 20 76 61 6c 75 65 3d 22 34 22 3e 3c 62 3e  li value="4"><b>
0d80: 44 65 6c 65 74 65 3c 2f 62 3e 3a 20 44 65 6c 65  Delete</b>: Dele
0d90: 74 65 20 77 69 6b 69 20 61 6e 64 20 74 69 63 6b  te wiki and tick
0da0: 65 74 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69  ets</li>.  @ <li
0db0: 20 76 61 6c 75 65 3d 22 36 22 3e 3c 62 3e 4e 65   value="6"><b>Ne
0dc0: 77 2d 57 69 6b 69 3c 2f 62 3e 3a 20 43 72 65 61  w-Wiki</b>: Crea
0dd0: 74 65 20 6e 65 77 20 77 69 6b 69 20 70 61 67 65  te new wiki page
0de0: 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76  s</li>.  @ <li v
0df0: 61 6c 75 65 3d 22 37 22 3e 3c 62 3e 43 6c 6f 6e  alue="7"><b>Clon
0e00: 65 3c 2f 62 3e 3a 20 43 6c 6f 6e 65 20 74 68 65  e</b>: Clone the
0e10: 20 72 65 70 6f 73 69 74 6f 72 79 3c 2f 6c 69 3e   repository</li>
0e20: 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 65 3d 22  .  @ <li value="
0e30: 38 22 3e 3c 62 3e 48 69 73 74 6f 72 79 3c 2f 62  8"><b>History</b
0e40: 3e 3a 20 56 69 65 77 20 64 65 74 61 69 6c 20 72  >: View detail r
0e50: 65 70 6f 73 69 74 6f 72 79 20 68 69 73 74 6f 72  epository histor
0e60: 79 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76  y</li>.  @ <li v
0e70: 61 6c 75 65 3d 22 39 22 3e 3c 62 3e 43 68 65 63  alue="9"><b>Chec
0e80: 6b 2d 49 6e 3c 2f 62 3e 3a 20 43 6f 6d 6d 69 74  k-In</b>: Commit
0e90: 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 69 6e   new versions in
0ea0: 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 3c   the repository<
0eb0: 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c  /li>.  @ <li val
0ec0: 75 65 3d 22 31 30 22 3e 3c 62 3e 52 65 61 64 2d  ue="10"><b>Read-
0ed0: 57 69 6b 69 3c 2f 62 3e 3a 20 56 69 65 77 20 77  Wiki</b>: View w
0ee0: 69 6b 69 20 70 61 67 65 73 3c 2f 6c 69 3e 0a 20  iki pages</li>. 
0ef0: 20 40 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 31   @ <li value="11
0f00: 22 3e 3c 62 3e 57 72 69 74 65 2d 57 69 6b 69 3c  "><b>Write-Wiki<
0f10: 2f 62 3e 3a 20 45 64 69 74 20 77 69 6b 69 20 70  /b>: Edit wiki p
0f20: 61 67 65 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c  ages</li>.  @ <l
0f30: 69 20 76 61 6c 75 65 3d 22 31 33 22 3e 3c 62 3e  i value="13"><b>
0f40: 41 70 70 65 6e 64 2d 57 69 6b 69 3c 2f 62 3e 3a  Append-Wiki</b>:
0f50: 20 41 70 70 65 6e 64 20 74 6f 20 77 69 6b 69 20   Append to wiki 
0f60: 70 61 67 65 73 3c 2f 6c 69 3e 0a 20 20 40 20 3c  pages</li>.  @ <
0f70: 6c 69 20 76 61 6c 75 65 3d 22 31 34 22 3e 3c 62  li value="14"><b
0f80: 3e 4e 65 77 2d 54 6b 74 3c 2f 62 3e 3a 20 43 72  >New-Tkt</b>: Cr
0f90: 65 61 74 65 20 6e 65 77 20 74 69 63 6b 65 74 73  eate new tickets
0fa0: 3c 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61  </li>.  @ <li va
0fb0: 6c 75 65 3d 22 31 35 22 3e 3c 62 3e 43 68 65 63  lue="15"><b>Chec
0fc0: 6b 2d 4f 75 74 3c 2f 62 3e 3a 20 43 68 65 63 6b  k-Out</b>: Check
0fd0: 20 6f 75 74 20 76 65 72 73 69 6f 6e 73 3c 2f 6c   out versions</l
0fe0: 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75 65  i>.  @ <li value
0ff0: 3d 22 31 36 22 3e 3c 62 3e 50 61 73 73 77 6f 72  ="16"><b>Passwor
1000: 64 3c 2f 62 3e 3a 20 43 68 61 6e 67 65 20 79 6f  d</b>: Change yo
1010: 75 72 20 6f 77 6e 20 70 61 73 73 77 6f 72 64 3c  ur own password<
1020: 2f 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c  /li>.  @ <li val
1030: 75 65 3d 22 31 37 22 3e 3c 62 3e 51 75 65 72 79  ue="17"><b>Query
1040: 3c 2f 62 3e 3a 20 43 72 65 61 74 65 20 6e 65 77  </b>: Create new
1050: 20 71 75 65 72 69 65 73 20 61 67 61 69 6e 73 74   queries against
1060: 20 74 69 63 6b 65 74 73 3c 2f 6c 69 3e 0a 20 20   tickets</li>.  
1070: 40 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 38 22  @ <li value="18"
1080: 3e 3c 62 3e 52 65 61 64 2d 54 6b 74 3c 2f 62 3e  ><b>Read-Tkt</b>
1090: 3a 20 56 69 65 77 20 74 69 63 6b 65 74 73 3c 2f  : View tickets</
10a0: 6c 69 3e 0a 20 20 40 20 3c 6c 69 20 76 61 6c 75  li>.  @ <li valu
10b0: 65 3d 22 31 39 22 3e 3c 62 3e 53 65 74 75 70 3a  e="19"><b>Setup:
10c0: 3c 2f 62 3e 20 53 65 74 75 70 20 61 6e 64 20 63  </b> Setup and c
10d0: 6f 6e 66 69 67 75 72 65 20 74 68 69 73 20 77 65  onfigure this we
10e0: 62 73 69 74 65 3c 2f 6c 69 3e 0a 20 20 40 20 3c  bsite</li>.  @ <
10f0: 6c 69 20 76 61 6c 75 65 3d 22 32 33 22 3e 3c 62  li value="23"><b
1100: 3e 57 72 69 74 65 2d 54 6b 74 3c 2f 62 3e 3a 20  >Write-Tkt</b>: 
1110: 45 64 69 74 20 74 69 63 6b 65 74 73 3c 2f 6c 69  Edit tickets</li
1120: 3e 0a 20 20 40 20 3c 2f 6f 6c 3e 0a 20 20 40 20  >.  @ </ol>.  @ 
1130: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20  </p></li>.  @.  
1140: 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40 20 45 76  @ <li><p>.  @ Ev
1150: 65 72 79 20 75 73 65 72 2c 20 6c 6f 67 67 65 64  ery user, logged
1160: 20 69 6e 20 6f 72 20 6e 6f 74 2c 20 68 61 73 20   in or not, has 
1170: 74 68 65 20 70 72 69 76 69 6c 65 67 65 73 20 6f  the privileges o
1180: 66 20 3c 62 3e 6e 6f 62 6f 64 79 3c 2f 62 3e 2e  f <b>nobody</b>.
1190: 0a 20 20 40 20 41 6e 79 20 68 75 6d 61 6e 20 63  .  @ Any human c
11a0: 61 6e 20 6c 6f 67 69 6e 20 61 73 20 3c 62 3e 61  an login as <b>a
11b0: 6e 6f 6e 79 6d 6f 75 73 3c 2f 62 3e 20 73 69 6e  nonymous</b> sin
11c0: 63 65 20 74 68 65 20 70 61 73 73 77 6f 72 64 20  ce the password 
11d0: 69 73 0a 20 20 40 20 63 6c 65 61 72 6c 79 20 64  is.  @ clearly d
11e0: 69 73 70 6c 61 79 65 64 20 6f 6e 20 74 68 65 20  isplayed on the 
11f0: 6c 6f 67 69 6e 20 70 61 67 65 20 66 6f 72 20 74  login page for t
1200: 68 65 6d 20 74 6f 20 74 79 70 65 2e 20 20 54 68  hem to type.  Th
1210: 65 20 70 75 72 70 6f 73 65 0a 20 20 40 20 6f 66  e purpose.  @ of
1220: 20 72 65 71 75 69 72 69 6e 67 20 61 6e 6f 6e 79   requiring anony
1230: 6d 6f 75 73 20 74 6f 20 6c 6f 67 20 69 6e 20 69  mous to log in i
1240: 73 20 74 6f 20 70 72 65 76 65 6e 74 20 61 63 63  s to prevent acc
1250: 65 73 73 20 62 79 20 73 70 69 64 65 72 73 2e 0a  ess by spiders..
1260: 20 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20    @ </p></li>.  
1270: 40 0a 20 20 40 20 3c 2f 6f 6c 3e 0a 20 20 40 20  @.  @ </ol>.  @ 
1280: 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c  </td></tr></tabl
1290: 65 3e 0a 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65  e>.  style_foote
12a0: 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45  r();.}../*.** WE
12b0: 42 50 41 47 45 3a 20 2f 73 65 74 75 70 5f 75 65  BPAGE: /setup_ue
12c0: 64 69 74 0a 2a 2f 0a 76 6f 69 64 20 75 73 65 72  dit.*/.void user
12d0: 5f 65 64 69 74 28 76 6f 69 64 29 7b 0a 20 20 63  _edit(void){.  c
12e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 64 2c 20  onst char *zId, 
12f0: 2a 7a 4c 6f 67 69 6e 2c 20 2a 7a 49 6e 66 6f 2c  *zLogin, *zInfo,
1300: 20 2a 7a 43 61 70 3b 0a 20 20 63 68 61 72 20 2a   *zCap;.  char *
1310: 6f 61 61 2c 20 2a 6f 61 73 2c 20 2a 6f 61 72 2c  oaa, *oas, *oar,
1320: 20 2a 6f 61 77 2c 20 2a 6f 61 6e 2c 20 2a 6f 61   *oaw, *oan, *oa
1330: 69 2c 20 2a 6f 61 6a 2c 20 2a 6f 61 6f 2c 20 2a  i, *oaj, *oao, *
1340: 6f 61 70 20 3b 0a 20 20 63 68 61 72 20 2a 6f 61  oap ;.  char *oa
1350: 6b 2c 20 2a 6f 61 64 2c 20 2a 6f 61 71 2c 20 2a  k, *oad, *oaq, *
1360: 6f 61 63 2c 20 2a 6f 61 66 2c 20 2a 6f 61 6d 2c  oac, *oaf, *oam,
1370: 20 2a 6f 61 68 2c 20 2a 6f 61 67 3b 0a 20 20 69   *oah, *oag;.  i
1380: 6e 74 20 64 6f 57 72 69 74 65 3b 0a 20 20 69 6e  nt doWrite;.  in
1390: 74 20 75 69 64 3b 0a 20 20 69 6e 74 20 68 69 67  t uid;.  int hig
13a0: 68 65 72 55 73 65 72 20 3d 20 30 3b 20 20 2f 2a  herUser = 0;  /*
13b0: 20 54 72 75 65 20 69 66 20 75 73 65 72 20 62 65   True if user be
13c0: 69 6e 67 20 65 64 69 74 65 64 20 69 73 20 53 45  ing edited is SE
13d0: 54 55 50 20 61 6e 64 20 74 68 65 20 2a 2f 0a 20  TUP and the */. 
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f0: 20 20 20 20 20 20 2f 2a 20 75 73 65 72 20 64 6f        /* user do
1400: 69 6e 67 20 74 68 65 20 65 64 69 74 69 6e 67 20  ing the editing 
1410: 69 73 20 41 44 4d 49 4e 2e 20 20 44 69 73 61 6c  is ADMIN.  Disal
1420: 6c 6f 77 20 65 64 69 74 69 6e 67 20 2a 2f 0a 0a  low editing */..
1430: 20 20 2f 2a 20 4d 75 73 74 20 68 61 76 65 20 41    /* Must have A
1440: 44 4d 49 4e 20 70 72 69 76 6c 65 67 65 73 20 74  DMIN privleges t
1450: 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 70 61  o access this pa
1460: 67 65 0a 20 20 2a 2f 0a 20 20 6c 6f 67 69 6e 5f  ge.  */.  login_
1470: 63 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c  check_credential
1480: 73 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b  s();.  if( !g.ok
1490: 41 64 6d 69 6e 20 29 7b 20 6c 6f 67 69 6e 5f 6e  Admin ){ login_n
14a0: 65 65 64 65 64 28 29 3b 20 72 65 74 75 72 6e 3b  eeded(); return;
14b0: 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63 6b 20 74   }..  /* Check t
14c0: 6f 20 73 65 65 20 69 66 20 61 6e 20 41 44 4d 49  o see if an ADMI
14d0: 4e 20 75 73 65 72 20 69 73 20 74 72 79 69 6e 67  N user is trying
14e0: 20 74 6f 20 65 64 69 74 20 61 20 53 45 54 55 50   to edit a SETUP
14f0: 20 61 63 63 6f 75 6e 74 2e 0a 20 20 2a 2a 20 44   account..  ** D
1500: 6f 6e 27 74 20 61 6c 6c 6f 77 20 74 68 61 74 2e  on't allow that.
1510: 0a 20 20 2a 2f 0a 20 20 7a 49 64 20 3d 20 50 44  .  */.  zId = PD
1520: 28 22 69 64 22 2c 20 22 30 22 29 3b 0a 20 20 75  ("id", "0");.  u
1530: 69 64 20 3d 20 61 74 6f 69 28 7a 49 64 29 3b 0a  id = atoi(zId);.
1540: 20 20 69 66 28 20 7a 49 64 20 26 26 20 21 67 2e    if( zId && !g.
1550: 6f 6b 53 65 74 75 70 20 26 26 20 75 69 64 3e 30  okSetup && uid>0
1560: 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4f   ){.    char *zO
1570: 6c 64 43 61 70 73 3b 0a 20 20 20 20 7a 4f 6c 64  ldCaps;.    zOld
1580: 43 61 70 73 20 3d 20 64 62 5f 74 65 78 74 28 30  Caps = db_text(0
1590: 2c 20 22 53 45 4c 45 43 54 20 63 61 70 73 20 46  , "SELECT caps F
15a0: 52 4f 4d 20 75 73 65 72 20 57 48 45 52 45 20 75  ROM user WHERE u
15b0: 69 64 3d 25 64 22 2c 75 69 64 29 3b 0a 20 20 20  id=%d",uid);.   
15c0: 20 68 69 67 68 65 72 55 73 65 72 20 3d 20 7a 4f   higherUser = zO
15d0: 6c 64 43 61 70 73 20 26 26 20 73 74 72 63 68 72  ldCaps && strchr
15e0: 28 7a 4f 6c 64 43 61 70 73 2c 27 73 27 29 3b 0a  (zOldCaps,'s');.
15f0: 20 20 7d 0a 0a 20 20 69 66 28 20 50 28 22 63 61    }..  if( P("ca
1600: 6e 22 29 20 29 7b 0a 20 20 20 20 63 67 69 5f 72  n") ){.    cgi_r
1610: 65 64 69 72 65 63 74 28 22 73 65 74 75 70 5f 75  edirect("setup_u
1620: 6c 69 73 74 22 29 3b 0a 20 20 20 20 72 65 74 75  list");.    retu
1630: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  rn;.  }..  /* If
1640: 20 77 65 20 68 61 76 65 20 61 6c 6c 20 74 68 65   we have all the
1650: 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f 72   necessary infor
1660: 6d 61 74 69 6f 6e 2c 20 77 72 69 74 65 20 74 68  mation, write th
1670: 65 20 6e 65 77 20 6f 72 0a 20 20 2a 2a 20 6d 6f  e new or.  ** mo
1680: 64 69 66 69 65 64 20 75 73 65 72 20 72 65 63 6f  dified user reco
1690: 72 64 2e 20 20 41 66 74 65 72 20 77 72 69 74 69  rd.  After writi
16a0: 6e 67 20 74 68 65 20 75 73 65 72 20 72 65 63 6f  ng the user reco
16b0: 72 64 2c 20 72 65 64 69 72 65 63 74 0a 20 20 2a  rd, redirect.  *
16c0: 2a 20 74 6f 20 74 68 65 20 70 61 67 65 20 74 68  * to the page th
16d0: 61 74 20 64 69 73 70 6c 61 79 73 20 61 20 6c 69  at displays a li
16e0: 73 74 20 6f 66 20 75 73 65 72 73 2e 0a 20 20 2a  st of users..  *
16f0: 2f 0a 20 20 64 6f 57 72 69 74 65 20 3d 20 63 67  /.  doWrite = cg
1700: 69 5f 61 6c 6c 28 22 6c 6f 67 69 6e 22 2c 22 69  i_all("login","i
1710: 6e 66 6f 22 2c 22 70 77 22 29 20 26 26 20 21 68  nfo","pw") && !h
1720: 69 67 68 65 72 55 73 65 72 3b 0a 20 20 69 66 28  igherUser;.  if(
1730: 20 64 6f 57 72 69 74 65 20 29 7b 0a 20 20 20 20   doWrite ){.    
1740: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 77 3b  const char *zPw;
1750: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1760: 2a 7a 4c 6f 67 69 6e 3b 0a 20 20 20 20 63 68 61  *zLogin;.    cha
1770: 72 20 7a 43 61 70 5b 33 30 5d 3b 0a 20 20 20 20  r zCap[30];.    
1780: 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 69  int i = 0;.    i
1790: 6e 74 20 61 61 20 3d 20 50 28 22 61 61 22 29 21  nt aa = P("aa")!
17a0: 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 64 20 3d  =0;.    int ad =
17b0: 20 50 28 22 61 64 22 29 21 3d 30 3b 0a 20 20 20   P("ad")!=0;.   
17c0: 20 69 6e 74 20 61 69 20 3d 20 50 28 22 61 69 22   int ai = P("ai"
17d0: 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 6a  )!=0;.    int aj
17e0: 20 3d 20 50 28 22 61 6a 22 29 21 3d 30 3b 0a 20   = P("aj")!=0;. 
17f0: 20 20 20 69 6e 74 20 61 6b 20 3d 20 50 28 22 61     int ak = P("a
1800: 6b 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20  k")!=0;.    int 
1810: 61 6e 20 3d 20 50 28 22 61 6e 22 29 21 3d 30 3b  an = P("an")!=0;
1820: 0a 20 20 20 20 69 6e 74 20 61 6f 20 3d 20 50 28  .    int ao = P(
1830: 22 61 6f 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e  "ao")!=0;.    in
1840: 74 20 61 70 20 3d 20 50 28 22 61 70 22 29 21 3d  t ap = P("ap")!=
1850: 30 3b 0a 20 20 20 20 69 6e 74 20 61 71 20 3d 20  0;.    int aq = 
1860: 50 28 22 61 71 22 29 21 3d 30 3b 0a 20 20 20 20  P("aq")!=0;.    
1870: 69 6e 74 20 61 72 20 3d 20 50 28 22 61 72 22 29  int ar = P("ar")
1880: 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 73 20  !=0;.    int as 
1890: 3d 20 67 2e 6f 6b 53 65 74 75 70 20 26 26 20 50  = g.okSetup && P
18a0: 28 22 61 73 22 29 21 3d 30 3b 0a 20 20 20 20 69  ("as")!=0;.    i
18b0: 6e 74 20 61 77 20 3d 20 50 28 22 61 77 22 29 21  nt aw = P("aw")!
18c0: 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 63 20 3d  =0;.    int ac =
18d0: 20 50 28 22 61 63 22 29 21 3d 30 3b 0a 20 20 20   P("ac")!=0;.   
18e0: 20 69 6e 74 20 61 66 20 3d 20 50 28 22 61 66 22   int af = P("af"
18f0: 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20 61 6d  )!=0;.    int am
1900: 20 3d 20 50 28 22 61 6d 22 29 21 3d 30 3b 0a 20   = P("am")!=0;. 
1910: 20 20 20 69 6e 74 20 61 68 20 3d 20 50 28 22 61     int ah = P("a
1920: 68 22 29 21 3d 30 3b 0a 20 20 20 20 69 6e 74 20  h")!=0;.    int 
1930: 61 67 20 3d 20 50 28 22 61 67 22 29 21 3d 30 3b  ag = P("ag")!=0;
1940: 0a 20 20 20 20 69 66 28 20 61 61 20 29 7b 20 7a  .    if( aa ){ z
1950: 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 61 27 3b 20  Cap[i++] = 'a'; 
1960: 7d 0a 20 20 20 20 69 66 28 20 61 63 20 29 7b 20  }.    if( ac ){ 
1970: 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 63 27 3b  zCap[i++] = 'c';
1980: 20 7d 0a 20 20 20 20 69 66 28 20 61 64 20 29 7b   }.    if( ad ){
1990: 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 64 27   zCap[i++] = 'd'
19a0: 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 66 20 29  ; }.    if( af )
19b0: 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 66  { zCap[i++] = 'f
19c0: 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 68 20  '; }.    if( ah 
19d0: 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20 27  ){ zCap[i++] = '
19e0: 68 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61 67  h'; }.    if( ag
19f0: 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d 20   ){ zCap[i++] = 
1a00: 27 67 27 3b 20 7d 0a 20 20 20 20 69 66 28 20 61  'g'; }.    if( a
1a10: 69 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20 3d  i ){ zCap[i++] =
1a20: 20 27 69 27 3b 20 7d 0a 20 20 20 20 69 66 28 20   'i'; }.    if( 
1a30: 61 6a 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d 20  aj ){ zCap[i++] 
1a40: 3d 20 27 6a 27 3b 20 7d 0a 20 20 20 20 69 66 28  = 'j'; }.    if(
1a50: 20 61 6b 20 29 7b 20 7a 43 61 70 5b 69 2b 2b 5d   ak ){ zCap[i++]
1a60: 20 3d 20 27 6b 27 3b 20 7d 0a 20 20 20 20 69 66   = 'k'; }.    if
1a70: 28 20 61 6d 20 29 7b 20 7a 43 61 70 5b 69 2b 2b  ( am ){ zCap[i++
1a80: 5d 20 3d 20 27 6d 27 3b 20 7d 0a 20 20 20 20 69  ] = 'm'; }.    i
1a90: 66 28 20 61 6e 20 29 7b 20 7a 43 61 70 5b 69 2b  f( an ){ zCap[i+
1aa0: 2b 5d 20 3d 20 27 6e 27 3b 20 7d 0a 20 20 20 20  +] = 'n'; }.    
1ab0: 69 66 28 20 61 6f 20 29 7b 20 7a 43 61 70 5b 69  if( ao ){ zCap[i
1ac0: 2b 2b 5d 20 3d 20 27 6f 27 3b 20 7d 0a 20 20 20  ++] = 'o'; }.   
1ad0: 20 69 66 28 20 61 70 20 29 7b 20 7a 43 61 70 5b   if( ap ){ zCap[
1ae0: 69 2b 2b 5d 20 3d 20 27 70 27 3b 20 7d 0a 20 20  i++] = 'p'; }.  
1af0: 20 20 69 66 28 20 61 71 20 29 7b 20 7a 43 61 70    if( aq ){ zCap
1b00: 5b 69 2b 2b 5d 20 3d 20 27 71 27 3b 20 7d 0a 20  [i++] = 'q'; }. 
1b10: 20 20 20 69 66 28 20 61 72 20 29 7b 20 7a 43 61     if( ar ){ zCa
1b20: 70 5b 69 2b 2b 5d 20 3d 20 27 72 27 3b 20 7d 0a  p[i++] = 'r'; }.
1b30: 20 20 20 20 69 66 28 20 61 73 20 29 7b 20 7a 43      if( as ){ zC
1b40: 61 70 5b 69 2b 2b 5d 20 3d 20 27 73 27 3b 20 7d  ap[i++] = 's'; }
1b50: 0a 20 20 20 20 69 66 28 20 61 77 20 29 7b 20 7a  .    if( aw ){ z
1b60: 43 61 70 5b 69 2b 2b 5d 20 3d 20 27 77 27 3b 20  Cap[i++] = 'w'; 
1b70: 7d 0a 0a 20 20 20 20 7a 43 61 70 5b 69 5d 20 3d  }..    zCap[i] =
1b80: 20 30 3b 0a 20 20 20 20 7a 50 77 20 3d 20 50 28   0;.    zPw = P(
1b90: 22 70 77 22 29 3b 0a 20 20 20 20 69 66 28 20 7a  "pw");.    if( z
1ba0: 50 77 3d 3d 30 20 7c 7c 20 7a 50 77 5b 30 5d 3d  Pw==0 || zPw[0]=
1bb0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 7a 50 77 20  =0 ){.      zPw 
1bc0: 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45  = db_text(0, "SE
1bd0: 4c 45 43 54 20 70 77 20 46 52 4f 4d 20 75 73 65  LECT pw FROM use
1be0: 72 20 57 48 45 52 45 20 75 69 64 3d 25 64 22 2c  r WHERE uid=%d",
1bf0: 20 75 69 64 29 3b 0a 20 20 20 20 7d 0a 20 20 20   uid);.    }.   
1c00: 20 7a 4c 6f 67 69 6e 20 3d 20 50 28 22 6c 6f 67   zLogin = P("log
1c10: 69 6e 22 29 3b 0a 20 20 20 20 69 66 28 20 75 69  in");.    if( ui
1c20: 64 3e 30 20 26 26 20 0a 20 20 20 20 20 20 20 20  d>0 && .        
1c30: 64 62 5f 65 78 69 73 74 73 28 22 53 45 4c 45 43  db_exists("SELEC
1c40: 54 20 31 20 46 52 4f 4d 20 75 73 65 72 20 57 48  T 1 FROM user WH
1c50: 45 52 45 20 6c 6f 67 69 6e 3d 25 51 20 41 4e 44  ERE login=%Q AND
1c60: 20 75 69 64 21 3d 25 64 22 2c 20 7a 4c 6f 67 69   uid!=%d", zLogi
1c70: 6e 2c 20 75 69 64 29 0a 20 20 20 20 29 7b 0a 20  n, uid).    ){. 
1c80: 20 20 20 20 20 73 74 79 6c 65 5f 68 65 61 64 65       style_heade
1c90: 72 28 22 55 73 65 72 20 43 72 65 61 74 69 6f 6e  r("User Creation
1ca0: 20 45 72 72 6f 72 22 29 3b 0a 20 20 20 20 20 20   Error");.      
1cb0: 40 20 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 72  @ <font color="r
1cc0: 65 64 22 3e 4c 6f 67 69 6e 20 22 25 68 28 7a 4c  ed">Login "%h(zL
1cd0: 6f 67 69 6e 29 22 20 69 73 20 61 6c 72 65 61 64  ogin)" is alread
1ce0: 79 20 75 73 65 64 20 62 79 20 61 20 64 69 66 66  y used by a diff
1cf0: 65 72 65 6e 74 0a 20 20 20 20 20 20 40 20 75 73  erent.      @ us
1d00: 65 72 2e 3c 2f 66 6f 6e 74 3e 0a 20 20 20 20 20  er.</font>.     
1d10: 20 40 0a 20 20 20 20 20 20 40 20 3c 70 3e 3c 61   @.      @ <p><a
1d20: 20 68 72 65 66 3d 22 73 65 74 75 70 5f 75 65 64   href="setup_ued
1d30: 69 74 3f 69 64 3d 25 64 28 75 69 64 29 29 3e 5b  it?id=%d(uid))>[
1d40: 42 75 6d 6d 65 72 5d 3c 2f 61 3e 3c 2f 70 3e 0a  Bummer]</a></p>.
1d50: 20 20 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74        style_foot
1d60: 65 72 28 29 3b 0a 20 20 20 20 20 20 72 65 74 75  er();.      retu
1d70: 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  rn;.    }.    db
1d80: 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0a 20 20 20  _multi_exec(.   
1d90: 20 20 20 20 22 52 45 50 4c 41 43 45 20 49 4e 54      "REPLACE INT
1da0: 4f 20 75 73 65 72 28 75 69 64 2c 6c 6f 67 69 6e  O user(uid,login
1db0: 2c 69 6e 66 6f 2c 70 77 2c 63 61 70 29 20 22 0a  ,info,pw,cap) ".
1dc0: 20 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 6e         "VALUES(n
1dd0: 75 6c 6c 69 66 28 25 64 2c 30 29 2c 25 51 2c 25  ullif(%d,0),%Q,%
1de0: 51 2c 25 51 2c 27 25 73 27 29 22 2c 0a 20 20 20  Q,%Q,'%s')",.   
1df0: 20 20 20 75 69 64 2c 20 50 28 22 6c 6f 67 69 6e     uid, P("login
1e00: 22 29 2c 20 50 28 22 69 6e 66 6f 22 29 2c 20 7a  "), P("info"), z
1e10: 50 77 2c 20 7a 43 61 70 0a 20 20 20 20 29 3b 0a  Pw, zCap.    );.
1e20: 20 20 20 20 63 67 69 5f 72 65 64 69 72 65 63 74      cgi_redirect
1e30: 28 22 73 65 74 75 70 5f 75 6c 69 73 74 22 29 3b  ("setup_ulist");
1e40: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
1e50: 0a 0a 20 20 2f 2a 20 4c 6f 61 64 20 74 68 65 20  ..  /* Load the 
1e60: 65 78 69 73 74 69 6e 67 20 69 6e 66 6f 72 6d 61  existing informa
1e70: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 75  tion about the u
1e80: 73 65 72 2c 20 69 66 20 61 6e 79 0a 20 20 2a 2f  ser, if any.  */
1e90: 0a 20 20 7a 4c 6f 67 69 6e 20 3d 20 22 22 3b 0a  .  zLogin = "";.
1ea0: 20 20 7a 49 6e 66 6f 20 3d 20 22 22 3b 0a 20 20    zInfo = "";.  
1eb0: 7a 43 61 70 20 3d 20 22 22 3b 0a 20 20 6f 61 61  zCap = "";.  oaa
1ec0: 20 3d 20 6f 61 63 20 3d 20 6f 61 64 20 3d 20 6f   = oac = oad = o
1ed0: 61 66 20 3d 20 6f 61 67 20 3d 20 6f 61 68 20 3d  af = oag = oah =
1ee0: 20 6f 61 69 20 3d 20 6f 61 6a 20 3d 20 6f 61 6b   oai = oaj = oak
1ef0: 20 3d 20 6f 61 6d 20 3d 0a 20 20 20 20 20 20 20   = oam =.       
1f00: 20 6f 61 6e 20 3d 20 6f 61 6f 20 3d 20 6f 61 70   oan = oao = oap
1f10: 20 3d 20 6f 61 71 20 3d 20 6f 61 72 20 3d 20 6f   = oaq = oar = o
1f20: 61 73 20 3d 20 6f 61 77 20 3d 20 22 22 3b 0a 20  as = oaw = "";. 
1f30: 20 69 66 28 20 75 69 64 20 29 7b 0a 20 20 20 20   if( uid ){.    
1f40: 7a 4c 6f 67 69 6e 20 3d 20 64 62 5f 74 65 78 74  zLogin = db_text
1f50: 28 22 22 2c 20 22 53 45 4c 45 43 54 20 6c 6f 67  ("", "SELECT log
1f60: 69 6e 20 46 52 4f 4d 20 75 73 65 72 20 57 48 45  in FROM user WHE
1f70: 52 45 20 75 69 64 3d 25 64 22 2c 20 75 69 64 29  RE uid=%d", uid)
1f80: 3b 0a 20 20 20 20 7a 49 6e 66 6f 20 3d 20 64 62  ;.    zInfo = db
1f90: 5f 74 65 78 74 28 22 22 2c 20 22 53 45 4c 45 43  _text("", "SELEC
1fa0: 54 20 69 6e 66 6f 20 46 52 4f 4d 20 75 73 65 72  T info FROM user
1fb0: 20 57 48 45 52 45 20 75 69 64 3d 25 64 22 2c 20   WHERE uid=%d", 
1fc0: 75 69 64 29 3b 0a 20 20 20 20 7a 43 61 70 20 3d  uid);.    zCap =
1fd0: 20 64 62 5f 74 65 78 74 28 22 22 2c 20 22 53 45   db_text("", "SE
1fe0: 4c 45 43 54 20 63 61 70 20 46 52 4f 4d 20 75 73  LECT cap FROM us
1ff0: 65 72 20 57 48 45 52 45 20 75 69 64 3d 25 64 22  er WHERE uid=%d"
2000: 2c 20 75 69 64 29 3b 0a 20 20 20 20 69 66 28 20  , uid);.    if( 
2010: 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 61 27  strchr(zCap, 'a'
2020: 29 20 29 20 6f 61 61 20 3d 20 22 20 63 68 65 63  ) ) oaa = " chec
2030: 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74  ked";.    if( st
2040: 72 63 68 72 28 7a 43 61 70 2c 20 27 63 27 29 20  rchr(zCap, 'c') 
2050: 29 20 6f 61 63 20 3d 20 22 20 63 68 65 63 6b 65  ) oac = " checke
2060: 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63  d";.    if( strc
2070: 68 72 28 7a 43 61 70 2c 20 27 64 27 29 20 29 20  hr(zCap, 'd') ) 
2080: 6f 61 64 20 3d 20 22 20 63 68 65 63 6b 65 64 22  oad = " checked"
2090: 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 72  ;.    if( strchr
20a0: 28 7a 43 61 70 2c 20 27 66 27 29 20 29 20 6f 61  (zCap, 'f') ) oa
20b0: 66 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a  f = " checked";.
20c0: 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28 7a      if( strchr(z
20d0: 43 61 70 2c 20 27 67 27 29 20 29 20 6f 61 67 20  Cap, 'g') ) oag 
20e0: 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20  = " checked";.  
20f0: 20 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 61    if( strchr(zCa
2100: 70 2c 20 27 68 27 29 20 29 20 6f 61 68 20 3d 20  p, 'h') ) oah = 
2110: 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20  " checked";.    
2120: 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c  if( strchr(zCap,
2130: 20 27 69 27 29 20 29 20 6f 61 69 20 3d 20 22 20   'i') ) oai = " 
2140: 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66  checked";.    if
2150: 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27  ( strchr(zCap, '
2160: 6a 27 29 20 29 20 6f 61 6a 20 3d 20 22 20 63 68  j') ) oaj = " ch
2170: 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20  ecked";.    if( 
2180: 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 6b 27  strchr(zCap, 'k'
2190: 29 20 29 20 6f 61 6b 20 3d 20 22 20 63 68 65 63  ) ) oak = " chec
21a0: 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74  ked";.    if( st
21b0: 72 63 68 72 28 7a 43 61 70 2c 20 27 6d 27 29 20  rchr(zCap, 'm') 
21c0: 29 20 6f 61 6d 20 3d 20 22 20 63 68 65 63 6b 65  ) oam = " checke
21d0: 64 22 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63  d";.    if( strc
21e0: 68 72 28 7a 43 61 70 2c 20 27 6e 27 29 20 29 20  hr(zCap, 'n') ) 
21f0: 6f 61 6e 20 3d 20 22 20 63 68 65 63 6b 65 64 22  oan = " checked"
2200: 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 68 72  ;.    if( strchr
2210: 28 7a 43 61 70 2c 20 27 6f 27 29 20 29 20 6f 61  (zCap, 'o') ) oa
2220: 6f 20 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a  o = " checked";.
2230: 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28 7a      if( strchr(z
2240: 43 61 70 2c 20 27 70 27 29 20 29 20 6f 61 70 20  Cap, 'p') ) oap 
2250: 3d 20 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20  = " checked";.  
2260: 20 20 69 66 28 20 73 74 72 63 68 72 28 7a 43 61    if( strchr(zCa
2270: 70 2c 20 27 71 27 29 20 29 20 6f 61 71 20 3d 20  p, 'q') ) oaq = 
2280: 22 20 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20  " checked";.    
2290: 69 66 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c  if( strchr(zCap,
22a0: 20 27 72 27 29 20 29 20 6f 61 72 20 3d 20 22 20   'r') ) oar = " 
22b0: 63 68 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66  checked";.    if
22c0: 28 20 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27  ( strchr(zCap, '
22d0: 73 27 29 20 29 20 6f 61 73 20 3d 20 22 20 63 68  s') ) oas = " ch
22e0: 65 63 6b 65 64 22 3b 0a 20 20 20 20 69 66 28 20  ecked";.    if( 
22f0: 73 74 72 63 68 72 28 7a 43 61 70 2c 20 27 77 27  strchr(zCap, 'w'
2300: 29 20 29 20 6f 61 77 20 3d 20 22 20 63 68 65 63  ) ) oaw = " chec
2310: 6b 65 64 22 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  ked";.  }..  /* 
2320: 42 65 67 69 6e 20 67 65 6e 65 72 61 74 69 6e 67  Begin generating
2330: 20 74 68 65 20 70 61 67 65 0a 20 20 2a 2f 0a 20   the page.  */. 
2340: 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65   style_submenu_e
2350: 6c 65 6d 65 6e 74 28 22 43 61 6e 63 65 6c 22 2c  lement("Cancel",
2360: 20 22 43 61 6e 63 65 6c 22 2c 20 22 73 65 74 75   "Cancel", "setu
2370: 70 5f 75 6c 69 73 74 22 29 3b 0a 20 20 69 66 28  p_ulist");.  if(
2380: 20 75 69 64 20 29 7b 0a 20 20 20 20 73 74 79 6c   uid ){.    styl
2390: 65 5f 68 65 61 64 65 72 28 6d 70 72 69 6e 74 66  e_header(mprintf
23a0: 28 22 45 64 69 74 20 55 73 65 72 20 25 68 22 2c  ("Edit User %h",
23b0: 20 7a 4c 6f 67 69 6e 29 29 3b 0a 20 20 7d 65 6c   zLogin));.  }el
23c0: 73 65 7b 0a 20 20 20 20 73 74 79 6c 65 5f 68 65  se{.    style_he
23d0: 61 64 65 72 28 22 41 64 64 20 41 20 4e 65 77 20  ader("Add A New 
23e0: 55 73 65 72 22 29 3b 0a 20 20 7d 0a 20 20 40 20  User");.  }.  @ 
23f0: 3c 74 61 62 6c 65 20 61 6c 69 67 6e 3d 22 6c 65  <table align="le
2400: 66 74 22 20 68 73 70 61 63 65 3d 22 32 30 22 20  ft" hspace="20" 
2410: 76 73 70 61 63 65 3d 22 31 30 22 3e 3c 74 72 3e  vspace="10"><tr>
2420: 3c 74 64 3e 0a 20 20 40 20 3c 66 6f 72 6d 20 61  <td>.  @ <form a
2430: 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 50 61 74  ction="%s(g.zPat
2440: 68 29 22 20 6d 65 74 68 6f 64 3d 22 50 4f 53 54  h)" method="POST
2450: 22 3e 0a 20 20 40 20 3c 74 61 62 6c 65 3e 0a 20  ">.  @ <table>. 
2460: 20 40 20 3c 74 72 3e 0a 20 20 40 20 20 20 3c 74   @ <tr>.  @   <t
2470: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  d align="right">
2480: 3c 6e 6f 62 72 3e 55 73 65 72 20 49 44 3a 3c 2f  <nobr>User ID:</
2490: 6e 6f 62 72 3e 3c 2f 74 64 3e 0a 20 20 69 66 28  nobr></td>.  if(
24a0: 20 75 69 64 20 29 7b 0a 20 20 20 20 40 20 20 20   uid ){.    @   
24b0: 3c 74 64 3e 25 64 28 75 69 64 29 20 3c 69 6e 70  <td>%d(uid) <inp
24c0: 75 74 20 74 79 70 65 3d 22 68 69 64 64 65 6e 22  ut type="hidden"
24d0: 20 6e 61 6d 65 3d 22 69 64 22 20 76 61 6c 75 65   name="id" value
24e0: 3d 22 25 64 28 75 69 64 29 22 3e 3c 2f 74 64 3e  ="%d(uid)"></td>
24f0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 40 20  .  }else{.    @ 
2500: 20 20 3c 74 64 3e 28 6e 65 77 20 75 73 65 72 29    <td>(new user)
2510: 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 68 69 64  <input type="hid
2520: 64 65 6e 22 20 6e 61 6d 65 3d 22 69 64 22 20 76  den" name="id" v
2530: 61 6c 75 65 3d 30 3e 3c 2f 74 64 3e 0a 20 20 7d  alue=0></td>.  }
2540: 0a 20 20 40 20 3c 2f 74 72 3e 0a 20 20 40 20 3c  .  @ </tr>.  @ <
2550: 74 72 3e 0a 20 20 40 20 20 20 3c 74 64 20 61 6c  tr>.  @   <td al
2560: 69 67 6e 3d 22 72 69 67 68 74 22 3e 3c 6e 6f 62  ign="right"><nob
2570: 72 3e 4c 6f 67 69 6e 3a 3c 2f 6e 6f 62 72 3e 3c  r>Login:</nobr><
2580: 2f 74 64 3e 0a 20 20 40 20 20 20 3c 74 64 3e 3c  /td>.  @   <td><
2590: 69 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 74  input type="text
25a0: 22 20 6e 61 6d 65 3d 22 6c 6f 67 69 6e 22 20 76  " name="login" v
25b0: 61 6c 75 65 3d 22 25 68 28 7a 4c 6f 67 69 6e 29  alue="%h(zLogin)
25c0: 22 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c 2f 74 72  "></td>.  @ </tr
25d0: 3e 0a 20 20 40 20 3c 74 72 3e 0a 20 20 40 20 20  >.  @ <tr>.  @  
25e0: 20 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68   <td align="righ
25f0: 74 22 3e 3c 6e 6f 62 72 3e 43 6f 6e 74 61 63 74  t"><nobr>Contact
2600: 26 6e 62 73 70 3b 49 6e 66 6f 3a 3c 2f 6e 6f 62  &nbsp;Info:</nob
2610: 72 3e 3c 2f 74 64 3e 0a 20 20 40 20 20 20 3c 74  r></td>.  @   <t
2620: 64 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 74  d><input type="t
2630: 65 78 74 22 20 6e 61 6d 65 3d 22 69 6e 66 6f 22  ext" name="info"
2640: 20 73 69 7a 65 3d 34 30 20 76 61 6c 75 65 3d 22   size=40 value="
2650: 25 68 28 7a 49 6e 66 6f 29 22 3e 3c 2f 74 64 3e  %h(zInfo)"></td>
2660: 0a 20 20 40 20 3c 2f 74 72 3e 0a 20 20 40 20 3c  .  @ </tr>.  @ <
2670: 74 72 3e 0a 20 20 40 20 20 20 3c 74 64 20 61 6c  tr>.  @   <td al
2680: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
2690: 67 6e 3d 22 74 6f 70 22 3e 43 61 70 61 62 69 6c  gn="top">Capabil
26a0: 69 74 69 65 73 3a 3c 2f 74 64 3e 0a 20 20 40 20  ities:</td>.  @ 
26b0: 20 20 3c 74 64 3e 0a 20 20 69 66 28 20 67 2e 6f    <td>.  if( g.o
26c0: 6b 53 65 74 75 70 20 29 7b 0a 20 20 20 20 40 20  kSetup ){.    @ 
26d0: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d      <input type=
26e0: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d  "checkbox" name=
26f0: 22 61 73 22 25 73 28 6f 61 73 29 3e 53 65 74 75  "as"%s(oas)>Setu
2700: 70 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20  p</input><br>.  
2710: 7d 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74  }.  @     <input
2720: 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22   type="checkbox"
2730: 20 6e 61 6d 65 3d 22 61 61 22 25 73 28 6f 61 61   name="aa"%s(oaa
2740: 29 3e 41 64 6d 69 6e 3c 2f 69 6e 70 75 74 3e 3c  )>Admin</input><
2750: 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70  br>.  @     <inp
2760: 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f  ut type="checkbo
2770: 78 22 20 6e 61 6d 65 3d 22 61 64 22 25 73 28 6f  x" name="ad"%s(o
2780: 61 64 29 3e 44 65 6c 65 74 65 3c 2f 69 6e 70 75  ad)>Delete</inpu
2790: 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 3c  t><br>.  @     <
27a0: 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68 65 63  input type="chec
27b0: 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 70 22 25  kbox" name="ap"%
27c0: 73 28 6f 61 70 29 3e 50 61 73 73 77 6f 72 64 3c  s(oap)>Password<
27d0: 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20  /input><br>.  @ 
27e0: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d      <input type=
27f0: 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d  "checkbox" name=
2800: 22 61 71 22 25 73 28 6f 61 71 29 3e 51 75 65 72  "aq"%s(oaq)>Quer
2810: 79 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20  y</input><br>.  
2820: 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70  @     <input typ
2830: 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d  e="checkbox" nam
2840: 65 3d 22 61 69 22 25 73 28 6f 61 69 29 3e 43 68  e="ai"%s(oai)>Ch
2850: 65 63 6b 2d 49 6e 3c 2f 69 6e 70 75 74 3e 3c 62  eck-In</input><b
2860: 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75  r>.  @     <inpu
2870: 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78  t type="checkbox
2880: 22 20 6e 61 6d 65 3d 22 61 6f 22 25 73 28 6f 61  " name="ao"%s(oa
2890: 6f 29 3e 43 68 65 63 6b 2d 4f 75 74 3c 2f 69 6e  o)>Check-Out</in
28a0: 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20  put><br>.  @    
28b0: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68   <input type="ch
28c0: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 68  eckbox" name="ah
28d0: 22 25 73 28 6f 61 68 29 3e 48 69 73 74 6f 72 79  "%s(oah)>History
28e0: 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40  </input><br>.  @
28f0: 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65       <input type
2900: 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65  ="checkbox" name
2910: 3d 22 61 67 22 25 73 28 6f 61 67 29 3e 43 6c 6f  ="ag"%s(oag)>Clo
2920: 6e 65 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20  ne</input><br>. 
2930: 20 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79   @     <input ty
2940: 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61  pe="checkbox" na
2950: 6d 65 3d 22 61 6a 22 25 73 28 6f 61 6a 29 3e 52  me="aj"%s(oaj)>R
2960: 65 61 64 20 57 69 6b 69 3c 2f 69 6e 70 75 74 3e  ead Wiki</input>
2970: 3c 62 72 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e  <br>.  @     <in
2980: 70 75 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62  put type="checkb
2990: 6f 78 22 20 6e 61 6d 65 3d 22 61 66 22 25 73 28  ox" name="af"%s(
29a0: 6f 61 66 29 3e 4e 65 77 20 57 69 6b 69 3c 2f 69  oaf)>New Wiki</i
29b0: 6e 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20  nput><br>.  @   
29c0: 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63    <input type="c
29d0: 68 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61  heckbox" name="a
29e0: 6d 22 25 73 28 6f 61 6d 29 3e 41 70 70 65 6e 64  m"%s(oam)>Append
29f0: 20 57 69 6b 69 3c 2f 69 6e 70 75 74 3e 3c 62 72   Wiki</input><br
2a00: 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74  >.  @     <input
2a10: 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22   type="checkbox"
2a20: 20 6e 61 6d 65 3d 22 61 6b 22 25 73 28 6f 61 6b   name="ak"%s(oak
2a30: 29 3e 57 72 69 74 65 20 57 69 6b 69 3c 2f 69 6e  )>Write Wiki</in
2a40: 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20  put><br>.  @    
2a50: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68   <input type="ch
2a60: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 72  eckbox" name="ar
2a70: 22 25 73 28 6f 61 72 29 3e 52 65 61 64 20 54 6b  "%s(oar)>Read Tk
2a80: 74 3c 2f 69 6e 70 75 74 3e 3c 62 72 3e 0a 20 20  t</input><br>.  
2a90: 40 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70  @     <input typ
2aa0: 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e 61 6d  e="checkbox" nam
2ab0: 65 3d 22 61 6e 22 25 73 28 6f 61 6e 29 3e 4e 65  e="an"%s(oan)>Ne
2ac0: 77 20 54 6b 74 3c 2f 69 6e 70 75 74 3e 3c 62 72  w Tkt</input><br
2ad0: 3e 0a 20 20 40 20 20 20 20 20 3c 69 6e 70 75 74  >.  @     <input
2ae0: 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22   type="checkbox"
2af0: 20 6e 61 6d 65 3d 22 61 63 22 25 73 28 6f 61 63   name="ac"%s(oac
2b00: 29 3e 41 70 70 65 6e 64 20 54 6b 74 3c 2f 69 6e  )>Append Tkt</in
2b10: 70 75 74 3e 3c 62 72 3e 0a 20 20 40 20 20 20 20  put><br>.  @    
2b20: 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 63 68   <input type="ch
2b30: 65 63 6b 62 6f 78 22 20 6e 61 6d 65 3d 22 61 77  eckbox" name="aw
2b40: 22 25 73 28 6f 61 77 29 3e 57 72 69 74 65 20 54  "%s(oaw)>Write T
2b50: 6b 74 3c 2f 69 6e 70 75 74 3e 0a 20 20 40 20 20  kt</input>.  @  
2b60: 20 3c 2f 74 64 3e 0a 20 20 40 20 3c 2f 74 72 3e   </td>.  @ </tr>
2b70: 0a 20 20 40 20 3c 74 72 3e 0a 20 20 40 20 20 20  .  @ <tr>.  @   
2b80: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
2b90: 22 3e 50 61 73 73 77 6f 72 64 3a 3c 2f 74 64 3e  ">Password:</td>
2ba0: 0a 20 20 40 20 20 20 3c 74 64 3e 3c 69 6e 70 75  .  @   <td><inpu
2bb0: 74 20 74 79 70 65 3d 22 70 61 73 73 77 6f 72 64  t type="password
2bc0: 22 20 6e 61 6d 65 3d 22 70 77 22 20 76 61 6c 75  " name="pw" valu
2bd0: 65 3d 22 22 3e 3c 2f 74 64 3e 0a 20 20 40 20 3c  e=""></td>.  @ <
2be0: 2f 74 72 3e 0a 20 20 69 66 28 20 21 68 69 67 68  /tr>.  if( !high
2bf0: 65 72 55 73 65 72 20 29 7b 0a 20 20 20 20 40 20  erUser ){.    @ 
2c00: 3c 74 72 3e 0a 20 20 20 20 40 20 20 20 3c 74 64  <tr>.    @   <td
2c10: 3e 26 6e 62 73 70 3c 2f 74 64 3e 0a 20 20 20 20  >&nbsp</td>.    
2c20: 40 20 20 20 3c 74 64 3e 3c 69 6e 70 75 74 20 74  @   <td><input t
2c30: 79 70 65 3d 22 73 75 62 6d 69 74 22 20 6e 61 6d  ype="submit" nam
2c40: 65 3d 22 73 75 62 6d 69 74 22 20 76 61 6c 75 65  e="submit" value
2c50: 3d 22 41 70 70 6c 79 20 43 68 61 6e 67 65 73 22  ="Apply Changes"
2c60: 3e 0a 20 20 20 20 40 20 3c 2f 74 72 3e 0a 20 20  >.    @ </tr>.  
2c70: 7d 0a 20 20 40 20 3c 2f 74 61 62 6c 65 3e 3c 2f  }.  @ </table></
2c80: 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e  td></tr></table>
2c90: 0a 20 20 40 20 3c 70 3e 3c 62 3e 4e 6f 74 65 73  .  @ <p><b>Notes
2ca0: 3a 3c 2f 62 3e 3c 2f 70 3e 0a 20 20 40 20 3c 6f  :</b></p>.  @ <o
2cb0: 6c 3e 0a 20 20 69 66 28 20 68 69 67 68 65 72 55  l>.  if( higherU
2cc0: 73 65 72 20 29 7b 0a 20 20 20 20 40 20 3c 6c 69  ser ){.    @ <li
2cd0: 3e 3c 70 3e 0a 20 20 20 20 40 20 55 73 65 72 20  ><p>.    @ User 
2ce0: 25 68 28 7a 49 64 29 20 68 61 73 20 53 65 74 75  %h(zId) has Setu
2cf0: 70 20 70 72 69 76 69 6c 65 67 65 73 20 61 6e 64  p privileges and
2d00: 20 79 6f 75 20 6f 6e 6c 79 20 68 61 76 65 20 41   you only have A
2d10: 64 6d 69 6e 20 70 72 69 76 69 6c 65 67 65 73 0a  dmin privileges.
2d20: 20 20 20 20 40 20 73 6f 20 79 6f 75 20 61 72 65      @ so you are
2d30: 20 6e 6f 74 20 70 65 72 6d 69 74 74 65 64 20 74   not permitted t
2d40: 6f 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  o make changes t
2d50: 6f 20 25 68 28 7a 49 64 29 2e 0a 20 20 20 20 40  o %h(zId)..    @
2d60: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 20 20 40   </p></li>.    @
2d70: 0a 20 20 7d 0a 20 20 40 0a 20 20 40 20 3c 6c 69  .  }.  @.  @ <li
2d80: 3e 3c 70 3e 0a 20 20 40 20 54 68 65 20 3c 62 3e  ><p>.  @ The <b>
2d90: 44 65 6c 65 74 65 3c 2f 62 3e 20 70 72 69 76 69  Delete</b> privi
2da0: 6c 65 67 65 20 67 69 76 65 20 74 68 65 20 75 73  lege give the us
2db0: 65 72 20 74 68 65 20 61 62 69 6c 69 74 79 20 74  er the ability t
2dc0: 6f 20 65 72 61 73 65 0a 20 20 40 20 77 69 6b 69  o erase.  @ wiki
2dd0: 2c 20 74 69 63 6b 65 74 73 2c 20 61 6e 64 20 61  , tickets, and a
2de0: 74 74 74 61 63 68 6d 65 6e 74 73 20 74 68 61 74  tttachments that
2df0: 20 68 61 76 65 20 62 65 65 6e 20 61 64 64 65 64   have been added
2e00: 20 62 79 20 61 6e 6f 6e 79 6d 6f 75 73 0a 20 20   by anonymous.  
2e10: 40 20 75 73 65 72 73 2e 20 20 54 68 69 73 20 63  @ users.  This c
2e20: 61 70 61 62 69 6c 69 74 79 20 69 73 20 69 6e 74  apability is int
2e30: 65 6e 64 65 64 20 66 6f 72 20 64 65 6c 65 74 69  ended for deleti
2e40: 6f 6e 20 6f 66 20 73 70 61 6d 2e 0a 20 20 40 20  on of spam..  @ 
2e50: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40 0a 20 20  </p></li>.  @.  
2e60: 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40 20 54 68  @ <li><p>.  @ Th
2e70: 65 20 3c 62 3e 51 75 65 72 79 3c 2f 62 3e 20 70  e <b>Query</b> p
2e80: 72 69 76 69 6c 65 67 65 20 61 6c 6c 6f 77 73 20  rivilege allows 
2e90: 74 68 65 20 75 73 65 72 20 74 6f 20 63 72 65 61  the user to crea
2ea0: 74 65 20 6f 72 20 65 64 69 74 0a 20 20 40 20 72  te or edit.  @ r
2eb0: 65 70 6f 72 74 20 66 6f 72 6d 61 74 73 20 62 79  eport formats by
2ec0: 20 73 70 65 63 69 66 79 69 6e 67 20 61 70 70 72   specifying appr
2ed0: 6f 70 72 69 61 74 65 20 53 51 4c 2e 20 20 55 73  opriate SQL.  Us
2ee0: 65 72 73 20 63 61 6e 20 72 75 6e 20 0a 20 20 40  ers can run .  @
2ef0: 20 65 78 69 73 74 69 6e 67 20 72 65 70 6f 72 74   existing report
2f00: 73 20 77 69 74 68 6f 75 74 20 74 68 65 20 51 75  s without the Qu
2f10: 65 72 79 20 70 72 69 76 69 6c 65 67 65 2e 0a 20  ery privilege.. 
2f20: 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40   @ </p></li>.  @
2f30: 0a 20 20 40 20 3c 6c 69 3e 3c 70 3e 0a 20 20 40  .  @ <li><p>.  @
2f40: 20 41 6e 20 3c 62 3e 41 64 6d 69 6e 3c 2f 62 3e   An <b>Admin</b>
2f50: 20 75 73 65 72 20 63 61 6e 20 61 64 64 20 6f 74   user can add ot
2f60: 68 65 72 20 75 73 65 72 73 2c 20 63 72 65 61 74  her users, creat
2f70: 65 20 6e 65 77 20 74 69 63 6b 65 74 20 72 65 70  e new ticket rep
2f80: 6f 72 74 0a 20 20 40 20 66 6f 72 6d 61 74 73 2c  ort.  @ formats,
2f90: 20 61 6e 64 20 63 68 61 6e 67 65 20 73 79 73 74   and change syst
2fa0: 65 6d 20 64 65 66 61 75 6c 74 73 2e 20 20 42 75  em defaults.  Bu
2fb0: 74 20 6f 6e 6c 79 20 74 68 65 20 3c 62 3e 53 65  t only the <b>Se
2fc0: 74 75 70 3c 2f 62 3e 20 75 73 65 72 0a 20 20 40  tup</b> user.  @
2fd0: 20 69 73 20 61 62 6c 65 20 74 6f 20 63 68 61 6e   is able to chan
2fe0: 67 65 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72  ge the repositor
2ff0: 79 20 74 6f 0a 20 20 40 20 77 68 69 63 68 20 74  y to.  @ which t
3000: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 6c  his program is l
3010: 69 6e 6b 65 64 2e 0a 20 20 40 20 3c 2f 70 3e 3c  inked..  @ </p><
3020: 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69  /li>.  @.  @ <li
3030: 3e 3c 70 3e 0a 20 20 40 20 54 68 65 20 3c 62 3e  ><p>.  @ The <b>
3040: 48 69 73 74 6f 72 79 3c 2f 62 3e 20 70 72 69 76  History</b> priv
3050: 69 6c 65 67 65 20 61 6c 6c 6f 77 73 20 61 20 75  ilege allows a u
3060: 73 65 72 20 74 6f 20 73 65 65 20 61 20 74 69 6d  ser to see a tim
3070: 65 6c 69 6e 65 0a 20 20 40 20 77 69 74 68 20 68  eline.  @ with h
3080: 79 70 65 72 6c 69 6e 6b 73 20 74 6f 20 76 65 72  yperlinks to ver
3090: 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  sion information
30a0: 2c 20 74 6f 20 64 6f 77 6e 6c 6f 61 64 20 5a 49  , to download ZI
30b0: 50 20 61 72 63 68 69 76 65 73 0a 20 20 40 20 6f  P archives.  @ o
30c0: 66 20 69 6e 64 69 76 69 64 75 61 6c 20 76 65 72  f individual ver
30d0: 73 69 6f 6e 73 2e 0a 20 20 40 20 3c 2f 70 3e 3c  sions..  @ </p><
30e0: 2f 6c 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69  /li>.  @.  @ <li
30f0: 3e 3c 70 3e 0a 20 20 40 20 4e 6f 20 6c 6f 67 69  ><p>.  @ No logi
3100: 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  n is required fo
3110: 72 20 75 73 65 72 20 22 3c 62 3e 6e 6f 62 6f 64  r user "<b>nobod
3120: 79 3c 2f 62 3e 22 2e 20 20 54 68 65 20 63 61 70  y</b>".  The cap
3130: 61 62 69 6c 69 74 69 65 73 0a 20 20 40 20 6f 66  abilities.  @ of
3140: 20 74 68 69 73 20 75 73 65 72 20 61 72 65 20 61   this user are a
3150: 76 61 69 6c 61 62 6c 65 20 74 6f 20 61 6e 79 6f  vailable to anyo
3160: 6e 65 20 77 69 74 68 6f 75 74 20 73 75 70 70 6c  ne without suppl
3170: 79 69 6e 67 20 61 20 75 73 65 72 6e 61 6d 65 20  ying a username 
3180: 6f 72 0a 20 20 40 20 70 61 73 73 77 6f 72 64 2e  or.  @ password.
3190: 20 20 54 6f 20 64 69 73 61 62 6c 65 20 6e 6f 62    To disable nob
31a0: 6f 64 79 20 61 63 63 65 73 73 2c 20 6d 61 6b 65  ody access, make
31b0: 20 73 75 72 65 20 74 68 65 72 65 20 69 73 20 6e   sure there is n
31c0: 6f 20 75 73 65 72 0a 20 20 40 20 77 69 74 68 20  o user.  @ with 
31d0: 61 6e 20 49 44 20 6f 66 20 3c 62 3e 6e 6f 62 6f  an ID of <b>nobo
31e0: 64 79 3c 2f 62 3e 20 6f 72 20 74 68 61 74 20 74  dy</b> or that t
31f0: 68 65 20 6e 6f 62 6f 64 79 20 75 73 65 72 20 68  he nobody user h
3200: 61 73 20 6e 6f 0a 20 20 40 20 63 61 70 61 62 69  as no.  @ capabi
3210: 6c 69 74 69 65 73 20 65 6e 61 62 6c 65 64 2e 20  lities enabled. 
3220: 20 54 68 65 20 70 61 73 73 77 6f 72 64 20 66 6f   The password fo
3230: 72 20 6e 6f 62 6f 64 79 20 69 73 20 69 67 6e 6f  r nobody is igno
3240: 72 65 2e 20 20 54 6f 0a 20 20 40 20 61 76 6f 69  re.  To.  @ avoi
3250: 64 20 70 72 6f 62 6c 65 6d 73 20 77 69 74 68 20  d problems with 
3260: 73 70 69 64 65 72 73 20 6f 76 65 72 6c 6f 61 64  spiders overload
3270: 69 6e 67 20 74 68 65 20 73 65 72 76 65 72 2c 20  ing the server, 
3280: 69 74 20 69 73 20 73 75 67 67 65 73 74 65 64 0a  it is suggested.
3290: 20 20 40 20 74 68 61 74 20 74 68 65 20 27 68 27    @ that the 'h'
32a0: 20 28 48 69 73 74 6f 72 79 29 20 63 61 70 61 62   (History) capab
32b0: 69 6c 69 74 79 20 62 65 20 74 75 72 6e 65 64 20  ility be turned 
32c0: 6f 66 66 20 66 6f 72 20 75 73 65 72 20 6e 6f 62  off for user nob
32d0: 6f 64 79 2e 0a 20 20 40 20 3c 2f 70 3e 3c 2f 6c  ody..  @ </p></l
32e0: 69 3e 0a 20 20 40 0a 20 20 40 20 3c 6c 69 3e 3c  i>.  @.  @ <li><
32f0: 70 3e 0a 20 20 40 20 4c 6f 67 69 6e 20 69 73 20  p>.  @ Login is 
3300: 72 65 71 75 69 72 65 64 20 66 6f 72 20 75 73 65  required for use
3310: 72 20 22 3c 62 3e 61 6e 6f 6e 79 6d 6f 75 73 3c  r "<b>anonymous<
3320: 2f 62 3e 22 20 62 75 74 20 74 68 65 20 70 61 73  /b>" but the pas
3330: 73 77 6f 72 64 0a 20 20 40 20 69 73 20 64 69 73  sword.  @ is dis
3340: 70 6c 61 79 65 64 20 6f 6e 20 74 68 65 20 6c 6f  played on the lo
3350: 67 69 6e 20 73 63 72 65 65 6e 20 62 65 73 69 64  gin screen besid
3360: 65 20 74 68 65 20 70 61 73 73 77 6f 72 64 20 65  e the password e
3370: 6e 74 72 79 20 62 6f 78 0a 20 20 40 20 73 6f 20  ntry box.  @ so 
3380: 61 6e 79 62 6f 64 79 20 77 68 6f 20 63 61 6e 20  anybody who can 
3390: 72 65 61 64 20 73 68 6f 75 6c 64 20 62 65 20 61  read should be a
33a0: 62 6c 65 20 74 6f 20 6c 6f 67 69 6e 20 61 73 20  ble to login as 
33b0: 61 6e 6f 6e 79 6d 6f 75 73 2e 0a 20 20 40 20 4f  anonymous..  @ O
33c0: 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
33d0: 2c 20 73 70 69 64 65 72 73 20 61 6e 64 20 77 65  , spiders and we
33e0: 62 2d 63 72 61 77 6c 65 72 73 20 77 69 6c 6c 20  b-crawlers will 
33f0: 74 79 70 69 63 61 6c 6c 79 20 6e 6f 74 0a 20 20  typically not.  
3400: 40 20 62 65 20 61 62 6c 65 20 74 6f 20 6c 6f 67  @ be able to log
3410: 69 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 70  in.  Set the cap
3420: 61 62 69 6c 69 74 69 65 73 20 6f 66 20 74 68 65  abilities of the
3430: 20 61 6e 6f 6e 79 6d 6f 75 73 20 75 73 65 72 0a   anonymous user.
3440: 20 20 40 20 74 6f 20 74 68 69 6e 67 73 20 74 68    @ to things th
3450: 61 74 20 79 6f 75 20 77 61 6e 74 20 61 6e 79 20  at you want any 
3460: 68 75 6d 61 6e 20 74 6f 20 62 65 20 61 62 6c 65  human to be able
3470: 20 74 6f 20 64 6f 2c 20 62 75 74 20 6e 6f 20 61   to do, but no a
3480: 6e 79 0a 20 20 40 20 73 70 69 64 65 72 2e 0a 20  ny.  @ spider.. 
3490: 20 40 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 20 20 40   @ </p></li>.  @
34a0: 20 3c 2f 66 6f 72 6d 3e 0a 20 20 73 74 79 6c 65   </form>.  style
34b0: 5f 66 6f 6f 74 65 72 28 29 3b 0a 7d 0a 0a 0a 2f  _footer();.}.../
34c0: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20  *.** Generate a 
34d0: 63 68 65 63 6b 62 6f 78 20 66 6f 72 20 61 6e 20  checkbox for an 
34e0: 61 74 74 72 69 62 75 74 65 2e 0a 2a 2f 0a 73 74  attribute..*/.st
34f0: 61 74 69 63 20 76 6f 69 64 20 6f 6e 6f 66 66 5f  atic void onoff_
3500: 61 74 74 72 69 62 75 74 65 28 0a 20 20 63 6f 6e  attribute(.  con
3510: 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c  st char *zLabel,
3520: 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74 20 6c     /* The text l
3530: 61 62 65 6c 20 6f 6e 20 74 68 65 20 63 68 65 63  abel on the chec
3540: 6b 62 6f 78 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  kbox */.  const 
3550: 63 68 61 72 20 2a 7a 56 61 72 2c 20 20 20 20 20  char *zVar,     
3560: 2f 2a 20 54 68 65 20 63 6f 72 72 65 73 70 6f 6e  /* The correspon
3570: 64 69 6e 67 20 72 6f 77 20 69 6e 20 74 68 65 20  ding row in the 
3580: 56 41 52 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  VAR table */.  c
3590: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51 50 61 72  onst char *zQPar
35a0: 6d 2c 20 20 20 2f 2a 20 54 68 65 20 71 75 65 72  m,   /* The quer
35b0: 79 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  y parameter */. 
35c0: 20 69 6e 74 20 64 66 6c 74 56 61 6c 20 20 20 20   int dfltVal    
35d0: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
35e0: 74 20 76 61 6c 75 65 20 69 66 20 56 41 52 20 74  t value if VAR t
35f0: 61 62 6c 65 20 65 6e 74 72 79 20 64 6f 65 73 20  able entry does 
3600: 6e 6f 74 20 65 78 69 73 74 20 2a 2f 0a 29 7b 0a  not exist */.){.
3610: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56    const char *zV
3620: 61 6c 20 3d 20 64 62 5f 67 65 74 28 7a 56 61 72  al = db_get(zVar
3630: 2c 20 30 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68  , 0);.  const ch
3640: 61 72 20 2a 7a 51 20 3d 20 50 28 7a 51 50 61 72  ar *zQ = P(zQPar
3650: 6d 29 3b 0a 20 20 69 6e 74 20 69 56 61 6c 3b 0a  m);.  int iVal;.
3660: 20 20 69 66 28 20 7a 56 61 6c 20 29 7b 0a 20 20    if( zVal ){.  
3670: 20 20 69 56 61 6c 20 3d 20 61 74 6f 69 28 7a 56    iVal = atoi(zV
3680: 61 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  al);.  }else{.  
3690: 20 20 69 56 61 6c 20 3d 20 64 66 6c 74 56 61 6c    iVal = dfltVal
36a0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 51 3d 3d  ;.  }.  if( zQ==
36b0: 30 20 26 26 20 50 28 22 73 75 62 6d 69 74 22 29  0 && P("submit")
36c0: 20 29 7b 0a 20 20 20 20 7a 51 20 3d 20 22 6f 66   ){.    zQ = "of
36d0: 66 22 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 51  f";.  }.  if( zQ
36e0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 51 20 3d   ){.    int iQ =
36f0: 20 73 74 72 63 6d 70 28 7a 51 2c 22 6f 6e 22 29   strcmp(zQ,"on")
3700: 3d 3d 30 20 7c 7c 20 61 74 6f 69 28 7a 51 29 3b  ==0 || atoi(zQ);
3710: 0a 20 20 20 20 69 66 28 20 69 51 21 3d 69 56 61  .    if( iQ!=iVa
3720: 6c 20 29 7b 0a 20 20 20 20 20 20 64 62 5f 73 65  l ){.      db_se
3730: 74 28 7a 56 61 72 2c 20 69 51 20 3f 20 22 31 22  t(zVar, iQ ? "1"
3740: 20 3a 20 22 30 22 29 3b 0a 20 20 20 20 20 20 69   : "0");.      i
3750: 56 61 6c 20 3d 20 69 51 3b 0a 20 20 20 20 7d 0a  Val = iQ;.    }.
3760: 20 20 7d 0a 20 20 69 66 28 20 69 56 61 6c 20 29    }.  if( iVal )
3770: 7b 0a 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74  {.    @ <input t
3780: 79 70 65 3d 22 63 68 65 63 6b 62 6f 78 22 20 6e  ype="checkbox" n
3790: 61 6d 65 3d 22 25 73 28 7a 51 50 61 72 6d 29 22  ame="%s(zQParm)"
37a0: 20 63 68 65 63 6b 65 64 3e 25 73 28 7a 4c 61 62   checked>%s(zLab
37b0: 65 6c 29 3c 2f 69 6e 70 75 74 3e 0a 20 20 7d 65  el)</input>.  }e
37c0: 6c 73 65 7b 0a 20 20 20 20 40 20 3c 69 6e 70 75  lse{.    @ <inpu
37d0: 74 20 74 79 70 65 3d 22 63 68 65 63 6b 62 6f 78  t type="checkbox
37e0: 22 20 6e 61 6d 65 3d 22 25 73 28 7a 51 50 61 72  " name="%s(zQPar
37f0: 6d 29 22 3e 25 73 28 7a 4c 61 62 65 6c 29 3c 2f  m)">%s(zLabel)</
3800: 69 6e 70 75 74 3e 0a 20 20 7d 0a 7d 0a 0a 2f 2a  input>.  }.}../*
3810: 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 6e 20  .** Generate an 
3820: 65 6e 74 72 79 20 62 6f 78 20 66 6f 72 20 61 6e  entry box for an
3830: 20 61 74 74 72 69 62 75 74 65 2e 0a 2a 2f 0a 73   attribute..*/.s
3840: 74 61 74 69 63 20 76 6f 69 64 20 65 6e 74 72 79  tatic void entry
3850: 5f 61 74 74 72 69 62 75 74 65 28 0a 20 20 63 6f  _attribute(.  co
3860: 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c  nst char *zLabel
3870: 2c 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74 20  ,   /* The text 
3880: 6c 61 62 65 6c 20 6f 6e 20 74 68 65 20 65 6e 74  label on the ent
3890: 72 79 20 62 6f 78 20 2a 2f 0a 20 20 69 6e 74 20  ry box */.  int 
38a0: 77 69 64 74 68 2c 20 20 20 20 20 20 20 20 20 20  width,          
38b0: 20 20 2f 2a 20 57 69 64 74 68 20 6f 66 20 74 68    /* Width of th
38c0: 65 20 65 6e 74 72 79 20 62 6f 78 20 2a 2f 0a 20  e entry box */. 
38d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61   const char *zVa
38e0: 72 2c 20 20 20 20 20 2f 2a 20 54 68 65 20 63 6f  r,     /* The co
38f0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 20  rresponding row 
3900: 69 6e 20 74 68 65 20 56 41 52 20 74 61 62 6c 65  in the VAR table
3910: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
3920: 20 2a 7a 51 50 61 72 6d 2c 20 20 20 2f 2a 20 54   *zQParm,   /* T
3930: 68 65 20 71 75 65 72 79 20 70 61 72 61 6d 65 74  he query paramet
3940: 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  er */.  const ch
3950: 61 72 20 2a 7a 44 66 6c 74 20 20 20 20 20 2f 2a  ar *zDflt     /*
3960: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   Default value i
3970: 66 20 56 41 52 20 74 61 62 6c 65 20 65 6e 74 72  f VAR table entr
3980: 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  y does not exist
3990: 20 2a 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63   */.){.  const c
39a0: 68 61 72 20 2a 7a 56 61 6c 20 3d 20 64 62 5f 67  har *zVal = db_g
39b0: 65 74 28 7a 56 61 72 2c 20 7a 44 66 6c 74 29 3b  et(zVar, zDflt);
39c0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
39d0: 51 20 3d 20 50 28 7a 51 50 61 72 6d 29 3b 0a 20  Q = P(zQParm);. 
39e0: 20 69 66 28 20 7a 51 20 26 26 20 73 74 72 63 6d   if( zQ && strcm
39f0: 70 28 7a 51 2c 7a 56 61 6c 29 21 3d 30 20 29 7b  p(zQ,zVal)!=0 ){
3a00: 0a 20 20 20 20 64 62 5f 73 65 74 28 7a 56 61 72  .    db_set(zVar
3a10: 2c 20 7a 51 29 3b 0a 20 20 20 20 7a 56 61 6c 20  , zQ);.    zVal 
3a20: 3d 20 7a 51 3b 0a 20 20 7d 0a 20 20 40 20 3c 69  = zQ;.  }.  @ <i
3a30: 6e 70 75 74 20 74 79 70 65 3d 22 74 65 78 74 22  nput type="text"
3a40: 20 6e 61 6d 65 3d 22 25 73 28 7a 51 50 61 72 6d   name="%s(zQParm
3a50: 29 22 20 76 61 6c 75 65 3d 22 25 68 28 7a 56 61  )" value="%h(zVa
3a60: 6c 29 22 20 73 69 7a 65 3d 22 25 64 28 77 69 64  l)" size="%d(wid
3a70: 74 68 29 22 3e 0a 20 20 40 20 25 73 28 7a 4c 61  th)">.  @ %s(zLa
3a80: 62 65 6c 29 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65  bel).}../*.** Ge
3a90: 6e 65 72 61 74 65 20 61 20 74 65 78 74 20 62 6f  nerate a text bo
3aa0: 78 20 66 6f 72 20 61 6e 20 61 74 74 72 69 62 75  x for an attribu
3ab0: 74 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  te..*/.static vo
3ac0: 69 64 20 74 65 78 74 61 72 65 61 5f 61 74 74 72  id textarea_attr
3ad0: 69 62 75 74 65 28 0a 20 20 63 6f 6e 73 74 20 63  ibute(.  const c
3ae0: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 20 20 2f  har *zLabel,   /
3af0: 2a 20 54 68 65 20 74 65 78 74 20 6c 61 62 65 6c  * The text label
3b00: 20 6f 6e 20 74 68 65 20 74 65 78 74 61 72 65 61   on the textarea
3b10: 20 2a 2f 0a 20 20 69 6e 74 20 72 6f 77 73 2c 20   */.  int rows, 
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
3b30: 6f 77 73 20 69 6e 20 74 68 65 20 74 65 78 74 61  ows in the texta
3b40: 72 65 61 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6c  rea */.  int col
3b50: 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s,             /
3b60: 2a 20 43 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  * Columns in the
3b70: 20 74 65 78 74 61 72 65 61 20 2a 2f 0a 20 20 63   textarea */.  c
3b80: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 72 2c  onst char *zVar,
3b90: 20 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 72 72       /* The corr
3ba0: 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 20 69 6e  esponding row in
3bb0: 20 74 68 65 20 56 41 52 20 74 61 62 6c 65 20 2a   the VAR table *
3bc0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
3bd0: 7a 51 50 61 72 6d 2c 20 20 20 2f 2a 20 54 68 65  zQParm,   /* The
3be0: 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72   query parameter
3bf0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
3c00: 20 2a 7a 44 66 6c 74 20 20 20 20 20 2f 2a 20 44   *zDflt     /* D
3c10: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 66 20  efault value if 
3c20: 56 41 52 20 74 61 62 6c 65 20 65 6e 74 72 79 20  VAR table entry 
3c30: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 2a  does not exist *
3c40: 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  /.){.  const cha
3c50: 72 20 2a 7a 56 61 6c 20 3d 20 64 62 5f 67 65 74  r *zVal = db_get
3c60: 28 7a 56 61 72 2c 20 7a 44 66 6c 74 29 3b 0a 20  (zVar, zDflt);. 
3c70: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51 20   const char *zQ 
3c80: 3d 20 50 28 7a 51 50 61 72 6d 29 3b 0a 20 20 69  = P(zQParm);.  i
3c90: 66 28 20 7a 51 20 26 26 20 73 74 72 63 6d 70 28  f( zQ && strcmp(
3ca0: 7a 51 2c 7a 56 61 6c 29 21 3d 30 20 29 7b 0a 20  zQ,zVal)!=0 ){. 
3cb0: 20 20 20 64 62 5f 73 65 74 28 7a 56 61 72 2c 20     db_set(zVar, 
3cc0: 7a 51 29 3b 0a 20 20 20 20 7a 56 61 6c 20 3d 20  zQ);.    zVal = 
3cd0: 7a 51 3b 0a 20 20 7d 0a 20 20 40 20 3c 74 65 78  zQ;.  }.  @ <tex
3ce0: 74 61 72 65 61 20 6e 61 6d 65 3d 22 25 73 28 7a  tarea name="%s(z
3cf0: 51 50 61 72 6d 29 22 20 72 6f 77 73 3d 22 25 64  QParm)" rows="%d
3d00: 28 72 6f 77 73 29 22 20 63 6f 6c 73 3d 22 25 64  (rows)" cols="%d
3d10: 28 63 6f 6c 73 29 22 3e 25 68 28 7a 56 61 6c 29  (cols)">%h(zVal)
3d20: 3c 2f 74 65 78 74 61 72 65 61 3e 0a 20 20 40 20  </textarea>.  @ 
3d30: 25 73 28 7a 4c 61 62 65 6c 29 0a 7d 0a 0a 0a 2f  %s(zLabel).}.../
3d40: 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 73 65  *.** WEBPAGE: se
3d50: 74 75 70 5f 61 63 63 65 73 73 0a 2a 2f 0a 76 6f  tup_access.*/.vo
3d60: 69 64 20 73 65 74 75 70 5f 61 63 63 65 73 73 28  id setup_access(
3d70: 76 6f 69 64 29 7b 0a 20 20 6c 6f 67 69 6e 5f 63  void){.  login_c
3d80: 68 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73  heck_credentials
3d90: 28 29 3b 0a 20 20 69 66 28 20 21 67 2e 6f 6b 53  ();.  if( !g.okS
3da0: 65 74 75 70 20 29 7b 0a 20 20 20 20 6c 6f 67 69  etup ){.    logi
3db0: 6e 5f 6e 65 65 64 65 64 28 29 3b 0a 20 20 7d 0a  n_needed();.  }.
3dc0: 0a 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28  .  style_header(
3dd0: 22 41 63 63 65 73 73 20 43 6f 6e 74 72 6f 6c 20  "Access Control 
3de0: 53 65 74 74 69 6e 67 73 22 29 3b 0a 20 20 64 62  Settings");.  db
3df0: 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69  _begin_transacti
3e00: 6f 6e 28 29 3b 0a 20 20 40 20 3c 66 6f 72 6d 20  on();.  @ <form 
3e10: 61 63 74 69 6f 6e 3d 22 25 73 28 67 2e 7a 42 61  action="%s(g.zBa
3e20: 73 65 55 52 4c 29 2f 73 65 74 75 70 5f 61 63 63  seURL)/setup_acc
3e30: 65 73 73 22 20 6d 65 74 68 6f 64 3d 22 50 4f 53  ess" method="POS
3e40: 54 22 3e 0a 0a 20 20 40 20 3c 68 72 3e 0a 20 20  T">..  @ <hr>.  
3e50: 6f 6e 6f 66 66 5f 61 74 74 72 69 62 75 74 65 28  onoff_attribute(
3e60: 22 52 65 71 75 69 72 65 20 70 61 73 73 77 6f 72  "Require passwor
3e70: 64 20 66 6f 72 20 6c 6f 63 61 6c 20 61 63 63 65  d for local acce
3e80: 73 73 22 2c 0a 20 20 20 20 20 22 61 75 74 68 65  ss",.     "authe
3e90: 6e 74 69 63 61 74 65 2d 6c 6f 63 61 6c 68 6f 73  nticate-localhos
3ea0: 74 22 2c 20 22 6c 6f 63 61 6c 61 75 74 68 22 2c  t", "localauth",
3eb0: 20 31 29 3b 0a 20 20 40 20 3c 70 3e 57 68 65 6e   1);.  @ <p>When
3ec0: 20 65 6e 61 62 6c 65 64 2c 20 74 68 65 20 70 61   enabled, the pa
3ed0: 73 73 77 6f 72 64 20 73 69 67 6e 2d 69 6e 20 69  ssword sign-in i
3ee0: 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 0a 20  s required for. 
3ef0: 20 40 20 77 65 62 20 61 63 63 65 73 73 20 63 6f   @ web access co
3f00: 6d 69 6e 67 20 66 72 6f 6d 20 31 32 37 2e 30 2e  ming from 127.0.
3f10: 30 2e 31 2e 20 20 57 68 65 6e 20 64 69 73 61 62  0.1.  When disab
3f20: 6c 65 64 2c 20 77 65 62 20 61 63 63 65 73 73 0a  led, web access.
3f30: 20 20 40 20 66 72 6f 6d 20 31 32 37 2e 30 2e 30    @ from 127.0.0
3f40: 2e 31 20 69 73 20 61 6c 6c 6f 77 73 20 77 69 74  .1 is allows wit
3f50: 68 6f 75 74 20 61 6e 79 20 6c 6f 67 69 6e 20 2d  hout any login -
3f60: 20 74 68 65 20 75 73 65 72 20 69 64 20 69 73 20   the user id is 
3f70: 73 65 6c 65 63 74 65 64 0a 20 20 40 20 66 72 6f  selected.  @ fro
3f80: 6d 20 74 68 65 20 7e 2f 2e 66 6f 73 73 69 6c 20  m the ~/.fossil 
3f90: 64 61 74 61 62 61 73 65 2e 20 50 61 73 73 77 6f  database. Passwo
3fa0: 72 64 20 6c 6f 67 69 6e 20 69 73 20 61 6c 77 61  rd login is alwa
3fb0: 79 73 20 72 65 71 75 69 72 65 64 0a 20 20 40 20  ys required.  @ 
3fc0: 66 6f 72 20 69 6e 63 6f 6d 69 6e 67 20 77 65 62  for incoming web
3fd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6f 6e 20   connections on 
3fe0: 69 6e 74 65 72 6e 65 74 20 61 64 64 72 65 73 73  internet address
3ff0: 65 73 20 6f 74 68 65 72 20 74 68 61 6e 0a 20 20  es other than.  
4000: 40 20 31 32 37 2e 30 2e 30 2e 31 2e 3c 2f 70 3e  @ 127.0.0.1.</p>
4010: 3c 2f 6c 69 3e 0a 0a 20 20 40 20 3c 68 72 3e 0a  </li>..  @ <hr>.
4020: 20 20 65 6e 74 72 79 5f 61 74 74 72 69 62 75 74    entry_attribut
4030: 65 28 22 4c 6f 67 69 6e 20 65 78 70 69 72 61 74  e("Login expirat
4040: 69 6f 6e 20 74 69 6d 65 22 2c 20 36 2c 20 22 63  ion time", 6, "c
4050: 6f 6f 6b 69 65 2d 65 78 70 69 72 65 22 2c 20 22  ookie-expire", "
4060: 63 65 78 22 2c 20 22 38 37 36 36 22 29 3b 0a 20  cex", "8766");. 
4070: 20 40 20 3c 70 3e 54 68 65 20 6e 75 6d 62 65 72   @ <p>The number
4080: 20 6f 66 20 68 6f 75 72 73 20 66 6f 72 20 77 68   of hours for wh
4090: 69 63 68 20 61 20 6c 6f 67 69 6e 20 69 73 20 76  ich a login is v
40a0: 61 6c 69 64 2e 20 20 54 68 69 73 20 6d 75 73 74  alid.  This must
40b0: 20 62 65 20 61 0a 20 20 40 20 70 6f 73 69 74 69   be a.  @ positi
40c0: 76 65 20 6e 75 6d 62 65 72 2e 20 20 54 68 65 20  ve number.  The 
40d0: 64 65 66 61 75 6c 74 20 69 73 20 38 37 36 30 20  default is 8760 
40e0: 68 6f 75 72 73 20 77 68 69 63 68 20 69 73 20 61  hours which is a
40f0: 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 65 71 75  pproximately equ
4100: 61 6c 0a 20 20 40 20 74 6f 20 61 20 79 65 61 72  al.  @ to a year
4110: 2e 3c 2f 70 3e 0a 20 20 20 0a 20 20 40 20 3c 68  .</p>.   .  @ <h
4120: 72 3e 0a 20 20 6f 6e 6f 66 66 5f 61 74 74 72 69  r>.  onoff_attri
4130: 62 75 74 65 28 22 41 6c 6c 6f 77 20 61 6e 6f 6e  bute("Allow anon
4140: 79 6d 6f 75 73 20 73 69 67 6e 75 70 22 2c 20 22  ymous signup", "
4150: 61 6e 6f 6e 2d 73 69 67 6e 75 70 22 2c 20 22 61  anon-signup", "a
4160: 73 75 22 2c 20 30 29 3b 0a 20 20 40 20 3c 70 3e  su", 0);.  @ <p>
4170: 41 6c 6c 6f 77 20 75 73 65 72 73 20 74 6f 20 63  Allow users to c
4180: 72 65 61 74 65 20 74 68 65 69 72 20 6f 77 6e 20  reate their own 
4190: 61 63 63 6f 75 6e 74 73 3c 2f 70 3e 0a 20 20 20  accounts</p>.   
41a0: 0a 20 20 40 20 3c 68 72 3e 0a 20 20 40 20 3c 70  .  @ <hr>.  @ <p
41b0: 3e 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 73 75  ><input type="su
41c0: 62 6d 69 74 22 20 20 6e 61 6d 65 3d 22 73 75 62  bmit"  name="sub
41d0: 6d 69 74 22 20 76 61 6c 75 65 3d 22 41 70 70 6c  mit" value="Appl
41e0: 79 20 43 68 61 6e 67 65 73 22 3e 3c 2f 70 3e 0a  y Changes"></p>.
41f0: 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 64 62    @ </form>.  db
4200: 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e  _end_transaction
4210: 28 30 29 3b 0a 20 20 73 74 79 6c 65 5f 66 6f 6f  (0);.  style_foo
4220: 74 65 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ter();.}../*.** 
4230: 57 45 42 50 41 47 45 3a 20 73 65 74 75 70 5f 63  WEBPAGE: setup_c
4240: 6f 6e 66 69 67 0a 2a 2f 0a 76 6f 69 64 20 73 65  onfig.*/.void se
4250: 74 75 70 5f 63 6f 6e 66 69 67 28 76 6f 69 64 29  tup_config(void)
4260: 7b 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b 5f  {.  login_check_
4270: 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a 20  credentials();. 
4280: 20 69 66 28 20 21 67 2e 6f 6b 53 65 74 75 70 20   if( !g.okSetup 
4290: 29 7b 0a 20 20 20 20 6c 6f 67 69 6e 5f 6e 65 65  ){.    login_nee
42a0: 64 65 64 28 29 3b 0a 20 20 7d 0a 0a 20 20 73 74  ded();.  }..  st
42b0: 79 6c 65 5f 68 65 61 64 65 72 28 22 57 57 57 20  yle_header("WWW 
42c0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 29 3b  Configuration");
42d0: 0a 20 20 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e  .  db_begin_tran
42e0: 73 61 63 74 69 6f 6e 28 29 3b 0a 20 20 40 20 3c  saction();.  @ <
42f0: 66 6f 72 6d 20 61 63 74 69 6f 6e 3d 22 25 73 28  form action="%s(
4300: 67 2e 7a 42 61 73 65 55 52 4c 29 2f 73 65 74 75  g.zBaseURL)/setu
4310: 70 5f 63 6f 6e 66 69 67 22 20 6d 65 74 68 6f 64  p_config" method
4320: 3d 22 50 4f 53 54 22 3e 0a 0a 20 20 40 20 3c 68  ="POST">..  @ <h
4330: 72 3e 0a 20 20 65 6e 74 72 79 5f 61 74 74 72 69  r>.  entry_attri
4340: 62 75 74 65 28 22 48 6f 6d 65 20 70 61 67 65 22  bute("Home page"
4350: 2c 20 36 30 2c 20 22 68 6f 6d 65 70 61 67 65 22  , 60, "homepage"
4360: 2c 20 22 68 70 22 2c 20 22 22 29 3b 0a 20 20 40  , "hp", "");.  @
4370: 20 3c 70 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20   <p>The name of 
4380: 61 20 77 69 6b 69 20 66 69 6c 65 20 74 68 61 74  a wiki file that
4390: 20 69 73 20 74 68 65 20 68 6f 6d 65 70 61 67 65   is the homepage
43a0: 20 66 6f 72 20 74 68 65 20 77 65 62 73 69 74 65   for the website
43b0: 2e 0a 20 20 40 20 54 68 65 20 68 6f 6d 65 20 70  ..  @ The home p
43c0: 61 67 65 20 69 73 20 74 68 65 20 70 61 67 65 20  age is the page 
43d0: 74 68 61 74 20 69 73 20 64 69 73 70 6c 61 79 65  that is displaye
43e0: 64 20 62 79 20 74 68 65 20 22 48 6f 6d 65 22 20  d by the "Home" 
43f0: 6c 69 6e 6b 0a 20 20 40 20 61 74 20 74 68 65 20  link.  @ at the 
4400: 74 6f 70 20 6f 66 20 74 68 69 73 20 73 63 72 65  top of this scre
4410: 65 6e 2e 20 20 4f 6d 69 74 20 74 68 65 20 70 61  en.  Omit the pa
4420: 74 68 20 61 6e 64 20 74 68 65 20 22 2e 77 69 6b  th and the ".wik
4430: 69 22 0a 20 20 40 20 73 75 66 66 69 78 2e 20 20  i".  @ suffix.  
4440: 3c 2f 70 3e 0a 0a 20 20 65 6e 74 72 79 5f 61 74  </p>..  entry_at
4450: 74 72 69 62 75 74 65 28 22 54 69 63 6b 65 74 20  tribute("Ticket 
4460: 73 75 62 64 69 72 65 63 74 6f 72 79 22 2c 20 36  subdirectory", 6
4470: 30 2c 20 22 74 69 63 6b 65 74 2d 73 75 62 64 69  0, "ticket-subdi
4480: 72 22 2c 20 22 74 73 64 22 2c 20 22 22 29 3b 0a  r", "tsd", "");.
4490: 20 20 40 20 3c 70 3e 41 20 73 75 62 64 69 72 65    @ <p>A subdire
44a0: 63 74 6f 72 79 20 69 6e 20 74 68 65 20 66 69 6c  ctory in the fil
44b0: 65 20 68 69 65 72 61 72 63 68 79 20 74 68 61 74  e hierarchy that
44c0: 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 74 72   contains all tr
44d0: 6f 75 62 6c 65 0a 20 20 40 20 74 69 63 6b 65 74  ouble.  @ ticket
44e0: 73 2e 20 20 4c 65 61 76 65 20 74 68 69 73 20 62  s.  Leave this b
44f0: 6c 61 6e 6b 20 74 6f 20 64 69 73 61 62 6c 65 20  lank to disable 
4500: 74 69 63 6b 65 74 69 6e 67 2e 20 20 54 69 63 6b  ticketing.  Tick
4510: 65 74 73 20 74 65 78 74 0a 20 20 40 20 66 69 6c  ets text.  @ fil
4520: 65 73 20 77 69 74 68 69 6e 20 74 68 69 73 20 73  es within this s
4530: 75 62 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74  ubdirectory cont
4540: 61 69 6e 69 6e 67 20 61 20 70 61 72 74 69 63 75  aining a particu
4550: 6c 61 72 20 66 6f 72 6d 61 74 0a 20 20 40 20 28  lar format.  @ (
4560: 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72  documented separ
4570: 61 74 65 6c 79 29 20 61 6e 64 20 77 69 74 68 20  ately) and with 
4580: 74 68 65 20 22 2e 74 6b 74 22 20 73 75 66 66 69  the ".tkt" suffi
4590: 78 2e 3c 2f 70 3e 0a 0a 20 20 65 6e 74 72 79 5f  x.</p>..  entry_
45a0: 61 74 74 72 69 62 75 74 65 28 22 57 69 6b 69 20  attribute("Wiki 
45b0: 73 75 62 64 69 72 65 63 74 6f 72 79 22 2c 20 36  subdirectory", 6
45c0: 30 2c 20 22 77 69 6b 69 2d 73 75 62 64 69 72 22  0, "wiki-subdir"
45d0: 2c 20 22 77 73 64 22 2c 20 22 22 29 3b 0a 20 20  , "wsd", "");.  
45e0: 40 20 3c 70 3e 41 20 73 75 62 64 69 72 65 63 74  @ <p>A subdirect
45f0: 6f 72 79 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ory in the file 
4600: 68 69 65 72 61 72 63 68 79 20 74 68 61 74 20 63  hierarchy that c
4610: 6f 6e 74 61 69 6e 73 20 77 69 6b 69 20 70 61 67  ontains wiki pag
4620: 65 73 2e 0a 20 20 40 20 4c 65 61 76 65 20 74 68  es..  @ Leave th
4630: 69 73 20 62 6c 61 6e 6b 20 74 6f 20 64 69 73 61  is blank to disa
4640: 62 6c 65 20 77 69 6b 69 2e 20 20 57 69 6b 69 20  ble wiki.  Wiki 
4650: 70 61 67 65 73 20 61 72 65 0a 20 20 40 20 66 69  pages are.  @ fi
4660: 6c 65 73 20 77 69 74 68 69 6e 20 74 68 69 73 20  les within this 
4670: 73 75 62 64 69 72 65 63 74 6f 72 79 20 77 68 6f  subdirectory who
4680: 73 65 20 6e 61 6d 65 20 69 73 20 68 65 20 77 69  se name is he wi
4690: 6b 69 20 70 61 67 65 20 74 69 74 6c 65 0a 20 20  ki page title.  
46a0: 40 20 61 6e 64 20 77 69 74 68 20 74 68 65 20 73  @ and with the s
46b0: 75 66 66 69 78 20 22 2e 77 69 6b 69 22 2e 3c 2f  uffix ".wiki".</
46c0: 70 3e 0a 20 20 0a 20 20 65 6e 74 72 79 5f 61 74  p>.  .  entry_at
46d0: 74 72 69 62 75 74 65 28 22 52 53 53 20 46 65 65  tribute("RSS Fee
46e0: 64 20 54 69 74 6c 65 22 2c 20 36 30 2c 20 22 72  d Title", 60, "r
46f0: 73 73 2d 74 69 74 6c 65 22 2c 20 22 72 73 74 22  ss-title", "rst"
4700: 2c 20 22 22 29 3b 0a 20 20 40 20 3c 70 3e 54 68  , "");.  @ <p>Th
4710: 65 20 74 69 74 6c 65 20 6f 66 20 74 68 65 20 52  e title of the R
4720: 53 53 20 66 65 65 64 20 74 68 61 74 20 70 75 62  SS feed that pub
4730: 6c 69 73 68 65 73 20 74 68 65 20 63 68 61 6e 67  lishes the chang
4740: 65 73 20 74 6f 20 74 68 65 0a 20 20 40 20 72 65  es to the.  @ re
4750: 70 6f 73 69 74 6f 72 79 2e 20 49 66 20 6c 65 66  pository. If lef
4760: 74 20 62 6c 61 6e 6b 2c 20 74 68 65 20 73 79 73  t blank, the sys
4770: 74 65 6d 20 77 69 6c 6c 20 67 65 6e 65 72 61 74  tem will generat
4780: 65 20 61 20 67 65 6e 65 72 69 63 0a 20 20 40 20  e a generic.  @ 
4790: 74 69 74 6c 65 20 74 68 61 74 2c 20 75 6e 66 6f  title that, unfo
47a0: 72 74 75 6e 61 6e 74 6c 79 2c 20 6e 6f 74 20 76  rtunantly, not v
47b0: 65 72 79 20 68 65 6c 70 66 75 6c 2e 3c 2f 70 3e  ery helpful.</p>
47c0: 0a 20 20 0a 20 20 74 65 78 74 61 72 65 61 5f 61  .  .  textarea_a
47d0: 74 74 72 69 62 75 74 65 28 22 52 53 53 20 46 65  ttribute("RSS Fe
47e0: 65 64 20 44 65 73 63 72 69 70 74 69 6f 6e 22 2c  ed Description",
47f0: 20 35 2c 20 36 30 2c 20 22 72 73 73 2d 64 65 73   5, 60, "rss-des
4800: 63 72 69 70 74 69 6f 6e 22 2c 20 22 72 73 64 22  cription", "rsd"
4810: 2c 20 22 22 29 3b 0a 20 20 40 20 3c 70 3e 54 68  , "");.  @ <p>Th
4820: 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
4830: 20 74 68 65 20 52 53 53 20 66 65 65 64 20 74 68   the RSS feed th
4840: 61 74 20 70 75 62 6c 69 73 68 65 73 20 74 68 65  at publishes the
4850: 20 63 68 61 6e 67 65 73 20 74 6f 0a 20 20 40 20   changes to.  @ 
4860: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 20  the repository. 
4870: 49 66 20 6c 65 66 74 20 62 6c 61 6e 6b 2c 20 74  If left blank, t
4880: 68 65 20 73 79 73 74 65 6d 20 77 69 6c 6c 20 75  he system will u
4890: 73 65 20 74 68 65 20 52 53 53 20 46 65 65 64 20  se the RSS Feed 
48a0: 54 69 74 6c 65 2e 0a 20 20 20 0a 20 20 40 20 3c  Title..   .  @ <
48b0: 68 72 3e 0a 20 20 40 20 3c 70 3e 3c 69 6e 70 75  hr>.  @ <p><inpu
48c0: 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20  t type="submit" 
48d0: 20 6e 61 6d 65 3d 22 73 75 62 6d 69 74 22 20 76   name="submit" v
48e0: 61 6c 75 65 3d 22 41 70 70 6c 79 20 43 68 61 6e  alue="Apply Chan
48f0: 67 65 73 22 3e 3c 2f 70 3e 0a 20 20 40 20 3c 2f  ges"></p>.  @ </
4900: 66 6f 72 6d 3e 0a 20 20 64 62 5f 65 6e 64 5f 74  form>.  db_end_t
4910: 72 61 6e 73 61 63 74 69 6f 6e 28 30 29 3b 0a 20  ransaction(0);. 
4920: 20 73 74 79 6c 65 5f 66 6f 6f 74 65 72 28 29 3b   style_footer();
4930: 0a 7d 0a                                         .}.