Commit graph

67 commits

Author SHA1 Message Date
Michael Meeks
cca657c8f2 Apply the pre-branch rename script to re-organize the source. 2016-11-25 09:58:48 +00:00
Ashod Nakashian
cf2f4ed712 loolwsd: improve interrupted pipe-reading handling in forkit
Change-Id: Iabaadee064bb1178cc6b1bd3482608a758d65506
Reviewed-on: https://gerrit.libreoffice.org/30892
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-11-16 04:43:17 +00:00
Ashod Nakashian
f7b6ece593 loolwsd: LOOLForKit logs updated
Change-Id: I4a248b5c9b6c5c68ddec1041c9bba0f0d6142946
Reviewed-on: https://gerrit.libreoffice.org/30886
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-11-16 04:41:23 +00:00
Ashod Nakashian
8072576424 loolwsd: move signal and process code to SigUtil files
Change-Id: I91c001ef54858d942f8e3fe56d8a6b02cb2bf37e
Reviewed-on: https://gerrit.libreoffice.org/30846
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-11-14 21:20:21 +00:00
Ashod Nakashian
6ad3b64d30 loolwsd: kill children using SIGTERM from via a helper function
Change-Id: I901183fc59725681208a5c0f23f0916e158e5654
Reviewed-on: https://gerrit.libreoffice.org/30825
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-11-14 05:29:24 +00:00
Ashod Nakashian
b7df3b50a9 loolwsd: Log::syserror and Log::sysfatal now supported as macro
Change-Id: Ic07e7fb46e0b3e01db164e5812ef9256f149e5d9
Reviewed-on: https://gerrit.libreoffice.org/30822
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-11-14 05:24:04 +00:00
Ashod Nakashian
ad70138fc9 loolwsd: move file utilities into FileUtil files
Change-Id: Ib0c0bc66adabe6885f7ac16414a3d5af13d72893
Reviewed-on: https://gerrit.libreoffice.org/30820
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-11-14 05:23:01 +00:00
Michael Meeks
87d5849176 Pass master port number to forkit.
Fixes issues with free port selection.
2016-10-26 15:51:25 +01:00
Ashod Nakashian
20b98906bd loolwsd: avoid superflous noise where possible
Change-Id: Idb9180d81e471da965152175aa3c327b83613ab1
Reviewed-on: https://gerrit.libreoffice.org/30206
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-10-23 21:10:32 +00:00
Ashod Nakashian
de7cda7891 loolwsd: improve child cleanup and forking
Change-Id: I437216d87b6fa15e567e102ed875b22ef03351b2
Reviewed-on: https://gerrit.libreoffice.org/29948
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-10-16 22:11:18 +00:00
Tor Lillqvist
650ab54d00 Log fatal errors as such 2016-10-14 13:02:58 +03:00
Tor Lillqvist
c8d5c279b9 Move comment 2016-10-13 23:49:27 +03:00
Miklos Vajna
4104e341f5 Remove unused using declarations
And a few other minor fixes. No need to create an std::string object
when a char number is enough, nor need to copy an object when passing it
by reference is enough.

Change-Id: I3d6aba20ffce781532ea77fe079ce64378db6e12
2016-10-13 08:20:04 +02:00
Tor Lillqvist
58f78f8734 Don't use named pipes (FIFOs)
Use a plain pipe, as created by Poco::Process::launch() when you pass
a non-nullptr inPipe pointer to it. Leads to simpler code. No need to
explicitly create a FIFO and open it. In loolforkit, the read fd of
the pipe is now always 0 (stdin).

Creating the pipe ourselves in loolwsd using pipe() and passing the fd
of the read end of the pipe on the loolforkit command-line would not
be much more complex, and was what I first tried. But it did not work,
as Poco::ProcessImpl::launchByForkExecImpl() closes all file
descriptors >= 3. Which is a bit rude, and not documented, but there
you go.
2016-10-12 18:51:40 +03:00
Tor Lillqvist
d658a35c03 Fix copy-paste error 2016-10-12 15:15:39 +03:00
Tor Lillqvist
7872c5f083 I mean loolforkit, not loolkit 2016-10-12 15:13:26 +03:00
Tor Lillqvist
4655c73539 Check the capabilities only after opening the fifo
loolwsd is waiting in open() for loolkit to open its end of the pipe,
so if loolforkit exits before it has opened the pipe, loolwsd will
wait forever and not notice that loolkit has exited. Which is not
ideal.

Note that there are other sanity checks done before loolforkit opens
the pipe, and if some of them fail, and loolforkit exits, loolwsd will
be hanging in the open and not notice. Need to carefully look through
that and re-factor as necessary.

