diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2013-11-13 14:09:07 +0100 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2013-11-13 14:09:07 +0100 |
commit | 27fce5b9b2ce8dc559ea381efda4199f39fb6c0d (patch) | |
tree | 448c1633519c0d588a50a89ce554a952b80eb62f /bin/itzks-standardskriver | |
parent | 476321547207d88e47bc4c155bf0e4aa8c7cf368 (diff) | |
download | itzks-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-x | bin/itzks-standardskriver | 150 |
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) - - |