Fossil SCM

Break out the user configuration pages into a separate "setupuser.c" source file.

drh 2018-08-17 13:04 trunk
Commit a49ed35bb79e7f1c934e3179e84ea33f8346164a72db0f5d49de0010aaadf1d0
+12
--- src/main.mk
+++ src/main.mk
@@ -109,10 +109,11 @@
109109
$(SRCDIR)/rss.c \
110110
$(SRCDIR)/schema.c \
111111
$(SRCDIR)/search.c \
112112
$(SRCDIR)/security_audit.c \
113113
$(SRCDIR)/setup.c \
114
+ $(SRCDIR)/setupuser.c \
114115
$(SRCDIR)/sha1.c \
115116
$(SRCDIR)/sha1hard.c \
116117
$(SRCDIR)/sha3.c \
117118
$(SRCDIR)/shun.c \
118119
$(SRCDIR)/sitemap.c \
@@ -317,10 +318,11 @@
317318
$(OBJDIR)/rss_.c \
318319
$(OBJDIR)/schema_.c \
319320
$(OBJDIR)/search_.c \
320321
$(OBJDIR)/security_audit_.c \
321322
$(OBJDIR)/setup_.c \
323
+ $(OBJDIR)/setupuser_.c \
322324
$(OBJDIR)/sha1_.c \
323325
$(OBJDIR)/sha1hard_.c \
324326
$(OBJDIR)/sha3_.c \
325327
$(OBJDIR)/shun_.c \
326328
$(OBJDIR)/sitemap_.c \
@@ -453,10 +455,11 @@
453455
$(OBJDIR)/rss.o \
454456
$(OBJDIR)/schema.o \
455457
$(OBJDIR)/search.o \
456458
$(OBJDIR)/security_audit.o \
457459
$(OBJDIR)/setup.o \
460
+ $(OBJDIR)/setupuser.o \
458461
$(OBJDIR)/sha1.o \
459462
$(OBJDIR)/sha1hard.o \
460463
$(OBJDIR)/sha3.o \
461464
$(OBJDIR)/shun.o \
462465
$(OBJDIR)/sitemap.o \
@@ -787,10 +790,11 @@
787790
$(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \
788791
$(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \
789792
$(OBJDIR)/search_.c:$(OBJDIR)/search.h \
790793
$(OBJDIR)/security_audit_.c:$(OBJDIR)/security_audit.h \
791794
$(OBJDIR)/setup_.c:$(OBJDIR)/setup.h \
795
+ $(OBJDIR)/setupuser_.c:$(OBJDIR)/setupuser.h \
792796
$(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h \
793797
$(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \
794798
$(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \
795799
$(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \
796800
$(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \
@@ -1599,10 +1603,18 @@
15991603
16001604
$(OBJDIR)/setup.o: $(OBJDIR)/setup_.c $(OBJDIR)/setup.h $(SRCDIR)/config.h
16011605
$(XTCC) -o $(OBJDIR)/setup.o -c $(OBJDIR)/setup_.c
16021606
16031607
$(OBJDIR)/setup.h: $(OBJDIR)/headers
1608
+
1609
+$(OBJDIR)/setupuser_.c: $(SRCDIR)/setupuser.c $(OBJDIR)/translate
1610
+ $(OBJDIR)/translate $(SRCDIR)/setupuser.c >$@
1611
+
1612
+$(OBJDIR)/setupuser.o: $(OBJDIR)/setupuser_.c $(OBJDIR)/setupuser.h $(SRCDIR)/config.h
1613
+ $(XTCC) -o $(OBJDIR)/setupuser.o -c $(OBJDIR)/setupuser_.c
1614
+
1615
+$(OBJDIR)/setupuser.h: $(OBJDIR)/headers
16041616
16051617
$(OBJDIR)/sha1_.c: $(SRCDIR)/sha1.c $(OBJDIR)/translate
16061618
$(OBJDIR)/translate $(SRCDIR)/sha1.c >$@
16071619
16081620
$(OBJDIR)/sha1.o: $(OBJDIR)/sha1_.c $(OBJDIR)/sha1.h $(SRCDIR)/config.h
16091621
--- src/main.mk
+++ src/main.mk
@@ -109,10 +109,11 @@
109 $(SRCDIR)/rss.c \
110 $(SRCDIR)/schema.c \
111 $(SRCDIR)/search.c \
112 $(SRCDIR)/security_audit.c \
113 $(SRCDIR)/setup.c \
 
114 $(SRCDIR)/sha1.c \
115 $(SRCDIR)/sha1hard.c \
116 $(SRCDIR)/sha3.c \
117 $(SRCDIR)/shun.c \
118 $(SRCDIR)/sitemap.c \
@@ -317,10 +318,11 @@
317 $(OBJDIR)/rss_.c \
318 $(OBJDIR)/schema_.c \
319 $(OBJDIR)/search_.c \
320 $(OBJDIR)/security_audit_.c \
321 $(OBJDIR)/setup_.c \
 
322 $(OBJDIR)/sha1_.c \
323 $(OBJDIR)/sha1hard_.c \
324 $(OBJDIR)/sha3_.c \
325 $(OBJDIR)/shun_.c \
326 $(OBJDIR)/sitemap_.c \
@@ -453,10 +455,11 @@
453 $(OBJDIR)/rss.o \
454 $(OBJDIR)/schema.o \
455 $(OBJDIR)/search.o \
456 $(OBJDIR)/security_audit.o \
457 $(OBJDIR)/setup.o \
 
458 $(OBJDIR)/sha1.o \
459 $(OBJDIR)/sha1hard.o \
460 $(OBJDIR)/sha3.o \
461 $(OBJDIR)/shun.o \
462 $(OBJDIR)/sitemap.o \
@@ -787,10 +790,11 @@
787 $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \
788 $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \
789 $(OBJDIR)/search_.c:$(OBJDIR)/search.h \
790 $(OBJDIR)/security_audit_.c:$(OBJDIR)/security_audit.h \
791 $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h \
 
792 $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h \
793 $(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \
794 $(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \
795 $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \
796 $(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \
@@ -1599,10 +1603,18 @@
1599
1600 $(OBJDIR)/setup.o: $(OBJDIR)/setup_.c $(OBJDIR)/setup.h $(SRCDIR)/config.h
1601 $(XTCC) -o $(OBJDIR)/setup.o -c $(OBJDIR)/setup_.c
1602
1603 $(OBJDIR)/setup.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
1604
1605 $(OBJDIR)/sha1_.c: $(SRCDIR)/sha1.c $(OBJDIR)/translate
1606 $(OBJDIR)/translate $(SRCDIR)/sha1.c >$@
1607
1608 $(OBJDIR)/sha1.o: $(OBJDIR)/sha1_.c $(OBJDIR)/sha1.h $(SRCDIR)/config.h
1609
--- src/main.mk
+++ src/main.mk
@@ -109,10 +109,11 @@
109 $(SRCDIR)/rss.c \
110 $(SRCDIR)/schema.c \
111 $(SRCDIR)/search.c \
112 $(SRCDIR)/security_audit.c \
113 $(SRCDIR)/setup.c \
114 $(SRCDIR)/setupuser.c \
115 $(SRCDIR)/sha1.c \
116 $(SRCDIR)/sha1hard.c \
117 $(SRCDIR)/sha3.c \
118 $(SRCDIR)/shun.c \
119 $(SRCDIR)/sitemap.c \
@@ -317,10 +318,11 @@
318 $(OBJDIR)/rss_.c \
319 $(OBJDIR)/schema_.c \
320 $(OBJDIR)/search_.c \
321 $(OBJDIR)/security_audit_.c \
322 $(OBJDIR)/setup_.c \
323 $(OBJDIR)/setupuser_.c \
324 $(OBJDIR)/sha1_.c \
325 $(OBJDIR)/sha1hard_.c \
326 $(OBJDIR)/sha3_.c \
327 $(OBJDIR)/shun_.c \
328 $(OBJDIR)/sitemap_.c \
@@ -453,10 +455,11 @@
455 $(OBJDIR)/rss.o \
456 $(OBJDIR)/schema.o \
457 $(OBJDIR)/search.o \
458 $(OBJDIR)/security_audit.o \
459 $(OBJDIR)/setup.o \
460 $(OBJDIR)/setupuser.o \
461 $(OBJDIR)/sha1.o \
462 $(OBJDIR)/sha1hard.o \
463 $(OBJDIR)/sha3.o \
464 $(OBJDIR)/shun.o \
465 $(OBJDIR)/sitemap.o \
@@ -787,10 +790,11 @@
790 $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \
791 $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \
792 $(OBJDIR)/search_.c:$(OBJDIR)/search.h \
793 $(OBJDIR)/security_audit_.c:$(OBJDIR)/security_audit.h \
794 $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h \
795 $(OBJDIR)/setupuser_.c:$(OBJDIR)/setupuser.h \
796 $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h \
797 $(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \
798 $(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \
799 $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \
800 $(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \
@@ -1599,10 +1603,18 @@
1603
1604 $(OBJDIR)/setup.o: $(OBJDIR)/setup_.c $(OBJDIR)/setup.h $(SRCDIR)/config.h
1605 $(XTCC) -o $(OBJDIR)/setup.o -c $(OBJDIR)/setup_.c
1606
1607 $(OBJDIR)/setup.h: $(OBJDIR)/headers
1608
1609 $(OBJDIR)/setupuser_.c: $(SRCDIR)/setupuser.c $(OBJDIR)/translate
1610 $(OBJDIR)/translate $(SRCDIR)/setupuser.c >$@
1611
1612 $(OBJDIR)/setupuser.o: $(OBJDIR)/setupuser_.c $(OBJDIR)/setupuser.h $(SRCDIR)/config.h
1613 $(XTCC) -o $(OBJDIR)/setupuser.o -c $(OBJDIR)/setupuser_.c
1614
1615 $(OBJDIR)/setupuser.h: $(OBJDIR)/headers
1616
1617 $(OBJDIR)/sha1_.c: $(SRCDIR)/sha1.c $(OBJDIR)/translate
1618 $(OBJDIR)/translate $(SRCDIR)/sha1.c >$@
1619
1620 $(OBJDIR)/sha1.o: $(OBJDIR)/sha1_.c $(OBJDIR)/sha1.h $(SRCDIR)/config.h
1621
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -120,10 +120,11 @@
120120
rss
121121
schema
122122
search
123123
security_audit
124124
setup
125
+ setupuser
125126
sha1
126127
sha1hard
127128
sha3
128129
shun
129130
sitemap
130131
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -120,10 +120,11 @@
120 rss
121 schema
122 search
123 security_audit
124 setup
 
125 sha1
126 sha1hard
127 sha3
128 shun
129 sitemap
130
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -120,10 +120,11 @@
120 rss
121 schema
122 search
123 security_audit
124 setup
125 setupuser
126 sha1
127 sha1hard
128 sha3
129 shun
130 sitemap
131
-745
--- src/setup.c
+++ src/setup.c
@@ -157,755 +157,10 @@
157157
"Enter raw TH1 commands");
158158
@ </table>
159159
160160
style_footer();
161161
}
162
-
163
-/*
164
-** WEBPAGE: setup_ulist
165
-**
166
-** Show a list of users. Clicking on any user jumps to the edit
167
-** screen for that user. Requires Admin privileges.
168
-**
169
-** Query parameters:
170
-**
171
-** with=CAP Only show users that have one or more capabilities in CAP.
172
-*/
173
-void setup_ulist(void){
174
- Stmt s;
175
- double rNow;
176
- const char *zWith = P("with");
177
-
178
- login_check_credentials();
179
- if( !g.perm.Admin ){
180
- login_needed(0);
181
- return;
182
- }
183
-
184
- if( zWith==0 || zWith[0]==0 ){
185
- style_submenu_element("Add", "setup_uedit");
186
- style_submenu_element("Log", "access_log");
187
- style_submenu_element("Help", "setup_ulist_notes");
188
- style_header("User List");
189
- @ <table border=1 cellpadding=2 cellspacing=0 class='userTable'>
190
- @ <thead><tr>
191
- @ <th>Category
192
- @ <th>Capabilities (<a href='%R/setup_ucap_list'>key</a>)
193
- @ <th>Info <th>Last Change</tr></thead>
194
- @ <tbody>
195
- db_prepare(&s,
196
- "SELECT uid, login, cap, date(mtime,'unixepoch')"
197
- " FROM user"
198
- " WHERE login IN ('anonymous','nobody','developer','reader')"
199
- " ORDER BY login"
200
- );
201
- while( db_step(&s)==SQLITE_ROW ){
202
- int uid = db_column_int(&s, 0);
203
- const char *zLogin = db_column_text(&s, 1);
204
- const char *zCap = db_column_text(&s, 2);
205
- const char *zDate = db_column_text(&s, 4);
206
- @ <tr>
207
- @ <td><a href='setup_uedit?id=%d(uid)'>%h(zLogin)</a>
208
- @ <td>%h(zCap)
209
-
210
- if( fossil_strcmp(zLogin,"anonymous")==0 ){
211
- @ <td>All logged-in users
212
- }else if( fossil_strcmp(zLogin,"developer")==0 ){
213
- @ <td>Users with '<b>v</b>' capability
214
- }else if( fossil_strcmp(zLogin,"nobody")==0 ){
215
- @ <td>All users without login
216
- }else if( fossil_strcmp(zLogin,"reader")==0 ){
217
- @ <td>Users with '<b>u</b>' capability
218
- }else{
219
- @ <td>
220
- }
221
- if( zDate && zDate[0] ){
222
- @ <td>%h(zDate)
223
- }else{
224
- @ <td>
225
- }
226
- @ </tr>
227
- }
228
- db_finalize(&s);
229
- }else{
230
- style_header("Users With Capabilities \"%h\"", zWith);
231
- }
232
- @ </tbody></table>
233
- @ <div class='section'>Users</div>
234
- @ <table border=1 cellpadding=2 cellspacing=0 class='userTable sortable' \
235
- @ data-column-types='ktxTTK' data-init-sort='2'>
236
- @ <thead><tr>
237
- @ <th>Login Name<th>Caps<th>Info<th>Date<th>Expire<th>Last Login</tr></thead>
238
- @ <tbody>
239
- db_multi_exec(
240
- "CREATE TEMP TABLE lastAccess(uname TEXT PRIMARY KEY, atime REAL)"
241
- "WITHOUT ROWID;"
242
- );
243
- if( db_table_exists("repository","accesslog") ){
244
- db_multi_exec(
245
- "INSERT INTO lastAccess(uname, atime)"
246
- " SELECT uname, max(mtime) FROM ("
247
- " SELECT uname, mtime FROM accesslog WHERE success"
248
- " UNION ALL"
249
- " SELECT login AS uname, rcvfrom.mtime AS mtime"
250
- " FROM rcvfrom JOIN user USING(uid))"
251
- " GROUP BY 1;"
252
- );
253
- }
254
- if( zWith && zWith[0] ){
255
- zWith = mprintf(" AND fullcap(cap) GLOB '*[%q]*'", zWith);
256
- }else{
257
- zWith = "";
258
- }
259
- db_prepare(&s,
260
- "SELECT uid, login, cap, info, date(mtime,'unixepoch'),"
261
- " lower(login) AS sortkey, "
262
- " CASE WHEN info LIKE '%%expires 20%%'"
263
- " THEN substr(info,instr(lower(info),'expires')+8,10)"
264
- " END AS exp,"
265
- "atime"
266
- " FROM user LEFT JOIN lastAccess ON login=uname"
267
- " WHERE login NOT IN ('anonymous','nobody','developer','reader') %s"
268
- " ORDER BY sortkey", zWith/*safe-for-%s*/
269
- );
270
- rNow = db_double(0.0, "SELECT julianday('now');");
271
- while( db_step(&s)==SQLITE_ROW ){
272
- int uid = db_column_int(&s, 0);
273
- const char *zLogin = db_column_text(&s, 1);
274
- const char *zCap = db_column_text(&s, 2);
275
- const char *zInfo = db_column_text(&s, 3);
276
- const char *zDate = db_column_text(&s, 4);
277
- const char *zSortKey = db_column_text(&s,5);
278
- const char *zExp = db_column_text(&s,6);
279
- double rATime = db_column_double(&s,7);
280
- char *zAge = 0;
281
- if( rATime>0.0 ){
282
- zAge = human_readable_age(rNow - rATime);
283
- }
284
- @ <tr>
285
- @ <td data-sortkey='%h(zSortKey)'>\
286
- @ <a href='setup_uedit?id=%d(uid)'>%h(zLogin)</a>
287
- @ <td>%h(zCap)
288
- @ <td>%h(zInfo)
289
- @ <td>%h(zDate?zDate:"")
290
- @ <td>%h(zExp?zExp:"")
291
- @ <td data-sortkey='%f(rATime)' style='white-space:nowrap'>%s(zAge?zAge:"")
292
- @ </tr>
293
- fossil_free(zAge);
294
- }
295
- @ </tbody></table>
296
- db_finalize(&s);
297
- style_table_sorter();
298
- style_footer();
299
-}
300
-
301
-/*
302
-** WEBPAGE: setup_ulist_notes
303
-**
304
-** A documentation page showing notes about user configuration. This
305
-** information used to be a side-bar on the user list page, but has been
306
-** factored out for improved presentation.
307
-*/
308
-void setup_ulist_notes(void){
309
- style_header("User Configuration Notes");
310
- @ <h1>User Configuration Notes:</h1>
311
- @ <ol>
312
- @ <li><p>
313
- @ Every user, logged in or not, inherits the privileges of
314
- @ <span class="usertype">nobody</span>.
315
- @ </p></li>
316
- @
317
- @ <li><p>
318
- @ Any human can login as <span class="usertype">anonymous</span> since the
319
- @ password is clearly displayed on the login page for them to type. The
320
- @ purpose of requiring anonymous to log in is to prevent access by spiders.
321
- @ Every logged-in user inherits the combined privileges of
322
- @ <span class="usertype">anonymous</span> and
323
- @ <span class="usertype">nobody</span>.
324
- @ </p></li>
325
- @
326
- @ <li><p>
327
- @ Users with privilege <span class="capability">u</span> inherit the combined
328
- @ privileges of <span class="usertype">reader</span>,
329
- @ <span class="usertype">anonymous</span>, and
330
- @ <span class="usertype">nobody</span>.
331
- @ </p></li>
332
- @
333
- @ <li><p>
334
- @ Users with privilege <span class="capability">v</span> inherit the combined
335
- @ privileges of <span class="usertype">developer</span>,
336
- @ <span class="usertype">anonymous</span>, and
337
- @ <span class="usertype">nobody</span>.
338
- @ </p></li>
339
- @
340
- @ <li><p>The permission flags are as follows:</p>
341
- capabilities_table();
342
- @ </li>
343
- @ </ol>
344
- style_footer();
345
-}
346
-
347
-/*
348
-** WEBPAGE: setup_ucap_list
349
-**
350
-** A documentation page showing the meaning of the various user capabilities
351
-** code letters.
352
-*/
353
-void setup_ucap_list(void){
354
- style_header("User Capability Codes");
355
- capabilities_table();
356
- style_footer();
357
-}
358
-
359
-/*
360
-** Return true if zPw is a valid password string. A valid
361
-** password string is:
362
-**
363
-** (1) A zero-length string, or
364
-** (2) a string that contains a character other than '*'.
365
-*/
366
-static int isValidPwString(const char *zPw){
367
- if( zPw==0 ) return 0;
368
- if( zPw[0]==0 ) return 1;
369
- while( zPw[0]=='*' ){ zPw++; }
370
- return zPw[0]!=0;
371
-}
372
-
373
-/*
374
-** WEBPAGE: setup_uedit
375
-**
376
-** Edit information about a user or create a new user.
377
-** Requires Admin privileges.
378
-*/
379
-void user_edit(void){
380
- const char *zId, *zLogin, *zInfo, *zCap, *zPw;
381
- const char *zGroup;
382
- const char *zOldLogin;
383
- int doWrite;
384
- int uid, i;
385
- int higherUser = 0; /* True if user being edited is SETUP and the */
386
- /* user doing the editing is ADMIN. Disallow editing */
387
- const char *inherit[128];
388
- int a[128];
389
- const char *oa[128];
390
-
391
- /* Must have ADMIN privileges to access this page
392
- */
393
- login_check_credentials();
394
- if( !g.perm.Admin ){ login_needed(0); return; }
395
-
396
- /* Check to see if an ADMIN user is trying to edit a SETUP account.
397
- ** Don't allow that.
398
- */
399
- zId = PD("id", "0");
400
- uid = atoi(zId);
401
- if( zId && !g.perm.Setup && uid>0 ){
402
- char *zOldCaps;
403
- zOldCaps = db_text(0, "SELECT cap FROM user WHERE uid=%d",uid);
404
- higherUser = zOldCaps && strchr(zOldCaps,'s');
405
- }
406
-
407
- if( P("can") ){
408
- /* User pressed the cancel button */
409
- cgi_redirect(cgi_referer("setup_ulist"));
410
- return;
411
- }
412
-
413
- /* If we have all the necessary information, write the new or
414
- ** modified user record. After writing the user record, redirect
415
- ** to the page that displays a list of users.
416
- */
417
- doWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1);
418
- if( doWrite ){
419
- char c;
420
- char zCap[70], zNm[4];
421
- zNm[0] = 'a';
422
- zNm[2] = 0;
423
- for(i=0, c='a'; c<='z'; c++){
424
- zNm[1] = c;
425
- a[c&0x7f] = (c!='s' || g.perm.Setup) && P(zNm)!=0;
426
- if( a[c&0x7f] ) zCap[i++] = c;
427
- }
428
- for(c='0'; c<='9'; c++){
429
- zNm[1] = c;
430
- a[c&0x7f] = P(zNm)!=0;
431
- if( a[c&0x7f] ) zCap[i++] = c;
432
- }
433
- for(c='A'; c<='Z'; c++){
434
- zNm[1] = c;
435
- a[c&0x7f] = P(zNm)!=0;
436
- if( a[c&0x7f] ) zCap[i++] = c;
437
- }
438
-
439
- zCap[i] = 0;
440
- zPw = P("pw");
441
- zLogin = P("login");
442
- if( strlen(zLogin)==0 ){
443
- const char *zRef = cgi_referer("setup_ulist");
444
- style_header("User Creation Error");
445
- @ <span class="loginError">Empty login not allowed.</span>
446
- @
447
- @ <p><a href="setup_uedit?id=%d(uid)&referer=%T(zRef)">
448
- @ [Bummer]</a></p>
449
- style_footer();
450
- return;
451
- }
452
- if( isValidPwString(zPw) ){
453
- zPw = sha1_shared_secret(zPw, zLogin, 0);
454
- }else{
455
- zPw = db_text(0, "SELECT pw FROM user WHERE uid=%d", uid);
456
- }
457
- zOldLogin = db_text(0, "SELECT login FROM user WHERE uid=%d", uid);
458
- if( db_exists("SELECT 1 FROM user WHERE login=%Q AND uid!=%d",zLogin,uid) ){
459
- const char *zRef = cgi_referer("setup_ulist");
460
- style_header("User Creation Error");
461
- @ <span class="loginError">Login "%h(zLogin)" is already used by
462
- @ a different user.</span>
463
- @
464
- @ <p><a href="setup_uedit?id=%d(uid)&referer=%T(zRef)">
465
- @ [Bummer]</a></p>
466
- style_footer();
467
- return;
468
- }
469
- login_verify_csrf_secret();
470
- db_multi_exec(
471
- "REPLACE INTO user(uid,login,info,pw,cap,mtime) "
472
- "VALUES(nullif(%d,0),%Q,%Q,%Q,%Q,now())",
473
- uid, zLogin, P("info"), zPw, zCap
474
- );
475
- setup_incr_cfgcnt();
476
- admin_log( "Updated user [%q] with capabilities [%q].",
477
- zLogin, zCap );
478
- if( atoi(PD("all","0"))>0 ){
479
- Blob sql;
480
- char *zErr = 0;
481
- blob_zero(&sql);
482
- if( zOldLogin==0 ){
483
- blob_appendf(&sql,
484
- "INSERT INTO user(login)"
485
- " SELECT %Q WHERE NOT EXISTS(SELECT 1 FROM user WHERE login=%Q);",
486
- zLogin, zLogin
487
- );
488
- zOldLogin = zLogin;
489
- }
490
- blob_appendf(&sql,
491
- "UPDATE user SET login=%Q,"
492
- " pw=coalesce(shared_secret(%Q,%Q,"
493
- "(SELECT value FROM config WHERE name='project-code')),pw),"
494
- " info=%Q,"
495
- " cap=%Q,"
496
- " mtime=now()"
497
- " WHERE login=%Q;",
498
- zLogin, P("pw"), zLogin, P("info"), zCap,
499
- zOldLogin
500
- );
501
- login_group_sql(blob_str(&sql), "<li> ", " </li>\n", &zErr);
502
- blob_reset(&sql);
503
- admin_log( "Updated user [%q] in all login groups "
504
- "with capabilities [%q].",
505
- zLogin, zCap );
506
- if( zErr ){
507
- const char *zRef = cgi_referer("setup_ulist");
508
- style_header("User Change Error");
509
- admin_log( "Error updating user '%q': %s'.", zLogin, zErr );
510
- @ <span class="loginError">%h(zErr)</span>
511
- @
512
- @ <p><a href="setup_uedit?id=%d(uid)&referer=%T(zRef)">
513
- @ [Bummer]</a></p>
514
- style_footer();
515
- return;
516
- }
517
- }
518
- cgi_redirect(cgi_referer("setup_ulist"));
519
- return;
520
- }
521
-
522
- /* Load the existing information about the user, if any
523
- */
524
- zLogin = "";
525
- zInfo = "";
526
- zCap = "";
527
- zPw = "";
528
- for(i='a'; i<='z'; i++) oa[i] = "";
529
- for(i='0'; i<='9'; i++) oa[i] = "";
530
- for(i='A'; i<='Z'; i++) oa[i] = "";
531
- if( uid ){
532
- zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid);
533
- zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid);
534
- zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid);
535
- zPw = db_text("", "SELECT pw FROM user WHERE uid=%d", uid);
536
- for(i=0; zCap[i]; i++){
537
- char c = zCap[i];
538
- if( (c>='a' && c<='z') || (c>='0' && c<='9') || (c>='A' && c<='Z') ){
539
- oa[c&0x7f] = " checked=\"checked\"";
540
- }
541
- }
542
- }
543
-
544
- /* figure out inherited permissions */
545
- memset((char *)inherit, 0, sizeof(inherit));
546
- if( fossil_strcmp(zLogin, "developer") ){
547
- char *z1, *z2;
548
- z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='developer'");
549
- while( z1 && *z1 ){
550
- inherit[0x7f & *(z1++)] =
551
- "<span class=\"ueditInheritDeveloper\"><sub>[D]</sub></span>";
552
- }
553
- free(z2);
554
- }
555
- if( fossil_strcmp(zLogin, "reader") ){
556
- char *z1, *z2;
557
- z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='reader'");
558
- while( z1 && *z1 ){
559
- inherit[0x7f & *(z1++)] =
560
- "<span class=\"ueditInheritReader\"><sub>[R]</sub></span>";
561
- }
562
- free(z2);
563
- }
564
- if( fossil_strcmp(zLogin, "anonymous") ){
565
- char *z1, *z2;
566
- z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='anonymous'");
567
- while( z1 && *z1 ){
568
- inherit[0x7f & *(z1++)] =
569
- "<span class=\"ueditInheritAnonymous\"><sub>[A]</sub></span>";
570
- }
571
- free(z2);
572
- }
573
- if( fossil_strcmp(zLogin, "nobody") ){
574
- char *z1, *z2;
575
- z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='nobody'");
576
- while( z1 && *z1 ){
577
- inherit[0x7f & *(z1++)] =
578
- "<span class=\"ueditInheritNobody\"><sub>[N]</sub></span>";
579
- }
580
- free(z2);
581
- }
582
-
583
- /* Begin generating the page
584
- */
585
- style_submenu_element("Cancel", "%s", cgi_referer("setup_ulist"));
586
- if( uid ){
587
- style_header("Edit User %h", zLogin);
588
- style_submenu_element("Access Log", "%R/access_log?u=%t", zLogin);
589
- }else{
590
- style_header("Add A New User");
591
- }
592
- @ <div class="ueditCapBox">
593
- @ <form action="%s(g.zPath)" method="post"><div>
594
- login_insert_csrf_secret();
595
- if( login_is_special(zLogin) ){
596
- @ <input type="hidden" name="login" value="%s(zLogin)">
597
- @ <input type="hidden" name="info" value="">
598
- @ <input type="hidden" name="pw" value="*">
599
- }
600
- @ <input type="hidden" name="referer" value="%h(cgi_referer("setup_ulist"))">
601
- @ <table>
602
- @ <tr>
603
- @ <td class="usetupEditLabel">User ID:</td>
604
- if( uid ){
605
- @ <td>%d(uid) <input type="hidden" name="id" value="%d(uid)" /></td>
606
- }else{
607
- @ <td>(new user)<input type="hidden" name="id" value="0" /></td>
608
- }
609
- @ </tr>
610
- @ <tr>
611
- @ <td class="usetupEditLabel">Login:</td>
612
- if( login_is_special(zLogin) ){
613
- @ <td><b>%h(zLogin)</b></td>
614
- }else{
615
- @ <td><input type="text" name="login" value="%h(zLogin)" /></td>
616
- @ </tr>
617
- @ <tr>
618
- @ <td class="usetupEditLabel">Contact&nbsp;Info:</td>
619
- @ <td><textarea name="info" cols="40" rows="2">%h(zInfo)</textarea></td>
620
- }
621
- @ </tr>
622
- @ <tr>
623
- @ <td class="usetupEditLabel">Capabilities:</td>
624
- @ <td>
625
-#define B(x) inherit[x]
626
- @ <table border=0><tr><td valign="top">
627
- if( g.perm.Setup ){
628
- @ <label><input type="checkbox" name="as"%s(oa['s']) />
629
- @ Setup%s(B('s'))</label><br />
630
- }
631
- @ <label><input type="checkbox" name="aa"%s(oa['a']) />
632
- @ Admin%s(B('a'))</label><br />
633
- @ <label><input type="checkbox" name="au"%s(oa['u']) />
634
- @ Reader%s(B('u'))</label><br>
635
- @ <label><input type="checkbox" name="av"%s(oa['v']) />
636
- @ Developer%s(B('v'))</label><br />
637
- @ <label><input type="checkbox" name="ad"%s(oa['d']) />
638
- @ Delete%s(B('d'))</label><br />
639
- @ <label><input type="checkbox" name="ae"%s(oa['e']) />
640
- @ View-PII%s(B('e'))</label><br />
641
- @ <label><input type="checkbox" name="ap"%s(oa['p']) />
642
- @ Password%s(B('p'))</label><br />
643
- @ <label><input type="checkbox" name="ai"%s(oa['i']) />
644
- @ Check-In%s(B('i'))</label><br />
645
- @ <label><input type="checkbox" name="ao"%s(oa['o']) />
646
- @ Check-Out%s(B('o'))</label><br />
647
- @ <label><input type="checkbox" name="ah"%s(oa['h']) />
648
- @ Hyperlinks%s(B('h'))</label><br />
649
- @ <label><input type="checkbox" name="ab"%s(oa['b']) />
650
- @ Attachments%s(B('b'))</label><br>
651
- @ <label><input type="checkbox" name="ag"%s(oa['g']) />
652
- @ Clone%s(B('g'))</label><br />
653
-
654
- @ </td><td><td width="40"></td><td valign="top">
655
- @ <label><input type="checkbox" name="aj"%s(oa['j']) />
656
- @ Read Wiki%s(B('j'))</label><br>
657
- @ <label><input type="checkbox" name="af"%s(oa['f']) />
658
- @ New Wiki%s(B('f'))</label><br />
659
- @ <label><input type="checkbox" name="am"%s(oa['m']) />
660
- @ Append Wiki%s(B('m'))</label><br />
661
- @ <label><input type="checkbox" name="ak"%s(oa['k']) />
662
- @ Write Wiki%s(B('k'))</label><br />
663
- @ <label><input type="checkbox" name="al"%s(oa['l']) />
664
- @ Moderate Wiki%s(B('l'))</label><br />
665
- @ <label><input type="checkbox" name="ar"%s(oa['r']) />
666
- @ Read Ticket%s(B('r'))</label><br />
667
- @ <label><input type="checkbox" name="an"%s(oa['n']) />
668
- @ New Tickets%s(B('n'))</label><br />
669
- @ <label><input type="checkbox" name="ac"%s(oa['c']) />
670
- @ Append To Ticket%s(B('c'))</label><br>
671
- @ <label><input type="checkbox" name="aw"%s(oa['w']) />
672
- @ Write Tickets%s(B('w'))</label><br />
673
- @ <label><input type="checkbox" name="aq"%s(oa['q']) />
674
- @ Moderate Tickets%s(B('q'))</label><br>
675
- @ <label><input type="checkbox" name="at"%s(oa['t']) />
676
- @ Ticket Report%s(B('t'))</label><br />
677
- @ <label><input type="checkbox" name="ax"%s(oa['x']) />
678
- @ Private%s(B('x'))</label>
679
-
680
- @ </td><td><td width="40"></td><td valign="top">
681
- @ <label><input type="checkbox" name="ay"%s(oa['y']) />
682
- @ Write Unversioned%s(B('y'))</label><br />
683
- @ <label><input type="checkbox" name="az"%s(oa['z']) />
684
- @ Download Zip%s(B('z'))</label><br />
685
- @ <label><input type="checkbox" name="a2"%s(oa['2']) />
686
- @ Read Forum%s(B('2'))</label><br />
687
- @ <label><input type="checkbox" name="a3"%s(oa['3']) />
688
- @ Write Forum%s(B('3'))</label><br />
689
- @ <label><input type="checkbox" name="a4"%s(oa['4']) />
690
- @ WriteTrusted Forum%s(B('4'))</label><br>
691
- @ <label><input type="checkbox" name="a5"%s(oa['5']) />
692
- @ Moderate Forum%s(B('5'))</label><br>
693
- @ <label><input type="checkbox" name="a6"%s(oa['6']) />
694
- @ Supervise Forum%s(B('6'))</label><br>
695
- @ <label><input type="checkbox" name="a7"%s(oa['7']) />
696
- @ Email Alerts%s(B('7'))</label><br>
697
- @ <label><input type="checkbox" name="aA"%s(oa['A']) />
698
- @ Send Announcements%s(B('A'))</label><br>
699
- @ <label><input type="checkbox" name="aD"%s(oa['D']) />
700
- @ Enable Debug%s(B('D'))</label>
701
- @ </td></tr>
702
- @ </table>
703
- @ </td>
704
- @ </tr>
705
- @ <tr>
706
- @ <td class="usetupEditLabel">Selected Cap.:</td>
707
- @ <td>
708
- @ <span id="usetupEditCapability">(missing JS?)</span>
709
- @ <a href="%R/setup_ucap_list">(key)</a>
710
- @ </td>
711
- @ </tr>
712
- if( !login_is_special(zLogin) ){
713
- @ <tr>
714
- @ <td align="right">Password:</td>
715
- if( zPw[0] ){
716
- /* Obscure the password for all users */
717
- @ <td><input type="password" name="pw" value="**********" /></td>
718
- }else{
719
- /* Show an empty password as an empty input field */
720
- @ <td><input type="password" name="pw" value="" /></td>
721
- }
722
- @ </tr>
723
- }
724
- zGroup = login_group_name();
725
- if( zGroup ){
726
- @ <tr>
727
- @ <td valign="top" align="right">Scope:</td>
728
- @ <td valign="top">
729
- @ <input type="radio" name="all" checked value="0">
730
- @ Apply changes to this repository only.<br />
731
- @ <input type="radio" name="all" value="1">
732
- @ Apply changes to all repositories in the "<b>%h(zGroup)</b>"
733
- @ login group.</td></tr>
734
- }
735
- if( !higherUser ){
736
- @ <tr>
737
- @ <td>&nbsp;</td>
738
- @ <td><input type="submit" name="submit" value="Apply Changes" /></td>
739
- @ </tr>
740
- }
741
- @ </table>
742
- @ </div></form>
743
- @ </div>
744
- style_load_one_js_file("useredit.js");
745
- @ <h2>Privileges And Capabilities:</h2>
746
- @ <ul>
747
- if( higherUser ){
748
- @ <li><p class="missingPriv">
749
- @ User %h(zLogin) has Setup privileges and you only have Admin privileges
750
- @ so you are not permitted to make changes to %h(zLogin).
751
- @ </p></li>
752
- @
753
- }
754
- @ <li><p>
755
- @ The <span class="capability">Setup</span> user can make arbitrary
756
- @ configuration changes. An <span class="usertype">Admin</span> user
757
- @ can add other users and change user privileges
758
- @ and reset user passwords. Both automatically get all other privileges
759
- @ listed below. Use these two settings with discretion.
760
- @ </p></li>
761
- @
762
- @ <li><p>
763
- @ The "<span class="ueditInheritNobody"><sub>N</sub></span>" subscript suffix
764
- @ indicates the privileges of <span class="usertype">nobody</span> that
765
- @ are available to all users regardless of whether or not they are logged in.
766
- @ </p></li>
767
- @
768
- @ <li><p>
769
- @ The "<span class="ueditInheritAnonymous"><sub>A</sub></span>"
770
- @ subscript suffix
771
- @ indicates the privileges of <span class="usertype">anonymous</span> that
772
- @ are inherited by all logged-in users.
773
- @ </p></li>
774
- @
775
- @ <li><p>
776
- @ The "<span class="ueditInheritDeveloper"><sub>D</sub></span>"
777
- @ subscript suffix indicates the privileges of
778
- @ <span class="usertype">developer</span> that
779
- @ are inherited by all users with the
780
- @ <span class="capability">Developer</span> privilege.
781
- @ </p></li>
782
- @
783
- @ <li><p>
784
- @ The "<span class="ueditInheritReader"><sub>R</sub></span>" subscript suffix
785
- @ indicates the privileges of <span class="usertype">reader</span> that
786
- @ are inherited by all users with the <span class="capability">Reader</span>
787
- @ privilege.
788
- @ </p></li>
789
- @
790
- @ <li><p>
791
- @ The <span class="capability">Delete</span> privilege give the user the
792
- @ ability to erase wiki, tickets, and attachments that have been added
793
- @ by anonymous users. This capability is intended for deletion of spam.
794
- @ The delete capability is only in effect for 24 hours after the item
795
- @ is first posted. The <span class="usertype">Setup</span> user can
796
- @ delete anything at any time.
797
- @ </p></li>
798
- @
799
- @ <li><p>
800
- @ The <span class="capability">Hyperlinks</span> privilege allows a user
801
- @ to see most hyperlinks. This is recommended ON for most logged-in users
802
- @ but OFF for user "nobody" to avoid problems with spiders trying to walk
803
- @ every diff and annotation of every historical check-in and file.
804
- @ </p></li>
805
- @
806
- @ <li><p>
807
- @ The <span class="capability">Zip</span> privilege allows a user to
808
- @ see the "download as ZIP"
809
- @ hyperlink and permits access to the <tt>/zip</tt> page. This allows
810
- @ users to download ZIP archives without granting other rights like
811
- @ <span class="capability">Read</span> or
812
- @ <span class="capability">Hyperlink</span>. The "z" privilege is recommended
813
- @ for user <span class="usertype">nobody</span> so that automatic package
814
- @ downloaders can obtain the sources without going through the login
815
- @ procedure.
816
- @ </p></li>
817
- @
818
- @ <li><p>
819
- @ The <span class="capability">Check-in</span> privilege allows remote
820
- @ users to "push". The <span class="capability">Check-out</span> privilege
821
- @ allows remote users to "pull". The <span class="capability">Clone</span>
822
- @ privilege allows remote users to "clone".
823
- @ </p></li>
824
- @
825
- @ <li><p>
826
- @ The <span class="capability">Read Wiki</span>,
827
- @ <span class="capability">New Wiki</span>,
828
- @ <span class="capability">Append Wiki</span>, and
829
- @ <b>Write Wiki</b> privileges control access to wiki pages. The
830
- @ <span class="capability">Read Ticket</span>,
831
- @ <span class="capability">New Ticket</span>,
832
- @ <span class="capability">Append Ticket</span>, and
833
- @ <span class="capability">Write Ticket</span> privileges control access
834
- @ to trouble tickets.
835
- @ The <span class="capability">Ticket Report</span> privilege allows
836
- @ the user to create or edit ticket report formats.
837
- @ </p></li>
838
- @
839
- @ <li><p>
840
- @ Users with the <span class="capability">Password</span> privilege
841
- @ are allowed to change their own password. Recommended ON for most
842
- @ users but OFF for special users <span class="usertype">developer</span>,
843
- @ <span class="usertype">anonymous</span>,
844
- @ and <span class="usertype">nobody</span>.
845
- @ </p></li>
846
- @
847
- @ <li><p>
848
- @ The <span class="capability">View-PII</span> privilege allows the display
849
- @ of personally-identifiable information information such as the
850
- @ email address of users and contact
851
- @ information on tickets. Recommended OFF for
852
- @ <span class="usertype">anonymous</span> and for
853
- @ <span class="usertype">nobody</span> but ON for
854
- @ <span class="usertype">developer</span>.
855
- @ </p></li>
856
- @
857
- @ <li><p>
858
- @ The <span class="capability">Attachment</span> privilege is needed in
859
- @ order to add attachments to tickets or wiki. Write privilege on the
860
- @ ticket or wiki is also required.
861
- @ </p></li>
862
- @
863
- @ <li><p>
864
- @ Login is prohibited if the password is an empty string.
865
- @ </p></li>
866
- @ </ul>
867
- @
868
- @ <h2>Special Logins</h2>
869
- @
870
- @ <ul>
871
- @ <li><p>
872
- @ No login is required for user <span class="usertype">nobody</span>. The
873
- @ capabilities of the <span class="usertype">nobody</span> user are
874
- @ inherited by all users, regardless of whether or not they are logged in.
875
- @ To disable universal access to the repository, make sure that the
876
- @ <span class="usertype">nobody</span> user has no capabilities
877
- @ enabled. The password for <span class="usertype">nobody</span> is ignored.
878
- @ </p></li>
879
- @
880
- @ <li><p>
881
- @ Login is required for user <span class="usertype">anonymous</span> but the
882
- @ password is displayed on the login screen beside the password entry box
883
- @ so anybody who can read should be able to login as anonymous.
884
- @ On the other hand, spiders and web-crawlers will typically not
885
- @ be able to login. Set the capabilities of the
886
- @ <span class="usertype">anonymous</span>
887
- @ user to things that you want any human to be able to do, but not any
888
- @ spider. Every other logged-in user inherits the privileges of
889
- @ <span class="usertype">anonymous</span>.
890
- @ </p></li>
891
- @
892
- @ <li><p>
893
- @ The <span class="usertype">developer</span> user is intended as a template
894
- @ for trusted users with check-in privileges. When adding new trusted users,
895
- @ simply select the <span class="capability">developer</span> privilege to
896
- @ cause the new user to inherit all privileges of the
897
- @ <span class="usertype">developer</span>
898
- @ user. Similarly, the <span class="usertype">reader</span> user is a
899
- @ template for users who are allowed more access than
900
- @ <span class="usertype">anonymous</span>,
901
- @ but less than a <span class="usertype">developer</span>.
902
- @ </p></li>
903
- @ </ul>
904
- style_footer();
905
-}
906
-
907162
908163
/*
909164
** Generate a checkbox for an attribute.
910165
*/
911166
void onoff_attribute(
912167
913168
ADDED src/setupuser.c
--- src/setup.c
+++ src/setup.c
@@ -157,755 +157,10 @@
157 "Enter raw TH1 commands");
158 @ </table>
159
160 style_footer();
161 }
162
163 /*
164 ** WEBPAGE: setup_ulist
165 **
166 ** Show a list of users. Clicking on any user jumps to the edit
167 ** screen for that user. Requires Admin privileges.
168 **
169 ** Query parameters:
170 **
171 ** with=CAP Only show users that have one or more capabilities in CAP.
172 */
173 void setup_ulist(void){
174 Stmt s;
175 double rNow;
176 const char *zWith = P("with");
177
178 login_check_credentials();
179 if( !g.perm.Admin ){
180 login_needed(0);
181 return;
182 }
183
184 if( zWith==0 || zWith[0]==0 ){
185 style_submenu_element("Add", "setup_uedit");
186 style_submenu_element("Log", "access_log");
187 style_submenu_element("Help", "setup_ulist_notes");
188 style_header("User List");
189 @ <table border=1 cellpadding=2 cellspacing=0 class='userTable'>
190 @ <thead><tr>
191 @ <th>Category
192 @ <th>Capabilities (<a href='%R/setup_ucap_list'>key</a>)
193 @ <th>Info <th>Last Change</tr></thead>
194 @ <tbody>
195 db_prepare(&s,
196 "SELECT uid, login, cap, date(mtime,'unixepoch')"
197 " FROM user"
198 " WHERE login IN ('anonymous','nobody','developer','reader')"
199 " ORDER BY login"
200 );
201 while( db_step(&s)==SQLITE_ROW ){
202 int uid = db_column_int(&s, 0);
203 const char *zLogin = db_column_text(&s, 1);
204 const char *zCap = db_column_text(&s, 2);
205 const char *zDate = db_column_text(&s, 4);
206 @ <tr>
207 @ <td><a href='setup_uedit?id=%d(uid)'>%h(zLogin)</a>
208 @ <td>%h(zCap)
209
210 if( fossil_strcmp(zLogin,"anonymous")==0 ){
211 @ <td>All logged-in users
212 }else if( fossil_strcmp(zLogin,"developer")==0 ){
213 @ <td>Users with '<b>v</b>' capability
214 }else if( fossil_strcmp(zLogin,"nobody")==0 ){
215 @ <td>All users without login
216 }else if( fossil_strcmp(zLogin,"reader")==0 ){
217 @ <td>Users with '<b>u</b>' capability
218 }else{
219 @ <td>
220 }
221 if( zDate && zDate[0] ){
222 @ <td>%h(zDate)
223 }else{
224 @ <td>
225 }
226 @ </tr>
227 }
228 db_finalize(&s);
229 }else{
230 style_header("Users With Capabilities \"%h\"", zWith);
231 }
232 @ </tbody></table>
233 @ <div class='section'>Users</div>
234 @ <table border=1 cellpadding=2 cellspacing=0 class='userTable sortable' \
235 @ data-column-types='ktxTTK' data-init-sort='2'>
236 @ <thead><tr>
237 @ <th>Login Name<th>Caps<th>Info<th>Date<th>Expire<th>Last Login</tr></thead>
238 @ <tbody>
239 db_multi_exec(
240 "CREATE TEMP TABLE lastAccess(uname TEXT PRIMARY KEY, atime REAL)"
241 "WITHOUT ROWID;"
242 );
243 if( db_table_exists("repository","accesslog") ){
244 db_multi_exec(
245 "INSERT INTO lastAccess(uname, atime)"
246 " SELECT uname, max(mtime) FROM ("
247 " SELECT uname, mtime FROM accesslog WHERE success"
248 " UNION ALL"
249 " SELECT login AS uname, rcvfrom.mtime AS mtime"
250 " FROM rcvfrom JOIN user USING(uid))"
251 " GROUP BY 1;"
252 );
253 }
254 if( zWith && zWith[0] ){
255 zWith = mprintf(" AND fullcap(cap) GLOB '*[%q]*'", zWith);
256 }else{
257 zWith = "";
258 }
259 db_prepare(&s,
260 "SELECT uid, login, cap, info, date(mtime,'unixepoch'),"
261 " lower(login) AS sortkey, "
262 " CASE WHEN info LIKE '%%expires 20%%'"
263 " THEN substr(info,instr(lower(info),'expires')+8,10)"
264 " END AS exp,"
265 "atime"
266 " FROM user LEFT JOIN lastAccess ON login=uname"
267 " WHERE login NOT IN ('anonymous','nobody','developer','reader') %s"
268 " ORDER BY sortkey", zWith/*safe-for-%s*/
269 );
270 rNow = db_double(0.0, "SELECT julianday('now');");
271 while( db_step(&s)==SQLITE_ROW ){
272 int uid = db_column_int(&s, 0);
273 const char *zLogin = db_column_text(&s, 1);
274 const char *zCap = db_column_text(&s, 2);
275 const char *zInfo = db_column_text(&s, 3);
276 const char *zDate = db_column_text(&s, 4);
277 const char *zSortKey = db_column_text(&s,5);
278 const char *zExp = db_column_text(&s,6);
279 double rATime = db_column_double(&s,7);
280 char *zAge = 0;
281 if( rATime>0.0 ){
282 zAge = human_readable_age(rNow - rATime);
283 }
284 @ <tr>
285 @ <td data-sortkey='%h(zSortKey)'>\
286 @ <a href='setup_uedit?id=%d(uid)'>%h(zLogin)</a>
287 @ <td>%h(zCap)
288 @ <td>%h(zInfo)
289 @ <td>%h(zDate?zDate:"")
290 @ <td>%h(zExp?zExp:"")
291 @ <td data-sortkey='%f(rATime)' style='white-space:nowrap'>%s(zAge?zAge:"")
292 @ </tr>
293 fossil_free(zAge);
294 }
295 @ </tbody></table>
296 db_finalize(&s);
297 style_table_sorter();
298 style_footer();
299 }
300
301 /*
302 ** WEBPAGE: setup_ulist_notes
303 **
304 ** A documentation page showing notes about user configuration. This
305 ** information used to be a side-bar on the user list page, but has been
306 ** factored out for improved presentation.
307 */
308 void setup_ulist_notes(void){
309 style_header("User Configuration Notes");
310 @ <h1>User Configuration Notes:</h1>
311 @ <ol>
312 @ <li><p>
313 @ Every user, logged in or not, inherits the privileges of
314 @ <span class="usertype">nobody</span>.
315 @ </p></li>
316 @
317 @ <li><p>
318 @ Any human can login as <span class="usertype">anonymous</span> since the
319 @ password is clearly displayed on the login page for them to type. The
320 @ purpose of requiring anonymous to log in is to prevent access by spiders.
321 @ Every logged-in user inherits the combined privileges of
322 @ <span class="usertype">anonymous</span> and
323 @ <span class="usertype">nobody</span>.
324 @ </p></li>
325 @
326 @ <li><p>
327 @ Users with privilege <span class="capability">u</span> inherit the combined
328 @ privileges of <span class="usertype">reader</span>,
329 @ <span class="usertype">anonymous</span>, and
330 @ <span class="usertype">nobody</span>.
331 @ </p></li>
332 @
333 @ <li><p>
334 @ Users with privilege <span class="capability">v</span> inherit the combined
335 @ privileges of <span class="usertype">developer</span>,
336 @ <span class="usertype">anonymous</span>, and
337 @ <span class="usertype">nobody</span>.
338 @ </p></li>
339 @
340 @ <li><p>The permission flags are as follows:</p>
341 capabilities_table();
342 @ </li>
343 @ </ol>
344 style_footer();
345 }
346
347 /*
348 ** WEBPAGE: setup_ucap_list
349 **
350 ** A documentation page showing the meaning of the various user capabilities
351 ** code letters.
352 */
353 void setup_ucap_list(void){
354 style_header("User Capability Codes");
355 capabilities_table();
356 style_footer();
357 }
358
359 /*
360 ** Return true if zPw is a valid password string. A valid
361 ** password string is:
362 **
363 ** (1) A zero-length string, or
364 ** (2) a string that contains a character other than '*'.
365 */
366 static int isValidPwString(const char *zPw){
367 if( zPw==0 ) return 0;
368 if( zPw[0]==0 ) return 1;
369 while( zPw[0]=='*' ){ zPw++; }
370 return zPw[0]!=0;
371 }
372
373 /*
374 ** WEBPAGE: setup_uedit
375 **
376 ** Edit information about a user or create a new user.
377 ** Requires Admin privileges.
378 */
379 void user_edit(void){
380 const char *zId, *zLogin, *zInfo, *zCap, *zPw;
381 const char *zGroup;
382 const char *zOldLogin;
383 int doWrite;
384 int uid, i;
385 int higherUser = 0; /* True if user being edited is SETUP and the */
386 /* user doing the editing is ADMIN. Disallow editing */
387 const char *inherit[128];
388 int a[128];
389 const char *oa[128];
390
391 /* Must have ADMIN privileges to access this page
392 */
393 login_check_credentials();
394 if( !g.perm.Admin ){ login_needed(0); return; }
395
396 /* Check to see if an ADMIN user is trying to edit a SETUP account.
397 ** Don't allow that.
398 */
399 zId = PD("id", "0");
400 uid = atoi(zId);
401 if( zId && !g.perm.Setup && uid>0 ){
402 char *zOldCaps;
403 zOldCaps = db_text(0, "SELECT cap FROM user WHERE uid=%d",uid);
404 higherUser = zOldCaps && strchr(zOldCaps,'s');
405 }
406
407 if( P("can") ){
408 /* User pressed the cancel button */
409 cgi_redirect(cgi_referer("setup_ulist"));
410 return;
411 }
412
413 /* If we have all the necessary information, write the new or
414 ** modified user record. After writing the user record, redirect
415 ** to the page that displays a list of users.
416 */
417 doWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1);
418 if( doWrite ){
419 char c;
420 char zCap[70], zNm[4];
421 zNm[0] = 'a';
422 zNm[2] = 0;
423 for(i=0, c='a'; c<='z'; c++){
424 zNm[1] = c;
425 a[c&0x7f] = (c!='s' || g.perm.Setup) && P(zNm)!=0;
426 if( a[c&0x7f] ) zCap[i++] = c;
427 }
428 for(c='0'; c<='9'; c++){
429 zNm[1] = c;
430 a[c&0x7f] = P(zNm)!=0;
431 if( a[c&0x7f] ) zCap[i++] = c;
432 }
433 for(c='A'; c<='Z'; c++){
434 zNm[1] = c;
435 a[c&0x7f] = P(zNm)!=0;
436 if( a[c&0x7f] ) zCap[i++] = c;
437 }
438
439 zCap[i] = 0;
440 zPw = P("pw");
441 zLogin = P("login");
442 if( strlen(zLogin)==0 ){
443 const char *zRef = cgi_referer("setup_ulist");
444 style_header("User Creation Error");
445 @ <span class="loginError">Empty login not allowed.</span>
446 @
447 @ <p><a href="setup_uedit?id=%d(uid)&referer=%T(zRef)">
448 @ [Bummer]</a></p>
449 style_footer();
450 return;
451 }
452 if( isValidPwString(zPw) ){
453 zPw = sha1_shared_secret(zPw, zLogin, 0);
454 }else{
455 zPw = db_text(0, "SELECT pw FROM user WHERE uid=%d", uid);
456 }
457 zOldLogin = db_text(0, "SELECT login FROM user WHERE uid=%d", uid);
458 if( db_exists("SELECT 1 FROM user WHERE login=%Q AND uid!=%d",zLogin,uid) ){
459 const char *zRef = cgi_referer("setup_ulist");
460 style_header("User Creation Error");
461 @ <span class="loginError">Login "%h(zLogin)" is already used by
462 @ a different user.</span>
463 @
464 @ <p><a href="setup_uedit?id=%d(uid)&referer=%T(zRef)">
465 @ [Bummer]</a></p>
466 style_footer();
467 return;
468 }
469 login_verify_csrf_secret();
470 db_multi_exec(
471 "REPLACE INTO user(uid,login,info,pw,cap,mtime) "
472 "VALUES(nullif(%d,0),%Q,%Q,%Q,%Q,now())",
473 uid, zLogin, P("info"), zPw, zCap
474 );
475 setup_incr_cfgcnt();
476 admin_log( "Updated user [%q] with capabilities [%q].",
477 zLogin, zCap );
478 if( atoi(PD("all","0"))>0 ){
479 Blob sql;
480 char *zErr = 0;
481 blob_zero(&sql);
482 if( zOldLogin==0 ){
483 blob_appendf(&sql,
484 "INSERT INTO user(login)"
485 " SELECT %Q WHERE NOT EXISTS(SELECT 1 FROM user WHERE login=%Q);",
486 zLogin, zLogin
487 );
488 zOldLogin = zLogin;
489 }
490 blob_appendf(&sql,
491 "UPDATE user SET login=%Q,"
492 " pw=coalesce(shared_secret(%Q,%Q,"
493 "(SELECT value FROM config WHERE name='project-code')),pw),"
494 " info=%Q,"
495 " cap=%Q,"
496 " mtime=now()"
497 " WHERE login=%Q;",
498 zLogin, P("pw"), zLogin, P("info"), zCap,
499 zOldLogin
500 );
501 login_group_sql(blob_str(&sql), "<li> ", " </li>\n", &zErr);
502 blob_reset(&sql);
503 admin_log( "Updated user [%q] in all login groups "
504 "with capabilities [%q].",
505 zLogin, zCap );
506 if( zErr ){
507 const char *zRef = cgi_referer("setup_ulist");
508 style_header("User Change Error");
509 admin_log( "Error updating user '%q': %s'.", zLogin, zErr );
510 @ <span class="loginError">%h(zErr)</span>
511 @
512 @ <p><a href="setup_uedit?id=%d(uid)&referer=%T(zRef)">
513 @ [Bummer]</a></p>
514 style_footer();
515 return;
516 }
517 }
518 cgi_redirect(cgi_referer("setup_ulist"));
519 return;
520 }
521
522 /* Load the existing information about the user, if any
523 */
524 zLogin = "";
525 zInfo = "";
526 zCap = "";
527 zPw = "";
528 for(i='a'; i<='z'; i++) oa[i] = "";
529 for(i='0'; i<='9'; i++) oa[i] = "";
530 for(i='A'; i<='Z'; i++) oa[i] = "";
531 if( uid ){
532 zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid);
533 zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid);
534 zCap = db_text("", "SELECT cap FROM user WHERE uid=%d", uid);
535 zPw = db_text("", "SELECT pw FROM user WHERE uid=%d", uid);
536 for(i=0; zCap[i]; i++){
537 char c = zCap[i];
538 if( (c>='a' && c<='z') || (c>='0' && c<='9') || (c>='A' && c<='Z') ){
539 oa[c&0x7f] = " checked=\"checked\"";
540 }
541 }
542 }
543
544 /* figure out inherited permissions */
545 memset((char *)inherit, 0, sizeof(inherit));
546 if( fossil_strcmp(zLogin, "developer") ){
547 char *z1, *z2;
548 z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='developer'");
549 while( z1 && *z1 ){
550 inherit[0x7f & *(z1++)] =
551 "<span class=\"ueditInheritDeveloper\"><sub>[D]</sub></span>";
552 }
553 free(z2);
554 }
555 if( fossil_strcmp(zLogin, "reader") ){
556 char *z1, *z2;
557 z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='reader'");
558 while( z1 && *z1 ){
559 inherit[0x7f & *(z1++)] =
560 "<span class=\"ueditInheritReader\"><sub>[R]</sub></span>";
561 }
562 free(z2);
563 }
564 if( fossil_strcmp(zLogin, "anonymous") ){
565 char *z1, *z2;
566 z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='anonymous'");
567 while( z1 && *z1 ){
568 inherit[0x7f & *(z1++)] =
569 "<span class=\"ueditInheritAnonymous\"><sub>[A]</sub></span>";
570 }
571 free(z2);
572 }
573 if( fossil_strcmp(zLogin, "nobody") ){
574 char *z1, *z2;
575 z1 = z2 = db_text(0,"SELECT cap FROM user WHERE login='nobody'");
576 while( z1 && *z1 ){
577 inherit[0x7f & *(z1++)] =
578 "<span class=\"ueditInheritNobody\"><sub>[N]</sub></span>";
579 }
580 free(z2);
581 }
582
583 /* Begin generating the page
584 */
585 style_submenu_element("Cancel", "%s", cgi_referer("setup_ulist"));
586 if( uid ){
587 style_header("Edit User %h", zLogin);
588 style_submenu_element("Access Log", "%R/access_log?u=%t", zLogin);
589 }else{
590 style_header("Add A New User");
591 }
592 @ <div class="ueditCapBox">
593 @ <form action="%s(g.zPath)" method="post"><div>
594 login_insert_csrf_secret();
595 if( login_is_special(zLogin) ){
596 @ <input type="hidden" name="login" value="%s(zLogin)">
597 @ <input type="hidden" name="info" value="">
598 @ <input type="hidden" name="pw" value="*">
599 }
600 @ <input type="hidden" name="referer" value="%h(cgi_referer("setup_ulist"))">
601 @ <table>
602 @ <tr>
603 @ <td class="usetupEditLabel">User ID:</td>
604 if( uid ){
605 @ <td>%d(uid) <input type="hidden" name="id" value="%d(uid)" /></td>
606 }else{
607 @ <td>(new user)<input type="hidden" name="id" value="0" /></td>
608 }
609 @ </tr>
610 @ <tr>
611 @ <td class="usetupEditLabel">Login:</td>
612 if( login_is_special(zLogin) ){
613 @ <td><b>%h(zLogin)</b></td>
614 }else{
615 @ <td><input type="text" name="login" value="%h(zLogin)" /></td>
616 @ </tr>
617 @ <tr>
618 @ <td class="usetupEditLabel">Contact&nbsp;Info:</td>
619 @ <td><textarea name="info" cols="40" rows="2">%h(zInfo)</textarea></td>
620 }
621 @ </tr>
622 @ <tr>
623 @ <td class="usetupEditLabel">Capabilities:</td>
624 @ <td>
625 #define B(x) inherit[x]
626 @ <table border=0><tr><td valign="top">
627 if( g.perm.Setup ){
628 @ <label><input type="checkbox" name="as"%s(oa['s']) />
629 @ Setup%s(B('s'))</label><br />
630 }
631 @ <label><input type="checkbox" name="aa"%s(oa['a']) />
632 @ Admin%s(B('a'))</label><br />
633 @ <label><input type="checkbox" name="au"%s(oa['u']) />
634 @ Reader%s(B('u'))</label><br>
635 @ <label><input type="checkbox" name="av"%s(oa['v']) />
636 @ Developer%s(B('v'))</label><br />
637 @ <label><input type="checkbox" name="ad"%s(oa['d']) />
638 @ Delete%s(B('d'))</label><br />
639 @ <label><input type="checkbox" name="ae"%s(oa['e']) />
640 @ View-PII%s(B('e'))</label><br />
641 @ <label><input type="checkbox" name="ap"%s(oa['p']) />
642 @ Password%s(B('p'))</label><br />
643 @ <label><input type="checkbox" name="ai"%s(oa['i']) />
644 @ Check-In%s(B('i'))</label><br />
645 @ <label><input type="checkbox" name="ao"%s(oa['o']) />
646 @ Check-Out%s(B('o'))</label><br />
647 @ <label><input type="checkbox" name="ah"%s(oa['h']) />
648 @ Hyperlinks%s(B('h'))</label><br />
649 @ <label><input type="checkbox" name="ab"%s(oa['b']) />
650 @ Attachments%s(B('b'))</label><br>
651 @ <label><input type="checkbox" name="ag"%s(oa['g']) />
652 @ Clone%s(B('g'))</label><br />
653
654 @ </td><td><td width="40"></td><td valign="top">
655 @ <label><input type="checkbox" name="aj"%s(oa['j']) />
656 @ Read Wiki%s(B('j'))</label><br>
657 @ <label><input type="checkbox" name="af"%s(oa['f']) />
658 @ New Wiki%s(B('f'))</label><br />
659 @ <label><input type="checkbox" name="am"%s(oa['m']) />
660 @ Append Wiki%s(B('m'))</label><br />
661 @ <label><input type="checkbox" name="ak"%s(oa['k']) />
662 @ Write Wiki%s(B('k'))</label><br />
663 @ <label><input type="checkbox" name="al"%s(oa['l']) />
664 @ Moderate Wiki%s(B('l'))</label><br />
665 @ <label><input type="checkbox" name="ar"%s(oa['r']) />
666 @ Read Ticket%s(B('r'))</label><br />
667 @ <label><input type="checkbox" name="an"%s(oa['n']) />
668 @ New Tickets%s(B('n'))</label><br />
669 @ <label><input type="checkbox" name="ac"%s(oa['c']) />
670 @ Append To Ticket%s(B('c'))</label><br>
671 @ <label><input type="checkbox" name="aw"%s(oa['w']) />
672 @ Write Tickets%s(B('w'))</label><br />
673 @ <label><input type="checkbox" name="aq"%s(oa['q']) />
674 @ Moderate Tickets%s(B('q'))</label><br>
675 @ <label><input type="checkbox" name="at"%s(oa['t']) />
676 @ Ticket Report%s(B('t'))</label><br />
677 @ <label><input type="checkbox" name="ax"%s(oa['x']) />
678 @ Private%s(B('x'))</label>
679
680 @ </td><td><td width="40"></td><td valign="top">
681 @ <label><input type="checkbox" name="ay"%s(oa['y']) />
682 @ Write Unversioned%s(B('y'))</label><br />
683 @ <label><input type="checkbox" name="az"%s(oa['z']) />
684 @ Download Zip%s(B('z'))</label><br />
685 @ <label><input type="checkbox" name="a2"%s(oa['2']) />
686 @ Read Forum%s(B('2'))</label><br />
687 @ <label><input type="checkbox" name="a3"%s(oa['3']) />
688 @ Write Forum%s(B('3'))</label><br />
689 @ <label><input type="checkbox" name="a4"%s(oa['4']) />
690 @ WriteTrusted Forum%s(B('4'))</label><br>
691 @ <label><input type="checkbox" name="a5"%s(oa['5']) />
692 @ Moderate Forum%s(B('5'))</label><br>
693 @ <label><input type="checkbox" name="a6"%s(oa['6']) />
694 @ Supervise Forum%s(B('6'))</label><br>
695 @ <label><input type="checkbox" name="a7"%s(oa['7']) />
696 @ Email Alerts%s(B('7'))</label><br>
697 @ <label><input type="checkbox" name="aA"%s(oa['A']) />
698 @ Send Announcements%s(B('A'))</label><br>
699 @ <label><input type="checkbox" name="aD"%s(oa['D']) />
700 @ Enable Debug%s(B('D'))</label>
701 @ </td></tr>
702 @ </table>
703 @ </td>
704 @ </tr>
705 @ <tr>
706 @ <td class="usetupEditLabel">Selected Cap.:</td>
707 @ <td>
708 @ <span id="usetupEditCapability">(missing JS?)</span>
709 @ <a href="%R/setup_ucap_list">(key)</a>
710 @ </td>
711 @ </tr>
712 if( !login_is_special(zLogin) ){
713 @ <tr>
714 @ <td align="right">Password:</td>
715 if( zPw[0] ){
716 /* Obscure the password for all users */
717 @ <td><input type="password" name="pw" value="**********" /></td>
718 }else{
719 /* Show an empty password as an empty input field */
720 @ <td><input type="password" name="pw" value="" /></td>
721 }
722 @ </tr>
723 }
724 zGroup = login_group_name();
725 if( zGroup ){
726 @ <tr>
727 @ <td valign="top" align="right">Scope:</td>
728 @ <td valign="top">
729 @ <input type="radio" name="all" checked value="0">
730 @ Apply changes to this repository only.<br />
731 @ <input type="radio" name="all" value="1">
732 @ Apply changes to all repositories in the "<b>%h(zGroup)</b>"
733 @ login group.</td></tr>
734 }
735 if( !higherUser ){
736 @ <tr>
737 @ <td>&nbsp;</td>
738 @ <td><input type="submit" name="submit" value="Apply Changes" /></td>
739 @ </tr>
740 }
741 @ </table>
742 @ </div></form>
743 @ </div>
744 style_load_one_js_file("useredit.js");
745 @ <h2>Privileges And Capabilities:</h2>
746 @ <ul>
747 if( higherUser ){
748 @ <li><p class="missingPriv">
749 @ User %h(zLogin) has Setup privileges and you only have Admin privileges
750 @ so you are not permitted to make changes to %h(zLogin).
751 @ </p></li>
752 @
753 }
754 @ <li><p>
755 @ The <span class="capability">Setup</span> user can make arbitrary
756 @ configuration changes. An <span class="usertype">Admin</span> user
757 @ can add other users and change user privileges
758 @ and reset user passwords. Both automatically get all other privileges
759 @ listed below. Use these two settings with discretion.
760 @ </p></li>
761 @
762 @ <li><p>
763 @ The "<span class="ueditInheritNobody"><sub>N</sub></span>" subscript suffix
764 @ indicates the privileges of <span class="usertype">nobody</span> that
765 @ are available to all users regardless of whether or not they are logged in.
766 @ </p></li>
767 @
768 @ <li><p>
769 @ The "<span class="ueditInheritAnonymous"><sub>A</sub></span>"
770 @ subscript suffix
771 @ indicates the privileges of <span class="usertype">anonymous</span> that
772 @ are inherited by all logged-in users.
773 @ </p></li>
774 @
775 @ <li><p>
776 @ The "<span class="ueditInheritDeveloper"><sub>D</sub></span>"
777 @ subscript suffix indicates the privileges of
778 @ <span class="usertype">developer</span> that
779 @ are inherited by all users with the
780 @ <span class="capability">Developer</span> privilege.
781 @ </p></li>
782 @
783 @ <li><p>
784 @ The "<span class="ueditInheritReader"><sub>R</sub></span>" subscript suffix
785 @ indicates the privileges of <span class="usertype">reader</span> that
786 @ are inherited by all users with the <span class="capability">Reader</span>
787 @ privilege.
788 @ </p></li>
789 @
790 @ <li><p>
791 @ The <span class="capability">Delete</span> privilege give the user the
792 @ ability to erase wiki, tickets, and attachments that have been added
793 @ by anonymous users. This capability is intended for deletion of spam.
794 @ The delete capability is only in effect for 24 hours after the item
795 @ is first posted. The <span class="usertype">Setup</span> user can
796 @ delete anything at any time.
797 @ </p></li>
798 @
799 @ <li><p>
800 @ The <span class="capability">Hyperlinks</span> privilege allows a user
801 @ to see most hyperlinks. This is recommended ON for most logged-in users
802 @ but OFF for user "nobody" to avoid problems with spiders trying to walk
803 @ every diff and annotation of every historical check-in and file.
804 @ </p></li>
805 @
806 @ <li><p>
807 @ The <span class="capability">Zip</span> privilege allows a user to
808 @ see the "download as ZIP"
809 @ hyperlink and permits access to the <tt>/zip</tt> page. This allows
810 @ users to download ZIP archives without granting other rights like
811 @ <span class="capability">Read</span> or
812 @ <span class="capability">Hyperlink</span>. The "z" privilege is recommended
813 @ for user <span class="usertype">nobody</span> so that automatic package
814 @ downloaders can obtain the sources without going through the login
815 @ procedure.
816 @ </p></li>
817 @
818 @ <li><p>
819 @ The <span class="capability">Check-in</span> privilege allows remote
820 @ users to "push". The <span class="capability">Check-out</span> privilege
821 @ allows remote users to "pull". The <span class="capability">Clone</span>
822 @ privilege allows remote users to "clone".
823 @ </p></li>
824 @
825 @ <li><p>
826 @ The <span class="capability">Read Wiki</span>,
827 @ <span class="capability">New Wiki</span>,
828 @ <span class="capability">Append Wiki</span>, and
829 @ <b>Write Wiki</b> privileges control access to wiki pages. The
830 @ <span class="capability">Read Ticket</span>,
831 @ <span class="capability">New Ticket</span>,
832 @ <span class="capability">Append Ticket</span>, and
833 @ <span class="capability">Write Ticket</span> privileges control access
834 @ to trouble tickets.
835 @ The <span class="capability">Ticket Report</span> privilege allows
836 @ the user to create or edit ticket report formats.
837 @ </p></li>
838 @
839 @ <li><p>
840 @ Users with the <span class="capability">Password</span> privilege
841 @ are allowed to change their own password. Recommended ON for most
842 @ users but OFF for special users <span class="usertype">developer</span>,
843 @ <span class="usertype">anonymous</span>,
844 @ and <span class="usertype">nobody</span>.
845 @ </p></li>
846 @
847 @ <li><p>
848 @ The <span class="capability">View-PII</span> privilege allows the display
849 @ of personally-identifiable information information such as the
850 @ email address of users and contact
851 @ information on tickets. Recommended OFF for
852 @ <span class="usertype">anonymous</span> and for
853 @ <span class="usertype">nobody</span> but ON for
854 @ <span class="usertype">developer</span>.
855 @ </p></li>
856 @
857 @ <li><p>
858 @ The <span class="capability">Attachment</span> privilege is needed in
859 @ order to add attachments to tickets or wiki. Write privilege on the
860 @ ticket or wiki is also required.
861 @ </p></li>
862 @
863 @ <li><p>
864 @ Login is prohibited if the password is an empty string.
865 @ </p></li>
866 @ </ul>
867 @
868 @ <h2>Special Logins</h2>
869 @
870 @ <ul>
871 @ <li><p>
872 @ No login is required for user <span class="usertype">nobody</span>. The
873 @ capabilities of the <span class="usertype">nobody</span> user are
874 @ inherited by all users, regardless of whether or not they are logged in.
875 @ To disable universal access to the repository, make sure that the
876 @ <span class="usertype">nobody</span> user has no capabilities
877 @ enabled. The password for <span class="usertype">nobody</span> is ignored.
878 @ </p></li>
879 @
880 @ <li><p>
881 @ Login is required for user <span class="usertype">anonymous</span> but the
882 @ password is displayed on the login screen beside the password entry box
883 @ so anybody who can read should be able to login as anonymous.
884 @ On the other hand, spiders and web-crawlers will typically not
885 @ be able to login. Set the capabilities of the
886 @ <span class="usertype">anonymous</span>
887 @ user to things that you want any human to be able to do, but not any
888 @ spider. Every other logged-in user inherits the privileges of
889 @ <span class="usertype">anonymous</span>.
890 @ </p></li>
891 @
892 @ <li><p>
893 @ The <span class="usertype">developer</span> user is intended as a template
894 @ for trusted users with check-in privileges. When adding new trusted users,
895 @ simply select the <span class="capability">developer</span> privilege to
896 @ cause the new user to inherit all privileges of the
897 @ <span class="usertype">developer</span>
898 @ user. Similarly, the <span class="usertype">reader</span> user is a
899 @ template for users who are allowed more access than
900 @ <span class="usertype">anonymous</span>,
901 @ but less than a <span class="usertype">developer</span>.
902 @ </p></li>
903 @ </ul>
904 style_footer();
905 }
906
907
908 /*
909 ** Generate a checkbox for an attribute.
910 */
911 void onoff_attribute(
912
913 DDED src/setupuser.c
--- src/setup.c
+++ src/setup.c
@@ -157,755 +157,10 @@
157 "Enter raw TH1 commands");
158 @ </table>
159
160 style_footer();
161 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
163 /*
164 ** Generate a checkbox for an attribute.
165 */
166 void onoff_attribute(
167
168 DDED src/setupuser.c
--- a/src/setupuser.c
+++ b/src/setupuser.c
@@ -0,0 +1,203 @@
1
+/*
2
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
3
+(void){
4
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
5
+*** _p}else{
6
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
7
+(void){
8
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
9
+*** _p/*
10
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
11
+(void){
12
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
13
+*** _pname="pw"name="pw"** _page_page_pagest_pagevalue="%d(uid)** _page_page_pagest_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCodeerCode)zSCode && zSCode[0]/%s(zSCod_one_js_file/*
14
+*** _pnamzSCode fossil_free(zSC40"autocompleteautocompcompletestyle_load_one_js_file(List");
15
+ ocompletestyle_load_one_js_file(void){
16
+(void){
17
+bshex(subscriberC'>
18
+ " cols="40"autocom_file/*
19
+*** _p}else{
20
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
21
+(void){
22
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
23
+*** _p/*
24
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
25
+(void){
26
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
27
+*** _pname="pw"name="pw"c!='s'}else{
28
+ s With Capabilities \"%h\"", zWithCode; /* Subshex(subscriberCo/*
29
+*** _pa/*
30
+*** _page_page_pagesetup_uedit_pode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
31
+*** _p}else{
32
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
33
+(void){
34
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
35
+*** _p/*
36
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
37
+(void){
38
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
39
+*** _pname="pw"name="pw"c!='s'doWrite;
40
+ int uid, i;de[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
41
+(void){
42
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
43
+*** _p}else{
44
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
45
+(void){
46
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
47
+*** _p/*
48
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info/*
49
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_frdoWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1);
50
+ if( doWrite ){.submit"autocompleteautocomple/* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
51
+(void){
52
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
53
+*** _p}else{
54
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
55
+(void){
56
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
57
+*** _p/*
58
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
59
+(void){
60
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
61
+*** _pname="pw"name="pw"** _page_page_pagest_pagevalue="%d(uid)** _page_page_pagest_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCodeerCode)zSCode && zSCode[0]/%s(zSCod_one_js_file/*
62
+*** _pnamzSCode fossil_free(zSC40"autocompleteautocompcompletestyle_load_one_js_file(List");
63
+ ocompletestyle_load_one_js_file(void){
64
+(void){
65
+bshex(subscriberC'>
66
+ " cols="40"autocom_file/*
67
+*** _p}else{
68
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
69
+(void){
70
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
71
+*** _p/*
72
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
73
+(void){
74
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
75
+*** _pname="pw"name="pw"c!='s'}else{
76
+ s With Capabilities \"%h\"", zWithCode; /* Subshex(subscriberCo/*
77
+*** _pa/*
78
+*** _page_page_pagesetup_uedit_pode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
79
+*** _p}else{
80
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
81
+(void){
82
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
83
+*** _p/*
84
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
85
+(void){
86
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
87
+*** _pname="pw"name="pw"c!='s'doWrite;
88
+ int uid, i;de[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
89
+(void){
90
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
91
+*** _p}else{
92
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
93
+(void){
94
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
95
+*** _p/*
96
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info/*
97
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_frdoWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1);
98
+ if( doWrite ){.submit"autocompleteautocomple/*/*
99
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
100
+(void){
101
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
102
+*** _p}else{
103
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
104
+(void){
105
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
106
+*** _p/*
107
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
108
+(void){
109
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
110
+*** _pname="pw"name="pw"** _page_page_pagest_pagevalue="%d(uid)** _page_page_pagest_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCodeerCode)zSCode && zSCode[0]/%s(zSCod_one_js_file/*
111
+*** _pnamzSCode fossil_free(zSC40"autocompleteautocompcompletestyle_load_one_js_file(List");
112
+ ocompletestyle_load_one_js_file(void){
113
+(void){
114
+bshex(subscriberC'>
115
+ " cols="40"autocom_file/*
116
+*** _p}else{
117
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
118
+(void){
119
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
120
+*** _p/*
121
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
122
+(void){
123
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
124
+*** _pname="pw"name="pw"c!='s'}else{
125
+ s With Capabilities \"%h\"", zWithCode; /* Subshex(subscriberCo/*
126
+*** _pa/*
127
+*** _page_page_pagesetup_uedit_pode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
128
+*** _p}else{
129
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
130
+(void){
131
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
132
+*** _p/*
133
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
134
+(void){
135
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
136
+*** _pname="pw"name="pw"c!='s'doWrite;
137
+ int uid, i;de[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
138
+(void){
139
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
140
+*** _p}else{
141
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
142
+(void){
143
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
144
+*** _p/*
145
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info/*
146
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_frdoWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1);
147
+ if( doWrite ){.submit"autocompleteautocomple/*_js_file(void){
148
+(void){
149
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
150
+*** _p}else{
151
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
152
+(void){
153
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
154
+*** _p/*
155
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(z/*
156
+*** _page_page_pagesetup_uedtable border=0><tr><td valign="toptyle_load_one_js_fil/*
157
+*** _page_pag<br />
158
+ @ <br>
159
+ @ <br />
160
+ @ <br />
161
+ @ <br />
162
+ @ <br />
163
+ @ <br />
164
+ @ o"%s(oa['o<br />
165
+ @ <br />
166
+ @ <br>
167
+ @ <br />
168
+
169
+ @ </td><td><td width="40"></td><td valign="top">
170
+ @ <br>
171
+ @ <br />
172
+ @ <br />
173
+ @ k"%s(oa['k<br />
174
+ @ <br />
175
+ @ <br />
176
+ @ <br />
177
+ @ <br>
178
+ @ ww<br />
179
+ @ <br>
180
+ @ <br />
181
+ @
182
+ @ </td><td><td width="40"><y"%s(oa['y<br />
183
+ @ <br />
184
+ @ <br />
185
+ @ <br />
186
+ @ <br>
187
+ @ <br>
188
+ @ <br>
189
+ @ <br>
190
+ @ <br>
191
+ @ td></tr>
192
+ @ </table** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
193
+(void){
194
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
195
+*** _p}else{
196
+}="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
197
+(void){
198
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
199
+*** _p/*
200
+*** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
201
+(void){
202
+bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
203
+*** _pname="pw"name="pw"** _page_page_pagest_pagge2
--- a/src/setupuser.c
+++ b/src/setupuser.c
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/setupuser.c
+++ b/src/setupuser.c
@@ -0,0 +1,203 @@
1 /*
2 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
3 (void){
4 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
5 *** _p}else{
6 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
7 (void){
8 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
9 *** _p/*
10 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
11 (void){
12 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
13 *** _pname="pw"name="pw"** _page_page_pagest_pagevalue="%d(uid)** _page_page_pagest_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCodeerCode)zSCode && zSCode[0]/%s(zSCod_one_js_file/*
14 *** _pnamzSCode fossil_free(zSC40"autocompleteautocompcompletestyle_load_one_js_file(List");
15 ocompletestyle_load_one_js_file(void){
16 (void){
17 bshex(subscriberC'>
18 " cols="40"autocom_file/*
19 *** _p}else{
20 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
21 (void){
22 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
23 *** _p/*
24 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
25 (void){
26 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
27 *** _pname="pw"name="pw"c!='s'}else{
28 s With Capabilities \"%h\"", zWithCode; /* Subshex(subscriberCo/*
29 *** _pa/*
30 *** _page_page_pagesetup_uedit_pode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
31 *** _p}else{
32 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
33 (void){
34 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
35 *** _p/*
36 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
37 (void){
38 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
39 *** _pname="pw"name="pw"c!='s'doWrite;
40 int uid, i;de[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
41 (void){
42 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
43 *** _p}else{
44 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
45 (void){
46 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
47 *** _p/*
48 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info/*
49 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_frdoWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1);
50 if( doWrite ){.submit"autocompleteautocomple/* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
51 (void){
52 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
53 *** _p}else{
54 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
55 (void){
56 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
57 *** _p/*
58 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
59 (void){
60 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
61 *** _pname="pw"name="pw"** _page_page_pagest_pagevalue="%d(uid)** _page_page_pagest_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCodeerCode)zSCode && zSCode[0]/%s(zSCod_one_js_file/*
62 *** _pnamzSCode fossil_free(zSC40"autocompleteautocompcompletestyle_load_one_js_file(List");
63 ocompletestyle_load_one_js_file(void){
64 (void){
65 bshex(subscriberC'>
66 " cols="40"autocom_file/*
67 *** _p}else{
68 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
69 (void){
70 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
71 *** _p/*
72 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
73 (void){
74 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
75 *** _pname="pw"name="pw"c!='s'}else{
76 s With Capabilities \"%h\"", zWithCode; /* Subshex(subscriberCo/*
77 *** _pa/*
78 *** _page_page_pagesetup_uedit_pode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
79 *** _p}else{
80 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
81 (void){
82 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
83 *** _p/*
84 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
85 (void){
86 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
87 *** _pname="pw"name="pw"c!='s'doWrite;
88 int uid, i;de[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
89 (void){
90 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
91 *** _p}else{
92 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
93 (void){
94 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
95 *** _p/*
96 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info/*
97 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_frdoWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1);
98 if( doWrite ){.submit"autocompleteautocomple/*/*
99 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
100 (void){
101 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
102 *** _p}else{
103 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
104 (void){
105 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
106 *** _p/*
107 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
108 (void){
109 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
110 *** _pname="pw"name="pw"** _page_page_pagest_pagevalue="%d(uid)** _page_page_pagest_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCodeerCode)zSCode && zSCode[0]/%s(zSCod_one_js_file/*
111 *** _pnamzSCode fossil_free(zSC40"autocompleteautocompcompletestyle_load_one_js_file(List");
112 ocompletestyle_load_one_js_file(void){
113 (void){
114 bshex(subscriberC'>
115 " cols="40"autocom_file/*
116 *** _p}else{
117 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
118 (void){
119 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
120 *** _p/*
121 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
122 (void){
123 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
124 *** _pname="pw"name="pw"c!='s'}else{
125 s With Capabilities \"%h\"", zWithCode; /* Subshex(subscriberCo/*
126 *** _pa/*
127 *** _page_page_pagesetup_uedit_pode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
128 *** _p}else{
129 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
130 (void){
131 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
132 *** _p/*
133 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
134 (void){
135 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
136 *** _pname="pw"name="pw"c!='s'doWrite;
137 int uid, i;de[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
138 (void){
139 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
140 *** _p}else{
141 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
142 (void){
143 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
144 *** _p/*
145 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info/*
146 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_frdoWrite = cgi_all("login","info","pw") && !higherUser && cgi_csrf_safe(1);
147 if( doWrite ){.submit"autocompleteautocomple/*_js_file(void){
148 (void){
149 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
150 *** _p}else{
151 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
152 (void){
153 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
154 *** _p/*
155 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(z/*
156 *** _page_page_pagesetup_uedtable border=0><tr><td valign="toptyle_load_one_js_fil/*
157 *** _page_pag<br />
158 @ <br>
159 @ <br />
160 @ <br />
161 @ <br />
162 @ <br />
163 @ <br />
164 @ o"%s(oa['o<br />
165 @ <br />
166 @ <br>
167 @ <br />
168
169 @ </td><td><td width="40"></td><td valign="top">
170 @ <br>
171 @ <br />
172 @ <br />
173 @ k"%s(oa['k<br />
174 @ <br />
175 @ <br />
176 @ <br />
177 @ <br>
178 @ ww<br />
179 @ <br>
180 @ <br />
181 @
182 @ </td><td><td width="40"><y"%s(oa['y<br />
183 @ <br />
184 @ <br />
185 @ <br />
186 @ <br>
187 @ <br>
188 @ <br>
189 @ <br>
190 @ <br>
191 @ td></tr>
192 @ </table** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
193 (void){
194 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
195 *** _p}else{
196 }="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
197 (void){
198 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
199 *** _p/*
200 *** _page_page_pagesetup_uedit_pagevalue="%d(uid)" type="text" name="lochar *zSCode; /* Subshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file(void){
201 (void){
202 bshex(subscriberCode)zSCode && zSCode[0]/%s(zSCode fossil_free(zSCode);name="info" cols="40"autocompleteautocompletestyle_load_one_js_file/*
203 *** _pname="pw"name="pw"** _page_page_pagest_pagge2
+10 -4
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
2828
2929
SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB
3030
3131
SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
3232
33
-SRC = add_.c allrepo_.c attach_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c email_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
33
+SRC = add_.c allrepo_.c attach_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c email_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
3434
35
-OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\email$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
35
+OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\email$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
3636
3737
3838
RC=$(DMDIR)\bin\rcc
3939
RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
4040
@@ -49,11 +49,11 @@
4949
5050
$(OBJDIR)\fossil.res: $B\win\fossil.rc
5151
$(RC) $(RCFLAGS) -o$@ $**
5252
5353
$(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54
- +echo add allrepo attach backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc email encode etag event export file finfo foci forum fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile webmail wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
54
+ +echo add allrepo attach backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc email encode etag event export file finfo foci forum fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup setupuser sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile webmail wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
5555
+echo fossil >> $@
5656
+echo fossil >> $@
5757
+echo $(LIBS) >> $@
5858
+echo. >> $@
5959
+echo fossil >> $@
@@ -704,10 +704,16 @@
704704
$(OBJDIR)\setup$O : setup_.c setup.h
705705
$(TCC) -o$@ -c setup_.c
706706
707707
setup_.c : $(SRCDIR)\setup.c
708708
+translate$E $** > $@
709
+
710
+$(OBJDIR)\setupuser$O : setupuser_.c setupuser.h
711
+ $(TCC) -o$@ -c setupuser_.c
712
+
713
+setupuser_.c : $(SRCDIR)\setupuser.c
714
+ +translate$E $** > $@
709715
710716
$(OBJDIR)\sha1$O : sha1_.c sha1.h
711717
$(TCC) -o$@ -c sha1_.c
712718
713719
sha1_.c : $(SRCDIR)\sha1.c
@@ -934,7 +940,7 @@
934940
935941
zip_.c : $(SRCDIR)\zip.c
936942
+translate$E $** > $@
937943
938944
headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h
939
- +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h email_.c:email.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h webmail_.c:webmail.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
945
+ +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h email_.c:email.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h setupuser_.c:setupuser.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h webmail_.c:webmail.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
940946
@copy /Y nul: headers
941947
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB
30
31 SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c allrepo_.c attach_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c email_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
34
35 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\email$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
36
37
38 RC=$(DMDIR)\bin\rcc
39 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
40
@@ -49,11 +49,11 @@
49
50 $(OBJDIR)\fossil.res: $B\win\fossil.rc
51 $(RC) $(RCFLAGS) -o$@ $**
52
53 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54 +echo add allrepo attach backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc email encode etag event export file finfo foci forum fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile webmail wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
55 +echo fossil >> $@
56 +echo fossil >> $@
57 +echo $(LIBS) >> $@
58 +echo. >> $@
59 +echo fossil >> $@
@@ -704,10 +704,16 @@
704 $(OBJDIR)\setup$O : setup_.c setup.h
705 $(TCC) -o$@ -c setup_.c
706
707 setup_.c : $(SRCDIR)\setup.c
708 +translate$E $** > $@
 
 
 
 
 
 
709
710 $(OBJDIR)\sha1$O : sha1_.c sha1.h
711 $(TCC) -o$@ -c sha1_.c
712
713 sha1_.c : $(SRCDIR)\sha1.c
@@ -934,7 +940,7 @@
934
935 zip_.c : $(SRCDIR)\zip.c
936 +translate$E $** > $@
937
938 headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h
939 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h email_.c:email.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h webmail_.c:webmail.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
940 @copy /Y nul: headers
941
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB
30
31 SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c allrepo_.c attach_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c email_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
34
35 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\email$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
36
37
38 RC=$(DMDIR)\bin\rcc
39 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
40
@@ -49,11 +49,11 @@
49
50 $(OBJDIR)\fossil.res: $B\win\fossil.rc
51 $(RC) $(RCFLAGS) -o$@ $**
52
53 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54 +echo add allrepo attach backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc email encode etag event export file finfo foci forum fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup setupuser sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile webmail wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
55 +echo fossil >> $@
56 +echo fossil >> $@
57 +echo $(LIBS) >> $@
58 +echo. >> $@
59 +echo fossil >> $@
@@ -704,10 +704,16 @@
704 $(OBJDIR)\setup$O : setup_.c setup.h
705 $(TCC) -o$@ -c setup_.c
706
707 setup_.c : $(SRCDIR)\setup.c
708 +translate$E $** > $@
709
710 $(OBJDIR)\setupuser$O : setupuser_.c setupuser.h
711 $(TCC) -o$@ -c setupuser_.c
712
713 setupuser_.c : $(SRCDIR)\setupuser.c
714 +translate$E $** > $@
715
716 $(OBJDIR)\sha1$O : sha1_.c sha1.h
717 $(TCC) -o$@ -c sha1_.c
718
719 sha1_.c : $(SRCDIR)\sha1.c
@@ -934,7 +940,7 @@
940
941 zip_.c : $(SRCDIR)\zip.c
942 +translate$E $** > $@
943
944 headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h
945 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h email_.c:email.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h setupuser_.c:setupuser.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h webmail_.c:webmail.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
946 @copy /Y nul: headers
947
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -532,10 +532,11 @@
532532
$(SRCDIR)/rss.c \
533533
$(SRCDIR)/schema.c \
534534
$(SRCDIR)/search.c \
535535
$(SRCDIR)/security_audit.c \
536536
$(SRCDIR)/setup.c \
537
+ $(SRCDIR)/setupuser.c \
537538
$(SRCDIR)/sha1.c \
538539
$(SRCDIR)/sha1hard.c \
539540
$(SRCDIR)/sha3.c \
540541
$(SRCDIR)/shun.c \
541542
$(SRCDIR)/sitemap.c \
@@ -740,10 +741,11 @@
740741
$(OBJDIR)/rss_.c \
741742
$(OBJDIR)/schema_.c \
742743
$(OBJDIR)/search_.c \
743744
$(OBJDIR)/security_audit_.c \
744745
$(OBJDIR)/setup_.c \
746
+ $(OBJDIR)/setupuser_.c \
745747
$(OBJDIR)/sha1_.c \
746748
$(OBJDIR)/sha1hard_.c \
747749
$(OBJDIR)/sha3_.c \
748750
$(OBJDIR)/shun_.c \
749751
$(OBJDIR)/sitemap_.c \
@@ -876,10 +878,11 @@
876878
$(OBJDIR)/rss.o \
877879
$(OBJDIR)/schema.o \
878880
$(OBJDIR)/search.o \
879881
$(OBJDIR)/security_audit.o \
880882
$(OBJDIR)/setup.o \
883
+ $(OBJDIR)/setupuser.o \
881884
$(OBJDIR)/sha1.o \
882885
$(OBJDIR)/sha1hard.o \
883886
$(OBJDIR)/sha3.o \
884887
$(OBJDIR)/shun.o \
885888
$(OBJDIR)/sitemap.o \
@@ -1231,10 +1234,11 @@
12311234
$(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \
12321235
$(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \
12331236
$(OBJDIR)/search_.c:$(OBJDIR)/search.h \
12341237
$(OBJDIR)/security_audit_.c:$(OBJDIR)/security_audit.h \
12351238
$(OBJDIR)/setup_.c:$(OBJDIR)/setup.h \
1239
+ $(OBJDIR)/setupuser_.c:$(OBJDIR)/setupuser.h \
12361240
$(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h \
12371241
$(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \
12381242
$(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \
12391243
$(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \
12401244
$(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \
@@ -2045,10 +2049,18 @@
20452049
20462050
$(OBJDIR)/setup.o: $(OBJDIR)/setup_.c $(OBJDIR)/setup.h $(SRCDIR)/config.h
20472051
$(XTCC) -o $(OBJDIR)/setup.o -c $(OBJDIR)/setup_.c
20482052
20492053
$(OBJDIR)/setup.h: $(OBJDIR)/headers
2054
+
2055
+$(OBJDIR)/setupuser_.c: $(SRCDIR)/setupuser.c $(TRANSLATE)
2056
+ $(TRANSLATE) $(SRCDIR)/setupuser.c >$@
2057
+
2058
+$(OBJDIR)/setupuser.o: $(OBJDIR)/setupuser_.c $(OBJDIR)/setupuser.h $(SRCDIR)/config.h
2059
+ $(XTCC) -o $(OBJDIR)/setupuser.o -c $(OBJDIR)/setupuser_.c
2060
+
2061
+$(OBJDIR)/setupuser.h: $(OBJDIR)/headers
20502062
20512063
$(OBJDIR)/sha1_.c: $(SRCDIR)/sha1.c $(TRANSLATE)
20522064
$(TRANSLATE) $(SRCDIR)/sha1.c >$@
20532065
20542066
$(OBJDIR)/sha1.o: $(OBJDIR)/sha1_.c $(OBJDIR)/sha1.h $(SRCDIR)/config.h
20552067
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -532,10 +532,11 @@
532 $(SRCDIR)/rss.c \
533 $(SRCDIR)/schema.c \
534 $(SRCDIR)/search.c \
535 $(SRCDIR)/security_audit.c \
536 $(SRCDIR)/setup.c \
 
537 $(SRCDIR)/sha1.c \
538 $(SRCDIR)/sha1hard.c \
539 $(SRCDIR)/sha3.c \
540 $(SRCDIR)/shun.c \
541 $(SRCDIR)/sitemap.c \
@@ -740,10 +741,11 @@
740 $(OBJDIR)/rss_.c \
741 $(OBJDIR)/schema_.c \
742 $(OBJDIR)/search_.c \
743 $(OBJDIR)/security_audit_.c \
744 $(OBJDIR)/setup_.c \
 
745 $(OBJDIR)/sha1_.c \
746 $(OBJDIR)/sha1hard_.c \
747 $(OBJDIR)/sha3_.c \
748 $(OBJDIR)/shun_.c \
749 $(OBJDIR)/sitemap_.c \
@@ -876,10 +878,11 @@
876 $(OBJDIR)/rss.o \
877 $(OBJDIR)/schema.o \
878 $(OBJDIR)/search.o \
879 $(OBJDIR)/security_audit.o \
880 $(OBJDIR)/setup.o \
 
881 $(OBJDIR)/sha1.o \
882 $(OBJDIR)/sha1hard.o \
883 $(OBJDIR)/sha3.o \
884 $(OBJDIR)/shun.o \
885 $(OBJDIR)/sitemap.o \
@@ -1231,10 +1234,11 @@
1231 $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \
1232 $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \
1233 $(OBJDIR)/search_.c:$(OBJDIR)/search.h \
1234 $(OBJDIR)/security_audit_.c:$(OBJDIR)/security_audit.h \
1235 $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h \
 
1236 $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h \
1237 $(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \
1238 $(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \
1239 $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \
1240 $(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \
@@ -2045,10 +2049,18 @@
2045
2046 $(OBJDIR)/setup.o: $(OBJDIR)/setup_.c $(OBJDIR)/setup.h $(SRCDIR)/config.h
2047 $(XTCC) -o $(OBJDIR)/setup.o -c $(OBJDIR)/setup_.c
2048
2049 $(OBJDIR)/setup.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
2050
2051 $(OBJDIR)/sha1_.c: $(SRCDIR)/sha1.c $(TRANSLATE)
2052 $(TRANSLATE) $(SRCDIR)/sha1.c >$@
2053
2054 $(OBJDIR)/sha1.o: $(OBJDIR)/sha1_.c $(OBJDIR)/sha1.h $(SRCDIR)/config.h
2055
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -532,10 +532,11 @@
532 $(SRCDIR)/rss.c \
533 $(SRCDIR)/schema.c \
534 $(SRCDIR)/search.c \
535 $(SRCDIR)/security_audit.c \
536 $(SRCDIR)/setup.c \
537 $(SRCDIR)/setupuser.c \
538 $(SRCDIR)/sha1.c \
539 $(SRCDIR)/sha1hard.c \
540 $(SRCDIR)/sha3.c \
541 $(SRCDIR)/shun.c \
542 $(SRCDIR)/sitemap.c \
@@ -740,10 +741,11 @@
741 $(OBJDIR)/rss_.c \
742 $(OBJDIR)/schema_.c \
743 $(OBJDIR)/search_.c \
744 $(OBJDIR)/security_audit_.c \
745 $(OBJDIR)/setup_.c \
746 $(OBJDIR)/setupuser_.c \
747 $(OBJDIR)/sha1_.c \
748 $(OBJDIR)/sha1hard_.c \
749 $(OBJDIR)/sha3_.c \
750 $(OBJDIR)/shun_.c \
751 $(OBJDIR)/sitemap_.c \
@@ -876,10 +878,11 @@
878 $(OBJDIR)/rss.o \
879 $(OBJDIR)/schema.o \
880 $(OBJDIR)/search.o \
881 $(OBJDIR)/security_audit.o \
882 $(OBJDIR)/setup.o \
883 $(OBJDIR)/setupuser.o \
884 $(OBJDIR)/sha1.o \
885 $(OBJDIR)/sha1hard.o \
886 $(OBJDIR)/sha3.o \
887 $(OBJDIR)/shun.o \
888 $(OBJDIR)/sitemap.o \
@@ -1231,10 +1234,11 @@
1234 $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h \
1235 $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h \
1236 $(OBJDIR)/search_.c:$(OBJDIR)/search.h \
1237 $(OBJDIR)/security_audit_.c:$(OBJDIR)/security_audit.h \
1238 $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h \
1239 $(OBJDIR)/setupuser_.c:$(OBJDIR)/setupuser.h \
1240 $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h \
1241 $(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \
1242 $(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \
1243 $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \
1244 $(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \
@@ -2045,10 +2049,18 @@
2049
2050 $(OBJDIR)/setup.o: $(OBJDIR)/setup_.c $(OBJDIR)/setup.h $(SRCDIR)/config.h
2051 $(XTCC) -o $(OBJDIR)/setup.o -c $(OBJDIR)/setup_.c
2052
2053 $(OBJDIR)/setup.h: $(OBJDIR)/headers
2054
2055 $(OBJDIR)/setupuser_.c: $(SRCDIR)/setupuser.c $(TRANSLATE)
2056 $(TRANSLATE) $(SRCDIR)/setupuser.c >$@
2057
2058 $(OBJDIR)/setupuser.o: $(OBJDIR)/setupuser_.c $(OBJDIR)/setupuser.h $(SRCDIR)/config.h
2059 $(XTCC) -o $(OBJDIR)/setupuser.o -c $(OBJDIR)/setupuser_.c
2060
2061 $(OBJDIR)/setupuser.h: $(OBJDIR)/headers
2062
2063 $(OBJDIR)/sha1_.c: $(SRCDIR)/sha1.c $(TRANSLATE)
2064 $(TRANSLATE) $(SRCDIR)/sha1.c >$@
2065
2066 $(OBJDIR)/sha1.o: $(OBJDIR)/sha1_.c $(OBJDIR)/sha1.h $(SRCDIR)/config.h
2067
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -474,10 +474,11 @@
474474
rss_.c \
475475
schema_.c \
476476
search_.c \
477477
security_audit_.c \
478478
setup_.c \
479
+ setupuser_.c \
479480
sha1_.c \
480481
sha1hard_.c \
481482
sha3_.c \
482483
shun_.c \
483484
sitemap_.c \
@@ -681,10 +682,11 @@
681682
$(OX)\rss$O \
682683
$(OX)\schema$O \
683684
$(OX)\search$O \
684685
$(OX)\security_audit$O \
685686
$(OX)\setup$O \
687
+ $(OX)\setupuser$O \
686688
$(OX)\sha1$O \
687689
$(OX)\sha1hard$O \
688690
$(OX)\sha3$O \
689691
$(OX)\shell$O \
690692
$(OX)\shun$O \
@@ -876,10 +878,11 @@
876878
echo $(OX)\rss.obj >> $@
877879
echo $(OX)\schema.obj >> $@
878880
echo $(OX)\search.obj >> $@
879881
echo $(OX)\security_audit.obj >> $@
880882
echo $(OX)\setup.obj >> $@
883
+ echo $(OX)\setupuser.obj >> $@
881884
echo $(OX)\sha1.obj >> $@
882885
echo $(OX)\sha1hard.obj >> $@
883886
echo $(OX)\sha3.obj >> $@
884887
echo $(OX)\shell.obj >> $@
885888
echo $(OX)\shun.obj >> $@
@@ -1612,10 +1615,16 @@
16121615
$(OX)\setup$O : setup_.c setup.h
16131616
$(TCC) /Fo$@ -c setup_.c
16141617
16151618
setup_.c : $(SRCDIR)\setup.c
16161619
translate$E $** > $@
1620
+
1621
+$(OX)\setupuser$O : setupuser_.c setupuser.h
1622
+ $(TCC) /Fo$@ -c setupuser_.c
1623
+
1624
+setupuser_.c : $(SRCDIR)\setupuser.c
1625
+ translate$E $** > $@
16171626
16181627
$(OX)\sha1$O : sha1_.c sha1.h
16191628
$(TCC) /Fo$@ -c sha1_.c
16201629
16211630
sha1_.c : $(SRCDIR)\sha1.c
@@ -1941,10 +1950,11 @@
19411950
rss_.c:rss.h \
19421951
schema_.c:schema.h \
19431952
search_.c:search.h \
19441953
security_audit_.c:security_audit.h \
19451954
setup_.c:setup.h \
1955
+ setupuser_.c:setupuser.h \
19461956
sha1_.c:sha1.h \
19471957
sha1hard_.c:sha1hard.h \
19481958
sha3_.c:sha3.h \
19491959
shun_.c:shun.h \
19501960
sitemap_.c:sitemap.h \
19511961
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -474,10 +474,11 @@
474 rss_.c \
475 schema_.c \
476 search_.c \
477 security_audit_.c \
478 setup_.c \
 
479 sha1_.c \
480 sha1hard_.c \
481 sha3_.c \
482 shun_.c \
483 sitemap_.c \
@@ -681,10 +682,11 @@
681 $(OX)\rss$O \
682 $(OX)\schema$O \
683 $(OX)\search$O \
684 $(OX)\security_audit$O \
685 $(OX)\setup$O \
 
686 $(OX)\sha1$O \
687 $(OX)\sha1hard$O \
688 $(OX)\sha3$O \
689 $(OX)\shell$O \
690 $(OX)\shun$O \
@@ -876,10 +878,11 @@
876 echo $(OX)\rss.obj >> $@
877 echo $(OX)\schema.obj >> $@
878 echo $(OX)\search.obj >> $@
879 echo $(OX)\security_audit.obj >> $@
880 echo $(OX)\setup.obj >> $@
 
881 echo $(OX)\sha1.obj >> $@
882 echo $(OX)\sha1hard.obj >> $@
883 echo $(OX)\sha3.obj >> $@
884 echo $(OX)\shell.obj >> $@
885 echo $(OX)\shun.obj >> $@
@@ -1612,10 +1615,16 @@
1612 $(OX)\setup$O : setup_.c setup.h
1613 $(TCC) /Fo$@ -c setup_.c
1614
1615 setup_.c : $(SRCDIR)\setup.c
1616 translate$E $** > $@
 
 
 
 
 
 
1617
1618 $(OX)\sha1$O : sha1_.c sha1.h
1619 $(TCC) /Fo$@ -c sha1_.c
1620
1621 sha1_.c : $(SRCDIR)\sha1.c
@@ -1941,10 +1950,11 @@
1941 rss_.c:rss.h \
1942 schema_.c:schema.h \
1943 search_.c:search.h \
1944 security_audit_.c:security_audit.h \
1945 setup_.c:setup.h \
 
1946 sha1_.c:sha1.h \
1947 sha1hard_.c:sha1hard.h \
1948 sha3_.c:sha3.h \
1949 shun_.c:shun.h \
1950 sitemap_.c:sitemap.h \
1951
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -474,10 +474,11 @@
474 rss_.c \
475 schema_.c \
476 search_.c \
477 security_audit_.c \
478 setup_.c \
479 setupuser_.c \
480 sha1_.c \
481 sha1hard_.c \
482 sha3_.c \
483 shun_.c \
484 sitemap_.c \
@@ -681,10 +682,11 @@
682 $(OX)\rss$O \
683 $(OX)\schema$O \
684 $(OX)\search$O \
685 $(OX)\security_audit$O \
686 $(OX)\setup$O \
687 $(OX)\setupuser$O \
688 $(OX)\sha1$O \
689 $(OX)\sha1hard$O \
690 $(OX)\sha3$O \
691 $(OX)\shell$O \
692 $(OX)\shun$O \
@@ -876,10 +878,11 @@
878 echo $(OX)\rss.obj >> $@
879 echo $(OX)\schema.obj >> $@
880 echo $(OX)\search.obj >> $@
881 echo $(OX)\security_audit.obj >> $@
882 echo $(OX)\setup.obj >> $@
883 echo $(OX)\setupuser.obj >> $@
884 echo $(OX)\sha1.obj >> $@
885 echo $(OX)\sha1hard.obj >> $@
886 echo $(OX)\sha3.obj >> $@
887 echo $(OX)\shell.obj >> $@
888 echo $(OX)\shun.obj >> $@
@@ -1612,10 +1615,16 @@
1615 $(OX)\setup$O : setup_.c setup.h
1616 $(TCC) /Fo$@ -c setup_.c
1617
1618 setup_.c : $(SRCDIR)\setup.c
1619 translate$E $** > $@
1620
1621 $(OX)\setupuser$O : setupuser_.c setupuser.h
1622 $(TCC) /Fo$@ -c setupuser_.c
1623
1624 setupuser_.c : $(SRCDIR)\setupuser.c
1625 translate$E $** > $@
1626
1627 $(OX)\sha1$O : sha1_.c sha1.h
1628 $(TCC) /Fo$@ -c sha1_.c
1629
1630 sha1_.c : $(SRCDIR)\sha1.c
@@ -1941,10 +1950,11 @@
1950 rss_.c:rss.h \
1951 schema_.c:schema.h \
1952 search_.c:search.h \
1953 security_audit_.c:security_audit.h \
1954 setup_.c:setup.h \
1955 setupuser_.c:setupuser.h \
1956 sha1_.c:sha1.h \
1957 sha1hard_.c:sha1hard.h \
1958 sha3_.c:sha3.h \
1959 shun_.c:shun.h \
1960 sitemap_.c:sitemap.h \
1961

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button