diff options
author | Denis 'GNUtoo' Carikli <GNUtoo@no-log.org> | 2011-03-26 18:08:22 +0100 |
---|---|---|
committer | Denis 'GNUtoo' Carikli <GNUtoo@no-log.org> | 2011-03-27 00:39:34 +0100 |
commit | b7fd958ca39eab3bcdbd20c35334dab30299c215 (patch) | |
tree | 44bad0698012952165ab4aff466ca0947a209576 /recipes/slim | |
parent | 40225fbb406dbeb07101c54b2a1da00b564a3262 (diff) | |
download | openembedded-b7fd958ca39eab3bcdbd20c35334dab30299c215.tar.gz |
add new recipe: slim (an X display manager)
The slim recipe was taken from the openpandora git here:
http://git.openpandora.org/cgi-bin/gitweb.cgi?p=openpandora.oe.git;a=tree;f=recipes/slim;h=6ac85b55ec8fb1d600bdc0322b0a61c50520e290;hb=HEAD
And updated to use newer openembedded standards
(like for instance apply=yes instead of patch=1)
Thanks JaMa|Off and woglinde for the help on DEPENDS and RDEPENDS:
From #oe on Freenode on IRC:
<JaMa|Off> GNUtoo|laptop: 1) it should be RDEPENDS_${PN}
And:
<woglinde> no RDEPENDS with virtual
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@no-log.org>
Diffstat (limited to 'recipes/slim')
-rw-r--r-- | recipes/slim/slim/Makefile.oe | 64 | ||||
-rw-r--r-- | recipes/slim/slim/Makefile.patch | 20 | ||||
-rw-r--r-- | recipes/slim/slim/delay.patch | 12 | ||||
-rw-r--r-- | recipes/slim/slim/fix-manpage.patch | 9 | ||||
-rw-r--r-- | recipes/slim/slim/ftbfs_gcc_4.4.patch | 12 | ||||
-rw-r--r-- | recipes/slim/slim/pam-unix2.patch | 89 | ||||
-rw-r--r-- | recipes/slim/slim/rc.slim | 27 | ||||
-rw-r--r-- | recipes/slim/slim/slim-conf.patch | 56 | ||||
-rw-r--r-- | recipes/slim/slim/slim-dynwm | 8 | ||||
-rw-r--r-- | recipes/slim/slim/slim.pamd | 19 | ||||
-rw-r--r-- | recipes/slim/slim/types.patch | 12 | ||||
-rw-r--r-- | recipes/slim/slim/update_slim_wmlist | 76 | ||||
-rw-r--r-- | recipes/slim/slim/xauth_secret_support.patch | 316 | ||||
-rw-r--r-- | recipes/slim/slim_1.3.1.bb | 84 |
14 files changed, 804 insertions, 0 deletions
diff --git a/recipes/slim/slim/Makefile.oe b/recipes/slim/slim/Makefile.oe new file mode 100644 index 0000000000..ade4e29a00 --- /dev/null +++ b/recipes/slim/slim/Makefile.oe @@ -0,0 +1,64 @@ +# Makefile for slim - OpenEmbedded +####################################################### + + +LDFLAGS=-lXft -lX11 -lfreetype -lXrender -lfontconfig -lpng12 -lz -lm -lcrypt -lXmu -lpng -ljpeg -lrt +CUSTOM=-DHAVE_SHADOW + +USE_PAM=1 +ifdef USE_PAM +LDFLAGS+= -lpam +CUSTOM+= -DUSE_PAM +endif + +####################################################### + +NAME=slim +VERSION=1.3.1 + +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) $(LDFLAGS) $(OBJECTS) -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/recipes/slim/slim/Makefile.patch b/recipes/slim/slim/Makefile.patch new file mode 100644 index 0000000000..957b517678 --- /dev/null +++ b/recipes/slim/slim/Makefile.patch @@ -0,0 +1,20 @@ +--- a/Makefile 2009-08-23 13:56:12.000000000 +0900 ++++ b/Makefile 2009-08-23 13:56:51.000000000 +0900 +@@ -7,7 +7,7 @@ + CC=/usr/bin/gcc + 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 ++LDFLAGS=-L/usr/X11R6/lib -lXft -lX11 -lpng12 -lm -lXmu -lpng -ljpeg + CUSTOM=-DHAVE_SHADOW + ifdef USE_PAM + LDFLAGS+= -lpam +@@ -15,7 +15,7 @@ + endif + PREFIX=/usr + CFGDIR=/etc +-MANDIR=/usr/man ++MANDIR=/usr/share/man + DESTDIR= + ####################################################### + diff --git a/recipes/slim/slim/delay.patch b/recipes/slim/slim/delay.patch new file mode 100644 index 0000000000..abab1914e1 --- /dev/null +++ b/recipes/slim/slim/delay.patch @@ -0,0 +1,12 @@ +--- slim-1.3.1-orig/app.cpp.orig 2007-07-15 22:09:28.000000000 +0800 ++++ slim-1.3.1/app.cpp 2008-05-06 23:33:40.000000000 +0800 +@@ -884,9 +884,6 @@ + ServerPID = -1; + break; + } +- alarm(15); +- pause(); +- alarm(0); + + // Wait for server to start up + if(WaitForServer() == 0) { diff --git a/recipes/slim/slim/fix-manpage.patch b/recipes/slim/slim/fix-manpage.patch new file mode 100644 index 0000000000..24f0d9e7ca --- /dev/null +++ b/recipes/slim/slim/fix-manpage.patch @@ -0,0 +1,9 @@ +Index: slim-1.3.0/slim.1 +=================================================================== +--- slim-1.3.0.orig/slim.1 2008-09-13 11:20:32.000000000 +0000 ++++ slim-1.3.0/slim.1 2008-09-13 11:20:35.000000000 +0000 +@@ -1,4 +1,3 @@ +-." Text automatically generated by txt2man-1.4.7 + .TH slim 1 "January 09, 2006" "" "" + .SH NAME + \fBslim \fP- Simple LogIn Manager diff --git a/recipes/slim/slim/ftbfs_gcc_4.4.patch b/recipes/slim/slim/ftbfs_gcc_4.4.patch new file mode 100644 index 0000000000..70386365d7 --- /dev/null +++ b/recipes/slim/slim/ftbfs_gcc_4.4.patch @@ -0,0 +1,12 @@ +# From http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=505332 + +--- a/switchuser.h 2009-09-21 16:10:43.000000000 +0900 ++++ b/switchuser.h 2009-09-21 16:11:06.000000000 +0900 +@@ -18,6 +18,7 @@ + #include <pwd.h> + #include <grp.h> + #include <paths.h> ++#include <cstdio> + #include <iostream> + #include "const.h" + #include "cfg.h" diff --git a/recipes/slim/slim/pam-unix2.patch b/recipes/slim/slim/pam-unix2.patch new file mode 100644 index 0000000000..2163d20a5e --- /dev/null +++ b/recipes/slim/slim/pam-unix2.patch @@ -0,0 +1,89 @@ +diff -rc slim-1.3.1-orig/app.cpp slim-1.3.1/app.cpp +*** slim-1.3.1-orig/app.cpp 2008-09-26 02:54:15.000000000 +0200 +--- slim-1.3.1/app.cpp 2009-02-17 19:50:06.000000000 +0100 +*************** +*** 41,48 **** + Panel* panel = *static_cast<Panel**>(appdata_ptr); + int result = PAM_SUCCESS; + for (int i=0; i<num_msg; i++){ +! resp[i]->resp=0; +! resp[i]->resp_retcode=0; + switch(msg[i]->msg_style){ + case PAM_PROMPT_ECHO_ON: + // We assume PAM is asking for the username +--- 41,48 ---- + Panel* panel = *static_cast<Panel**>(appdata_ptr); + int result = PAM_SUCCESS; + for (int i=0; i<num_msg; i++){ +! (*resp)[i].resp=0; +! (*resp)[i].resp_retcode=0; + switch(msg[i]->msg_style){ + case PAM_PROMPT_ECHO_ON: + // We assume PAM is asking for the username +*************** +*** 51,63 **** + case Panel::Suspend: + case Panel::Halt: + case Panel::Reboot: +! resp[i]->resp=strdup("root"); + break; + + case Panel::Console: + case Panel::Exit: + case Panel::Login: +! resp[i]->resp=strdup(panel->GetName().c_str()); + break; + } + break; +--- 51,63 ---- + case Panel::Suspend: + case Panel::Halt: + case Panel::Reboot: +! (*resp)[i].resp=strdup("root"); + break; + + case Panel::Console: + case Panel::Exit: + case Panel::Login: +! (*resp)[i].resp=strdup(panel->GetName().c_str()); + break; + } + break; +*************** +*** 73,79 **** + + default: + panel->EventHandler(Panel::Get_Passwd); +! resp[i]->resp=strdup(panel->GetPasswd().c_str()); + break; + } + break; +--- 73,79 ---- + + default: + panel->EventHandler(Panel::Get_Passwd); +! (*resp)[i].resp=strdup(panel->GetPasswd().c_str()); + break; + } + break; +*************** +*** 89,97 **** + } + if (result!=PAM_SUCCESS){ + for (int i=0; i<num_msg; i++){ +! if (resp[i]->resp==0) continue; +! free(resp[i]->resp); +! resp[i]->resp=0; + }; + free(*resp); + *resp=0; +--- 89,97 ---- + } + if (result!=PAM_SUCCESS){ + for (int i=0; i<num_msg; i++){ +! if ((*resp)[i].resp==0) continue; +! free((*resp)[i].resp); +! (*resp)[i].resp=0; + }; + free(*resp); + *resp=0; diff --git a/recipes/slim/slim/rc.slim b/recipes/slim/slim/rc.slim new file mode 100644 index 0000000000..bf638575e2 --- /dev/null +++ b/recipes/slim/slim/rc.slim @@ -0,0 +1,27 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: slim +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: SLiM Display Manager (and wrapper script) +# Description: init script for the SLiM Display Manager +### END INIT INFO + +case $1 in +start) + /usr/bin/slim -d & + ;; +stop) + killall /usr/bin/slim + ;; +restart) + $0 stop + sleep 2 + $0 start + ;; +*) + echo "usage: $0 [start|stop|restart]" + ;; +esac + +# End of file diff --git a/recipes/slim/slim/slim-conf.patch b/recipes/slim/slim/slim-conf.patch new file mode 100644 index 0000000000..aae7eb519b --- /dev/null +++ b/recipes/slim/slim/slim-conf.patch @@ -0,0 +1,56 @@ +--- a/slim.conf 2009-08-23 13:48:20.000000000 +0900 ++++ b/slim.conf 2009-08-23 13:53:50.000000000 +0900 +@@ -1,17 +1,17 @@ + # Path, X server and arguments (if needed) + # Note: -xauth $authfile is automatically appended +-default_path ./:/bin:/usr/bin:/usr/local/bin +-default_xserver /usr/bin/X +-#xserver_arguments -dpi 75 ++default_path /bin:/usr/bin:/usr/local/bin:/usr/bin/X11 ++default_xserver /usr/bin/X11/X ++xserver_arguments -nolisten tcp + + # Commands for halt, login, etc. + halt_cmd /sbin/shutdown -h now + reboot_cmd /sbin/shutdown -r now +-console_cmd /usr/bin/xterm -C -fg white -bg black +sb -T "Console login" -e /bin/sh -c "/bin/cat /etc/issue; exec /bin/login" ++console_cmd /usr/bin/x-terminal-emulator -C -fg white -bg black +sb -T "Console login" -e /bin/sh -c "/bin/cat /etc/issue.net; exec /bin/login" + #suspend_cmd /usr/sbin/suspend + + # Full path to the xauth binary +-xauth_path /usr/bin/xauth ++xauth_path /usr/bin/X11/xauth + + # Xauth file for server + authfile /var/run/slim.auth +@@ -33,7 +33,7 @@ + # to adjust the command according to your preferred shell, + # i.e. for freebsd use: + # login_cmd exec /bin/sh - ~/.xinitrc %session +-login_cmd exec /bin/bash -login ~/.xinitrc %session ++login_cmd exec /bin/bash -login /etc/X11/Xsession %session + + # Commands executed when starting and exiting a session. + # They can be used for registering a X11 session with +@@ -51,10 +51,10 @@ + # The current chosen session name is replaced in the login_cmd + # above, so your login command can handle different sessions. + # see the xinitrc.sample file shipped with slim sources +-sessions xfce4,icewm,wmaker,blackbox ++sessions default,startxfce4,openbox,ion3,icewm,wmaker,blackbox,awesome + + # Executed when pressing F11 (requires imagemagick) +-screenshot_cmd import -window root /slim.png ++screenshot_cmd screenshot_cmd scrot /tmp/slim.png + + # welcome message. Available variables: %host, %domain + welcome_msg Welcome to %host +@@ -81,7 +81,7 @@ + + # current theme, use comma separated list to specify a set to + # randomly choose from +-current_theme default ++current_theme debian-moreblue-orbit + + # Lock file + lockfile /var/run/slim.lock diff --git a/recipes/slim/slim/slim-dynwm b/recipes/slim/slim/slim-dynwm new file mode 100644 index 0000000000..49c9d47eca --- /dev/null +++ b/recipes/slim/slim/slim-dynwm @@ -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/recipes/slim/slim/slim.pamd b/recipes/slim/slim/slim.pamd new file mode 100644 index 0000000000..80c34b1dba --- /dev/null +++ b/recipes/slim/slim/slim.pamd @@ -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/recipes/slim/slim/types.patch b/recipes/slim/slim/types.patch new file mode 100644 index 0000000000..2335b60137 --- /dev/null +++ b/recipes/slim/slim/types.patch @@ -0,0 +1,12 @@ +Index: slim-1.3.1/app.cpp +=================================================================== +--- slim-1.3.1.orig/app.cpp 2011-03-21 18:33:43.630046799 +0100 ++++ slim-1.3.1/app.cpp 2011-03-21 18:34:16.130046805 +0100 +@@ -16,6 +16,7 @@ + #include <fcntl.h> + #include <cstring> + #include <cstdio> ++#include <stdint.h> + + #include <iostream> + #include <fstream> diff --git a/recipes/slim/slim/update_slim_wmlist b/recipes/slim/slim/update_slim_wmlist new file mode 100644 index 0000000000..0f116537fd --- /dev/null +++ b/recipes/slim/slim/update_slim_wmlist @@ -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/recipes/slim/slim/xauth_secret_support.patch b/recipes/slim/slim/xauth_secret_support.patch new file mode 100644 index 0000000000..c2d4044c7c --- /dev/null +++ b/recipes/slim/slim/xauth_secret_support.patch @@ -0,0 +1,316 @@ +# From http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=529306 +# Commited to upstream. + +diff --git a/Makefile b/Makefile +index a01bafd..9bd5555 100644 +--- a/Makefile ++++ b/Makefile +@@ -7,7 +7,7 @@ CXX=/usr/bin/g++ + CC=/usr/bin/gcc + CFLAGS=-Wall -I. -I/usr/include/freetype2 -I/usr/include/freetype2/config -I/usr/include/libpng12 -I/usr/include + CXXFLAGS=$(CFLAGS) +-LDFLAGS=-L/usr/X11R6/lib -lXft -lX11 -lpng12 -lm -lXmu -lpng -ljpeg ++LDFLAGS=-L/usr/X11R6/lib -lXft -lX11 -lpng12 -lm -lXmu -lpng -ljpeg -lrt + CUSTOM=-DHAVE_SHADOW + ifdef USE_PAM + LDFLAGS+= -lpam +@@ -25,7 +25,8 @@ VERSION=1.3.1 + 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 ++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 +diff --git a/Makefile.freebsd b/Makefile.freebsd +index 3ff326e..c925a39 100644 +--- a/Makefile.freebsd ++++ b/Makefile.freebsd +@@ -24,7 +24,8 @@ VERSION=1.3.1 + 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 ++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 +diff --git a/Makefile.netbsd b/Makefile.netbsd +index ad8bb8b..45f33e6 100644 +--- a/Makefile.netbsd ++++ b/Makefile.netbsd +@@ -24,7 +24,8 @@ VERSION=1.3.1 + 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 ++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 +diff --git a/Makefile.openbsd b/Makefile.openbsd +index b1829f8..1205b84 100644 +--- a/Makefile.openbsd ++++ b/Makefile.openbsd +@@ -20,7 +20,8 @@ VERSION=1.3.1 + 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 ++OBJECTS=jpeg.o png.o main.o image.o numlock.o cfg.o switchuser.o app.o \ ++ util.o panel.o + + .SUFFIXES: .c.o .cpp.o + +diff --git a/app.cpp b/app.cpp +index 83ae947..0ac8c3a 100644 +--- a/app.cpp ++++ b/app.cpp +@@ -24,6 +24,7 @@ + #include <algorithm> + #include "app.h" + #include "numlock.h" ++#include "util.h" + + + #ifdef HAVE_SHADOW +@@ -128,15 +129,18 @@ void User1Signal(int sig) { + + + #ifdef USE_PAM +-App::App(int argc, char** argv): +- pam(conv, static_cast<void*>(&LoginPanel)){ ++App::App(int argc, char** argv) ++ : pam(conv, static_cast<void*>(&LoginPanel)), + #else +-App::App(int argc, char** argv){ ++App::App(int argc, char** argv) ++ : + #endif ++ mcookiesize(32) // Must be divisible by 4 ++{ + int tmp; + ServerPID = -1; + testing = false; +- mcookie = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; ++ mcookie = string(App::mcookiesize, 'a'); + daemonmode = false; + force_nodaemon = false; + firstlogin = true; +@@ -1127,13 +1131,13 @@ string App::findValidRandomTheme(const string& set) + name = name.substr(0, name.length() - 1); + } + +- srandom(getpid()+time(NULL)); ++ Util::srandom(Util::makeseed()); + + vector<string> themes; + string themefile; + Cfg::split(themes, name, ','); + do { +- int sel = random() % themes.size(); ++ int sel = Util::random() % themes.size(); + + name = Cfg::Trim(themes[sel]); + themefile = string(THEMESDIR) +"/" + name + THEMESFILE; +@@ -1160,33 +1164,33 @@ void App::replaceVariables(string& input, + } + + ++/* ++ * We rely on the fact that all bits generated by Util::random() ++ * are usable, so we are taking full words from its output. ++ */ + void App::CreateServerAuth() { + /* create mit cookie */ +- int i, r; +- int hexcount = 0; +- string authfile; +- string cmd; ++ uint16_t word; ++ uint8_t hi, lo; ++ int i; ++ string authfile; + const char *digits = "0123456789abcdef"; +- srand( time(NULL) ); +- for ( i = 0; i < 31; i++ ) { +- r = rand()%16; +- mcookie[i] = digits[r]; +- if (r>9) +- hexcount++; ++ Util::srandom(Util::makeseed()); ++ for (i = 0; i < App::mcookiesize; i+=4) { ++ word = Util::random() & 0xffff; ++ lo = word & 0xff; ++ hi = word >> 8; ++ mcookie[i] = digits[lo & 0x0f]; ++ mcookie[i+1] = digits[lo >> 4]; ++ mcookie[i+2] = digits[hi & 0x0f]; ++ mcookie[i+3] = digits[hi >> 4]; + } +- /* MIT-COOKIE: even occurrences of digits and hex digits */ +- if ((hexcount%2) == 0) { +- r = rand()%10; +- } else { +- r = rand()%5+10; +- } +- mcookie[31] = digits[r]; + /* reinitialize auth file */ + authfile = cfg->getOption("authfile"); + remove(authfile.c_str()); + putenv(StrConcat("XAUTHORITY=", authfile.c_str())); +- cmd = cfg->getOption("xauth_path") + " -q -f " + authfile + " add :0 . " + mcookie; +- system(cmd.c_str()); ++ Util::add_mcookie(mcookie, ":0", cfg->getOption("xauth_path"), ++ authfile); + } + + char* App::StrConcat(const char* str1, const char* str2) { +diff --git a/app.h b/app.h +index 7b4bd10..9a44269 100644 +--- a/app.h ++++ b/app.h +@@ -101,6 +101,8 @@ private: + + std::string themeName; + std::string mcookie; ++ ++ const int mcookiesize; + }; + + +diff --git a/switchuser.cpp b/switchuser.cpp +index e72a8fc..ec298e1 100644 +--- a/switchuser.cpp ++++ b/switchuser.cpp +@@ -10,6 +10,7 @@ + */ + + #include "switchuser.h" ++#include "util.h" + + using namespace std; + +@@ -53,10 +54,10 @@ void SwitchUser::Execute(const char* cmd) { + } + + void SwitchUser::SetClientAuth(const char* mcookie) { +- int r; ++ bool r; + string home = string(Pw->pw_dir); + string authfile = home + "/.Xauthority"; + remove(authfile.c_str()); +- string cmd = cfg->getOption("xauth_path") + " -q -f " + authfile + " add :0 . " + mcookie; +- r = system(cmd.c_str()); ++ r = Util::add_mcookie(mcookie, ":0", cfg->getOption("xauth_path"), ++ authfile); + } +diff --git a/util.cpp b/util.cpp +new file mode 100644 +index 0000000..5ed972f +--- /dev/null ++++ b/util.cpp +@@ -0,0 +1,69 @@ ++/* SLiM - Simple Login Manager ++ Copyright (C) 2009 Eygene Ryabinkin <rea@codelabs.ru> ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++*/ ++ ++#include <sys/types.h> ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <time.h> ++#include <unistd.h> ++ ++#include "util.h" ++ ++/* ++ * Adds the given cookie to the specified Xauthority file. ++ * Returns true on success, false on fault. ++ */ ++bool Util::add_mcookie(const std::string &mcookie, const char *display, ++ const std::string &xauth_cmd, const std::string &authfile) ++{ ++ FILE *fp; ++ std::string cmd = xauth_cmd + " -f " + authfile + " -q"; ++ ++ fp = popen(cmd.c_str(), "w"); ++ if (!fp) ++ return false; ++ fprintf(fp, "remove %s\n", display); ++ fprintf(fp, "add %s %s %s\n", display, ".", mcookie.c_str()); ++ fprintf(fp, "exit\n"); ++ ++ pclose(fp); ++ return true; ++} ++ ++/* ++ * Interface for random number generator. Just now it uses ordinary ++ * random/srandom routines and serves as a wrapper for them. ++ */ ++void Util::srandom(unsigned long seed) ++{ ++ ::srandom(seed); ++} ++ ++long Util::random(void) ++{ ++ return ::random(); ++} ++ ++/* ++ * Makes seed for the srandom() using "random" values obtained from ++ * getpid(), time(NULL) and others. ++ */ ++long Util::makeseed(void) ++{ ++ struct timespec ts; ++ long pid = getpid(); ++ long tm = time(NULL); ++ ++ if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { ++ ts.tv_sec = ts.tv_nsec = 0; ++ } ++ ++ return pid + tm + (ts.tv_sec ^ ts.tv_nsec); ++} +diff --git a/util.h b/util.h +new file mode 100644 +index 0000000..b8d2993 +--- /dev/null ++++ b/util.h +@@ -0,0 +1,24 @@ ++/* SLiM - Simple Login Manager ++ Copyright (C) 2009 Eygene Ryabinkin <rea@codelabs.ru> ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++*/ ++#ifndef __UTIL_H__ ++#define __UTIL_H__ ++ ++#include <string> ++ ++namespace Util { ++ bool add_mcookie(const std::string &mcookie, const char *display, ++ const std::string &xauth_cmd, const std::string &authfile); ++ ++ void srandom(unsigned long seed); ++ long random(void); ++ ++ long makeseed(void); ++}; ++ ++#endif /* __UTIL_H__ */ diff --git a/recipes/slim/slim_1.3.1.bb b/recipes/slim/slim_1.3.1.bb new file mode 100644 index 0000000000..f0a57d07b5 --- /dev/null +++ b/recipes/slim/slim_1.3.1.bb @@ -0,0 +1,84 @@ +DESCRIPTION="Simple Login Manager" +HOMEPAGE="http://slim.berlios.de" +LICENSE = "GPLv2+" + +PR = "r0" + +inherit update-rc.d + +DEPEND = "virtual/x11 libxmu libpng libjpeg libpam freetype sessreg" +RDEPEND_${PN} = "perl libpam-meta xauth freetype sessreg" + +SRC_URI = " \ + http://download.berlios.de/${PN}/${P}.tar.gz \ + file://fix-manpage.patch;apply=1 \ + file://ftbfs_gcc_4.4.patch;apply=1 \ + file://Makefile.patch;apply=1 \ + file://xauth_secret_support.patch;apply=1 \ + file://delay.patch;apply=1 \ + file://pam-unix2.patch;apply=1 \ + file://types.patch;apply=1 \ + file://rc.slim \ + file://slim-dynwm \ + file://update_slim_wmlist \ + file://Makefile.oe \ + file://slim.pamd \ +" + +EXTRA_OEMAKE += " \ + USE_PAM=1 \ + PREFIX=${prefix} \ + CFGDIR=${sysconfdir} \ + MANDIR=${mandir} \ + DESTDIR=${D} \ + CFLAGS+=-I${STAGING_INCDIR}/freetype2 \ + CXXFLAGS+=-I${STAGING_INCDIR}/freetype2 \ + LDFLAGS+=-lXft \ + LDFLAGS+=-lX11 \ + LDFLAGS+=-lfreetype \ + LDFLAGS+=-lXrender \ + LDFLAGS+=-lfontconfig \ + LDFLAGS+=-lpng12 \ + LDFLAGS+=-lz \ + LDFLAGS+=-lm \ + LDFLAGS+=-lcrypt \ + LDFLAGS+=-lXmu \ + LDFLAGS+=-lpng \ + LDFLAGS+=-ljpeg \ + LDFLAGS+=-lrt \ + LDFLAGS+=-lpam \ +" + +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 + install -d ${D}${sysconfdir}/init.d/ + install -m 0755 ${WORKDIR}/rc.slim ${D}${sysconfdir}/init.d/slim-init + + 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 +} + +INITSCRIPT_NAME = "slim-init" +INITSCRIPT_PARAMS = "start 99 5 2 . stop 20 0 1 6 ." + +pkg_postinst_${PN} () { +# Register SLiM as default DM +mkdir -p ${sysconfdir}/X11/ +echo "${bindir}/slim" > ${sysconfdir}/X11/default-display-manager +} + +pkg_postrm_${PN} () { +sed -i /slim/d ${sysconfdir}/X11/default-display-manager || true +} + +SRC_URI[md5sum] = "727d0acb24c0fbf0751134c37a9c895f" +SRC_URI[sha256sum] = "acd7a4024bfd7c2a4f3cd5d77ffed4956d13727a8f554042126d0568defe0f77" |