Using a named pipe (FIFO) is probably pointless. We should just create
a normal pipe in loolwsd and pass the fd of the reading end on the
command-line to loolforkit.
2016-10-12 14:56:34 +03:00
Tor Lillqvist
d0c856c535 Verify at run-time that the loolforkit program has the required capabilities
If not, log a mesage and exit.

Note that loolwsd does not notice that loolforkit exits. That is
obviously a problem, and I will see to that next.
2016-10-12 14:19:42 +03:00
Tor Lillqvist
9fee650f43 Use std::getenv() consistently 2016-10-12 11:47:26 +03:00
Tor Lillqvist
735713bfb4 The withColor parameter to Log::initialize() is bool
So passing a char* that never is null meant it will always be
automatically converted to true, which is not useful.
2016-10-07 11:53:07 +03:00
Miklos Vajna
3f0def0b02 Avoid 'auto' for getenv() result
Which is sometimes stored in a bool, but when auto is used, it's char*,
so it helps to have that written explicitly.

Change-Id: I561692e8d5c575b4ff8612fd50e489ad3c60d655
2016-10-07 10:20:13 +02:00
Henry Castro
b60f596a64 loolwsd: avoid getenv() nullptr
what():  basic_string::_S_construct null not valid
2016-10-06 15:02:13 -04:00
Michael Meeks
39b2c725d9 Improve and standardize version details: display on start. 2016-10-06 11:18:50 +01:00
Jan Holesovsky
0409243683 Log either to file or the console, not to both.
Change-Id: Iac1e74d0624c2bbac4ffaf99b11488f02e626a2a
2016-09-27 14:36:39 +02:00
Tor Lillqvist
df3cc99025 Don't require the LOK_VIEW_CALLLBACK env var any more
Act as if it was always set.

The ChildSession::_multiView field will always be true, so factor it
out. Ditto for Document::_multiView.

The ClientSession::_haveEditLock will also be always true, so factor
it out. This means the ClientSession::isEditLocked() will always
return true, so factor it out, too.

ClientSession::markEditLock() always will always set _haveEditLock to
true (which it will be from the constructor already anyway) so it can
be removed.

ClientSession::setEditLock() does not need a parameter as the
parameter was actually only used for misleading logging. The msg
variable constructed in the function used isEditLocked(), not the
parameter.

We still generate and handle editlock messages. Not sure whether that
makes any sense, though.
2016-09-19 12:13:00 +03:00
Ashod Nakashian
8745e24fa9 loolwsd: ChildDispatcher -> CommandDispatcher
Change-Id: I9e51e4258ae05dd0e56d52ba2f99fadbcb58257c
Reviewed-on: https://gerrit.libreoffice.org/28127
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-08-15 03:11:30 +00:00
Ashod Nakashian
5b639c3a2d loolwsd: use log settings from the config XML
Change-Id: I0384d97b5411d3ff537b344e67f166daa65630c1
Reviewed-on: https://gerrit.libreoffice.org/27951
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-08-08 03:46:06 +00:00
Pranav Kant
b83ac269fa loolwsd: Send LOKit version information to clients
Send as a response to 'loolclient' message received from the
client

Change-Id: I3d33f9fd087489aa9bf5a94f591ab04e208cbf13
2016-06-21 00:30:36 +05:30
Pranav Kant
e271995ed2 loolwsd: Restructure version information functions
... so that version information can be sent to clients.

Change-Id: Icc90f31fabb501f816ff1dca0c618a73660c88bc
2016-06-21 00:29:41 +05:30
Miklos Vajna
afb6a7ebb0 Util: turn TerminationFlag into an std::atomic<bool>
Running unit-fonts under helgrind points out missing synchronization
there.
2016-06-15 15:31:41 +02:00
Ashod Nakashian
fae850189d loolwsd: include cleanup and organization
A source file (.cpp) must include its own header first.
This insures that the header is self-contained and
doesn't depend on arbitrary (and accidental) includes
before it to compile.

Furthermore, system headers should go next, followed by
C then C++ headers, then libraries (Poco, etc) and, finally,
project headers come last.

This makes sure that headers and included in the same dependency
order to avoid side-effects. For example, Poco should never rely on
anything from our project in the same way that a C header should
never rely on anything in C++, Poco, or project headers.

Also, includes ought to be sorted where possible, to improve
readability and avoid accidental duplicates (of which there
were a few).

