| | @@ -529,10 +529,37 @@ |
| 529 | 529 | return Th_WrongNumArgs(interp, "verifyCsrf"); |
| 530 | 530 | } |
| 531 | 531 | login_verify_csrf_secret(); |
| 532 | 532 | return TH_OK; |
| 533 | 533 | } |
| 534 | + |
| 535 | +/* |
| 536 | +** TH1 command: verifyLogin |
| 537 | +** |
| 538 | +** Returns non-zero if the specified user name and password represent a |
| 539 | +** valid login for the repository. |
| 540 | +*/ |
| 541 | +static int verifyLoginCmd( |
| 542 | + Th_Interp *interp, |
| 543 | + void *p, |
| 544 | + int argc, |
| 545 | + const char **argv, |
| 546 | + int *argl |
| 547 | +){ |
| 548 | + const char *zUser; |
| 549 | + const char *zPass; |
| 550 | + int uid; |
| 551 | + if( argc!=3 ){ |
| 552 | + return Th_WrongNumArgs(interp, "verifyLogin userName password"); |
| 553 | + } |
| 554 | + zUser = argv[1]; |
| 555 | + zPass = argv[2]; |
| 556 | + uid = login_search_uid(&zUser, zPass); |
| 557 | + Th_SetResultInt(interp, uid!=0); |
| 558 | + if( uid==0 ) sqlite3_sleep(100); |
| 559 | + return TH_OK; |
| 560 | +} |
| 534 | 561 | |
| 535 | 562 | /* |
| 536 | 563 | ** TH1 command: markdown STRING |
| 537 | 564 | ** |
| 538 | 565 | ** Renders the input string as markdown. The result is a two-element list. |
| | @@ -2111,10 +2138,11 @@ |
| 2111 | 2138 | {"trace", traceCmd, 0}, |
| 2112 | 2139 | {"stime", stimeCmd, 0}, |
| 2113 | 2140 | {"unversioned", unversionedCmd, 0}, |
| 2114 | 2141 | {"utime", utimeCmd, 0}, |
| 2115 | 2142 | {"verifyCsrf", verifyCsrfCmd, 0}, |
| 2143 | + {"verifyLogin", verifyLoginCmd, 0}, |
| 2116 | 2144 | {"wiki", wikiCmd, (void*)&aFlags[0]}, |
| 2117 | 2145 | {0, 0, 0} |
| 2118 | 2146 | }; |
| 2119 | 2147 | if( g.thTrace ){ |
| 2120 | 2148 | Th_Trace("th1-init 0x%x => 0x%x<br />\n", g.th1Flags, flags); |
| 2121 | 2149 | |