aboutsummaryrefslogtreecommitdiffstats
path: root/unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'unix.c')
-rw-r--r--unix.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/unix.c b/unix.c
index dd267d8b..a41f9c3a 100644
--- a/unix.c
+++ b/unix.c
@@ -146,12 +146,17 @@ int main(int argc, char *argv[])
(!getuid() || !geteuid())) {
struct passwd *pw = NULL;
pw = getpwnam(global.conf->user);
- if (pw) {
- initgroups(global.conf->user, pw->pw_gid);
- setgid(pw->pw_gid);
- setuid(pw->pw_uid);
- } else {
- log_message(LOGLVL_WARNING, "Failed to look up user %s.", global.conf->user);
+ if (!pw) {
+ log_message(LOGLVL_ERROR, "Failed to look up user %s.", global.conf->user);
+
+ } else if (initgroups(global.conf->user, pw->pw_gid) != 0) {
+ log_message(LOGLVL_ERROR, "initgroups: %s.", strerror(errno));
+
+ } else if (setgid(pw->pw_gid) != 0) {
+ log_message(LOGLVL_ERROR, "setgid(%d): %s.", pw->pw_gid, strerror(errno));
+
+ } else if (setuid(pw->pw_uid) != 0) {
+ log_message(LOGLVL_ERROR, "setuid(%d): %s.", pw->pw_uid, strerror(errno));
}
}
@@ -280,9 +285,10 @@ void sighandler_shutdown_setup()
/* Signal handler for SIGTERM and SIGINT */
static void sighandler_shutdown(int signal)
{
+ int unused G_GNUC_UNUSED;
/* Write a single null byte to the pipe, just to send a message to the main loop.
* This gets handled by bitlbee_shutdown (the b_input_add callback for this pipe) */
- write(shutdown_pipe.fd[1], "", 1);
+ unused = write(shutdown_pipe.fd[1], "", 1);
}
/* Signal handler for SIGSEGV
@@ -291,13 +297,14 @@ static void sighandler_shutdown(int signal)
static void sighandler_crash(int signal)
{
GSList *l;
+ int unused G_GNUC_UNUSED;
const char *message = "ERROR :BitlBee crashed! (SIGSEGV received)\r\n";
int len = strlen(message);
for (l = irc_connection_list; l; l = l->next) {
irc_t *irc = l->data;
sock_make_blocking(irc->fd);
- write(irc->fd, message, len);
+ unused = write(irc->fd, message, len);
}
raise(signal);