From b02f9f941168aa5022a927e43fe20678d6b3233b Mon Sep 17 00:00:00 2001 From: Sergey Zhemoitel Date: Wed, 21 Sep 2016 01:34:16 +0300 Subject: [PATCH] Imported from SRPM --- .abf.yml | 2 + ica-autostart.desktop | 9 ++ italc-launcher | 274 ++++++++++++++++++++++++++++++++++++++++++ italc-start_ica | 145 ++++++++++++++++++++++ italc.sysconfig | 56 +++++++++ italc3.spec | 203 +++++++++++++++++++++++++++++++ 6 files changed, 689 insertions(+) create mode 100644 .abf.yml create mode 100644 ica-autostart.desktop create mode 100644 italc-launcher create mode 100644 italc-start_ica create mode 100644 italc.sysconfig create mode 100644 italc3.spec diff --git a/.abf.yml b/.abf.yml new file mode 100644 index 0000000..a766f49 --- /dev/null +++ b/.abf.yml @@ -0,0 +1,2 @@ +sources: + italc-3.0.0.tar.gz: 936fd8bdaf30c34b6ed5e63ab11aa8775de39b27 diff --git a/ica-autostart.desktop b/ica-autostart.desktop new file mode 100644 index 0000000..6b62d86 --- /dev/null +++ b/ica-autostart.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Exec=ica-start +Terminal=false +Name=ICA iTALC application + +X-KDE-StartupNotify=false +X-KDE-autostart-after=panel +X-GNOME-Autostart-enabled=true diff --git a/italc-launcher b/italc-launcher new file mode 100644 index 0000000..4cb9ef6 --- /dev/null +++ b/italc-launcher @@ -0,0 +1,274 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# coding=UTF-8 + +# iTalc master launcher using avahi +# Written by Stéphane Graber + +from xml.dom import minidom +import subprocess, re, socket, os, sys +# The md5 module is deprecated in Python 2.5 +try: + from hashlib import md5 +except ImportError: + from md5 import md5 + +def getValueFromConfigFile(filename,key,default): + file=open(filename) + for line in file: + if line.startswith(key): + try: + param=line.split("=")[1] + param=param.strip() + if not param.isdigit(): + param=param.strip('"') + except: + param=default + file.close() + return param + +def getLocalIPs(): + "Scan ifconfig output for local IPV4 addresses" + # Saving current LANG + SYSTEM_LANG=os.environ["LANG"] + # Apparently ifconfig has localizations according to the following line, + # but with LANG=es_ES.UTF-8 the output looks the same as LANG=C + os.environ["LANG"]="C" # Set environ LANG to C + ip=[] + output=subprocess.Popen("/sbin/ifconfig",stdout=subprocess.PIPE) + output.wait() + for line in output.stdout.readlines(): + line=line.strip() + if line.startswith("inet addr"): + ip.append(line.split(" ")[1].split(":")[1]) + # Restoring LANG + os.environ["LANG"]=SYSTEM_LANG + return ip + +def getHostPort(): + isdhost="127.0.0.1" + isdport=getValueFromConfigFile(configfile,"ICA_ISDPORT","5800") + if "LTSP_CLIENT" in os.environ: + xprop=subprocess.Popen(["/usr/bin/xprop","-root","ica_ltsp"],stdout=subprocess.PIPE) + xprop.wait() + if xprop.stdout.read().split(" ")[2].strip() == "1": + isdhost=os.environ["LTSP_CLIENT"] + else: + isdport=str(int(os.environ["LTSP_CLIENT"].split(".")[3])+11000) + return [isdhost,isdport] + +def getSettings(): + "Find settings file and read paths" + global section_keypathsprivate + global section_keypathspublic + global section_paths + global path_adminprivatekey + global path_adminpublickey + global path_globalconfig + global path_supporterprivatekey + global path_supporterpublickey + global path_teacherprivatekey + global path_teacherpublickey + global settingsfile + file=open(settingsfile) + mode="" + for line in file: + line = line.strip() + if line == section_keypathsprivate: + mode=section_keypathsprivate + elif line == section_keypathspublic: + mode=section_keypathspublic + elif line == section_paths: + mode=section_paths + else: + if mode==section_keypathsprivate: + if line.startswith("admin"): + try: + path_adminprivatekey=line.split("=")[1] + path_adminprivatekey=path_adminprivatekey.strip() + except: + path_adminprivatekey="/etc/italc/keys/private/admin/key" + elif line.startswith("teacher"): + try: + path_teacherprivatekey=line.split("=")[1] + path_teacherprivatekey=path_teacherprivatekey.strip() + except: + path_teacherprivatekey="/etc/italc/keys/private/teacher/key" + elif line.startswith("supporter"): + try: + path_supporterprivatekey=line.split("=")[1] + path_supporterprivatekey=path_supporterprivatekey.strip() + except: + path_supporterprivatekey="/etc/italc/keys/private/supporter/key" + elif mode==section_keypathspublic: + if line.startswith("admin"): + try: + path_adminpublickey=line.split("=")[1] + path_adminpublickey=path_adminpublickey.strip() + except: + path_adminpublickey="/etc/italc/keys/public/admin/key" + elif line.startswith("teacher"): + try: + path_teacherpublickey=line.split("=")[1] + path_teacherpublickey=path_teacherpublickey.strip() + except: + path_teacherpublickey="/etc/italc/keys/public/teacher/key" + elif line.startswith("supporter"): + try: + path_supporterpublickey=line.split("=")[1] + path_supporterpublickey=path_supporterpublickey.strip() + except: + path_supporterpublickey="/etc/italc/keys/public/supporter/key" + elif mode==section_paths: + if line.startswith("globalconfig"): + try: + path_globalconfig=line.split("=")[1] + path_globalconfig=path_globalconfig.strip() + except: + path_globalconfig="/etc/italc/globalconfig.xml" + file.close() + return + +# openSUSE uses /etc/sysconfig/ica to define the ports +configfile="/etc/sysconfig/ica" +# Empty config file to use if it doesn't already exist +skeleton=""" + + + + +""" + +settingsfile="/etc/settings/iTALC Solutions/iTALC.conf" +section_keypathsprivate="[keypathsprivate]" +section_keypathspublic="[keypathspublic]" +section_paths="[paths]" +path_teacherpublickey="/etc/italc/keys/public/teacher/key" +path_adminpublickey="/etc/italc/keys/public/admin/key" +path_supporterpublickey="/etc/italc/keys/public/supporter/key" +path_teacherprivatekey="/etc/italc/keys/private/teacher/key" +path_adminprivatekey="/etc/italc/keys/private/admin/key" +path_supporterprivatekey="/etc/italc/keys/private/supporter/key" +path_globalconfig="/etc/italc/globalconfig.xml" + +try: + getSettings() +except: + print "Settings not found in "+settingsfile+", using defaults." + +try: + confdir=os.environ.get("HOME")+"/.italc/" +except: + sys.exit('Invalid or undefined env variable \"HOME\"') + +try: + file=open(path_teacherpublickey,"r") + md5_1=md5(file.read()).hexdigest() + file.close() + + file=open(path_adminpublickey,"r") + md5_2=md5(file.read()).hexdigest() + file.close() + + file=open(path_supporterpublickey,"r") + md5_3=md5(file.read()).hexdigest() + file.close() +except: + sys.exit('iTalc keys not correctly installed ('+path_teacherpublickey+')('+path_adminpublickey+')('+path_supporterpublickey) + +if not os.access(path_teacherprivatekey,os.R_OK): + md5_1="0" + if not os.access(path_adminprivatekey,os.R_OK): + md5_2="0" + if not os.access(path_supporterprivatekey,os.R_OK): + md5_3="0" + access="none" + else: + access="supporter" + else: + access="admin" +else: + access="teacher" + +try: + xmldoc=minidom.parse(confdir+"globalconfig.xml") + body=xmldoc.getElementsByTagName("globalclientconfig")[0].getElementsByTagName("body")[0] + classrooms=body.getElementsByTagName("classroom") +except: + mkdir=subprocess.Popen(["/bin/mkdir","-p",confdir]) + mkdir.wait() + try: + config=open(confdir+"globalconfig.xml","w+") + try: + file=open(path_globalconfig) + for line in file: + config.write(line) + except: + print("Globalconfig in "+path_globalconfig+" not found, using skeleton.") + config.write(skeleton) + config.close() + except: + sys.exit('Unable to write to config file') + xmldoc=minidom.parse(confdir+"globalconfig.xml") + body=xmldoc.getElementsByTagName("globalclientconfig")[0].getElementsByTagName("body")[0] + classrooms=body.getElementsByTagName("classroom") + +# Scan for an existing classroom and delete it +for classroom in classrooms: + if classroom.getAttribute("name") == "Auto-detected computers": + body.removeChild(classroom) + +# Create the Auto-detected computers classroom +avahi=xmldoc.createElement("classroom") +avahi.setAttribute("name","Auto-detected computers") +avahi.setAttribute("forcevisible","yes") +body.appendChild(avahi) + +# Add computers to the classroom +client_list=subprocess.Popen(["/usr/bin/avahi-browse","-trp","_italc._tcp"],stdout=subprocess.PIPE) +client_list.wait() +count=0 + +local_addr=getLocalIPs() +isdhost,isdport=getHostPort() +if isdhost not in local_addr: + local_addr=[isdhost] + +for line in client_list.stdout.readlines(): + if line.startswith("="): + try: + param=line.split(";") + comment=re.findall('"(.*)" "(.*)" "(.*)" "(.*)"\n',param[9])[0] + if (comment[1] == md5_1 or comment[2] == md5_2 or comment[3] == md5_3) and (param[7] not in local_addr or str(int(isdport)+100) != param[8]): + # Make sure we have a running VNC server + connection=socket.socket(socket.AF_INET,socket.SOCK_STREAM) + connection.connect((param[7],int(param[8]))) + connection.close() + + # Get MAC address + mac=subprocess.Popen(("/sbin/arp", param[7], "-n", "-a"),stdout=subprocess.PIPE) + mac.wait() + mac=mac.stdout.read().strip().split(" ")[3] + if not re.match("^..:..:..:..:..:..$",mac): + mac="" + + # Generate the new node + client=xmldoc.createElement("client") + client.setAttribute("id",str(count)) + client.setAttribute("localip",param[7]+":"+param[8]) + client.setAttribute("mac",mac) + client.setAttribute("name",comment[0]) + client.setAttribute("type","0") + avahi.appendChild(client) + count+=1 + except: + print 'Ignoring a client, invalid data received' + +try: + file=open(confdir+"globalconfig.xml","w") + xmldoc.writexml(file) + file.close() +except: + exit('Failed to save updated config') +#print "Starting italc as "+access+" ("+isdhost+":"+isdport+")" +subprocess.Popen(["/usr/bin/italc","-isdport",isdport,"-isdhost",isdhost,"-role",access]) diff --git a/italc-start_ica b/italc-start_ica new file mode 100644 index 0000000..2fc03ab --- /dev/null +++ b/italc-start_ica @@ -0,0 +1,145 @@ +#!/bin/sh +# +# a perl script was written by Patrick Winnertz 11.12.05 +# and modified by Giovanni Gimelli - Osservatorio Tecnologico Italy +# it has been re-written by Valerio Pachera (www.linuxludus.it) as +# simple bash script +# licensed under GPL2+ +# version 2.0 (21/12/2007) + +# SCOPE +# The script scope is to start a ica session on different port for +# each thin client and on default ports for diskless workstation +# and the server. +# The port number used for the thinclient will be the last part of the +# thinclient IP + +# The initial script was modified by Lars Vogdt for openSUSE-Education +# at Fr 6. Jun 2008. + +ICA_LTSP=$(xprop -root ica_ltsp | sed 's/^.* //' 2> /dev/null) +if [ "$ICA_LTSP" = "1" ] +then + echo "ICA already running on the thin client." + exit 0 +fi + +PATH=/usr/bin:/bin +ICA_CONFIG="/etc/sysconfig/ica" +ITALC_CONFIG="/etc/settings/iTALC Solutions/iTALC.conf" +ICA_BIN="/usr/bin/ica" + +# Check for existence of needed config file and read it +if [ ! -r $ICA_CONFIG ]; then + echo "$ICA_CONFIG does not exist" >&2 + exit 6 +fi + +# set default values +ICA_IVSPORT="5900" +ICA_ISDPORT="5800" +ICA_USESHM="no" +ICA_USEONETYLE="no" + +# Read config +. $ICA_CONFIG + +ICA_OPTIONS="" + +if [ "$ICA_USESHM" != "yes" ]; then + ICA_OPTIONS="$ICA_OPTIONS -noshm" +fi +if [ "$ICA_USEONETYLE" != "yes" ]; then + ICA_OPTIONS="$ICA_OPTIONS -onetile" +fi +if [ -n "$ICA_PARAMS" ]; then + ICA_OPTIONS="$ICA_OPTIONS $ICA_PARAMS" +fi +if [ -n "$DISPLAY" ]; then + DISPLAYOPT="-display $DISPLAY" +fi + +function parse_ini () { + IFS=$'\n' && ini=( $(<"$1") ) # convert to line-array + ini=( ${ini[*]//;*/} ) # remove comments ‘;’ + ini=( ${ini[*]//\#*/} ) # remove comments ‘#’ + ini=( ${ini[*]/\ =\ /=} ) # remove anything with a space around ‘ = ‘ + ini=( ${ini[*]/#[/\}$'\n'cfg_section_} ) # set section prefix + ini=( ${ini[*]/%]/ \(} ) # convert text2function (1) + ini=( ${ini[*]/=/=\( } ) # convert item to array + ini=( ${ini[*]/%/ \)} ) # close array parenthesis + ini=( ${ini[*]/%\( \)/\(\) \{} ) # convert text2function (2) + ini=( ${ini[*]/%\} \)/\}} ) # remove extra parenthesis + ini=( ${ini[*]/#\ */} ) # remove blank lines + ini=( ${ini[*]/#\ */} ) # remove blank lines with tabs + ini[0]='' # remove first element + ini[${#ini[*]} + 1]='}' # add the last brace +# printf "%s\n" ${ini[*]} + eval "$(echo "${ini[*]}")" # eval the result +} + +function get_md5sums () { + md5sum $1 | awk '" " { print $1}' +} + +function avahi_announce () { + IVSPORT=$1 + MD5SUMS="" + HOST_NAME=$2 + parse_ini "$ITALC_CONFIG" + cfg_section_keypathspublic + MD5SUM_1="$(get_md5sums "$admin")" + MD5SUM_2="$(get_md5sums "$supporter")" + MD5SUM_3="$(get_md5sums "$teacher")" + avahi-publish-service "italc $HOST_NAME" _italc._tcp $IVSPORT $MD5SUM_1 $MD5SUM_2 $MD5SUM_3 "$HOST_NAME" >/dev/null & +} + +function avahi_stop () { + kill $(ps ux | grep avahi-publish-service | grep italc | grep $IVSPORT | grep $HOSTNAME | awk '" " { print $2 }') +} + + +if [ -x "$ICA_BIN" ]; then + if [ -f /etc/ltsp_chroot ]; then + IP=$(ip addr show | grep " inet " | grep -v 127.0.0 | head -n1 | awk '{print \$2}' | sed "s/\/.*//") + HOST_NAME=$(hostname) + fi + # ends any previous ica session of the user that is running the script + # FIXME: killall --user $(whoami) ica 2>/dev/null; <<- better? + RUNNING_ICA=$(ps ux | awk '" " { print $2" "$11 }' | grep -E "^[0-9].*ica" | awk '" " { print $1 }') + if [ -n "$RUNNING_ICA" ]; then + for process in $RUNNING_ICA; do + kill $process + done + sleep 1 + fi + + if [ x"$ICA_ENABLE" = x"yes" ]; then + # $LTSP_CLIENT is empty if the script is called on the server or a + # Diskless Workstation. + # That's true only if the script is executed after logged in the + # desktop manager. + if [ "$LTSP_CLIENT" ]; then + PORT=$(echo $LTSP_CLIENT | awk -F . '{print $4}') + ICA_IVSPORT=$((10000 + $PORT)) + ICA_ISDPORT=$((11000 + $PORT)) + + IP="$LTSP_CLIENT" + HOST_NAME="$IP ($USER)" + else + HOST_NAME=$(hostname) + fi + #start ICA service + $ICA_BIN $ICA_OPTIONS -ivsport $ICA_IVSPORT -isdport $ICA_ISDPORT $DISPLAYOPT & + + if [ -x /usr/bin/avahi-publish-service ]; then + if [ -f /var/run/avahi-daemon/pid ]; then + avahi_stop + avahi_announce $ICA_IVSPORT $HOST_NAME + fi + fi + fi +else + echo "$ICA_BIN doesn't exist or is not executable" >&2 + exit 1 +fi diff --git a/italc.sysconfig b/italc.sysconfig new file mode 100644 index 0000000..63349f1 --- /dev/null +++ b/italc.sysconfig @@ -0,0 +1,56 @@ +## Path: Applications/iTALC +## Description: ICA remote monitoring startup parameters + +## Type: yesno +## Default: yes +# +# Enable or disable ICA, the iTALC application running on +# a client to allow connections from iTALC +# +ICA_ENABLE="yes" + +## Type: integer +## Default: 5900 +# +# Set port at which the iTALC-VNC-server should listen. +# Please remember to adapt the firewall settings, too. +# Default: 5900 +# +ICA_IVSPORT="5900" + +## Type: integer +## Default: 0 +# +# Set port at which ICA should listen. +# Please remember to adapt the firewall settings, too. +# Default: 5800 +# +ICA_ISDPORT="5800" + +## Type: yesno +## Default: no +# +# Use the MIT-SHM extension for the polling. +# Remote displays can be polled this way: be careful this +# can use large amounts of network bandwidth. +# This is of use if the local machine has a limited number of +# shm segments and -onetile is not sufficient. +# +ICA_USESHM="no" + +## Type: yesno +## Default: no +# +# Use the new copy_tiles() framebuffer mechanism. +# Disabling limits shm segments used to 3. +# +ICA_USEONETYLE="no" + +## Type: string +## Default: "" +# +# Additional parameters for ICA like "--quiet" +# Please refer to the iTALC wiki for details +# +ICA_PARAMS="" + diff --git a/italc3.spec b/italc3.spec new file mode 100644 index 0000000..379ee23 --- /dev/null +++ b/italc3.spec @@ -0,0 +1,203 @@ +%define debug_package %{nil} +%define libname %mklibname italc +%define italcgrp italc +%define oname italc + +Name: italc3 +Summary: Intelligent Teaching And Learning with Computers - software for teachers +Version: 3.0.0 +Release: 1 +License: GPLv2+ +Group: Networking/Remote access +Url: http://italc.sourceforge.net/ +Source0: %{oname}-%{version}.tar.gz +Source2: italc-start_ica +Source3: italc.sysconfig +Source5: ica-autostart.desktop +Source6: italc-launcher +BuildRequires: cmake +BuildRequires: qt5-linguist +BuildRequires: pam-devel +BuildRequires: pkgconfig(libopenjpeg1) +BuildRequires: pkgconfig(Qt5Core) +BuildRequires: pkgconfig(Qt5Gui) +BuildRequires: pkgconfig(Qt5Widgets) +BuildRequires: pkgconfig(Qt5Xml) +BuildRequires: pkgconfig(Qt5Network) +BuildRequires: pkgconfig(libopenjpeg1) +BuildRequires: pkgconfig(openssl) +BuildRequires: pkgconfig(xtst) +BuildRequires: pkgconfig(zlib) + +%description +iTALC is a use- and powerful didactical tool for teachers. It lets you view +and control other computers in your network in several ways. It supports Linux +and Windows 2000/XP/Vista. + +Features: + +* see what's going on in computer-labs by using overview mode and + make snapshots +* remote-control computers to support and help other people +* show a demo (either in fullscreen or in a window) - the teacher's screen + is shown on all student's computers in realtime +* lock workstations for moving undivided attention to teacher +* send text-messages to students +* powering on/off and rebooting computers per remote +* remote logon and logoff and remote execution of arbitrary commands/scripts +* home-schooling - iTALC's network-technology is not restricted to a subnet + and therefore students at home can join lessons via VPN-connections just + by installing iTALC client + +Furthermore iTALC is optimized for usage on multi-core systems (by making +heavy use of threads). No matter how many cores you have, iTALC can make use +of all of them. + +%package client +Summary: Software for iTALC-clients +Group: Networking/Remote access + +%description client +This package contains the software, needed by iTALC-clients. + +See /usr/share/italc/doc/INSTALL for details on how to install and setup iTALC +in your network. + +%package master +Summary: iTALC master software +Group: Networking/Remote access +Requires: %{libname} = %{EVRD} +Requires: %{name}-client = %{EVRD} +Requires(post): %{name}-client = %{EVRD} + +%description master +This package contains the actual master-software for accessing clients. + +See /usr/share/italc/doc/INSTALL for details on how to install and setup iTALC +in your network. + +%package -n %{libname} +Summary: Library used by ITALC +Group: Networking/Remote access + +%description -n %{libname} +iTALC is a use- and powerful didactical tool for teachers. It lets you +view and control other computers in your network in several ways. It +supports Linux and Windows 2000/XP/Vista and it even can be used +transparently in mixed environments! + +This is a library used by %{name}-master and %{name}-client. + +%pre client +%{_sbindir}/groupadd -r -f %{italcgrp} 2>/dev/null ||: + +%post client +if + getent group %{italcgrp} >/dev/null +then + : OK group %{italcgrp} already present +else + groupadd -r %{italcgrp} 2>/dev/null || : +fi + + +%post master +if + getent group %{italcgrp} >/dev/null +then + : OK group %{italcgrp} already present +else + groupadd -r %{italcgrp} 2>/dev/null || : +fi + +# dont run scripts on update +if [ ${1:-0} -lt 2 ]; then + for role in admin supporter teacher; do + if [ ! -f "%{_sysconfdir}/italc/keys/private/$role/key" ]; then + /usr/bin/ica -role $role -createkeypair 1>/dev/null + chgrp %{italcgrp} "%{_sysconfdir}/italc/keys/private/$role/key" + chmod 0440 "%{_sysconfdir}/italc/keys/private/$role/key" + fi + done +fi + + +%prep +%setup -qn %{oname}-%{version} + +%build +%cmake_qt5 -DWANT_QT5=ON +%make + +%install +mkdir -p %{buildroot}%{_defaultdocdir}/%{name} + +%makeinstall_std -C build +# create the directories containing the auth-keys +mkdir -p %{buildroot}%{_sysconfdir}/italc/keys/{private,public}/{teacher,admin,supporter,other} +# create pseudo key files so RPM can own them (ghost files) +for role in admin supporter teacher; do + touch %{buildroot}%{_sysconfdir}/italc/keys/{private,public}/$role/key +done +# create the initial config +mkdir -p "%{buildroot}/%{_sysconfdir}/settings/iTALC Solutions" +cat > "%{buildroot}/%{_sysconfdir}/settings/iTALC Solutions/iTALC.conf" << EOF +[keypathsprivate] +admin=%{_sysconfdir}/italc/keys/private/admin/key +supporter=%{_sysconfdir}/italc/keys/private/supporter/key +teacher=%{_sysconfdir}/italc/keys/private/teacher/key + +[keypathspublic] +admin=%{_sysconfdir}/italc/keys/public/admin/key +supporter=%{_sysconfdir}/italc/keys/public/supporter/key +teacher=%{_sysconfdir}/italc/keys/public/teacher/key +EOF +# install start script for ica client +install -D -m755 %{SOURCE2} %{buildroot}/%{_bindir}/start-ica +install -D -m644 %{SOURCE5} %{buildroot}/%{_sysconfdir}/xdg/autostart/ica-autostart.desktop +install -D -m755 %{SOURCE6} %{buildroot}/%{_bindir}/italc-launcher +# icon for the desktop file +install -Dm644 ima/data/italc.png %{buildroot}/%{_datadir}/pixmaps/italc.png +# +# Distribution specific +# +# configuration for ica + +install -D -m644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/sysconfig/ica + +%files client +%{_bindir}/ica +%{_bindir}/start-ica +%{_bindir}/italc_auth_helper +%config %{_sysconfdir}/xdg/autostart/ica-autostart.desktop +%config(noreplace) %{_sysconfdir}/sysconfig/ica +%dir %{_sysconfdir}/settings +%dir "%{_sysconfdir}/settings/iTALC Solutions" +%config(missingok,noreplace) "%{_sysconfdir}/settings/iTALC Solutions/iTALC.conf" +%dir %{_sysconfdir}/italc/keys/private +%defattr(0440,root,%{italcgrp},0750) +%dir %{_sysconfdir}/italc/keys/private/teacher +%dir %{_sysconfdir}/italc/keys/private/admin +%dir %{_sysconfdir}/italc/keys/private/supporter +%dir %{_sysconfdir}/italc/keys/private/other +%ghost %attr(0440,root,%{italcgrp}) %config(noreplace) %{_sysconfdir}/italc/keys/private/teacher/key +%ghost %attr(0440,root,%{italcgrp}) %config(noreplace) %{_sysconfdir}/italc/keys/private/admin/key +%ghost %attr(0440,root,%{italcgrp}) %config(noreplace) %{_sysconfdir}/italc/keys/private/supporter/key +%ghost %attr(0444,root,%{italcgrp}) %config(noreplace) %{_sysconfdir}/italc/keys/public/teacher/key +%ghost %attr(0444,root,%{italcgrp}) %config(noreplace) %{_sysconfdir}/italc/keys/public/admin/key +%ghost %attr(0444,root,%{italcgrp}) %config(noreplace) %{_sysconfdir}/italc/keys/public/supporter/key + + +%files -n %{libname} +%doc AUTHORS COPYING ChangeLog INSTALL README TODO +%{_libdir}/* + + +%files master +%doc AUTHORS COPYING ChangeLog INSTALL README TODO +%{_bindir}/italc +%{_bindir}/italc-launcher +%{_bindir}/imc +%{_datadir}/pixmaps/* +%{_datadir}/italc/JavaViewer/VncViewer.jar +%{_datadir}/italc/JavaViewer/index.vnc