@@ -93,13 +93,13 @@ local_setup() {
9393 assert_line BAR=bar
9494}
9595
96- @test ' wildcard does only work at the end of the pattern' {
96+ @test ' wildcard works at the start of the pattern' {
9797 export LIMA_SHELLENV_BLOCK=" *FOO"
9898 export FOO=foo
9999 export BARFOO=barfoo
100100 run -0 limactl shell --preserve-env " $NAME " printenv
101- assert_line FOO=foo
102- assert_line BARFOO=barfoo
101+ refute_line --regexp ' ^BARFOO= '
102+ refute_line --regexp ' ^FOO= '
103103}
104104
105105@test ' block list can use a , separated list with whitespace ignored' {
@@ -114,16 +114,6 @@ local_setup() {
114114 assert_line BARBAZ=barbaz
115115}
116116
117- @test ' allow list overrides block list but blocks everything else' {
118- export LIMA_SHELLENV_ALLOW=SSH_FOO
119- export SSH_FOO=ssh_foo
120- export SSH_BAR=ssh_bar
121- export BAR=bar
122- run -0 limactl shell --preserve-env " $NAME " printenv
123- assert_line SSH_FOO=ssh_foo
124- refute_line --regexp ' ^SSH_BAR='
125- refute_line --regexp ' ^BAR='
126- }
127117
128118@test ' allow list can use a , separated list with whitespace ignored' {
129119 export LIMA_SHELLENV_ALLOW=" FOO*, , BAR"
@@ -135,16 +125,174 @@ local_setup() {
135125 assert_line FOO=foo
136126 assert_line FOOBAR=foobar
137127 assert_line BAR=bar
138- refute_line --regexp ' ^ BARBAZ='
128+ assert_line BARBAZ=barbaz
139129}
140130
141- @test ' setting both allow list and block list generates a warning' {
142- export LIMA_SHELLENV_ALLOW=FOO
143- export LIMA_SHELLENV_BLOCK=BAR
131+ @test ' wildcard works in the middle of the pattern' {
132+ export LIMA_SHELLENV_BLOCK=" FOO*BAR"
144133 export FOO=foo
145- run -0 --separate-stderr limactl shell --preserve-env " $NAME " printenv FOO
146- assert_output foo
147- assert_stderr --regexp ' level=warning msg="Both LIMA_SHELLENV_BLOCK and LIMA_SHELLENV_ALLOW are set'
134+ export FOOBAR=foobar
135+ export FOOXYZBAR=fooxyzbar
136+ export FOOBAZ=foobaz
137+ export BAZBAR=bazbar
138+ run -0 limactl shell --preserve-env " $NAME " printenv
139+ refute_line --regexp ' ^FOOBAR='
140+ refute_line --regexp ' ^FOOXYZBAR='
141+ assert_line FOO=foo
142+ assert_line FOOBAZ=foobaz
143+ assert_line BAZBAR=bazbar
144+ }
145+
146+ @test ' multiple wildcards work in complex patterns' {
147+ export LIMA_SHELLENV_BLOCK=" *FOO*BAR*"
148+ export FOO=foo
149+ export BAR=bar
150+ export FOOBAR=foobar
151+ export XFOOYBARZDOTCOM=xfooybarzdotcom
152+ export FOOBAZ=foobaz
153+ export BAZBAR=bazbar
154+ export UNRELATED=unrelated
155+ run -0 limactl shell --preserve-env " $NAME " printenv
156+ refute_line --regexp ' ^FOOBAR='
157+ refute_line --regexp ' ^XFOOYBARZDOTCOM='
158+ assert_line FOO=foo
159+ assert_line BAR=bar
160+ assert_line FOOBAZ=foobaz
161+ assert_line BAZBAR=bazbar
162+ assert_line UNRELATED=unrelated
163+ }
164+
165+ @test ' wildcards at beginning, middle, and end all work together' {
166+ export LIMA_SHELLENV_BLOCK=" *TEST*,FOO*BAR,*SUFFIX"
167+ export PREFIX_TEST_VAR=prefix_test_var
168+ export FOOBAR=foobar
169+ export FOOXYZBAR=fooxyzbar
170+ export VAR_SUFFIX=var_suffix
171+ export NORMAL_VAR=normal_var
172+ run -0 limactl shell --preserve-env " $NAME " printenv
173+ refute_line --regexp ' ^PREFIX_TEST_VAR='
174+ refute_line --regexp ' ^FOOBAR='
175+ refute_line --regexp ' ^FOOXYZBAR='
176+ refute_line --regexp ' ^VAR_SUFFIX='
177+ assert_line NORMAL_VAR=normal_var
178+ }
179+
180+ @test ' complex allow/block interaction with default block list' {
181+ export LIMA_SHELLENV_ALLOW=" SSH_FOO,CUSTOM*"
182+ export LIMA_SHELLENV_BLOCK=" +*TOKEN"
183+ export SSH_FOO=ssh_foo
184+ export SSH_BAR=ssh_bar
185+ export CUSTOM_VAR=custom_var
186+ export MY_TOKEN=my_token
187+ export NORMAL_VAR=normal_var
188+ run -0 limactl shell --preserve-env " $NAME " printenv
189+ assert_line SSH_FOO=ssh_foo
190+ refute_line --regexp ' ^SSH_BAR='
191+ assert_line CUSTOM_VAR=custom_var
192+ refute_line --regexp ' ^MY_TOKEN='
193+ assert_line NORMAL_VAR=normal_var
194+ }
195+
196+ @test ' allow list with * block list blocks everything not explicitly allowed' {
197+ export LIMA_SHELLENV_ALLOW=" FOO,BAR*"
198+ export LIMA_SHELLENV_BLOCK=" *"
199+ export FOO=foo
200+ export BAR=bar
201+ export BARBAZ=barbaz
202+ export OTHER_VAR=other_var
203+ run -0 limactl shell --preserve-env " $NAME " printenv
204+ assert_line FOO=foo
205+ assert_line BAR=bar
206+ assert_line BARBAZ=barbaz
207+ refute_line --regexp ' ^OTHER_VAR='
208+ }
209+
210+ @test ' allow list supports wildcards in all positions' {
211+ export LIMA_SHELLENV_ALLOW=" *PREFIX,MIDDLE*PATTERN,SUFFIX*"
212+ export LIMA_SHELLENV_BLOCK=" *"
213+ export TEST_PREFIX=test_prefix
214+ export MIDDLE_TEST_PATTERN=middle_test_pattern
215+ export SUFFIX_TEST=suffix_test
216+ export OTHER=other
217+ run -0 limactl shell --preserve-env " $NAME " printenv
218+ assert_line TEST_PREFIX=test_prefix
219+ assert_line MIDDLE_TEST_PATTERN=middle_test_pattern
220+ assert_line SUFFIX_TEST=suffix_test
221+ refute_line --regexp ' ^OTHER='
222+ }
223+
224+ @test ' invalid characters in patterns cause fatal errors' {
225+ export LIMA_SHELLENV_BLOCK=" FOO-BAR"
226+ run ! limactl shell --preserve-env " $NAME " printenv
227+ assert_output --partial " Invalid LIMA_SHELLENV_BLOCK pattern"
228+ assert_output --partial " contains invalid character"
229+ }
230+
231+ @test ' allow list with wildcards allows only matching patterns' {
232+ export LIMA_SHELLENV_ALLOW=" FOO*,BAR"
233+ export FOO=foo
234+ export FOOBAR=foobar
235+ export BAR=bar
236+ export BARBAZ=barbaz
237+ export OTHER_VAR=OTHER_VAR
238+ run -0 limactl shell --preserve-env " $NAME " printenv
239+ assert_line FOO=foo
240+ assert_line FOOBAR=foobar
241+ assert_line BAR=bar
242+ assert_line BARBAZ=barbaz
243+ assert_line OTHER_VAR=OTHER_VAR
244+ }
245+
246+ @test ' allow list overrides block list entries but block list still applies to others' {
247+ export LIMA_SHELLENV_BLOCK=" FOO,*TOKEN"
248+ export FOO=foo
249+ export MY_TOKEN=my_token
250+ export SECRET_TOKEN=secret_token
251+ export OTHER_VAR=other_var
252+ run -0 limactl shell --preserve-env " $NAME " printenv
253+ refute_line --regexp ' ^FOO='
254+ refute_line --regexp ' ^MY_TOKEN='
255+ refute_line --regexp ' ^SECRET_TOKEN='
256+ assert_line OTHER_VAR=other_var
257+ }
258+
259+ @test ' allow/block interaction with default block list' {
260+ export LIMA_SHELLENV_ALLOW=" SSH_FOO,CUSTOM*"
261+ export LIMA_SHELLENV_BLOCK=" +*TOKEN"
262+ export SSH_FOO=ssh_foo
263+ export SSH_BAR=ssh_bar
264+ export CUSTOM_VAR=custom_var
265+ export MY_TOKEN=my_token
266+ export NORMAL_VAR=normal_var
267+ run -0 limactl shell --preserve-env " $NAME " printenv
268+ assert_line SSH_FOO=ssh_foo
269+ refute_line --regexp ' ^SSH_BAR='
270+ assert_line CUSTOM_VAR=custom_var
271+ refute_line --regexp ' ^MY_TOKEN='
272+ assert_line NORMAL_VAR=normal_var
273+ }
274+
275+ @test ' universal block list blocks everything' {
276+ export LIMA_SHELLENV_BLOCK=" *"
277+ export FOO=foo
278+ export BAR=bar
279+ export OTHER_VAR=other_var
280+ run -0 limactl shell --preserve-env " $NAME " printenv
281+ refute_line --regexp ' ^FOO='
282+ refute_line --regexp ' ^BAR='
283+ refute_line --regexp ' ^OTHER_VAR='
284+ }
285+
286+ @test ' universal block list blocks everything but with an allow' {
287+ export LIMA_SHELLENV_BLOCK=" *"
288+ export LIMA_SHELLENV_ALLOW=" FOO*"
289+ export FOO=foo
290+ export BAR=bar
291+ export OTHER_VAR=other_var
292+ run -0 limactl shell --preserve-env " $NAME " printenv
293+ assert_line FOO=foo
294+ refute_line --regexp ' ^BAR='
295+ refute_line --regexp ' ^OTHER_VAR='
148296}
149297
150298@test ' limactl info includes the default block list' {
0 commit comments