Fossil SCM
Added admin_log(), for (informally) recording changes made by admins.
Commit
ee666c46fb7d1f3e3f2837c43f1d10c9213ce94e
Parent
194c3ff362a9243…
2 files changed
+31
+4
-1
M
src/db.c
+31
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -2676,5 +2676,36 @@ | ||
| 2676 | 2676 | } |
| 2677 | 2677 | blob_reset(&allSql); |
| 2678 | 2678 | db_close(1); |
| 2679 | 2679 | } |
| 2680 | 2680 | } |
| 2681 | + | |
| 2682 | + | |
| 2683 | +void admin_log(const char *zFormat, ...){ | |
| 2684 | + static int once = 0; | |
| 2685 | + char * zUserName = g.userUid>0 | |
| 2686 | + ? db_text(0, "select login from user where uid=%d", g.userUid) | |
| 2687 | + : 0; | |
| 2688 | + Blob what = empty_blob; | |
| 2689 | + va_list ap; | |
| 2690 | + int rc; | |
| 2691 | + if(!once){ | |
| 2692 | + once = 1; | |
| 2693 | + rc = db_multi_exec("CREATE TABLE IF NOT EXISTS aevent(" | |
| 2694 | + "id INTEGER PRIMARY KEY, " | |
| 2695 | + "time FLOAT /* Julian time */, " | |
| 2696 | + "page TEXT /* path of page */," | |
| 2697 | + "who TEXT /* user name */, " | |
| 2698 | + "what TEXT /* descr. of event. */ " | |
| 2699 | + ")"); | |
| 2700 | + fossil_trace("created aevent. rc=%d\n", rc); | |
| 2701 | + } | |
| 2702 | + va_start(ap,zFormat); | |
| 2703 | + blob_vappendf( &what, zFormat, ap ); | |
| 2704 | + va_end(ap); | |
| 2705 | + fossil_trace("what==%B rc=%d\n", &what, rc); | |
| 2706 | + db_multi_exec("INSERT INTO aevent(id,time,page,who,what) VALUES(" | |
| 2707 | + "NULL, cast(strftime('%%J') AS FLOAT), %Q, %Q, %B" | |
| 2708 | + ")", g.zPath, zUserName, &what); | |
| 2709 | + fossil_free(zUserName); | |
| 2710 | + blob_reset(&what); | |
| 2711 | +} | |
| 2681 | 2712 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -2676,5 +2676,36 @@ | |
| 2676 | } |
| 2677 | blob_reset(&allSql); |
| 2678 | db_close(1); |
| 2679 | } |
| 2680 | } |
| 2681 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -2676,5 +2676,36 @@ | |
| 2676 | } |
| 2677 | blob_reset(&allSql); |
| 2678 | db_close(1); |
| 2679 | } |
| 2680 | } |
| 2681 | |
| 2682 | |
| 2683 | void admin_log(const char *zFormat, ...){ |
| 2684 | static int once = 0; |
| 2685 | char * zUserName = g.userUid>0 |
| 2686 | ? db_text(0, "select login from user where uid=%d", g.userUid) |
| 2687 | : 0; |
| 2688 | Blob what = empty_blob; |
| 2689 | va_list ap; |
| 2690 | int rc; |
| 2691 | if(!once){ |
| 2692 | once = 1; |
| 2693 | rc = db_multi_exec("CREATE TABLE IF NOT EXISTS aevent(" |
| 2694 | "id INTEGER PRIMARY KEY, " |
| 2695 | "time FLOAT /* Julian time */, " |
| 2696 | "page TEXT /* path of page */," |
| 2697 | "who TEXT /* user name */, " |
| 2698 | "what TEXT /* descr. of event. */ " |
| 2699 | ")"); |
| 2700 | fossil_trace("created aevent. rc=%d\n", rc); |
| 2701 | } |
| 2702 | va_start(ap,zFormat); |
| 2703 | blob_vappendf( &what, zFormat, ap ); |
| 2704 | va_end(ap); |
| 2705 | fossil_trace("what==%B rc=%d\n", &what, rc); |
| 2706 | db_multi_exec("INSERT INTO aevent(id,time,page,who,what) VALUES(" |
| 2707 | "NULL, cast(strftime('%%J') AS FLOAT), %Q, %Q, %B" |
| 2708 | ")", g.zPath, zUserName, &what); |
| 2709 | fossil_free(zUserName); |
| 2710 | blob_reset(&what); |
| 2711 | } |
| 2712 |
+4
-1
| --- src/setup.c | ||
| +++ src/setup.c | ||
| @@ -380,12 +380,13 @@ | ||
| 380 | 380 | } |
| 381 | 381 | login_verify_csrf_secret(); |
| 382 | 382 | db_multi_exec( |
| 383 | 383 | "REPLACE INTO user(uid,login,info,pw,cap,mtime) " |
| 384 | 384 | "VALUES(nullif(%d,0),%Q,%Q,%Q,%Q,now())", |
| 385 | - uid, P("login"), P("info"), zPw, zCap | |
| 385 | + uid, zLogin, P("info"), zPw, zCap | |
| 386 | 386 | ); |
| 387 | + admin_log( "Updated user %Q with capapbilities [%q].", zLogin, zCap ); | |
| 387 | 388 | if( atoi(PD("all","0"))>0 ){ |
| 388 | 389 | Blob sql; |
| 389 | 390 | char *zErr = 0; |
| 390 | 391 | blob_zero(&sql); |
| 391 | 392 | if( zOldLogin==0 ){ |
| @@ -407,12 +408,14 @@ | ||
| 407 | 408 | zLogin, P("pw"), zLogin, P("info"), zCap, |
| 408 | 409 | zOldLogin |
| 409 | 410 | ); |
| 410 | 411 | login_group_sql(blob_str(&sql), "<li> ", " </li>\n", &zErr); |
| 411 | 412 | blob_reset(&sql); |
| 413 | + admin_log( "Updated user '%q' with capapbilities.", zLogin, zCap ); | |
| 412 | 414 | if( zErr ){ |
| 413 | 415 | style_header("User Change Error"); |
| 416 | + admin_log( "Error updating user '%q': %s'.", zLogin, zErr ); | |
| 414 | 417 | @ <span class="loginError">%s(zErr)</span> |
| 415 | 418 | @ |
| 416 | 419 | @ <p><a href="setup_uedit?id=%d(uid)">[Bummer]</a></p> |
| 417 | 420 | style_footer(); |
| 418 | 421 | return; |
| 419 | 422 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -380,12 +380,13 @@ | |
| 380 | } |
| 381 | login_verify_csrf_secret(); |
| 382 | db_multi_exec( |
| 383 | "REPLACE INTO user(uid,login,info,pw,cap,mtime) " |
| 384 | "VALUES(nullif(%d,0),%Q,%Q,%Q,%Q,now())", |
| 385 | uid, P("login"), P("info"), zPw, zCap |
| 386 | ); |
| 387 | if( atoi(PD("all","0"))>0 ){ |
| 388 | Blob sql; |
| 389 | char *zErr = 0; |
| 390 | blob_zero(&sql); |
| 391 | if( zOldLogin==0 ){ |
| @@ -407,12 +408,14 @@ | |
| 407 | zLogin, P("pw"), zLogin, P("info"), zCap, |
| 408 | zOldLogin |
| 409 | ); |
| 410 | login_group_sql(blob_str(&sql), "<li> ", " </li>\n", &zErr); |
| 411 | blob_reset(&sql); |
| 412 | if( zErr ){ |
| 413 | style_header("User Change Error"); |
| 414 | @ <span class="loginError">%s(zErr)</span> |
| 415 | @ |
| 416 | @ <p><a href="setup_uedit?id=%d(uid)">[Bummer]</a></p> |
| 417 | style_footer(); |
| 418 | return; |
| 419 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -380,12 +380,13 @@ | |
| 380 | } |
| 381 | login_verify_csrf_secret(); |
| 382 | db_multi_exec( |
| 383 | "REPLACE INTO user(uid,login,info,pw,cap,mtime) " |
| 384 | "VALUES(nullif(%d,0),%Q,%Q,%Q,%Q,now())", |
| 385 | uid, zLogin, P("info"), zPw, zCap |
| 386 | ); |
| 387 | admin_log( "Updated user %Q with capapbilities [%q].", zLogin, zCap ); |
| 388 | if( atoi(PD("all","0"))>0 ){ |
| 389 | Blob sql; |
| 390 | char *zErr = 0; |
| 391 | blob_zero(&sql); |
| 392 | if( zOldLogin==0 ){ |
| @@ -407,12 +408,14 @@ | |
| 408 | zLogin, P("pw"), zLogin, P("info"), zCap, |
| 409 | zOldLogin |
| 410 | ); |
| 411 | login_group_sql(blob_str(&sql), "<li> ", " </li>\n", &zErr); |
| 412 | blob_reset(&sql); |
| 413 | admin_log( "Updated user '%q' with capapbilities.", zLogin, zCap ); |
| 414 | if( zErr ){ |
| 415 | style_header("User Change Error"); |
| 416 | admin_log( "Error updating user '%q': %s'.", zLogin, zErr ); |
| 417 | @ <span class="loginError">%s(zErr)</span> |
| 418 | @ |
| 419 | @ <p><a href="setup_uedit?id=%d(uid)">[Bummer]</a></p> |
| 420 | style_footer(); |
| 421 | return; |
| 422 |