diff options
| -rwxr-xr-x | bin/standardskriver | 40 | ||||
| -rw-r--r-- | debian/changelog | 9 | 
2 files changed, 38 insertions, 11 deletions
| diff --git a/bin/standardskriver b/bin/standardskriver index e4a76db..d99f754 100755 --- a/bin/standardskriver +++ b/bin/standardskriver @@ -23,6 +23,7 @@  # Name=standardskriver  # StartupNotify=false +CUSTOMER_ID_FILE = '/etc/debian-edu/itzks.school'  CFG_FILE = '/etc/standardskriver.cfg'  CFG_FILE_EXAMPLE = '''[settings]  enable = yes @@ -61,6 +62,15 @@ import netaddr  from optparse import OptionParser  from ConfigParser import RawConfigParser +# check whose customer system we are on... +customer_id = None +if os.access(CUSTOMER_ID_FILE, os.R_OK): +    with open(CUSTOMER_ID_FILE, 'r') as c_id_f: +        # only read first line +        customer_id = c_id_f.readline() +        # sanitize input... +        customer_id = re.sub(r'([A-Z0-9]+)(.*\n)', r'\1', customer_id) +  macaddrs = [open(a).read().replace(':', '').strip().lower() for a in glob('/sys/class/net/*/address')]  macaddrs = [a for a in macaddrs if a] @@ -117,21 +127,29 @@ p.wait()  #print groups  def get_group_match(): -    for group, printer in cfg.items('groups'): -        if group.strip('@') in groups: return printer +    group_sections = ['groups'] +    if customer_id: +        group_sections.append('groups.{customer}'.format(customer=customer_id)) +    for section in group_sections: +        for group, printer in cfg.items(section): +            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): -            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: +    machine_sections = ['machine'] +    if customer_id: +        machine_sections.append('machine.{customer}'.format(customer=customer_id)) +    for section in machine_sections: +        for machine, printer in cfg.items(section): +            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 = [] diff --git a/debian/changelog b/debian/changelog index 4627f2b..6535adc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +itzks-systems (2015.04.16.1) UNRELEASED; urgency=medium + +  * standardskriver tool: +    - Allow for customer based [machine.<CUSTOMERID>] and [groups.<CUSTOMERID>] +      sections in /etc/standardskriver.cfg. This allows having all site +      configurations of all customers in one config file. + + -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de>  Thu, 16 Apr 2015 17:39:34 +0200 +  itzks-systems (2015.04.03.1) unstable; urgency=medium    * debian/control: | 
