diff --git a/src/main.c b/src/main.c index 7ee01a5a..89ed2552 100644 --- a/src/main.c +++ b/src/main.c @@ -162,13 +162,21 @@ void shutdown_subsystems(void) xslt_shutdown(); } -static int _parse_config_opts(int argc, char **argv, char *filename, int size) +static int _parse_config_opts(int argc, char **argv, char *filename, size_t size) { int i = 1; int config_ok = 0; background = 0; - if (argc < 2) return -1; + if (argc < 2) { + if (filename[0] != 0) { + /* We have a default filename, so we can work with no options. */ + return 1; + } else { + /* We need at least a config filename. */ + return -1; + } + } while (i < argc) { if (strcmp(argv[i], "-b") == 0) { @@ -493,13 +501,17 @@ int main(int argc, char **argv) #endif { int res, ret; - char filename[512]; +#ifdef ICECAST_DEFAULT_CONFIG + char filename[512] = ICECAST_DEFAULT_CONFIG; +#else + char filename[512] = ""; +#endif char pbuf[1024]; /* parse the '-c icecast.xml' option ** only, so that we can read a configfile */ - res = _parse_config_opts(argc, argv, filename, 512); + res = _parse_config_opts(argc, argv, filename, sizeof(filename)); if (res == 1) { #if !defined(_WIN32) || defined(_CONSOLE) || defined(__MINGW32__) || defined(__MINGW64__) /* startup all the modules */ @@ -563,7 +575,7 @@ int main(int argc, char **argv) #ifdef HAVE_SETUID /* We'll only have getuid() if we also have setuid(), it's reasonable to * assume */ - if(!getuid()) /* Running as root! Don't allow this */ + if(!getuid() && getpid() != 1) /* Running as root! Don't allow this */ { fprintf(stderr, "ERROR: You should not run icecast2 as root\n"); fprintf(stderr, "Use the changeowner directive in the config file\n"); @@ -582,6 +594,7 @@ int main(int argc, char **argv) } ICECAST_LOG_INFO("%s server started", ICECAST_VERSION_STRING); + ICECAST_LOG_INFO("Server's PID is %lli", (long long int)getpid()); __log_system_name(); /* REM 3D Graphics */