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

(-)umc/js/setup/types.js (+107 lines)
Line 0    Link Here 
1
/*
2
 * Copyright 2012 Univention GmbH
3
 *
4
 * http://www.univention.de/
5
 *
6
 * All rights reserved.
7
 *
8
 * The source code of this program is made available
9
 * under the terms of the GNU Affero General Public License version 3
10
 * (GNU AGPL V3) as published by the Free Software Foundation.
11
 *
12
 * Binary versions of this program provided by Univention to you as
13
 * well as other copyrighted, protected or trademarked materials like
14
 * Logos, graphics, fonts, specific documentations and configurations,
15
 * cryptographic keys etc. are subject to a license agreement between
16
 * you and Univention and not subject to the GNU AGPL V3.
17
 *
18
 * In the case you use this program under the terms of the GNU AGPL V3,
19
 * the program is provided in the hope that it will be useful,
20
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
 * GNU Affero General Public License for more details.
23
 *
24
 * You should have received a copy of the GNU Affero General Public
25
 * License with the Debian GNU/Linux or Univention distribution in file
26
 * /usr/share/common-licenses/AGPL-3; if not, see
27
 * <http://www.gnu.org/licenses/>.
28
 */
29
/*global define*/
30
31
define([
32
	"dojo/_base/array",
33
	"umc/tools",
34
	"umc/i18n!umc/modules/setup"
35
], function(array, tools, _) {
36
	var self = {
37
		convertNetmask: function(nm) {
38
			if (/^[0-9]+$/.test(nm)) {
39
				return parseInt(nm, 10);
40
			}
41
			// TODO: IE8 does not have .reduce
42
			return array.map(nm.split('.'), function(i) { return parseInt((parseInt(i, 10) + 1) / 32, 10); }).reduce(function(x,y) { return x + y; });
43
		},
44
		interfaceTypes: {
45
			'eth': _('Ethernet'),
46
			'vlan': _('Virtual LAN'),
47
			'bond': _('Bonding'),
48
			'br': _('Bridge')
49
		},
50
		getTypeByDevice: function(device) { // TODO: rename
51
			var key = /^([^\d]+)\d$/.exec(device);
52
			return key ? key[1] : device;
53
		},
54
		getNumberByDevice: function(device) {
55
			var num = /^[^\d]+(\d+)$/.exec(device);
56
			return num ? num[1] : device;
57
		},
58
		interfaceValues: function() {
59
			var arr = [];
60
			tools.forIn(self.interfaceTypes, function(id, label) {
61
				arr.push({
62
					id: id,
63
					label: label
64
				});
65
			});
66
			return arr;
67
		},
68
		interfaceValuesDict: function() {
69
			var d = {};
70
			tools.forIn(self.interfaceTypes, function(id, label) {
71
				d[id] = {
72
					id: id,
73
					label: label
74
				};
75
			});
76
			return d;
77
		},
78
		filterInterfaces: function(/*String[]*/ interfaces, /*Object[]*/ available_interfaces) {
79
			// filter interfaces, which are available for use (because no interface already uses one of the interface)
80
			return array.filter(array.map(interfaces, function(/*String*/iface) {
81
				if (available_interfaces.length && !array.every(available_interfaces, function(/*Object*/item) {
82
83
					if (item.interfaceType === 'br' || item.interfaceType === 'bond') {
84
						// the interface is a bridge or bonding so it can contain subinterfaces
85
						var key = item.interfaceType === 'br' ? 'bridge_ports' : 'bond_slaves';
86
						if(item[key] && item[key].length) {
87
							return array.every(item[key], function(/*String*/_iface) {
88
								return _iface !== item['interface'];
89
							});
90
						}
91
						return true; // no subtypes (bridge)
92
					}
93
94
					return true; // interface without subinterfaces
95
				})) {
96
					return null;
97
				}
98
				return {
99
					id: iface,
100
					label: iface
101
				};
102
			}), function(v) { return v !== null; });
103
		}
104
	};
105
106
	return self;
107
});
(-)umc/js/setup/InterfaceGrid.js (+396 lines)
Line 0    Link Here 
1
/*
2
 * Copyright 2012 Univention GmbH
3
 *
4
 * http://www.univention.de/
5
 *
6
 * All rights reserved.
7
 *
8
 * The source code of this program is made available
9
 * under the terms of the GNU Affero General Public License version 3
10
 * (GNU AGPL V3) as published by the Free Software Foundation.
11
 *
12
 * Binary versions of this program provided by Univention to you as
13
 * well as other copyrighted, protected or trademarked materials like
14
 * Logos, graphics, fonts, specific documentations and configurations,
15
 * cryptographic keys etc. are subject to a license agreement between
16
 * you and Univention and not subject to the GNU AGPL V3.
17
 *
18
 * In the case you use this program under the terms of the GNU AGPL V3,
19
 * the program is provided in the hope that it will be useful,
20
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
 * GNU Affero General Public License for more details.
23
 *
24
 * You should have received a copy of the GNU Affero General Public
25
 * License with the Debian GNU/Linux or Univention distribution in file
26
 * /usr/share/common-licenses/AGPL-3; if not, see
27
 * <http://www.gnu.org/licenses/>.
28
 */
29
/*global define*/
30
31
define([
32
	"dojo/_base/declare",
33
	"dojo/_base/lang",
34
	"dojo/_base/array",
35
	"dojo/aspect",
36
	"dijit/Dialog",
37
	"umc/dialog",
38
	"umc/tools",
39
	"umc/widgets/Grid",
40
	"umc/widgets/Form",
41
	"umc/widgets/ComboBox",
42
	"umc/widgets/TextBox",
43
	"umc/modules/setup/InterfaceWizard",
44
	"umc/modules/setup/types",
45
	"umc/i18n!umc/modules/setup"
46
], function(declare, lang, array, aspect, Dialog, dialog, tools, Grid, Form, ComboBox, TextBox, InterfaceWizard, types, _) {
47
	return declare("umc.modules.setup.InterfaceGrid", [ Grid ], {
48
		moduleStore: null,
49
50
		style: 'width: 100%; height: 200px;',
51
		query: {},
52
		sortIndex: null,
53
54
		physical_interfaces: [],
55
56
		gateway: "",
57
		nameserver: [],
58
59
		constructor: function() {
60
			lang.mixin(this, {
61
				columns: [{
62
					name: 'interface',
63
					label: _('Interface'),
64
					width: '15%'
65
				}, {
66
					name: 'interfaceType',
67
					label: _('Type'),
68
					width: '15%',
69
					formatter: function(value) {
70
						return types.interfaceTypes[value] || value;
71
					}
72
				}, {
73
					name: 'information',
74
					label: _('Information'),
75
					formatter: function(iface) {
76
						// This value 'iface' is a hack. We do not know about which identifier this row has so we added the whole information into iface.information
77
						var back = '';
78
						if (((iface.interfaceType === 'eth' || iface.interfaceType === 'vlan') && iface.type !== 'manual') || (iface.interfaceType === 'bond' || iface.interfaceType === 'br')) {
79
							var formatIp = function(ips) {
80
								return array.map(ips, function(i) { return i[0] + '/' + types.convertNetmask(i[1]);}).join(', ');
81
							};
82
							back = _('IP addresses') + ': ';
83
							if (iface.ip4dynamic) {
84
								back += 'DHCP';
85
							} else if (iface.ip4.length){
86
								back += formatIp(iface.ip4);
87
							}
88
							if (iface.ip6dynamic) {
89
								back += ', <br>SLAAC';
90
							} else if (iface.ip6.length) {
91
								back += ', <br>' + formatIp(iface.ip6);
92
							}
93
						}
94
						if (iface.interfaceType === 'br' || iface.interfaceType === 'bond') {
95
							back += '<br>' + _('Interfaces') + ': ' + iface[iface.interfaceType === 'br' ? 'bridge_ports' : 'bond-slaves'].join(', ');
96
						}
97
						return back;
98
					},
99
					width: '70%'
100
				}],
101
				actions: [{
102
				// TODO: decide if we show a DHCP query action for every row?!
103
//					name: 'dhcp_query',
104
//					label: 'DHCP query',
105
//					callback: lang.hitch(this, function() {
106
//						// TODO: interface name
107
//				//		this._dhcpQuery();
108
//					}),
109
//					isMultiAction: false,
110
//					isStandardAction: true,
111
//					isContextAction: true
112
//				}, {
113
					name: 'edit',
114
					label: _('Edit'),
115
					iconClass: 'umcIconEdit',
116
					isMultiAction: false,
117
					isStandardAction: true,
118
					isContextAction: true,
119
					callback: lang.hitch(this, '_editInterface')
120
				}, {
121
					name: 'add',
122
					label: _('Add interface'),
123
					iconClass: 'umcIconAdd',
124
					isMultiAction: false,
125
					isStandardAction: false,
126
					isContextAction: false,
127
					callback: lang.hitch(this, '_addInterface')
128
				}, {
129
					name: 'delete',
130
					label: _('Delete'),
131
					iconClass: 'umcIconDelete',
132
					isMultiAction: true,
133
					isStandardAction: true,
134
					callback: lang.hitch(this, function(ids) {
135
						dialog.confirm(_('Please confirm the removal of the %d selected interfaces!', ids.length), [{
136
							label: _('Delete'),
137
							callback: lang.hitch(this, '_removeInterface', ids)
138
						}, {
139
							label: _('Cancel'),
140
							'default': true
141
						}]);
142
					})
143
				}]
144
			});
145
		},
146
147
		_getValueAttr: function() { return this.getAllItems(); },
148
149
		_setValueAttr: function(values) {
150
			// TODO: this method should delete the whole grid items and add the items from values
151
		},
152
153
		setInitialValue: function(values) {
154
			tools.forIn(values, function(id, value) {
155
				try {
156
					this.moduleStore.add(lang.mixin({'interface': id}, value));
157
				} catch(e) {}
158
			}, this);
159
		},
160
161
		onChanged: function() {
162
			// event stub
163
		},
164
165
		updateValues: function(values, create) {
166
				// if a DHCP query was done the values for gateway and nameserver are set
167
				// so we trigger on change event
168
				if (values.gateway !== '') {
169
					this.set('gateway', values.gateway);
170
				}
171
				if (values.nameserver.length) {
172
					// TODO: decide if the DHCP query can delete all nameservers by sending an empty nameserver?
173
					this.set('nameserver', values.nameserver);
174
				}
175
176
				if (values.interfaceType === 'eth') {
177
178
				} else if (values.interfaceType === 'vlan') {
179
					// The interface is build from interface.vlan_id
180
					values['interface'] = values['interface'] + '.' + String(values.vlan_id);
181
182
				} else if (values.interfaceType === 'bond' || values.interfaceType === 'br') {
183
					values.start = true;
184
					// disable the interfaces which are used by this interface
185
					var key = values.interfaceType === 'bond' ? 'bond-slaves' : 'bridge_ports';
186
					this.setDisabledItem(values[key], true);
187
					// set original values
188
					array.forEach(values[key], lang.hitch(this, function(ikey) {
189
						var item = this.moduleStore.get(ikey);
190
//						item.original = lang.clone(item); // FIXME: RangeError: Maximum call stack size exceeded
191
						item.original = item;
192
193
						// set values to deactivate the interface values
194
						item.ip4 = [];
195
						item.ip6 = [];
196
						item.ip4dynamic = false;
197
						item.ip6dynamic = false;
198
						item.type = 'manual';
199
						item.start = false;
200
201
						// FIXME: put does not overwrite
202
						this.moduleStore.put(item);
203
						this.moduleStore.remove(item['interface']);
204
						this.moduleStore.add(item);
205
					}));
206
				}
207
208
				values.information = values;
209
210
				if (!create) {
211
					this.moduleStore.put( values ); // FIXME: why does put not work? we have to manually remove and add it...
212
					this.moduleStore.remove(values['interface']);
213
					this.moduleStore.add( values );
214
				} else {
215
					try {
216
						this.moduleStore.add( values );
217
					} catch(error) {
218
						dialog.alert(_('Interface "%s" already exists', values['interface']));
219
						return;
220
					}
221
				}
222
				this.onChanged();
223
		},
224
225
		_addInterface: function() {
226
			this._modifyInterface({});
227
		},
228
229
		_editInterface: function(name, props) {
230
			return this._modifyInterface(props[0]);
231
		},
232
233
		_modifyInterface: function(props) {
234
			// Add or modify an interface
235
			if (props.interfaceType) {
236
				// only edit the existing interace
237
				props.create = false;
238
				this._showWizard(props);
239
				return;
240
			}
241
242
			var form = null;
243
			var dynamicInterfaceTypeValues = lang.hitch(this, function() {
244
				// TODO: lookup if interfaces are already in use
245
				var d = types.interfaceValuesDict();
246
				if (this.physical_interfaces.length < 2) {
247
					// We can not use a bonding interface if we don't have two physical interfaces
248
					delete d.bond;
249
				}
250
				if (array.every(this.physical_interfaces, lang.hitch(this, function(iface) {
251
					var ifaces = this.get('value');
252
					return ifaces.length !== 0 ? array.some(ifaces, function(val) { return iface === val['interface']; }) : false;
253
				}))) {
254
					// if all physical interfaces are configured we can not configure another
255
					delete d.eth;
256
				}
257
				var arr = [];
258
				tools.forIn(d, function(k, v) {
259
					arr.push(v);
260
				});
261
				return arr;
262
			});
263
264
			var hack = {foo: dynamicInterfaceTypeValues};
265
			aspect.after(hack, 'foo', function(ret) { 
266
				if (array.every(ret, function(item) { return item.id !== 'eth'; })) {
267
					form._widgets.interfaceType.set('value', 'vlan');
268
				}
269
			});
270
271
			form = new Form({
272
				widgets: [{
273
					name: 'interfaceType',
274
					label: _('Interface type'),
275
					type: ComboBox,
276
					value: 'eth', // FIXME: if eth is not possible use vlan
277
					onChange: lang.hitch(this, function(interfaceType) {
278
						if (interfaceType) {
279
							var name = (interfaceType !== 'vlan' ? interfaceType : 'eth');
280
							var num = 0;
281
							while(array.some(array.map(this.get('value'), function(item) { return item['interface']; }), function(iface) { return iface == name + String(num); })) {
282
								num++;
283
							}
284
							form.getWidget('interface').set('interface', name + String(num));
285
						}
286
					}),
287
					dynamicValues: hack.foo
288
				}, {
289
					name: 'interface',
290
					label: _('Interface'),
291
					type: ComboBox,
292
					depends: ['interfaceType'],
293
					dynamicValues: lang.hitch(this, function() {
294
						var interfaceType = form.getWidget('interfaceType').get('value');
295
						if (interfaceType === 'eth') {
296
							var available = this.get('value');
297
							return array.filter(this.physical_interfaces, function(_iface) { return array.every(available, function(item) { return item['interface'] !== _iface; }); });
298
						} else if (interfaceType === 'vlan') {
299
							return this.physical_interfaces;
300
						} else if(interfaceType === 'br' || interfaceType === 'bond' ) {
301
							var num = 0;
302
							while(array.some(array.map(this.get('value'), function(item) { return item['interface']; }), function(_iface) { return _iface == interfaceType + String(num); })) {
303
								num++;
304
							}
305
							return [ interfaceType + String(num) ];
306
						}
307
					})
308
//					type: TextBox,
309
/*					validator: lang.hitch(this, function(value) {
310
						if(!form) { return true; }
311
						var interfaceType = form.getWidget('interfaceType').get('value');
312
						var name = (interfaceType !== 'vlan' ? interfaceType : 'eth');
313
						if (interfaceType === 'eth' && !array.some(this.physical_interfaces, function(iface) { return iface === value; })) {
314
							dialog.alert(_('The interface must be one of the physical interfaces: ') + this.physical_interfaces.join(', '));
315
							return false;
316
						} else if(interfaceType === 'bond' && 2 > this.physical_interfaces.length) {
317
							dialog.alert(_('There must be at least two physical interfaces to use a bonding interface'));
318
							return false;
319
						}
320
						return new RegExp('^' + name + '[0-9]+$').test(value);
321
					})
322
*/				}],
323
//				layout: [{
324
//					label: _('Select an interface type'),
325
//					layout: ['interfaceType', 'interface']
326
//				}],
327
				layout: ['interfaceType', 'interface']
328
			});
329
330
			dialog.confirmForm({
331
				form: form,
332
				title: _('Select an interface type'),
333
				submit: _('Add interface')
334
			}).then(lang.hitch(this, function(formvals) {
335
				props = lang.mixin({create: true}, props, formvals);
336
				this._showWizard(props);
337
			}));
338
		},
339
340
		_showWizard: function(props) {
341
			var _dialog = null, wizard = null;
342
343
			var _cleanup = function() {
344
				_dialog.hide();
345
				_dialog.destroyRecursive();
346
			};
347
348
			var _finished = lang.hitch(this, function(values) {
349
				this.updateValues(values, props.create);
350
				_cleanup();
351
			});
352
	
353
			var propvals = {
354
				values: props,
355
				'interface': props['interface'],
356
				interfaceType: props.interfaceType,
357
				physical_interfaces: this.physical_interfaces,
358
				available_interfaces: this.get('value'),
359
				create: props.create,
360
				onCancel: _cleanup,
361
				onFinished: _finished
362
			};
363
			wizard = new InterfaceWizard(propvals);
364
365
			_dialog = new Dialog({
366
				title: props.create ? _('Add a network interface') : _('Edit a network interface'),
367
				content: wizard
368
			});
369
			_dialog.own(wizard);
370
			this.own(_dialog);
371
			_dialog.show();
372
		},
373
374
		_removeInterface: function(ids) {
375
			array.forEach(ids, function(iid) {
376
				var item = this.moduleStore.get(iid);
377
				if (item.interfaceType === 'bond' || item.interfaceType === 'br') {
378
					// enable the interfaces which were blocked by this interface
379
					var key = item.interfaceType === 'bond' ? 'bond-slaves' : 'bridge_ports';
380
					this.setDisabledItem(item[key], false);
381
					// re set original values
382
					array.forEach(item[key], lang.hitch(this, function(key) {
383
						var item = this.moduleStore.get(key);
384
						if (item.original) {
385
							this.moduleStore.put(item.original);
386
						}
387
					}));
388
				}
389
390
				this.moduleStore.remove(iid);
391
			}, this);
392
			this.onChanged();
393
		}
394
395
	});
396
});
(-)umc/js/setup/InterfaceWizard.js (+469 lines)
Line 0    Link Here 
1
/*
2
 * Copyright 2012 Univention GmbH
3
 *
4
 * http://www.univention.de/
5
 *
6
 * All rights reserved.
7
 *
8
 * The source code of this program is made available
9
 * under the terms of the GNU Affero General Public License version 3
10
 * (GNU AGPL V3) as published by the Free Software Foundation.
11
 *
12
 * Binary versions of this program provided by Univention to you as
13
 * well as other copyrighted, protected or trademarked materials like
14
 * Logos, graphics, fonts, specific documentations and configurations,
15
 * cryptographic keys etc. are subject to a license agreement between
16
 * you and Univention and not subject to the GNU AGPL V3.
17
 *
18
 * In the case you use this program under the terms of the GNU AGPL V3,
19
 * the program is provided in the hope that it will be useful,
20
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
 * GNU Affero General Public License for more details.
23
 *
24
 * You should have received a copy of the GNU Affero General Public
25
 * License with the Debian GNU/Linux or Univention distribution in file
26
 * /usr/share/common-licenses/AGPL-3; if not, see
27
 * <http://www.gnu.org/licenses/>.
28
 */
