[elbe-devel] [PATCH 3/4] finetuning: add options to adduser and addgroup

Manuel Traut manuel.traut at linutronix.de
Thu Apr 26 17:35:02 CEST 2018


On Thu, Apr 26, 2018 at 05:01:48PM +0200, Torben Hohn wrote:
> add gid="" and system="True" options to finetuning add_group
> 
> also add uid, gid, home, systems="True", create_home="False" and
> create_group="False" to adduser.
> 
> rework the generation of the options a bit, so that it handles many
> options more elegantly.
> 
> add the new options to dbsfed.xsd.
> 
> Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>

Reviewed-by: Manuel Traut <manut at linutronix.de>

will apply it to devel/elbe-3.0

> ---
>  elbepack/finetuning.py | 58 ++++++++++++++++++++++++++++++++++++--------------
>  schema/dbsfed.xsd      | 44 ++++++++++++++++++++++++++++++++------
>  2 files changed, 80 insertions(+), 22 deletions(-)
> 
> diff --git a/elbepack/finetuning.py b/elbepack/finetuning.py
> index eba35068..069d22f8 100644
> --- a/elbepack/finetuning.py
> +++ b/elbepack/finetuning.py
> @@ -262,23 +262,41 @@ class AddUserAction(FinetuningAction):
>  
>      def execute(self, log, buildenv, target):
>          with target:
> -            if 'groups' in self.node.et.attrib:
> -                log.chroot(
> -                    target.path,
> -                    '/usr/sbin/useradd -U -m -G "%s" -s "%s" "%s"' %
> -                    (self.node.et.attrib['groups'],
> -                     self.node.et.attrib['shell'],
> -                     self.node.et.text))
> +            att = self.node.et.attrib
> +            options = ""
> +            if 'groups' in att:
> +                options += '-G "%s" ' % att['groups']
> +            if 'shell' in att:
> +                options += '-s "%s" ' % att['shell']
> +            if 'uid' in att:
> +                options += '-u "%s" ' % att['uid']
> +            if 'gid' in att:
> +                options += '-g "%s" ' % att['gid']
> +            if 'home' in att:
> +                options += '-d "%s" ' % att['home']
> +            if 'system' in att and att['system'] == 'True':
> +                options += '-r'
> +            if 'create_home' in att and att['create_home'] == 'False':
> +                options += '-M '
>              else:
> -                log.chroot(
> -                    target.path, '/usr/sbin/useradd -U -m -s "%s" "%s"' %
> -                    (self.node.et.attrib['shell'], self.node.et.text))
> +                options += '-m '
> +            if 'create_group' in att and att['create_group'] == 'False':
> +                options += '-N '
> +            else:
> +                options += '-U '
> +
> +            log.chroot(
> +                target.path,
> +                '/usr/sbin/useradd %s "%s"' %
> +                (options,
> +                 self.node.et.text))
>  
> -            log.chroot(target.path,
> -                       """/bin/sh -c 'echo "%s\\n%s\\n" | passwd %s'""" % (
> -                           self.node.et.attrib['passwd'],
> -                           self.node.et.attrib['passwd'],
> -                           self.node.et.text))
> +            if 'passwd' in att:
> +                log.chroot(target.path,
> +                           """/bin/sh -c 'echo "%s\\n%s\\n" | passwd %s'""" % (
> +                               att['passwd'],
> +                               att['passwd'],
> +                               self.node.et.text))
>  
>  
>  FinetuningAction.register(AddUserAction)
> @@ -293,7 +311,15 @@ class AddGroupAction(FinetuningAction):
>  
>      def execute(self, log, buildenv, target):
>          with target:
> -            log.chroot(target.path, "/usr/sbin/groupadd -f %s" % (
> +            att = self.node.et.attrib
> +            # we use -f always
> +            options = "-f "
> +            if 'gid' in att:
> +                options += '-g "%s" ' % att['gid']
> +            if 'system' in att and att['system'] == 'True':
> +                options += '-r'
> +            log.chroot(target.path, '/usr/sbin/groupadd %s "%s"' % (
> +                options,
>                  self.node.et.text))
>  
>  
> diff --git a/schema/dbsfed.xsd b/schema/dbsfed.xsd
> index d87967de..ae9756dc 100644
> --- a/schema/dbsfed.xsd
> +++ b/schema/dbsfed.xsd
> @@ -1634,7 +1634,7 @@
>        </documentation>
>      </annotation>
>      <choice>
> -      <element name="addgroup" type="rfs:string" minOccurs="0">
> +      <element name="addgroup" type="rfs:addgroup" minOccurs="0">
>          <annotation>
>            <documentation>
>              add a group by name
> @@ -1771,21 +1771,53 @@
>      </choice>
>    </group>
>  
> +  <complexType name="addgroup">
> +    <annotation>
> +      <documentation>
> +        describes an additional user group to be created. the following parameters are
> +	available:
> +	'gid' - group id.
> +	'system = "True" - system group.
> +	The value of the tag describes the group name name
> +        for the account.
> +      </documentation>
> +    </annotation>
> +    <simpleContent>
> +      <extension base="rfs:string">
> +        <attribute name="gid" type="string" use="optional" />
> +        <attribute name="system" type="boolean" use="optional">
> +      </extension>
> +    </simpleContent>
> +  </complexType>
> +
>    <complexType name="adduser">
>      <annotation>
>        <documentation>
>          describes an additional user account, the following parameters are
> -        available: 'shell' - the login shell for the user, 'passwd' - the
> -        password for the user and 'groups' - a comma separated list of groups
> -        the user is member of. The value of the tag describes the login name
> -        for the account.
> +	available:
> +	'shell' - the login shell for the user.
> +	'passwd' - the (optional) password for the user.
> +	'groups' - a comma separated list of groups the user is member of.
> +	'uid' - (optional) user of the user.
> +	'gid' - (optional) primary group, may be numeric or a name.
> +	'home' - home directory.
> +	'system="True"' - system user.
> +	'create_home="False"' - do not create the home directory.
> +	'create_group = "False"' - Do not create the primary group.
> +	The value of the tag describes the login name for the account.
>        </documentation>
>      </annotation>
>      <simpleContent>
>        <extension base="rfs:string">
>          <attribute name="shell" type="string" use="required" />
> -        <attribute name="passwd" type="string" use="required" />
> +        <attribute name="passwd" type="string" use="optional" />
>          <attribute name="groups" type="string" use="optional" />
> +        <attribute name="uid" type="string" use="optional" />
> +        <attribute name="gid" type="string" use="optional" />
> +        <attribute name="home" type="string" use="optional" />
> +        <attribute name="system" type="boolean" use="optional">
> +        <attribute name="create_home" type="boolean" use="optional">
> +        <attribute name="create_group" type="boolean" use="optional">
>        </extension>
>      </simpleContent>
>    </complexType>
> -- 
> 2.11.0
> 
> 
> _______________________________________________
> elbe-devel mailing list
> elbe-devel at linutronix.de
> https://lists.linutronix.de/mailman/listinfo/elbe-devel



More information about the elbe-devel mailing list