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