summaryrefslogtreecommitdiff
path: root/pynslcd/ether.py
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2011-05-01 19:08:39 +0000
committerArthur de Jong <arthur@arthurdejong.org>2011-05-01 19:08:39 +0000
commit4c19151250e318fa38dac33e5db1397b9d95a43e (patch)
treef177c2225f49ff5bb1b126663b3c734f63d7773e /pynslcd/ether.py
parentb4fa5371a770e8ba90a8d0ccd62ddabea0124fd5 (diff)
implement attribute mapping functionality and do some refactoring
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd@1454 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'pynslcd/ether.py')
-rw-r--r--pynslcd/ether.py28
1 files changed, 12 insertions, 16 deletions
diff --git a/pynslcd/ether.py b/pynslcd/ether.py
index fca25e6..e1ab05e 100644
--- a/pynslcd/ether.py
+++ b/pynslcd/ether.py
@@ -19,27 +19,26 @@
# 02110-1301 USA
import struct
-import ldap.filter
import constants
import common
def ether_aton(ether):
+ """Converst an ethernet address to binary form in network byte order."""
return struct.pack('BBBBBB', *(int(x, 16) for x in ether.split(':')))
def ether_ntoa(ether):
+ """Conversts an ethernet address in network byte order to the string
+ representation."""
return ':'.join('%x' % x for x in struct.unpack('6B', ether))
-class EtherRequest(common.Request):
-
- filter = '(objectClass=ieee802Device)'
+attmap = common.Attributes(cn='cn', macAddress='macAddress')
+filter = '(objectClass=ieee802Device)'
- attmap_cn = 'cn'
- attmap_macAddress = 'macAddress'
- attributes = ( 'cn', 'macAddress' )
+class EtherRequest(common.Request):
def __init__(self, *args):
super(EtherRequest, self).__init__(*args)
@@ -47,17 +46,17 @@ class EtherRequest(common.Request):
def write(self, dn, attributes):
# get name and check against requested name
- names = attributes.get(self.attmap_cn, [])
+ names = attributes['cn']
if not names:
- print 'Error: entry %s does not contain %s value' % ( dn, self.attmap_cn)
+ print 'Error: entry %s does not contain %s value' % ( dn, attmap['cn'])
if self.name:
if self.name.lower() not in (x.lower() for x in names):
return # skip entry
names = ( self.name, )
# get addresses and convert to binary form
- addresses = [ether_aton(x) for x in attributes.get(self.attmap_macAddress, [])]
+ addresses = [ether_aton(x) for x in attributes['macAddress']]
if not addresses:
- print 'Error: entry %s does not contain %s value' % ( dn, self.attmap_macAddress)
+ print 'Error: entry %s does not contain %s value' % ( dn, attmap['macAddress'])
if self.ether:
if self.ether not in addresses:
return
@@ -73,14 +72,11 @@ class EtherRequest(common.Request):
class EtherByNameRequest(EtherRequest):
action = constants.NSLCD_ACTION_ETHER_BYNAME
+ filter_attrs = dict(cn='name')
def read_parameters(self):
self.name = self.fp.read_string()
- def mk_filter(self):
- return '(&%s(%s=%s))' % ( self.filter,
- self.attmap_cn, ldap.filter.escape_filter_chars(self.name) )
-
class EtherByEtherRequest(EtherRequest):
@@ -91,7 +87,7 @@ class EtherByEtherRequest(EtherRequest):
def mk_filter(self):
return '(&%s(%s=%s))' % ( self.filter,
- self.attmap_macAddress, ether_ntoa(self.ether) )
+ attmap['macAddress'], ether_ntoa(self.ether) )
class EtherAllRequest(EtherRequest):