aboutsummaryrefslogtreecommitdiffstats
path: root/unix.c
diff options
context:
space:
mode:
authorulim <a.sporto+bee@gmail.com>2007-12-04 02:08:43 +0100
committerulim <a.sporto+bee@gmail.com>2007-12-04 02:08:43 +0100
commit08135dff0e668622fc858d2ad8a7d0bdbdb8cb24 (patch)
treed46ae0a920d1db0a9f710cb916657ae549db31cb /unix.c
parentfa30fa598d2e77c998f9156d0f31ccf99b0c781f (diff)
parentaaf92a9eb64327892e39fdbd7113d797d1d68cec (diff)
Merged in current devel
Wilmer van der Gaast 2007-12-02 Imported setuid() patch from Simo Leone <simo@archlinux...> with some Wilmer van der Gaast 2007-12-02 Forgot to return something in jabber_chat_join_failed(). Wilmer van der Gaast 2007-12-02 Merging a change I should've pulled before committing three other changes. Wilmer van der Gaast 2007-12-02 Added charset checks on incoming msgs (from the IRC side) to prevent possible Wilmer van der Gaast 2007-12-02 Handling of presence-error packets (only useful for groupchats now), moved Wilmer van der Gaast 2007-12-02 Defining DEBUG via CFLAGS so that it'll always be there, even when a file Wilmer van der Gaast 2007-12-02 Removed retarded printf() (ARGH) and moved the event handling handling of Wilmer van der Gaast 2007-11-29 printf() in daemons considered harmful. Wilmer van der Gaast 2007-11-28 Fixed the epoll+ForkDaemon combination. The libevent event handling
Diffstat (limited to 'unix.c')
-rw-r--r--unix.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/unix.c b/unix.c
index 0abf43ea..75ffcf95 100644
--- a/unix.c
+++ b/unix.c
@@ -33,6 +33,7 @@
#include <unistd.h>
#include <sys/time.h>
#include <sys/wait.h>
+#include <pwd.h>
global_t global; /* Against global namespace pollution */
@@ -44,8 +45,6 @@ int main( int argc, char *argv[], char **envp )
char *old_cwd = NULL;
struct sigaction sig, old;
- memset( &global, 0, sizeof( global_t ) );
-
log_init();
CONF_FILE = g_strdup( CONF_FILE_DEF );
global.conf = conf_load( argc, argv );
@@ -86,12 +85,26 @@ int main( int argc, char *argv[], char **envp )
if( i != 0 )
return( i );
+ if( ( global.conf->user && *global.conf->user ) &&
+ ( global.conf->runmode == RUNMODE_DAEMON ||
+ global.conf->runmode == RUNMODE_FORKDAEMON ) &&
+ ( !getuid() || !geteuid() ) )
+ {
+ struct passwd *pw = NULL;
+ pw = getpwnam( global.conf->user );
+ if( pw )
+ {
+ setgid( pw->pw_gid );
+ setuid( pw->pw_uid );
+ }
+ }
+
global.storage = storage_init( global.conf->primary_storage, global.conf->migrate_storage );
- if ( global.storage == NULL) {
+ if( global.storage == NULL )
+ {
log_message( LOGLVL_ERROR, "Unable to load storage backend '%s'", global.conf->primary_storage );
return( 1 );
}
-
/* Catch some signals to tell the user what's happening before quitting */
memset( &sig, 0, sizeof( sig ) );