View | Details | Raw Unified | Return to bug 39539
Collapse All | Expand All

(-)a/management/univention-directory-manager-modules/univention-dnsedit (-2 / +3 lines)
 Lines 121-131   def parse(): Link Here 
121
	return options, zone_name, command, typ, arguments[3:]
121
	return options, zone_name, command, typ, arguments[3:]
122
122
123
123
124
def bind():
124
def bind(timeout=None):
125
	"""Bind to LDAP service."""
125
	"""Bind to LDAP service."""
126
	ucr = univention.config_registry.ConfigRegistry()
126
	ucr = univention.config_registry.ConfigRegistry()
127
	ucr.load()
127
	ucr.load()
128
	timeout = time.time() + 120  # 2 minutes from now
128
129
	timeout = timeout or time.time() + 120  # 2 minutes from now
129
	if time.time() > timeout:
130
	if time.time() > timeout:
130
		err = '%s: LDAP server %s unreachable, aborting' % (sys.argv[0], ucr['ldap/master'])
131
		err = '%s: LDAP server %s unreachable, aborting' % (sys.argv[0], ucr['ldap/master'])
131
		ud.debug(ud.ADMIN, ud.WARN, err)
132
		ud.debug(ud.ADMIN, ud.WARN, err)
132
   pep8
133
   pep8
(-)a/management/univention-directory-manager-modules/univention-dnsedit (-58 / +50 lines)
 Lines 35-40    Link Here 
35
35
36
import sys
36
import sys
37
import time
37
import time
38
import ldap
38
from optparse import OptionParser
39
from optparse import OptionParser
39
import univention.debug as ud
40
import univention.debug as ud
40
ud.init('/var/log/univention/directory-manager-cmd.log', ud.FLUSH, ud.FUNCTION)
41
ud.init('/var/log/univention/directory-manager-cmd.log', ud.FLUSH, ud.FUNCTION)
 Lines 69-98   def parse(): Link Here 
69
'''  # FIXME: OptionParser reformats this
70
'''  # FIXME: OptionParser reformats this
70
	global parser
71
	global parser
71
	parser = OptionParser(usage=usage, description=description)
72
	parser = OptionParser(usage=usage, description=description)
72
	parser.add_option('--ignore-missing-zone',
73
	parser.add_option(
73
			action='store_true', dest='ignore_missing_zone',
74
		'--ignore-missing-zone',
74
			help='Skip if zone does not exist')
75
		action='store_true', dest='ignore_missing_zone',
75
	parser.add_option('--ignore-exists',
76
		help='Skip if zone does not exist')
76
			action='store_true', dest='ignore_exists',
77
	parser.add_option(
77
			help='Skip if entry already exists')
78
		'--ignore-exists',
78
	parser.add_option('--quiet',
79
		action='store_true', dest='ignore_exists',
79
			action='store_true', dest='quiet',
80
		help='Skip if entry already exists')
80
			help='Turn off verbose messages')  # not implemented
81
	parser.add_option(
81
	parser.add_option('--reverse',
82
		'--quiet',
82
			action='store_true', dest='reverse',
83
		action='store_true', dest='quiet',
83
			help='Modify revers zone instead of forward zone')
84
		help='Turn off verbose messages')  # not implemented
84
	parser.add_option('--overwrite',
85
	parser.add_option(
85
			action='store_true', dest='overwrite',
86
		'--reverse',
86
			help='Overwrite exising record')
87
		action='store_true', dest='reverse',
87
	parser.add_option('--stoptls',
88
		help='Modify revers zone instead of forward zone')
88
			action='store_true', dest='stoptls',
89
	parser.add_option(
89
			help='Disable TLS')
90
		'--overwrite',
90
	parser.add_option('--binddn',
91
		action='store_true', dest='overwrite',
91
			action='store', dest='binddn',
92
		help='Overwrite exising record')
92
			help='bind DN')
93
	parser.add_option(
93
	parser.add_option('--bindpwd',
94
		'--stoptls',
94
			action='store', dest='bindpwd',
95
		action='store_true', dest='stoptls',
95
			help='bind password')
96
		help='Disable TLS')
97
	parser.add_option(
98
		'--binddn',
99
		action='store', dest='binddn',
100
		help='bind DN')
101
	parser.add_option(
102
		'--bindpwd',
103
		action='store', dest='bindpwd',
104
		help='bind password')
96
105
97
	options, arguments = parser.parse_args()
106
	options, arguments = parser.parse_args()
98
	msg = None
107
	msg = None
 Lines 118-132   def bind(): Link Here 
118
	ucr.load()
127
	ucr.load()
119
	timeout = time.time() + 120  # 2 minutes from now
128
	timeout = time.time() + 120  # 2 minutes from now
120
	if time.time() > timeout:
129
	if time.time() > timeout:
121
		err = '%s: LDAP server %s unreachable, aborting' % \
130
		err = '%s: LDAP server %s unreachable, aborting' % (sys.argv[0], ucr['ldap/master'])
122
			(sys.argv[0], ucr['ldap/master'])
123
		ud.debug(ud.ADMIN, ud.WARN, err)
131
		ud.debug(ud.ADMIN, ud.WARN, err)
124
		print >> sys.stderr, err
132
		print >> sys.stderr, err
125
		sys.exit(1)
133
		sys.exit(1)
126
	if options.stoptls:
134
127
		start_tls = 0
135
	start_tls = 0 if options.stoptls else 2
128
	else:
129
		start_tls = 2
130
	try:
136
	try:
131
		if options.binddn and options.bindpwd:
137
		if options.binddn and options.bindpwd:
132
			lo = uldap.access(
138
			lo = uldap.access(
 Lines 145-168   def bind(): Link Here 
145
		ud.debug(ud.ADMIN, ud.WARN, msg)
151
		ud.debug(ud.ADMIN, ud.WARN, msg)
146
		print >> sys.stderr, msg
152
		print >> sys.stderr, msg
147
		sys.exit(1)
153
		sys.exit(1)
148
	except (univention.admin.uexceptions.ldapError,
154
	except (univention.admin.uexceptions.ldapError, ldap.LDAPError):
149
			uldap.ldap.LDAPError):
155
		msg = '%s: timeout while trying to contact LDAP server %s' % (sys.argv[0], ucr['ldap/master'])
150
		msg = '%s: timeout while trying to contact LDAP server %s' % \
151
			(sys.argv[0], ucr['ldap/master'])
152
		ud.debug(ud.ADMIN, ud.WARN, msg)
156
		ud.debug(ud.ADMIN, ud.WARN, msg)
153
		print >> sys.stderr, msg
157
		print >> sys.stderr, msg
154
		time.sleep(10)
158
		time.sleep(10)
155
		return bind()  # recursion
159
		return bind(timeout)  # recursion
156
160
157
161
158
def lookup_zone(zone_name):
162
def lookup_zone(zone_name):
159
	"""Lookup zone and return UDM object."""
163
	"""Lookup zone and return UDM object."""
160
	if not options.reverse:
164
	if not options.reverse:
161
		zones = forward_zone.lookup(co, lo, '(zone=%s)' % (zone_name,),
165
		zones = forward_zone.lookup(co, lo, '(zone=%s)' % (zone_name,), scope='domain', base=position.getDomain(), unique=True)
162
			scope='domain', base=position.getDomain(), unique=True)
163
	else:
166
	else:
164
		zones = reverse_zone.lookup(co, lo, '(subnet=%s)' % (zone_name,),
167
		zones = reverse_zone.lookup(co, lo, '(subnet=%s)' % (zone_name,), scope='domain', base=position.getDomain(), unique=True)
165
			scope='domain', base=position.getDomain(), unique=True)
166
	if not zones:
168
	if not zones:
167
		if options.ignore_missing_zone:
169
		if options.ignore_missing_zone:
168
			sys.exit(0)
170
			sys.exit(0)
 Lines 178-185   def add_srv_record(service, protocol, priority, weight, port, host): Link Here 
178
	location = [priority, weight, port, host]
180
	location = [priority, weight, port, host]
179
	filt = univention.admin.filter.expression('name', name)
181
	filt = univention.admin.filter.expression('name', name)
180
182
181
	records = srv_record.lookup(co, lo, filt, scope='domain',
183
	records = srv_record.lookup(co, lo, filt, scope='domain', base=position.getDomain(), superordinate=zone, unique=True)
182
			base=position.getDomain(), superordinate=zone, unique=True)
183
	if records:
184
	if records:
184
		record = records[0]
185
		record = records[0]
185
	else:
186
	else:
 Lines 204-211   def remove_srv_record(service, protocol, priority, weight, port, host): Link Here 
204
	location = [priority, weight, port, host]
205
	location = [priority, weight, port, host]
205
	filt = univention.admin.filter.expression('name', name)
206
	filt = univention.admin.filter.expression('name', name)
206
207
207
	records = srv_record.lookup(co, lo, filt, scope='domain',
208
	records = srv_record.lookup(co, lo, filt, scope='domain', base=position.getDomain(), superordinate=zone, unique=True)
208
			base=position.getDomain(), superordinate=zone, unique=True)
209
	if records:
209
	if records:
210
		record = records[0]
210
		record = records[0]
211
	else:
211
	else:
 Lines 225-232   def remove_srv_record(service, protocol, priority, weight, port, host): Link Here 
225
def add_txt_record(name, text):
225
def add_txt_record(name, text):
226
	"""Add DNS text record."""
226
	"""Add DNS text record."""
227
	filt = univention.admin.filter.expression('name', name)
227
	filt = univention.admin.filter.expression('name', name)
228
	records = txt_record.lookup(co, lo, filt, scope='domain',
228
	records = txt_record.lookup(co, lo, filt, scope='domain', base=position.getDomain(), superordinate=zone, unique=True)
229
			base=position.getDomain(), superordinate=zone, unique=True)
230
	if records:
229
	if records:
231
		record = records[0]
230
		record = records[0]
232
	else:
231
	else:
 Lines 249-256   def add_txt_record(name, text): Link Here 
249
def add_a_record(name, *adresses):
248
def add_a_record(name, *adresses):
250
	"""Add DNS IPv4 address records."""
249
	"""Add DNS IPv4 address records."""
251
	filt = univention.admin.filter.expression('name', name)
250
	filt = univention.admin.filter.expression('name', name)
252
	records = host_record.lookup(co, lo, filt, scope='domain',
251
	records = host_record.lookup(co, lo, filt, scope='domain', base=position.getDomain(), superordinate=zone, unique=True)
253
			base=position.getDomain(), superordinate=zone, unique=True)
254
	if records:
252
	if records:
255
		record = records[0]
253
		record = records[0]
256
	else:
254
	else:
 Lines 273-280   def add_a_record(name, *adresses): Link Here 
273
def add_cname_record(name, cname):
271
def add_cname_record(name, cname):
274
	"""Add DNS canonical name record."""
272
	"""Add DNS canonical name record."""
275
	filt = univention.admin.filter.expression('name', name)
273
	filt = univention.admin.filter.expression('name', name)
276
	records = alias.lookup(co, lo, filt, scope='domain',
274
	records = alias.lookup(co, lo, filt, scope='domain', base=position.getDomain(), superordinate=zone, unique=True)
277
			base=position.getDomain(), superordinate=zone, unique=True)
278
	if records:
275
	if records:
279
		record = records[0]
276
		record = records[0]
280
	else:
277
	else:
 Lines 282-289   def add_cname_record(name, cname): Link Here 
282
		record['name'] = name
279
		record['name'] = name
283
		record['zonettl'] = ['80600']
280
		record['zonettl'] = ['80600']
284
281
285
	if record['cname'] and not (record['cname'] == cname or
282
	if record['cname'] and not (record['cname'] == cname or options.overwrite or options.ignore_exists):
286
			options.overwrite or options.ignore_exists):
287
		print >> sys.stderr, 'E: Record exists and points to different address'
283
		print >> sys.stderr, 'E: Record exists and points to different address'
288
		sys.exit(1)
284
		sys.exit(1)
289
	if record['cname'] == cname:
285
	if record['cname'] == cname:
 Lines 299-314   def add_cname_record(name, cname): Link Here 
299
def add_ptr_record(address, ptr):
295
def add_ptr_record(address, ptr):
300
	"""Add DNS pointer record."""
296
	"""Add DNS pointer record."""
301
	filt = univention.admin.filter.expression('address', address)
297
	filt = univention.admin.filter.expression('address', address)
302
	records = ptr_record.lookup(co, lo, filt, scope='domain',
298
	records = ptr_record.lookup(co, lo, filt, scope='domain', base=position.getDomain(), superordinate=zone, unique=True)
303
			base=position.getDomain(), superordinate=zone, unique=True)
304
	if records:
299
	if records:
305
		record = records[0]
300
		record = records[0]
306
	else:
301
	else:
307
		record = ptr_record.object(co, lo, position, superordinate=zone)
302
		record = ptr_record.object(co, lo, position, superordinate=zone)
308
		record['address'] = address
303
		record['address'] = address
309
304
310
	if record['ptr_record'] and not (record['ptr_record'] == ptr or ptr in record['ptr_record'] or
305
	if record['ptr_record'] and not (record['ptr_record'] == ptr or ptr in record['ptr_record'] or options.overwrite):
311
			options.overwrite):
312
		print >> sys.stderr, 'E: Record exists and points to different address'
306
		print >> sys.stderr, 'E: Record exists and points to different address'
313
		sys.exit(1)
307
		sys.exit(1)
314
	if record['ptr_record'] == ptr:
308
	if record['ptr_record'] == ptr:
 Lines 391-399   def main(): Link Here 
391
			print >> sys.stderr, 'E: Object "%s" exists' % (ex,)
385
			print >> sys.stderr, 'E: Object "%s" exists' % (ex,)
392
			raise
386
			raise
393
			sys.exit(1)
387
			sys.exit(1)
394
	except (ValueError, TypeError,
388
	except (ValueError, TypeError, univention.admin.uexceptions.valueInvalidSyntax, univention.admin.uexceptions.valueRequired) as ex:
395
			univention.admin.uexceptions.valueInvalidSyntax,
396
			univention.admin.uexceptions.valueRequired) as ex:
397
		print >> sys.stderr, 'E: failed %s' % (ex,)
389
		print >> sys.stderr, 'E: failed %s' % (ex,)
398
		raise
390
		raise
399
		sys.exit(1)
391
		sys.exit(1)

Return to bug 39539