* [fmorgner](https://github.com/fmorgner)
* [Rawi666](https://github.com/Rawi666)
* [snowblind](https://github.com/snowblind)
+* [c4k3](https://github.com/C4K3)
Hope I didn't forget anyone... Please just send me a mail if you feel this is the case.
case BINDPORT6:
setting = config_lookup(&configuration, "bindport6");
if (!setting)
- return DEFAULT_BINDPORT;
+ /* If bindport6 is not specified, we default
+ * to whatever bindport is, rather than always
+ * default to 64738 */
+ return getIntConf(BINDPORT);
else {
return config_setting_get_int(setting);
}
else
return config_setting_get_bool(setting);
break;
+ case SHOW_ADDRESSES:
+ setting = config_lookup(&configuration, "show_addresses");
+ if (!setting)
+ return true;
+ else
+ return config_setting_get_bool(setting);
+ break;
default:
doAssert(false);
}
BANFILE,
SYNC_BANFILE,
OPUS_THRESHOLD,
+ SHOW_ADDRESSES,
} param_t;
typedef struct {
Log_init(false);
if (pidfile != NULL)
lockfile(pidfile);
+#ifdef POSIX_PRIORITY_SCHEDULING
+ /* Set the scheduling policy, has to be called after daemonizing
+ * but before we drop privileges */
+ if (realtime)
+ setscheduler();
+#endif
+
}
else Log_init(true);
+#ifdef POSIX_PRIORITY_SCHEDULING
+ /* We still want to set scheduling policy if nodaemon is specified,
+ * but if we are daemonizing setscheduler() will be called above */
+ if (nodaemon) {
+ if (realtime)
+ setscheduler();
+ }
+#endif
+
signal(SIGCHLD, SIG_IGN); /* ignore child */
signal(SIGTSTP, SIG_IGN); /* ignore tty signals */
signal(SIGTTOU, SIG_IGN);
Sharedmemory_init( bindport, bindport6 );
#endif
-#ifdef POSIX_PRIORITY_SCHEDULING
- if (realtime)
- setscheduler();
-#endif
+ if(!nodaemon) {
+ /* SSL and scheduling is setup, we can drop privileges now */
+ switch_user();
- switch_user();
- /* Reopen log file. If user switch results in access denied, we catch
- * it early.
- */
- Log_reset();
+ /* Reopen log file. If user switch results in access denied, we catch
+ * it early.
+ */
+ Log_reset();
+ }
Server_run();
sendmsg->payload.userStats->opus = target->bOpus;
/* Address */
- sendmsg->payload.userStats->has_address = true;
- sendmsg->payload.userStats->address.data
- = Memory_safeMalloc(16, sizeof(uint8_t));
- memset(sendmsg->payload.userStats->address.data, 0, 16);
- /* ipv4 representation as ipv6 address. Supposedly correct. */
- memset(&sendmsg->payload.userStats->address.data[10], 0xff, 2); /* IPv4 */
- if(target->remote_tcp.ss_family == AF_INET)
- memcpy(&sendmsg->payload.userStats->address.data[12], &((struct sockaddr_in*)&target->remote_tcp)->sin_addr, 4);
- else
- memcpy(&sendmsg->payload.userStats->address.data[0], &((struct sockaddr_in6*)&target->remote_tcp)->sin6_addr, 16);
- sendmsg->payload.userStats->address.len = 16;
+ if (getBoolConf(SHOW_ADDRESSES)) {
+ sendmsg->payload.userStats->has_address = true;
+ sendmsg->payload.userStats->address.data
+ = Memory_safeMalloc(16, sizeof(uint8_t));
+ memset(sendmsg->payload.userStats->address.data, 0, 16);
+ /* ipv4 representation as ipv6 address. Supposedly correct. */
+ memset(&sendmsg->payload.userStats->address.data[10], 0xff, 2); /* IPv4 */
+ if(target->remote_tcp.ss_family == AF_INET)
+ memcpy(&sendmsg->payload.userStats->address.data[12], &((struct sockaddr_in*)&target->remote_tcp)->sin_addr, 4);
+ else
+ memcpy(&sendmsg->payload.userStats->address.data[0], &((struct sockaddr_in6*)&target->remote_tcp)->sin6_addr, 16);
+ sendmsg->payload.userStats->address.len = 16;
+ } else {
+ sendmsg->payload.userStats->has_address = false;
+ }
}
/* BW */
sendmsg->payload.userStats->has_bandwidth = true;
# sync_banfile = false; # Keep banfile synced. Default is false, which means it is saved to at shutdown only.
# allow_textmessage = true; # Default is true
# opus_threshold = 100; # Percentage of users supporting Opus codec for it to be chosen. Default is 100.
+# show_addresses = true; # Whether to show client's IP addresses under user information
max_users = 10;
# bindport = 64738;