summaryrefslogtreecommitdiff
path: root/bin/itzks-standardskriver
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2013-11-13 14:09:07 +0100
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2013-11-13 14:09:07 +0100
commit27fce5b9b2ce8dc559ea381efda4199f39fb6c0d (patch)
tree448c1633519c0d588a50a89ce554a952b80eb62f /bin/itzks-standardskriver
parent476321547207d88e47bc4c155bf0e4aa8c7cf368 (diff)
downloaditzks-systems-27fce5b9b2ce8dc559ea381efda4199f39fb6c0d.tar.gz
itzks-systems-27fce5b9b2ce8dc559ea381efda4199f39fb6c0d.tar.bz2
itzks-systems-27fce5b9b2ce8dc559ea381efda4199f39fb6c0d.zip
rename itzks-standardskriver script to standardskriver
Diffstat (limited to 'bin/itzks-standardskriver')
-rwxr-xr-xbin/itzks-standardskriver150
1 files changed, 0 insertions, 150 deletions
diff --git a/bin/itzks-standardskriver b/bin/itzks-standardskriver
deleted file mode 100755
index 6b3aa35..0000000
--- a/bin/itzks-standardskriver
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (C) 2013, John Sigurd Skogtvedt <jss@linuxavdelingen.no>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-# /etc/xdg/autostart/standardskriver.desktop eksempel:
-# [Desktop Entry]
-# Type=Application
-# Exec=standardskriver
-# Name=standardskriver
-# StartupNotify=false
-
-CFG_FILE = '/etc/standardskriver.cfg'
-CFG_FILE_EXAMPLE = '''[settings]
-order = machine groups
-delete lpoptions = yes
-
-# MAC address or IP = printer
-# hostname = printer
-# hostname.domain = printer
-# LTSP client IP = printer
-# (globbing works)
-[machine]
-00:01:02:03:04:05 = printer01
-172.16.34.64 = printer02
-hostname = printer01
-hostname.domain = printer02
-
-# group name = printer
-# (globbing works)
-[groups]
-group1 = printer01
-group2 = printer02
-'''
-from glob import glob
-from fnmatch import fnmatchcase
-
-import sys
-import os
-import subprocess
-import re
-from socket import gethostname, getfqdn
-from optparse import OptionParser
-from ConfigParser import RawConfigParser
-
-macaddrs = [open(a).read().replace(':', '').strip().lower() for a in glob('/sys/class/net/*/address')]
-macaddrs = [a for a in macaddrs if a]
-
-parser = OptionParser()
-parser.add_option('-n', '--dryrun', action='store_true', help='only show what would be done')
-options, args = parser.parse_args()
-
-if not os.path.exists(CFG_FILE):
- print >>sys.stderr, 'Configuration file %s is missing.' % CFG_FILE
- print >>sys.stderr, 'To create it, redirect the following example to %s and edit the file.' % CFG_FILE
- print CFG_FILE_EXAMPLE
- sys.exit(1)
-
-cfg = RawConfigParser()
-# hack: mac addrs contain :, which clashes with cfg syntax
-cfg.OPTCRE = re.compile(
- r'(?P<option>[^=\s][^=]*)' # very permissive!
- r'\s*(?P<vi>[=])\s*' # any number of space/tab,
- # followed by separator
- # (=), followed
- # by any # space/tab
- r'(?P<value>.*)$' # everything up to eol
- )
-cfg.readfp(open(CFG_FILE, 'rb'))
-
-for x in cfg.get('settings', 'order').split():
- if not x in ('machine', 'groups'):
- print 'invalid value %s in settings/order' % s
- sys.exit(1)
-
-hostnames = []
-hostnames.append(gethostname())
-hostnames.append(getfqdn())
-
-re_ipaddr = re.compile(r'inet addr:(\S+)')
-ipaddrs = []
-try:
- ipaddrs.append(os.environ['SSH_CLIENT'].split()[0])
-except KeyError:
- pass
-p = subprocess.Popen(['/sbin/ifconfig'], stdout=subprocess.PIPE)
-for line in p.stdout:
- m = re_ipaddr.search(line)
- if m:
- ipaddrs.append(m.group(1))
-p.wait()
-
-p = subprocess.Popen(['id', '-Gn'], stdout=subprocess.PIPE)
-groups = p.stdout.read().split()
-p.wait()
-#print groups
-
-def get_group_match():
- for group, printer in cfg.items('groups'):
- if group.strip('@') in groups: return printer
- return None
-
-def get_machine_match():
- for machine, printer in cfg.items('machine'):
- if any(fnmatchcase(macaddr, machine.replace('-', '').replace(':', '')) for macaddr in macaddrs) or \
- any(fnmatchcase(ipaddr, machine) for ipaddr in ipaddrs) or \
- any(fnmatchcase(hostname, machine) for hostname in hostnames):
- return printer
- return None
-
-matches = []
-for item in cfg.get('settings', 'order').split():
- if item == 'machine': matches.append(get_machine_match())
- elif item == 'groups': matches.append(get_group_match())
- else: raise ValueError('%s is not machine or groups' % item)
-
-try:
- printer = [x for x in matches if x][0]
-except IndexError: # no match
- if cfg.getboolean('settings', 'delete lpoptions'):
- lpoptions_filename = os.path.expanduser('~/.cups/lpoptions')
- if options.dryrun:
- print 'would delete %s' % lpoptions_filename
- else:
- try:
- os.unlink(lpoptions_filename)
- except OSError:
- pass
- sys.exit(0)
-
-args = ['lpoptions', '-d', printer]
-if options.dryrun:
- print 'would call %s' % (' '.join(args))
-else:
- subprocess.call(args)
-
-