Fossil SCM

The pop3d command allows the username to contain an extra @domain suffix.

drh 2018-07-18 20:32 trunk
Commit 86b0a3d3f3492648f0c08b3cdb3060c67d0c6410e757604adba24c9b056597b5
1 file changed +23 -1
+23 -1
--- src/smtp.c
+++ src/smtp.c
@@ -1349,10 +1349,32 @@
13491349
va_end(ap);
13501350
printf("%s\r\n", zLine);
13511351
fflush(stdout);
13521352
if( pLog ) fprintf(pLog, "S: %s\n", zLine);
13531353
}
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
+}
13541376
13551377
/*
13561378
** COMMAND: pop3d
13571379
**
13581380
** Usage: %fossil pop3d [OPTIONS] REPOSITORY
@@ -1427,11 +1449,11 @@
14271449
sqlite3_snprintf(sizeof(zUser),zUser,"%s",zA1);
14281450
goto cmd_ok;
14291451
}
14301452
if( strcmp(zCmd,"pass")==0 ){
14311453
if( zA1==0 || zA2!=0 ) goto cmd_error;
1432
- if( login_search_uid(zUser,zA1)==0 ){
1454
+ if( pop3_login(zUser,zA1)==0 ){
14331455
goto cmd_error;
14341456
}else{
14351457
inAuth = 0;
14361458
db_multi_exec(
14371459
"CREATE TEMP TABLE pop3("
14381460
--- 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

Keyboard Shortcuts

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