ReviewerMeeting20090422
summary
- barry to find mentor for noodles
- deryck to do mentored js reviews
- discussed importfascist and security wrapping policy, gary_poster to take discussion to the ml
- barry to document any decisions in wiki
logs
AMEU
Apr 22 10:02:24 <barry> #startmeeting Apr 22 10:02:25 <MootBot> Meeting started at 09:02. The chair is barry. Apr 22 10:02:25 <MootBot> Commands Available: [TOPIC], [IDEA], [ACTION], [AGREED], [LINK], [VOTE] Apr 22 10:02:30 * jtv (n=jtv@125.25.141.156.adsl.dynamic.totbb.net) has joined #launchpad-meeting Apr 22 10:02:37 <barry> hello everyone and welcome to this week's ameu reviewers meeting. who's here today? Apr 22 10:02:41 <jtv> me Apr 22 10:02:44 <mars> me Apr 22 10:02:52 <barry> jtv: hai! Apr 22 10:03:00 <jtv> barry: learning dutch, I see! Apr 22 10:03:13 <abentley> me Apr 22 10:03:15 <EdwinGrubbs> me Apr 22 10:03:16 <gmb> me Apr 22 10:03:42 * Ursinha (n=ursula@canonical/launchpad/ursinha) has joined #launchpad-meeting Apr 22 10:03:52 <barry> jtv: D'r ken geen koekje meer bij Apr 22 10:03:58 <jtv> :-) Apr 22 10:04:25 <barry> i know we have a bunch of folks at the tl sprint Apr 22 10:04:44 <barry> allenap, danilo_ ping Apr 22 10:04:56 <gary_poster> me Apr 22 10:04:57 <allenap> me Apr 22 10:05:04 <barry> bac, BjornT, cprov ping Apr 22 10:05:17 <cprov> me Apr 22 10:05:18 <mars> salgado, gary_poster, ping Apr 22 10:05:21 <bac> me. darn, forgot again. Apr 22 10:05:23 <salgado> me Apr 22 10:05:24 <barry> intellectronica: ping Apr 22 10:05:27 <mars> gary_poster, oops, sorry Apr 22 10:05:31 <gary_poster> :-) Apr 22 10:05:36 <barry> noodles: ping Apr 22 10:05:46 <barry> rockstar: ping Apr 22 10:05:54 <noodles> me (sorry) Apr 22 10:06:31 <barry> [TOPIC] agenda Apr 22 10:06:32 <MootBot> New Topic: agenda Apr 22 10:06:45 <barry> * Roll call Apr 22 10:06:45 <barry> * Action items Apr 22 10:06:45 <barry> * Mentoring update Apr 22 10:06:45 <barry> * Peanut gallery (anything not on the agenda) Apr 22 10:07:29 <barry> [TOPIC] * Action items Apr 22 10:07:30 <MootBot> New Topic: * Action items Apr 22 10:07:37 <barry> * allenap to look into storm/sqlobject result set compatibility Apr 22 10:08:04 <allenap> I'm going to try and do that today :( Apr 22 10:08:05 <gary_poster> barry: re agenda, didn't we have that conversation from a review...trying to recall...two points... Apr 22 10:08:26 <gary_poster> barry: what is appropriate to import in a view... Apr 22 10:08:28 <barry> gary_poster: yes, it's on the list, sorry didn't move it up Apr 22 10:08:33 <gary_poster> barry: cool Apr 22 10:09:04 <barry> allenap: np, thanks. we'll leave it on the list Apr 22 10:09:14 <barry> * flacoste to work on API reviewer cheat sheet Apr 22 10:09:20 <intellectronica> me Apr 22 10:09:24 <barry> he's not here today, but does anybody know anything about it? Apr 22 10:09:38 <gary_poster> I can guess :-) Apr 22 10:10:06 <barry> gary_poster: yeah :) Apr 22 10:10:16 <barry> we'll leave it on the agenda Apr 22 10:10:23 <barry> [TOPIC] mentoring update Apr 22 10:10:24 <MootBot> New Topic: mentoring update Apr 22 10:10:41 <barry> noodles: how are things going? any questions/concerns? Apr 22 10:10:59 <noodles> barry: I haven't started yet... not sure who my mentor is? Apr 22 10:11:14 <noodles> Should I find one myself? What's the normal process...? Apr 22 10:11:28 <noodles> (I was away last week) Apr 22 10:11:50 <barry> noodles: ah, dang. i will work on that and get back to you. i remember now that henninge is also a mentat Apr 22 10:12:02 <noodles> Great! Thanks :) Apr 22 10:12:13 <bac> and is deryck an official mentat now? Apr 22 10:12:29 <barry> [ACTION] barry to find a mentor for noodles Apr 22 10:12:30 <MootBot> ACTION received: barry to find a mentor for noodles Apr 22 10:12:48 <barry> bac: not quite. he's going to do js reviews (mentored) for now Apr 22 10:13:35 <barry> anything else on mentoring? Apr 22 10:14:06 <barry> [TOPIC] peanut gallery Apr 22 10:14:07 <MootBot> New Topic: peanut gallery Apr 22 10:14:26 <barry> we have something gary_poster wants to bring up. let me paste the discussion notes first Apr 22 10:14:39 <barry> gary writes: Apr 22 10:14:39 <barry> * What is the goal (are the goals?) of our use of security proxies and the import nazi? My understanding is that they are "belt and suspenders" to try and keep us from revealing private information. Apr 22 10:14:39 <barry> * Do we still agree with those goals? Apr 22 10:14:39 <barry> * Do we feel that our use of security proxies helps us with these goals? Apr 22 10:14:39 <barry> * Do we feel that our use of the import nazi helps us with these goals? Apr 22 10:14:39 <barry> As we know, security is very hard, and trying to answer these questions well should not be done lightly or too quickly. Apr 22 10:14:39 <barry> I am hopeful that the small, specific question of whether we should import removeSecurityProxies in view code will fall out obviously, if not easily, from our answers to the discussion above. Apr 22 10:14:49 <barry> take it away gary_poster the orchestra leader Apr 22 10:14:52 <gary_poster> :-) Apr 22 10:14:55 <gary_poster> OK so, context Apr 22 10:15:10 <gary_poster> barry and I were talking about what is appropriate in a view Apr 22 10:15:23 <gary_poster> we agreed on this: Apr 22 10:15:26 <gary_poster> "I think view methods should only return immutable Python basics like strings and ints, or security wrapped objects." Apr 22 10:15:45 <gary_poster> We disagreed on this: Apr 22 10:15:46 <gary_poster> Also, ideally view code would not import removeSecurityProxy. AIUI, This is exactly the kind of import that import nazi is supposed to prohibit: tools that *allow* a view to return unproxied objects. While arguing for the import nazi to be eliminated might be appropriate at a reviewers meeting, we should not make it more and more ineffective without recognizing what we are doing. Apr 22 10:15:47 <intellectronica> dicts? Apr 22 10:16:20 <barry> intellectronica: dicts, lists, tuples, sets are all basic objects, and okay Apr 22 10:16:26 <gary_poster> intellectronica: dicts are problematic because they can contain things that need to be proxied. You typically need them to be proxied so that the viral thing works. Apr 22 10:16:26 <intellectronica> ah ok Apr 22 10:16:46 <barry> with gary_poster 's caveat about *what* those containers contain Apr 22 10:17:10 <gary_poster> right. as a practical matter, disagree with barry's assertion. as a theoretical matter, yeah, kinda sorta Apr 22 10:17:55 <gary_poster> so maybe we need to dig into that. but I was just expecting to dig into the import question Apr 22 10:18:04 <jtv> What's going to keep us honest w.r.t. interfaces, if not the security proxies? Or is the idea that we don't need to be? Apr 22 10:18:09 <barry> gary_poster: so, i've had to deal with this quite a bit lately, with the change in permissions to private membership teams Apr 22 10:18:44 <gary_poster> jtv: security proxies don't necessarily keep us honest irt the interfaces. You can open up other things in the zcml, and in fact sometimes you need to Apr 22 10:18:49 <barry> there are a lot of places where i've had to unwrap objects to get to their .name attribute. clearly we can't do that in the model. istm that the view is the most natural, *best* place to do it Apr 22 10:19:15 <barry> and at least it's clearly obvious! when you see removeSecurityProxy() that's a big red flag that something special is going on Apr 22 10:19:24 <gary_poster> barry: and yet what you are implying is that this could in fact be a utility function elsewhere Apr 22 10:19:36 <bac> barry: in using the removeSecurityProxy to get at a private team's name you must first be sure that your doing so doesn't in fact leak data Apr 22 10:19:52 <jtv> ...which you ensure in the model, not in the view. Apr 22 10:20:01 <barry> bac: yes agreed. but isn't the view the right place to ensure that? Apr 22 10:20:07 <gary_poster> bac: right. Apr 22 10:20:18 <gary_poster> barry: I'd like to step back to principles Apr 22 10:20:32 <barry> jtv: i think the model is the wrong place in fact Apr 22 10:20:37 <barry> gary_poster: sure Apr 22 10:20:39 <jtv> Well here's a counter-example: Apr 22 10:20:45 <bac> barry: yes. but i don't want to see a pattern of "oops i can't get to the name, better remove the security proxy" when the proxy is doing it's job Apr 22 10:21:01 <jtv> we implement private kumquats. How do we make sure all the pre-existing views respect kumquat privacy? Apr 22 10:21:03 <gary_poster> barry: as I said in the discussion notes, this is a question in my mind about our use of the import nazi, and our goals for our own protection in the view Apr 22 10:21:09 <gary_poster> views, I should say Apr 22 10:21:27 <gary_poster> so, the import nazi has been around a looong time. Apr 22 10:21:31 <gary_poster> why is it there? Apr 22 10:21:40 <gary_poster> do we still want it? Apr 22 10:21:48 <gary_poster> I don't think we're going to resolve those here Apr 22 10:21:58 <gary_poster> but I think we need to start the process of resolving them Apr 22 10:22:20 <gary_poster> I have guesses as to why they exist Apr 22 10:22:31 <gary_poster> sorry, why the import nazi exists Apr 22 10:22:44 <gary_poster> and I think they are for belt and suspenders of the views Apr 22 10:22:47 <mars> gary_poster, that may be a question for Francis Apr 22 10:22:53 <gary_poster> to try to prevent data leaking out Apr 22 10:22:56 <gmb> That's belt and braces for the brits in here. Apr 22 10:22:57 <mars> gary_poster, or Curtis Apr 22 10:23:02 <barry> gary_poster: that's kind of separate from the rSP-in-views issue. afaik, importnazi doesn't enforce that Apr 22 10:23:03 * henninge (n=henning@i577A8F9C.versanet.de) has joined #launchpad-meeting Apr 22 10:23:15 <henninge> sorry ... volume turned down ... Apr 22 10:23:15 <gary_poster> barry: disagree. Apr 22 10:23:33 <gary_poster> barry: I think that we have gradually taken the teeth out of the import nazi Apr 22 10:23:55 <barry> gary_poster: just saying, i-n doesn't prevent rSP-in-view. maybe it should, maybe it shouldn't Apr 22 10:24:11 <gary_poster> it is a tool that is supposed to help as developers and reviewers conform to code standards, supposed to help us...do something Apr 22 10:24:23 <barry> francis has the strongest views about what i-n is for, i believe Apr 22 10:24:39 <barry> gary_poster: yes, do something :) Apr 22 10:24:52 <gary_poster> if I understand its goal correctly (if!) then it is specifically designed to keep thigs *like* rSP from happening Apr 22 10:25:11 <barry> (btw, it's importfascist, strictly speaking :) Apr 22 10:25:34 <jtv> barry: right, might be Italian instead of German Apr 22 10:25:34 <gary_poster> ah, thank you, that is less potentially offensive. Apr 22 10:25:39 <abentley> gary_poster: That presupposes that rSP-in-view is against policy. Apr 22 10:25:46 <bac> gary_poster: we don't yet have agreement on the policy regarding rSP in views. if we agree it is forbidden then import socialist can be made to flag it Apr 22 10:25:53 <gary_poster> so, I think we, as reviewers, or as a team, or as francis :-) need to decide why the import nazi is there Apr 22 10:26:09 <gary_poster> abentley: absolutely. that's the question I'm asking. let me try to sum: Apr 22 10:26:36 <salgado> the import nazi is there to make sure browser code can't have access to unsecurity-proxied objects Apr 22 10:26:43 <salgado> without explicitly calling rSP Apr 22 10:27:09 <gary_poster> salgado: so rSP is in fact the blessed way around this? Apr 22 10:27:29 <salgado> yes Apr 22 10:27:36 <gary_poster> my concern is that this is not known, written clearly, etc. Apr 22 10:27:41 <gary_poster> salgado: ok cool Apr 22 10:27:52 <barry> aside: it does other things too, like enforce __all__'s Apr 22 10:28:11 <gary_poster> barry: but I think that is still part of the same goal Apr 22 10:28:16 <salgado> gary_poster, yeah, it's very likely this is not written clearly anywhere Apr 22 10:28:34 <barry> gary_poster: right, in that it's intended to enforce certain coding standards Apr 22 10:29:09 <barry> salgado, gary_poster so yes, we definitely need to make it clear in our standards the official way of doing things Apr 22 10:29:40 <gary_poster> barry: so, I move that we add a rationale for our use of import fascist, and our use of security proxies, and what the proper way of "breaking glass" is, to our reviewing guidelines Apr 22 10:30:20 <abentley> gary_poster: That sounds more like general-purpose documentation to me. Apr 22 10:30:37 <gary_poster> the import fascist is just a tool for us to enforce our policies, and I'd rather we understand/follow/lead from the intent of our policies than the letter of our policies Apr 22 10:30:51 <gary_poster> abentley: not sure how we are disagreeing? Apr 22 10:31:16 <abentley> reviewing guidelines are for reviewers, not necessarily for developers. Apr 22 10:31:30 <gary_poster> abentley: oh I see. yes, agree Apr 22 10:31:48 <barry> gary_poster: agreed. i'd like to give francis a chance to weigh in too. gary_poster this sounds like a discussion for the ml. would you like to start that there? i will take an action to document any decisions in the wiki Apr 22 10:32:06 <gary_poster> barry: yes, I'll take that. Apr 22 10:32:12 <barry> gary_poster: thanks Apr 22 10:32:24 <barry> [ACTION] gary_poster to take importfascist discussion to the ml Apr 22 10:32:25 <MootBot> ACTION received: gary_poster to take importfascist discussion to the ml Apr 22 10:32:40 <barry> [ACTION] barry to document all importfascist decisions in the appropriate wiki page Apr 22 10:32:41 <MootBot> ACTION received: barry to document all importfascist decisions in the appropriate wiki page Apr 22 10:32:58 <gary_poster> are we cool on the security-proxy-around container bit that we skimmed over? Apr 22 10:33:10 <gary_poster> or should we add that to an agenda for a later meeting? Apr 22 10:33:23 <barry> gary_poster: do you mean the entire container (dict, set, list) should be security proxied, or just the items it contains? Apr 22 10:33:50 * adeuring (n=abel@p4FC579FB.dip.t-dialin.net) has joined #launchpad-meeting Apr 22 10:34:03 <adeuring> me -- sorry for being late... Apr 22 10:34:06 <gary_poster> typically you proxy the container for simplicity. If you *really* want to proxy the items only, you could, I guess, but that's not lazy for the programmer or the computer, typically Apr 22 10:34:37 <barry> gary_poster: wouldn't in most cases the items in the container already be proxied? Apr 22 10:34:56 <barry> gary_poster: talking about how the view sees them, not necessarily what it returns Apr 22 10:36:07 <gary_poster> barry: ahhhh...that's too general for me. not sure. when you get a container from a storm result, I would expect the result set to be proxied, so that the items are proxied just by the "viral" story Apr 22 10:36:29 <barry> gary_poster: that would be my expectation too Apr 22 10:37:08 <gary_poster> barry: but...yeah...maybe :-) as a simple-to-follow rule (for which perhaps there are exceptions) I'd suggest that containers should be proxied Apr 22 10:37:11 <abentley> gary_poster: A result set is an object, though, not one of the items Barry mentioned. Apr 22 10:37:12 <barry> gary_poster: maybe we should rename removeSecurityProxy() to yesReallyLeakPrivateData() Apr 22 10:37:12 * Ursinha has quit (Read error: 110 (Connection timed out)) Apr 22 10:37:19 <gary_poster> abentley: agreed Apr 22 10:37:23 <gary_poster> barry: :-) Apr 22 10:37:29 * bac must duck out early. sorry. Apr 22 10:38:11 <abentley> gary_poster: How would you define the security policy for a dict? Apr 22 10:38:43 <gary_poster> abentley: I was just trying to come up with a general case I could think of. I'm not sure what our general cases of returning basic python containers in views really are. I'm just suggesting that proxying them is a nice simple rule. security policy for a dict: I Think this is predefined. It's public for the standard dict API. Apr 22 10:38:57 * Ursinha (n=ursula@canonical/launchpad/ursinha) has joined #launchpad-meeting Apr 22 10:38:59 <gary_poster> mapping API I should say Apr 22 10:39:39 <abentley> gary_poster: So for dicts, we would have them wrapped with a security proxy that did nothing? Apr 22 10:39:45 <barry> gary_poster: but that's just to ensure that any objects returned are themselves proxied right? Apr 22 10:39:58 <gary_poster> abentley, barry: right on both counts Apr 22 10:40:23 <gary_poster> as barry said, having a dict with the individual items wrapped would probably be fine, especially for our use cases Apr 22 10:40:55 <barry> i /think/ that's an unnecessary in our case, as we're guaranteed to have only wrapped objects in result sets, but it's a good thing to bring up in the ml thread Apr 22 10:40:58 <gary_poster> My primary interest in this is "easy to remember, easy to follow" Apr 22 10:41:14 <gary_poster> maybe you are right that we are automatically protected Apr 22 10:41:24 <gary_poster> in which case that is easy to remember and easy to follow Apr 22 10:41:24 <abentley> gary_poster: I would want to profile before and after making such a change. Apr 22 10:41:28 <barry> gary_poster: ideally, "just happens" and you only have to think about it when you need to violate the rules Apr 22 10:42:00 <barry> and even then, it's made plainly obvious that you've thought about it and deliberately broken the rule Apr 22 10:42:44 <barry> but of course, it will eventually happen that something will leak anyway ;) Apr 22 10:42:53 <gary_poster> abentley: sure. It's all in C. It's very fast. If we get utilities or adapters or other objects and*they* return dicts, then this is already happening. That's probably sufficient, as barry is saying. Apr 22 10:43:19 <barry> gary_poster: i'm certain francis could immediately confirm or deny Apr 22 10:44:07 <gary_poster> barry: cool. Apr 22 10:44:09 <barry> so, we have about 2 minutes left. anything more to say on this topic here? Apr 22 10:44:14 <gary_poster> not me. Apr 22 10:44:23 <gary_poster> I'll put it in the ml post Apr 22 10:44:45 <barry> cool, thanks! this is an important discussion to have. Apr 22 10:44:55 <barry> anybody else have anything for today? Apr 22 10:45:10 <mars> barry, intellectronica and I had a small debate about JS, but it can wait I guess Apr 22 10:45:22 <intellectronica> ? Apr 22 10:45:23 <barry> mars: can we put it on the agenda for next week? Apr 22 10:45:24 <mars> barry, should we use: if (!some_js_var) Apr 22 10:45:34 <mars> barry, we can Apr 22 10:45:35 <intellectronica> ah, whether explicit is better than implicit in JS too Apr 22 10:45:40 <mars> yep Apr 22 10:45:51 <barry> cool, thanks. we're outta time, so let's break here for today Apr 22 10:45:54 <barry> #endmeeting
AsiaPac
none today