slim: add 1.3.2
authorKoen Kooi <koen@dominion.thruhere.net>
Mon, 20 Jun 2011 19:18:40 +0000 (21:18 +0200)
committerPatrick Ohly <patrick.ohly@intel.com>
Fri, 9 Jan 2015 16:13:25 +0000 (08:13 -0800)
1.3.1 was imported from OE rev 58b79786c6b1ee26340b20e7606d2144f52543ed, but heavily cleaned

(From meta-openembedded rev: 73573117d078ac1cc7f31c21d4ac2a4c0e5da574)

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
13 files changed:
meta-openembedded/meta-oe/recipes-graphics/slim/slim/0002-Fix-image-handling-integer-overflows.patch [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/0003-Fix-build-failure-with-ld-as-needed.patch [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/0004-Add-support-libpng15.patch [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/0005-Remove-path-of-gcc-amd-g-and-version-of-g.patch [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/0006-Remove-localhost-from-Authenticator-of-pam.patch [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/0007-Fix-tty-slowness.patch [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/0008-restart-Xserver-if-killed.patch [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/Makefile.oe [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/slim-dynwm [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/slim.pamd [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/slim.service [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim/update_slim_wmlist [new file with mode: 0644]
meta-openembedded/meta-oe/recipes-graphics/slim/slim_1.3.2.bb [new file with mode: 0644]

diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0002-Fix-image-handling-integer-overflows.patch b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0002-Fix-image-handling-integer-overflows.patch
new file mode 100644 (file)
index 0000000..de82d63
--- /dev/null
@@ -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
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0003-Fix-build-failure-with-ld-as-needed.patch b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0003-Fix-build-failure-with-ld-as-needed.patch
new file mode 100644 (file)
index 0000000..471c4f5
--- /dev/null
@@ -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
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0004-Add-support-libpng15.patch b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0004-Add-support-libpng15.patch
new file mode 100644 (file)
index 0000000..f2087c0
--- /dev/null
@@ -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
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0005-Remove-path-of-gcc-amd-g-and-version-of-g.patch b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0005-Remove-path-of-gcc-amd-g-and-version-of-g.patch
new file mode 100644 (file)
index 0000000..566ae35
--- /dev/null
@@ -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
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0006-Remove-localhost-from-Authenticator-of-pam.patch b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0006-Remove-localhost-from-Authenticator-of-pam.patch
new file mode 100644 (file)
index 0000000..a5b8125
--- /dev/null
@@ -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
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0007-Fix-tty-slowness.patch b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0007-Fix-tty-slowness.patch
new file mode 100644 (file)
index 0000000..fa2502b
--- /dev/null
@@ -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
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0008-restart-Xserver-if-killed.patch b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/0008-restart-Xserver-if-killed.patch
new file mode 100644 (file)
index 0000000..0c5cfb7
--- /dev/null
@@ -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
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/Makefile.oe b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/Makefile.oe
new file mode 100644 (file)
index 0000000..2ee6934
--- /dev/null
@@ -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
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/slim-dynwm b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/slim-dynwm
new file mode 100644 (file)
index 0000000..49c9d47
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+update_slim_wmlist
+if [ "x$1" = "x-nodaemon" ]; then
+  shift
+  exec slim "$@"
+else
+  slim -d "$@"
+fi
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/slim.pamd b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/slim.pamd
new file mode 100644 (file)
index 0000000..80c34b1
--- /dev/null
@@ -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
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/slim.service b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/slim.service
new file mode 100644 (file)
index 0000000..341351a
--- /dev/null
@@ -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
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim/update_slim_wmlist b/meta-openembedded/meta-oe/recipes-graphics/slim/slim/update_slim_wmlist
new file mode 100644 (file)
index 0000000..0f11653
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/perl -w
+#
+# update_slim_wmlist, based on:
+# update_wdm_wmlist, (c) 1998 Marcelo Magalló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;
diff --git a/meta-openembedded/meta-oe/recipes-graphics/slim/slim_1.3.2.bb b/meta-openembedded/meta-oe/recipes-graphics/slim/slim_1.3.2.bb
new file mode 100644 (file)
index 0000000..5d8f583
--- /dev/null
@@ -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
+}
+