Fix USER handling. There were two issues: (#600)
- We were validating usernames/groupnames existed in etc/passwd. Docker does not do this - We were incorrectly caching USER commands. This was fixed automatically by fixing the first part.
This commit is contained in:
		
							parent
							
								
									969321521e
								
							
						
					
					
						commit
						9912ccbf8d
					
				|  | @ -0,0 +1,17 @@ | |||
| # Copyright 2018 Google, Inc. All rights reserved. | ||||
| # | ||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| # you may not use this file except in compliance with the License. | ||||
| # You may obtain a copy of the License at | ||||
| # | ||||
| #     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| # Unless required by applicable law or agreed to in writing, software | ||||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | ||||
| 
 | ||||
| FROM gcr.io/google-appengine/debian9@sha256:1d6a9a6d106bd795098f60f4abb7083626354fa6735e81743c7f8cfca11259f0 | ||||
| USER testuser:testgroup | ||||
| 
 | ||||
|  | @ -31,10 +31,6 @@ type UserCommand struct { | |||
| 	cmd *instructions.UserCommand | ||||
| } | ||||
| 
 | ||||
| func (r *UserCommand) RequiresUnpackedFS() bool { | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.BuildArgs) error { | ||||
| 	logrus.Info("cmd: USER") | ||||
| 	u := r.cmd.User | ||||
|  | @ -52,11 +48,6 @@ func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bu | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	_, _, err = util.GetUserFromUsername(userStr, groupStr) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if groupStr != "" { | ||||
| 		userStr = userStr + ":" + groupStr | ||||
| 	} | ||||
|  |  | |||
|  | @ -28,57 +28,42 @@ import ( | |||
| var userTests = []struct { | ||||
| 	user        string | ||||
| 	expectedUID string | ||||
| 	shouldError bool | ||||
| }{ | ||||
| 	{ | ||||
| 		user:        "root", | ||||
| 		expectedUID: "root", | ||||
| 		shouldError: false, | ||||
| 	}, | ||||
| 	{ | ||||
| 		user:        "0", | ||||
| 		expectedUID: "0", | ||||
| 		shouldError: false, | ||||
| 	}, | ||||
| 	{ | ||||
| 		user:        "fakeUser", | ||||
| 		expectedUID: "", | ||||
| 		shouldError: true, | ||||
| 		expectedUID: "fakeUser", | ||||
| 	}, | ||||
| 	{ | ||||
| 		user:        "root:root", | ||||
| 		expectedUID: "root:root", | ||||
| 		shouldError: false, | ||||
| 	}, | ||||
| 	{ | ||||
| 		user:        "0:root", | ||||
| 		expectedUID: "0:root", | ||||
| 		shouldError: false, | ||||
| 	}, | ||||
| 	{ | ||||
| 		user:        "root:0", | ||||
| 		expectedUID: "root:0", | ||||
| 		shouldError: false, | ||||
| 	}, | ||||
| 	{ | ||||
| 		user:        "0:0", | ||||
| 		expectedUID: "0:0", | ||||
| 		shouldError: false, | ||||
| 	}, | ||||
| 	{ | ||||
| 		user:        "root:fakeGroup", | ||||
| 		expectedUID: "", | ||||
| 		shouldError: true, | ||||
| 	}, | ||||
| 	{ | ||||
| 		user:        "$envuser", | ||||
| 		expectedUID: "root", | ||||
| 		shouldError: false, | ||||
| 	}, | ||||
| 	{ | ||||
| 		user:        "root:$envgroup", | ||||
| 		expectedUID: "root:root", | ||||
| 		shouldError: false, | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
|  | @ -97,6 +82,6 @@ func TestUpdateUser(t *testing.T) { | |||
| 		} | ||||
| 		buildArgs := dockerfile.NewBuildArgs([]string{}) | ||||
| 		err := cmd.ExecuteCommand(cfg, buildArgs) | ||||
| 		testutil.CheckErrorAndDeepEqual(t, test.shouldError, err, test.expectedUID, cfg.User) | ||||
| 		testutil.CheckErrorAndDeepEqual(t, false, err, test.expectedUID, cfg.User) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue