[PATCH] samba-tool: Easily edit a users object in AD
Rowland Penny
rpenny at samba.org
Mon Jul 3 13:10:30 UTC 2017
On Sat, 1 Jul 2017 18:08:10 +0100
Rowland Penny via samba-technical <samba-technical at lists.samba.org>
wrote:
> On Sat, 1 Jul 2017 13:27:07 +1200
> Douglas Bagnall <douglas.bagnall at catalyst.net.nz> wrote:
>
> > 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
> > >
> >
>
> I have tried what Douglas suggested, but I am getting nowhere, I do
> not want to alter the 'samba-tool user edit', I just want to get a
> python test script to run it and hopefully pass.
>
> edit.py uses an editor and a human intervention to work, I can
> automate this with a simple bash script. What I cannot do is to get a
> python test script to fully automate this.
>
> I think if I was to create the bash script in the source code it
> would work, but where would be the best place to put it ? and how
> would I obtain the path to it ?
>
> Rowland
>
>
I couldn't get the python script to work, so I dumped it, in favour of
a bash script and this seems to work, but I don't fully understand the
output, here is a sample:
testsuite: samba.tests.samba_tool.edit(fl2008r2dc)
progress: push
time: 2017-07-03 13:27:14.000000Z
User 'sambatool1' created successfully
Modified User 'sambatool1' successfully
Deleted user sambatool1
teardown_env(fl2008r2dc)
samba: EOF on stdin - PID 2302 terminating
time: 2017-07-03 13:27:14.000000Z
progress: pop
command: /root/samba-master/python/samba/tests/samba_tool/edit.sh $SERVER $USERNAME $PASSWORD 2>&1 | /root/samba-master/selftest/filter-subunit --fail-on-empty --prefix="samba.tests.samba_tool.edit." --suffix="(fl2008r2dc)"
expanded command: /root/samba-master/python/samba/tests/samba_tool/edit.sh dc7 Administrator locDCpass7 2>&1 | /root/samba-master/selftest/filter-subunit --fail-on-empty --prefix="samba.tests.samba_tool.edit." --suffix="(fl2008r2dc)"
testsuite-failure: samba.tests.samba_tool.edit(fl2008r2dc) [
Exit code was 1
]
samba child process 2302 exited with value 0
samba: EOF on stdin - PID 2234 terminating
SAMBA LOG of: DC7 pid 2302
samba: EOF on stdin - PID 2302 terminating
TOP 10 slowest tests
samba.tests.samba_tool.edit(fl2008r2dc) -> 0
'testonly' finished successfully (29.037s)
The script creates the user, modifies the user and then deletes the
user, the script then exits with the exit code '0', but there is this:
testsuite-failure: samba.tests.samba_tool.edit(fl2008r2dc) [
Exit code was 1
]
Is this something to worry about ?
Where does the '1' exit code come from ?
Rowland
More information about the samba-technical
mailing list