diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-08-14 07:17:16 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-08-14 07:17:16 +0000 |
commit | 7bf4b536155b448b01f7e127be787177305a3b28 (patch) | |
tree | 6e7c2c4e8cc801960912f0b12f1fd88420e5eb0c | |
parent | 9edbe3af0952290b348c005f8095137444dcb16c (diff) | |
download | tdebase-7bf4b536155b448b01f7e127be787177305a3b28.tar.gz tdebase-7bf4b536155b448b01f7e127be787177305a3b28.zip |
Reload kompmgr settings on user switch
Check for null passwd struct in kdm kgapp
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1247005 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
-rw-r--r-- | kdm/kfrontend/kgapp.cpp | 16 | ||||
-rw-r--r-- | kwin/kompmgr/kompmgr.c | 30 |
2 files changed, 39 insertions, 7 deletions
diff --git a/kdm/kfrontend/kgapp.cpp b/kdm/kfrontend/kgapp.cpp index b57b4371d..677b5ec2a 100644 --- a/kdm/kfrontend/kgapp.cpp +++ b/kdm/kfrontend/kgapp.cpp @@ -366,13 +366,15 @@ kg_main( const char *argv0 ) // Change process UID // Get user UID passwd* userinfo = getpwnam(login_user.ascii()); - TQString newuid = TQString("%1").arg(userinfo->pw_uid); - // kompmgr allows us to change its uid in this manner: - // 1.) Send SIGUSER1 - // 2.) Send the new UID to it on the command line - comp->kill(SIGUSR1); - comp->writeStdin(newuid.ascii(), newuid.length()); - usleep(50000); // Give the above function some time to execute. Note that on REALLY slow systems this could fail, leaving kompmgr running as root. TODO: Look into ways to make this more robust. + if (userinfo) { + TQString newuid = TQString("%1").arg(userinfo->pw_uid); + // kompmgr allows us to change its uid in this manner: + // 1.) Send SIGUSER1 + // 2.) Send the new UID to it on the command line + comp->kill(SIGUSR1); + comp->writeStdin(newuid.ascii(), newuid.length()); + usleep(50000); // Give the above function some time to execute. Note that on REALLY slow systems this could fail, leaving kompmgr running as root. TODO: Look into ways to make this more robust. + } } comp->closeStdin(); comp->detach(); diff --git a/kwin/kompmgr/kompmgr.c b/kwin/kompmgr/kompmgr.c index 2aef59772..cb7ab2f59 100644 --- a/kwin/kompmgr/kompmgr.c +++ b/kwin/kompmgr/kompmgr.c @@ -74,6 +74,12 @@ check baghira.sf.net for more infos #define _BOTTOMHEIGHT_(x) ((x >> 8) & 0xff) #define _LEFTWIDTH_(x) (x & 0xff) +/* #define USE_ENV_HOME */ + +#ifndef USE_ENV_HOME +#include <pwd.h> +#endif + typedef struct _ignore { struct _ignore *next; unsigned long sequence; @@ -289,6 +295,30 @@ void handle_siguser (int sig) printf("Setting kompmgr process uid to %d...\n\r", uidnum); fflush(stdout); #endif setuid(uidnum); + +#ifdef USE_ENV_HOME + const char *home = getenv("HOME"); +#else + const char *home; + struct passwd *p; + p = getpwuid(uidnum); + if (p) + home = p->pw_dir; + else + home = getenv("HOME"); +#endif + const char *filename; + const char *configfile = "/.xcompmgrrc"; + int n = strlen(home)+strlen(configfile)+1; + filename = (char*)malloc(n*sizeof(char)); + memset(filename,0,n); + strcat(filename, home); + strcat(filename, configfile); + + loadConfig(filename); /* reload the configuration file */ + + free(filename); + filename = NULL; } fade * |