Changeset 45859 in vbox for trunk/src/VBox/Additions/linux
- Timestamp:
- May 1, 2013 8:40:06 AM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 85446
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/linux/lightdm-greeter/vbox-greeter.cpp
r45521 r45859 61 61 #include <iprt/system.h> 62 62 #include <iprt/string.h> 63 #include <iprt/thread.h> 63 64 #include <iprt/time.h> 64 65 … … 108 109 static int g_iVerbosity = 0; 109 110 #endif 111 static bool g_fRunning = true; 110 112 111 113 /** Logging parameters. */ … … 354 356 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 355 357 358 static bool s_fCredsNotFoundMsgShown = false; 356 359 int rc = VbglR3CredentialsQueryAvailability(); 357 360 if (RT_FAILURE(rc)) … … 359 362 if (rc != VERR_NOT_FOUND) 360 363 vboxGreeterError("vboxGreeterCheckCreds: could not query for credentials! rc=%Rrc. Aborting\n", rc); 361 #ifdef DEBUG 362 else364 else if (!s_fCredsNotFoundMsgShown) 365 { 363 366 vboxGreeterLog("vboxGreeterCheckCreds: no credentials available\n"); 364 #endif 367 s_fCredsNotFoundMsgShown = true; 368 } 365 369 } 366 370 else … … 375 379 else 376 380 { 381 vboxGreeterLog("vboxGreeterCheckCreds: credentials retrieved: user=%s, password=%s\n", 382 pszUsername, 377 383 #ifdef DEBUG 378 vboxGreeterLog("vboxGreeterCheckCreds: credentials retrieved: user=%s, password=%s\n", 379 pszUsername, pCtx->pszPassword); 380 #else 381 /* Don't log passwords in release mode! */ 382 vboxGreeterLog("vboxGreeterCheckCreds: credentials retrieved: user=%s, password=XXX\n", 383 pszUsername); 384 pCtx->pszPassword); 385 #else 386 "XXX"); 384 387 #endif 385 388 /* Trigger LightDM authentication with the user name just retrieved. */ … … 405 408 static void cb_sigterm(int signum) 406 409 { 407 vboxGreeterLog("received SIGTERM (%d), exiting\n", signum); 408 410 /* Note: This handler must be reentrant-safe. */ 411 #ifdef VBOX_WITH_FLTK 412 g_fRunning = false; 413 #else 409 414 exit(RTEXITCODE_SUCCESS); 415 #endif 410 416 } 411 417 … … 422 428 gpointer pvData) 423 429 { 424 vboxGreeterLog("cb_lightdm_show_prompt: %s (%d)\n", pszText, enmType);430 vboxGreeterLog("cb_lightdm_show_prompt: text=%s, type=%d\n", pszText, enmType); 425 431 426 432 PVBOXGREETERCTX pCtx = (PVBOXGREETERCTX)pvData; … … 472 478 gpointer pvData) 473 479 { 474 vboxGreeterLog("cb_lightdm_show_message: %s (%d)\n", pszText, enmType);480 vboxGreeterLog("cb_lightdm_show_message: text=%s, type=%d\n", pszText, enmType); 475 481 476 482 PVBOXGREETERCTX pCtx = (PVBOXGREETERCTX)pvData; 477 AssertPtr (pCtx);483 AssertPtrReturnVoid(pCtx); 478 484 479 485 #ifdef VBOX_WITH_FLTK … … 509 515 if (!lightdm_greeter_start_session_sync(pGreeter, pszSession, &pError)) 510 516 { 511 vboxGreeterError("unable to start session '%s': %s\n", 517 vboxGreeterError("unable to start session '%s': %s\n", 512 518 pszSession, pError ? pError->message : "Unknown error"); 513 519 } … … 559 565 560 566 /** @todo Add domain handling? */ 561 #ifdef DEBUG 562 vboxGreeterLog("login requested: greeter=%p, user=%s, password=%s\n", 567 vboxGreeterLog("login button pressed: greeter=%p, user=%s, password=%s\n", 563 568 pCtx->pGreeter, 564 569 pszUser ? pszUser : "<NONE>", 570 #ifdef DEBUG 565 571 pszPwd ? pszPwd : "<NONE>"); 566 #endif 567 568 lightdm_greeter_respond(pCtx->pGreeter, pszPwd); 569 lightdm_greeter_authenticate(pCtx->pGreeter, pszUser); 572 #else 573 /* Don't log passwords in release mode! */ 574 "XXX"); 575 #endif 576 if (strlen(pszUser)) /* Only authenticate if username is given. */ 577 { 578 lightdm_greeter_respond(pCtx->pGreeter, pszPwd); 579 lightdm_greeter_authenticate(pCtx->pGreeter, pszUser); 580 } 570 581 } 571 582 … … 582 593 #endif 583 594 { 584 595 vboxGreeterLog("menu button pressed\n"); 585 596 } 586 597 … … 597 608 #endif 598 609 { 610 vboxGreeterLog("restart button pressed\n"); 611 599 612 bool fRestart = true; 600 613 #ifdef VBOX_WITH_FLTK … … 624 637 #endif 625 638 { 639 vboxGreeterLog("shutdown button pressed\n"); 640 626 641 bool fShutdown = true; 627 642 #ifdef VBOX_WITH_FLTK … … 706 721 { 707 722 case VINF_SUCCESS: 708 # ifdef DEBUG723 # ifdef DEBUG 709 724 vboxGreeterLog("cb_check_creds: tsAbort %RU64 <-> %RU64\n", 710 725 pCtx->uTsAbort, tsAbort); 711 # endif726 # endif 712 727 if (tsAbort != pCtx->uTsAbort) 713 728 fAbort = true; /* Timestamps differs, abort. */ … … 744 759 AssertPtr(pCtx->pLblInfo); 745 760 pCtx->pLblInfo->copy_label(szVal); 746 # else 761 # else /* !VBOX_WITH_FLTK */ 747 762 GtkLabel *pLblInfo = GTK_LABEL(gtk_builder_get_object(pCtx->pBuilder, VBOX_GREETER_UI_LBL_INFO)); 748 763 AssertPtr(pLblInfo); 749 764 gtk_label_set_text(pLblInfo, szVal); 750 # endif /* VBOX_WITH_FLTK */765 # endif /* !VBOX_WITH_FLTK */ 751 766 vboxGreeterLog("cb_check_creds: got notification from host to abort waiting\n"); 752 767 } … … 793 808 # endif 794 809 #endif /* VBOX_WITH_GUEST_PROPS */ 795 vboxGreeterLog("cb_check_creds: waiting thread has reached timeout (%dms), exiting ...\n",810 vboxGreeterLog("cb_check_creds: no credentials retrieved within time (%RU32ms), giving up\n", 796 811 pCtx->uTimeoutMS); 797 812 rc = VERR_TIMEOUT; … … 1025 1040 | VBOX_GREETER_UI_SHOW_SHUTDOWN; 1026 1041 #ifdef VBOX_WITH_GUEST_PROPS 1027 uint32_t uClientId ;1042 uint32_t uClientId = 0; 1028 1043 rc = VbglR3GuestPropConnect(&uClientId); 1029 1044 if (RT_SUCCESS(rc)) … … 1137 1152 } 1138 1153 } 1154 else 1155 vboxGreeterError("unable to connect to guest property service, rc=%Rrc\n", rc); 1139 1156 #endif 1140 1157 vboxGreeterLog("UI options are: %RU32\n", uOptsUI); … … 1279 1296 1280 1297 pWndGreeter->show(); 1281 #else 1298 #else /* !VBOX_WITH_FLTK */ 1282 1299 gtk_init(&argc, &argv); 1283 1300 … … 1320 1337 1321 1338 g_clear_error(&pError); 1322 #endif 1339 #endif /* !VBOX_WITH_FLTK */ 1323 1340 1324 1341 /* GType is needed in any case (for LightDM), whether we … … 1348 1365 #ifdef VBOX_WITH_GUEST_PROPS 1349 1366 bool fCheckCreds = false; 1350 if (uClientId) 1367 if (uClientId) /* Connected to guest property service? */ 1351 1368 { 1352 1369 char szVal[256]; 1353 rc = vbox_read_prop(uClientId,1354 "/VirtualBox/GuestAdd/PAM/CredsWait",1355 true /* Read-only on guest */,1370 rc2 = vbox_read_prop(uClientId, 1371 "/VirtualBox/GuestAdd/PAM/CredsWait", 1372 true /* Read-only on guest */, 1356 1373 szVal, sizeof(szVal), NULL /* Timestamp. */); 1357 if (RT_SUCCESS(rc)) 1358 { 1359 /* All calls which are checked against rc2 are not critical, e.g. it does 1360 * not matter if they succeed or not. */ 1374 if (RT_SUCCESS(rc2)) 1375 { 1361 1376 uint32_t uTimeoutMS = RT_INDEFINITE_WAIT; /* Wait infinite by default. */ 1362 1377 rc2 = vbox_read_prop(uClientId, … … 1384 1399 if (RT_SUCCESS(rc2)) 1385 1400 { 1386 # ifdef VBOX_WITH_FLTK1401 # ifdef VBOX_WITH_FLTK 1387 1402 Assert(pLblInfo); 1388 1403 pLblInfo->copy_label(szVal); 1389 # else1404 # else 1390 1405 gtk_label_set_text(pLblInfo, szVal); 1391 # endif1406 # endif 1392 1407 } 1393 1408 … … 1416 1431 /* Start the timer to check credentials availability. */ 1417 1432 if (fCheckCreds) 1418 #ifdef VBOX_WITH_FLTK 1433 { 1434 vboxGreeterLog("No credentials available on startup, starting to check periodically ...\n"); 1435 # ifdef VBOX_WITH_FLTK 1419 1436 Fl::add_timeout(0.5 /* 500 ms */, cb_check_creds, &ctx); 1420 # else1437 # else 1421 1438 g_timeout_add(500 /* ms */, (GSourceFunc)cb_check_creds, &ctx); 1422 #endif 1439 # endif 1440 } 1423 1441 } 1424 1442 #endif /* VBOX_WITH_GUEST_PROPS */ … … 1432 1450 AssertPtr(pMainCtx); 1433 1451 1434 for (;;)1452 while (g_fRunning) 1435 1453 { 1436 1454 g_main_context_iteration(pMainCtx, 1437 1455 FALSE /* No blocking */); 1438 1456 Fl::check(); 1439 /** @todo Abort condition? */ 1440 } 1441 1442 /** @todo Never reached so far. */ 1457 RTThreadYield(); 1458 } 1459 1443 1460 g_main_context_unref(pMainCtx); 1444 1461 … … 1450 1467 } 1451 1468 # endif /* VBOX_GREETER_WITH_PNG_SUPPORT */ 1452 #else 1469 #else /* !VBOX_WITH_FLTK */ 1453 1470 gtk_main(); 1454 #endif 1471 /** @todo Never reached so far. LightDM sends a SIGTERM. */ 1472 #endif /* !VBOX_WITH_FLTK */ 1455 1473 1456 1474 vboxGreeterLog("terminating\n"); 1457 1475 1458 rc2 = VbglR3GuestPropDisconnect(uClientId); 1459 AssertRC(rc2); 1476 #ifdef VBOX_WITH_GUEST_PROPS 1477 if (uClientId) 1478 { 1479 rc2 = VbglR3GuestPropDisconnect(uClientId); 1480 AssertRC(rc2); 1481 } 1482 #endif /* VBOX_WITH_GUEST_PROPS */ 1460 1483 1461 1484 VbglR3Term(); 1462 1485 1463 vboxGreeterLog("terminated with rc=%Rrc\n", rc); 1486 RTEXITCODE rcExit = RT_SUCCESS(rc) 1487 ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE; 1488 1489 vboxGreeterLog("terminated with exit code %ld (rc=%Rrc)\n", 1490 rcExit, rc); 1464 1491 1465 1492 vboxGreeterLogDestroy(); 1466 1493 1467 return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;1494 return rcExit; 1468 1495 } 1469 1496
Note:
See TracChangeset
for help on using the changeset viewer.