Change-Id: I62cc1343e4a091d69195e37ed659dba20cfcb1ef
Reviewed-on: https://gerrit.libreoffice.org/25262
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-05-21 15:52:54 +00:00
Ashod Nakashian
6ce9868a9c loolwsd: more frequent zombie reaping in forkit
Change-Id: I10d859880cfd933c38572852f506eedf603e8fad
Reviewed-on: https://gerrit.libreoffice.org/25232
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-05-21 03:16:56 +00:00
Miklos Vajna
c2fc95ac23 Drop unused using declarations
Change-Id: Iee778833781c6f00c1fb0b8fc1975acfe4fb0cd9
2016-05-10 09:14:22 +02:00
Ashod Nakashian
d2f4a516a6 loolwsd: spawn ForKit process after initializing server
WSD server must be up and listening to incoming
connections before firing up ForKit and spawning
children.

Having the order reversed caused tests to fail
randomly when WSD was slow to listen to incoming
connections from children already initialized.

Change-Id: I4eaf4a658c65da024101efc096c39222ebfa3c00
Reviewed-on: https://gerrit.libreoffice.org/24745
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-05-08 04:31:44 +00:00
Jan Holesovsky
191ee00f2c Run the tests on ports that do not conflict with a 'normal' loolwsd.
For the moment, it will allow running 'make check' that does not conflict with
an already running loolwsd (eg. from 'make run').  Later we can consider
running more tests in parallel.
2016-05-04 13:39:32 +02:00
Tor Lillqvist
d012075dc8 Sanity check 2016-04-18 16:40:28 +03:00
Tor Lillqvist
a08b2a0e0b Just use "/" instead of Poco::Path::separator() 2016-04-18 15:34:34 +03:00
Tor Lillqvist
311a748d45 Clean up jails of exited loolkit processes sooner
In loolforkit, whenever we have forked a new loolkit, also check if
any previously forked children have exited. Remove the jails of
those. (The loolkit process itself does not even try to remove all of
its jail, see 3aadd910c6e32c0e557671effa5a4c606cd6e8bf.)

In order to be able to notice exited child processes in loolforkit, we
no longer can set the action for SIGCHLD to SIG_IGN. That means that
exiting loolkit processes will be in the zombie state until loolforkit
picks up their exit status. As loolforkit does this check only in
connection with forking a new child, zombie loolkit processes will
hang around for some time, until the next loolkit process is
forked. Not sure if this is a problem.

countLoolKitProcesses() in httpwstest now needs to skip zombies.

Loolwsd still takes care of removing whatever jails are left when it
finishes.
2016-04-18 14:30:09 +03:00
Miklos Vajna
0f82a3a6ae loolwsd: fix -Werror,-Wshadow
Change-Id: I33095de03e5f3df3ed8919121f6a078f80c26ae9
2016-04-18 08:41:19 +02:00
Ashod Nakashian
7399f82b4e loolwsd: std::exit -> std::_Exit in forkit
Change-Id: I68af331440d95811f1d50c95de470350c0b6a4a3
Reviewed-on: https://gerrit.libreoffice.org/24179
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-04-18 03:33:12 +00:00
Ashod Nakashian
a000a1e274 loolwsd: forkit exits without cleanup to avoid LO Core assertions
Change-Id: Ic9033b7d33f2ef114615950f01eab5904faa2ca7
Reviewed-on: https://gerrit.libreoffice.org/24165
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-04-17 16:12:49 +00:00
Ashod Nakashian
882ffafb16 loolwsd: simplified ChildDispatcher
Change-Id: I5b61678a01f4491ca06a25dd969f7538b4c8445d
Reviewed-on: https://gerrit.libreoffice.org/24164
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
2016-04-17 16:12:30 +00:00
Michael Meeks
6388298a04 Attempt at a --nocaps argument to run with no caps, ie. under valgrind. 2016-04-16 20:47:55 +01:00
Michael Meeks
a49f642801 Tolerate --version, and add git hash version, print on default start.
Should help diagnosing issues - to have this in our logs.
2016-04-15 15:07:24 +01:00
Michael Meeks
688d1ab6e6 Remove confusing ChildProcessSession include on LOOLWSD.
Move the ClientPortNumber into both Kit and WSD.
2016-04-14 18:58:18 +01:00
Michael Meeks
35b27b352c Initial font unit test. 2016-04-14 09:34:52 +01:00
Michael Meeks
25a092d7de Add memory accounting metric to UnitPrefork.
Also add hooks to allow custom LOK <-> WSD message for this test.
2016-04-12 21:58:27 +01:00
Michael Meeks
6a990dfb61 Security bits and test cleanup.
Enforce user being 'lool' for setcap binaries loolmount and loolforkit.

Add warnings if configured without --enable-debug.

Developers should pass --enable-debug to configure.
2016-04-12 17:13:56 +01:00
Tor Lillqvist
5c6e209567 Log creation and opening of fifos in more detail 2016-04-12 17:49:20 +03:00
Tor Lillqvist
9086f378d8 Pedantry 2016-04-12 14:48:26 +03:00