base-files, metadata: support additional group membership
[openwrt/openwrt.git] / package / base-files / files / lib / functions.sh
index d8604415cc873b572278de710da31b646c646a75..a5b23eb1350f5233c7c7a045367e9d2df7574c4e 100644 (file)
@@ -209,10 +209,10 @@ add_group_and_user() {
        if [ -n "$rusers" ]; then
                local tuple oIFS="$IFS"
                for tuple in $rusers; do
-                       local uid gid uname gname
+                       local uid gid uname gname addngroups addngroup addngname addngid
 
                        IFS=":"
-                       set -- $tuple; uname="$1"; gname="$2"
+                       set -- $tuple; uname="$1"; gname="$2"; addngroups="$3"
                        IFS="="
                        set -- $uname; uname="$1"; uid="$2"
                        set -- $gname; gname="$1"; gid="$2"
@@ -232,7 +232,24 @@ add_group_and_user() {
                                group_add_user "$gname" "$uname"
                        fi
 
-                       unset uid gid uname gname
+                       if [ -n "$uname" ] &&  [ -n "$addngroups" ]; then
+                               oIFS="$IFS"
+                               IFS=","
+                               for addngroup in $addngroups ; do
+                                       IFS="="
+                                       set -- $addngroup; addngname="$1"; addngid="$2"
+                                       if [ -n "$addngid" ]; then
+                                               group_exists "$addngname" || group_add "$addngname" "$addngid"
+                                       else
+                                               group_add_next "$addngname"
+                                       fi
+
+                                       group_add_user "$addngname" "$uname"
+                               done
+                               IFS="$oIFS"
+                       fi
+
+                       unset uid gid uname gname addngroups addngroup addngname addngid
                done
        fi
 }