29
/*global define*/
30
31
define([
32
	"dojo/_base/declare",
33
	"dojo/_base/lang",
34
	"dojo/_base/array",
35
	"dojo/when",
36
	"umc/tools",
37
	"umc/dialog",
38
	"umc/widgets/Wizard",
39
	'umc/widgets/Form',
40
	'umc/widgets/MultiInput',
41
	'umc/widgets/ComboBox',
42
	'umc/widgets/TextBox',
43
	'umc/widgets/MultiSelect',
44
	'umc/widgets/CheckBox',
45
	'umc/widgets/NumberSpinner',
46
	"umc/modules/setup/types",
47
	"umc/i18n!umc/modules/uvmm"
48
], function(declare, lang, array, when, tools, dialog, Wizard, Form, MultiInput, ComboBox, TextBox, MultiSelect, CheckBox, NumberSpinner, types, _) {
49
50
	return declare("umc.modules.setup.InterfaceWizard", [ Wizard ], {
51
52
		'interface': null,
53
54
		interfaceType: null, // pre-defined interfaceType will cause a start on configuration page
55
56
		values: {},
57
58
		umcpCommand: tools.umcpCommand,
59
60
		style: 'width: 650px; height: 650px;',
61
		physical_interfaces: [], // String[] physical interfaces
62
		available_interfaces: [], // object[] the grid items
63
64
//		// do we modify or create an interface
65
//		_create: false,
66
67
		constructor: function(props) {
68
			props = props || {};
69
			this.values = props.values || {};
70
71
//			this._create = props.create;
72
73
			this['interface'] = props['interface'];
74
			this.interfaceType = props.interfaceType;
75
			this.physical_interfaces = props.physical_interfaces || [];
76
			this.available_interfaces = props.available_interfaces || [];
77
78
//			var name = (this.interfaceType !== 'vlan' ? this.interfaceType : 'eth');
79
//			if (!name || !this['interface'] || this['interface'].substr(0, name.length) !== name ) {
80
//				// name is illegal
81
//				// TODO: error handling
82
//				dialog.alert('illegal name');
83
//			}
84
85
			var ethlayout = [{
86
				label: _('IPv4 network devices'),
87
				layout: [ 'ip4dynamic', 'dhcpquery', 'ip4' ]
88
			}, {
89
				label: _('IPv6 network devices'),
90
				layout: ['ip6dynamic', 'ip6']
91
			}];
92
93
			if (this.interfaceType === 'vlan') {
94
				ethlayout.push({
95
					label: _('Global network settings'),
96
					layout: [ 'vlan_id' ]
97
				});
98
			}
99
100
			lang.mixin(this, {
101
				pages: [{
102
					// A "normal" ethernet interface
103
					name: 'eth',
104
					headerText: _('Interface configuration'),
105
					helpText: _('Configure the %s network interface %s', types.interfaceTypes[this.interfaceType], this['interface']),
106
					widgets: [{
107
						name: 'interfaceType',
108
						type: TextBox,
109
						disabled: true,
110
						visible: false,
111
						value: props.interfaceType
112
					}, {
113
						name: 'interface',
114
						type: TextBox,
115
						disabled: true,
116
						visible: false,
117
						value: props['interface'],
118
						size: 'Half',
119
						label: _('Interface')
120
					}, {
121
						name: 'type',
122
						type: ComboBox,
123
						visible: false,
124
						value: '',
125
						staticValues: [{
126
							id: '',
127
							label: ''
128
						}, {
129
							id: 'manual',
130
							label: 'manual'
131
						}]
132
					}, {
133
						name: 'start', // Autostart the interface?
134
						type: CheckBox,
135
						value: true,
136
						visible: false
137
					}, {
138
						type: MultiInput,
139
						name: 'ip4',
140
						label: '',
141
						umcpCommand: this.umcpCommand,
142
						min: 3,
143
						subtypes: [{
144
							type: TextBox,
145
							label: _('IPv4 address'),
146
							sizeClass: 'Half'
147
						}, {
148
							type: TextBox,
149
							label: _('Netmask'),
150
							value: '255.255.255.0',
151
							sizeClass: 'Half'
152
						}]
153
					}, {
154
						name: 'ip4dynamic',
155
						type: CheckBox,
156
						onChange: lang.hitch(this, function(value) {
157
							this._pages.eth._form._widgets.ip4.set('disabled', value);
158
						}),
159
						label: _('Dynamic (DHCP)')
160
					}, {
161
						type: MultiInput,
162
						name: 'ip6',
163
						label: '',
164
						umcpCommand: this.umcpCommand,
165
						subtypes: [{
166
							type: TextBox,
167
							label: _('IPv6 address'),
168
							sizeClass: 'One'
169
						}, {
170
							type: TextBox,
171
							label: _('IPv6 prefix'),
172
							sizeClass: 'OneThird'
173
						}, {
174
							type: TextBox,
175
							label: _('Identifier'),
176
							sizeClass: 'OneThird'
177
178
						}]
179
					}, {
180
						type: CheckBox,
181
						name: 'ip6dynamic',
182
						onChange: lang.hitch(this, function(value) {
183
							this._pages.eth._form._widgets.ip6.set('disabled', value);
184
						}),
185
						label: _('Autoconfiguration (SLAAC)')
186
					}, {
187
						type: CheckBox,
188
						name: 'eth_vlan',
189
						value: false,
190
						label: _('enable Virtual LAN')
191
					}, {
192
						type: NumberSpinner,
193
						name: 'vlan_id',
194
						size: 'Half',
195
						value: 2, // some machines does not support 1 // TODO: count up if exists
196
						constraints: { min: 1, max: 4096 },
197
						label: _('Virtual interface ID')
198
					}, {
199
						// required for DHCP query
200
						name: 'gateway',
201
						type: TextBox,
202
						visible: false
203
					}, {
204
						// required for DHCP query
205
						name: 'nameserver',
206
						type: MultiInput,
207
						subtypes: [{ type: TextBox }],
208
						max: 3,
209
						visible: false
210
					}],
211
					buttons: [{
212
						name: 'dhcpquery',
213
						label: 'DHCP-Query',
214
						callback: lang.hitch(this, function() { this._dhcpQuery(this['interface']); })
215
					}],
216
					layout: ethlayout
217
				}, {
218
					// A network bridge (software side switch)
219
					name: 'br',
220
					headerText: _('Bridge configuration'),
221
					helpText: _('Configure the %s network interface %s', types.interfaceTypes[this.interfaceType], this['interface']),
222
					widgets: [{
223
						// defines which interfaces should be "bridged" together.
224
						// This can also be 0 to create an interface which does not have an connection to "the outside" (e.g. wanted in virtualisation)
225
						// There can exists an unlimited amount of interfaces
226
						name: 'bridge_ports',
227
						label: _('bridge ports'),
228
						type: MultiSelect,
229
						dynamicValues: lang.hitch(this, function() {
230
							// mixin of physical interfaces and non physical which are not used by other interfaces yet
231
							return this.filterInterfaces(this.getPhysicalInterfaces(false).concat(this.getAvailableInterfaces(false)));
232
						})
233
					}, {
234
						name: 'bridge_fd',
235
						label: _('forwarding delay'),
236
						type: NumberSpinner,
237
						value: 0
238
					}],
239
					layout: [{
240
						label: _('configure the bridge interface'),
241
						layout: ['bridge_ports', 'bridge_fd']
242
					}]
243
				}, {
244
					// A bonding interface (fallback if one interface falls out)
245
					// bond multiple interfaces into one. The used interfaces are not configurable anymore
246
					name: 'bond',
247
					headerText: _('Bonding configuration'),
248
					helpText: _('Configure the %s network interface %s', types.interfaceTypes[this.interfaceType], this['interface']),
249
					widgets: [{
250
						name: 'bond-slaves',
251
						label: _('physical interfaces used for the bonding interface'),
252
						type: MultiSelect,
253
						dynamicValues: lang.hitch(this, function() {
254
							// We can only use physical interfaces for this
255
							return this.filterInterfaces(this.getPhysicalInterfaces(false));
256
						})
257
					}, {
258
						name: 'primary',
259
						label: 'primary interface',
260
						type: ComboBox,
261
						depends: ['bond-slaves'],
262
						dynamicValues: lang.hitch(this, function() {
263
							return this._pages.bond._form._widgets['bond-slaves'].get('value');
264
						})
265
					}, {
266
						name: 'bond-mode',
267
						label: _('Mode'),
268
						type: ComboBox,
269
						staticValues: [{
270
							id: 0,
271
							label: 'balance-rr (0)'
272
						}, {
273
							id: 1,
274
							label: 'active-backup (1)'
275
						}, {
276
							id: 2,
277
							label: 'balance-xor (2)'
278
						}, {
279
							id: 3,
280
							label: 'broadcast (3)'
281
						}, {
282
							id: 4,
283
							label: '802.3ad (4)'
284
						}, {
285
							id: 5,
286
							label: 'balance-tlb (5)'
287
						}, {
288
							id: 6,
289
							label: 'balance-alb (6)'
290
						}]
291
					}, {
292
						name: 'miimon',
293
						label: _('MII link monitoring frequency'),
294
						type: NumberSpinner,
295
						constraints: { min: 0 },
296
						value: 100
297
					}],
298
					layout: [{
299
						label: _('configure the bonding interface'),
300
						layout: ['bond-slaves', 'primary']
301
					}, {
302
						label: _('advanced configuration'),
303
						layout: ['bond-mode', 'miimon']
304
					}]
305
				}]
306
			});
307
308
			return this.inherited(arguments);
309
		},
310
311
		buildRendering: function() {
312
			this.inherited(arguments);
313
314
			// update visibility of widgets
315
			tools.forIn(this._pages, function(iname, ipage) {
316
				tools.forIn(ipage._form._widgets, function(iname, iwidget) {
317
					tools.forIn(types.interfaceTypes, function(typename) {
318
						// hide every widget which startswith one of the interface types but is not the setted interface type
319
						if (iname.indexOf(typename + '_') === 0) {
320
							iwidget.set('visible', typename === this.interfaceType);
321
						}
322
					}, this);
323
				}, this);
324
			}, this);
325
		},
326
327
		getAvailableInterfaces: function(format) {
328
			return array.map(this.available_interfaces, function(item) {
329
				var iface = item['interface'];
330
				if (format) {
331
					return {
332
						id: iface,
333
						label: iface
334
					};
335
				}
336
				return iface;
337
			});
338
		},
339
340
		getPhysicalInterfaces: function(format) {
341
			if (format) {
342
				return array.map(this.physical_interfaces, function(idev) {
343
					return {id: idev, label: idev};
344
				});
345
			}
346
			return lang.clone(this.physical_interfaces);
347
		},
348
349
		filterInterfaces: function(/*String[]*/ interfaces) {
350
			// filter interfaces, which are available for use (because no interface already uses one of the interface)
351
			return types.filterInterfaces(interfaces, this.available_interfaces);
352
		},
353
354
		setValues: function(values) {
355
			// set values and trigger onChange event
356
			tools.forIn(this._pages, function(pagename, page) {
357
				tools.forIn(values, function(iname, ivalue) {
358
					if (page._form._widgets[iname]) {
359
						page._form._widgets[iname].set('value', ivalue);
360
						page._form._widgets[iname]._set('value', ivalue); // FIXME: how to trigger onChange events // required?
361
					}
362
				}, this);
363
			}, this);
364
		},
365
366
		postCreate: function() {
367
			this.inherited(arguments);
368
			this.setValues(this.values);
369
		},
370
371
		startup: function() {
372
			this.inherited(arguments);
373
			// FIXME: remove this when the bug is fixed
374
			this._pages.br._form._widgets.bridge_ports.startup();
375
			this._pages.bond._form._widgets['bond-slaves'].startup();
376
		},
377
378
		canFinish: function(values) {
379
			// TODO: conflict if two bonds wants to use the same interface
380
			var valid = this.interfaceType && this['interface']; // both must be set
381
			if (!valid) {
382
				dialog.alert(_('You have to specify a valid interface and interfaceType. Please correct your input.'));
383
			}
384
385
			var interfaceType = this.interfaceType === 'vlan' ? 'eth' : this.interfaceType; // The pagename for vlan interfaces is eth
386
387
			if (!(values.ip4.length || values.ip4dynamic || values.ip6.length || values.ip6dynamic)) {
388
				dialog.alert(_('You have to specify at least one ip address or enable DHCP or SLACC.'));
389
				return false;
390
			}
391
			if (interfaceType === 'bond' && values['bond-slaves'].length < 2) {
392
				dialog.alert(_('You have to specify at least two interfaces to use for this bond device'));
393
				return false;
394
			}
395
396
			tools.forIn(this._pages[interfaceType]._form._widgets, function(iname, iwidget) {
397
				valid = valid && (!iwidget.get('visible') || (!iwidget.isValid || false !== iwidget.isValid()));
398
				return valid;
399
			}, this);
400
401
			if (!valid) {
402
				dialog.alert(_('The entered data is not valid. Please correct your input.'));
403
			}
404
			return valid;
405
		},
406
407
		next: function(pageName) {
408
			if (pageName === null) {
409
				if (this.interfaceType === 'vlan') {
410
					// The page for vlan interfaces is the same as normal eth interfaces
411
					return 'eth';
412
				}
413
				return this.interfaceType;
414
			} else if(pageName === 'br' || pageName === 'bond') {
415
				return 'eth';
416
			}
417
		},
418
419
		previous: function(pageName) {
420
			return this.interfaceType;
421
		},
422
423
		hasPrevious: function(currentPage) {
424
			return currentPage === 'eth' && (this.interfaceType === 'br' || this.interfaceType === 'bond');
425
		},
426
427
		hasNext: function(currentPage) {
428
			if (currentPage === null) {
429
				return true;
430
			}
431
			return (currentPage === 'br' || currentPage === 'bond');
432
		},
433
434
		_dhcpQuery: function(interfaceName) {
435
			// TODO: show a notice that this will change gateway and nameserver
436
			// TODO: show a progressbar and success message?
437
438
			// make sure we have an interface selected
439
			if (!interfaceName) {
440
				dialog.alert(_('Please choose a network device before querying a DHCP address.'));
441
				return;
442
			}
443
			this.standby(true);
444
			tools.umcpCommand('setup/net/dhclient', {
445
				'interface': interfaceName
446
			}).then(lang.hitch(this, function(data) {
447
				this.standby(false);
448
449
				var result = data.result;
450
				var netmask = result[interfaceName + '_netmask'];
451
				var address = result[interfaceName + '_ip'];
452
				if (!address && !netmask) {
453
					dialog.alert(_('DHCP query failed.'));
454
					return;
455
				}
456
457
				this.setValues({
458
					ip4dynamic: false, // set "Dynamic (DHCP)" to be false if it was not set
459
					ip4: [[address, netmask]],
460
					gateway: result.gateway,
461
					nameserver: [[result.nameserver_1], [result.nameserver_2], [result.nameserver_3]]
462
				});
463
			}), lang.hitch(this, function(error) {
464
				this.standby(false);
465
				dialog.alert(_('DHCP query failed.'));
466
			}));
467
		}
468
	});
469
});
(-)umc/js/setup/NetworkPage.js (-262 / +206 lines)
 Lines 32-53    Link Here 
