1
/* $XdotOrg: app/xdm/session.c,v 1.7 2006-06-03 00:05:24 alanc Exp $ */
2
/* $Xorg: session.c,v 1.8 2001/02/09 02:05:40 xorgcvs Exp $ */
5
3
Copyright 1988, 1998 The Open Group
56
53
#ifndef USE_PAM /* PAM modules should handle these */
59
# include <rpc/key_prot.h>
60
# if !HAVE_DECL_KEY_SETNET
56
# include <rpc/key_prot.h>
57
# if !HAVE_DECL_KEY_SETNET
61
58
extern int key_setnet(struct key_netstarg *arg);
65
# include <krb5/krb5.h>
62
# include <krb5/krb5.h>
67
64
#endif /* USE_PAM */
73
70
#ifndef GREET_USER_STATIC
612
#ifndef HAS_SETUSERCONTEXT
613
if (setgid(verify->gid) < 0) {
614
LogError ("setgid %d (user \"%s\") failed, errno=%d\n",
615
verify->gid, name, errno);
618
#if defined(BSD) && (BSD >= 199103)
619
if (setlogin(name) < 0) {
620
LogError ("setlogin for \"%s\" failed, errno=%d", name, errno);
625
if (initgroups(name, verify->gid) < 0) {
626
LogError ("initgroups for \"%s\" failed, errno=%d\n", name, errno);
629
#endif /* QNX4 doesn't support multi-groups, no initgroups() */
630
#endif /* !HAS_SETUSERCONTEXT */
609
# ifndef HAS_SETUSERCONTEXT
610
if (setgid (verify->gid) < 0) {
611
LogError ("setgid %d (user \"%s\") failed: %s\n",
612
verify->gid, name, _SysErrorMsg (errno));
615
# if defined(BSD) && (BSD >= 199103)
616
if (setlogin (name) < 0) {
617
LogError ("setlogin for \"%s\" failed: %s\n",
618
name, _SysErrorMsg (errno));
623
if (initgroups (name, verify->gid) < 0) {
624
LogError ("initgroups for \"%s\" failed: %s\n",
625
name, _SysErrorMsg (errno));
628
# endif /* QNX4 doesn't support multi-groups, no initgroups() */
629
# endif /* !HAS_SETUSERCONTEXT */
653
#ifndef HAS_SETUSERCONTEXT
652
# ifndef HAS_SETUSERCONTEXT
654
653
if (setuid(verify->uid) < 0) {
655
LogError ("setuid %d (user \"%s\") failed, errno=%d\n",
656
verify->uid, name, errno);
654
LogError ("setuid %d (user \"%s\") failed: %s\n",
655
verify->uid, name, _SysErrorMsg (errno));
659
#else /* HAS_SETUSERCONTEXT */
658
# else /* HAS_SETUSERCONTEXT */
661
660
* Set the user's credentials: uid, gid, groups,
662
661
* environment variables, resource limits, and umask.
664
663
pwd = getpwnam(name);
666
665
if (setusercontext(NULL, pwd, pwd->pw_uid, LOGIN_SETALL) < 0) {
667
LogError ("setusercontext for \"%s\" failed, errno=%d\n", name,
666
LogError ("setusercontext for \"%s\" failed: %s\n",
667
name, _SysErrorMsg (errno));
673
LogError ("getpwnam for \"%s\" failed, errno=%d\n", name, errno);
672
LogError ("getpwnam for \"%s\" failed: %s\n",
673
name, _SysErrorMsg (errno));
676
#endif /* HAS_SETUSERCONTEXT */
676
# endif /* HAS_SETUSERCONTEXT */
677
677
#else /* AIXV3 */
679
679
* Set the user's credentials: uid, gid, groups,
680
680
* audit classes, user limits, and umask.
682
682
if (setpcred(name, NULL) == -1) {
683
LogError ("setpcred for \"%s\" failed, errno=%d\n", name, errno);
683
LogError ("setpcred for \"%s\" failed: %s\n",
684
name, _SysErrorMsg (errno));
686
687
#endif /* AIXV3 */
690
691
* for user-based authorization schemes,
691
692
* use the password to get the user's credentials.
694
695
/* do like "keylogin" program */
696
697
char netname[MAXNETNAMELEN+1], secretkey[HEXKEYBYTES+1];
804
805
if (passwd != NULL)
805
806
bzero(passwd, strlen(passwd));
806
807
Debug ("StartSession, fork failed\n");
807
LogError ("can't start session on \"%s\", fork failed, errno=%d\n",
808
LogError ("can't start session on \"%s\", fork failed: %s\n",
809
d->name, _SysErrorMsg (errno));
811
812
if (passwd != NULL)
870
871
execute (char **argv, char **environ)
872
874
/* give /dev/null as stdin */
873
875
(void) close (0);
874
876
open ("/dev/null", O_RDONLY);
875
877
/* make stdout follow stderr to the log file */
879
Debug ("attempting to execve() %s\n", argv[0]);
877
880
execve (argv[0], argv, environ);
882
Debug ("execve() of %s failed: %s\n", argv[0], _SysErrorMsg (errno));
879
884
* In case this is a shell script which hasn't been
880
885
* made executable (or this is a SYSV box), do
881
886
* a reasonable thing
883
if (errno != ENOENT) {
884
889
char program[1024], *e, *p, *optarg;
886
891
char **newargv, **av;
938
943
while ((*av++ = *argv++))
939
944
/* SUPPRESS 530 */
946
Debug ("Attempting to execve() %s\n", newargv[0]);
941
947
execve (newargv[0], newargv, environ);
977
983
env = setEnv (env, "WINDOWPATH", d->windowPath);
981
#if (defined(Lynx) && !defined(HAS_CRYPT))
982
char *crypt(char *s1, char *s2)