@@ -85,6 +85,37 @@ def _db_query(params: Dict[str, Any]) -> str:
8585 return str (query ).replace ("'" , "'\\ ''" )
8686
8787
88+ def _groupadd_flags (params : Dict [str , Any ]) -> str :
89+ flags : list [str ] = []
90+ if bool (params .get ("system" , False )):
91+ flags .append ("--system" )
92+ if params .get ("gid" ) is not None :
93+ flags .extend (["--gid" , _q (params ["gid" ])])
94+ return " " .join (flags )
95+
96+
97+ def _useradd_flags (params : Dict [str , Any ]) -> str :
98+ flags : list [str ] = []
99+ if bool (params .get ("system" , False )):
100+ flags .append ("--system" )
101+ if params .get ("uid" ) is not None :
102+ flags .extend (["--uid" , _q (params ["uid" ])])
103+ if params .get ("group" ):
104+ flags .extend (["--gid" , _q (params ["group" ])])
105+ groups = _list (params .get ("groups" ))
106+ if groups :
107+ flags .extend (["--groups" , _q ("," .join (groups ))])
108+ if params .get ("shell" ):
109+ flags .extend (["--shell" , _q (params ["shell" ])])
110+ if params .get ("home" ):
111+ flags .extend (["--home-dir" , _q (params ["home" ])])
112+ if "create_home" in params :
113+ flags .append ("--create-home" if bool (params .get ("create_home" )) else "--no-create-home" )
114+ if params .get ("comment" ):
115+ flags .extend (["--comment" , _q (params ["comment" ])])
116+ return " " .join (flags )
117+
118+
88119def fallback_manual_commands (plugin_name : str , params : Dict [str , Any ], context : ExecutionContext ) -> list [str ]:
89120 """Return deterministic manual commands for legacy plugins that do not override them."""
90121 sudo = _sudo (params )
@@ -190,7 +221,9 @@ def fallback_manual_commands(plugin_name: str, params: Dict[str, Any], context:
190221
191222 if plugin_name .startswith ("user." ):
192223 if plugin_name == "user.create" :
193- return [f"id -u { _q (name )} >/dev/null 2>&1 || { sudo } useradd { _q (name )} " ]
224+ flags = _useradd_flags (params )
225+ flag_text = f" { flags } " if flags else ""
226+ return [f"id -u { _q (name )} >/dev/null 2>&1 || { sudo } useradd{ flag_text } { _q (name )} " ]
194227 if plugin_name == "user.remove" :
195228 return [f"{ sudo } userdel { '-r ' if params .get ('remove_home' ) else '' } { _q (name )} " ]
196229 if plugin_name == "user.exists" :
@@ -206,7 +239,9 @@ def fallback_manual_commands(plugin_name: str, params: Dict[str, Any], context:
206239
207240 if plugin_name .startswith ("group." ):
208241 if plugin_name == "group.create" :
209- return [f"getent group { _q (name )} >/dev/null || { sudo } groupadd { _q (name )} " ]
242+ flags = _groupadd_flags (params )
243+ flag_text = f" { flags } " if flags else ""
244+ return [f"getent group { _q (name )} >/dev/null || { sudo } groupadd{ flag_text } { _q (name )} " ]
210245 if plugin_name == "group.remove" :
211246 return [f"{ sudo } groupdel { _q (name )} " ]
212247 if plugin_name == "group.exists" :
0 commit comments