Bug #287

Bug με το Piston και τον αριθμό ορισμάτων στις κλήσεις POST, PUT, DELETE

Added by Constantinos Venetsanopoulos over 11 years ago. Updated over 11 years ago.

Status:Closed Start date:03/15/2011
Priority:High Due date:
Assignee:Giorgos Verigakis % Done:

0%

Category:Cyclades API Spent time: -
Target version:-

Description

Καθώς τεστάριζα με fuzzy δεδομένα τον {Server,Image}MetadataHandler βρήκα ότι:
όταν μία από τις τέσσερις μεθόδους GET, POST, PUT, DELETE έχει παραπάνω ορίσματα από τις υπόλοιπες τότε οι μέθοδοι με τα λιγότερα ορίσματα πρέπει να αρχικοποιούν κατάλληλα και τις υπόλοιπες μεταβλητές ακόμη και αν δεν τις χρησιμοποιούν. Αυτό συμβαίνει γιατί σε περίπτωση που μία μέθοδος του handler (read, create, update, delete) πάρει request που στο URL δίνονται παραπάνω (ή και λιγότερα) ορίσματα από αυτά που υπάρχουν στον ορισμό της, καταλήγουμε σε Piston crash report:

Το bug επηρεάζει όλους τους handlers που έχουν γραφεί μέχρι τώρα, γι' αυτό παρακαλώ διορθώστε τον κώδικα άμεσα. Για τη διόρθωση δείτε πώς παρακάμπτεται το bug στον {Server,Image}MetadataHandler. Χρειάζεται αρχικοποίηση όλων των μεταβλητών σε όλες τις μεθόδους και κατάλληλος έλεγχος στην αρχή της κάθε μίας.

Το bug μπορείτε να το κάνετε replicate, π.χ. στην δημιουργία ενός VM ώς εξής:

cven@store67:~/synnefo$ curl -i -X POST http://okeanos.grnet.gr:8000/api/v1.0/servers/45 -H "Content-Type: application/json" -d '{"metadata":{"kernel":"2.6.37"}}'
HTTP/1.0 400 BAD REQUEST
Date: Tue, 15 Mar 2011 11:13:25 GMT
Server: WSGIServer/0.1 Python/2.6.6
Vary: Authorization, Accept-Language, Cookie
Content-Type: text/plain
Content-Language: en-us

Piston/0.2.2 (Django 1.2.4) crash report:

Method signature does not match.

Resource does not expect any parameters.

Exception was: create() got an unexpected keyword argument 'id'cven@store67:~/synnefo$


Related issues

related to Synnefo - Bug #301: Sanitization του API, αφαίρεση του Piston, έλεγχος συμμόρ... Closed 03/18/2011 04/06/2011

Associated revisions

Revision d8e50a39
Added by Giorgos Verigakis over 11 years ago

Move to OpenStack API v1.1

  • Removes piston dependency.
  • Adds dateutil dependency.

Fixes #183 - Implement /servers
Fixes #185 - Implement /images
Fixes #245 - Details in exception handlers
Fixes #249 - Metadata handling
Fixes #253 - Transition to OpenStack API v1.1
Fixes #255 - Fix XML for addresses
Fixes #287 - Piston related bug
Fixes #289 - Support both XML and JSON
Fixes #309 - GUI not refreshing
Fixes #339 - Support API extensions
Fixes #359 - action returns serviceUnavailable
Fixes #361 - return dates with timezones
Refs #301 - Sanitization of API
Refs #315 - Replace API v1.1

History

#1 Updated by Markos Gogoulos over 11 years ago

Πολύ ενδιαφέρον! Κάνεις fuzzing με κάποιο framework ή με δικό σου εργαλείο?

Στον ServerMetadataHandler αρχικοποιείς μόνο το key και όχι το id. Δεν είμαι σίγουρος αν προτείνεις αρχικοποίηση του id σε όλους τους handlers ή κάτι άλλο...

class ServerMetadataHandler(BaseHandler):
  def read(self, request, id, key=None):

#2 Updated by Constantinos Venetsanopoulos over 11 years ago

Χωρίς framework ούτε εργαλείο μέχρι τώρα, by hand.

To id δεν χρειάζεται αρχικοποίηση γιατί υπάρχει σίγουρα. Αν δεν υπήρχε δεν θα είχε τρέξει καν ο συγκεκριμένος handler (δες urls.py).
Αυτό που λέω είναι ότι επειδή δεν θες το Piston να κάνει handle τα bad requests και να παίρνεις Piston crash report πρέπει με κάποιο τρόπο να είσαι σίγουρος ότι τα ορίσματα που παίρνει η read, create, update, delete καλύπτουν όλες τις περιπτώσεις που μπορεί να έρθουν από το URL. Άρα θα πρέπει να είναι σε θέση ο κώδικας να χειριστεί παραπάνω ορίσματα που του ήρθαν λανθασμένα.

#3 Updated by Markos Gogoulos over 11 years ago

  • Status changed from Assigned to Feedback

Έγινε στους handlers που περιείχαν ορίσματα (serveraddress, imagemetadata, servermetadata)

76c8e33d443a64b5a5180012ffd47dd4ca702cb8

#4 Updated by Constantinos Venetsanopoulos over 11 years ago

Δεν αρκεί μόνο εκεί. Χρειάζεται παντού. Ας πούμε στην create() του ServerHandler που έχει δύο μόνο ορίσματα, αν κάνω POST api/v1.0/servers/3 θα πετάξει πάλι το ίδιο γιατί στην create θεωρεί δεδομένο ότι θα πάρει: POST api/v1.0/servers.

Μην αλλάξεις τίποτα ακόμα γι'αυτό το bug γιατί θέλω να το συζητήσω και με το φαίδωνα.
Θα ενημερώσω εδώ.

#5 Updated by Vangelis Koukis over 11 years ago

  • Status changed from Feedback to Assigned
  • Assignee changed from Markos Gogoulos to Giorgos Verigakis

Αυτό ουσιαστικά το έφτιαξε ο [verigak], τον βάζω owner για να το κλείσει όταν τελειώσει με το #301.

#6 Updated by Vangelis Koukis over 11 years ago

  • Status changed from Assigned to Closed

Η εξάρτηση από το Piston αφαιρέθηκε, το κλείνω.

Also available in: Atom PDF