32
	"dojo/_base/declare",
32
	"dojo/_base/declare",
33
	"dojo/_base/lang",
33
	"dojo/_base/lang",
34
	"dojo/_base/array",
34
	"dojo/_base/array",
35
	"dojo/on",
36
	"dojo/aspect",
37
	"dojo/store/Memory",
38
	"dojo/store/Observable",
39
	"dijit/Dialog",
35
	"umc/tools",
40
	"umc/tools",
36
	"umc/dialog",
41
	"umc/dialog",
42
	"umc/store",
37
	"umc/widgets/Page",
43
	"umc/widgets/Page",
38
	"umc/widgets/StandbyMixin",
44
	"umc/widgets/StandbyMixin",
39
	"umc/widgets/TextBox",
45
	"umc/widgets/TextBox",
40
	"umc/widgets/ComboBox",
46
	"umc/widgets/ComboBox",
41
	"umc/widgets/MultiInput",
47
	"umc/widgets/MultiInput",
42
	"umc/widgets/MultiSelect",
43
	"umc/widgets/Form",
48
	"umc/widgets/Form",
44
	"umc/widgets/Button",
49
	"umc/modules/setup/InterfaceWizard",
50
	"umc/modules/setup/InterfaceGrid",
51
	"umc/modules/setup/types",
45
	"umc/i18n!umc/modules/setup"
52
	"umc/i18n!umc/modules/setup"
