diff options
Diffstat (limited to 'x11')
-rw-r--r-- | x11/gdm/Makefile | 1 | ||||
-rw-r--r-- | x11/gdm/files/patch-config.h.in | 10 | ||||
-rw-r--r-- | x11/gdm/files/patch-configure | 61 | ||||
-rw-r--r-- | x11/gdm/files/patch-daemon::slave.c | 128 | ||||
-rw-r--r-- | x11/gdm2/Makefile | 1 | ||||
-rw-r--r-- | x11/gdm2/files/patch-config.h.in | 10 | ||||
-rw-r--r-- | x11/gdm2/files/patch-configure | 61 | ||||
-rw-r--r-- | x11/gdm2/files/patch-daemon::slave.c | 128 |
8 files changed, 400 insertions, 0 deletions
diff --git a/x11/gdm/Makefile b/x11/gdm/Makefile index a70580909880..de0302d84e28 100644 --- a/x11/gdm/Makefile +++ b/x11/gdm/Makefile @@ -7,6 +7,7 @@ PORTNAME= gdm PORTVERSION= 2.2.5.4 +PORTREVISION= 1 CATEGORIES= x11 gnome MASTER_SITES= ${MASTER_SITE_GNOME} MASTER_SITE_SUBDIR= stable/sources/gdm diff --git a/x11/gdm/files/patch-config.h.in b/x11/gdm/files/patch-config.h.in new file mode 100644 index 000000000000..0ef95695c763 --- /dev/null +++ b/x11/gdm/files/patch-config.h.in @@ -0,0 +1,10 @@ +--- config.h.in.orig Thu Jan 10 11:06:01 2002 ++++ config.h.in Thu Jan 10 11:06:18 2002 +@@ -6,6 +6,7 @@ + #undef HAVE_CATGETS + #undef HAVE_GETTEXT + #undef HAVE_LC_MESSAGES ++#undef HAVE_LOGINCAP + #undef HAVE_STPCPY + #undef HAVE_PAM + #undef HAVE_TCPWRAPPERS diff --git a/x11/gdm/files/patch-configure b/x11/gdm/files/patch-configure new file mode 100644 index 000000000000..b298305f5e40 --- /dev/null +++ b/x11/gdm/files/patch-configure @@ -0,0 +1,61 @@ +--- configure.orig Thu Jan 10 10:45:20 2002 ++++ configure Thu Jan 10 10:55:39 2002 +@@ -11066,6 +11066,58 @@ + + fi + ++for ac_header in sys/types.h login_cap.h ++do ++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` ++echo "$as_me:11072: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 ++if eval "test \"\${$as_ac_Header+set}\" = set"; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ cat >conftest.$ac_ext <<_ACEOF ++#line 11078 "configure" ++#include "confdefs.h" ++#include <$ac_header> ++_ACEOF ++if { (eval echo "$as_me:11082: \"$ac_cpp conftest.$ac_ext\"") >&5 ++ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++ ac_status=$? ++ egrep -v '^ *\+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:11088: \$? = $ac_status" >&5 ++ (exit $ac_status); } >/dev/null; then ++ if test -s conftest.err; then ++ ac_cpp_err=$ac_c_preproc_warn_flag ++ else ++ ac_cpp_err= ++ fi ++else ++ ac_cpp_err=yes ++fi ++if test -z "$ac_cpp_err"; then ++ eval "$as_ac_Header=yes" ++else ++ echo "$as_me: failed program was:" >&5 ++ cat conftest.$ac_ext >&5 ++ eval "$as_ac_Header=no" ++fi ++rm -f conftest.err conftest.$ac_ext ++fi ++echo "$as_me:11107: result: `eval echo '${'$as_ac_Header'}'`" >&5 ++echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++if test `eval echo '${'$as_ac_Header'}'` = yes; then ++ cat >>confdefs.h <<EOF ++#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 ++EOF ++ ++ LIBS="$LIBS -lutil" ++ cat >>confdefs.h <<\EOF ++#define HAVE_LOGINCAP 1 ++EOF ++fi ++done ++ + if test x$enable_authentication_scheme = xpam -a x$have_pam = xno ; then + { { echo "$as_me:11070: error: PAM support requested but not available" >&5 + echo "$as_me: error: PAM support requested but not available" >&2;} diff --git a/x11/gdm/files/patch-daemon::slave.c b/x11/gdm/files/patch-daemon::slave.c new file mode 100644 index 000000000000..7d56e79b432f --- /dev/null +++ b/x11/gdm/files/patch-daemon::slave.c @@ -0,0 +1,128 @@ + +$FreeBSD$ + +--- daemon/slave.c.orig Tue Jan 1 04:48:07 2002 ++++ daemon/slave.c Fri Jan 11 15:51:27 2002 +@@ -45,6 +45,11 @@ + #include <time.h> + #include <syslog.h> + ++#ifdef HAVE_LOGINCAP ++#include <unistd.h> ++#include <login_cap.h> ++#endif ++ + #include <vicious.h> + + #include "gdm.h" +@@ -140,6 +145,8 @@ + static gboolean x_error_occured = FALSE; + static gboolean gdm_got_usr2 = FALSE; + ++static void changeUser(struct passwd *pwent, char *login); ++ + /* ignore handlers */ + static int + ignore_xerror_handler (Display *disp, XErrorEvent *evt) +@@ -1785,6 +1792,27 @@ + + } + ++#ifdef HAVE_LOGINCAP ++void changeUser(struct passwd *pwent, char *login) { ++ if (setsid() == -1) ++ gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: setsid() failed for %s. Aborting."), login); ++ if (setusercontext(NULL, pwent, pwent->pw_uid, LOGIN_SETALL) == -1) ++ gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: setusercontext() failed for %s. Aborting."), login); ++} ++#else ++void changeUser(struct passwd *pwent, char *login) { ++ setpgid(0, 0); ++ umask(022); ++ /* setup the user's correct group */ ++ if (setgid(pwent->pw_gid) < 0) ++ gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: Could not setgid %d. Aborting."), pwent->pw_gid); ++ if (initgroups(login, pwent->pw_gid) < 0) ++ gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: initgroups() failed for %s. Aborting."), login); ++ if (setuid(pwent->pw_uid) < 0) ++ gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: Could not become %s. Aborting."), login); ++} ++#endif ++ + static char * + dequote (const char *in) + { +@@ -1823,6 +1851,9 @@ + char *sesspath, *sessexec; + gboolean need_config_sync = FALSE; + const char *shell = NULL; ++#ifdef HAVE_LOGINCAP ++ char *lang = NULL; ++#endif + + ve_clearenv (); + +@@ -1840,12 +1871,6 @@ + if (gnome_session != NULL) + ve_setenv ("GDM_GNOME_SESSION", gnome_session, TRUE); + +- /* Special PATH for root */ +- if (pwent->pw_uid == 0) +- ve_setenv ("PATH", GdmRootPath, TRUE); +- else +- ve_setenv ("PATH", GdmDefaultPath, TRUE); +- + /* Eeeeek, this no lookie as a correct language code, let's + * try unaliasing it */ + if (strlen (language) < 3 || +@@ -1853,14 +1878,31 @@ + language = unaliaslang (language); + } + +- /* Set locale */ ++ changeUser(pwent, login); ++ ++ /* ++ * Set locale. XXX in the HAVE_LOGINCAP case we override user's ++ * default language, but there is no other way around, because there ++ * is no way to select "Use user's default language" in the GDM, so ++ * that we either have to give up ability to select language other ++ * one specified in the login.conf, or just ignore default setting. ++ * I selected the latter, which is suboptimal, but at least gives ++ * some freedom to the user. ++ */ + ve_setenv ("LANG", language, TRUE); + ve_setenv ("GDM_LANG", language, TRUE); ++ ++#ifndef HAVE_LOGINCAP ++ ++ /* Special PATH for root */ ++ if (pwent->pw_uid == 0) ++ ve_setenv("PATH", GdmRootPath, TRUE); ++ else ++ ve_setenv("PATH", GdmDefaultPath, TRUE); ++#else ++ /* Do not reset PATH */ ++#endif + +- setpgid (0, 0); +- +- umask (022); +- + /* setup the verify env vars */ + if ( ! gdm_verify_setup_env (d)) + gdm_child_exit (DISPLAY_REMANAGE, +@@ -1870,12 +1912,8 @@ + + /* setup egid to the correct group, + * not to leave the egid around */ +- setegid (pwent->pw_gid); ++ /*setegid (pwent->pw_gid);*/ + +- if (setuid (pwent->pw_uid) < 0) +- gdm_child_exit (DISPLAY_REMANAGE, +- _("gdm_slave_session_start: Could not become %s. Aborting."), login); +- + chdir (home_dir); + + /* anality, make sure nothing is in memory for gnome_config diff --git a/x11/gdm2/Makefile b/x11/gdm2/Makefile index a70580909880..de0302d84e28 100644 --- a/x11/gdm2/Makefile +++ b/x11/gdm2/Makefile @@ -7,6 +7,7 @@ PORTNAME= gdm PORTVERSION= 2.2.5.4 +PORTREVISION= 1 CATEGORIES= x11 gnome MASTER_SITES= ${MASTER_SITE_GNOME} MASTER_SITE_SUBDIR= stable/sources/gdm diff --git a/x11/gdm2/files/patch-config.h.in b/x11/gdm2/files/patch-config.h.in new file mode 100644 index 000000000000..0ef95695c763 --- /dev/null +++ b/x11/gdm2/files/patch-config.h.in @@ -0,0 +1,10 @@ +--- config.h.in.orig Thu Jan 10 11:06:01 2002 ++++ config.h.in Thu Jan 10 11:06:18 2002 +@@ -6,6 +6,7 @@ + #undef HAVE_CATGETS + #undef HAVE_GETTEXT + #undef HAVE_LC_MESSAGES ++#undef HAVE_LOGINCAP + #undef HAVE_STPCPY + #undef HAVE_PAM + #undef HAVE_TCPWRAPPERS diff --git a/x11/gdm2/files/patch-configure b/x11/gdm2/files/patch-configure new file mode 100644 index 000000000000..b298305f5e40 --- /dev/null +++ b/x11/gdm2/files/patch-configure @@ -0,0 +1,61 @@ +--- configure.orig Thu Jan 10 10:45:20 2002 ++++ configure Thu Jan 10 10:55:39 2002 +@@ -11066,6 +11066,58 @@ + + fi + ++for ac_header in sys/types.h login_cap.h ++do ++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` ++echo "$as_me:11072: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 ++if eval "test \"\${$as_ac_Header+set}\" = set"; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ cat >conftest.$ac_ext <<_ACEOF ++#line 11078 "configure" ++#include "confdefs.h" ++#include <$ac_header> ++_ACEOF ++if { (eval echo "$as_me:11082: \"$ac_cpp conftest.$ac_ext\"") >&5 ++ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++ ac_status=$? ++ egrep -v '^ *\+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:11088: \$? = $ac_status" >&5 ++ (exit $ac_status); } >/dev/null; then ++ if test -s conftest.err; then ++ ac_cpp_err=$ac_c_preproc_warn_flag ++ else ++ ac_cpp_err= ++ fi ++else ++ ac_cpp_err=yes ++fi ++if test -z "$ac_cpp_err"; then ++ eval "$as_ac_Header=yes" ++else ++ echo "$as_me: failed program was:" >&5 ++ cat conftest.$ac_ext >&5 ++ eval "$as_ac_Header=no" ++fi ++rm -f conftest.err conftest.$ac_ext ++fi ++echo "$as_me:11107: result: `eval echo '${'$as_ac_Header'}'`" >&5 ++echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++if test `eval echo '${'$as_ac_Header'}'` = yes; then ++ cat >>confdefs.h <<EOF ++#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 ++EOF ++ ++ LIBS="$LIBS -lutil" ++ cat >>confdefs.h <<\EOF ++#define HAVE_LOGINCAP 1 ++EOF ++fi ++done ++ + if test x$enable_authentication_scheme = xpam -a x$have_pam = xno ; then + { { echo "$as_me:11070: error: PAM support requested but not available" >&5 + echo "$as_me: error: PAM support requested but not available" >&2;} diff --git a/x11/gdm2/files/patch-daemon::slave.c b/x11/gdm2/files/patch-daemon::slave.c new file mode 100644 index 000000000000..7d56e79b432f --- /dev/null +++ b/x11/gdm2/files/patch-daemon::slave.c @@ -0,0 +1,128 @@ + +$FreeBSD$ + +--- daemon/slave.c.orig Tue Jan 1 04:48:07 2002 ++++ daemon/slave.c Fri Jan 11 15:51:27 2002 +@@ -45,6 +45,11 @@ + #include <time.h> + #include <syslog.h> + ++#ifdef HAVE_LOGINCAP ++#include <unistd.h> ++#include <login_cap.h> ++#endif ++ + #include <vicious.h> + + #include "gdm.h" +@@ -140,6 +145,8 @@ + static gboolean x_error_occured = FALSE; + static gboolean gdm_got_usr2 = FALSE; + ++static void changeUser(struct passwd *pwent, char *login); ++ + /* ignore handlers */ + static int + ignore_xerror_handler (Display *disp, XErrorEvent *evt) +@@ -1785,6 +1792,27 @@ + + } + ++#ifdef HAVE_LOGINCAP ++void changeUser(struct passwd *pwent, char *login) { ++ if (setsid() == -1) ++ gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: setsid() failed for %s. Aborting."), login); ++ if (setusercontext(NULL, pwent, pwent->pw_uid, LOGIN_SETALL) == -1) ++ gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: setusercontext() failed for %s. Aborting."), login); ++} ++#else ++void changeUser(struct passwd *pwent, char *login) { ++ setpgid(0, 0); ++ umask(022); ++ /* setup the user's correct group */ ++ if (setgid(pwent->pw_gid) < 0) ++ gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: Could not setgid %d. Aborting."), pwent->pw_gid); ++ if (initgroups(login, pwent->pw_gid) < 0) ++ gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: initgroups() failed for %s. Aborting."), login); ++ if (setuid(pwent->pw_uid) < 0) ++ gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: Could not become %s. Aborting."), login); ++} ++#endif ++ + static char * + dequote (const char *in) + { +@@ -1823,6 +1851,9 @@ + char *sesspath, *sessexec; + gboolean need_config_sync = FALSE; + const char *shell = NULL; ++#ifdef HAVE_LOGINCAP ++ char *lang = NULL; ++#endif + + ve_clearenv (); + +@@ -1840,12 +1871,6 @@ + if (gnome_session != NULL) + ve_setenv ("GDM_GNOME_SESSION", gnome_session, TRUE); + +- /* Special PATH for root */ +- if (pwent->pw_uid == 0) +- ve_setenv ("PATH", GdmRootPath, TRUE); +- else +- ve_setenv ("PATH", GdmDefaultPath, TRUE); +- + /* Eeeeek, this no lookie as a correct language code, let's + * try unaliasing it */ + if (strlen (language) < 3 || +@@ -1853,14 +1878,31 @@ + language = unaliaslang (language); + } + +- /* Set locale */ ++ changeUser(pwent, login); ++ ++ /* ++ * Set locale. XXX in the HAVE_LOGINCAP case we override user's ++ * default language, but there is no other way around, because there ++ * is no way to select "Use user's default language" in the GDM, so ++ * that we either have to give up ability to select language other ++ * one specified in the login.conf, or just ignore default setting. ++ * I selected the latter, which is suboptimal, but at least gives ++ * some freedom to the user. ++ */ + ve_setenv ("LANG", language, TRUE); + ve_setenv ("GDM_LANG", language, TRUE); ++ ++#ifndef HAVE_LOGINCAP ++ ++ /* Special PATH for root */ ++ if (pwent->pw_uid == 0) ++ ve_setenv("PATH", GdmRootPath, TRUE); ++ else ++ ve_setenv("PATH", GdmDefaultPath, TRUE); ++#else ++ /* Do not reset PATH */ ++#endif + +- setpgid (0, 0); +- +- umask (022); +- + /* setup the verify env vars */ + if ( ! gdm_verify_setup_env (d)) + gdm_child_exit (DISPLAY_REMANAGE, +@@ -1870,12 +1912,8 @@ + + /* setup egid to the correct group, + * not to leave the egid around */ +- setegid (pwent->pw_gid); ++ /*setegid (pwent->pw_gid);*/ + +- if (setuid (pwent->pw_uid) < 0) +- gdm_child_exit (DISPLAY_REMANAGE, +- _("gdm_slave_session_start: Could not become %s. Aborting."), login); +- + chdir (home_dir); + + /* anality, make sure nothing is in memory for gnome_config |