[PATCH] samba-tool: Easily edit a users object in AD

Douglas Bagnall douglas.bagnall at catalyst.net.nz
Sat Jul 1 01:27:07 UTC 2017


On 01/07/17 00:43, Rowland Penny via samba-technical wrote:
> On Wed, 28 Jun 2017 12:27:53 +0300
> Alexander Bokovoy <ab at samba.org> wrote:
> 
>> On ke, 28 kesä 2017, Andrew Bartlett via samba-technical wrote:

>>> You replace the EDITOR with a script that modifies the object's
>>> LDIF.
>> Yes, something like
>> EDITOR="sed -i -e 's/attribute: foo/attribute: bar/'"
>>
> 
> OK, this doesn't work, but if I create a dummy editor script, it does.

Yes, that isn't going to work because you are calling the editor using a
list, exactly like so

       call([editor, t_file.name])

which is interpreted as an exec-style argument list, meaning it will look
for an editor called "sed -i -e ...", not one called "sed".  In this case
it is probably mostly safe to change it to

       call("%s %s" % (editor, t_file.name), shell=True)

which will use a shell to split the string.

> This is what I came up with:
> 
> #!/bin/sh
> user_ldif="$1"
> SED=$(which sed)
> $SED -i -e \'s/userAccountControl: 512/userAccountControl: 514/\' $user_ldif
> 
> If I create the above script as /tmp/editor.sh, make it executable and
> then pass it to 'samba-tool user USER' with '--editor=/tmp/editor.sh'
> it works.
> 
> Problem is, how do I either get the python test script to create the
> bash script and then use it, or how do I create the bash script
> somewhere in the source (if so where?) and then get the python test
> script to use it ?

Why not use tempfile.NamedTemporaryFile() again? and subprocess.call()?

Douglas

> 
> Rowland
> 




More information about the samba-technical mailing list