From e71477e301f7825a591707ac4722ad38b2958ede Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 16 May 2014 13:14:26 +0200 Subject: [PATCH] fix open webserver port < 1024 as non privileged user --- .../main/java/sonia/scm/server/ScmServer.java | 36 +++++++++++++++++-- .../sonia/scm/server/ScmServerDaemon.java | 3 ++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/scm-server/src/main/java/sonia/scm/server/ScmServer.java b/scm-server/src/main/java/sonia/scm/server/ScmServer.java index 6cb36415a6..13da881679 100644 --- a/scm-server/src/main/java/sonia/scm/server/ScmServer.java +++ b/scm-server/src/main/java/sonia/scm/server/ScmServer.java @@ -92,12 +92,23 @@ public class ScmServer extends Thread { try { + if (!initialized) + { + server.join(); + } + server.start(); - server.join(); } catch (Exception ex) { - throw new RuntimeException(ex); + if (ex instanceof ScmServerException) + { + throw(ScmServerException) ex; + } + else + { + throw new ScmServerException("could not start scm-server", ex); + } } } @@ -110,6 +121,7 @@ public class ScmServer extends Thread try { server.setStopAtShutdown(true); + initialized = false; } catch (Exception ex) { @@ -117,8 +129,28 @@ public class ScmServer extends Thread } } + /** + * Method description + * + */ + void init() + { + try + { + server.start(); + initialized = true; + } + catch (Exception ex) + { + throw new ScmServerException("could not initialize server", ex); + } + } + //~--- fields --------------------------------------------------------------- + /** Field description */ + private boolean initialized = false; + /** Field description */ private Server server = new Server(); } diff --git a/scm-server/src/main/java/sonia/scm/server/ScmServerDaemon.java b/scm-server/src/main/java/sonia/scm/server/ScmServerDaemon.java index 93fd7d77bd..0799f7e69e 100644 --- a/scm-server/src/main/java/sonia/scm/server/ScmServerDaemon.java +++ b/scm-server/src/main/java/sonia/scm/server/ScmServerDaemon.java @@ -113,6 +113,9 @@ public class ScmServerDaemon implements Daemon public void init(DaemonContext context) throws DaemonInitException, Exception { daemonArgs = context.getArguments(); + // initialize web server and open port. We have to do this in the init + // method, because this method is started by jsvc with super user privileges. + webserver.init(); } /**