diff options
Diffstat (limited to 'bin')
| -rwxr-xr-x | bin/standardskriver | 18 | 
1 files changed, 13 insertions, 5 deletions
diff --git a/bin/standardskriver b/bin/standardskriver index e7128f8..db71976 100755 --- a/bin/standardskriver +++ b/bin/standardskriver @@ -25,6 +25,7 @@  CFG_FILE = '/etc/standardskriver.cfg'  CFG_FILE_EXAMPLE = '''[settings] +enable = yes  order = machine groups  delete lpoptions = yes @@ -33,6 +34,7 @@ delete lpoptions = yes  # hostname.domain = printer  # LTSP client IP = printer  # (globbing works) +  [machine]  00:01:02:03:04:05 = printer01  172.16.34.64 = printer02 @@ -41,6 +43,7 @@ hostname.domain = printer02  # group name = printer  # (globbing works) +  [groups]  group1 = printer01  group2 = printer02 @@ -53,6 +56,7 @@ import os  import subprocess  import re  from socket import gethostname, getfqdn +import netaddr  from optparse import OptionParser  from ConfigParser import RawConfigParser @@ -99,7 +103,7 @@ try:      ipaddrs.append(os.environ['SSH_CLIENT'].split()[0])  except KeyError:      pass -p = subprocess.Popen(['/sbin/ifconfig'], stdout=subprocess.PIPE) +p = subprocess.Popen(['/sbin/ifconfig'], env={'LANG': 'C'}, stdout=subprocess.PIPE)  for line in p.stdout:      m = re_ipaddr.search(line)      if m: @@ -118,10 +122,15 @@ def get_group_match():  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): +        if any(fnmatchcase(macaddr, machine.replace('-', '').replace(':', '')) for macaddr in macaddrs): +            return printer +        elif any(fnmatchcase(hostname, machine) for hostname in hostnames):              return printer +        else: +            machines = netaddr.IPSet(machine.split(',')) +            myaddrs = netaddr.IPSet(ipaddrs) +            if machines & myaddrs: +                return printer      return None  matches = [] @@ -150,4 +159,3 @@ if options.dryrun:  else:      subprocess.call(args) -  | 
