registrar: implemented auth port via launch_daemon.

* get_roster_port_name() is no longer needed.
* This also removes the app_server restart code from the debug
  server -- this will be done by the launch_daemon in the future.
This commit is contained in:
Axel Dörfler
2015-07-22 20:41:01 +02:00
parent 7ef0edec04
commit bea38cb711
9 changed files with 31 additions and 57 deletions
+3
View File
@@ -1,5 +1,8 @@
service x-vnd.Haiku-registrar {
launch /system/servers/registrar
port auth {
capacity 100
}
}
service x-vnd.Haiku-app_server {
+6 -6
View File
@@ -1,5 +1,5 @@
/*
* Copyright 2001-2009, Haiku, Inc. All Rights Reserved.
* Copyright 2001-2015, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
@@ -18,15 +18,13 @@
namespace BPrivate {
// names
extern const char* kRegistrarSignature;
extern const char* kRosterThreadName;
extern const char* kRAppLooperPortName;
extern const char* get_roster_port_name();
#define REGISTRAR_AUTHENTICATION_PORT_NAME "system:registrar:auth manager"
#define B_REGISTRAR_SIGNATURE "application/x-vnd.haiku-registrar"
#define B_REGISTRAR_AUTHENTICATION_PORT_NAME "auth"
// message constants
@@ -179,7 +177,9 @@ struct flat_app_info {
char ref_name[B_FILE_NAME_LENGTH + 1];
};
} // namespace BPrivate
#endif // REGISTRAR_DEFS_H
+1 -1
View File
@@ -362,7 +362,7 @@ BApplication::_InitData(const char* signature, bool initGUI, status_t* _error)
#ifndef RUN_WITHOUT_REGISTRAR
bool registerApp = signature == NULL
|| (strcasecmp(signature, kRegistrarSignature) != 0
|| (strcasecmp(signature, B_REGISTRAR_SIGNATURE) != 0
&& strcasecmp(signature, kLaunchDaemonSignature) != 0);
// get team and thread
team_id team = Team();
+2 -17
View File
@@ -1,5 +1,5 @@
/*
* Copyright 2001-2009, Haiku.
* Copyright 2001-2015, Haiku.
* Distributed under the terms of the MIT License.
*
* Authors:
@@ -16,28 +16,13 @@
namespace BPrivate {
// names
#ifdef HAIKU_TARGET_PLATFORM_HAIKU
const char* kRegistrarSignature = "application/x-vnd.haiku-registrar";
const char* kRAppLooperPortName = "rAppLooperPort";
#else
const char* kRegistrarSignature = "application/x-vnd.test-registrar";
const char* kRAppLooperPortName = "haiku-test:rAppLooperPort";
#endif
const char* kRosterThreadName = "_roster_thread_";
/*! \brief Returns the name of the main request port of the registrar (roster).
\return the name of the registrar request port.
*/
const char*
get_roster_port_name()
{
#ifdef HAIKU_TARGET_PLATFORM_HAIKU
return "system:roster";
#else
return "haiku-test:roster";
#endif
}
} // namespace BPrivate
-18
View File
@@ -1021,8 +1021,6 @@ TeamDebugHandler::_HandlerThread()
"initial message: %s", strerror(error));
}
bool isGuiServer = _IsGUIServer();
// kill the team or hand it over to the debugger
thread_id debuggerThread = -1;
if (debugAction == kActionKillTeam) {
@@ -1078,22 +1076,6 @@ TeamDebugHandler::_HandlerThread()
// remove this handler from the roster and delete it
TeamDebugHandlerRoster::Default()->RemoveHandler(fTeam);
if (isGuiServer) {
// wait till debugging is done
status_t dummy;
wait_for_thread(debuggerThread, &dummy);
// find the registrar port
port_id rosterPort = find_port(BPrivate::get_roster_port_name());
port_info info;
BMessenger messenger;
if (rosterPort >= 0 && get_port_info(rosterPort, &info) == B_OK) {
BMessenger::Private(messenger).SetTo(info.team, rosterPort,
B_PREFERRED_TOKEN);
}
messenger.SendMessage(kMsgRestartAppServer);
}
delete this;
return B_OK;
@@ -3,6 +3,7 @@
* Distributed under the terms of the MIT License.
*/
#include "AuthenticationManager.h"
#include <errno.h>
@@ -19,6 +20,7 @@
#include <StringList.h>
#include <AutoDeleter.h>
#include <LaunchRoster.h>
#include <RegistrarDefs.h>
#include <libroot_private.h>
@@ -723,12 +725,9 @@ AuthenticationManager::AuthenticationManager()
AuthenticationManager::~AuthenticationManager()
{
// delete port and wait for the request thread to finish
if (fRequestPort >= 0)
delete_port(fRequestPort);
status_t dummy;
wait_for_thread(fRequestThread, &dummy);
// Quit the request thread and wait for it to finish
write_port(fRequestPort, 'quit', NULL, 0);
wait_for_thread(fRequestThread, NULL);
delete fUserDB;
delete fGroupDB;
@@ -752,7 +751,8 @@ AuthenticationManager::Init()
return B_NO_MEMORY;
}
fRequestPort = create_port(100, REGISTRAR_AUTHENTICATION_PORT_NAME);
fRequestPort = BLaunchRoster().GetPort(
B_REGISTRAR_AUTHENTICATION_PORT_NAME);
if (fRequestPort < 0)
return fRequestPort;
+2 -4
View File
@@ -57,8 +57,7 @@ static const bigtime_t kRosterSanityEventInterval = 1000000LL;
*/
Registrar::Registrar(status_t* _error)
:
BServer(kRegistrarSignature, BPrivate::get_roster_port_name(), -1,
false, _error),
BServer(B_REGISTRAR_SIGNATURE, "system:roster", -1, false, _error),
fRoster(NULL),
fClipboardHandler(NULL),
fMIMEManager(NULL),
@@ -434,7 +433,6 @@ main()
// app thread.
be_clipboard = new BClipboard(NULL);
// create and run the registrar application
status_t error;
Registrar *app = new Registrar(&error);
@@ -445,7 +443,7 @@ main()
}
// rename the main thread
rename_thread(find_thread(NULL), kRosterThreadName);
rename_thread(find_thread(NULL), "roster");
PRINT("app->Run()...\n");
+1 -1
View File
@@ -1247,7 +1247,7 @@ TRoster::Init()
if (error == B_OK) {
info->Init(be_app->Thread(), be_app->Team(),
BMessenger::Private(be_app_messenger).Port(),
B_EXCLUSIVE_LAUNCH | B_BACKGROUND_APP, &ref, kRegistrarSignature);
B_EXCLUSIVE_LAUNCH | B_BACKGROUND_APP, &ref, B_REGISTRAR_SIGNATURE);
info->state = APP_STATE_REGISTERED;
info->registration_time = system_time();
error = AddApp(info);
@@ -16,6 +16,7 @@
#include <new>
#include <errno_private.h>
#include <launch.h>
#include <libroot_private.h>
#include <locks.h>
#include <RegistrarDefs.h>
@@ -54,9 +55,14 @@ BPrivate::user_group_unlock()
port_id
BPrivate::get_registrar_authentication_port()
{
if (sRegistrarPort < 0)
sRegistrarPort = find_port(REGISTRAR_AUTHENTICATION_PORT_NAME);
if (sRegistrarPort < 0) {
BPrivate::KMessage data;
if (BPrivate::get_launch_data(B_REGISTRAR_SIGNATURE, data)
== B_OK) {
sRegistrarPort = data.GetInt32(
B_REGISTRAR_AUTHENTICATION_PORT_NAME "_port", -1);
}
}
return sRegistrarPort;
}