Skip to contentSkip to conversation

Fix for useradd-staticids.bbclass

PATCH Superseded Peter Kjellerstedt 3 participants 5 messages Oct 23, 2015 – Oct 24, 2015

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

cover Fix for useradd-staticids.bbclass

This change corrects useradd-staticids.bbclass to allow user and group files without trailing colons. Previously one had to write:

foo::123::::

in the group file to define the static UID for a user or one would receive a Python exception. With this change applied one can instead write:

foo::123

The change is of course backwards compatible so the old format is still valid.

//Peter

The following changes since commit 505a82673ac2487df5ea343a6422c2fc47018831:

build-appliance-image: Update to jethro head revision (2015-10-21 23:13:11 +0100)

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib pkj/useradd_skip_colons
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=pkj/useradd_skip_colons

Peter Kjellerstedt (1):
useradd-staticids.bbclass: Do not require trailing colons

 meta/classes/useradd-staticids.bbclass | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
Signature · 1 line
2.1.0
#1 lore raw

PATCH 1/1 useradd-staticids.bbclass: Do not require trailing colons

Before, the users and groups specified in the passwd file and the groups file had to have trailing colons to make sure there were enough elements in the definitions, or bitbake would thow a Python exception. After this change one can omit the trailing colons, which especially simplifies passwd files used only to specify static UIDs.

---
 meta/classes/useradd-staticids.bbclass | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
meta/classes/useradd-staticids.bbclass +10 -2
index 421a70a..aa1b15b 100644
@@ -84,7 +84,11 @@ def update_useradd_static_config(d):
                     for line in f:
                         if line.startswith('#'):
                             continue
-                        field = line.rstrip().split(":")
+                        # Make sure there always are at least seven elements in
+                        # the field list. This allows for leaving out trailing
+                        # colons in the passwd file.
+                        line = line.rstrip() + "::::::"
+                        field = line.split(":")
                         if field[0] == uaargs.LOGIN:
                             if uaargs.uid and field[2] and (uaargs.uid != field[2]):
                                 bb.warn("%s: Changing username %s's uid from (%s) to (%s), verify configuration files!" % (d.getVar('PN', True), uaargs.LOGIN, uaargs.uid, field[2]))
@@ -220,7 +224,11 @@ def update_useradd_static_config(d):
                     for line in f:
                         if line.startswith('#'):
                             continue
-                        field = line.rstrip().split(":")
+                        # Make sure there always are at least four elements in
+                        # the field list. This allows for leaving out trailing
+                        # colons in the group file.
+                        line = line.rstrip() + ":::"
+                        field = line.split(":")
                         if field[0] == gaargs.GROUP and field[2]:
                             if gaargs.gid and (gaargs.gid != field[2]):
                                 bb.warn("%s: Changing groupname %s's gid from (%s) to (%s), verify configuration files!" % (d.getVar('PN', True), gaargs.GROUP, gaargs.gid, field[2]))
Signature · 1 line
2.1.0
#2 lore raw

Re: [PATCH 1/1] useradd-staticids.bbclass: Do not require trailing colons

On 23 October 2015 at 11:38, Peter Kjellerstedt <[email protected]

meta/classes/useradd-staticids.bbclass def update_useradd_static_config(d): · line 91

Quoted 11 lines

wrote:

(quoted diff) +1 -1
-                        field = line.rstrip().split(":")
+                        # Make sure there always are at least seven

elements in
+ # the field list. This allows for leaving out
trailing

meta/classes/useradd-staticids.bbclass +3 -0
+                        # colons in the passwd file.
+                        line = line.rstrip() + "::::::"
+                        field = line.split(":")

It's a stylist thing but I prefer padding the field list instead of manipulating the input string. Something like

field = line.strip().split(":")
field += [''] * (7 - len(field))

Ross

#3 lore raw

Re: [PATCH 1/1] useradd-staticids.bbclass: Do not require trailing colons

Quoted 13 lines · Ross

meta/classes/useradd-staticids.bbclass def update_useradd_static_config(d): · line 91

Quoted 9 lines · Peter Kjellerstedt
(quoted diff) +1 -1
-                        field = line.rstrip().split(":")
+                        # Make sure there always are at least seven

elements in
+ # the field list. This allows for leaving out
trailing

meta/classes/useradd-staticids.bbclass +3 -0
+                        # colons in the passwd file.
+                        line = line.rstrip() + "::::::"
+                        field = line.split(":")
Quoted 6 lines

It's a stylist thing but I prefer padding the field list instead of manipulating the input string. Something like

field = line.strip().split(":")
field += [''] * (7 - len(field))

Agreed, but I think this is cleaner:

def iter_extend(iterable, length, obj=None):
"""Ensure that iterable is the specified length by extending with obj""" return itertools.islice(itertools.chain(iterable,
itertools.repeat(obj)), length)

fields = iter_extend(line.rstrip().split(":"), 7)

Signature · 5 lines
Christopher Larson
clarson at kergoth dot com
Founder - BitBake, OpenEmbedded, OpenZaurus
Maintainer - Tslib
Senior Software Engineer, Mentor Graphics
#4 lore raw

Re: [PATCH 1/1] useradd-staticids.bbclass: Do not require trailing colons

I changed it to:

def list_extend(iterable, length, obj = None):
"""Ensure that iterable is the specified length by extending with obj and return it as a list"""
return list(itertools.islice(itertools.chain(iterable, itertools.repeat(obj)), length))

because I got

Exception: TypeError: 'itertools.islice' object has no attribute '__getitem__'

otherwise.

New patch coming up.

//Peter

From: [email protected] [mailto:[email protected]] On Behalf Of Christopher Larson
Sent: 23 October 2015 17:53
To: Burton, Ross
Cc: Peter Kjellerstedt; OE-core
Subject: Re: [OE-core] [PATCH 1/1] useradd-staticids.bbclass: Do not require trailing colons

On Fri, Oct 23, 2015 at 8:20 AM, Burton, Ross <[email protected]<mailto:[email protected]>> wrote:
On 23 October 2015 at 11:38, Peter Kjellerstedt <[email protected]<mailto:[email protected]>> wrote:

-                        field = line.rstrip().split(":")
+                        # Make sure there always are at least seven elements in
+                        # the field list. This allows for leaving out trailing
+                        # colons in the passwd file.
+                        line = line.rstrip() + "::::::"
+                        field = line.split(":")

It's a stylist thing but I prefer padding the field list instead of manipulating the input string. Something like

field = line.strip().split(":")
field += [''] * (7 - len(field))

Agreed, but I think this is cleaner:

def iter_extend(iterable, length, obj=None):
"""Ensure that iterable is the specified length by extending with obj""" return itertools.islice(itertools.chain(iterable, itertools.repeat(obj)), length)

fields = iter_extend(line.rstrip().split(":"), 7)
--
Christopher Larson
clarson at kergoth dot com
Founder - BitBake, OpenEmbedded, OpenZaurus
Maintainer - Tslib
Senior Software Engineer, Mentor Graphics