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 | 	cmd *instructions.UserCommand | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (r *UserCommand) RequiresUnpackedFS() bool { |  | ||||||
| 	return true |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.BuildArgs) error { | func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.BuildArgs) error { | ||||||
| 	logrus.Info("cmd: USER") | 	logrus.Info("cmd: USER") | ||||||
| 	u := r.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 != "" { | 	if groupStr != "" { | ||||||
| 		userStr = userStr + ":" + groupStr | 		userStr = userStr + ":" + groupStr | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -28,57 +28,42 @@ import ( | ||||||
| var userTests = []struct { | var userTests = []struct { | ||||||
| 	user        string | 	user        string | ||||||
| 	expectedUID string | 	expectedUID string | ||||||
| 	shouldError bool |  | ||||||
| }{ | }{ | ||||||
| 	{ | 	{ | ||||||
| 		user:        "root", | 		user:        "root", | ||||||
| 		expectedUID: "root", | 		expectedUID: "root", | ||||||
| 		shouldError: false, |  | ||||||
| 	}, | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		user:        "0", | 		user:        "0", | ||||||
| 		expectedUID: "0", | 		expectedUID: "0", | ||||||
| 		shouldError: false, |  | ||||||
| 	}, | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		user:        "fakeUser", | 		user:        "fakeUser", | ||||||
| 		expectedUID: "", | 		expectedUID: "fakeUser", | ||||||
| 		shouldError: true, |  | ||||||
| 	}, | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		user:        "root:root", | 		user:        "root:root", | ||||||
| 		expectedUID: "root:root", | 		expectedUID: "root:root", | ||||||
| 		shouldError: false, |  | ||||||
| 	}, | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		user:        "0:root", | 		user:        "0:root", | ||||||
| 		expectedUID: "0:root", | 		expectedUID: "0:root", | ||||||
| 		shouldError: false, |  | ||||||
| 	}, | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		user:        "root:0", | 		user:        "root:0", | ||||||
| 		expectedUID: "root:0", | 		expectedUID: "root:0", | ||||||
| 		shouldError: false, |  | ||||||
| 	}, | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		user:        "0:0", | 		user:        "0:0", | ||||||
| 		expectedUID: "0:0", | 		expectedUID: "0:0", | ||||||
| 		shouldError: false, |  | ||||||
| 	}, |  | ||||||
| 	{ |  | ||||||
| 		user:        "root:fakeGroup", |  | ||||||
| 		expectedUID: "", |  | ||||||
| 		shouldError: true, |  | ||||||
| 	}, | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		user:        "$envuser", | 		user:        "$envuser", | ||||||
| 		expectedUID: "root", | 		expectedUID: "root", | ||||||
| 		shouldError: false, |  | ||||||
| 	}, | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		user:        "root:$envgroup", | 		user:        "root:$envgroup", | ||||||
| 		expectedUID: "root:root", | 		expectedUID: "root:root", | ||||||
| 		shouldError: false, |  | ||||||
| 	}, | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -97,6 +82,6 @@ func TestUpdateUser(t *testing.T) { | ||||||
| 		} | 		} | ||||||
| 		buildArgs := dockerfile.NewBuildArgs([]string{}) | 		buildArgs := dockerfile.NewBuildArgs([]string{}) | ||||||
| 		err := cmd.ExecuteCommand(cfg, buildArgs) | 		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