From cef58ae85f2cc5fba439e8d65942bab05a687fe7 Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Fri, 18 Mar 2011 23:37:10 +0100 Subject: [PATCH] handle numeric group id as well as group name for consistency with usermod|groupmod Signed-off-by: Steven Armstrong --- conf/type/__user/explorer/group | 28 ++++++++++++++++++++++++++++ conf/type/__user/gencode | 22 +++++++++++++++++----- 2 files changed, 45 insertions(+), 5 deletions(-) create mode 100755 conf/type/__user/explorer/group diff --git a/conf/type/__user/explorer/group b/conf/type/__user/explorer/group new file mode 100755 index 00000000..9defba14 --- /dev/null +++ b/conf/type/__user/explorer/group @@ -0,0 +1,28 @@ +#!/bin/sh +# +# 2011 Steven Armstrong (steven-cdist at armstrong.cc) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# +# +# Get an existing groups group entry. +# + +if [ -f "$__object/parameter/gid" ]; then + gid=$(cat "$__object/parameter/gid") + getent group "$gid" || true +fi + diff --git a/conf/type/__user/gencode b/conf/type/__user/gencode index 5990ac92..c53d8c40 100755 --- a/conf/type/__user/gencode +++ b/conf/type/__user/gencode @@ -35,27 +35,39 @@ fi get_current_value() { local key="$1" + local new_value="$2" + + local explorer="$__object/explorer/passwd" local index case "$key" in password) - cut -d':' -f 2 "$__object/explorer/shadow" - break + explorer="$__object/explorer/shadow" + index=2 ;; uid) index=3;; - gid) index=4;; + gid) + if [[ $new_value =~ ^[0-9]+$ ]]; then + # numeric gid + index=4 + else + # group name + explorer="$__object/explorer/group" + index=1 + fi + ;; comment) index=5;; home) index=6;; shell) index=7;; esac - cut -d':' -f $index "$__object/explorer/passwd" + cut -d':' -f $index "$explorer" } set -- "$@" cd "$__object/parameter" for property in $(ls .); do - current_value=$(get_current_value "$property") new_value="$(cat "$property")" + current_value=$(get_current_value "$property" "$new_value") if [ "$new_value" != "$current_value" ]; then # Shedule changed properties for update set -- "$@" "--$property" \"$new_value\"