Fossil SCM
The pop3d command allows the username to contain an extra @domain suffix.
Commit
86b0a3d3f3492648f0c08b3cdb3060c67d0c6410e757604adba24c9b056597b5
Parent
752ea432d1cf20f…
1 file changed
+23
-1
+23
-1
| --- src/smtp.c | ||
| +++ src/smtp.c | ||
| @@ -1349,10 +1349,32 @@ | ||
| 1349 | 1349 | va_end(ap); |
| 1350 | 1350 | printf("%s\r\n", zLine); |
| 1351 | 1351 | fflush(stdout); |
| 1352 | 1352 | if( pLog ) fprintf(pLog, "S: %s\n", zLine); |
| 1353 | 1353 | } |
| 1354 | + | |
| 1355 | +/* | |
| 1356 | +** Try to log in for zUser and zPass. | |
| 1357 | +** | |
| 1358 | +** If zUser/zPass does not work as written, then modify zUser by | |
| 1359 | +** omitting everything after the "@" (if there is one) and trying | |
| 1360 | +** again. | |
| 1361 | +*/ | |
| 1362 | +static int pop3_login(char *zUser, char *zPass){ | |
| 1363 | + int uid; | |
| 1364 | + int i; | |
| 1365 | + uid = login_search_uid(zUser, zPass); | |
| 1366 | + if( uid ) return 1; | |
| 1367 | + for(i=0; zUser[i] && zUser[i]!='@'; i++){} | |
| 1368 | + if( zUser[i]=='@' ){ | |
| 1369 | + zUser[i] = 0; | |
| 1370 | + uid = login_search_uid(zUser, zPass); | |
| 1371 | + if( uid ) return 1; | |
| 1372 | + zUser[i] = '@'; | |
| 1373 | + } | |
| 1374 | + return 0; | |
| 1375 | +} | |
| 1354 | 1376 | |
| 1355 | 1377 | /* |
| 1356 | 1378 | ** COMMAND: pop3d |
| 1357 | 1379 | ** |
| 1358 | 1380 | ** Usage: %fossil pop3d [OPTIONS] REPOSITORY |
| @@ -1427,11 +1449,11 @@ | ||
| 1427 | 1449 | sqlite3_snprintf(sizeof(zUser),zUser,"%s",zA1); |
| 1428 | 1450 | goto cmd_ok; |
| 1429 | 1451 | } |
| 1430 | 1452 | if( strcmp(zCmd,"pass")==0 ){ |
| 1431 | 1453 | if( zA1==0 || zA2!=0 ) goto cmd_error; |
| 1432 | - if( login_search_uid(zUser,zA1)==0 ){ | |
| 1454 | + if( pop3_login(zUser,zA1)==0 ){ | |
| 1433 | 1455 | goto cmd_error; |
| 1434 | 1456 | }else{ |
| 1435 | 1457 | inAuth = 0; |
| 1436 | 1458 | db_multi_exec( |
| 1437 | 1459 | "CREATE TEMP TABLE pop3(" |
| 1438 | 1460 |
| --- src/smtp.c | |
| +++ src/smtp.c | |
| @@ -1349,10 +1349,32 @@ | |
| 1349 | va_end(ap); |
| 1350 | printf("%s\r\n", zLine); |
| 1351 | fflush(stdout); |
| 1352 | if( pLog ) fprintf(pLog, "S: %s\n", zLine); |
| 1353 | } |
| 1354 | |
| 1355 | /* |
| 1356 | ** COMMAND: pop3d |
| 1357 | ** |
| 1358 | ** Usage: %fossil pop3d [OPTIONS] REPOSITORY |
| @@ -1427,11 +1449,11 @@ | |
| 1427 | sqlite3_snprintf(sizeof(zUser),zUser,"%s",zA1); |
| 1428 | goto cmd_ok; |
| 1429 | } |
| 1430 | if( strcmp(zCmd,"pass")==0 ){ |
| 1431 | if( zA1==0 || zA2!=0 ) goto cmd_error; |
| 1432 | if( login_search_uid(zUser,zA1)==0 ){ |
| 1433 | goto cmd_error; |
| 1434 | }else{ |
| 1435 | inAuth = 0; |
| 1436 | db_multi_exec( |
| 1437 | "CREATE TEMP TABLE pop3(" |
| 1438 |
| --- src/smtp.c | |
| +++ src/smtp.c | |
| @@ -1349,10 +1349,32 @@ | |
| 1349 | va_end(ap); |
| 1350 | printf("%s\r\n", zLine); |
| 1351 | fflush(stdout); |
| 1352 | if( pLog ) fprintf(pLog, "S: %s\n", zLine); |
| 1353 | } |
| 1354 | |
| 1355 | /* |
| 1356 | ** Try to log in for zUser and zPass. |
| 1357 | ** |
| 1358 | ** If zUser/zPass does not work as written, then modify zUser by |
| 1359 | ** omitting everything after the "@" (if there is one) and trying |
| 1360 | ** again. |
| 1361 | */ |
| 1362 | static int pop3_login(char *zUser, char *zPass){ |
| 1363 | int uid; |
| 1364 | int i; |
| 1365 | uid = login_search_uid(zUser, zPass); |
| 1366 | if( uid ) return 1; |
| 1367 | for(i=0; zUser[i] && zUser[i]!='@'; i++){} |
| 1368 | if( zUser[i]=='@' ){ |
| 1369 | zUser[i] = 0; |
| 1370 | uid = login_search_uid(zUser, zPass); |
| 1371 | if( uid ) return 1; |
| 1372 | zUser[i] = '@'; |
| 1373 | } |
| 1374 | return 0; |
| 1375 | } |
| 1376 | |
| 1377 | /* |
| 1378 | ** COMMAND: pop3d |
| 1379 | ** |
| 1380 | ** Usage: %fossil pop3d [OPTIONS] REPOSITORY |
| @@ -1427,11 +1449,11 @@ | |
| 1449 | sqlite3_snprintf(sizeof(zUser),zUser,"%s",zA1); |
| 1450 | goto cmd_ok; |
| 1451 | } |
| 1452 | if( strcmp(zCmd,"pass")==0 ){ |
| 1453 | if( zA1==0 || zA2!=0 ) goto cmd_error; |
| 1454 | if( pop3_login(zUser,zA1)==0 ){ |
| 1455 | goto cmd_error; |
| 1456 | }else{ |
| 1457 | inAuth = 0; |
| 1458 | db_multi_exec( |
| 1459 | "CREATE TEMP TABLE pop3(" |
| 1460 |