* Scripts from targets are evaluated once on first target launch,
scripts from jobs are evaluated on each start.
* The "desktop" target now sources SetupEnvironment as usual.
* This also fixes the shutdown process, as the registrar no longer
kills the app_server.
* Removed SERVER_PORT_NAME definition as it has no use anymore.
* Certain things are set on job construction only.
* Now checks if the message has the field before updating it.
* Might not be final yet (it is confusing that 'requires' will add to
the requirements, but 'launch' will replace all arguments).
* When creating the port of the registrar's authentication manager, we
now set it manually, so that the user/group functions work.
* This allows LaunchDaemon::_StartSession() to set up the user, and
groups as needed.
* Instead, the caller should have done this already. This is really
outside of the scope of the launch_daemon.
* Fixed Login with empty passwords; removed the (unused) test login
feature along the way.
* This allows to remove a job in the init phase already, if its
condition is not only constant, but also failing.
* Also removed the special Job::LaunchInSafeMode() method; this is now
done using the conditions (the config option no_safemode remains,
though).
* Allows to conditionally (or unconditionally) launch targets.
* Including tests for the settings parser.
* FirstBootPrompt is now launched when deemed necessary (as in
the Bootscript).
* Admittedly not very well thought out, but it should be good
enough for now; it doesn't really make sense to initialize jobs
that is never run due to failed conditions.
* Job, and Target now have a common base class BaseJob that deals
with the conditions.
* Moved related test code from DriverSettingsMessageAdapterTest to the
SettingsParser class.
* Added SettingsParserTest class -- most tests already succeed, but not
all; support for the flattened "not" is not working yet.
* You can now add arbitrarily named fields to the message as well,
without having them all specified in the template.
* Also added a missing converter method that is called when there
are no values to add, and implemented all methods in the base
class, so that you only have to implement the methods you actually
need.
* BRoster now allows settings a "no-registrar" mode that is currently
only honored in _LaunchApp(), though.
* Job::Launch() is now using this, which also allows launching
applications by signature (ie. if the job name matches the
signature, you can omit the "launch" option).
* You can now put jobs/services into a target.
* Instead of having Login started as part of the normal boot process,
it's now in the "login" target.
* The app_server now launches the login target when a login becomes
available (ie. during startup, but that could be improved later on).
* Instead of launching Tracker/Deskbar directly, we now launch the
Login application.
* This will now start a new session for the selected user (the password
is currently ignored).
* When a user session is started, the launch_daemon forks, and the
child then restarts the LaunchDaemon application in user mode.
* It then registers itself with its parent, in order to resolve user
dependent services.
* Added a user launch file that will cause Tracker, and Deskbar to
start in the new session.
* Job is now a BJob, and includes the former LaunchJob functionality.
* Dependencies are now resolved on init, and jobs are removed early
when they are not met (or are cyclic, which is now also detected).
* Implemented a multi-threaded job queue, that launches as many as CPU
count jobs at once -- due to SSDs, this number could possibly even be
made much larger, though.
* Launching a job now happens within that worker queues as a LaunchJob.
* Put all init jobs into an init target, and make the launch jobs depend
on it.
* Added initializing /tmp & /var/shared_memory to the launch_daemon.
* Moved clockconfig.cpp code into the launch_daemon.
* This follows systemd design; since those jobs are fixed, it doesn't
matter where you maintain them.
* The init jobs are BJobs, but the JobQueue is only used for that
one use for now. At a later time, I intend to put the job launching
in there, as well. BJob allows to represent the dependencies already.
* 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.
* Instead of letting the kernel search for the syslog port, the
daemon now registers itself with the kernel (which even solves
a TODO).
* A port is created for the actual log messages from the launch_daemon,
and used on start.
* However, the SyslogTest does not yet work, due to the BMessage <->
KMessage communication problems.
* These methods don't really work yet, as BMessage doesn't support
replying with a KMessage; the request is received, but the reply
never gets to the target.
* Dropped "create_port" -- this is now the default for services.
* Additionally (or alternatively, if you use the "legacy" mode), you can
now create named ports, and specify their capacity.
* Added convenience methods to BLaunchRoster that automatically use the
signature of the current be_app.