aboutsummaryrefslogtreecommitdiff
path: root/x11/slim
diff options
context:
space:
mode:
authorKurt Jaeger <pi@FreeBSD.org>2015-02-22 14:50:25 +0000
committerKurt Jaeger <pi@FreeBSD.org>2015-02-22 14:50:25 +0000
commit2a628ae13f4ae54cacec3fdebaa999cc75a3cc63 (patch)
tree5d033abaeb3d69bb6b4ea41222e87afe26e9043c /x11/slim
parent40be0b24f024e5775d8ed43960fcb5b51dcc9bb8 (diff)
downloadports-2a628ae13f4ae54cacec3fdebaa999cc75a3cc63.tar.gz
ports-2a628ae13f4ae54cacec3fdebaa999cc75a3cc63.zip
Notes
Diffstat (limited to 'x11/slim')
-rw-r--r--x11/slim/Makefile2
-rw-r--r--x11/slim/files/patch-CMakeLists.txt16
-rw-r--r--x11/slim/files/patch-app.cpp76
-rw-r--r--x11/slim/files/patch-slim.conf2
-rw-r--r--x11/slim/files/patch-switchuser.cpp53
-rw-r--r--x11/slim/pkg-descr2
6 files changed, 132 insertions, 19 deletions
diff --git a/x11/slim/Makefile b/x11/slim/Makefile
index 51d8c49fe275..d8c1b70bd43e 100644
--- a/x11/slim/Makefile
+++ b/x11/slim/Makefile
@@ -3,7 +3,7 @@
PORTNAME= slim
PORTVERSION= 1.3.6
-PORTREVISION= 6
+PORTREVISION= 7
CATEGORIES= x11
MASTER_SITES= ftp://ftp.berlios.de/pub/slim/ \
SF/slim.berlios
diff --git a/x11/slim/files/patch-CMakeLists.txt b/x11/slim/files/patch-CMakeLists.txt
index e48188dd1e12..c099134c65b5 100644
--- a/x11/slim/files/patch-CMakeLists.txt
+++ b/x11/slim/files/patch-CMakeLists.txt
@@ -1,5 +1,5 @@
---- ./CMakeLists.txt.orig 2013-10-01 22:38:05.000000000 +0000
-+++ ./CMakeLists.txt 2014-03-08 16:26:46.000000000 +0000
+--- CMakeLists.txt.orig 2013-10-01 18:38:05.000000000 -0400
++++ CMakeLists.txt 2014-12-15 21:35:53.000000000 -0500
@@ -14,6 +14,7 @@
INCLUDE(CheckCCompilerFlag)
INCLUDE(CheckCXXCompilerFlag)
@@ -60,7 +60,15 @@
include_directories(${PAM_INCLUDE_DIR})
else(PAM_FOUND)
message("\tPAM Not Found")
-@@ -221,7 +235,9 @@
+@@ -195,6 +209,7 @@
+ ${FREETYPE_LIBRARY}
+ ${JPEG_LIBRARIES}
+ ${PNG_LIBRARIES}
++ util
+ libslim
+ )
+
+@@ -221,7 +236,9 @@
####### install
# slim
install(TARGETS slim RUNTIME DESTINATION bin)
@@ -71,7 +79,7 @@
if (BUILD_SHARED_LIBS)
set_target_properties(libslim PROPERTIES
-@@ -236,9 +252,11 @@
+@@ -236,9 +253,11 @@
# man file
install(FILES slim.1 DESTINATION ${MANDIR}/man1/)
diff --git a/x11/slim/files/patch-app.cpp b/x11/slim/files/patch-app.cpp
index 482c7904f0bd..2ca2423583f8 100644
--- a/x11/slim/files/patch-app.cpp
+++ b/x11/slim/files/patch-app.cpp
@@ -1,6 +1,76 @@
---- ./app.cpp.orig 2012-12-31 07:03:42.000000000 -0600
-+++ ./app.cpp 2013-03-23 14:10:35.000000000 -0500
-@@ -931,7 +931,7 @@
+--- app.cpp.orig 2013-10-01 18:38:05.000000000 -0400
++++ app.cpp 2014-12-18 00:18:29.000000000 -0500
+@@ -14,6 +14,7 @@
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <stdint.h>
++#include <login_cap.h>
+ #include <cstring>
+ #include <cstdio>
+ #include <iostream>
+@@ -32,6 +33,20 @@
+
+ using namespace std;
+
++static const int LOGIN_CAP_VAR_COUNT = 4;
++static const char* LOGIN_CAP_VARS[] = {
++ "lang",
++ "charset",
++ "timezone",
++ "manpath",
++};
++static const char* LOGIN_CAP_ENVS[] = {
++ "LANG",
++ "MM_CHARSET",
++ "TZ",
++ "MANPATH",
++};
++
+ #ifdef USE_PAM
+ #include <string>
+
+@@ -123,6 +138,22 @@
+ signal(sig, User1Signal);
+ }
+
++static void AddToEnv(char*** curr_env, const char *name, const char *value) {
++ int n;
++ for (n = 0; (*curr_env)[n] != NULL; n++) ;
++ n++;
++ char** new_env = static_cast<char**>(malloc(sizeof(char*) * (n + 1)));
++ memcpy(new_env, *curr_env, sizeof(char*) * n);
++ char* entry = static_cast<char*>(malloc(strlen(name) + strlen(value) + 2));
++ strcpy(entry, name);
++ strcat(entry, "=");
++ strcat(entry, value);
++ new_env[n-1] = entry;
++ new_env[n] = NULL;
++ free(*curr_env);
++ *curr_env = new_env;
++}
++
+ #ifdef USE_PAM
+ App::App(int argc, char** argv)
+ : pam(conv, static_cast<void*>(&LoginPanel)),
+@@ -627,6 +658,17 @@
+
+ #endif
+
++ login_cap_t *lc = login_getpwclass(pw);
++ if (lc != NULL) {
++ for (int i = 0; i < LOGIN_CAP_VAR_COUNT; i++) {
++ const char *value = login_getcapstr(lc, LOGIN_CAP_VARS[i], NULL, NULL);
++ if (value != NULL) {
++ AddToEnv(&child_env, LOGIN_CAP_ENVS[i], value);
++ }
++ }
++ login_close(lc);
++ }
++
+ /* Login process starts here */
+ SwitchUser Su(pw, cfg, DisplayName, child_env);
+ string session = LoginPanel->getSession();
+@@ -941,7 +983,7 @@
}
if (!hasVtSet && daemonmode) {
diff --git a/x11/slim/files/patch-slim.conf b/x11/slim/files/patch-slim.conf
index 6edb8a30bf41..c23a5453ea8a 100644
--- a/x11/slim/files/patch-slim.conf
+++ b/x11/slim/files/patch-slim.conf
@@ -7,7 +7,7 @@
-default_xserver /usr/bin/X
-#xserver_arguments -dpi 75
+# Use default path from /etc/login.conf
-+default_path /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:%%LOCALBASE%%/sbin:%%LOCALBASE%%/bin:$HOME/bin
++default_path /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:%%LOCALBASE%%/sbin:%%LOCALBASE%%/bin
+default_xserver %%LOCALBASE%%/bin/X
+# The X server needs to be started on an unused virtual terminal,
+# for FreeBSD in a default configuration, the first one of those is #09
diff --git a/x11/slim/files/patch-switchuser.cpp b/x11/slim/files/patch-switchuser.cpp
index 8c2a94e7ceeb..726690876311 100644
--- a/x11/slim/files/patch-switchuser.cpp
+++ b/x11/slim/files/patch-switchuser.cpp
@@ -1,11 +1,46 @@
---- ./switchuser.cpp.orig 2012-12-31 07:03:42.000000000 -0600
-+++ ./switchuser.cpp 2013-03-23 14:10:35.000000000 -0500
-@@ -36,6 +36,8 @@
+--- switchuser.cpp.orig 2013-10-01 18:38:05.000000000 -0400
++++ switchuser.cpp 2014-12-15 22:14:16.000000000 -0500
+@@ -9,6 +9,9 @@
+ (at your option) any later version.
+ */
+
++#include <sys/types.h>
++#include <login_cap.h>
++
+ #include <cstdio>
+ #include "switchuser.h"
+ #include "util.h"
+@@ -35,13 +38,27 @@
+ }
void SwitchUser::SetUserId() {
- if( (Pw == 0) ||
-+ (setsid() == -1) ||
-+ (setlogin(Pw->pw_name) != 0) ||
- (initgroups(Pw->pw_name, Pw->pw_gid) != 0) ||
- (setgid(Pw->pw_gid) != 0) ||
- (setuid(Pw->pw_uid) != 0) ) {
+- if( (Pw == 0) ||
+- (initgroups(Pw->pw_name, Pw->pw_gid) != 0) ||
+- (setgid(Pw->pw_gid) != 0) ||
+- (setuid(Pw->pw_uid) != 0) ) {
+- logStream << APPNAME << ": could not switch user id" << endl;
+- exit(ERR_EXIT);
++ if ((Pw != 0) && (setsid() != -1)) {
++ // TODO: allow users to override settings with .login.conf
++ login_cap_t *lc = login_getpwclass(Pw);
++ if ((lc != NULL) &&
++ (setusercontext(lc, Pw, Pw->pw_uid, LOGIN_SETALL) == 0)) {
++ login_close(lc);
++ return;
++ }
++ login_close(lc);
++ logStream << APPNAME << ": fail to set user context" << endl;
++ // fallback to old method
++ if ((setlogin(Pw->pw_name) == 0) &&
++ (initgroups(Pw->pw_name, Pw->pw_gid) == 0) &&
++ (setgid(Pw->pw_gid) == 0) &&
++ (setuid(Pw->pw_uid) == 0) ) {
++ return;
++ }
+ }
++
++ logStream << APPNAME << ": could not switch user id" << endl;
++ exit(ERR_EXIT);
+ }
+
+ void SwitchUser::Execute(const char* cmd) {
diff --git a/x11/slim/pkg-descr b/x11/slim/pkg-descr
index ca5b22f0ad7b..f7c58e285998 100644
--- a/x11/slim/pkg-descr
+++ b/x11/slim/pkg-descr
@@ -5,4 +5,4 @@ It aims to be light and simple, although completely configurable through
themes and an option file; is suitable for machines on which remote login
functionalities are not needed.
-WWW: http://slim.berlios.de/
+WWW: http://sourceforge.net/projects/slim.berlios/