mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-29 10:18:30 +00:00
x11/slim: fix to honour login.conf, WWW
PR: 195759 Requested by: Jonathan Chen <jonc@chen.org.nz> Approved by: Henry Hu <henry.hu.sh@gmail.com> (maintainer)
This commit is contained in:
parent
40be0b24f0
commit
2a628ae13f
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=379608
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
PORTNAME= slim
|
PORTNAME= slim
|
||||||
PORTVERSION= 1.3.6
|
PORTVERSION= 1.3.6
|
||||||
PORTREVISION= 6
|
PORTREVISION= 7
|
||||||
CATEGORIES= x11
|
CATEGORIES= x11
|
||||||
MASTER_SITES= ftp://ftp.berlios.de/pub/slim/ \
|
MASTER_SITES= ftp://ftp.berlios.de/pub/slim/ \
|
||||||
SF/slim.berlios
|
SF/slim.berlios
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--- ./CMakeLists.txt.orig 2013-10-01 22:38:05.000000000 +0000
|
--- CMakeLists.txt.orig 2013-10-01 18:38:05.000000000 -0400
|
||||||
+++ ./CMakeLists.txt 2014-03-08 16:26:46.000000000 +0000
|
+++ CMakeLists.txt 2014-12-15 21:35:53.000000000 -0500
|
||||||
@@ -14,6 +14,7 @@
|
@@ -14,6 +14,7 @@
|
||||||
INCLUDE(CheckCCompilerFlag)
|
INCLUDE(CheckCCompilerFlag)
|
||||||
INCLUDE(CheckCXXCompilerFlag)
|
INCLUDE(CheckCXXCompilerFlag)
|
||||||
@ -60,7 +60,15 @@
|
|||||||
include_directories(${PAM_INCLUDE_DIR})
|
include_directories(${PAM_INCLUDE_DIR})
|
||||||
else(PAM_FOUND)
|
else(PAM_FOUND)
|
||||||
message("\tPAM Not 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
|
####### install
|
||||||
# slim
|
# slim
|
||||||
install(TARGETS slim RUNTIME DESTINATION bin)
|
install(TARGETS slim RUNTIME DESTINATION bin)
|
||||||
@ -71,7 +79,7 @@
|
|||||||
|
|
||||||
if (BUILD_SHARED_LIBS)
|
if (BUILD_SHARED_LIBS)
|
||||||
set_target_properties(libslim PROPERTIES
|
set_target_properties(libslim PROPERTIES
|
||||||
@@ -236,9 +252,11 @@
|
@@ -236,9 +253,11 @@
|
||||||
|
|
||||||
# man file
|
# man file
|
||||||
install(FILES slim.1 DESTINATION ${MANDIR}/man1/)
|
install(FILES slim.1 DESTINATION ${MANDIR}/man1/)
|
||||||
|
@ -1,6 +1,76 @@
|
|||||||
--- ./app.cpp.orig 2012-12-31 07:03:42.000000000 -0600
|
--- app.cpp.orig 2013-10-01 18:38:05.000000000 -0400
|
||||||
+++ ./app.cpp 2013-03-23 14:10:35.000000000 -0500
|
+++ app.cpp 2014-12-18 00:18:29.000000000 -0500
|
||||||
@@ -931,7 +931,7 @@
|
@@ -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) {
|
if (!hasVtSet && daemonmode) {
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
-default_xserver /usr/bin/X
|
-default_xserver /usr/bin/X
|
||||||
-#xserver_arguments -dpi 75
|
-#xserver_arguments -dpi 75
|
||||||
+# Use default path from /etc/login.conf
|
+# 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
|
+default_xserver %%LOCALBASE%%/bin/X
|
||||||
+# The X server needs to be started on an unused virtual terminal,
|
+# 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
|
+# for FreeBSD in a default configuration, the first one of those is #09
|
||||||
|
@ -1,11 +1,46 @@
|
|||||||
--- ./switchuser.cpp.orig 2012-12-31 07:03:42.000000000 -0600
|
--- switchuser.cpp.orig 2013-10-01 18:38:05.000000000 -0400
|
||||||
+++ ./switchuser.cpp 2013-03-23 14:10:35.000000000 -0500
|
+++ switchuser.cpp 2014-12-15 22:14:16.000000000 -0500
|
||||||
@@ -36,6 +36,8 @@
|
@@ -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() {
|
void SwitchUser::SetUserId() {
|
||||||
if( (Pw == 0) ||
|
- if( (Pw == 0) ||
|
||||||
+ (setsid() == -1) ||
|
- (initgroups(Pw->pw_name, Pw->pw_gid) != 0) ||
|
||||||
+ (setlogin(Pw->pw_name) != 0) ||
|
- (setgid(Pw->pw_gid) != 0) ||
|
||||||
(initgroups(Pw->pw_name, Pw->pw_gid) != 0) ||
|
- (setuid(Pw->pw_uid) != 0) ) {
|
||||||
(setgid(Pw->pw_gid) != 0) ||
|
- logStream << APPNAME << ": could not switch user id" << endl;
|
||||||
(setuid(Pw->pw_uid) != 0) ) {
|
- 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) {
|
||||||
|
@ -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
|
themes and an option file; is suitable for machines on which remote login
|
||||||
functionalities are not needed.
|
functionalities are not needed.
|
||||||
|
|
||||||
WWW: http://slim.berlios.de/
|
WWW: http://sourceforge.net/projects/slim.berlios/
|
||||||
|
Loading…
Reference in New Issue
Block a user