slim: add 1.3.2

1.3.1 was imported from OE rev 58b79786c6, but heavily cleaned

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
This commit is contained in:
Koen Kooi
2011-06-20 21:18:40 +02:00
parent 9fce693d6c
commit 73573117d0
13 changed files with 953 additions and 0 deletions

View File

@@ -0,0 +1,343 @@
From 24e548a222f0aab4313d5ba8b04f0840b173000f Mon Sep 17 00:00:00 2001
From: iwamatsu <iwamatsu@7c53e7cc-98ea-0310-8f1f-a0b24da60408>
Date: Mon, 30 Aug 2010 01:24:54 +0000
Subject: [PATCH 2/8] Fix image handling integer overflows
Image loading memory allocation is based on the image width and height:
malloc(heigth * width * 3). Providing an image with large height and
width values can cause the result of this calculation to exceed the
maximum value of an unsigned int and thus causes an integer overflow.
The result: too little memory is allocated and an heap overflow occurs.
This patch was based by Niels Heinen <niels@freebsd.org>
Thanks!
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
git-svn-id: svn://svn.berlios.de/slim/trunk@176 7c53e7cc-98ea-0310-8f1f-a0b24da60408
---
const.h | 3 ++
jpeg.c | 51 +++++++++++++++-----------
png.c | 122 ++++++++++++++++++++++++++++++++------------------------------
3 files changed, 96 insertions(+), 80 deletions(-)
diff --git a/const.h b/const.h
index df0989c..a18c6f3 100644
--- a/const.h
+++ b/const.h
@@ -42,4 +42,7 @@
// variables replaced in pre-session_cmd and post-session_cmd
#define USER_VAR "%user"
+// max height/width for images
+#define MAX_DIMENSION 10000
+
#endif
diff --git a/jpeg.c b/jpeg.c
index 1cf106c..e1f8352 100644
--- a/jpeg.c
+++ b/jpeg.c
@@ -22,16 +22,22 @@
#include <string.h>
#include <jpeglib.h>
+#include "const.h"
int
read_jpeg(const char *filename, int *width, int *height, unsigned char **rgb)
{
+ int ret = 0;
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
unsigned char *ptr = NULL;
unsigned int i, ipos;
FILE *infile = fopen(filename, "rb");
+ if (infile == NULL) {
+ fprintf(stderr, "Can not fopen file: %s\n",filename);
+ return ret;
+ }
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
@@ -39,43 +45,39 @@ read_jpeg(const char *filename, int *width, int *height, unsigned char **rgb)
jpeg_read_header(&cinfo, TRUE);
jpeg_start_decompress(&cinfo);
+ /* Prevent against integer overflow */
+ if(cinfo.output_width >= MAX_DIMENSION || cinfo.output_height >= MAX_DIMENSION) {
+ fprintf(stderr, "Unreasonable dimension found in file: %s\n",filename);
+ goto close_file;
+ }
+
*width = cinfo.output_width;
*height = cinfo.output_height;
rgb[0] = malloc(3 * cinfo.output_width * cinfo.output_height);
- if (rgb[0] == NULL)
- {
+ if (rgb[0] == NULL) {
fprintf(stderr, "Can't allocate memory for JPEG file.\n");
- fclose(infile);
- return(0);
+ goto close_file;
}
- if (cinfo.output_components == 3)
- {
+ if (cinfo.output_components == 3) {
ptr = rgb[0];
- while (cinfo.output_scanline < cinfo.output_height)
- {
+ while (cinfo.output_scanline < cinfo.output_height) {
jpeg_read_scanlines(&cinfo, &ptr, 1);
ptr += 3 * cinfo.output_width;
}
- }
- else if (cinfo.output_components == 1)
- {
+ } else if (cinfo.output_components == 1) {
ptr = malloc(cinfo.output_width);
- if (ptr == NULL)
- {
+ if (ptr == NULL) {
fprintf(stderr, "Can't allocate memory for JPEG file.\n");
- fclose(infile);
- return(0);
+ goto rgb_free;
}
ipos = 0;
- while (cinfo.output_scanline < cinfo.output_height)
- {
+ while (cinfo.output_scanline < cinfo.output_height) {
jpeg_read_scanlines(&cinfo, &ptr, 1);
- for (i = 0; i < cinfo.output_width; i++)
- {
+ for (i = 0; i < cinfo.output_width; i++) {
memset(rgb[0] + ipos, ptr[i], 3);
ipos += 3;
}
@@ -85,9 +87,16 @@ read_jpeg(const char *filename, int *width, int *height, unsigned char **rgb)
}
jpeg_finish_decompress(&cinfo);
- jpeg_destroy_decompress(&cinfo);
+ ret = 1;
+ goto close_file;
+
+rgb_free:
+ free(rgb[0]);
+
+close_file:
+ jpeg_destroy_decompress(&cinfo);
fclose(infile);
- return(1);
+ return(ret);
}
diff --git a/png.c b/png.c
index a2661c6..5c086c6 100644
--- a/png.c
+++ b/png.c
@@ -22,12 +22,13 @@
#include <stdlib.h>
#include <png.h>
+#include "const.h"
int
read_png(const char *filename, int *width, int *height, unsigned char **rgb,
unsigned char **alpha)
{
- FILE *infile = fopen(filename, "rb");
+ int ret = 0;
png_structp png_ptr;
png_infop info_ptr;
@@ -38,31 +39,27 @@ read_png(const char *filename, int *width, int *height, unsigned char **rgb,
int bit_depth, color_type, interlace_type;
int i;
+ FILE *infile = fopen(filename, "rb");
+ if (infile == NULL) {
+ fprintf(stderr, "Can not fopen file: %s\n",filename);
+ return ret;
+ }
+
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
(png_voidp) NULL,
(png_error_ptr) NULL,
(png_error_ptr) NULL);
- if (!png_ptr)
- {
- fclose(infile);
- return(0);
- }
+ if (!png_ptr)
+ goto file_close;
info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- {
+ if (!info_ptr) {
png_destroy_read_struct(&png_ptr, (png_infopp) NULL,
(png_infopp) NULL);
- fclose(infile);
- return(0);
}
if (setjmp(png_ptr->jmpbuf))
- {
- png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
- fclose(infile);
- return(0);
- }
+ goto png_destroy;
png_init_io(png_ptr, infile);
png_read_info(png_ptr, info_ptr);
@@ -70,18 +67,23 @@ read_png(const char *filename, int *width, int *height, unsigned char **rgb,
png_get_IHDR(png_ptr, info_ptr, &w, &h, &bit_depth, &color_type,
&interlace_type, (int *) NULL, (int *) NULL);
+ /* Prevent against integer overflow */
+ if(w >= MAX_DIMENSION || h >= MAX_DIMENSION) {
+ fprintf(stderr, "Unreasonable dimension found in file: %s\n",filename);
+ goto png_destroy;
+ }
+
*width = (int) w;
*height = (int) h;
if (color_type == PNG_COLOR_TYPE_RGB_ALPHA
- || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- {
- alpha[0] = malloc(*width * *height);
- if (alpha[0] == NULL)
- {
- fprintf(stderr, "Can't allocate memory for alpha channel in PNG file.\n");
- return(0);
- }
+ || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
+ alpha[0] = malloc(*width * *height);
+ if (alpha[0] == NULL)
+ {
+ fprintf(stderr, "Can't allocate memory for alpha channel in PNG file.\n");
+ goto png_destroy;
+ }
}
/* Change a paletted/grayscale image to RGB */
@@ -94,68 +96,70 @@ read_png(const char *filename, int *width, int *height, unsigned char **rgb,
png_set_gray_to_rgb(png_ptr);
/* If the PNG file has 16 bits per channel, strip them down to 8 */
- if (bit_depth == 16) png_set_strip_16(png_ptr);
+ if (bit_depth == 16)
+ png_set_strip_16(png_ptr);
/* use 1 byte per pixel */
png_set_packing(png_ptr);
row_pointers = malloc(*height * sizeof(png_bytep));
- if (row_pointers == NULL)
- {
+ if (row_pointers == NULL) {
fprintf(stderr, "Can't allocate memory for PNG file.\n");
- return(0);
+ goto png_destroy;
}
- for (i = 0; i < *height; i++)
- {
+ for (i = 0; i < *height; i++) {
row_pointers[i] = malloc(4 * *width);
- if (row_pointers == NULL)
- {
+ if (row_pointers == NULL) {
fprintf(stderr, "Can't allocate memory for PNG line.\n");
- return(0);
+ goto rows_free;
}
}
png_read_image(png_ptr, row_pointers);
rgb[0] = malloc(3 * *width * *height);
- if (rgb[0] == NULL)
- {
+ if (rgb[0] == NULL) {
fprintf(stderr, "Can't allocate memory for PNG file.\n");
- return(0);
+ goto rows_free;
}
if (alpha[0] == NULL)
{
- ptr = rgb[0];
- for (i = 0; i < *height; i++)
- {
- memcpy(ptr, row_pointers[i], 3 * *width);
- ptr += 3 * *width;
- }
- }
- else
- {
- int j;
- ptr = rgb[0];
- for (i = 0; i < *height; i++)
- {
- int ipos = 0;
- for (j = 0; j < *width; j++)
- {
- *ptr++ = row_pointers[i][ipos++];
- *ptr++ = row_pointers[i][ipos++];
- *ptr++ = row_pointers[i][ipos++];
- alpha[0][i * *width + j] = row_pointers[i][ipos++];
+ ptr = rgb[0];
+ for (i = 0; i < *height; i++) {
+ memcpy(ptr, row_pointers[i], 3 * *width);
+ ptr += 3 * *width;
+ }
+ } else {
+ int j;
+ ptr = rgb[0];
+ for (i = 0; i < *height; i++) {
+ int ipos = 0;
+ for (j = 0; j < *width; j++) {
+ *ptr++ = row_pointers[i][ipos++];
+ *ptr++ = row_pointers[i][ipos++];
+ *ptr++ = row_pointers[i][ipos++];
+ alpha[0][i * *width + j] = row_pointers[i][ipos++];
+ }
}
- }
}
- png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
+ ret = 1; /* data reading is OK */
+
+rows_free:
+ for (i = 0; i < *height; i++) {
+ if (row_pointers[i] != NULL ) {
+ free(row_pointers[i]);
+ }
+ }
- for (i = 0; i < *height; i++) free(row_pointers[i]);
free(row_pointers);
+png_destroy:
+ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
+
+file_close:
fclose(infile);
- return(1);
+ return(ret);
}
--
1.6.6.1

View File

@@ -0,0 +1,37 @@
From 6aad913ddd5cdb473db9fa21a5e8ecec58de172b Mon Sep 17 00:00:00 2001
From: iwamatsu <iwamatsu@7c53e7cc-98ea-0310-8f1f-a0b24da60408>
Date: Wed, 12 Jan 2011 04:41:02 +0000
Subject: [PATCH 3/8] Fix build failure with ld --as-needed.
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
git-svn-id: svn://svn.berlios.de/slim/trunk@177 7c53e7cc-98ea-0310-8f1f-a0b24da60408
---
Makefile | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 1219de4..fafa0ef 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
# to fit into your operating system / distribution
#######################################################
CXX=/usr/bin/g++
-CC=/usr/bin/gcc
+CC=/usr/bin/gcc-4.5
CFLAGS=-Wall -I. -I/usr/include/freetype2 -I/usr/include/freetype2/config -I/usr/include/libpng12 -I/usr/include
CXXFLAGS=$(CFLAGS)
LDFLAGS=-lXft -lX11 -lfreetype -lXrender -lfontconfig -lpng12 -lz -lm -lcrypt -lXmu -lpng -ljpeg -lrt
@@ -33,7 +33,7 @@ endif
all: slim
slim: $(OBJECTS)
- $(CXX) $(LDFLAGS) $(OBJECTS) -o $(NAME)
+ $(CXX) $(OBJECTS) $(LDFLAGS) -o $(NAME)
.cpp.o:
$(CXX) $(CXXFLAGS) $(DEFINES) $(CUSTOM) -c $< -o $@
--
1.6.6.1

View File

@@ -0,0 +1,50 @@
From c2067e8c16bfb721d339718ae0c99c70a994936b Mon Sep 17 00:00:00 2001
From: iwamatsu <iwamatsu@7c53e7cc-98ea-0310-8f1f-a0b24da60408>
Date: Fri, 17 Jun 2011 20:35:07 +0000
Subject: [PATCH 4/8] Add support libpng15
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
git-svn-id: svn://svn.berlios.de/slim/trunk@178 7c53e7cc-98ea-0310-8f1f-a0b24da60408
---
Makefile | 4 ++--
png.c | 6 +++++-
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index fafa0ef..1202614 100644
--- a/Makefile
+++ b/Makefile
@@ -5,9 +5,9 @@
#######################################################
CXX=/usr/bin/g++
CC=/usr/bin/gcc-4.5
-CFLAGS=-Wall -I. -I/usr/include/freetype2 -I/usr/include/freetype2/config -I/usr/include/libpng12 -I/usr/include
+CFLAGS=-Wall -I. -I/usr/include/freetype2 -I/usr/include/freetype2/config -I/usr/include
CXXFLAGS=$(CFLAGS)
-LDFLAGS=-lXft -lX11 -lfreetype -lXrender -lfontconfig -lpng12 -lz -lm -lcrypt -lXmu -lpng -ljpeg -lrt
+LDFLAGS=-lXft -lX11 -lfreetype -lXrender -lfontconfig -lpng -lz -lm -lcrypt -lXmu -lpng -ljpeg -lrt
CUSTOM=-DHAVE_SHADOW
ifdef USE_PAM
LDFLAGS+= -lpam
diff --git a/png.c b/png.c
index 5c086c6..aa0f5e5 100644
--- a/png.c
+++ b/png.c
@@ -57,8 +57,12 @@ read_png(const char *filename, int *width, int *height, unsigned char **rgb,
png_destroy_read_struct(&png_ptr, (png_infopp) NULL,
(png_infopp) NULL);
}
-
+
+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+ if (setjmp(png_jmpbuf((data->png_ptr))))
+#else
if (setjmp(png_ptr->jmpbuf))
+#endif
goto png_destroy;
png_init_io(png_ptr, infile);
--
1.6.6.1

View File

@@ -0,0 +1,30 @@
From 4f69eb1aa85fbb395a0474b1f376505fab81ee22 Mon Sep 17 00:00:00 2001
From: iwamatsu <iwamatsu@7c53e7cc-98ea-0310-8f1f-a0b24da60408>
Date: Fri, 17 Jun 2011 20:35:10 +0000
Subject: [PATCH 5/8] Remove path of gcc amd g++, and version of g++
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
git-svn-id: svn://svn.berlios.de/slim/trunk@179 7c53e7cc-98ea-0310-8f1f-a0b24da60408
---
Makefile | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 1202614..5c5fde1 100644
--- a/Makefile
+++ b/Makefile
@@ -3,8 +3,8 @@
# Edit the following section to adjust the options
# to fit into your operating system / distribution
#######################################################
-CXX=/usr/bin/g++
-CC=/usr/bin/gcc-4.5
+CXX=g++
+CC=gcc
CFLAGS=-Wall -I. -I/usr/include/freetype2 -I/usr/include/freetype2/config -I/usr/include
CXXFLAGS=$(CFLAGS)
LDFLAGS=-lXft -lX11 -lfreetype -lXrender -lfontconfig -lpng -lz -lm -lcrypt -lXmu -lpng -ljpeg -lrt
--
1.6.6.1

View File

@@ -0,0 +1,32 @@
From e188d5fd3e3c0e40c3e35729fd8b81b138191a75 Mon Sep 17 00:00:00 2001
From: iwamatsu <iwamatsu@7c53e7cc-98ea-0310-8f1f-a0b24da60408>
Date: Fri, 17 Jun 2011 20:35:13 +0000
Subject: [PATCH 6/8] Remove localhost from Authenticator of pam
http://bugs.gentoo.org/346037
https://developer.berlios.de/bugs/?func=detailbug&bug_id=17757&group_id=2663
http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/x11-misc/slim/files/346037-stop_setting_host_for_pam_ck_connector_so.patch?view=log
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
git-svn-id: svn://svn.berlios.de/slim/trunk@180 7c53e7cc-98ea-0310-8f1f-a0b24da60408
---
app.cpp | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/app.cpp b/app.cpp
index c80a73e..7177363 100644
--- a/app.cpp
+++ b/app.cpp
@@ -236,8 +236,6 @@ void App::Run() {
pam.start("slim");
pam.set_item(PAM::Authenticator::TTY, DisplayName);
pam.set_item(PAM::Authenticator::Requestor, "root");
- pam.set_item(PAM::Authenticator::Host, "localhost");
-
}
catch(PAM::Exception& e){
cerr << APPNAME << ": " << e << endl;
--
1.6.6.1

View File

@@ -0,0 +1,47 @@
From da172fd6234b3b2b487ab36d63da72758829cb1d Mon Sep 17 00:00:00 2001
From: iwamatsu <iwamatsu@7c53e7cc-98ea-0310-8f1f-a0b24da60408>
Date: Fri, 17 Jun 2011 20:35:15 +0000
Subject: [PATCH 7/8] Fix tty slowness
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
git-svn-id: svn://svn.berlios.de/slim/trunk@181 7c53e7cc-98ea-0310-8f1f-a0b24da60408
---
app.cpp | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/app.cpp b/app.cpp
index 7177363..44ab099 100644
--- a/app.cpp
+++ b/app.cpp
@@ -278,21 +278,23 @@ void App::Run() {
signal(SIGALRM, AlarmSignal);
#ifndef XNEST_DEBUG
- OpenLog();
-
if (!force_nodaemon && cfg->getOption("daemon") == "yes") {
daemonmode = true;
}
// Daemonize
if (daemonmode) {
- if (daemon(0, 1) == -1) {
+ if (daemon(0, 0) == -1) {
cerr << APPNAME << ": " << strerror(errno) << endl;
exit(ERR_EXIT);
}
- UpdatePid();
}
+ OpenLog();
+
+ if (daemonmode)
+ UpdatePid();
+
CreateServerAuth();
StartServer();
alarm(2);
--
1.6.6.1

View File

@@ -0,0 +1,161 @@
From ee77a3d154443d2823ecbf2141daa1b5924f629f Mon Sep 17 00:00:00 2001
From: iwamatsu <iwamatsu@7c53e7cc-98ea-0310-8f1f-a0b24da60408>
Date: Fri, 17 Jun 2011 20:38:34 +0000
Subject: [PATCH 8/8] restart Xserver if killed
Patch from http://developer.berlios.de/patch/?func=detailpatch&patch_id=2378&group_id=2663.
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
git-svn-id: svn://svn.berlios.de/slim/trunk@182 7c53e7cc-98ea-0310-8f1f-a0b24da60408
---
app.cpp | 36 +++++++++---------------------------
app.h | 2 +-
2 files changed, 10 insertions(+), 28 deletions(-)
diff --git a/app.cpp b/app.cpp
index 44ab099..358a98f 100644
--- a/app.cpp
+++ b/app.cpp
@@ -104,6 +104,11 @@ int conv(int num_msg, const struct pam_message **msg,
extern App* LoginApp;
+int xioerror(Display *disp) {
+ LoginApp->RestartServer();
+ return 0;
+}
+
void CatchSignal(int sig) {
cerr << APPNAME << ": unexpected signal " << sig << endl;
@@ -114,19 +119,6 @@ void CatchSignal(int sig) {
exit(ERR_EXIT);
}
-
-void AlarmSignal(int sig) {
- int pid = LoginApp->GetServerPID();
- if(waitpid(pid, NULL, WNOHANG) == pid) {
- LoginApp->StopServer();
- LoginApp->RemoveLock();
- exit(OK_EXIT);
- }
- signal(sig, AlarmSignal);
- alarm(2);
-}
-
-
void User1Signal(int sig) {
signal(sig, User1Signal);
}
@@ -275,7 +267,6 @@ void App::Run() {
signal(SIGHUP, CatchSignal);
signal(SIGPIPE, CatchSignal);
signal(SIGUSR1, User1Signal);
- signal(SIGALRM, AlarmSignal);
#ifndef XNEST_DEBUG
if (!force_nodaemon && cfg->getOption("daemon") == "yes") {
@@ -297,7 +288,6 @@ void App::Run() {
CreateServerAuth();
StartServer();
- alarm(2);
#endif
}
@@ -613,6 +603,8 @@ void App::Login() {
int status;
while (wpid != pid) {
wpid = wait(&status);
+ if (wpid == ServerPID)
+ xioerror(Dpy); // Server died, simulate IO error
}
if (WIFEXITED(status) && WEXITSTATUS(status)) {
LoginPanel->Message("Failed to execute login command");
@@ -658,9 +650,6 @@ void App::Login() {
void App::Reboot() {
- // Stop alarm clock
- alarm(0);
-
#ifdef USE_PAM
try{
pam.end();
@@ -683,9 +672,6 @@ void App::Reboot() {
void App::Halt() {
- // Stop alarm clock
- alarm(0);
-
#ifdef USE_PAM
try{
pam.end();
@@ -771,6 +757,7 @@ void App::RestartServer() {
StopServer();
RemoveLock();
+ while (waitpid(-1, NULL, WNOHANG) > 0); // Collects all dead childrens
Run();
}
@@ -841,6 +828,7 @@ int App::WaitForServer() {
for(cycles = 0; cycles < ncycles; cycles++) {
if((Dpy = XOpenDisplay(DisplayName))) {
+ XSetIOErrorHandler(xioerror);
return 1;
} else {
if(!ServerTimeout(1, (char *) "X server to begin accepting connections"))
@@ -925,9 +913,6 @@ int App::StartServer() {
ServerPID = -1;
break;
}
- alarm(15);
- pause();
- alarm(0);
// Wait for server to start up
if(WaitForServer() == 0) {
@@ -962,15 +947,12 @@ int IgnoreXIO(Display *d) {
void App::StopServer() {
- // Stop alars clock and ignore signals
- alarm(0);
signal(SIGQUIT, SIG_IGN);
signal(SIGINT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
signal(SIGTERM, SIG_DFL);
signal(SIGKILL, SIG_DFL);
- signal(SIGALRM, SIG_DFL);
// Catch X error
XSetIOErrorHandler(IgnoreXIO);
diff --git a/app.h b/app.h
index dd7c281..2db1038 100644
--- a/app.h
+++ b/app.h
@@ -34,6 +34,7 @@ public:
~App();
void Run();
int GetServerPID();
+ void RestartServer();
void StopServer();
bool serverStarted;
@@ -49,7 +50,6 @@ private:
void Console();
void Exit();
void KillAllClients(Bool top);
- void RestartServer();
void ReadConfig();
void OpenLog();
void CloseLog();
--
1.6.6.1

View File

@@ -0,0 +1,64 @@
# Makefile for slim - OpenEmbedded
#######################################################
SLIMLDFLAGS=-lXft -lX11 -lfreetype -lXrender -lfontconfig -lpng12 -lz -lm -lcrypt -lXmu -lpng -ljpeg -lrt -lpthread
CUSTOM=-DHAVE_SHADOW
USE_PAM=1
ifdef USE_PAM
SLIMLDFLAGS+= -lpam
CUSTOM+= -DUSE_PAM
endif
#######################################################
NAME=slim
VERSION=1.3.2
DEFINES=-DPACKAGE=\"$(NAME)\" -DVERSION=\"$(VERSION)\" \
-DPKGDATADIR=\"$(PREFIX)/share/slim\" -DSYSCONFDIR=\"$(CFGDIR)\"
OBJECTS=jpeg.o png.o main.o image.o numlock.o cfg.o switchuser.o app.o \
panel.o util.o
ifdef USE_PAM
OBJECTS+=PAM.o
endif
all: slim
slim: $(OBJECTS)
$(CXX) $(OBJECTS) $(LDFLAGS) $(SLIMLDFLAGS) -o $(NAME)
.cpp.o:
$(CXX) $(CXXFLAGS) $(DEFINES) $(CUSTOM) -c $< -o $@
.c.o:
$(CC) $(CFLAGS) $(DEFINES) $(CUSTOM) -c $< -o $@
install: slim install-theme
install -D -m 755 slim $(DESTDIR)$(PREFIX)/bin/slim
install -D -m 644 slim.1 $(DESTDIR)$(MANDIR)/man1/slim.1
test -e $(DESTDIR)$(CFGDIR)/slim.conf || \
install -D -m 644 slim.conf $(DESTDIR)$(CFGDIR)/slim.conf
clean:
@rm -f slim *.o
dist:
@rm -rf $(NAME)-$(VERSION)
@mkdir $(NAME)-$(VERSION)
@cp -r *.cpp *.h *.c Makefile Makefile.* COPYING ChangeLog INSTALL README TODO \
xinitrc.sample slim.1 THEMES themes slim.conf $(NAME)-$(VERSION)
@rm -rf $(NAME)-$(VERSION)/themes/.svn $(NAME)-$(VERSION)/themes/default/.svn
@tar cvzf $(NAME)-$(VERSION).tar.gz $(NAME)-$(VERSION)
@rm -rf $(NAME)-$(VERSION)
install-theme:
install -D -m 644 themes/default/slim.theme \
$(DESTDIR)$(PREFIX)/share/slim/themes/default/slim.theme
install -D -m 644 themes/default/panel.png \
$(DESTDIR)$(PREFIX)/share/slim/themes/default/panel.png
install -D -m 644 themes/default/background.jpg \
$(DESTDIR)$(PREFIX)/share/slim/themes/default/background.jpg

View File

@@ -0,0 +1,8 @@
#!/bin/sh
update_slim_wmlist
if [ "x$1" = "x-nodaemon" ]; then
shift
exec slim "$@"
else
slim -d "$@"
fi

View File

@@ -0,0 +1,19 @@
# Begin /etc/pam.d/slim
auth required pam_shells.so
auth include common-auth
auth optional pam_securetty.so
auth optional pam_gnome_keyring.so
account required pam_nologin.so
account include common-account
password include common-password
session include common-session
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session optional pam_lastlog.so nowtmp
session optional pam_mail.so dir=/var/mail standard
session optional pam_gnome_keyring.so auto_start
# End /etc/pam.d/slim

View File

@@ -0,0 +1,11 @@
[Unit]
Description=SLiM Simple Login Manager
Requires=dev-tty7.device
After=dev-tty7.device systemd-user-sessions.service
[Service]
ExecStart=/usr/bin/slim -nodaemon
StandardOutput=syslog
[Install]
WantedBy=graphical.target

View File

@@ -0,0 +1,76 @@
#!/usr/bin/perl -w
#
# update_slim_wmlist, based on:
# update_wdm_wmlist, (c) 1998 Marcelo Magall<6C>n <mmagallo@debian.org>
# rewriten to use the x-window-manager alternative
# modified to also use the x-session-manager alternative by Arthur Korn
# Copyright 2000 Wichert Akkerman <wakkerma@debian.org>
# Modified to use the freedesktop.org .desktop like kdm and gdm
#
# This script will read the list of installed window managers from
# the freedesktop .desktop files in <etc>/X11/sessions/:<etc>/dm/Sessions/:
# <share>/xsessions/
# and update the sessions line in /etc/slim.conf.
# BEWARE: It doesn't ask any questions about this. It just does it. It
# takes an optional list of window managers.
use strict;
use File::DesktopEntry;
my $wm_list='';
my %desktop_files;
unless (@ARGV) {
#my @wm_list = ('default');
my @wm_list;
foreach my $dir ('/etc/X11/sessions/','/etc/dm/Sessions/','/usr/share/xsessions/') {
next unless (opendir DIR, $dir);
my @files;
@files = grep { /\.desktop$/ && -r "$dir/$_" } readdir(DIR);
foreach my $file (@files) {
push @{$desktop_files{$file}}, "$dir/$file";
}
}
DESKTOP: foreach my $desktop_file (keys(%desktop_files)) {
foreach my $file (@{$desktop_files{$desktop_file}}) {
my $entry = File::DesktopEntry->new_from_file($file);
next DESKTOP if (defined($entry->get_value('Hidden'))
and $entry->get_value('Hidden') eq 'true');
if ($entry->get_value('Name') =~ /^gnome$/i) {
push (@wm_list, 'gnome');
}
elsif ($entry->get_value('Name') =~ /^kde$/i) {
push (@wm_list, 'kde');
}
elsif (defined($entry->get_value('Exec'))) {
push (@wm_list, $entry->get_value('Exec'));
}
else { # not found, go to next file
next;
}
# found, proceed to next destop file
next DESKTOP;
}
}
$wm_list = join (',', sort @wm_list) . ',custom';
} else {
$wm_list = join (',', sort @ARGV);
}
open (SLIM_CONFIG_FILE, '</etc/slim.conf')
or die "Can't open /etc/slim.conf for reading: $!";
open (NEW_SLIM_CONFIG_FILE, '>/etc/slim.conf.new')
or die "Can't open /etc/slim.conf.new for writing: $!";
while (<SLIM_CONFIG_FILE>) {
s|^(sessions\s*).*|$1$wm_list|;
print NEW_SLIM_CONFIG_FILE;
}
close(SLIM_CONFIG_FILE);
close(NEW_SLIM_CONFIG_FILE);
rename '/etc/slim.conf.new', '/etc/slim.conf'
or die "Can't rename /etc/slim.conf.new: $!";
exit 0;

View File

@@ -0,0 +1,75 @@
DESCRIPTION="Simple Login Manager"
HOMEPAGE="http://slim.berlios.de"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
DEPENDS = "virtual/libx11 libxmu libpng jpeg freetype sessreg ${@base_contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
SRC_URI = " \
http://download.berlios.de/${PN}/${P}.tar.gz \
file://0002-Fix-image-handling-integer-overflows.patch \
file://0003-Fix-build-failure-with-ld-as-needed.patch \
file://0004-Add-support-libpng15.patch \
file://0005-Remove-path-of-gcc-amd-g-and-version-of-g.patch \
file://0006-Remove-localhost-from-Authenticator-of-pam.patch \
file://0007-Fix-tty-slowness.patch \
file://0008-restart-Xserver-if-killed.patch \
file://slim-dynwm \
file://update_slim_wmlist \
file://Makefile.oe \
file://slim.pamd \
file://slim.service \
"
SRC_URI[md5sum] = "ca1ae6120e6f4b4969f2d6cf94f47b42"
SRC_URI[sha256sum] = "f1560125005f253b9b88220598fed7a9575ef405716862c6ca3fcc72dbd482b8"
EXTRA_OEMAKE += " \
USE_PAM=${@base_contains('DISTRO_FEATURES', 'pam', '1', '0', d)} \
PREFIX=${prefix} \
CFGDIR=${sysconfdir} \
MANDIR=${mandir} \
DESTDIR=${D} \
CFLAGS+=-I${STAGING_INCDIR}/freetype2 \
CXXFLAGS+=-I${STAGING_INCDIR}/freetype2 \
"
do_compile_prepend() {
cp -pP ${WORKDIR}/Makefile.oe ${S}/Makefile
}
do_install() {
oe_runmake install
install -d ${D}${bindir}
install -m 0755 ${WORKDIR}/slim-dynwm ${D}${bindir}/
install -m 0755 ${WORKDIR}/update_slim_wmlist ${D}${bindir}/
install -d ${D}${sysconfdir}/pam.d/
install -m 0644 ${WORKDIR}/slim.pamd ${D}${sysconfdir}/pam.d/slim
echo 'sessionstart_cmd /usr/bin/sessreg -a -l $DISPLAY %user' >> ${D}${sysconfdir}/slim.conf
echo 'sessionstop_cmd /usr/bin/sessreg -d -l $DISPLAY %user' >> ${D}${sysconfdir}/slim.conf
}
RDEPENDS_${PN} = "perl xauth freetype sessreg ${@base_contains('DISTRO_FEATURES', 'pam', 'libpam-meta', '', d)}"
pkg_postinst_${PN} () {
if test "x$D" != "x"; then
exit 1
fi
systemctl enable slim.service
# Register SLiM as default DM
mkdir -p ${sysconfdir}/X11/
echo "${bindir}/slim" > ${sysconfdir}/X11/default-display-manager
}
pkg_postrm_${PN} () {
if test "x$D" != "x"; then
exit 1
fi
systemctl disable slim.service
sed -i /slim/d $D${sysconfdir}/X11/default-display-manager || true
}