summaryrefslogtreecommitdiffstats
path: root/remote/modules
diff options
context:
space:
mode:
authorSimon Rettberg2015-05-15 17:36:29 +0200
committerSimon Rettberg2015-05-15 17:36:29 +0200
commit9fff0a99fa0031c5b70a43b5eea93681ca0f70be (patch)
treec9ec0dcd587b003d3be63905245e68f102397465 /remote/modules
parentCompatibility improvements with ldadp and windows servers in mount scripts (diff)
parent[vbox] CAUTION: COMPATIBILITY BREAK to V3! virtualbox runs now, needs further (diff)
downloadtm-scripts-9fff0a99fa0031c5b70a43b5eea93681ca0f70be.tar.gz
tm-scripts-9fff0a99fa0031c5b70a43b5eea93681ca0f70be.tar.xz
tm-scripts-9fff0a99fa0031c5b70a43b5eea93681ca0f70be.zip
Merge branch 'master' of dnbd3:openslx-ng/tm-scripts
Diffstat (limited to 'remote/modules')
-rw-r--r--remote/modules/alsa/module.conf.opensuse5
-rw-r--r--remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf164
-rw-r--r--remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager113
-rw-r--r--remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager51
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account3
-rwxr-xr-xremote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup8
-rwxr-xr-xremote/modules/netpoint-lightdm/data/usr/local/bin/guest-session4
-rwxr-xr-xremote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup25
-rwxr-xr-xremote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py215
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.pngbin0 -> 16703 bytes
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.pngbin0 -> 72522 bytes
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css16
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade365
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop5
-rw-r--r--remote/modules/netpoint-lightdm/module.build15
-rw-r--r--remote/modules/netpoint-lightdm/module.conf3
-rw-r--r--remote/modules/netpoint-lightdm/module.conf.opensuse.13.236
-rw-r--r--remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share178
-rwxr-xr-xremote/modules/pam/data/opt/openslx/scripts/pam_script_auth2
-rwxr-xr-xremote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close4
-rw-r--r--remote/modules/sssd/module.build6
-rw-r--r--remote/modules/systemd/module.build4
-rw-r--r--remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include181
-rwxr-xr-xremote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include37
-rw-r--r--remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include6
-rw-r--r--remote/modules/vbox/module.conf4
-rw-r--r--remote/modules/vbox/module.conf.ubuntu.144
-rwxr-xr-xremote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt8
-rw-r--r--remote/modules/vmchooser2/data/opt/openslx/vmchooser/data/SHARELWS.BAT40
29 files changed, 1362 insertions, 140 deletions
diff --git a/remote/modules/alsa/module.conf.opensuse b/remote/modules/alsa/module.conf.opensuse
index 17651c29..a9ba1d50 100644
--- a/remote/modules/alsa/module.conf.opensuse
+++ b/remote/modules/alsa/module.conf.opensuse
@@ -3,3 +3,8 @@ REQUIRED_CONTENT_PACKAGES="
alsa
libasound2
"
+REQUIRED_INSTALLED_PACKAGES="
+ alsa-utils
+ alsa
+ libasound2
+"
diff --git a/remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf b/remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf
new file mode 100644
index 00000000..3e78eb50
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf
@@ -0,0 +1,164 @@
+#
+# General configuration
+#
+# start-default-seat = True to always start one seat if none are defined in the configuration
+# greeter-user = User to run greeter as
+# minimum-display-number = Minimum display number to use for X servers
+# minimum-vt = First VT to run displays on
+# lock-memory = True to prevent memory from being paged to disk
+# user-authority-in-system-dir = True if session authority should be in the system location
+# guest-account-script = Script to be run to setup guest account
+# logind-check-graphical = True to on start seats that are marked as graphical by logind
+# log-directory = Directory to log information to
+# run-directory = Directory to put running state in
+# cache-directory = Directory to cache to
+# sessions-directory = Directory to find sessions
+# remote-sessions-directory = Directory to find remote sessions
+# greeters-directory = Directory to find greeters
+#
+[LightDM]
+#start-default-seat=true
+#greeter-user=lightdm
+#minimum-display-number=0
+minimum-vt=1
+#lock-memory=true
+#user-authority-in-system-dir=false
+guest-account-script=/usr/local/bin/guest-account
+#logind-check-graphical=false
+#log-directory=/var/log/lightdm
+run-directory=/run/lightdm
+#cache-directory=/var/cache/lightdm
+#sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions
+#remote-sessions-directory=/usr/share/lightdm/remote-sessions
+
+greeters-directory=/usr/local/share/xgreeters:/usr/share/lightdm/greeters:/usr/share/xgreeters
+
+#
+# Seat defaults
+#
+# type = Seat type (xlocal, xremote)
+# pam-service = PAM service to use for login
+# pam-autologin-service = PAM service to use for autologin
+# pam-greeter-service = PAM service to use for greeters
+# xserver-command = X server command to run (can also contain arguments e.g. X -special-option)
+# xserver-layout = Layout to pass to X server
+# xserver-config = Config file to pass to X server
+# xserver-allow-tcp = True if TCP/IP connections are allowed to this X server
+# xserver-share = True if the X server is shared for both greeter and session
+# xserver-hostname = Hostname of X server (only for type=xremote)
+# xserver-display-number = Display number of X server (only for type=xremote)
+# xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true)
+# xdmcp-port = XDMCP UDP/IP port to communicate on
+# xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf)
+# unity-compositor-command = Unity compositor command to run (can also contain arguments e.g. unity-system-compositor -special-option)
+# unity-compositor-timeout = Number of seconds to wait for compositor to start
+# greeter-session = example-greeter
+# greeter-hide-users = True to hide the user list
+# greeter-allow-guest = True if the greeter should show a guest login option
+# greeter-show-manual-login = True if the greeter should offer a manual login option
+# greeter-show-remote-login = True if the greeter should offer a remote login option
+# user-session = Session to load for users
+# allow-user-switching = True if allowed to switch users
+# allow-guest = True if guest login is allowed
+# guest-session = Session to load for guests (overrides user-session)
+# session-wrapper = Wrapper script to run session with
+# greeter-wrapper = Wrapper script to run greeter with
+# guest-wrapper = Wrapper script to run guest sessions with
+# display-setup-script = Script to run when starting a greeter session (runs as root)
+# display-stopped-script = Script to run after stopping the display server (runs as root)
+# greeter-setup-script = Script to run when starting a greeter (runs as root)
+# session-setup-script = Script to run when starting a user session (runs as root)
+# session-cleanup-script = Script to run when quitting a user session (runs as root)
+# autologin-guest = True to log in as guest by default
+# autologin-user = User to log in with by default (overrides autologin-guest)
+# autologin-user-timeout = Number of seconds to wait before loading default user
+# autologin-session = Session to load for automatic login (overrides user-session)
+# autologin-in-background = True if autologin session should not be immediately activated
+# exit-on-failure = True if the daemon should exit if this seat fails
+#
+[SeatDefaults]
+#type=xlocal
+#pam-service=lightdm
+#pam-autologin-service=lightdm-autologin
+#pam-greeter-service=lightdm-greeter
+#xserver-command=X
+#xserver-layout=
+#xserver-config=
+#xserver-allow-tcp=false
+#xserver-share=true
+#xserver-hostname=
+#xserver-display-number=
+#xdmcp-manager=
+#xdmcp-port=177
+#xdmcp-key=
+#unity-compositor-command=unity-system-compositor
+#unity-compositor-timeout=60
+
+greeter-session=netpoint
+
+greeter-hide-users=false
+greeter-allow-guest=true
+#greeter-show-manual-login=false
+#greeter-show-remote-login=true
+#user-session=default
+#allow-user-switching=true
+allow-guest=true
+
+guest-session=/usr/bin/icewm
+
+# Keine Ahnung session-wrapper=/etc/lightdm/Xsession
+
+#greeter-wrapper=
+guest-wrapper=/usr/local/bin/guest-session
+#display-setup-script=
+#display-stopped-script=
+#greeter-setup-script=
+session-setup-script=/usr/local/bin/guest-setup
+session-cleanup-script=/usr/local/bin/guest-cleanup
+#autologin-guest=true
+#autologin-user=
+#autologin-user-timeout=0
+#autologin-in-background=false
+#autologin-session=UNIMPLEMENTED
+#exit-on-failure=false
+
+#
+# Seat configuration
+#
+# Each seat must start with "Seat:".
+# Uses settings from [SeatDefaults], any of these can be overriden by setting them in this section.
+#
+#[Seat:0]
+
+#
+# XDMCP Server configuration
+#
+# enabled = True if XDMCP connections should be allowed
+# port = UDP/IP port to listen for connections on
+# key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf)
+#
+# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn. Alternatively
+# it can be a word and the first 7 characters are used as the key.
+#
+[XDMCPServer]
+#enabled=false
+#port=177
+#key=
+
+#
+# VNC Server configuration
+#
+# enabled = True if VNC connections should be allowed
+# command = Command to run Xvnc server with
+# port = TCP/IP port to listen for connections on
+# width = Width of display to use
+# height = Height of display to use
+# depth = Color depth of display to use
+#
+[VNCServer]
+#enabled=false
+#command=Xvnc
+#port=5900
+#width=1024
+#height=768
+#depth=8
diff --git a/remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager b/remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager
new file mode 100644
index 00000000..9a64a124
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager
@@ -0,0 +1,113 @@
+## Path: Desktop/Display manager
+## Type: string(Xorg)
+## Default: "Xorg"
+#
+DISPLAYMANAGER_XSERVER="Xorg"
+## Path: Desktop/Display manager
+## Description: settings to generate a proper displaymanager config
+
+## Type: string(kdm,xdm,gdm,wdm,entrance,console,lightdm,sddm)
+## Default: ""
+#
+# Here you can set the default Display manager (kdm/xdm/gdm/wdm/entrance/console).
+# all changes in this file require a restart of the displaymanager
+#
+# DISPLAYMANAGER="kdm"
+DISPLAYMANAGER="lightdm"
+
+## Type: yesno
+## Default: no
+#
+# Allow remote access (XDMCP) to your display manager (xdm/kdm/gdm). Please note
+# that a modified kdm or xdm configuration, e.g. by KDE control center
+# will not be changed. For gdm, values will be updated after change.
+# XDMCP service should run only on trusted networks and you have to disable
+# firewall for interfaces, where you want to provide this service.
+#
+DISPLAYMANAGER_REMOTE_ACCESS="no"
+
+## Type: yesno
+## Default: no
+#
+# Allow remote access of the user root to your display manager. Note
+# that root can never login if DISPLAYMANAGER_SHUTDOWN is "auto" and
+# System/Security/Permissions/PERMISSION_SECURITY is "paranoid"
+#
+DISPLAYMANAGER_ROOT_LOGIN_REMOTE="no"
+
+## Type: yesno
+## Default: yes
+#
+# Let the displaymanager start a local Xserver.
+# Set to "no" for remote-access only.
+# Set to "no" on architectures without any Xserver (e.g. s390/s390x).
+#
+DISPLAYMANAGER_STARTS_XSERVER="yes"
+
+## Type: yesno
+## Default: no
+#
+# TCP port 6000 of Xserver. When set to "no" (default) Xserver is
+# started with "-nolisten tcp". Only set this to "yes" if you really
+# need to. Remote X service should run only on trusted networks and
+# you have to disable firewall for interfaces, where you want to
+# provide this service. Use ssh X11 port forwarding whenever possible.
+#
+DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN="no"
+
+## Type: string
+## Default:
+#
+# Define the user whom should get logged in without request. If string
+# is empty, display standard login dialog.
+#
+DISPLAYMANAGER_AUTOLOGIN=""
+
+## Type: yesno
+## Default: no
+#
+# Allow all users to login without password, but ask for the user, if
+# DISPLAYMANAGER_AUTOLOGIN is empty.
+#
+DISPLAYMANAGER_PASSWORD_LESS_LOGIN="no"
+
+## Type: yesno
+## Default: no
+#
+# Display a combobox for Active Directory domains.
+#
+DISPLAYMANAGER_AD_INTEGRATION="no"
+
+## Type: list(root,all,none,auto)
+## Default: auto
+#
+# Determine who will be able to shutdown or reboot the system in kdm. Valid
+# values are: "root" (only root can shutdown), "all" (everybody can shutdown),
+# "none" (nobody can shutdown from displaymanager), "auto" (follow
+# System/Security/Permissions/PERMISSION_SECURITY to decide: "easy local" is
+# equal to "all", everything else is equal to "root"). gdm respects the
+# PolicyKit settings for ConsoleKit. Shutdown configuration can be done via
+# the polkit-default-privs mechanism.
+#
+DISPLAYMANAGER_SHUTDOWN="auto"
+## Path: Desktop/Display manager
+## Description: settings to generate a proper displaymanager config
+## Config: kdm
+
+## Type: string
+## Default:
+#
+# Defines extra Server Arguments given to the kdm display manager when
+# starting a local display. Useful to override e.g. the -dpi setting.
+#
+DISPLAYMANAGER_KDM_LOCALARGS=""
+
+## Type: yesno
+## Default: yes
+#
+# Allow local access of the user root to your display manager. Note
+# that root can never login if DISPLAYMANAGER_SHUTDOWN is "auto" and
+# System/Security/Permissions/PERMISSION_SECURITY is "paranoid".
+# This settings currently works only with KDM.
+#
+DISPLAYMANAGER_ROOT_LOGIN_LOCAL="yes"
diff --git a/remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager b/remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager
new file mode 100644
index 00000000..12120320
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager
@@ -0,0 +1,51 @@
+## Type: string
+## Default:
+## Path: Desktop
+## Description: default mouse cursor theme
+#
+# Name of mouse cursor theme for X11. Possible themes can be found
+# in /usr/share/icons/
+#
+X_MOUSE_CURSOR="DMZ"
+## Path: Desktop/Window manager
+## Description:
+## Type: string(gnome,kde4,kde,lxde,xfce,twm,icewm)
+## Default: kde4
+## Config: profiles,kde,susewm
+#
+# Here you can set the default window manager (kde, fvwm, ...)
+# changes here require at least a re-login
+# DEFAULT_WM="kde-plasma"
+DEFAULT_WM="xfce"
+
+## Type: yesno
+## Default: yes
+#
+# install the SuSE extension for new users
+# (theme and additional functions)
+#
+INSTALL_DESKTOP_EXTENSIONS="yes"
+## Path: Desktop
+## Description: prepare global sycoca database for faster first startup
+## Type: list(yes,initial,no)
+## Default: initial
+#
+# building a global sycoca database, which can be used at first user
+# login in KDE
+#
+KDE_BUILD_GLOBAL_SYCOCA="initial"
+
+## Type: yesno
+## Default: yes
+#
+# To disable IPv6 support within KDE. It might solve large timeouts due to
+# broken servers which claim to have IPv6 support, but do not respond.
+#
+KDE_USE_IPV6="yes"
+
+## Type: yesno
+## Default: yes
+#
+# IDN support can get disabled to avoid DNS phishing for example.
+#
+KDE_USE_IDN="yes"
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account
new file mode 100644
index 00000000..3eed0efc
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo "demo"
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup
new file mode 100755
index 00000000..32179cec
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+IPTABLES=$(/usr/bin/which iptables)
+
+"$IPTABLES" -F
+"$IPTABLES" -P INPUT ACCEPT
+"$IPTABLES" -P FORWARD ACCEPT
+"$IPTABLES" -P OUTPUT ACCEPT
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-session b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-session
new file mode 100755
index 00000000..2c22a68c
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-session
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+exec /usr/bin/icewm &
+# exec /usr/bin/firefox
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup
new file mode 100755
index 00000000..cb6791fc
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+IPTABLES=$(/usr/bin/which iptables)
+
+# reset
+"$IPTABLES" -F INPUT
+"$IPTABLES" -F FORWARD
+"$IPTABLES" -F OUTPUT
+
+if [ "x${USER}" = "xdemo" ]; then
+ # filter out the internetz
+ "$IPTABLES" -P INPUT DROP
+ "$IPTABLES" -P FORWARD DROP
+ "$IPTABLES" -P OUTPUT DROP
+
+ # block internetz
+ "$IPTABLES" -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
+ "$IPTABLES" -A OUTPUT -d 132.230.0.0/16 -j ACCEPT
+ "$IPTABLES" -A OUTPUT -d 10.0.0.0/8 -j ACCEPT
+else
+ "$IPTABLES" -P INPUT ACCEPT
+ "$IPTABLES" -P FORWARD ACCEPT
+ "$IPTABLES" -P OUTPUT ACCEPT
+
+fi
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py b/remote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py
new file mode 100755
index 00000000..635fb03f
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py
@@ -0,0 +1,215 @@
+#!/usr/bin/python
+#
+# Author: Matt Fischer <matthew.fischer@canonical.com>
+# Copyright (C) 2012 Canonical, Ltd
+#
+# 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 3 of the License, or (at your option) any later
+# version. See http://www.gnu.org/copyleft/gpl.html the full text of the
+# license.
+#
+# This code is based on the LightDM GTK Greeter which was written by:
+# Robert Ancell <robert.ancell@canonical.com>
+
+# required packages:
+# liblightdm-gobject-1-0
+# gir1.2-lightdm-1
+# python-gobject
+# gir1.2-glib-2.0
+# gir1.2-gtk-3.0
+
+from gi.repository import GObject
+from gi.repository import GLib
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository.GdkPixbuf import InterpType
+from gi.repository import LightDM
+import sys
+
+greeter = None
+
+main = None
+split = None
+
+guest_box = None
+guest_text = None
+guest_button = None
+guest_image = None
+
+login_box = None
+login_text = None
+user_box = None
+user_text = None
+user_username = None
+pass_box = None
+pass_text = None
+pass_password = None
+
+prompt_box = None
+prompt_label = None
+prompt_entry = None
+message_label = None
+
+# This Gtk signal is called when the user hits enter after entering a
+# username/password or clicks the login button. Since we re-purposed
+# the text entry box, we have 3 possible cases to handle here.
+# 1) the user is already authenticated, if for example, they don't have
+# a password set.
+# 2) The username has been passed into LightDM and now we need to pass
+# the password
+# 3) The username has been entered, but not passed in. We pass it in
+# and start the authentication process.
+def login_cb(widget):
+ print >> sys.stderr, "login_cb"
+ if greeter.get_is_authenticated():
+ print >> sys.stderr, "user is already authenticated, starting session"
+ #start_session()
+ elif greeter.get_in_authentication():
+ print >> sys.stderr, "username was passed in already, send password to LightDM"
+ print >> sys.stderr, greeter.get_authentication_user()
+ greeter.respond(pass_password.get_text())
+ else:
+ print >> sys.stderr, "Initial entry of username, send it to LightDM"
+ greeter.authenticate(user_username.get_text())
+
+def guest_cb(widget):
+ print >> sys.stderr, "guest_cb"
+ if greeter.get_has_guest_account_hint():
+ print >> sys.stderr, "Guest accounts supported"
+ greeter.authenticate_as_guest()
+ else:
+ print >> sys.stderr, "Guest accounts not supported"
+
+
+# Gtk Signal Handlers
+handlers = {
+ "login_cb": login_cb,
+ "guest_cb": guest_cb
+}
+
+# The show_prompt callback is oddly named, but when you get this
+# callback you are supposed to send the password to LightDM next. In
+# our example, we re-purpose the prompt and ask the user for the
+# password which is then sent the next time the user hits the Login
+# button or presses enter.
+def show_prompt_cb(greeter, text, promptType):
+ print >> sys.stderr, "Prompt type: " + str(promptType)
+ print >> sys.stderr, "Text: " + str(text)
+ # if this is a password prompt, we want to hide the characters
+ if promptType == LightDM.PromptType.SECRET:
+ pass_password.set_visibility(False)
+ else:
+ pass_password.set_visibility(True)
+ greeter.respond(pass_password.get_text())
+
+
+# If LightDM sends a message back to the greeter, for example, "Login
+# failed" or "invalid password" we display it in our message box.
+def show_message_cb(text, message_type):
+ print >> sys.stderr, "In show_message"
+ print >> sys.stderr, text
+ message_label.set_text(text)
+ message_label.show()
+
+# Callback for after we send LightDM the password, this method
+# has to handle a successful login, in which case we start the session
+# or a failed login, in which case we tell the user
+def authentication_complete_cb(greeter):
+ if greeter.get_is_authenticated():
+ # For our simple example we always start Unity-2d. The LightDM
+ # API has ways to query available sessions, please see the docs.
+ if not greeter.start_session_sync("xfce"):
+ print >> sys.stderr, "Failed to start session"
+ else:
+ print >> sys.stderr, "Login failed"
+ message_label.set_text("LOGIN FAILED")
+ message_label.show()
+
+if __name__ == '__main__':
+ print >> sys.stderr, "Starting up..."
+ main_loop = GObject.MainLoop ()
+ builder = Gtk.Builder()
+ greeter = LightDM.Greeter()
+ styler = Gtk.CssProvider()
+ css = open('/usr/local/share/lightdm/netpoint.css', 'r')
+
+ css_data = css.read()
+ css.close()
+ styler.load_from_data(css_data)
+ Gtk.StyleContext.add_provider_for_screen(
+ Gdk.Screen.get_default(),
+ styler,
+ Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
+ )
+
+ # connect signal handlers to LightDM
+ greeter.connect ("authentication-complete", authentication_complete_cb)
+ greeter.connect ("show-message", show_message_cb)
+ greeter.connect ("show-prompt", show_prompt_cb)
+
+ # connect builder and widgets
+ # you probably really want to put your .UI file somewhere else
+ builder.add_from_file("/usr/local/share/lightdm/netpoint.glade")
+
+ main = builder.get_object("main")
+ split = builder.get_object("split")
+ sep = builder.get_object("sep")
+ message_label = builder.get_object("message_label")
+ print >> sys.stderr, message_label
+ guest_box = builder.get_object("guest_box")
+
+ guest_outer_box = builder.get_object("guest_outer_box")
+ guest_internal_box = builder.get_object("guest_internal_box")
+ guest_text = builder.get_object("guest_text")
+ guest_button = builder.get_object("guest_button")
+ guest_image = builder.get_object("guest_image")
+ login_image = builder.get_object("login_image")
+ #pixbuf = guest_image.get_pixbuf()
+ #pixbuf = pixbuf.scale_simple(pixbuf.get_width() * 0.7, pixbuf.get_height() * 0.7, InterpType.HYPER)
+ #guest_image.set_from_pixbuf(pixbuf)
+ #pixbuf = login_image.get_pixbuf()
+ #pixbuf = pixbuf.scale_simple(pixbuf.get_width() * 0.7, pixbuf.get_height() * 0.7, InterpType.HYPER)
+ #login_image.set_from_pixbuf(pixbuf)
+
+ login_box = builder.get_object("login_box")
+ login_text = builder.get_object("login_text")
+
+ user_box = builder.get_object("user_box")
+ user_text = builder.get_object("user_text")
+ user_username = builder.get_object("user_username")
+
+ pass_box = builder.get_object("pass_box")
+ pass_text = builder.get_object("pass_text")
+ pass_password = builder.get_object("pass_password")
+
+ # connect signals to Gtk UI
+ builder.connect_signals(handlers)
+
+ # connect to greeter
+ greeter.connect_sync()
+
+ message_label.hide()
+
+ # setup the GUI
+ main.set_decorated(True)
+ main.get_root_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.ARROW))
+ main.show()
+ guest_text.show()
+ guest_button.show()
+ login_text.show()
+ user_text.show()
+ user_username.grab_focus()
+ user_username.show()
+ pass_text.show()
+ pass_password.set_sensitive(True)
+ pass_password.set_visibility(False)
+ pass_password.show()
+
+ # fullscreen it
+ main.resize(Gdk.Screen.width(), Gdk.Screen.height())
+
+ #print >> sys.stderr, guest_box.get_height()
+ #print >> sys.stderr, guest_box.get_width()
+ main_loop.run ()
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.png b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.png
new file mode 100644
index 00000000..f3b81c32
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.png
Binary files differ
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.png b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.png
new file mode 100644
index 00000000..f6e4703d
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.png
Binary files differ
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css
new file mode 100644
index 00000000..7f1f80af
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css
@@ -0,0 +1,16 @@
+#main {
+ background-color: white;
+}
+#sep {
+ -GtkWidget-wide-separators: 1;
+ -GtkWidget-separator-width: 5;
+ border-style: solid;
+ border-width: 2px;
+ color: grey;
+}
+#title {
+ border-top-style: solid;
+ border-bottom-style: double;
+ border-width: 3px;
+ border-color: grey;
+}
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade
new file mode 100644
index 00000000..e2e47416
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade
@@ -0,0 +1,365 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+ <requires lib="gtk+" version="3.12"/>
+ <object class="GtkWindow" id="main">
+ <property name="name">main</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="window_position">center-always</property>
+ <property name="default_width">800</property>
+ <property name="default_height">600</property>
+ <property name="decorated">False</property>
+ <property name="gravity">center</property>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="name">title</property>
+ <property name="height_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Netpoint 0.1</property>
+ <attributes>
+ <attribute name="font-desc" value="Sans Bold 18"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkSeparator" id="separator1">
+ <property name="name">sep</property>
+ <property name="width_request">10</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">False</property>
+ <property name="row_homogeneous">True</property>
+ <child>
+ <object class="GtkBox" id="guest_box">
+ <property name="name">guestbox</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">False</property>
+ <property name="orientation">vertical</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkBox" id="box4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="guest_text">
+ <property name="height_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="vexpand">False</property>
+ <property name="label" translatable="yes">Uni-interner Browser</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="font-desc" value="Sans Bold 14"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">center</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">False</property>
+ <property name="label" translatable="yes">Im Gastmodus können Sie nur auf universitätsinterne Webseiten zugreifen.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">0</property>
+ <property name="max_width_chars">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="guest_button">
+ <property name="label" translatable="yes">Surfen als Gast</property>
+ <property name="use_action_appearance">False</property>
+ <property name="related_action"/>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <signal name="clicked" handler="guest_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="guest_image">
+ <property name="name">guest_image</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">10</property>
+ <property name="margin_right">10</property>
+ <property name="margin_top">10</property>
+ <property name="margin_bottom">10</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="pixbuf">ff-rz-smaller.png</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="row_homogeneous">True</property>
+ <child>
+ <object class="GtkBox" id="box3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkBox" id="box5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="login_text">
+ <property name="height_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="vexpand">False</property>
+ <property name="label" translatable="yes">Internet Browser</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="font-desc" value="Sans Bold 14"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="login_info">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="vexpand">False</property>
+ <property name="label" translatable="yes">Melden Sie sich mit Ihrem RZ-Konto, um auch im Internet zu surfen.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">0</property>
+ <property name="max_width_chars">30</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">center</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkGrid" id="grid3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="row_spacing">3</property>
+ <property name="column_spacing">3</property>
+ <child>
+ <object class="GtkEntry" id="pass_password">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="progress_pulse_step">0</property>
+ <signal name="activate" handler="login_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="pass_text">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Passwort:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="user_text">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Username:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="user_username">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <signal name="activate" handler="login_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="message_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" comments="This is a placeholder string and will be replaced with a message from PAM">[message]</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="login_image">
+ <property name="name">login_image</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">10</property>
+ <property name="margin_right">10</property>
+ <property name="margin_top">10</property>
+ <property name="margin_bottom">10</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="pixbuf">ff-google-smaller.png</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop b/remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop
new file mode 100644
index 00000000..f03cf498
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Name=Netpoint Grita
+Comment=Netpoint Grita
+Exec=/usr/local/bin/netpoint.py
+Type=Application
diff --git a/remote/modules/netpoint-lightdm/module.build b/remote/modules/netpoint-lightdm/module.build
new file mode 100644
index 00000000..0c891489
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/module.build
@@ -0,0 +1,15 @@
+fetch_source() {
+ :
+}
+
+build() {
+ COPYLIST="list_dpkg_output"
+ [ -e "$COPYLIST" ] && rm "$COPYLIST"
+
+ list_packet_files >> "$COPYLIST"
+ tarcopy "$(cat "$COPYLIST" | sort -u)" "${MODULE_BUILD_DIR}"
+}
+
+post_copy() {
+ :
+}
diff --git a/remote/modules/netpoint-lightdm/module.conf b/remote/modules/netpoint-lightdm/module.conf
new file mode 100644
index 00000000..0cd03752
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/module.conf
@@ -0,0 +1,3 @@
+REQUIRED_BINARIES=""
+REQUIRED_LIBRARIES=""
+REQUIRED_DIRECTORIES=""
diff --git a/remote/modules/netpoint-lightdm/module.conf.opensuse.13.2 b/remote/modules/netpoint-lightdm/module.conf.opensuse.13.2
new file mode 100644
index 00000000..d62f9063
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/module.conf.opensuse.13.2
@@ -0,0 +1,36 @@
+REQUIRED_INSTALLED_PACKAGES="
+ lightdm
+ lightdm-gtk-greeter
+ lightdm-gobject-devel
+ typelib-1_0-LightDM-1
+ liblightdm-gobject-1-0
+ python-gobject
+ icewm-lite
+ icewm-default
+ python-base
+ python-gobject2
+"
+
+REQUIRED_CONTENT_PACKAGES="
+ lightdm
+ lightdm-gtk-greeter
+ lightdm-gobject-devel
+ typelib-1_0-LightDM-1
+ liblightdm-gobject-1-0
+ python-gobject
+ icewm-lite
+ icewm-default
+ python-base
+ python-gobject2
+"
+
+REQUIRED_BINARIES+="
+ icewm
+ lightdm
+ python
+ lightdm-gtk-greeter
+"
+
+REQUIRED_DIRECTORIES+="
+ /usr/lib64/python2.7
+"
diff --git a/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share b/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share
index 85a3fcc0..670943f4 100644
--- a/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share
+++ b/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share
@@ -1,36 +1,41 @@
###################################################################
#
-# This script is a part of the pam_script_auth script
-# and is not stand-alone!
+# This script is a part of the pam_script_auth script
+# and is not stand-alone!
#
-# It will try to mount the common shares specified in the
-# variables of the global slx config '/opt/openslx/config'.
-# A primary and a secondary share may be given. Every share
-# require following bundle of variables:
+# It will try to mount the common shares specified in the
+# variables of the global slx config '/opt/openslx/config'.
+# An arbitrary number of shares may be given. Every share
+# requires following bundle of variables:
#
#
-# SLX_SHARE_[0-9]_AUTH_TYPE [guest|user|pam]
-# SLX_SHARE_[0-9]_AUTH_USER <username>
-# SLX_SHARE_[0-9]_AUTH_PASS <password>
-# SLX_SHARE_[0-9]_PERM [ro|rw]
-# SLX_SHARE_[0-9]_PATH <path_to_share>
+# SLX_SHARE_<id>_AUTH_TYPE [guest|user|pam]
+# SLX_SHARE_<id>_AUTH_USER <username>
+# SLX_SHARE_<id>_AUTH_PASS <password>
+# SLX_SHARE_<id>_PERM [ro|rw]
+# SLX_SHARE_<id>_PATH <path_to_share>
#
-# Example:
-# SLX_SHARE_0_PATH='//windows.server/sharename'
-# SLX_SHARE_0_AUTH_TYPE='user'
-# SLX_SHARE_0_AUTH_USER='shareuser'
-# SLX_SHARE_0_AUTH_PASS='sharepass'
-# SLX_SHARE_0_PERM='rw'
+# Note: <id> is the identifier of the share.
#
-# Note: When AUTH_TYPE is set to 'pam' or 'guest',
-# no need to specify AUTH_USER or AUTH_PASS.
+# Example:
+# SLX_SHARE_0_PATH='//windows.server/sharename'
+# SLX_SHARE_0_AUTH_TYPE='user'
+# SLX_SHARE_0_AUTH_USER='shareuser'
+# SLX_SHARE_0_AUTH_PASS='sharepass'
+# SLX_SHARE_0_PERM='rw'
#
+# Note: If AUTH_TYPE is set to 'pam' or 'guest', then
+# there is no need to specify AUTH_USER or AUTH_PASS
+# as it is obviously not needed.
#
-# usage: mount_share <auth_type> <auth_user> <auth_password> <permissions> <path> <share>
+###################################################################
+#
+# Internal helper function to mount a share
+# usage: mount_share <auth_type> <auth_user> <auth_password> <permissions> <path> <share_number>
mount_share() {
- # only want two arguments
+ # since we are (hopefully) the only one using this function, we know we need excatly 6 args
[ $# -ne 6 ] && { slxlog "pam-share-args" "Wrong number of arguments given! Need 6, $# given."; return; }
-
+
# lets check if we have our variables
local SHARE_AUTH_TYPE="$1"
local SHARE_AUTH_USER="$2"
@@ -43,17 +48,12 @@ mount_share() {
[ "x${SHARE_PERM}" != "xrw" ] && SHARE_PERM='ro'
# all good: now we can mount depending on the type
- # supports: cifs?/nfs?
+ # supports: cifs?/nfs?
if [ "${SHARE_PATH:0:2}" = "//" ]; then
# '//' prefixed, assume windows share
# prepare common mount options for either authentication type
MOUNT_OPTS="-t cifs -o nounix,uid=${USER_UID},gid=${USER_GID},forceuid,forcegid,nobrl,noacl,$SHARE_PERM"
- # flag for failure
- SIGNAL=$(mktemp)
- rm -f -- "${SIGNAL}"
- # output of command
- MOUNT_OUTPUT=$(mktemp)
# now construct the mount options depending on the type of the share.
if [ "${SHARE_AUTH_TYPE}" = "guest" ]; then
MOUNT_OPTS="${MOUNT_OPTS},guest,file_mode=0777,dir_mode=0777"
@@ -73,40 +73,68 @@ mount_share() {
slxlog "pam-share-auth" "Share${SHARE_NUM}: Auth type '${SHARE_AUTH_TYPE}' not supported."
return;
fi
+ else
+ # for now assume NFS-Share, start build options string with default options for all shares
+ MOUNT_OPTS="-t nfs -o async,nolock"
+
+ # TODO: here we will have to evaluate options of NFS-shares
- # we just mount it to the directory with the same name as the
- # last directory in the path name of the share
- # e.g. //windows.net/lehrpool -> ${COMMON_SHARE_MOUNT_POINT}/lehrpool
- local TARGET_DIR="${COMMON_SHARE_MOUNT_POINT}/$(basename ${SHARE_PATH})"
- # it exists, so let's create ${COMMON_SHARE_MOUNT_POINT}/lehrpool_${SHARE_NUM}
- [ -d "${TARGET_DIR}" ] && TARGET_DIR="${TARGET_DIR}_${SHARE_NUM}"
+ # unless specified otherwise, mount the share read-only
+ [ "x${SHARE_PERM}" != "xrw" ] && SHARE_PERM='ro'
+ MOUNT_OPTS="${MOUNT_OPTS},${SHARE_PERM}"
+ fi
- # at this point is TARGET_DIR pointing to the right directory.
- mkdir -p "${TARGET_DIR}" || \
- { slxlog "pam-share-mkdirfail" "Share${SHARE_NUM}: Could not create directory '${TARGET_DIR}'. Skipping share."; return; }
- # now try to mount it
- ( mount ${MOUNT_OPTS} "${SHARE_PATH}" "${TARGET_DIR}" > "${MOUNT_OUTPUT}" 2>&1 || touch "${SIGNAL}" ) &
- MOUNT_PID=$!
- for COUNTER in 1 1 2 4; do
- kill -0 "${MOUNT_PID}" 2>/dev/null || break
- sleep "${COUNTER}"
- done
+ ############################################################################
+ #
+ # Following code is independent of the type of share.
+ # The variable MOUNT_OPTS should have been set correctly
+ # up to this point.
+ #
+ ############################################################################
- # check for failures
- if [ -e "${SIGNAL}" ]; then
- slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' failed. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}"
- rm -f -- "${SIGNAL}"
- elif kill -9 "${MOUNT_PID}" 2>/dev/null; then
- slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' timed out. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}"
- fi
- ( sleep 2; rm -f -- "${MOUNT_OUTPUT}" ) &
+ # we just mount it to the directory with the same name as the
+ # last directory in the path name of the share
+ # e.g. //windows.net/lehrpool -> ${COMMON_SHARE_MOUNT_POINT}/lehrpool
+ local TARGET_DIR="${COMMON_SHARE_MOUNT_POINT}/$(basename ${SHARE_PATH})"
+ # it exists, so let's create ${COMMON_SHARE_MOUNT_POINT}/lehrpool_${SHARE_NUM}
+ [ -d "${TARGET_DIR}" ] && TARGET_DIR="${TARGET_DIR}_${SHARE_NUM}"
+
+ # at this point is TARGET_DIR pointing to the right directory.
+ mkdir -p "${TARGET_DIR}" || \
+ { slxlog "pam-share-mkdirfail" "Share${SHARE_NUM}: Could not create directory '${TARGET_DIR}'. Skipping share."; return; }
- # always unset credentials
- unset USER
- unset PASSWD
+ # flag for failure
+ SIGNAL=$(mktemp)
+ rm -f -- "${SIGNAL}"
+ # output of command
+ MOUNT_OUTPUT=$(mktemp)
+ # now try to mount it
+ ( mount ${MOUNT_OPTS} "${SHARE_PATH}" "${TARGET_DIR}" > "${MOUNT_OUTPUT}" 2>&1 || touch "${SIGNAL}" ) &
+ MOUNT_PID=$!
+ for COUNTER in 1 1 2 4; do
+ kill -0 "${MOUNT_PID}" 2>/dev/null || break
+ sleep "${COUNTER}"
+ done
+
+ # check for failures
+ if [ -e "${SIGNAL}" ]; then
+ slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' failed. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}"
+ rm -f -- "${SIGNAL}"
+ elif kill -9 "${MOUNT_PID}" 2>/dev/null; then
+ slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' timed out. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}"
fi
+ ( sleep 2; rm -f -- "${MOUNT_OUTPUT}" ) &
+
+ # always unset credentials
+ unset USER
+ unset PASSWD
}
+############################################################################
+#
+# MAIN LOGIC OVER ALL SHARES
+#
+############################################################################
# at this point we need the slx config to do anything
[ -e "/opt/openslx/config" ] || \
{ slxlog "pam-share-noconfig" "File '/opt/openslx/config' not found."; return; }
@@ -115,28 +143,40 @@ mount_share() {
. /opt/openslx/config || \
{ slxlog "pam-share-sourceconfig" "Could not source '/opt/openslx/config'."; return; }
+#
+#
+#
# Since many shares can be specified, we need to identify how many we have first.
-# We just go over all SLX_SHARE_* variables and check for those ending in _PATH
+# We just go over all SLX_SHARE_* variables and check for those ending in _PATH.
+# So e.g. for SLX_SHARE_0_PATH=<path> the SHARE variable would be equal to 'SLX_SHARE_0_PATH'
# For each of those, a share was specified and we will try to mount it.
-for SHARE in ${!SLX_SHARE_*}; do
- # skip if the variable doesn't end in _PATH
- [[ "$SHARE" =~ .*_PATH$ ]] || continue
- # first let's check if we have already mounted it, since we don't have to
- # do anything is it already is.
- if mount | grep -q "${SHARE}"; then
- # already mounted, just skip.
+for SHARE in $(grep -E '^SLX_SHARE_[0-9]+_PATH=.*$' /opt/openslx/config); do
+ # first let's check if we have already mounted it and skip if it is
+ # TODO: this should be good enough? stronger checks?
+ if mount | grep -q "$(echo ${SHARE} | awk -F '=' '{print $2}' | tr -d \'\")"; then
+ # already mounted, just skip
+ # this should not happen anyway, since the pam_script_auth script also exits
+ # if the temporary home user directory is already mounted...
continue
fi
- # ok so we have a path in $SHARE, let's extract the number of the share
+ # ok so we have the full declaration command in $SHARE,
+ # let's extract the number of the share.
# i.e. SLX_SHARE_0_PATH -> share number 0
- # first strip the leading SLX_SHARE_
- SHARE=${SHARE#SLX_SHARE_}
+ # first just cut everything after '='
+ SHARE_ID="$(echo $SHARE | awk -F '=' '{print $1}')"
+ # now strip the leading SLX_SHARE_
+ SHARE_ID=${SHARE_ID#SLX_SHARE_}
# now remove the trailing _PATH
- SHARE=${SHARE%_PATH}
+ SHARE_ID=${SHARE_ID%_PATH}
# now it should be a number, TODO accept more than numbers? Doesn't really matter...
# this check is mostly to be sure that the variable splitting worked as it should
- [[ "$SHARE" =~ ^[0-9]+$ ]] || continue
- eval mount_share \""\$SLX_SHARE_${SHARE}_AUTH_TYPE"\" \""\$SLX_SHARE_${SHARE}_AUTH_USER"\" \""\$SLX_SHARE_${SHARE}_AUTH_PASS"\" \""\$SLX_SHARE_${SHARE}_PERM"\" \""\$SLX_SHARE_${SHARE}_PATH"\" \""$SHARE"\"
+ # ugly cause we need to be ash compatible ...
+ if ! echo "${SHARE_ID}" | grep -q -E '^[0-9]+$'; then
+ continue
+ fi
+
+ # now do try to mount the share using the helper function defined on the top of this script
+ eval mount_share \""\$SLX_SHARE_${SHARE_ID}_AUTH_TYPE"\" \""\$SLX_SHARE_${SHARE_ID}_AUTH_USER"\" \""\$SLX_SHARE_${SHARE_ID}_AUTH_PASS"\" \""\$SLX_SHARE_${SHARE_ID}_PERM"\" \""\$SLX_SHARE_${SHARE_ID}_PATH"\" \""$SHARE_ID"\"
## unset USER and PASSWD just in case mount_share returned due to an error.
unset USER
unset PASSWD
diff --git a/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth b/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth
index 3474741d..623658d0 100755
--- a/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth
+++ b/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth
@@ -121,7 +121,7 @@ chown "${USER_UID}:${USER_GID}" "${COMMON_SHARE_MOUNT_POINT}" || \
[ ! -e "${COMMON_SHARE_MOUNT_SCRIPT}" ] && exit 0
# we do!
-COMMON_SHARE_MOUNT_POINT="${COMMON_SHARE_MOUNT_POINT}" PAM_USER="${PAM_USER}" PAM_AUTHTOK="${PAM_AUTHTOK}" USER_UID="${USER_UID}" USER_GID="${USER_GID}" /bin/bash "${COMMON_SHARE_MOUNT_SCRIPT}" || \
+COMMON_SHARE_MOUNT_POINT="${COMMON_SHARE_MOUNT_POINT}" PAM_USER="${PAM_USER}" PAM_AUTHTOK="${PAM_AUTHTOK}" USER_UID="${USER_UID}" USER_GID="${USER_GID}" /bin/ash "${COMMON_SHARE_MOUNT_SCRIPT}" || \
{ slxlog "pam-global-sourceshare" "Could not source '${COMMON_SHARE_MOUNT_SCRIPT}'."; exit 1; }
# Just try to delete the common share dir. If the mount was successful, it will not work
diff --git a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close
index 4fc2ce6a..9332e0a6 100755
--- a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close
+++ b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close
@@ -26,7 +26,7 @@ if [ -d "/opt/openslx/scripts/pam_script_ses_close.d" ]; then
done
fi
-OPENSESSION=$(loginctl show-user "$PAM_USER" | grep "Sessions=" | cut -c 10-)
+OPENSESSION=$(loginctl show-user "$PAM_USER" 2>/dev/null| grep "Sessions=" | cut -c 10-)
SESSIONCOUNT=$(echo "$OPENSESSION" | wc -w)
# When using su/sudo there is no session created, so count up by one
if [ "x$PAM_SERVICE" = "xsu" -o "x$PAM_SERVICE" = "xsudo" ]; then
@@ -55,7 +55,7 @@ if [ "$SESSIONCOUNT" -le "1" ]; then
done
# just to be sure we check if there's no other open session in the meantime
- OPEN2=$(loginctl show-user "$PAM_USER" | grep "Sessions=" | cut -c 10-)
+ OPEN2=$(loginctl show-user "$PAM_USER" 2>/dev/null | grep "Sessions=" | cut -c 10-)
if [ -z "$OPEN2" -o "x$OPENSESSION" = "x$OPEN2" ]; then
diff --git a/remote/modules/sssd/module.build b/remote/modules/sssd/module.build
index c6070455..041fd5bd 100644
--- a/remote/modules/sssd/module.build
+++ b/remote/modules/sssd/module.build
@@ -16,6 +16,12 @@ build() {
mkdir -p "${MODULE_BUILD_DIR}/etc/systemd/system"
sed "s,%PATH%,${SSSD_PATH},g" "${MODULE_DIR}/templates/sssd-systemd.service" > "${MODULE_BUILD_DIR}/etc/systemd/system/sssd.service" || perror "Could not fill sssd.service template"
+ # openSuse sssd does not start when /etc/sssd/sssd.conf is not root:root 600!
+ if [ "$SYS_DISTRIBUTION" == "opensuse" -a "$SYS_VERSION" == "13.2" ]; then
+ sed -i 's#ExecStart#ExecStartPre=/opt/openslx/bin/chmod 600 /etc/sssd/sssd.conf\nExecStart#g' \
+ "${MODULE_BUILD_DIR}/etc/systemd/system/sssd.service"
+ fi
+
return 0
}
diff --git a/remote/modules/systemd/module.build b/remote/modules/systemd/module.build
index 6e1cf4c1..67e019af 100644
--- a/remote/modules/systemd/module.build
+++ b/remote/modules/systemd/module.build
@@ -99,5 +99,9 @@ post_copy() {
if [ "x$(dpkg -s util-linux | grep Version: | cut -d' ' -f2)" == "x2.19.1-2ubuntu3" ]; then
sed -i "s/ExecStart=-\/sbin\/agetty --noclear %I 38400 linux/ExecStart=-\/sbin\/agetty %I 38400 linux/g" "${TARGET_BUILD_DIR}/usr/lib/systemd/system/getty@.service"
fi
+ # eg. systemd expects /bin/less:
+ if [ "$SYS_DISTRIBUTION" == "opensuse" -a "$SYS_VERSION" == "13.2" ]; then
+ ln -s /usr/bin/less "$TARGET_BUILD_DIR/bin/less"
+ fi
}
diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include
index d1c77f02..48610aea 100644
--- a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include
+++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/machine.include
@@ -9,39 +9,49 @@
#
# General information about OpenSLX can be found at http://openslx.org
# -----------------------------------------------------------------------------
-# Include file (machine template) for run-virt.include of the OpenSLX virtual-
-# box plugin
+# Include file (general template) for run-virt.include of the virtualbox plugin
+
cat << EOF > "${machconfig}"
<?xml version="1.0"?>
-<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux">
+<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.14-linux">
<Machine uuid="{${machineuuid}}" name="${vm_name}" OSType="${vmostype}">
+ <MediaRegistry>
+ <HardDisks>
+ <HardDisk uuid="{${diskuuid}}" location="${diskfile}" format="${imgfmt}" type="${imgtype}"/>
+ </HardDisks>
+ <FloppyImages/>
+ </MediaRegistry>
+<!--
<ExtraData>
- <ExtraDataItem name="GUI/AutoresizeGuest" value="on"/>
- <ExtraDataItem name="GUI/Fullscreen" value="on"/>
- <ExtraDataItem name="GUI/LastCloseAction" value="powerOff"/>
- <ExtraDataItem name="GUI/MiniToolBarAutoHide" value="on"/>
- <ExtraDataItem name="GUI/MiniToolBarAlignment" value="top"/>
- <ExtraDataItem name="GUI/ShowMiniToolBar" value="yes"/>
- <ExtraDataItem name="GUI/SaveMountedAtRuntime" value="yes"/>
- <ExtraDataItem name="GUI/Seamless" value="off"/>
+ <ExtraDataItem name="GUI/LastGuestSizeHint" value="1024,768"/>
+ <ExtraDataItem name="GUI/LastNormalWindowPosition" value="2393,123,1024,809"/>
</ExtraData>
+-->
<Hardware version="2">
- <CPU count="${cpu_cores}">
- <HardwareVirtEx enabled="${enablevt}" exclusive="true"/>
+ <CPU count="${cpu_cores}" hotplug="false">
+ <HardwareVirtEx enabled="${enablevt}"/>
<HardwareVirtExNestedPaging enabled="${npaging}"/>
- <HardwareVirtExVPID enabled="false"/>
+ <HardwareVirtExVPID enabled="true"/>
+ <HardwareVirtExUX enabled="true"/>
<PAE enabled="true"/>
+ <LongMode enabled="false"/>
+ <HardwareVirtExLargePages enabled="false"/>
+ <HardwareVirtForce enabled="false"/>
</CPU>
- <Memory RAMSize="${mem}"/>
+ <Memory RAMSize="${mem}" PageFusion="false"/>
+ <HID Pointing="USBTablet" Keyboard="PS2Keyboard"/>
+ <HPET enabled="false"/>
+ <Chipset type="ICH9"/>
<Boot>
<Order position="1" device="${boot}"/> <!-- HardDisk, DVD, Network, Floppy -->
<Order position="2" device="None"/>
<Order position="3" device="None"/>
<Order position="4" device="None"/>
</Boot>
- <!-- check for xml configured enable3d parameter -->
<Display VRAMSize="${vram}" monitorCount="1" accelerate3D="${enable3d}" accelerate2DVideo="${enable2d}"/>
- <!-- authType="External", "Guest", "Null" -->
+
+<!-- <VideoCapture enabled="false" screens="18446744073709551615" horzRes="1024" vertRes="768" rate="512" fps="25"/> -->
+
<RemoteDisplay enabled="false" port="${vrdpport}" authType="Null" authTimeout="5000"/>
<BIOS>
<ACPI enabled="true"/>
@@ -51,74 +61,131 @@ cat << EOF > "${machconfig}"
<TimeOffset value="0"/>
<PXEDebug enabled="false"/>
</BIOS>
- <USBController enabled="true" enabledEhci="true"/>
+<!-- ehci ussw. noch prüfen! -->
+ <USB>
+ <Controllers>
+ <Controller name="OHCI" type="OHCI"/>
+ </Controllers>
+ <DeviceFilters/>
+ </USB>
<Network>
<Adapter slot="0" enabled="true" MACAddress="${macaddr}" cable="true" speed="0" type="${vb_network_card}">
- <${network_kind}/>
+ <${network_kind}/>
</Adapter>
<Adapter slot="1" enabled="false" MACAddress="${vdemacaddr}" cable="true" speed="0" type="${vb_network_card}">
- <GenericInterface driver="VDE">
+ <GenericInterface driver="VDE">
<Properties name="network" value="/tmp/vde-switch"/>
</GenericInterface>
</Adapter>
- <Adapter slot="2" enabled="false" MACAddress="080027A3A3CC" cable="true" speed="0" type="Am79C973"/>
- <Adapter slot="3" enabled="false" MACAddress="0800277356CC" cable="true" speed="0" type="Am79C973"/>
- <Adapter slot="4" enabled="false" MACAddress="080027CEA8CC" cable="true" speed="0" type="Am79C973"/>
- <Adapter slot="5" enabled="false" MACAddress="0800271B8DCC" cable="true" speed="0" type="Am79C973"/>
- <Adapter slot="6" enabled="false" MACAddress="08002771BBCC" cable="true" speed="0" type="Am79C973"/>
- <Adapter slot="7" enabled="false" MACAddress="080027EB6ACC" cable="true" speed="0" type="Am79C973"/>
+ <Adapter slot="2" enabled="false" MACAddress="080027CB8CD8" cable="true" speed="0" type="82540EM" />
+ <Adapter slot="3" enabled="false" MACAddress="080027424034" cable="true" speed="0" type="82540EM" />
+ <Adapter slot="4" enabled="false" MACAddress="0800272CD0EA" cable="true" speed="0" type="82540EM" />
+ <Adapter slot="5" enabled="false" MACAddress="080027ED7227" cable="true" speed="0" type="82540EM" />
+ <Adapter slot="6" enabled="false" MACAddress="080027B77757" cable="true" speed="0" type="82540EM" />
+ <Adapter slot="7" enabled="false" MACAddress="0800272267D8" cable="true" speed="0" type="82540EM" />
+ <Adapter slot="8" enabled="false" MACAddress="080027573BF5" cable="true" speed="0" type="Am79C973" />
</Network>
<UART>
<Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/>
- <Port slot="1" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/>
+ <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" hostMode="Disconnected"/>
</UART>
<LPT>
- <Port slot="0" enabled="false" IOBase="0x378" IRQ="4"/>
- <Port slot="1" enabled="false" IOBase="0x378" IRQ="4"/>
+ <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/>
+ <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/>
</LPT>
+<!-- <AudioAdapter controller="${guestaudio}" driver="Pulse" enabled="true"/> -->
+ <AudioAdapter controller="${guestaudio}" driver="Alsa" enabled="${audio}"/>
+ <RTC localOrUTC="UTC"/>
<!-- should be configured depending on the chosen operating system -->
- <AudioAdapter controller="${guestaudio}" driver="Alsa" enabled="${audio}"/> <!-- OSS, Alsa, Pulse -->
- <!-- should be configured depending on the chosen operating system -->
- <SharedFolders>
+ $sharelist
+<!-- <SharedFolders>
<SharedFolder name="${sharename}" hostPath="${sharepath}" writable="true"/>
- </SharedFolders>
+ <SharedFolder name="${homesharename}" hostPath="${homesharepath}" writable="true"/>
+ <SharedFolder name="${commonsharename}" hostPath="${commonsharepath}" writable="true"/>
+ </SharedFolders> -->
+<!-- <Clipboard mode="Disabled"/> -->
<Clipboard mode="Bidirectional"/>
- <Guest memoryBalloonSize="0" statisticsUpdateInterval="0"/>
- <!--
+ <DragAndDrop mode="Disabled"/>
+ <IO>
+ <IoCache enabled="true" size="5"/>
+ <BandwidthGroups/>
+ </IO>
+ <HostPci>
+ <Devices/>
+ </HostPci>
+ <EmulatedUSB>
+ <CardReader enabled="false"/>
+ </EmulatedUSB>
+ <Guest memoryBalloonSize="0"/>
<GuestProperties>
- <GuestProperty name="/VirtualBox/HostGuest/SysprepExec" value="" timestamp="1268140071072799000" flags="TRANSIENT, RDONLYGUEST"/>
- <GuestProperty name="/VirtualBox/HostGuest/SysprepArgs" value="" timestamp="1268140071072949000" flags="TRANSIENT, RDONLYGUEST"/>
- <GuestProperty name="/VirtualBox/GuestInfo/OS/Product" value="Linux" timestamp="1268140267864540000" flags=""/>
- <GuestProperty name="/VirtualBox/GuestInfo/OS/Release" value="4.1.2" timestamp="1268140267894449000" flags=""/>
- <GuestProperty name="/VirtualBox/GuestInfo/OS/LoggedInUsersList" value="vbox" timestamp="1268164075149967000" flags=""/>
+<!-- <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxControl.exe" value="4.3.26r98988" timestamp="1430324928738330000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxCredProv.dll" value="-" timestamp="1430324928808993000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxDisp.dll" value="4.3.26r98988" timestamp="1430324928752750000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxGINA.dll" value="-" timestamp="1430324928808417000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxGuest.sys" value="4.3.26r98988" timestamp="1430324928908144000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxHook.dll" value="4.3.26r98988" timestamp="1430324928750553000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxMMR.exe" value="-" timestamp="1430324928809525000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxMMRHook.dll" value="-" timestamp="1430324928809992000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxMRXNP.dll" value="4.3.26r98988" timestamp="1430324928777003000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxMouse.sys" value="4.3.26r98988" timestamp="1430324928909743000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGL.dll" value="4.3.26r98988" timestamp="1430324928901186000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLarrayspu.dll" value="4.3.26r98988" timestamp="1430324928823307000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLcrutil.dll" value="4.3.26r98988" timestamp="1430324928837623000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLerrorspu.dll" value="4.3.26r98988" timestamp="1430324928846343000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLfeedbackspu.dll" value="4.3.26r98988" timestamp="1430324928884750000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLpackspu.dll" value="4.3.26r98988" timestamp="1430324928865359000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxOGLpassthroughspu.dll" value="4.3.26r98988" timestamp="1430324928872533000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxSF.sys" value="4.3.26r98988" timestamp="1430324928911340000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxService.exe" value="4.3.26r98988" timestamp="1430324928784233000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxTray.exe" value="4.3.26r98988" timestamp="1430324928807478000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Components/VBoxVideo.sys" value="4.3.26r98988" timestamp="1430324928913222000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/HostVerLastChecked" value="4.3.26" timestamp="1430324950071952000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/InstallDir" value="C:/Program Files/Oracle/VirtualBox_Guest_Additions" timestamp="1430324928718085000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Revision" value="98988" timestamp="1430324928712396000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/Version" value="4.3.26" timestamp="1430324928711533000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestAdd/VersionExt" value="4.3.26" timestamp="1430324928711988000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/0/MAC" value="080027CAF695" timestamp="1430324954369734000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/0/Status" value="Up" timestamp="1430324954369295000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/0/V4/Broadcast" value="255.255.255.255" timestamp="1430324954368391000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/0/V4/IP" value="10.0.2.15" timestamp="1430324954367074000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/0/V4/Netmask" value="255.255.255.0" timestamp="1430324954368890000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/Net/Count" value="1" timestamp="1430324984558751000" flags=""/>
+-->
+<!--
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/LoggedInUsers" value="1" timestamp="1430324933845802000" flags="TRANSIENT, TRANSRESET"/>
+-->
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/LoggedInUsersList" value="student" timestamp="1430324933844717000" flags="TRANSIENT, TRANSRESET"/>
+<!--
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/NoLoggedInUsers" value="false" timestamp="1430324933847595000" flags="TRANSIENT, TRANSRESET"/>
+-->
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/Product" value="Windows 7" timestamp="1430324928709396000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/Release" value="6.1.7601" timestamp="1430324928710175000" flags=""/>
+<!--
+ <GuestProperty name="/VirtualBox/GuestInfo/OS/ServicePack" value="1" timestamp="1430324928711029000" flags=""/>
+ <GuestProperty name="/VirtualBox/GuestInfo/User/student@student-PC/UsageState" value="Idle" timestamp="1430324979531817000" flags="TRANSIENT, TRANSRESET"/>
+ <GuestProperty name="/VirtualBox/HostInfo/GUI/LanguageID" value="de_DE" timestamp="1430324985485377000" flags=""/>
+-->
</GuestProperties>
- -->
</Hardware>
- <!-- should be configured depending on the chosen operating system -->
<StorageControllers>
- <StorageController name="IDE Controller" type="PIIX4" PortCount="2">
+ <StorageController name="IDE" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true">
<AttachedDevice type="HardDisk" port="0" device="0">
- <Image uuid="{${imageuuid}}"/>
+ <Image uuid="${imageuuid}"/>
</AttachedDevice> <!-- PLEASE DO NOT REMOVE THIS COMMENT (HD)!!! -->
<AttachedDevice passthrough="false" type="DVD" port="0" device="1">
<HostDrive src="${cdrom_0}"/>
+<!-- <Image uuid="{849a61c7-ad64-4594-b0c8-fbe17dc3d2a6}"/> -->
</AttachedDevice> <!-- PLEASE DO NOT REMOVE THIS COMMENT (CD)!!! -->
</StorageController>
- <StorageController name="Floppy Controller" type="I82078" PortCount="1">
- <AttachedDevice type="Floppy" port="0" device="0">
- </AttachedDevice>
- <AttachedDevice type="Floppy" port="0" device="1">
- <Image uuid="{288d5452-2dd3-44f2-bfc8-78e205a4fa87}"/>
- </AttachedDevice>
- </StorageController>
- <!--
- <StorageController name="SCSI Controller" type="LsiLogic" PortCount="16">
- <AttachedDevice type="HardDisk" port="0" device="0">
- <Image uuid="{812c82bf-bd1a-4f59-a5b6-b54ae2f6c669}"/>
- </AttachedDevice>
+ <StorageController name="Floppy Controller" type="I82078" PortCount="1">
+ <AttachedDevice type="Floppy" port="0" device="0">
+ </AttachedDevice>
+ <AttachedDevice type="Floppy" port="0" device="1">
+ <Image uuid="{288d5452-2dd3-44f2-bfc8-78e205a4fa87}"/>
+ </AttachedDevice>
</StorageController>
- -->
</StorageControllers>
</Machine>
</VirtualBox>
EOF
+
diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include
index 161fcf5a..ddf42f7c 100755
--- a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include
+++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/run-virt.include
@@ -25,7 +25,7 @@ confdir="/tmp/virt/${self}/${USER}/${VM_ID}" # dir for configs
export VBOX_USER_HOME=${confdir} # instead of $HOME/.VirtualBox
# define dirs and files which can be removed after exit, be carefull!
RMDIRS="${snapshotdir} ${confdir} /tmp/virt/.vbox-${USER}-ipc"
-rm -rf ${RMDIRS} 2>/dev/null
+# rm -rf ${RMDIRS} 2>/dev/null
machfolder="${confdir}/Machines"
# use vm_shortname for dir and config names since vm_name can be very long
machconfig="${machfolder}/${vm_shortname}/${vm_shortname}.xml"
@@ -64,6 +64,9 @@ enablevt="false" # VT: Default: not enabled
[ ${vtflag} -eq 0 ] && cpu_cores=1 # check for VT, if not available only 1 cpu supported
[ ${vtflag} -eq 1 ] && enablevt="true"
+# Setting some default variables
+shfolders="TRUE"
+
# set some base configuration depending on the guest operating system
case "${vmostype}" in
win31*)
@@ -74,6 +77,17 @@ case "${vmostype}" in
vram="16"
cpu_cores=1
enablevt="false"
+ shfolders="FALSE"
+ ;;
+ winnt*)
+ guestaudio="SB16"
+ vb_network_card="Am79C973"
+ vmostype="Windows31"
+ mem="32"
+ vram="16"
+ cpu_cores=1
+ enablevt="false"
+ shfolders="FALSE"
;;
win95*)
vmostype="Windows95"
@@ -83,6 +97,7 @@ case "${vmostype}" in
vram="32"
cpu_cores=1
enablevt="false"
+ shfolders="FALSE"
;;
win98*)
vmostype="Windows98"
@@ -91,6 +106,7 @@ case "${vmostype}" in
mem="256"
vram="64"
cpu_cores=1
+ shfolders="FALSE"
;;
winme*)
vmostype="WindowsMe"
@@ -99,6 +115,7 @@ case "${vmostype}" in
mem="256"
vram="64"
cpu_cores=1
+ shfolders="FALSE"
;;
winxp*|windowsxp*)
vmostype="WindowsXP"
@@ -165,7 +182,8 @@ machineuuid="00000000-0000-0000-0000-${macaddr}" # machine UUID, MAC addr part o
machineuuid=$(echo ${machineuuid} | tr "[A-Z]" "[a-z]") # cosmetical, since UUID in lower case
# get UUID of VBox image, if not diskless
[ ${diskless} -eq 0 ] && diskuuid=$(VBoxManage -q showvdiinfo ${diskfile} \
- | grep UUID | grep -v "Parent UUID" | awk '{print $2}')
+ | grep UUID | grep -v "Parent UUID" | awk '{print $2}' \
+ | grep -v use ) # nec. for VBox >= 4
imgtype="Immutable" # make disk immutable
snapshotuuid="34f617be-192a-46b3-a8ae-bce1029e093f" # snapshot UUID is static
@@ -335,7 +353,18 @@ writelog "\tShared Folders '${sharename}':\t${sharepath}"
################################################################################
# create Virtualbox.xml
-. ${VMCHOOSERVBOX}/virtualbox.include # create Virtualbox.xml
+
+# Shares given?
+if [ "x$shfolders" != "xFALSE" ]; then
+ sharelist="<SharedFolders>
+ <SharedFolder name=\"${homesharename}\" hostPath=\"${homesharepath}\" writable=\"true\"/>
+ <SharedFolder name=\"${commonsharename}\" hostPath=\"${commonsharepath}\" writable=\"true\"/>
+ </SharedFolders>"
+else
+ sharelist=''
+fi
+
+source ${VMCHOOSERVBOX}/virtualbox.include # create Virtualbox.xml
# remove snapshot disk when using rw images
if [ "${imgtype}" != "Immutable" ]; then
@@ -345,7 +374,7 @@ fi
# TODO: add rawdisk if requested
#"raw.vmdk" format="VMDK" type="Writethrough"/>
-. ${VMCHOOSERVBOX}/machine.include # create machine.xml
+source ${VMCHOOSERVBOX}/machine.include # create machine.xml
# remove CD-ROM if not available
if [ "${cdrom0}" != "TRUE" ]; then
diff --git a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include
index 477eebde..36c8ab80 100644
--- a/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include
+++ b/remote/modules/vbox/data/opt/openslx/vmchooser/virtualbox/virtualbox.include
@@ -1,5 +1,5 @@
# -----------------------------------------------------------------------------
-# Copyright (c) 2010..2013 - OpenSLX GmbH
+# Copyright (c) 2010..2012 - OpenSLX GmbH
#
# This program/file is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
@@ -10,9 +10,9 @@
# General information about OpenSLX can be found at http://openslx.org
# -----------------------------------------------------------------------------
# Include file (general template) for run-virt.include of the virtualbox plugin
+
cat << EOF > "${confdir}/VirtualBox.xml"
-<?xml version="1.0"?>
-<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux"> <!-- 1.12-linux -->
+<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux">
<Global>
<ExtraData>
<ExtraDataItem name="GUI/Input/AutoCapture" value="true"/>
diff --git a/remote/modules/vbox/module.conf b/remote/modules/vbox/module.conf
index 60cea223..6d79a1e7 100644
--- a/remote/modules/vbox/module.conf
+++ b/remote/modules/vbox/module.conf
@@ -1,7 +1,7 @@
REQUIRED_VBOX_VERSION_MAJOR="4.3"
-REQUIRED_VBOX_VERSION_MINOR="8"
+REQUIRED_VBOX_VERSION_MINOR="26"
REQUIRED_VBOX_VERSION="$REQUIRED_VBOX_VERSION_MAJOR.$REQUIRED_VBOX_VERSION_MINOR"
-REQUIRED_VBOX_VERSIONCODE="92456"
+REQUIRED_VBOX_VERSIONCODE="98988"
REQUIRED_DIRECTORIES="
/etc
diff --git a/remote/modules/vbox/module.conf.ubuntu.14 b/remote/modules/vbox/module.conf.ubuntu.14
index 5691459b..59ed5ca7 100644
--- a/remote/modules/vbox/module.conf.ubuntu.14
+++ b/remote/modules/vbox/module.conf.ubuntu.14
@@ -1,5 +1,5 @@
-REQUIRED_VBOX_OSCODE='Ubuntu~raring' # raring: 13.04, but also used here. Should be changed when
- # version for 14.04 appears on virtualbox.org.
+REQUIRED_VBOX_OSCODE='Ubuntu~raring' # raring: 13.04, but also used here. Has not be changed when
+ # version for 14.04 appeared on virtualbox.org.
REQUIRED_VBOXBASEURL="http://download.virtualbox.org/virtualbox/${REQUIRED_VBOX_VERSION}/virtualbox-${REQUIRED_VBOX_VERSION_MAJOR}_${REQUIRED_VBOX_VERSION}-${REQUIRED_VBOX_VERSIONCODE}~${REQUIRED_VBOX_OSCODE}_${AMD64_I386}.deb"
REQUIRED_VBOXEXTURL="http://download.virtualbox.org/virtualbox/${REQUIRED_VBOX_VERSION}/Oracle_VM_VirtualBox_Extension_Pack-${REQUIRED_VBOX_VERSION}-${REQUIRED_VBOX_VERSIONCODE}.vbox-extpack"
diff --git a/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt
index d41bf564..07f40e0f 100755
--- a/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt
+++ b/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt
@@ -531,6 +531,14 @@ cp "$xmlfile" "$VMCHOOSER_DIR/fd-loop/config.xml"
xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' | grep -o -E '[0-9]+x[0-9]+' | head -n 1 > "$VMCHOOSER_DIR/fd-loop/hostres.txt"
# Add our magic openslx binary that sets the correct guest resolution
cp "$VMCHOOSER_DIR/data/openslx.exe" "$VMCHOOSER_DIR/fd-loop/"
+cp "$VMCHOOSER_DIR/data/SHARELWS.BAT" "$VMCHOOSER_DIR/fd-loop/"
+rm "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
+for SHARE in $(grep -o -E '^SLX_SHARE_.*_PATH' /opt/openslx/config); do
+ eval "echo -n \$${SHARE} | /opt/openslx/bin/tr '/' '\' " >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
+ eval echo -n " \$${SHARE%PATH}AUTH_PASS /user:\$${SHARE%PATH}AUTH_USER" >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
+ echo -e '\r\n' >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG"
+done
+
# Try to use dnbd3 to access the image
unset vm_diskfile
diff --git a/remote/modules/vmchooser2/data/opt/openslx/vmchooser/data/SHARELWS.BAT b/remote/modules/vmchooser2/data/opt/openslx/vmchooser/data/SHARELWS.BAT
new file mode 100644
index 00000000..01838705
--- /dev/null
+++ b/remote/modules/vmchooser2/data/opt/openslx/vmchooser/data/SHARELWS.BAT
@@ -0,0 +1,40 @@
+@echo off
+
+setlocal EnableDelayedExpansion
+
+rem Kein sleep oder timeout bis Win7, also einen
+rem haesslichen Hack (Zeitverz. ca. 5 sec)
+rem Sinn der Verzoegerung: Mitunter (1/3) wird
+rem sonst das erste Netzlaufwerk nicht eingehaengt
+
+@ping -n 5 localhost> nul
+
+rem Konfigdatei auslesen und erstmal in Feld:
+set n=0
+for /f %%i in (b:\sharelw.cfg) do (
+ set array[!n!]=%%i
+ set /A n+=1
+)
+
+rem Aufruf für net use erzeugen:
+set "i=0"
+for %%b in (K L M N O P Q R S T U V W X Y Z) do (
+ if defined array[!i!] (
+ call set aufruf[!i!]=%%b: %%array[!i!]%%
+ set /A "i+=1"
+ ) else (
+ goto :Schleifenende
+ )
+)
+:Schleifenende
+
+rem net use-Aufrufe
+set "i=0"
+:Ausdrucken
+if defined aufruf[!i!] (
+ call net use %%aufruf[!i!]%%
+ set /a "i+=1"
+ GOTO :Ausdrucken
+)
+
+exit /B