|
Lines 55-61
tmpFile = '/var/cache/univention-directory-listener/samba-shares.oldObject'
Link Here
|
| 55 |
|
55 |
|
| 56 |
|
56 |
|
| 57 |
def _validate_smb_share_name(name): |
57 |
def _validate_smb_share_name(name): |
| 58 |
if len(name) > 80: |
58 |
if not name or len(name) > 80: |
| 59 |
return False |
59 |
return False |
| 60 |
illegal_chars = set('\\/[]:|<>+=;,*?"' + ''.join(map(chr, range(0x1F + 1)))) |
60 |
illegal_chars = set('\\/[]:|<>+=;,*?"' + ''.join(map(chr, range(0x1F + 1)))) |
| 61 |
if set(str(name)) & illegal_chars: |
61 |
if set(str(name)) & illegal_chars: |
|
Lines 128-134
def handler(dn, new, old, command):
Link Here
|
| 128 |
listener.unsetuid() |
128 |
listener.unsetuid() |
| 129 |
|
129 |
|
| 130 |
if old: |
130 |
if old: |
| 131 |
share_name_mapped = urllib.quote(old.get('univentionShareSambaName', [''])[0], safe='') |
131 |
share_name = old.get('univentionShareSambaName', [''])[0] |
|
|
132 |
share_name_mapped = urllib.quote(share_name, safe='') |
| 132 |
filename = '/etc/samba/shares.conf.d/%s' % (share_name_mapped,) |
133 |
filename = '/etc/samba/shares.conf.d/%s' % (share_name_mapped,) |
| 133 |
listener.setuid(0) |
134 |
listener.setuid(0) |
| 134 |
try: |
135 |
try: |
|
Lines 146-161
def handler(dn, new, old, command):
Link Here
|
| 146 |
return (_quote(arg) for arg in args) |
147 |
return (_quote(arg) for arg in args) |
| 147 |
|
148 |
|
| 148 |
if new: |
149 |
if new: |
| 149 |
share_name = new['univentionShareSambaName'][0] |
150 |
share_name = new.get('univentionShareSambaName', [''])[0] |
| 150 |
share_name_mapped = urllib.quote(share_name, safe='') |
|
|
| 151 |
filename = '/etc/samba/shares.conf.d/%s' % (share_name_mapped,) |
| 152 |
if not _validate_smb_share_name(share_name): |
151 |
if not _validate_smb_share_name(share_name): |
| 153 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.ERROR, "invalid samba share name: %r" % (share_name,)) |
152 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.ERROR, "invalid samba share name: %r" % (share_name,)) |
| 154 |
return |
153 |
return |
|
|
154 |
share_name_mapped = urllib.quote(share_name, safe='') |
| 155 |
filename = '/etc/samba/shares.conf.d/%s' % (share_name_mapped,) |
| 155 |
|
156 |
|
| 156 |
# important!: createOrRename() checks if the share path is allowed. this must be done prior to writing any files. |
157 |
# important!: createOrRename() checks if the share path is allowed. this must be done prior to writing any files. |
| 157 |
# try to create directory to share |
158 |
# try to create directory to share |
| 158 |
if new['univentionShareSambaName'][0] != 'homes': |
159 |
if share_name != 'homes': |
| 159 |
# object was renamed |
160 |
# object was renamed |
| 160 |
if not old and oldObject and command == "a": |
161 |
if not old and oldObject and command == "a": |
| 161 |
old = oldObject |
162 |
old = oldObject |
|
Lines 173-179
def handler(dn, new, old, command):
Link Here
|
| 173 |
fp = open(filename, 'w') |
174 |
fp = open(filename, 'w') |
| 174 |
|
175 |
|
| 175 |
print >>fp, '[%s]' % (share_name,) |
176 |
print >>fp, '[%s]' % (share_name,) |
| 176 |
if new['univentionShareSambaName'][0] != 'homes': |
177 |
if share_name != 'homes': |
| 177 |
print >>fp, 'path = %s' % _quote(new['univentionSharePath'][0]) |
178 |
print >>fp, 'path = %s' % _quote(new['univentionSharePath'][0]) |
| 178 |
mapping = [ |
179 |
mapping = [ |
| 179 |
('description', 'comment'), |
180 |
('description', 'comment'), |