46
], function(declare, lang, array, tools, dialog, Page, StandbyMixin, TextBox, ComboBox, MultiInput, MultiSelect, Form, Button, _) {
53
], function(declare, lang, array, on, aspect, Memory, Observable, Dialog, tools, dialog, store, Page, StandbyMixin, TextBox, ComboBox, MultiInput, Form, InterfaceWizard, InterfaceGrid, types, _) {
47
	return declare("umc.modules.setup.NetworkPage", [ Page, StandbyMixin ], {
54
	return declare("umc.modules.setup.NetworkPage", [ Page, StandbyMixin ], {
48
		// summary:
55
		// summary:
49
		//		This class renderes a detail page containing subtabs and form elements
56
		//		This class renderes a detail page containing subtabs and form elements
50
		//		in order to edit UDM objects.
57
		//		in order to edit network interfaces.
51
58
52
		// system-setup-boot
59
		// system-setup-boot
53
		wizard_mode: false,
60
		wizard_mode: false,
 Lines 56-61    Link Here 
56
		local_mode: false,
63
		local_mode: false,
57
64
58
		umcpCommand: tools.umcpCommand,
65
		umcpCommand: tools.umcpCommand,
66
		moduleStore: null,
59
67
60
		// internal reference to the formular containing all form widgets of an UDM object
68
		// internal reference to the formular containing all form widgets of an UDM object
61
		_form: null,
69
		_form: null,
 Lines 63-160    Link Here 
63
		// dicts of the original IPv4/v6 values
71
		// dicts of the original IPv4/v6 values
64
		_orgValues: null,
72
		_orgValues: null,
65
73
66
		_noteShowed: false,
67
68
		_currentRole: null,
74
		_currentRole: null,
69
75
70
		postMixInProperties: function() {
76
		physical_interfaces: [],
71
			this.inherited(arguments);
72
77
78
		postMixInProperties: function() {
73
			this.title = _('Network');
79
			this.title = _('Network');
74
			this.headerText = _('Network settings');
80
			this.headerText = _('Network settings');
75
			this.helpText = _('In the <i>network settings</i>, IP addresses (IPv4 and IPv6) as well as name servers, gateways, and HTTP proxies may be specified.');
81
			this.helpText = _('In the <i>network settings</i>, IP addresses (IPv4 and IPv6) as well as name servers, gateways, and HTTP proxies may be specified.');
82
83
			this.moduleStore = new Observable(new Memory({idProperty: 'interface'}));
84
85
			this.inherited(arguments);
76
		},
86
		},
77
87
78
		buildRendering: function() {
88
		buildRendering: function() {
79
			this.inherited(arguments);
89
			this.inherited(arguments);
80
90
81
			var widgets = [{
91
			var widgets = [{
82
				type: MultiInput,
92
				type: InterfaceGrid,
83
				name: 'interfaces_ipv4',
93
				name: 'interfaces',
84
				label: '', //_('Interfaces'),
94
				label: '',
85
				umcpCommand: this.umcpCommand,
95
				moduleStore: this.moduleStore
86
				subtypes: [{
87
					type: ComboBox,
88
					label: _('Interface'),
89
					dynamicValues: lang.hitch(this, function() {
90
						return this.umcpCommand('setup/net/interfaces').then(lang.hitch(this, function(data) {
91
							// for ipv4 interfaces, we can have a virtual one, as well
92
							var list = [];
93
							array.forEach(data.result, function(idev) {
94
								var idev2 = {
95
									id: idev + '_virtual',
96
									label: idev + ' (' + _('virtual') + ')'
97
								};
98
								list.push(idev, idev2);
99
							}, this);
100
							return list;
101
						}));
102
					}),
103
					sizeClass: 'OneThird'
104
				}, {
105
					type: TextBox,
106
					label: _('IPv4 address'),
107
					sizeClass: 'Half'
108
				}, {
109
					type: TextBox,
110
					label: _('Netmask'),
111
					sizeClass: 'Half'
112
				}, {
113
					type: ComboBox,
114
					label: _('Dynamic (DHCP)'),
115
					staticValues: [
116
						{ id: 'false', label: _('Deactivated') },
117
						{ id: 'true', label: _('Activated') }
118
					],
119
					sizeClass: 'OneThird'
120
				}, {
121
					type: Button,
122
					label: 'DHCP query',
123
					callback: lang.hitch(this, '_dhcpQuery')
124
				}]
125
			}, {
96
			}, {
126
				type: MultiInput,
97
				type: ComboBox,
127
				name: 'interfaces_ipv6',
98
				name: 'interfaces/primary',
128
				label: '', //_('Interfaces'),
99
				label: _('primary network interface'),
129
				umcpCommand: this.umcpCommand,
100
				depends: ['interfaces', 'gateway'],
130
				subtypes: [{
101
				dynamicValues: lang.hitch(this, function() {
131
					type: ComboBox,
102
					// FIXME: howto trigger dynamicValues update
132
					label: _('Interface'),
103
					// The primary interface can be of any type
133
					dynamicValues: 'setup/net/interfaces',
104
					return array.map(this._form._widgets.interfaces.get('value'), function(item) {
134
					sizeClass: 'OneThird'
105
						return {id: item['interface'], label: item['interface']};
135
				}, {
106
					});
136
					type: TextBox,
107
				})
137
					label: _('IPv6 address'),
138
					sizeClass: 'One'
139
				}, {
140
					type: TextBox,
141
					label: _('IPv6 prefix'),
142
					sizeClass: 'OneThird'
143
				}, {
144
					type: TextBox,
145
					label: _('Identifier'),
146
					sizeClass: 'OneThird'
147
148
				}]
149
			}, {
108
			}, {
150
				type: MultiSelect,
151
				name: 'dynamic_interfaces_ipv6',
152
				label: _('Autoconfiguration (SLAAC)'),
153
				umcpCommand: this.umcpCommand,
154
				dynamicValues: 'setup/net/interfaces',
155
				autoHeight: true,
156
				sizeClass: 'OneThird'
157
			}, {
158
				type: TextBox,
109
				type: TextBox,
159
				name: 'gateway',
110
				name: 'gateway',
160
				label: _('Gateway (IPv4)')
111
				label: _('Gateway (IPv4)')
 Lines 181-194    Link Here 
181
			}];
132
			}];
182
133
183
			var layout = [{
134
			var layout = [{
184
				label: _('IPv4 network devices'),
135
				label: _('IP network devices'),
185
				layout: ['interfaces_ipv4']
136
				layout: ['interfaces']
186
			}, {
137
			}, {
187
				label: _('IPv6 network devices'),
188
				layout: ['interfaces_ipv6', 'dynamic_interfaces_ipv6']
189
			}, {
190
				label: _('Global network settings'),
138
				label: _('Global network settings'),
191
				layout: [ ['gateway', 'ipv6/gateway'], 'nameserver', 'dns/forwarder', 'proxy/http']
139
				layout: [ ['gateway', 'ipv6/gateway'], 'interfaces/primary', 'nameserver', 'dns/forwarder', 'proxy/http']
192
			}];
140
			}];
193
141
194
			this._form = new Form({
142
			this._form = new Form({
 Lines 198-299    Link Here 
198
			});
146
			});
199
			this._form.on('submit', lang.hitch(this, 'onSave'));
147
			this._form.on('submit', lang.hitch(this, 'onSave'));
200
148
201
			// add onChange handlers that show the note
149
			// only show notes in an joined system in productive mode
202
			array.forEach(['interfaces_ipv4', 'interfaces_ipv6'], function(iname) {
150
			if (!this.wizard_mode) {
203
				var iwidget = this._form.getWidget(iname);
151
				// show a note if interfaces changes
204
				this.own(iwidget.watch('value', lang.hitch(this, function() {
152
				this.own(on.once(this._form._widgets.interfaces, 'changed', lang.hitch(this, function() {
205
					if (iwidget.focused) {
153
					// TODO: only show it when IP changes??
206
						this._showNote();
154
					this.addNote(_('Changing IP address configurations may result in restarting or stopping services. This can have severe side-effects when the system is in productive use at the moment.'));
207
					}
208
				})));
155
				})));
209
			}, this);
210
			
211
			this.addChild(this._form);
212
		},
213
214
		_showNote: function() {
215
			if (!this._noteShowed) {
216
				this._noteShowed = true;
217
				this.addNote(_('Changing IP address configurations may result in restarting or stopping services. This can have severe side-effects when the system is in productive use at the moment.'));
218
			}
156
			}
219
		},
220
157
221
		_dhcpQuery: function(item, idx) {
158
			// update interfaces/primary when there are changes on the interfaces
222
			// switch on standby animation
159
			this._form._widgets.interfaces.on('changed', lang.hitch(this, function() {
223
			this.standby(true);
160
				this._form._widgets['interfaces/primary'].reloadDynamicValues();
161
			}));
224
162
225
			// make sure we have an interface selected
163
			// FIXME: grid does not have .ready
226
			if (!item || !item[0] || typeof item[0] != "string") {
164
			// reload interfaces/primary when interfaces is ready
227
				dialog.alert(_('Please choose a network device before querying a DHCP address.'));
165
//			this._form._widgets.interfaces.ready().then(lang.hitch(this, function() {
228
				this.standby(false);
166
//				this._form._widgets['interfaces/primary'].reloadDynamicValues();
229
				return;
167
//			}));
230
			}
231
			if (item[0].indexOf('_virtual') >= 0) {
232
				dialog.alert(_('A virtual network device cannot be used for DHCP.'));
233
				this.standby(false);
234
				return;
235
			}
236
			this.umcpCommand('setup/net/dhclient', {
237
				'interface': item[0]
238
			}).then(lang.hitch(this, function(data) {
239
				// switch off standby animation
240
				this.standby(false);
241
168
242
				var result = data.result;
169
			this.addChild(this._form);
243
				var netmask = result[item[0] + '_netmask'];
244
				var address = result[item[0] + '_ip'];
245
				if (!address && !netmask) {
246
					dialog.alert(_('DHCP query failed.'));
247
					return;
248
				}
249
170
250
				// set the queried IP and netmask
171
			// FIXME: as the grid is a border container it has to be resized manually
251
				var devicesWidget = this._form.getWidget('interfaces_ipv4');
172
			this.own(aspect.after(this, 'resize', lang.hitch(this, function() {
252
				var val = devicesWidget.get('value');
173
					this._form._widgets.interfaces.resize();
253
				if (address) {
174
			})));
254
					val[idx][1] = address;
175
		},
255
				}
256
				if (netmask) {
257
					val[idx][2] = netmask;
258
				}
259
				// set "Dynamic (DHCP)" to be false if it was not set
260
				if ( val[idx][3] === '') {
261
					val[idx][3] = 'false';
262
				}
263
176
264
				// set gateway
177
		postCreate: function() {
265
				devicesWidget.set('value', val);
178
			this.inherited(arguments);
266
				if (result.gateway) {
179
			// The grid contains changes if a DHCP request was made
267
					var gatewayWidget = this._form.getWidget('gateway');
180
			this._form._widgets.interfaces.watch('gateway', lang.hitch(this, function(name, old, value) {
268
					gatewayWidget.set('value', result.gateway);
181
				// set gateway from dhcp request
269
				}
182
				this._form._widgets.gateway.set('value', value);
270
183
			}));
184
			this._form._widgets.interfaces.watch('nameserver', lang.hitch(this, function(name, old, value) {
271
				// read nameserver or dns/forwarder
185
				// read nameserver or dns/forwarder
272
				var nameserverWidget;
186
				var nameserverWidget;
273
				if (this._form.getWidget('nameserver').get('visible')) {
187
				if (this._form.getWidget('nameserver').get('visible')) {
274
					nameserverWidget = this._form.getWidget('nameserver');
188
					nameserverWidget = this._form.getWidget('nameserver');
275
				} else {
189
				} else {
276
					// if nameserver is not visable, set dns/forwarder
190
					// if nameserver is not visible, set dns/forwarder
277
					nameserverWidget = this._form.getWidget('dns/forwarder');
191
					nameserverWidget = this._form.getWidget('dns/forwarder');
278
				}
192
				}
279
				val = nameserverWidget.get('value');
193
				// set nameserver from dhcp request
280
				if (result.nameserver_1) {
194
				nameserverWidget.set('value', value);
281
					val[0] = result.nameserver_1;
282
				}
283
				if (result.nameserver_2) {
284
					val[1] = result.nameserver_2;
285
				}
286
				if (result.nameserver_3) {
287
					val[2] = result.nameserver_3;
288
				}
289
				nameserverWidget.set('value', val);
290
291
			}), lang.hitch(this, function() {
292
				// switch off standby animation
293
				this.standby(false);
294
			}));
195
			}));
295
		},
196
		},
296
197
198
		// TODO: reimplement
297
		sortInterfaces: function(x, y) {
199
		sortInterfaces: function(x, y) {
298
			if (x.id != y.id) {
200
			if (x.id != y.id) {
299
				// this is for ipv6 types, the id 'default' should be listed as first device
201
				// this is for ipv6 types, the id 'default' should be listed as first device
 Lines 317-326    Link Here 
317
			}
219
			}
318
			return 0;
220
			return 0;
319
		},
221
		},
320
			
222
321
		setValues: function(_vals) {
223
		setValues: function(_vals) {
322
			// save a copy of all original values that may be lists
224
			// save a copy of all original values that may be lists
323
			var r = /^(interfaces\/[^\/]+\/|nameserver[1-3]|dns\/forwarder[1-3])$/;
225
			var r = /^(interfaces\/.*|nameserver[1-3]|dns\/forwarder[1-3])$/;
324
			this._orgValues = {};
226
			this._orgValues = {};
325
			tools.forIn(_vals, function(ikey, ival) {
227
			tools.forIn(_vals, function(ikey, ival) {
326
				if (r.test(ikey)) {
228
				if (r.test(ikey)) {
 Lines 328-336    Link Here 
328
				}
230
				}
329
			}, this);
231
			}, this);
330
232
233
			// set all available interfaces
234
			this.physical_interfaces = _vals.interfaces;
235
331
			// copy values that do not change in their name
236
			// copy values that do not change in their name
332
			var vals = {};
237
			var vals = {};
333
			array.forEach(['gateway', 'ipv6/gateway', 'proxy/http'], function(ikey) {
238
			array.forEach(['gateway', 'ipv6/gateway', 'proxy/http', 'interfaces/primary'], function(ikey) {
334
				vals[ikey] = _vals[ikey];
239
				vals[ikey] = _vals[ikey];
335
			});
240
			});
336
241
 Lines 375-391    Link Here 
375
				sortedIpv4.push(ival);
280
				sortedIpv4.push(ival);
376
			});
281
			});
377
282
378
			// translate to our datastructure
379
			vals.interfaces_ipv4 = [];
380
			array.forEach(sortedIpv4, function(idev) {
381
				vals.interfaces_ipv4.push([
382
					idev.virtual ? idev.device + '_virtual' : idev.device,
383
					idev.address || '',
384
					idev.netmask || '',
385
					idev.type == 'dynamic' || idev.type == 'dhcp' ? 'true' : 'false'
386
				]);
387
			});
388
389
			// copy ipv6 interfaces
283
			// copy ipv6 interfaces
390
			r = /interfaces\/([^\/]+)\/ipv6\/([^\/]+)\/(.+)/;
284
			r = /interfaces\/([^\/]+)\/ipv6\/([^\/]+)\/(.+)/;
391
			var ipv6 = {};
285
			var ipv6 = {};
 Lines 408-420    Link Here 
408
			tools.forIn(ipv6, function(ikey, ival) {
302
			tools.forIn(ipv6, function(ikey, ival) {
409
				sortedIpv6.push(ival);
303
				sortedIpv6.push(ival);
410
			});
304
			});
411
			sortedIpv6.sort(this.sortInterfaces);
305
//			sortedIpv6.sort(this.sortInterfaces);
412
306
413
			// translate to our datastructure
307
			// translate to our datastructure
414
			vals.interfaces_ipv6 = [];
308
			var interfaces = {};
309
			vals.ip4dynamic = false;
310
			array.forEach(sortedIpv4, function(idev) {
311
				interfaces[idev.device] = interfaces[idev.device] || { 'interface': idev.device, interfaceType: types.getTypeByDevice(idev.device) };
312
				if (!idev.virtual) {
313
					interfaces[idev.device].ip4dynamic = (idev.type == 'dynamic' || idev.type == 'dhcp');
314
				}
315
				interfaces[idev.device].ip4 = interfaces[idev.device].ip4 || [];
316
				interfaces[idev.device].ip4.push([
317
					idev.address || '',
318
					idev.netmask || ''
319
				]);
320
				interfaces[idev.device].ip6 = [];
321
			});
322
323
			// translate to our datastructure
415
			array.forEach(sortedIpv6, function(idev) {
324
			array.forEach(sortedIpv6, function(idev) {
416
				vals.interfaces_ipv6.push([
325
				interfaces[idev.device] = interfaces[idev.device] || {};
417
					idev.device,
326
				interfaces[idev.device].ip6 = interfaces[idev.device].ip6 || [];
327
				interfaces[idev.device].ip6.push([
418
					idev.address || '',
328
					idev.address || '',
419
					idev.prefix || '',
329
					idev.prefix || '',
420
					idev.id || ''
330
					idev.id || ''
 Lines 423-436    Link Here 
423
333
424
			// dynamic ipv6 interfaces
334
			// dynamic ipv6 interfaces
425
			r = /interfaces\/([^\/]+)\/ipv6\/acceptRA/;
335
			r = /interfaces\/([^\/]+)\/ipv6\/acceptRA/;
426
			vals.dynamic_interfaces_ipv6 = [];
427
			array.forEach(sortedKeys, function(ikey) {
336
			array.forEach(sortedKeys, function(ikey) {
428
				var match = ikey.match(r);
337
				var match = ikey.match(r);
429
				if (tools.isTrue(_vals[ikey]) && match) {
338
				if (match) {
430
					vals.dynamic_interfaces_ipv6.push(match[1]);
339
					interfaces[match[1]].ip6dynamic = tools.isTrue(_vals[ikey]);
431
				}
340
				}
432
			});
341
			});
433
342
343
			tools.forIn(interfaces, function(device) {
344
				// hack it! the formatter does not know about itself
345
				interfaces[device].information = interfaces[device];
346
			});
347
348
			vals.interfaces = interfaces;
349
			// set all physical interfaces for the grid here, the info does not exists on grid creation
350
			this._form._widgets.interfaces.set('physical_interfaces', this.physical_interfaces);
351
434
			// only show forwarder for master, backup, and slave
352
			// only show forwarder for master, backup, and slave
435
			this._currentRole = _vals['server/role'];
353
			this._currentRole = _vals['server/role'];
436
			var showForwarder = this._currentRole == 'domaincontroller_master' || this._currentRole == 'domaincontroller_backup' || this._currentRole == 'domaincontroller_slave';
354
			var showForwarder = this._currentRole == 'domaincontroller_master' || this._currentRole == 'domaincontroller_backup' || this._currentRole == 'domaincontroller_slave';
 Lines 440-457    Link Here 
440
			this._form.getWidget('nameserver').set('visible', ! ( this.wizard_mode && this._currentRole == 'domaincontroller_master' ) );
358
			this._form.getWidget('nameserver').set('visible', ! ( this.wizard_mode && this._currentRole == 'domaincontroller_master' ) );
441
			// set values
359
			// set values
442
			this._form.setFormValues(vals);
360
			this._form.setFormValues(vals);
361
			this._form._widgets.interfaces.setInitialValue(vals.interfaces);
443
362
444
			// only show notes in an joined system in productive mode
445
			this._noteShowed = this.wizard_mode;
446
			this.clearNotes();
363
			this.clearNotes();
447
		},
364
		},
448
365
449
		getValues: function() {
366
		getValues: function() {
450
			var _vals = this._form.gatherFormValues();
367
			var _vals = this._form.get('value');
451
			var vals = {};
368
			var vals = {};
452
369
453
			// copy values that do not change in their name
370
			// copy values that do not change in their name
454
			array.forEach(['gateway', 'ipv6/gateway', 'proxy/http'], function(ikey) {
371
			array.forEach(['gateway', 'ipv6/gateway', 'proxy/http', 'interfaces/primary'], function(ikey) {
455
				vals[ikey] = _vals[ikey];
372
				vals[ikey] = _vals[ikey];
456
			});
373
			});
457
374
 Lines 462-507    Link Here 
462
				});
379
				});
463
			});
380
			});
464
381
465
			// copy ipv4 interfaces
382
			array.forEach(_vals.interfaces, function(iface) {
466
			var iipv4Virtual = {};  // counter for the virtual interfaces
383
				var iname = iface['interface'];
467
			array.forEach(_vals.interfaces_ipv4, function(ival) {
384
				if ((iface.interfaceType === 'eth' || iface.interfaceType === 'vlan') && iface.type === 'manual') {
468
				var idev = ival[0];
385
					// The device is used in a bridge or bonding
469
				var iaddress = ival[1];
386
					vals['interfaces/' + iname + '/type'] = iface.type; //assert type == manual
470
				var imask = ival[2];
387
					vals['interfaces/' + iname + '/start'] = iface.start; // assert start == false
471
				var idynamic = ival[3] == 'true';
388
					// TODO: do we have to remove ip, etc. here?
472
				var iname = idev;
389
					vals['interfaces/' + iname + '/address'] = '';
473
				if (iname.indexOf('_virtual') >= 0) {
390
					vals['interfaces/' + iname + '/netmask'] = '';
474
					if (!(idev in iipv4Virtual)) {
391
475
						// first virtual interfaces for this device
392
				} else {
476
						iipv4Virtual[idev] = 0;
393
					if (iface.interfaceType === 'br' || iface.interfaceType === 'bond') {
394
						// for bonding and bridging this must/should be set
395
						// for eth and vlan we don't want to overwrite existing settings
396
						vals['interfaces/' + iname + '/start'] = iface.start;
397
						if (iface.interfaceType === 'br') {
398
							var bp = iface.bridge_ports.length ? iface.bridge_ports.join(' ') : 'none';
399
							vals['interfaces/' + iname + '/options/1'] = 'bridge_ports ' + bp;
400
							vals['interfaces/' + iname + '/options/2'] = 'bridge_fd ' + iface.bridge_fd;
401
						} else if(iface.interfaceType === 'bond') {
402
							vals['interfaces/' + iname + '/options/1'] = 'bond-slaves ' + iface['bond-slaves'].join(' ');
403
							// FIXME TODO bond-primary ??
404
							vals['interfaces/' + iname + '/options/2'] = 'bond-mode ' + iface['bond-mode'];
405
							vals['interfaces/' + iname + '/options/3'] = 'miimon ' + iface.miimon;
406
							vals['interfaces/' + iname + '/options/4'] = 'primary ' + iface.primary;
407
						}
408
477
					}
409
					}
478
					iname = iname.replace('virtual', iipv4Virtual[idev]);
410
					if (iface.ip4.length) {
479
					++iipv4Virtual[idev]; // count up the number of virtual interfaces for this device
411
						// IPv4
480
				}
412
						array.forEach(iface.ip4, function(virtval, i) {
481
				else {
413
							var iaddress = virtval[0];
482
					// only real interfaces may use DHCP
414
							var imask = virtval[1];
483
					if (idynamic) {
415
							if (i === 0) {
416
								// IP address
417
								vals['interfaces/' + iname + '/address'] = iaddress;
418
								vals['interfaces/' + iname + '/netmask'] = imask;
419
							} else {
420
								// virtual ip adresses
421
								vals['interfaces/' + iname + '_' + (i-1) + '/address'] = iaddress;
422
								vals['interfaces/' + iname + '_' + (i-1) + '/netmask'] = imask;
423
							}
424
						});
425
					} else if (iface.ip4dynamic) {
426
						// DHCP
484
						vals['interfaces/' + iname + '/type'] = 'dynamic';
427
						vals['interfaces/' + iname + '/type'] = 'dynamic';
485
					}
428
					}
486
				}
487
				vals['interfaces/' + iname + '/address'] = iaddress;
488
				vals['interfaces/' + iname + '/netmask'] = imask;
489
			});
490
429
491
			// copy ipv6 interfaces
430
					// IPv6 SLAAC
492
			array.forEach(_vals.interfaces_ipv6, function(ival) {
431
					vals['interfaces/' + iname + '/ipv6/acceptRA'] = iface.ip6dynamic ? 'true' : 'false';
493
				var idev = ival[0];
494
				var iaddress = ival[1];
495
				var iprefix = ival[2];
496
				var iid = ival[3];
497
				vals['interfaces/' + idev + '/ipv6/' + iid + '/address'] = iaddress;
498
				vals['interfaces/' + idev + '/ipv6/' + iid + '/prefix'] = iprefix;
499
			});
500
432
501
			// dynamic ipv6 interfaces
433
					if (!iface.ip6dynamic) {
502
			//array.forEach(_vals.dynamic_interfaces_ipv6, function(idev) {
434
						// IPv6
503
			array.forEach(this._form.getWidget('dynamic_interfaces_ipv6').getAllItems(), function(iitem) {
435
						array.forEach(iface.ip6, function(ip6val) {
504
				vals['interfaces/' + iitem.id + '/ipv6/acceptRA'] = (array.indexOf(_vals.dynamic_interfaces_ipv6, iitem.id) >= 0) ? 'true' : 'false';
436
							var iaddress = ip6val[0];
437
							var iprefix = ip6val[1];
438
							var iidentifier = ip6val[2];
439
							vals['interfaces/' + iname + '/ipv6/' + iidentifier + '/address'] = iaddress;
440
							vals['interfaces/' + iname + '/ipv6/' + iidentifier + '/prefix'] = iprefix;
441
						});
442
					}
443
				}
505
			});
444
			});
506
445
507
			// add empty entries for all original entries that are not used anymore
446
			// add empty entries for all original entries that are not used anymore
 Lines 517-557    Link Here 
517
		getSummary: function() {
456
		getSummary: function() {
518
			// a list of all components with their labels
457
			// a list of all components with their labels
519
			var allInterfaces = {};
458
			var allInterfaces = {};
520
			array.forEach(this._form.getWidget('dynamic_interfaces_ipv6').getAllItems(), function(iitem) {
521
				allInterfaces[iitem.id] = iitem.label;
522
				allInterfaces[iitem.id + '_virtual'] = iitem.label + ' [' + _('virtual') + ']';
523
			}, this);
524
459
460
			allInterfaces = array.map(this._form._widgets.interfaces.get('value'), function(item) {
461
				return item['interface'];
462
			});
463
525
			// list of all IPv4 network devices
464
			// list of all IPv4 network devices
526
			var vals = this._form.gatherFormValues();
465
			var vals = this._form.get('value');
527
			var ipv4Str = '<ul>';
466
			var ipv4Str = array.map(array.filter(vals.interfaces, function(idev) {
528
			array.forEach(vals.interfaces_ipv4, function(idev) {
467
				return idev.ip4.length;
529
				if (idev[1]) {
468
			}), function(idev) {
530
					// address is given
469
				if (idev.ip4dynamic) {
531
					ipv4Str += '<li>' +
470
					return idev['interface'] + ': DHCP';
532
							idev[1] + '/' + idev[2] +
533
							' (' +
534
								allInterfaces[idev[0]] +
535
								(idev[3] == 'true' ? ', DHCP' : '') +
536
							')</li>';
537
				} else {
538
					// address is not given: must be DHCP
539
					ipv4Str += '<li>' +
540
							allInterfaces[idev[0]] + ': DHCP' +
541
							'</li>';
542
				}
471
				}
472
				return idev['interface'] + ': ' + array.map(idev.ip4, function(ip4) {
473
					// address/netmask
474
					return ip4[0] + '/' + ip4[1];
475
				}).join(', ');
543
			});
476
			});
544
			ipv4Str += '</ul>';
545
477
546
			// list of all IPv6 network devices
478
			ipv4Str = ipv4Str.length ? '<ul><li>' + ipv4Str.join('</li><li>') + '</li></ul>' : '';
547
			var ipv6Str = '<ul>';
479
548
			array.forEach(vals.interfaces_ipv6, function(idev) {
480
			var ipv6Str = array.map(array.filter(vals.interfaces, function(idev) {
549
				ipv6Str += '<li>' +
481
				return idev.ip6 && idev.ip6.length;
550
						idev[1] + ' - ' + idev[2] + '/' + idev[3] +
482
			}), function(idev) {
551
						' (' + idev[0] + ')</li>';
483
				if (idev.ip6dynamic) {
484
					return idev['interface'] + ': DHCP';
485
				}
486
				return idev['interface'] + ': ' + array.map(idev.ip6, function(ip6) {
487
					// adress - prefix/identifier
488
					return ip6[0] + ' - ' + ip6[1] + '/' + ip6[2];
489
				}).join(', '); // TODO: <br> or <li>
552
			});
490
			});
553
			ipv6Str += '</ul>';
554
491
492
			ipv6Str = ipv6Str.length ? '<ul><li>' + ipv6Str.join('</li><li>') + '</li></ul>' : '';
493
555
			// create a verbose list of all settings
494
			// create a verbose list of all settings
556
			return [{
495
			return [{
557
				variables: ['gateway'],
496
				variables: ['gateway'],
 Lines 562-572    Link Here 
562
				description: _('Gateway (IPv6)'),
501
				description: _('Gateway (IPv6)'),
563
				values: vals['ipv6/gateway']
502
				values: vals['ipv6/gateway']
564
			}, {
503
			}, {
565
				variables: [/nameserver.*/],
504
				variables: [(/nameserver.*/)],
566
				description: _('Domain name server'),
505
				description: _('Domain name server'),
567
				values: vals['nameserver'].join(', ')
506
				values: vals['nameserver'].join(', ')
568
			}, {
507
			}, {
569
				variables: [/dns\/forwarder.*/],
508
				variables: [(/dns\/forwarder.*/)],
570
				description: _('External name server'),
509
				description: _('External name server'),
571
				values: vals['dns/forwarder'].join(', ')
510
				values: vals['dns/forwarder'].join(', ')
572
			}, {
511
			}, {
 Lines 574-590    Link Here 
574
				description: _('HTTP proxy'),
513
				description: _('HTTP proxy'),
575
				values: vals['proxy/http']
514
				values: vals['proxy/http']
576
			}, {
515
			}, {
577
				variables: [/^interfaces\/[^_\/]+(_[0-9]+)?\/(?!ipv6).*/],
516
				variables: [(/^interfaces\/[^_\/]+(_[0-9]+)?\/(?!ipv6).*/)],
578
				description: _('IPv4 network devices'),
517
				description: _('IPv4 network devices'),
579
				values: ipv4Str
518
				values: ipv4Str
580
			}, {
519
			}, {
581
				variables: [/^interfaces\/[^\/]+\/ipv6\/.*\/(prefix|address)$/],
520
				variables: [(/^interfaces\/[^\/]+\/ipv6\/.*\/(prefix|address)$/)],
582
				description: _('IPv6 network devices'),
521
				description: _('IPv6 network devices'),
583
				values: ipv6Str
522
				values: ipv6Str
584
			}, {
523
			}, {
585
				variables: [/^interfaces\/[^\/]+\/ipv6\/acceptRA/],
524
				variables: ['interfaces/primary'],
586
				description: _('IPv6 interfaces with autoconfiguration (SLAAC)'),
525
				description: _('primary network interface'),
587
				values: vals['dynamic_interfaces_ipv6'].length ? vals['dynamic_interfaces_ipv6'].join(', ') : _('No device')
526
				values: vals['interfaces/primary']
527
//			}, {
528
				// FIXME
529
//				variables: [/^interfaces\/[^\/]+\/ipv6\/acceptRA/],
530
//				description: _('IPv6 interfaces with autoconfiguration (SLAAC)'),
531
//				values: vals['dynamic_interfaces_ipv6'].length ? vals['dynamic_interfaces_ipv6'].join(', ') : _('No device')
588
			}];
532
			}];
589
		},
533
		},
590
534
(-)umc/js/de.po (-141 / +291 lines)
 Lines 3-9    Link Here 
3
msgstr ""
3
msgstr ""
4
"Project-Id-Version: univention-management-console-module-setup\n"
4
"Project-Id-Version: univention-management-console-module-setup\n"
5
"Report-Msgid-Bugs-To: packages@univention.de\n"
5
"Report-Msgid-Bugs-To: packages@univention.de\n"
6
"POT-Creation-Date: 2012-08-27 15:39+0200\n"
6
"POT-Creation-Date: 2012-11-09 13:20+0100\n"
7
"PO-Revision-Date: 2012-02-20 11:34+0100\n"
7
"PO-Revision-Date: 2012-02-20 11:34+0100\n"
8
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
9
"Language-Team: LANGUAGE <LL@li.org>\n"
9
"Language-Team: LANGUAGE <LL@li.org>\n"
 Lines 12-18    Link Here 
12
"Content-Type: text/plain; charset=UTF-8\n"
12
"Content-Type: text/plain; charset=UTF-8\n"
13
"Content-Transfer-Encoding: 8bit\n"
13
"Content-Transfer-Encoding: 8bit\n"
14
14
15
#: umc/js/_setup/SystemRolePage.js:88
15
#: umc/js/setup/SystemRolePage.js:88
16
msgid ""
16
msgid ""
17
"<h2>Backup domain controller</h2>All the domain data and SSL security "
17
"<h2>Backup domain controller</h2>All the domain data and SSL security "
18
"certificates are saved as read-only copies on servers with the backup domain "
18
"certificates are saved as read-only copies on servers with the backup domain "
 Lines 26-32    Link Here 
26
"als Fallback-System des DC Master. Sollte dieser ausfallen, kann ein DC "
26
"als Fallback-System des DC Master. Sollte dieser ausfallen, kann ein DC "
27
"Backup die Rolle des DC Master dauerhaft übernehmen."
27
"Backup die Rolle des DC Master dauerhaft übernehmen."
28
28
29
#: umc/js/_setup/SystemRolePage.js:103
29
#: umc/js/setup/SystemRolePage.js:103
30
msgid ""
30
msgid ""
31
"<h2>Base system</h2>A base system is an autonomous system which is not a "
31
"<h2>Base system</h2>A base system is an autonomous system which is not a "
32
"member of the domain.A base system is thus suitable for services which are "
32
"member of the domain.A base system is thus suitable for services which are "
 Lines 38-44    Link Here 
38
"an, die außerhalb des Vertrauenskontextes der Domäne betrieben werden, etwa "
38
"an, die außerhalb des Vertrauenskontextes der Domäne betrieben werden, etwa "
39
"als Web-Server oder Firewall."
39
"als Web-Server oder Firewall."
40
40
41
#: umc/js/_setup/SystemRolePage.js:83
41
#: umc/js/setup/SystemRolePage.js:83
42
msgid ""
42
msgid ""
43
"<h2>Master domain controller</h2>A system with the master domain controller "
43
"<h2>Master domain controller</h2>A system with the master domain controller "
44
"role (DC master for short) is the primary domain controller of a UCS domain "
44
"role (DC master for short) is the primary domain controller of a UCS domain "
 Lines 54-60    Link Here 
54
"Sicherheitszertifikategespeichert. Kopien dieser Daten werden automatisch "
54
"Sicherheitszertifikategespeichert. Kopien dieser Daten werden automatisch "
55
"auf Server mit der Rolle Domänencontroller Backup übertragen."
55
"auf Server mit der Rolle Domänencontroller Backup übertragen."
56
56
57
#: umc/js/_setup/SystemRolePage.js:98
57
#: umc/js/setup/SystemRolePage.js:98
58
msgid ""
58
msgid ""
59
"<h2>Member server</h2>Member servers are server systems without a local LDAP "
59
"<h2>Member server</h2>Member servers are server systems without a local LDAP "
60
"server. Access to domain data here is performed via other servers in the "
60
"server. Access to domain data here is performed via other servers in the "
 Lines 64-70    Link Here 
64
"Server. Der Zugriff auf Domänendaten erfolgt hierbei über andere Server der "
64
"Server. Der Zugriff auf Domänendaten erfolgt hierbei über andere Server der "
65
"Domäne."
65
"Domäne."
66
66
67
#: umc/js/_setup/SystemRolePage.js:93
67
#: umc/js/setup/SystemRolePage.js:93
68
msgid ""
68
msgid ""
69
"<h2>Slave domain controller</h2>All the domain data are saved as read-only "
69
"<h2>Slave domain controller</h2>All the domain data are saved as read-only "
70
"copies on servers with the slave domain controller role (slave DC for "
70
"copies on servers with the slave domain controller role (slave DC for "
 Lines 83-89    Link Here 
83
"lastintensiver Dienste an. Ein DC Slave-System kann nicht zum DC Master "
83
"lastintensiver Dienste an. Ein DC Slave-System kann nicht zum DC Master "
84
"hochgestuft werden."
84
"hochgestuft werden."
85
85
86
#: umc/js/_setup/LanguagePage.js:67
86
#: umc/js/setup/LanguagePage.js:69
87
msgid ""
87
msgid ""
88
"<i>Language settings</i> incorporate all language relevant configurations, "
88
"<i>Language settings</i> incorporate all language relevant configurations, "
89
"such as time zone, keyboard layout, and system locales."
89
"such as time zone, keyboard layout, and system locales."
 Lines 91-154    Link Here 
91
"Die <i>Spracheinstellungen</i> beinhalten alle sprachrelevanten "
91
"Die <i>Spracheinstellungen</i> beinhalten alle sprachrelevanten "
92
"Einstellungsmöglichkeiten wie Zeitzone, Tastaturlayout und Systemsprache."
92
"Einstellungsmöglichkeiten wie Zeitzone, Tastaturlayout und Systemsprache."
93
93
94
#: umc/js/_setup/NetworkPage.js:226
94
#: umc/js/setup/BasisPage.js:101
95
msgid "A virtual network device cannot be used for DHCP."
96
msgstr "Ein virtuelles Netzwerkgerät kann nicht für DHCP benutzt werden."
97
98
#: umc/js/_setup/BasisPage.js:101
99
msgid "Access settings"
95
msgid "Access settings"
100
msgstr "Zugriffseinstellungen"
96
msgstr "Zugriffseinstellungen"
101
97
102
#: umc/js/setup.js:628
98
#: umc/js/setup.js:656
103
msgid "Account data"
99
msgid "Account data"
104
msgstr "Kontodaten"
100
msgstr "Kontodaten"
105
101
106
#: umc/js/setup.js:266 umc/js/setup.js:572 umc/js/setup.js:652
102
#: umc/js/setup/InterfaceGrid.js:356
103
msgid "Add a network interface"
104
msgstr ""
105
106
#: umc/js/setup/InterfaceGrid.js:121 umc/js/setup/InterfaceGrid.js:323
107
msgid "Add interface"
108
msgstr "Netzwerkgerät hinzufügen"
109
110
#: umc/js/setup.js:281 umc/js/setup.js:600 umc/js/setup.js:680
107
msgid "Apply changes"
111
msgid "Apply changes"
108
msgstr "Änderungen anwenden"
112
msgstr "Änderungen anwenden"
109
113
110
#: umc/js/setup.js:199
114
#: umc/js/setup.js:215
111
msgid "Apply settings"
115
msgid "Apply settings"
112
msgstr "Einstellungen anwenden"
116
msgstr "Einstellungen anwenden"
113
117
114
#: umc/js/_setup/NetworkPage.js:146
118
#: umc/js/setup/InterfaceWizard.js:169
115
msgid "Autoconfiguration (SLAAC)"
119
msgid "Autoconfiguration (SLAAC)"
116
msgstr "Automatische Konfiguration (SLAAC)"
120
msgstr "Automatische Konfiguration (SLAAC)"
117
121
118
#: umc/js/setup.js:184
122
#: umc/js/setup.js:200
119
msgid "Back"
123
msgid "Back"
120
msgstr "Zurück"
124
msgstr "Zurück"
121
125
122
#: umc/js/_setup/SystemRolePage.js:77
126
#: umc/js/setup/SystemRolePage.js:77
123
msgid "Base system"
127
msgid "Base system"
124
msgstr "Basissystem"
128
msgstr "Basissystem"
125
129
126
#: umc/js/_setup/BasisPage.js:67
130
#: umc/js/setup/BasisPage.js:67
127
msgid "Basic settings"
131
msgid "Basic settings"
128
msgstr "Basis-Einstellungen"
132
msgstr "Basis-Einstellungen"
129
133
130
#: umc/js/_setup/CertificatePage.js:105
134
#: umc/js/setup/types.js:47
135
msgid "Bonding"
136
msgstr ""
137
138
#: umc/js/setup/InterfaceWizard.js:238
139
msgid "Bonding configuration"
140
msgstr "Bonding konfiguration"
141
142
#: umc/js/setup/types.js:48
143
msgid "Bridge"
144
msgstr ""
145
146
#: umc/js/setup/InterfaceWizard.js:213
147
msgid "Bridge configuration"
148
msgstr "Bridge konfiguration"
149
150
#: umc/js/setup/CertificatePage.js:104
131
msgid "Business unit"
151
msgid "Business unit"
132
msgstr "Abteilung"
152
msgstr "Abteilung"
133
153
134
#: umc/js/setup.js:260 umc/js/setup.js:374 umc/js/setup.js:569
154
#: umc/js/setup.js:275 umc/js/setup.js:388 umc/js/setup.js:597
135
#: umc/js/setup.js:616 umc/js/setup.js:648 umc/js/_setup/BasisPage.js:255
155
#: umc/js/setup.js:644 umc/js/setup.js:676 umc/js/setup/InterfaceGrid.js:138
156
#: umc/js/setup/BasisPage.js:256
136
msgid "Cancel"
157
msgid "Cancel"
137
msgstr "Abbrechen"
158
msgstr "Abbrechen"
138
159
139
#: umc/js/_setup/LanguagePage.js:102
160
#: umc/js/setup/LanguagePage.js:111
140
msgid "Category"
161
msgid "Category"
141
msgstr "Kategorie"
162
msgstr "Kategorie"
142
163
143
#: umc/js/_setup/CertificatePage.js:69
164
#: umc/js/setup/CertificatePage.js:68
144
msgid "Certificate"
165
msgid "Certificate"
145
msgstr "Zertifikat"
166
msgstr "Zertifikat"
146
167
147
#: umc/js/_setup/CertificatePage.js:70
168
#: umc/js/setup/CertificatePage.js:69
148
msgid "Certificate settings"
169
msgid "Certificate settings"
149
msgstr "Zertifikateinstellungen"
170
msgstr "Zertifikateinstellungen"
150
171
151
#: umc/js/_setup/CertificatePage.js:149
172
#: umc/js/setup/CertificatePage.js:148
152
msgid ""
173
msgid ""
153
"Changes in the SSL certificate settings will result in generating new root "
174
"Changes in the SSL certificate settings will result in generating new root "
154
"SSL certificates. Note that this will require an update of all host "
175
"SSL certificates. Note that this will require an update of all host "
 Lines 163-169    Link Here 
163
"univention.de/1000\" target=\"_blank\">Univention Support Database</a> "
184
"univention.de/1000\" target=\"_blank\">Univention Support Database</a> "
164
"gefunden werden."
185
"gefunden werden."
165
186
166
#: umc/js/_setup/NetworkPage.js:211
187
#: umc/js/setup/NetworkPage.js:153
167
msgid ""
188
msgid ""
168
"Changing IP address configurations may result in restarting or stopping "
189
"Changing IP address configurations may result in restarting or stopping "
169
"services. This can have severe side-effects when the system is in productive "
190
"services. This can have severe side-effects when the system is in productive "
 Lines 173-259    Link Here 
173
"zur Folge haben. Dies kann ernsthafte Auswirkungen haben, sollte sich das "
194
"zur Folge haben. Dies kann ernsthafte Auswirkungen haben, sollte sich das "
174
"System im Produktiveinsatz befinden."
195
"System im Produktiveinsatz befinden."
175
196
176
#: umc/js/setup.js:251 umc/js/setup.js:255
197
#: umc/js/setup.js:266 umc/js/setup.js:270
177
msgid "Close"
198
msgid "Close"
178
msgstr "Schließen"
199
msgstr "Schließen"
179
200
180
#: umc/js/_setup/CertificatePage.js:81
201
#: umc/js/setup/CertificatePage.js:80
181
msgid "Common name for the root SSL certificate"
202
msgid "Common name for the root SSL certificate"
182
msgstr "Allgemeiner Name (common name) für das Root-SSL-Zertifikat"
203
msgstr "Allgemeiner Name (common name) für das Root-SSL-Zertifikat"
183
204
184
#: umc/js/setup.js:697
205
#: umc/js/setup.js:725
185
msgid "Configuration finished"
206
msgid "Configuration finished"
186
msgstr "Konfiguration abgeschlossen"
207
msgstr "Konfiguration abgeschlossen"
187
208
188
#: umc/js/_setup/SystemRolePage.js:107
209
#: umc/js/setup/SystemRolePage.js:107
189
msgid "Configuration of the UCS system role"
210
msgid "Configuration of the UCS system role"
190
msgstr "Konfiguration der UCS-Systemrolle"
211
msgstr "Konfiguration der UCS-Systemrolle"
191
212
192
#: umc/js/setup.js:377 umc/js/_setup/BasisPage.js:259
213
#: umc/js/setup/InterfaceWizard.js:90 umc/js/setup/InterfaceWizard.js:214
214
#: umc/js/setup/InterfaceWizard.js:239
215
#, python-format
216
msgid "Configure the %s network interface %s"
217
msgstr ""
218
219
#: umc/js/setup.js:391 umc/js/setup/BasisPage.js:260
193
msgid "Continue"
220
msgid "Continue"
194
msgstr "Fortfahren"
221
msgstr "Fortfahren"
195
222
196
#: umc/js/setup.js:764
223
#: umc/js/setup.js:792
197
msgid "Continue unjoined"
224
msgid "Continue unjoined"
198
msgstr "Ungejoint fortfahren"
225
msgstr "Ungejoint fortfahren"
199
226
200
#: umc/js/_setup/CertificatePage.js:87
227
#: umc/js/setup/CertificatePage.js:86
201
msgid "Country"
228
msgid "Country"
202
msgstr "Land"
229
msgstr "Land"
203
230
204
#: umc/js/_setup/LanguagePage.js:108
231
#: umc/js/setup/LanguagePage.js:117
205
msgid "Country code"
232
msgid "Country code"
206
msgstr "Ländercode"
233
msgstr "Ländercode"
207
234
208
#: umc/js/_setup/SystemRolePage.js:71
235
#: umc/js/setup/SystemRolePage.js:71
209
msgid "Currently selected system role"
236
msgid "Currently selected system role"
210
msgstr "Aktuell ausgewählte Systemrolle"
237
msgstr "Aktuell ausgewählte Systemrolle"
211
238
212
#: umc/js/_setup/NetworkPage.js:238
239
#: umc/js/setup/InterfaceWizard.js:438 umc/js/setup/InterfaceWizard.js:450
213
msgid "DHCP query failed."
240
msgid "DHCP query failed."
214
msgstr "DHCP-Anfrage schlug fehl."
241
msgstr "DHCP-Anfrage schlug fehl."
215
242
216
#: umc/js/_setup/LanguagePage.js:121 umc/js/_setup/LanguagePage.js:208
243
#: umc/js/setup/LanguagePage.js:140 umc/js/setup/LanguagePage.js:235
217
msgid "Default system locale"
244
msgid "Default system locale"
218
msgstr "Standard-System-Sprachdefinition"
245
msgstr "Standard-System-Sprachdefinition"
219
246
220
#: umc/js/_setup/SystemRolePage.js:74
247
#: umc/js/setup/InterfaceGrid.js:129 umc/js/setup/InterfaceGrid.js:135
248
msgid "Delete"
249
msgstr ""
250
251
#: umc/js/setup/SystemRolePage.js:74
221
msgid "Domain controller backup"
252
msgid "Domain controller backup"
222
msgstr "Domänencontroller Backup"
253
msgstr "Domänencontroller Backup"
223
254
224
#: umc/js/_setup/SystemRolePage.js:73
255
#: umc/js/setup/SystemRolePage.js:73
225
msgid "Domain controller master"
256
msgid "Domain controller master"
226
msgstr "Domänencontroller Master"
257
msgstr "Domänencontroller Master"
227
258
228
#: umc/js/_setup/SystemRolePage.js:75
259
#: umc/js/setup/SystemRolePage.js:75
229
msgid "Domain controller slave"
260
msgid "Domain controller slave"
230
msgstr "Domänencontroller Slave"
261
msgstr "Domänencontroller Slave"
231
262
232
#: umc/js/_setup/NetworkPage.js:550
263
#: umc/js/setup/NetworkPage.js:489
233
msgid "Domain name server"
264
msgid "Domain name server"
234
msgstr "Domänen-DNS-Server"
265
msgstr "Domänen-DNS-Server"
235
266
236
#: umc/js/_setup/NetworkPage.js:163
267
#: umc/js/setup/NetworkPage.js:119
237
msgid "Domain name server (max. 3)"
268
msgid "Domain name server (max. 3)"
238
msgstr "Domänen-DNS-Server (max. 3)"
269
msgstr "Domänen-DNS-Server (max. 3)"
239
270
240
#: umc/js/_setup/NetworkPage.js:112
271
#: umc/js/setup/InterfaceWizard.js:143
241
msgid "Dynamic (DHCP)"
272
msgid "Dynamic (DHCP)"
242
msgstr "Dynamisch (DHCP)"
273
msgstr "Dynamisch (DHCP)"
243
274
244
#: umc/js/_setup/CertificatePage.js:109
275
#: umc/js/setup/InterfaceGrid.js:113
276
msgid "Edit"
277
msgstr ""
278
279
#: umc/js/setup/InterfaceGrid.js:356
280
msgid "Edit a network interface"
281
msgstr ""
282
283
#: umc/js/setup/CertificatePage.js:108
245
msgid "Email address"
284
msgid "Email address"
246
msgstr "E-Mailadresse"
285
msgstr "E-Mailadresse"
247
286
248
#: umc/js/_setup/NetworkPage.js:554
287
#: umc/js/setup/types.js:45
288
msgid "Ethernet"
289
msgstr ""
290
291
#: umc/js/setup/NetworkPage.js:493
249
msgid "External name server"
292
msgid "External name server"
250
msgstr "Externer DNS-Server "
293
msgstr "Externer DNS-Server "
251
294
252
#: umc/js/_setup/NetworkPage.js:169
295
#: umc/js/setup/NetworkPage.js:125
253
msgid "External name server (max. 3)"
296
msgid "External name server (max. 3)"
254
msgstr "Externer DNS-Server "
297
msgstr "Externer DNS-Server "
255
298
256
#: umc/js/_setup/CertificatePage.js:71
299
#: umc/js/setup/CertificatePage.js:70
257
msgid ""
300
msgid ""
258
"Following the <i>certificate settings</i>, a new root certificate will be "
301
"Following the <i>certificate settings</i>, a new root certificate will be "
259
"created for the domain. Note that this step only applies to systems with the "
302
"created for the domain. Note that this step only applies to systems with the "
 Lines 263-269    Link Here 
263
"Zertifikat für die Domäne erstellt. Hinweis: Dieser Schritt ist nur auf "
306
"Zertifikat für die Domäne erstellt. Hinweis: Dieser Schritt ist nur auf "
264
"Domänencontroller Master-Systemen notwendig."
307
"Domänencontroller Master-Systemen notwendig."
265
308
266
#: umc/js/_setup/BasisPage.js:125
309
#: umc/js/setup/BasisPage.js:125
267
msgid ""
310
msgid ""
268
"For Active Directory domains the fully qualified domain name must have at "
311
"For Active Directory domains the fully qualified domain name must have at "
269
"least two dots (e.g. host.example.com). This warning is shown only once, the "
312
"least two dots (e.g. host.example.com). This warning is shown only once, the "
 Lines 274-360    Link Here 
274
"Warnung, die Einstellungen können mit dem aktuell gewählten Namen "
317
"Warnung, die Einstellungen können mit dem aktuell gewählten Namen "
275
"gespeichert werden."
318
"gespeichert werden."
276
319
277
#: umc/js/_setup/BasisPage.js:211
320
#: umc/js/setup/BasisPage.js:212
278
msgid "Fully qualified domain name"
321
msgid "Fully qualified domain name"
279
msgstr "Vollständiger Rechnername"
322
msgstr "Vollständiger Rechnername"
280
323
281
#: umc/js/_setup/BasisPage.js:77
324
#: umc/js/setup/BasisPage.js:77
282
msgid "Fully qualified domain name (e.g. master.example.com)"
325
msgid "Fully qualified domain name (e.g. master.example.com)"
283
msgstr "Vollständiger Rechnername (z.B. master.example.com)"
326
msgstr "Vollständiger Rechnername (z.B. master.example.com)"
284
327
285
#: umc/js/_setup/NetworkPage.js:154 umc/js/_setup/NetworkPage.js:542
328
#: umc/js/setup/NetworkPage.js:110 umc/js/setup/NetworkPage.js:481
286
msgid "Gateway (IPv4)"
329
msgid "Gateway (IPv4)"
287
msgstr "Gateway (IPv4)"
330
msgstr "Gateway (IPv4)"
288
331
289
#: umc/js/_setup/NetworkPage.js:158 umc/js/_setup/NetworkPage.js:546
332
#: umc/js/setup/NetworkPage.js:114 umc/js/setup/NetworkPage.js:485
290
msgid "Gateway (IPv6)"
333
msgid "Gateway (IPv6)"
291
msgstr "Gateway (IPv6)"
334
msgstr "Gateway (IPv6)"
292
335
293
#: umc/js/_setup/BasisPage.js:66
336
#: umc/js/setup/BasisPage.js:66
294
msgid "General"
337
msgid "General"
295
msgstr "Allgemein"
338
msgstr "Allgemein"
296
339
297
#: umc/js/_setup/CertificatePage.js:113
340
#: umc/js/setup/CertificatePage.js:112
298
msgid "General settings"
341
msgid "General settings"
299
msgstr "Allgemeine Einstellungen"
342
msgstr "Allgemeine Einstellungen"
300
343
301
#: umc/js/_setup/NetworkPage.js:184
344
#: umc/js/setup/InterfaceWizard.js:207 umc/js/setup/NetworkPage.js:137
302
msgid "Global network settings"
345
msgid "Global network settings"
303
msgstr "Globale Netzwerk-Einstellungen"
346
msgstr "Globale Netzwerk-Einstellungen"
304
347
305
#: umc/js/_setup/NetworkPage.js:174 umc/js/_setup/NetworkPage.js:558
348
#: umc/js/setup/NetworkPage.js:130 umc/js/setup/NetworkPage.js:497
306
msgid "HTTP proxy"
349
msgid "HTTP proxy"
307
msgstr "HTTP-Proxy"
350
msgstr "HTTP-Proxy"
308
351
309
#: umc/js/_setup/HelpPage.js:58
352
#: umc/js/setup/HelpPage.js:60
310
msgid "Help"
353
msgid "Help"
311
msgstr "Hilfe"
354
msgstr "Hilfe"
312
355
313
#: umc/js/_setup/BasisPage.js:98
356
#: umc/js/setup/BasisPage.js:98
314
msgid "Host and domain settings"
357
msgid "Host and domain settings"
315
msgstr "Rechner- und Domänen-Einstellungen"
358
msgstr "Rechner- und Domänen-Einstellungen"
316
359
317
#: umc/js/_setup/BasisPage.js:239
360
#: umc/js/setup/BasisPage.js:240
318
msgid "Hostname and windows domain may not be equal."
361
msgid "Hostname and windows domain may not be equal."
319
msgstr "Hostname und Windows-Domäne dürfen nicht gleich sein."
362
msgstr "Hostname und Windows-Domäne dürfen nicht gleich sein."
320
363
321
#: umc/js/_setup/NetworkPage.js:104
364
#: umc/js/setup/InterfaceGrid.js:81
365
msgid "IP addresses"
366
msgstr "IP-Adressen"
367
368
#: umc/js/setup/NetworkPage.js:134
369
msgid "IP network devices"
370
msgstr "IP Netzwerkgeräte"
371
372
#: umc/js/setup/InterfaceWizard.js:130
322
msgid "IPv4 address"
373
msgid "IPv4 address"
323
msgstr "IPv4-Adresse"
374
msgstr "IPv4-Adresse"
324
375
325
#: umc/js/_setup/NetworkPage.js:178 umc/js/_setup/NetworkPage.js:562
376
#: umc/js/setup/InterfaceWizard.js:201 umc/js/setup/NetworkPage.js:501
326
msgid "IPv4 network devices"
377
msgid "IPv4 network devices"
327
msgstr "IPv4-Netzwerkgeräte"
378
msgstr "IPv4-Netzwerkgeräte"
328
379
329
#: umc/js/_setup/NetworkPage.js:131
380
#: umc/js/setup/InterfaceWizard.js:151
330
msgid "IPv6 address"
381
msgid "IPv6 address"
331
msgstr "IPv6-Adresse"
382
msgstr "IPv6-Adresse"
332
383
333
#: umc/js/_setup/NetworkPage.js:570
384
#: umc/js/setup/NetworkPage.js:514
334
msgid "IPv6 interfaces with autoconfiguration (SLAAC)"
385
msgid "IPv6 interfaces with autoconfiguration (SLAAC)"
335
msgstr "IPv6-Netzwerkgeräte mit automatische Konfiguration (SLAAC)"
386
msgstr "IPv6-Netzwerkgeräte mit automatische Konfiguration (SLAAC)"
336
387
337
#: umc/js/_setup/NetworkPage.js:181 umc/js/_setup/NetworkPage.js:566
388
#: umc/js/setup/InterfaceWizard.js:204 umc/js/setup/NetworkPage.js:505
338
msgid "IPv6 network devices"
389
msgid "IPv6 network devices"
339
msgstr "IPv6-Netzwerkgeräte"
390
msgstr "IPv6-Netzwerkgeräte"
340
391
341
#: umc/js/_setup/NetworkPage.js:135
392
#: umc/js/setup/InterfaceWizard.js:155
342
msgid "IPv6 prefix"
393
msgid "IPv6 prefix"
343
msgstr "IPv6-Präfix"
394
msgstr "IPv6-Präfix"
344
395
345
#: umc/js/_setup/NetworkPage.js:139
396
#: umc/js/setup/InterfaceWizard.js:159
346
msgid "Identifier"
397
msgid "Identifier"
347
msgstr "Bezeichner"
398
msgstr "Bezeichner"
348
399
349
#: umc/js/_setup/BasisPage.js:244
400
#: umc/js/setup/BasisPage.js:245
350
msgid ""
401
msgid ""
351
"If Samba is used on this system, the length of the hostname may be at most "
402
"If Samba is used on this system, the length of the hostname may be at most "
352
"13 characters."
403
"13 characters."
353
msgstr ""
404
msgstr ""
354
"Falls Samba auf diesem System verwendet wird, darf der Hostname maximal "
405
"Falls Samba auf diesem System verwendet wird, darf der Hostname maximal 13 "
355
"13 Zeichen lang sein."
406
"Zeichen lang sein."
356
407
357
#: umc/js/_setup/SystemRolePage.js:62
408
#: umc/js/setup/SystemRolePage.js:62
358
msgid ""
409
msgid ""
359
"If the system is not part of a domain yet, the <i>system role</i> may be "
410
"If the system is not part of a domain yet, the <i>system role</i> may be "
360
"changed."
411
"changed."
 Lines 362-368    Link Here 
362
"Die <i>Systemrolle</i> des Systems kann geändert werden, solange es noch "
413
"Die <i>Systemrolle</i> des Systems kann geändert werden, solange es noch "
363
"nicht der UCS-Domäne beigetreten ist."
414
"nicht der UCS-Domäne beigetreten ist."
364
415
365
#: umc/js/_setup/NetworkPage.js:73
416
#: umc/js/setup/NetworkPage.js:80
366
msgid ""
417
msgid ""
367
"In the <i>network settings</i>, IP addresses (IPv4 and IPv6) as well as name "
418
"In the <i>network settings</i>, IP addresses (IPv4 and IPv6) as well as name "
368
"servers, gateways, and HTTP proxies may be specified."
419
"servers, gateways, and HTTP proxies may be specified."
 Lines 370-396    Link Here 
370
"In den <i>Netzwerkeinstellungen</i> können IP-Adressen (IPv4 und IPv6) sowie "
421
"In den <i>Netzwerkeinstellungen</i> können IP-Adressen (IPv4 und IPv6) sowie "
371
"DNS-Server, Gateways und HTTP-Proxy festgelegt werden."
422
"DNS-Server, Gateways und HTTP-Proxy festgelegt werden."
372
423
373
#: umc/js/_setup/HelpPage.js:80
424
#: umc/js/setup/InterfaceGrid.js:73
425
msgid "Information"
426
msgstr "Informationen"
427
428
#: umc/js/setup/HelpPage.js:82
374
msgid "Information about the initial configuration"
429
msgid "Information about the initial configuration"
375
msgstr "Informationen über die Erstkonfiguration"
430
msgstr "Informationen über die Erstkonfiguration"
376
431
377
#: umc/js/setup.js:672
432
#: umc/js/setup.js:700
378
msgid "Initialize the configuration process ..."
433
msgid "Initialize the configuration process ..."
379
msgstr "Initialisiere den Konfigurationsvorgang ..."
434
msgstr "Initialisiere den Konfigurationsvorgang ..."
380
435
381
#: umc/js/_setup/SoftwarePage.js:87
436
#: umc/js/setup/SoftwarePage.js:86
382
msgid "Installation of software components"
437
msgid "Installation of software components"
383
msgstr "Installation von Softwarekomponenten"
438
msgstr "Installation von Softwarekomponenten"
384
439
385
#: umc/js/_setup/SoftwarePage.js:77
440
#: umc/js/setup/SoftwarePage.js:76
386
msgid "Installed software components"
441
msgid "Installed software components"
387
msgstr "Installierte Softwarekomponenten"
442
msgstr "Installierte Softwarekomponenten"
388
443
389
#: umc/js/_setup/LanguagePage.js:93 umc/js/_setup/LanguagePage.js:204
444
#: umc/js/setup/LanguagePage.js:102 umc/js/setup/LanguagePage.js:231
390
msgid "Installed system locales"
445
msgid "Installed system locales"
391
msgstr "Verfügbare System-Lokalisierungen"
446
msgstr "Verfügbare System-Lokalisierungen"
392
447
393
#: umc/js/_setup/SoftwarePage.js:123
448
#: umc/js/setup/SoftwarePage.js:119
394
msgid ""
449
msgid ""
395
"Installing or removing software components may result in restarting or "
450
"Installing or removing software components may result in restarting or "
396
"stopping services. This can have severe side-effects when the system is in "
451
"stopping services. This can have severe side-effects when the system is in "
 Lines 400-418    Link Here 
400
"oder Anhalten von diversen Diensten zur Folge haben. Dies kann ernsthafte "
455
"oder Anhalten von diversen Diensten zur Folge haben. Dies kann ernsthafte "
401
"Auswirkungen haben, sollte sich das System im Produktiveinsatz befinden."
456
"Auswirkungen haben, sollte sich das System im Produktiveinsatz befinden."
402
457
403
#: umc/js/_setup/SoftwarePage.js:227
458
#: umc/js/setup/SoftwarePage.js:223
404
msgid "Installing software components"
459
msgid "Installing software components"
405
msgstr "Installation von Softwarekomponenten"
460
msgstr "Installation von Softwarekomponenten"
406
461
407
#: umc/js/_setup/NetworkPage.js:86 umc/js/_setup/NetworkPage.js:126
462
#: umc/js/setup/InterfaceGrid.js:62 umc/js/setup/InterfaceGrid.js:280
463
#: umc/js/setup/InterfaceWizard.js:104
408
msgid "Interface"
464
msgid "Interface"
409
msgstr "Netzwerkgerät"
465
msgstr "Netzwerkgerät"
410
466
411
#: umc/js/_setup/NetworkPage.js:82 umc/js/_setup/NetworkPage.js:122
467
#: umc/js/setup/InterfaceGrid.js:217
468
#, python-format
469
msgid "Interface \"%s\" already exists"
470
msgstr ""
471
472
#: umc/js/setup/InterfaceWizard.js:89
473
msgid "Interface configuration"
474
msgstr "Netzwerkgerätekonfiguration"
475
476
#: umc/js/setup/InterfaceGrid.js:245
477
msgid "Interface type"
478
msgstr "Netzwerkgerätetyp"
479
480
#: umc/js/setup/InterfaceGrid.js:94
412
msgid "Interfaces"
481
msgid "Interfaces"
413
msgstr "Netzwerkgeräte"
482
msgstr "Netzwerkgeräte"
414
483
415
#: umc/js/_setup/SoftwarePage.js:122
484
#: umc/js/setup/SoftwarePage.js:118
416
msgid ""
485
msgid ""
417
"It is not possible to mix NT and Active Directory compatible "
486
"It is not possible to mix NT and Active Directory compatible "
418
"domaincontroller. Make sure the existing UCS domain is Active Directory-"
487
"domaincontroller. Make sure the existing UCS domain is Active Directory-"
 Lines 422-428    Link Here 
422
"gleichzeitig zu verwenden. Stellen sie sicher, dass die existierende UCS-"
491
"gleichzeitig zu verwenden. Stellen sie sicher, dass die existierende UCS-"
423
"Domäne kompatibel zu Active-Directory (Samba 4) ist."
492
"Domäne kompatibel zu Active-Directory (Samba 4) ist."
424
493
425
#: umc/js/_setup/SoftwarePage.js:121
494
#: umc/js/setup/SoftwarePage.js:117
426
msgid ""
495
msgid ""
427
"It is not possible to mix NT and Active Directory compatible "
496
"It is not possible to mix NT and Active Directory compatible "
428
"domaincontroller. Make sure the existing UCS domain is NT-compatible (Samba "
497
"domaincontroller. Make sure the existing UCS domain is NT-compatible (Samba "
 Lines 432-589    Link Here 
432
"gleichzeitig zu verwenden. Stellen sie sicher, dass die existierende UCS-"
501
"gleichzeitig zu verwenden. Stellen sie sicher, dass die existierende UCS-"
433
"Domäne NT-kompatibel (Samba 3) ist."
502
"Domäne NT-kompatibel (Samba 3) ist."
434
503
435
#: umc/js/setup.js:603
504
#: umc/js/setup.js:631
436
msgid "Join"
505
msgid "Join"
437
msgstr "Join"
506
msgstr "Join"
438
507
439
#: umc/js/_setup/LanguagePage.js:82 umc/js/_setup/LanguagePage.js:200
508
#: umc/js/setup/LanguagePage.js:91 umc/js/setup/LanguagePage.js:227
440
msgid "Keyboard layout"
509
msgid "Keyboard layout"
441
msgstr "Tastaturlayout"
510
msgstr "Tastaturlayout"
442
511
443
#: umc/js/_setup/BasisPage.js:82 umc/js/_setup/BasisPage.js:215
512
#: umc/js/setup/BasisPage.js:82 umc/js/setup/BasisPage.js:216
444
msgid "LDAP base"
513
msgid "LDAP base"
445
msgstr "LDAP-Basis"
514
msgstr "LDAP-Basis"
446
515
447
#: umc/js/_setup/LanguagePage.js:65 umc/js/_setup/LanguagePage.js:106
516
#: umc/js/setup/LanguagePage.js:67 umc/js/setup/LanguagePage.js:115
448
msgid "Language"
517
msgid "Language"
449
msgstr "Sprache"
518
msgstr "Sprache"
450
519
451
#: umc/js/_setup/LanguagePage.js:105
520
#: umc/js/setup/LanguagePage.js:114
452
msgid "Language (english)"
521
msgid "Language (english)"
453
msgstr "Sprache (englisch)"
522
msgstr "Sprache (englisch)"
454
523
455
#: umc/js/_setup/LanguagePage.js:107
524
#: umc/js/setup/LanguagePage.js:116
456
msgid "Language code"
525
msgid "Language code"
457
msgstr "Sprachcode"
526
msgstr "Sprachcode"
458
527
459
#: umc/js/_setup/LanguagePage.js:66 umc/js/_setup/LanguagePage.js:133
528
#: umc/js/setup/LanguagePage.js:68 umc/js/setup/LanguagePage.js:152
460
msgid "Language settings"
529
msgid "Language settings"
461
msgstr "Spracheinstellungen"
530
msgstr "Spracheinstellungen"
462
531
463
#: umc/js/_setup/CertificatePage.js:97
532
#: umc/js/setup/CertificatePage.js:96
464
msgid "Location"
533
msgid "Location"
465
msgstr "Ort"
534
msgstr "Ort"
466
535
467
#: umc/js/_setup/CertificatePage.js:116
536
#: umc/js/setup/CertificatePage.js:115
468
msgid "Location settings"
537
msgid "Location settings"
469
msgstr "Standorteinstellungen"
538
msgstr "Standorteinstellungen"
470
539
471
#: umc/js/_setup/SystemRolePage.js:76
540
#: umc/js/setup/SystemRolePage.js:76
472
msgid "Member server"
541
msgid "Member server"
473
msgstr "Member-Server"
542
msgstr "Member-Server"
474
543
475
#: umc/js/_setup/LanguagePage.js:114
544
#: umc/js/setup/InterfaceWizard.js:258
545
msgid "Mode"
546
msgstr ""
547
548
#: umc/js/setup/LanguagePage.js:123
476
msgid "Name"
549
msgid "Name"
477
msgstr "Name"
550
msgstr "Name"
478
551
479
#: umc/js/_setup/NetworkPage.js:108
552
#: umc/js/setup/InterfaceWizard.js:134
480
msgid "Netmask"
553
msgid "Netmask"
481
msgstr "Netzmaske"
554
msgstr "Netzmaske"
482
555
483
#: umc/js/_setup/NetworkPage.js:71
556
#: umc/js/setup/NetworkPage.js:78
484
msgid "Network"
557
msgid "Network"
485
msgstr "Netzwerk"
558
msgstr "Netzwerk"
486
559
487
#: umc/js/_setup/NetworkPage.js:72
560
#: umc/js/setup/NetworkPage.js:79
488
msgid "Network settings"
561
msgid "Network settings"
489
msgstr "Netzwerk-Einstellungen"
562
msgstr "Netzwerk-Einstellungen"
490
563
491
#: umc/js/_setup/BasisPage.js:223
564
#: umc/js/setup/BasisPage.js:224
492
msgid "New root password"
565
msgid "New root password"
493
msgstr "Neues Root-Passwort"
566
msgstr "Neues Root-Passwort"
494
567
495
#: umc/js/setup.js:164
568
#: umc/js/setup.js:182
496
msgid "Next"
569
msgid "Next"
497
msgstr "Vor"
570
msgstr "Vor"
498
571
499
#: umc/js/setup.js:485
572
#: umc/js/setup.js:513
500
msgid "No changes have been made."
573
msgid "No changes have been made."
501
msgstr "Es wurden keine Änderungen vorgenommen."
574
msgstr "Es wurden keine Änderungen vorgenommen."
502
575
503
#: umc/js/_setup/NetworkPage.js:571
576
#: umc/js/setup/NetworkPage.js:515
504
msgid "No device"
577
msgid "No device"
505
msgstr "Kein Gerät"
578
msgstr "Kein Gerät"
506
579
507
#: umc/js/setup.js:719
580
#: umc/js/setup.js:747
508
msgid "Not all changes could be applied successfully:"
581
msgid "Not all changes could be applied successfully:"
509
msgstr "Nicht alle Änderungen konnten erfolgreich übernommen werden."
582
msgstr "Nicht alle Änderungen konnten erfolgreich übernommen werden."
510
583
511
#: umc/js/setup.js:723
584
#: umc/js/setup.js:751
512
msgid "Ok"
585
msgid "Ok"
513
msgstr "Ok"
586
msgstr "Ok"
514
587
515
#: umc/js/_setup/CertificatePage.js:101
588
#: umc/js/setup/CertificatePage.js:100
516
msgid "Organization"
589
msgid "Organization"
517
msgstr "Organisation"
590
msgstr "Organisation"
518
591
519
#: umc/js/_setup/CertificatePage.js:119
592
#: umc/js/setup/CertificatePage.js:118
520
msgid "Organization settings"
593
msgid "Organization settings"
521
msgstr "Einstellungen über die Organisation"
594
msgstr "Einstellungen über die Organisation"
522
595
523
#: umc/js/setup.js:599
596
#: umc/js/setup.js:627
524
msgid "Password"
597
msgid "Password"
525
msgstr "Passwort"
598
msgstr "Passwort"
526
599
527
#: umc/js/_setup/NetworkPage.js:221
600
#: umc/js/setup/InterfaceWizard.js:425
528
msgid "Please choose a network device before querying a DHCP address."
601
msgid "Please choose a network device before querying a DHCP address."
529
msgstr ""
602
msgstr ""
530
"Bitte wählen Sie ein Netzwerkgerät bevor Sie eine DHCP-Adresse anfragen."
603
"Bitte wählen Sie ein Netzwerkgerät bevor Sie eine DHCP-Adresse anfragen."
531
604
532
#: umc/js/setup.js:564
605
#: umc/js/setup/InterfaceGrid.js:134
606
#, python-format
607
msgid "Please confirm the removal of the %d selected interfaces!"
608
msgstr ""
609
610
#: umc/js/setup.js:592
533
msgid ""
611
msgid ""
534
"Please confirm to apply these changes to the system. This may take some time."
612
"Please confirm to apply these changes to the system. This may take some time."
535
msgstr ""
613
msgstr ""
536
"Bitte bestätigen Sie, dass diese Änderungen auf das System übertragen "
614
"Bitte bestätigen Sie, dass diese Änderungen auf das System übertragen "
537
"werden. Dies kann einige Zeit in Anspruch nehmen."
615
"werden. Dies kann einige Zeit in Anspruch nehmen."
538
616
539
#: umc/js/setup.js:764
617
#: umc/js/setup.js:792
540
msgid "Reconfigure, retry"
618
msgid "Reconfigure, retry"
541
msgstr "Ändern, wiederholen"
619
msgstr "Ändern, wiederholen"
542
620
543
#: umc/js/_setup/SoftwarePage.js:237
621
#: umc/js/setup/SoftwarePage.js:233
544
msgid "Removing software components"
622
msgid "Removing software components"
545
msgstr "Entfernen von Softwarekomponenten"
623
msgstr "Entfernen von Softwarekomponenten"
546
624
547
#: umc/js/setup.js:272
625
#: umc/js/setup.js:287
548
msgid "Reset"
626
msgid "Reset"
549
msgstr "Zurücksetzen"
627
msgstr "Zurücksetzen"
550
628
551
#: umc/js/_setup/BasisPage.js:94
629
#: umc/js/setup/BasisPage.js:94
552
msgid "Root password"
630
msgid "Root password"
553
msgstr "Root-Passwort"
631
msgstr "Root-Passwort"
554
632
555
#: umc/js/_setup/BasisPage.js:249
633
#: umc/js/setup/BasisPage.js:250
556
msgid "Root password empty. Continue?"
634
msgid "Root password empty. Continue?"
557
msgstr "Root-Passwort ist leer. Möchten Sie fortfahren?"
635
msgstr "Root-Passwort ist leer. Möchten Sie fortfahren?"
558
636
559
#: umc/js/_setup/CertificatePage.js:191
637
#: umc/js/setup/CertificatePage.js:190
560
msgid "SSL root certificate"
638
msgid "SSL root certificate"
561
msgstr "SSL-Root-Zertifikat"
639
msgstr "SSL-Root-Zertifikat"
562
640
563
#: umc/js/setup.js:254
641
#: umc/js/setup/InterfaceGrid.js:314 umc/js/setup/InterfaceGrid.js:322
642
msgid "Select an interface type"
643
msgstr "Auswahl des Netzwerkgerätetyp"
644
645
#: umc/js/setup.js:269
564
msgid "Should the UMC module be closed? All unsaved modification will be lost."
646
msgid "Should the UMC module be closed? All unsaved modification will be lost."
565
msgstr ""
647
msgstr ""
566
"Soll das UMC-Modul geschlossen werden? Alle nicht gespeicherten Änderungen "
648
"Soll das UMC-Modul geschlossen werden? Alle nicht gespeicherten Änderungen "
567
"gehen verloren"
649
"gehen verloren"
568
650
569
#: umc/js/_setup/SoftwarePage.js:66
651
#: umc/js/setup/SoftwarePage.js:65
570
msgid "Software"
652
msgid "Software"
571
msgstr "Software"
653
msgstr "Software"
572
654
573
#: umc/js/_setup/SoftwarePage.js:67
655
#: umc/js/setup/SoftwarePage.js:66
574
msgid "Software settings"
656
msgid "Software settings"
575
msgstr "Software-Einstellungen"
657
msgstr "Software-Einstellungen"
576
658
577
#: umc/js/_setup/CertificatePage.js:93
659
#: umc/js/setup/CertificatePage.js:92
578
msgid "State"
660
msgid "State"
579
msgstr "Bundesland"
661
msgstr "Bundesland"
580
662
581
#: umc/js/_setup/SystemRolePage.js:60 umc/js/_setup/SystemRolePage.js:61
663
#: umc/js/setup/SystemRolePage.js:60 umc/js/setup/SystemRolePage.js:61
582
#: umc/js/_setup/SystemRolePage.js:169
664
#: umc/js/setup/SystemRolePage.js:170
583
msgid "System role"
665
msgid "System role"
584
msgstr "Systemrolle"
666
msgstr "Systemrolle"
585
667
586
#: umc/js/_setup/BasisPage.js:68
668
#: umc/js/setup/BasisPage.js:68
587
msgid ""
669
msgid ""
588
"The <i>basic settings</i> define essential properties, such as host and "
670
"The <i>basic settings</i> define essential properties, such as host and "
589
"domain name, LDAP base, Windows domain name as well as the system "
671
"domain name, LDAP base, Windows domain name as well as the system "
 Lines 593-610    Link Here 
593
"und Domänenname, LDAP-Basis, Windows-Domänename und das Passwort für die "
675
"und Domänenname, LDAP-Basis, Windows-Domänename und das Passwort für die "
594
"Systemadministration (root) fest. "
676
"Systemadministration (root) fest. "
595
677
596
#: umc/js/setup.js:707 umc/js/setup.js:713
678
#: umc/js/setup.js:735 umc/js/setup.js:741
597
msgid "The changes have been applied successfully."
679
msgid "The changes have been applied successfully."
598
msgstr "Die Änderungen wurden erfolgreich übernommen."
680
msgstr "Die Änderungen wurden erfolgreich übernommen."
599
681
600
#: umc/js/setup.js:758
682
#: umc/js/setup.js:786
601
msgid ""
683
msgid ""
602
"The configuration was successful. Please confirm to complete the process."
684
"The configuration was successful. Please confirm to complete the process."
603
msgstr ""
685
msgstr ""
604
"Die Konfiguration war erfolgreich. Bitte bestätigen Sie, um den Vorgang "
686
"Die Konfiguration war erfolgreich. Bitte bestätigen Sie, um den Vorgang "
605
"abzuschließen."
687
"abzuschließen."
606
688
607
#: umc/js/setup.js:692
689
#: umc/js/setup.js:720
608
msgid ""
690
msgid ""
609
"The connection to the server could not be established after {time} seconds. "
691
"The connection to the server could not be established after {time} seconds. "
610
"This problem can occur due to a change of the IP address. In this case, "
692
"This problem can occur due to a change of the IP address. In this case, "
 Lines 616-630    Link Here 
616
"führen sein. Loggen Sie sich in diesem Fall erneut auf Univention Management "
698
"führen sein. Loggen Sie sich in diesem Fall erneut auf Univention Management "
617
"Console unter der {linkStart}neuen Adresse{linkEnd} ein."
699
"Console unter der {linkStart}neuen Adresse{linkEnd} ein."
618
700
619
#: umc/js/setup.js:558
701
#: umc/js/setup/InterfaceWizard.js:387
702
msgid "The entered data is not valid. Please correct your input."
703
msgstr ""
704
705
#: umc/js/setup.js:586
620
msgid "The following changes will be applied to the system:"
706
msgid "The following changes will be applied to the system:"
621
msgstr "Die folgenden Änderungen werden auf das System übertragen:"
707
msgstr "Die folgenden Änderungen werden auf das System übertragen:"
622
708
623
#: umc/js/setup.js:495
709
#: umc/js/setup.js:523
624
msgid "The following entries could not be validated:"
710
msgid "The following entries could not be validated:"
625
msgstr "Die folgenden Einträge konnte nicht validiert werden:"
711
msgstr "Die folgenden Einträge konnte nicht validiert werden:"
626
712
627
#: umc/js/setup.js:769
713
#: umc/js/setup/InterfaceGrid.js:304
714
msgid "The interface must be one of the physical interfaces: "
715
msgstr ""
716
717
#: umc/js/setup.js:797
628
msgid ""
718
msgid ""
629
"The settings can be changed in the UMC module \"Basic settings\" after the "
719
"The settings can be changed in the UMC module \"Basic settings\" after the "
630
"join process has been completed. Please confirm now to complete the process."
720
"join process has been completed. Please confirm now to complete the process."
 Lines 633-639    Link Here 
633
"\"Basis-Einstellungen\" geändert werden. Bitte bestätigen Sie, um den "
723
"\"Basis-Einstellungen\" geändert werden. Bitte bestätigen Sie, um den "
634
"Vorgang abzuschließen."
724
"Vorgang abzuschließen."
635
725
636
#: umc/js/setup.js:584
726
#: umc/js/setup.js:612
637
msgid ""
727
msgid ""
638
"The specified settings will be applied to the system and the system will be "
728
"The specified settings will be applied to the system and the system will be "
639
"joined into the domain. Please enter username and password of a domain "
729
"joined into the domain. Please enter username and password of a domain "
 Lines 643-649    Link Here 
643
"das System der Domäne beitreten. Bitte geben Sie dafür Benutzernamen und "
733
"das System der Domäne beitreten. Bitte geben Sie dafür Benutzernamen und "
644
"Password eines Administrator-Kontos der Domäne an."
734
"Password eines Administrator-Kontos der Domäne an."
645
735
646
#: umc/js/setup.js:645
736
#: umc/js/setup.js:673
647
msgid ""
737
msgid ""
648
"The specified settings will be applied to the system. This may take some "
738
"The specified settings will be applied to the system. This may take some "
649
"time. Please confirm to proceed."
739
"time. Please confirm to proceed."
 Lines 651-661    Link Here 
651
"Die angegebenen Einstellungen werden auf das System übertragen, dies kann "
741
"Die angegebenen Einstellungen werden auf das System übertragen, dies kann "
652
"einen Moment dauern. Bitte bestätigen Sie um fortzufahren."
742
"einen Moment dauern. Bitte bestätigen Sie um fortzufahren."
653
743
654
#: umc/js/setup.js:761
744
#: umc/js/setup.js:789
655
msgid "The system join was not successful."
745
msgid "The system join was not successful."
656
msgstr "Der Domänenbeitritt war nicht erfolgreich."
746
msgstr "Der Domänenbeitritt war nicht erfolgreich."
657
747
658
#: umc/js/setup.js:767
748
#: umc/js/setup.js:795
659
msgid ""
749
msgid ""
660
"The system join was successful, however, errors occurred while applying the "
750
"The system join was successful, however, errors occurred while applying the "
661
"configuration settings:"
751
"configuration settings:"
 Lines 663-685    Link Here 
663
"Der Domänenbeitritt war erfolgreich, allerdings sind Fehler beim Setzen der "
753
"Der Domänenbeitritt war erfolgreich, allerdings sind Fehler beim Setzen der "
664
"Konfigurationseinstellungen aufgetreten:"
754
"Konfigurationseinstellungen aufgetreten:"
665
755
666
#: umc/js/_setup/LanguagePage.js:76 umc/js/_setup/LanguagePage.js:196
756
#: umc/js/setup/InterfaceGrid.js:307
757
msgid ""
758
"There must be at least two physical interfaces to use a bonding interface"
759
msgstr ""
760
761
#: umc/js/setup/LanguagePage.js:85 umc/js/setup/LanguagePage.js:223
667
msgid "Time zone"
762
msgid "Time zone"
668
msgstr "Zeitzone"
763
msgstr "Zeitzone"
669
764
670
#: umc/js/_setup/LanguagePage.js:130
765
#: umc/js/setup/LanguagePage.js:149
671
msgid "Time zone and keyboard settings"
766
msgid "Time zone and keyboard settings"
672
msgstr "Zeitzonen- und Tastatureinstellungen"
767
msgstr "Zeitzonen- und Tastatureinstellungen"
673
768
674
#: umc/js/_setup/HelpPage.js:59
769
#: umc/js/setup/InterfaceGrid.js:66
770
msgid "Type"
771
msgstr ""
772
773
#: umc/js/setup/HelpPage.js:61
675
msgid "UCS initial configuration"
774
msgid "UCS initial configuration"
676
msgstr "UCS Erstkonfiguration"
775
msgstr "UCS Erstkonfiguration"
677
776
678
#: umc/js/setup.js:595
777
#: umc/js/setup.js:623
679
msgid "Username"
778
msgid "Username"
680
msgstr "Benutzername"
779
msgstr "Benutzername"
681
780
682
#: umc/js/_setup/SoftwarePage.js:68
781
#: umc/js/setup/SoftwarePage.js:67
683
msgid ""
782
msgid ""
684
"Via the <i>software settings</i>, particular software components may be "
783
"Via the <i>software settings</i>, particular software components may be "
685
"installed or removed."
784
"installed or removed."
 Lines 687-698    Link Here 
687
"Über die <i>Software-Einstellungen</i> können bestimmte Software-Komponenten "
786
"Über die <i>Software-Einstellungen</i> können bestimmte Software-Komponenten "
688
"installiert und deinstalliert werden."
787
"installiert und deinstalliert werden."
689
788
690
#: umc/js/_setup/BasisPage.js:88 umc/js/_setup/BasisPage.js:219
789
#: umc/js/setup/types.js:46
790
msgid "Virtual LAN"
791
msgstr "virtuelles LAN"
792
793
#: umc/js/setup/InterfaceWizard.js:181
794
msgid "Virtual interface ID"
795
msgstr "virtuelle Geräte ID"
796
797
#: umc/js/setup/BasisPage.js:88 umc/js/setup/BasisPage.js:220
691
msgid "Windows domain"
798
msgid "Windows domain"
692
msgstr "Windows-Domäne"
799
msgstr "Windows-Domäne"
693
800
694
#: umc/js/setup.js:763
801
#: umc/js/setup/InterfaceWizard.js:367
695
msgid ""
802
msgid ""
803
"You have to specify a valid interface and interfaceType. Please correct your "
804
"input."
805
msgstr ""
806
807
#: umc/js/setup/InterfaceWizard.js:373
808
msgid "You have to specify at least one ip address or enable DHCP or SLACC."
809
msgstr ""
810
811
#: umc/js/setup/InterfaceWizard.js:377
812
msgid "You have to specify at least two interfaces to use for this bond device"
813
msgstr ""
814
815
#: umc/js/setup.js:791
816
msgid ""
696
"You may return, reconfigure the settings, and retry the join process. You "
817
"You may return, reconfigure the settings, and retry the join process. You "
697
"may also continue and end the wizard leaving the system unjoined. The system "
818
"may also continue and end the wizard leaving the system unjoined. The system "
698
"can be joined later via the UMC module \"Domain join\"."
819
"can be joined later via the UMC module \"Domain join\"."
 Lines 702-711    Link Here 
702
"System ist dann nicht Teil der Domäne. Sie können es zu einem späteren "
823
"System ist dann nicht Teil der Domäne. Sie können es zu einem späteren "
703
"Zeitpunkt mit dem UMC-Modul \"Domänenbeitritt\" hinzufügen."
824
"Zeitpunkt mit dem UMC-Modul \"Domänenbeitritt\" hinzufügen."
704
825
705
#: umc/js/_setup/NetworkPage.js:94 umc/js/_setup/NetworkPage.js:514
826
#: umc/js/setup/InterfaceWizard.js:287
706
msgid "virtual"
827
msgid "advanced configuration"
707
msgstr "virtuell"
828
msgstr "erweiterte Konfiguration"
708
829
830
#: umc/js/setup/InterfaceWizard.js:284
831
msgid "configure the bonding interface"
832
msgstr ""
833
834
#: umc/js/setup/InterfaceWizard.js:231
835
msgid "configure the bridge interface"
836
msgstr ""
837
838
#: umc/js/setup/InterfaceWizard.js:174
839
msgid "enable Virtual LAN"
840
msgstr "virtuelles LAN aktivieren"
841
842
#: umc/js/setup/InterfaceWizard.js:242
843
msgid "physical interfaces used for the bonding interface"
844
msgstr ""
845
846
#: umc/js/setup/NetworkPage.js:98 umc/js/setup/NetworkPage.js:509
847
msgid "primary network interface"
848
msgstr ""
849
709
#~ msgid ""
850
#~ msgid ""
710
#~ "<h2>Base system</h2>A base system is an independent system. It is not a "
851
#~ "<h2>Base system</h2>A base system is an independent system. It is not a "
711
#~ "member of a domain and does not maintain trust relationships with other "
852
#~ "member of a domain and does not maintain trust relationships with other "
 Lines 799-804    Link Here 
799
#~ "wird nur das eigene und das öffentliche SSL-Zertifikat der Root-CA "
940
#~ "wird nur das eigene und das öffentliche SSL-Zertifikat der Root-CA "
800
#~ "vorgehalten."
941
#~ "vorgehalten."
801
942
943
#~ msgid "A virtual network device cannot be used for DHCP."
944
#~ msgstr "Ein virtuelles Netzwerkgerät kann nicht für DHCP benutzt werden."
945
802
#~ msgid "Activated"
946
#~ msgid "Activated"
803
#~ msgstr "Aktiviert"
947
#~ msgstr "Aktiviert"
804
948
 Lines 907-909    Link Here 
907
#~ msgstr ""
1051
#~ msgstr ""
908
#~ "Ihre Session sollte automatisch beendet werden. Ist dies nicht der Fall, "
1052
#~ "Ihre Session sollte automatisch beendet werden. Ist dies nicht der Fall, "
909
#~ "kann das Beenden mittels der Tastenkombination Ctrl+Q forciert werden."
1053
#~ "kann das Beenden mittels der Tastenkombination Ctrl+Q forciert werden."
1054
1055
#~ msgid "advanced configuration"
1056
#~ msgstr "Erweiterte Konfiguration"
1057
1058
#~ msgid "virtual"
1059
#~ msgstr "virtuell"
(-)umc/js/setup.js (-1 / +1 lines)
 Lines 340-346    Link Here 
340
340
341
		setValues: function(values) {
341
		setValues: function(values) {
342
			// update all pages with the given values
342
			// update all pages with the given values
343
			this._orgValues = lang.clone(values);
343
			this._orgValues = lang.clone(values); //FIXME: wrong place
344
			array.forEach(this._pages, function(ipage) {
344
			array.forEach(this._pages, function(ipage) {
345
				ipage.setValues(this._orgValues);
345
				ipage.setValues(this._orgValues);
346
			}, this);
346
			}, this);
(-)umc/python/setup/util.py (-1 / +3 lines)
 Lines 45-50    Link Here 
45
import apt
45
import apt
46
import psutil
46
import psutil
47
import csv
47
import csv
48
import imp
48
49
49
from univention.lib.i18n import Translation
50
from univention.lib.i18n import Translation
50
from univention.management.console.log import MODULE
51
from univention.management.console.log import MODULE
 Lines 54-60    Link Here 
54
if not '/lib/univention-installer/' in sys.path:
55
if not '/lib/univention-installer/' in sys.path:
55
	sys.path.append('/lib/univention-installer/')
56
	sys.path.append('/lib/univention-installer/')
56
import package_list
57
import package_list
57
import imp
58
58
59
ucr=univention.config_registry.ConfigRegistry()
59
ucr=univention.config_registry.ConfigRegistry()
60
ucr.load()
60
ucr.load()
 Lines 91-96    Link Here 
91
	'proxy/http',
91
	'proxy/http',
92
	# net: ipv6
92
	# net: ipv6
93
	'ipv6/gateway',
93
	'ipv6/gateway',
94
	'interfaces/primary',
94
	# ssl
95
	# ssl
95
	'ssl/common', 'ssl/locality', 'ssl/country', 'ssl/state',
96
	'ssl/common', 'ssl/locality', 'ssl/country', 'ssl/state',
96
	'ssl/organization', 'ssl/organizationalunit', 'ssl/email',
97
	'ssl/organization', 'ssl/organizationalunit', 'ssl/email',
 Lines 121-126    Link Here 
121
	for link_local in link_locals:
122
	for link_local in link_locals:
122
		net_values['interfaces/%s/type' % link_local] = 'dhcp'
123
		net_values['interfaces/%s/type' % link_local] = 'dhcp'
123
	values.update(net_values)
124
	values.update(net_values)
125
	values['interfaces'] = [idev['name'] for idev in detect_interfaces()]
124
126
125
	# see whether the system has been joined or not
127
	# see whether the system has been joined or not
126
	values['joined'] = os.path.exists('/var/univention-join/joined')
128
	values['joined'] = os.path.exists('/var/univention-join/joined')

Return to bug 28389