/* Drop root privileges. If some system call fails, die. */
-static void silc_server_drop(SilcServer server)
+static void silc_server_drop_privs(SilcServer server)
{
/* Are we executing silcd as root or a regular user? */
if (geteuid()) {
/* Parse command line arguments */
if (argc > 1) {
- while ((opt = getopt_long(argc, argv, "f:p:d::xhFVC:",
+ while ((opt = getopt_long(argc, argv, "f:p:d:xhFVC:",
long_opts, &option_index)) != EOF) {
switch(opt) {
case 'h':
silc_schedule_signal_register(silcd->schedule, SIGTERM, stop_server, NULL);
silc_schedule_signal_register(silcd->schedule, SIGINT, stop_server, NULL);
- if (!foreground) {
- /* Drop root. */
- silc_server_drop(silcd);
+ /* Drop root if we are not in debug mode, so you don't need to bother about
+ file writing permissions and so on */
+ if (!silc_debug)
+ silc_server_drop_privs(silcd);
+ if (!foreground) {
/* Before running the server, fork to background. */
silc_server_daemonise(silcd);
/* Stop the server and free it. */
silc_server_stop(silcd);
- silc_server_free(silcd);
silc_server_config_destroy(silcd->config);
+ silc_server_free(silcd);
/* Flush the logging system */
silc_log_flush_all();