int main(int argc, char **argv) { int res, ret; char filename[512]; char pbuf[1024]; kitsune_do_automigrate(); /**DSU data */ if (!kitsune_is_updating()) { /**DSU control */ /* parse the '-c icecast.xml' option ** only, so that we can read a configfile */ res = _parse_config_opts(argc, argv, filename, 512); if (res == 1) { /* startup all the modules */ _initialize_subsystems(); /* parse the config file */ config_get_config(); ret = config_initial_parse_file(filename); config_release_config(); if (ret < 0) { memset(pbuf, '\000', sizeof(pbuf)); snprintf(pbuf, sizeof(pbuf)-1, "FATAL: error parsing config file (%s)", filename); _fatal_error(pbuf); switch (ret) { case CONFIG_EINSANE: _fatal_error("filename was null or blank"); break; case CONFIG_ENOROOT: _fatal_error("no root element found"); break; case CONFIG_EBADROOT: _fatal_error("root element is not <icecast>"); break; default: _fatal_error("XML config parsing error"); break; } _shutdown_subsystems(); return 1; } } else if (res == -1) { _print_usage(); return 1; } /* override config file options with commandline options */ config_parse_cmdline(argc, argv); /* Bind socket, before we change userid */ if(!_server_proc_init()) { _fatal_error("Server startup failed. Exiting"); _shutdown_subsystems(); return 1; } _ch_root_uid_setup(); /* Change user id and root if requested/possible */ stats_initialize(); /* We have to do this later on because of threading */ fserve_initialize(); /* This too */ #ifdef CHUID /* We'll only have getuid() if we also have setuid(), it's reasonable to * assume */ if(!getuid()) /* 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"); _shutdown_subsystems(); return 1; } #endif /* setup default signal handlers */ sighandler_initialize(); if (!_start_logging()) { _fatal_error("FATAL: Could not start logging"); _shutdown_subsystems(); return 1; } INFO0 (ICECAST_VERSION_STRING " server started"); /* REM 3D Graphics */ /* let her rip */ global.running = ICE_RUNNING; /* Startup yp thread */ yp_initialize(); /* Do this after logging init */ slave_initialize(); auth_initialise (); } else { /**DSU control 2 */ /* setup default signal handlers */ sighandler_initialize(); } /* END EKIDEN INIT BLOCK */ _server_proc(); INFO0("Shutting down"); _shutdown_subsystems(); if (pidfile) { remove (pidfile); free (pidfile); } return 0; }
int main(int argc, char **argv) { int res, ret; ice_config_t *config; char *pidfile = NULL; char filename[512]; char pbuf[1024]; /* parse the '-c icecast.xml' option ** only, so that we can read a configfile */ res = _parse_config_file(argc, argv, filename, 512); if (res == 1) { /* startup all the modules */ _initialize_subsystems(); /* parse the config file */ config_get_config(); ret = config_initial_parse_file(filename); config_release_config(); if (ret < 0) { memset(pbuf, '\000', sizeof(pbuf)); snprintf(pbuf, sizeof(pbuf)-1, "FATAL: error parsing config file (%s)", filename); _fatal_error(pbuf); switch (ret) { case CONFIG_EINSANE: _fatal_error("filename was null of blank"); break; case CONFIG_ENOROOT: _fatal_error("no root element found"); break; case CONFIG_EBADROOT: _fatal_error("root element is not <icecast>"); break; default: _fatal_error("XML config parsing error"); break; } _shutdown_subsystems(); return 1; } } else if (res == -1) { _print_usage(); return 1; } /* override config file options with commandline options */ config_parse_cmdline(argc, argv); /* Bind socket, before we change userid */ if(!_server_proc_init()) { _fatal_error("Server startup failed. Exiting"); _shutdown_subsystems(); return 1; } _ch_root_uid_setup(); /* Change user id and root if requested/possible */ stats_initialize(); /* We have to do this later on because of threading */ fserve_initialize(); /* This too */ #ifdef CHUID /* We'll only have getuid() if we also have setuid(), it's reasonable to * assume */ if(!getuid()) /* Running as root! Don't allow this */ { fprintf(stderr, "WARNING: You should not run icecast2 as root\n"); fprintf(stderr, "Use the changeowner directive in the config file\n"); _shutdown_subsystems(); return 1; } #endif /* setup default signal handlers */ sighandler_initialize(); if (!_start_logging()) { _fatal_error("FATAL: Could not start logging"); _shutdown_subsystems(); return 1; } config = config_get_config_unlocked(); /* recreate the pid file */ if (config->pidfile) { FILE *f; pidfile = strdup (config->pidfile); if (pidfile && (f = fopen (config->pidfile, "w")) != NULL) { fprintf (f, "%d\n", getpid()); fclose (f); } } /* Do this after logging init */ slave_initialize(); INFO0("icecast server started"); /* REM 3D Graphics */ /* let her rip */ global.running = ICE_RUNNING; #ifdef USE_YP /* Startup yp thread */ yp_initialize(); #endif _server_proc(); INFO0("Shutting down"); _shutdown_subsystems(); if (pidfile) { remove (pidfile); free (pidfile); } return 0; }