Skip to content

chef-zero does not validate the format of cookbook directory names when using versioned cookbooks mode #80

@danielsdeleo

Description

@danielsdeleo

I had previously uploaded some cookbooks to my chef-zero repo with zero in single cookbook version mode and then I switched to versioned cookbooks mode (I was using knife serve to run zero and a custom script to upload cookbooks, but my debugging doesn't indicate this was an issue with my script). When trying to list cookbooks, chef-zero returned a 500 with the following error:

ERROR: internal server error
Response: Exception raised!  #<ArgumentError: Malformed version number string omnibus>
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/rubygems/version.rb:191:in `initialize'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/endpoints/cookbooks_base.rb:44:in `new'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/endpoints/cookbooks_base.rb:44:in `block (2 levels) in filter_cookbooks'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/endpoints/cookbooks_base.rb:44:in `each'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/endpoints/cookbooks_base.rb:44:in `sort_by'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/endpoints/cookbooks_base.rb:44:in `block in filter_cookbooks'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/endpoints/cookbooks_base.rb:38:in `each'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/endpoints/cookbooks_base.rb:38:in `filter_cookbooks'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/endpoints/cookbooks_base.rb:13:in `format_cookbooks_list'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/endpoints/cookbooks_endpoint.rb:15:in `get'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/rest_base.rb:29:in `call'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/rest_router.rb:23:in `call'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/chef-zero-2.2/lib/chef_zero/server.rb:443:in `block in app'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `call'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `service'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
/Users/ddeleo/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'

Adding some debugging output to chef-zero (by editing the gem directly) it appears that chef-zero had parsed the directory name as a cookbook name of "" (empty string) and a version of "omnibus" (the directory's name).

{:cookbook_list=>
  {""=>["omnibus"],
  # other stuff that doesn't matter

It would be cool if chef-zero validated the directory names and returned a nice error message when invalid ones are present.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions