Only set HOME, SHELL and PATH in multiuser sessions.
[doldaconnect.git] / daemon / main.c
index 2c6f08d..2848d41 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Dolda Connect - Modular multiuser Direct Connect-style client
- *  Copyright (C) 2004 Fredrik Tolf (fredrik@dolda2000.com)
+ *  Copyright (C) 2004 Fredrik Tolf <fredrik@dolda2000.com>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -304,11 +304,12 @@ pid_t forksess(uid_t user, struct authhandle *auth, void (*ccbfunc)(pid_t, int,
                close(i);
            }
        }
-       setpgrp();
+       setpgid(0, 0);
        signal(SIGHUP, SIG_IGN);
        errno = 0;
 #ifdef HAVE_KEYUTILS
        keyctl_join_session_keyring(NULL);
+       keyctl_chown(KEY_SPEC_SESSION_KEYRING, pwent->pw_uid, pwent->pw_gid);
 #endif
        if((authopensess(auth)) != AUTH_SUCCESS)
        {
@@ -339,12 +340,12 @@ pid_t forksess(uid_t user, struct authhandle *auth, void (*ccbfunc)(pid_t, int,
                    flog(LOG_WARNING, "could not setuid: %s", strerror(errno));
                    exit(127);
                }
+               putenv(sprintf2("HOME=%s", pwent->pw_dir));
+               putenv(sprintf2("SHELL=%s", pwent->pw_shell));
+               putenv(sprintf2("PATH=%s/bin:/usr/local/bin:/bin:/usr/bin", pwent->pw_dir));
            }
-           putenv(sprintf2("HOME=%s", pwent->pw_dir));
-           putenv(sprintf2("SHELL=%s", pwent->pw_shell));
            putenv(sprintf2("USER=%s", pwent->pw_name));
            putenv(sprintf2("LOGNAME=%s", pwent->pw_name));
-           putenv(sprintf2("PATH=%s/bin:/usr/local/bin:/bin:/usr/bin", pwent->pw_dir));
            chdir(pwent->pw_dir);
            return(0);
        }
@@ -384,6 +385,7 @@ int main(int argc, char **argv)
     struct child *child;
     double now;
     
+    now = ntime();
     immsyslog = nofork = 0;
     syslogfac = LOG_DAEMON;
     configfile = NULL;
@@ -459,7 +461,7 @@ int main(int argc, char **argv)
     preinit(0);
     if(configfile == NULL)
     {
-       if((configfile = findconfigfile()) == NULL)
+       if((configfile = findfile("doldacond.conf", NULL, 0)) == NULL)
        {
            flog(LOG_CRIT, "could not find a configuration file");
            exit(1);
@@ -493,6 +495,7 @@ int main(int argc, char **argv)
        fprintf(pfstream, "%i\n", getpid());
        fclose(pfstream);
     }
+    flog(LOG_INFO, "startup took %f seconds", ntime() - now);
     running = 1;
     reinit = 0;
     while(running)