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

(-)a/branches/ucs-3.2/ucs-3.2-1/base/univention-config-registry/debian/changelog (+6 lines)
 Lines 1-3    Link Here 
1
univention-config-registry (9.0.6-5) unstable; urgency=low
2
3
  * Fix atomic write to preserve old file permission (Bug #340xx)
4
5
 -- Philipp Hahn <hahn@univention.de>  Tue, 04 Mar 2014 10:52:50 +0100
6
1
univention-config-registry (9.0.6-4) unstable; urgency=low
7
univention-config-registry (9.0.6-4) unstable; urgency=low
2
8
3
  * Atomic write: Improve code and error handling (Bug #33842)
9
  * Atomic write: Improve code and error handling (Bug #33842)
(-)a/branches/ucs-3.2/ucs-3.2-1/base/univention-config-registry/python/univention/config_registry/handler.py (-2 / +11 lines)
 Lines 213-221   class ConfigHandlerDiverting(ConfigHandler): Link Here 
213
		"""Set file permissions."""
213
		"""Set file permissions."""
214
		if not to_file:
214
		if not to_file:
215
			to_file = self.to_file
215
			to_file = self.to_file
216
		elif self.to_file != to_file:
217
			try:
218
				old_stat = os.stat(self.to_file)
219
				os.chmod(to_file, old_stat.st_mode)
220
				os.chown(to_file, old_stat.st_uid, old_stat.st_gid)
221
			except EnvironmentError:
222
				pass
223
216
		if self.user or self.group or self.mode:
224
		if self.user or self.group or self.mode:
217
			if self.mode:
225
			if self.mode:
218
				os.chmod(to_file, self.mode)
226
				os.chmod(to_file, self.mode)
227
219
			if self.user and self.group:
228
			if self.user and self.group:
220
				os.chown(to_file, self.user, self.group)
229
				os.chown(to_file, self.user, self.group)
221
			elif self.user:
230
			elif self.user:
 Lines 223-229   class ConfigHandlerDiverting(ConfigHandler): Link Here 
223
			elif self.group:
232
			elif self.group:
224
				os.chown(to_file, 0, self.group)
233
				os.chown(to_file, 0, self.group)
225
		elif stat:
234
		elif stat:
226
			os.chmod(to_file, stat[0])
235
			os.chmod(to_file, stat.st_mode)
227
236
228
	def _call_silent(self, *cmd):
237
	def _call_silent(self, *cmd):
229
		"""Call command with stdin, stdout, and stderr redirected from/to
238
		"""Call command with stdin, stdout, and stderr redirected from/to
 Lines 341-347   class ConfigHandlerMultifile(ConfigHandlerDiverting): Link Here 
341
			if os.path.exists(tmp_to_file):
350
			if os.path.exists(tmp_to_file):
342
				os.unlink(tmp_to_file)
351
				os.unlink(tmp_to_file)
343
			raise
352
			raise
344
			
353
345
354
346
		if hasattr(self, 'postinst') and self.postinst:
355
		if hasattr(self, 'postinst') and self.postinst:
347
			run_module(self.postinst, 'postinst', ucr, changed)
356
			run_module(self.postinst, 'postinst', ucr, changed)
(-)a/branches/ucs-3.2/ucs-3.2-1/test/ucs-test/debian/changelog (+6 lines)
 Lines 1-3    Link Here 
1
ucs-test (4.0.161-39) unstable; urgency=low
2
3
  * 03ucr: Fix atomic commit tests to keep manual changes (Bug #340xx)
4
5
 -- Philipp Hahn <hahn@univention.de>  Tue,  4 Mar 2014 12:17:22 +0100
6
1
ucs-test (4.0.161-38) unstable; urgency=low
7
ucs-test (4.0.161-38) unstable; urgency=low
2
8
3
  * 03ucr: Add atomic commit tests (Bug #33842)
9
  * 03ucr: Add atomic commit tests (Bug #33842)
(-)a/branches/ucs-3.2/ucs-3.2-1/test/ucs-test/tests/03_ucr/51file_permissions (-54 / +62 lines)
 Lines 15-25    Link Here 
15
umask 0002
15
umask 0002
16
16
17
ID="ucs-test-33842"
17
ID="ucs-test-33842"
18
OWNER="nobody"
18
OWNER_FORCE="nobody"
19
GROUP="nogroup"
19
OWNER_TEMPLATE="daemon"
20
OWNER="root"
21
GROUP_FORCE="nogroup"
22
GROUP_TEMPLATE="daemon"
23
GROUP="root"
20
MODE_FORCE=0400
24
MODE_FORCE=0400
21
MODE_TEMPLATE=0660
25
MODE_TEMPLATE=0660
22
MODE_UMASK=$(printf "%04o" $((0666 & ~$(umask))))
26
MODE=$(printf "%04o" $((0666 & ~$(umask))))
23
27
24
main () {
28
main () {
25
	declare -i result=0
29
	declare -i result=0
 Lines 44-49   create_templates () { Link Here 
44
		rm -f "$template"
48
		rm -f "$template"
45
		touch "$template"
49
		touch "$template"
46
		chmod "$MODE_TEMPLATE" "$template"
50
		chmod "$MODE_TEMPLATE" "$template"
51
		chown "${OWNER_TEMPLATE}:${GROUP_TEMPLATE}" "$template"
47
	done
52
	done
48
}
53
}
49
register_ucr () {
54
register_ucr () {
 Lines 53-68   File: tmp/$ID-f0 Link Here 
53
58
54
Type: file
59
Type: file
55
File: tmp/$ID-f1
60
File: tmp/$ID-f1
56
User: $OWNER
61
User: $OWNER_FORCE
57
62
58
Type: file
63
Type: file
59
File: tmp/$ID-f2
64
File: tmp/$ID-f2
60
Group: $GROUP
65
Group: $GROUP_FORCE
61
66
62
Type: file
67
Type: file
63
File: tmp/$ID-f3
68
File: tmp/$ID-f3
64
User: $OWNER
69
User: $OWNER_FORCE
65
Group: $GROUP
70
Group: $GROUP_FORCE
66
71
67
Type: file
72
Type: file
68
File: tmp/$ID-f4
73
File: tmp/$ID-f4
 Lines 70-87   Mode: $MODE_FORCE Link Here 
70
75
71
Type: file
76
Type: file
72
File: tmp/$ID-f5
77
File: tmp/$ID-f5
73
User: $OWNER
78
User: $OWNER_FORCE
74
Mode: $MODE_FORCE
79
Mode: $MODE_FORCE
75
80
76
Type: file
81
Type: file
77
File: tmp/$ID-f6
82
File: tmp/$ID-f6
78
Group: $GROUP
83
Group: $GROUP_FORCE
79
Mode: $MODE_FORCE
84
Mode: $MODE_FORCE
80
85
81
Type: file
86
Type: file
82
File: tmp/$ID-f7
87
File: tmp/$ID-f7
83
User: $OWNER
88
User: $OWNER_FORCE
84
Group: $GROUP
89
Group: $GROUP_FORCE
85
Mode: $MODE_FORCE
90
Mode: $MODE_FORCE
86
91
87
Type: multifile
92
Type: multifile
 Lines 89-104   Multifile: tmp/$ID-m0 Link Here 
89
94
90
Type: multifile
95
Type: multifile
91
Multifile: tmp/$ID-m1
96
Multifile: tmp/$ID-m1
92
User: $OWNER
97
User: $OWNER_FORCE
93
98
94
Type: multifile
99
Type: multifile
95
Multifile: tmp/$ID-m2
100
Multifile: tmp/$ID-m2
96
Group: $GROUP
101
Group: $GROUP_FORCE
97
102
98
Type: multifile
103
Type: multifile
99
Multifile: tmp/$ID-m3
104
Multifile: tmp/$ID-m3
100
User: $OWNER
105
User: $OWNER_FORCE
101
Group: $GROUP
106
Group: $GROUP_FORCE
102
107
103
Type: multifile
108
Type: multifile
104
Multifile: tmp/$ID-m4
109
Multifile: tmp/$ID-m4
 Lines 106-123   Mode: $MODE_FORCE Link Here 
106
111
107
Type: multifile
112
Type: multifile
108
Multifile: tmp/$ID-m5
113
Multifile: tmp/$ID-m5
109
User: $OWNER
114
User: $OWNER_FORCE
110
Mode: $MODE_FORCE
115
Mode: $MODE_FORCE
111
116
112
Type: multifile
117
Type: multifile
113
Multifile: tmp/$ID-m6
118
Multifile: tmp/$ID-m6
114
Group: $GROUP
119
Group: $GROUP_FORCE
115
Mode: $MODE_FORCE
120
Mode: $MODE_FORCE
116
121
117
Type: multifile
122
Type: multifile
118
Multifile: tmp/$ID-m7
123
Multifile: tmp/$ID-m7
119
User: $OWNER
124
User: $OWNER_FORCE
120
Group: $GROUP
125
Group: $GROUP_FORCE
121
Mode: $MODE_FORCE
126
Mode: $MODE_FORCE
122
127
123
Type: multifile
128
Type: multifile
 Lines 125-140   Multifile: tmp/$ID-d0 Link Here 
125
130
126
Type: multifile
131
Type: multifile
127
Multifile: tmp/$ID-d1
132
Multifile: tmp/$ID-d1
128
User: $OWNER
133
User: $OWNER_FORCE
129
134
130
Type: multifile
135
Type: multifile
131
Multifile: tmp/$ID-d2
136
Multifile: tmp/$ID-d2
132
Group: $GROUP
137
Group: $GROUP_FORCE
133
138
134
Type: multifile
139
Type: multifile
135
Multifile: tmp/$ID-d3
140
Multifile: tmp/$ID-d3
136
User: $OWNER
141
User: $OWNER_FORCE
137
Group: $GROUP
142
Group: $GROUP_FORCE
138
143
139
Type: multifile
144
Type: multifile
140
Multifile: tmp/$ID-d4
145
Multifile: tmp/$ID-d4
 Lines 142-159   Mode: $MODE_FORCE Link Here 
142
147
143
Type: multifile
148
Type: multifile
144
Multifile: tmp/$ID-d5
149
Multifile: tmp/$ID-d5
145
User: $OWNER
150
User: $OWNER_FORCE
146
Mode: $MODE_FORCE
151
Mode: $MODE_FORCE
147
152
148
Type: multifile
153
Type: multifile
149
Multifile: tmp/$ID-d6
154
Multifile: tmp/$ID-d6
150
Group: $GROUP
155
Group: $GROUP_FORCE
151
Mode: $MODE_FORCE
156
Mode: $MODE_FORCE
152
157
153
Type: multifile
158
Type: multifile
154
Multifile: tmp/$ID-d7
159
Multifile: tmp/$ID-d7
155
User: $OWNER
160
User: $OWNER_FORCE
156
Group: $GROUP
161
Group: $GROUP_FORCE
157
Mode: $MODE_FORCE
162
Mode: $MODE_FORCE
158
163
159
Type: subfile
164
Type: subfile
 Lines 229-262   verify_all () { Link Here 
229
	verify_multi_file_template_with_dummy_file
234
	verify_multi_file_template_with_dummy_file
230
}
235
}
231
verify_single_file_template () {
236
verify_single_file_template () {
232
	verify "/tmp/$ID-f0" "$MODE_TEMPLATE"	root	root	# default=template_file
237
	verify "/tmp/$ID-f0" "$MODE_TEMPLATE"	"$OWNER"	"$GROUP"	# default=template_file
233
	verify "/tmp/$ID-f1" "$MODE_UMASK"	"$OWNER"	root	# owner
238
	verify "/tmp/$ID-f1" "$MODE"	"$OWNER_FORCE"	root	# owner
234
	verify "/tmp/$ID-f2" "$MODE_UMASK"	root	"$GROUP"	# group
239
	verify "/tmp/$ID-f2" "$MODE"	root	"$GROUP_FORCE"	# group
235
	verify "/tmp/$ID-f3" "$MODE_UMASK"	"$OWNER"	"$GROUP"	# owner group
240
	verify "/tmp/$ID-f3" "$MODE"	"$OWNER_FORCE"	"$GROUP_FORCE"	# owner group
236
	verify "/tmp/$ID-f4" "$MODE_FORCE"	root	root	# mode
241
	verify "/tmp/$ID-f4" "$MODE_FORCE"	"$OWNER"	"$GROUP"	# mode
237
	verify "/tmp/$ID-f5" "$MODE_FORCE"	"$OWNER"	root	# mode owner
242
	verify "/tmp/$ID-f5" "$MODE_FORCE"	"$OWNER_FORCE"	root	# mode owner
238
	verify "/tmp/$ID-f6" "$MODE_FORCE"	root	"$GROUP"	# mode group
243
	verify "/tmp/$ID-f6" "$MODE_FORCE"	root	"$GROUP_FORCE"	# mode group
239
	verify "/tmp/$ID-f7" "$MODE_FORCE"	"$OWNER"	"$GROUP"	# mode owner group
244
	verify "/tmp/$ID-f7" "$MODE_FORCE"	"$OWNER_FORCE"	"$GROUP_FORCE"	# mode owner group
240
}
245
}
241
verify_multi_file_template_without_dummy_file () {
246
verify_multi_file_template_without_dummy_file () {
242
	verify "/tmp/$ID-m0" "$MODE_UMASK"	root	root	# default=umask
247
	verify "/tmp/$ID-m0" "$MODE"	"$OWNER"	"$GROUP"	# default=umask
243
	verify "/tmp/$ID-m1" "$MODE_UMASK"	"$OWNER"	root	# owner
248
	verify "/tmp/$ID-m1" "$MODE"	"$OWNER_FORCE"	root	# owner
244
	verify "/tmp/$ID-m2" "$MODE_UMASK"	root	"$GROUP"	# group
249
	verify "/tmp/$ID-m2" "$MODE"	root	"$GROUP_FORCE"	# group
245
	verify "/tmp/$ID-m3" "$MODE_UMASK"	"$OWNER"	"$GROUP"	# owner group
250
	verify "/tmp/$ID-m3" "$MODE"	"$OWNER_FORCE"	"$GROUP_FORCE"	# owner group
246
	verify "/tmp/$ID-m4" "$MODE_FORCE"	root	root	# mode
251
	verify "/tmp/$ID-m4" "$MODE_FORCE"	"$OWNER"	"$GROUP"	# mode
247
	verify "/tmp/$ID-m5" "$MODE_FORCE"	"$OWNER"	root	# mode owner
252
	verify "/tmp/$ID-m5" "$MODE_FORCE"	"$OWNER_FORCE"	root	# mode owner
248
	verify "/tmp/$ID-m6" "$MODE_FORCE"	root	"$GROUP"	# mode group
253
	verify "/tmp/$ID-m6" "$MODE_FORCE"	root	"$GROUP_FORCE"	# mode group
249
	verify "/tmp/$ID-m7" "$MODE_FORCE"	"$OWNER" "$GROUP"	# mode owner group
254
	verify "/tmp/$ID-m7" "$MODE_FORCE"	"$OWNER_FORCE" "$GROUP_FORCE"	# mode owner group
250
}
255
}
251
verify_multi_file_template_with_dummy_file () {
256
verify_multi_file_template_with_dummy_file () {
252
	verify "/tmp/$ID-d0" "$MODE_TEMPLATE"	root	root	# default=dummy_file
257
	verify "/tmp/$ID-d0" "$MODE_TEMPLATE"	"$OWNER"	"$GROUP"	# default=dummy_file
253
	verify "/tmp/$ID-d1" "$MODE_UMASK"	"$OWNER"	root	# owner
258
	verify "/tmp/$ID-d1" "$MODE"	"$OWNER_FORCE"	root	# owner
254
	verify "/tmp/$ID-d2" "$MODE_UMASK"	root	"$GROUP"	# group
259
	verify "/tmp/$ID-d2" "$MODE"	root	"$GROUP_FORCE"	# group
255
	verify "/tmp/$ID-d3" "$MODE_UMASK"	"$OWNER"	"$GROUP"	# owner group
260
	verify "/tmp/$ID-d3" "$MODE"	"$OWNER_FORCE"	"$GROUP_FORCE"	# owner group
256
	verify "/tmp/$ID-d4" "$MODE_FORCE"	root	root	# mode
261
	verify "/tmp/$ID-d4" "$MODE_FORCE"	"$OWNER"	"$GROUP"	# mode
257
	verify "/tmp/$ID-d5" "$MODE_FORCE"	"$OWNER"	root	# mode owner
262
	verify "/tmp/$ID-d5" "$MODE_FORCE"	"$OWNER_FORCE"	root	# mode owner
258
	verify "/tmp/$ID-d6" "$MODE_FORCE"	root	"$GROUP"	# mode group
263
	verify "/tmp/$ID-d6" "$MODE_FORCE"	root	"$GROUP_FORCE"	# mode group
259
	verify "/tmp/$ID-d7" "$MODE_FORCE"	"$OWNER" "$GROUP"	# mode owner group
264
	verify "/tmp/$ID-d7" "$MODE_FORCE"	"$OWNER_FORCE" "$GROUP_FORCE"	# mode owner group
260
}
265
}
261
verify () { # $1=name $2=mode $3=owner $4=group
266
verify () { # $1=name $2=mode $3=owner $4=group
262
	local filename="$1" mode="$2" owner="$3" group="$4" IFS="	" fail=
267
	local filename="$1" mode="$2" owner="$3" group="$4" IFS="	" fail=
 Lines 275-283   verify () { # $1=name $2=mode $3=owner $4=group Link Here 
275
}
280
}
276
281
277
re_commit () {
282
re_commit () {
278
	MODE_UMASK=0664
283
	OWNER="bin"
279
	chmod "$MODE_UMASK" "/tmp/$ID-"[smd][0-7]
284
	GROUP="bin"
280
	ucr commit "/tmp/$ID-"[smd][0-7]
285
	MODE=0664
286
	chmod "$MODE" "/tmp/$ID-"[fmd][0-7]
287
	chown "${OWNER}:${GROUP}" "/tmp/$ID-"[fmd][0-7]
288
	ucr commit "/tmp/$ID-"[fmd][0-7]
281
}
289
}
282
290
283
cleanup () {
291
cleanup () {

Return to bug 34241