Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!feeds.phibee-telecom.net!newsfeed.xs4all.nl!newsfeed2a.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.002 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'argument': 0.05; 'modifying': 0.07; 'processing.': 0.07; 'string': 0.09; 'arguments': 0.09; 'executes': 0.09; 'machines.': 0.09; 'parsing': 0.09; 'cc:addr:python-list': 0.11; 'executed.': 0.16; 'from:addr:rosuav': 0.16; 'from:name:chris angelico': 0.16; 'letting': 0.16; 'quoted': 0.16; 'sudo': 0.16; 'task.': 0.16; 'wrote:': 0.18; 'trying': 0.19; 'thu,': 0.19; 'later': 0.20; 'command': 0.22; 'example': 0.22; 'shell': 0.22; 'cc:addr:python.org': 0.22; 'question': 0.24; 'cc:2**0': 0.24; 'possibly': 0.26; 'header:In-Reply-To:1': 0.27; 'am,': 0.29; 'tim': 0.29; 'message-id:@mail.gmail.com': 0.30; 'asked': 0.31; 'end,': 0.31; 'quotes': 0.31; 'remotely': 0.31; 'safely': 0.31; '(including': 0.33; 'not.': 0.33; "i'd": 0.34; 'problem': 0.35; "can't": 0.35; 'knows': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'false': 0.36; 'yield': 0.36; 'easily': 0.37; 'being': 0.38; 'checks': 0.38; 'nov': 0.38; 'skip:. 20': 0.38; 'does': 0.39; 'quote': 0.39; 'either': 0.39; 'solve': 0.60; 'tell': 0.60; 'entire': 0.61; 'simple': 0.61; 'provide': 0.64; 'determine': 0.67; 'line,': 0.68; 'to:none': 0.92 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:cc :content-type; bh=79Pz8Sp2cfkl/VPf2rshci90dbjrtkzHduXH4yVfH5k=; b=u98uRdQFMRrC6gvaSziKUPBZ+n8w0Fqt/8bkAf7jSXBCP5u3bqhCvK512CKDAbWmN+ JTkaUfDZo5VJSC8KHqvBgba0jIYhl+jatVouCi0APStpXUwjimTM7t+qPp9QnSXtRL7w mD3pz57hYiVuVQfR4EOUYs8aeZdsy/t/M0gCB7jzCPODt+J6p4QUe+gOoqBi7AM6bZtR KReeKoCNIXKrmWDHphoQdqu6QoxfEtXxE9/U52jjtoMdnu7wxMAfsp0PAXEvLDlGARUR ywkEP1di6AbDEvTm4P7fsy1DehIVqNzmi3JT4PdSqDAYGtXG1meIt0LYXd7gEJccc7Ve wvpw== MIME-Version: 1.0 X-Received: by 10.50.152.104 with SMTP id ux8mr23416775igb.14.1417014379485; Wed, 26 Nov 2014 07:06:19 -0800 (PST) In-Reply-To: <5475EAB3.7060503@tundraware.com> References: <54756D5F.4040806@tundraware.com> <5475EAB3.7060503@tundraware.com> Date: Thu, 27 Nov 2014 02:06:19 +1100 Subject: Re: Quotation Ugliness From: Chris Angelico Cc: "python-list@python.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 25 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1417014387 news.xs4all.nl 2919 [2001:888:2000:d::a6]:36659 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:81577 On Thu, Nov 27, 2014 at 1:58 AM, Tim Daneliuk wrote: > The specific program in question I am modifying is > one that takes a shell command and executes it remotely on many machines. > The problem I am trying to solve is to determine whether the user needs to > provide a sudo password or not. Right now, the program just naively checks > the arguments to see if .startswith("sudo'). As the example given > illustrates, > that clearly fails if the sudo is given later in a longer pipeline. > > Scanning the whole argument string for 'sudo' is better but will yield > false positives if the string is inside a quote of some sort. Since I have > to solve the problem for ' and " delimiters, I thought I'd generalize the > solution > for other strings possibly being quoted by other delimiters. Tell whoever asked you to do this that it's a fundamentally impossible task. Quotes have nothing to do with whether or not "sudo" is what will be executed. Your only solutions will involve either parsing the entire command line, exactly the way the shell does (including knowing everything the shell knows at the far end, like command aliases), or letting the shell do the parsing and then tinkering with what the "sudo" command does. You can't easily and safely predict it based on simple string processing. ChrisA