[users] FreeBSD support creating user

- call pw useradd and pw usermod as needed; the code paths are basically
  the same in invoking a program in the target system to do the work.
main
Adriaan de Groot 5 years ago
parent 26b8c82630
commit 8a6e4af511

@ -93,19 +93,33 @@ ensureGroupsExistInTarget( const QStringList& wantedGroups, const QStringList& a
static Calamares::JobResult static Calamares::JobResult
createUser( const QString& loginName, const QString& fullName, const QString& shell ) createUser( const QString& loginName, const QString& fullName, const QString& shell )
{ {
QStringList useradd { "useradd", "-m", "-U" }; QStringList useraddCommand;
#ifdef __FreeBSD__
useraddCommand << "pw"
<< "useradd"
<< "-n" << loginName << "-m"
<< "-c" << fullName;
if ( !shell.isEmpty() )
{
useraddCommand << "-s" << shell;
}
#else
useraddCommand << "useradd"
<< "-m"
<< "-U";
if ( !shell.isEmpty() ) if ( !shell.isEmpty() )
{ {
useradd << "-s" << shell; useradd << "-s" << shell;
} }
useradd << "-c" << fullName; useradd << "-c" << fullName;
useradd << loginName; useradd << loginName;
#endif
auto commandResult = CalamaresUtils::System::instance()->targetEnvCommand( useradd ); auto commandResult = CalamaresUtils::System::instance()->targetEnvCommand( useraddCommand );
if ( commandResult.getExitCode() ) if ( commandResult.getExitCode() )
{ {
cError() << "useradd failed" << commandResult.getExitCode(); cError() << "useradd failed" << commandResult.getExitCode();
return commandResult.explainProcess( useradd, std::chrono::seconds( 10 ) /* bogus timeout */ ); return commandResult.explainProcess( useraddCommand, std::chrono::seconds( 10 ) /* bogus timeout */ );
} }
return Calamares::JobResult::ok(); return Calamares::JobResult::ok();
} }
@ -113,12 +127,21 @@ createUser( const QString& loginName, const QString& fullName, const QString& sh
static Calamares::JobResult static Calamares::JobResult
setUserGroups( const QString& loginName, const QStringList& groups ) setUserGroups( const QString& loginName, const QStringList& groups )
{ {
auto commandResult QStringList setgroupsCommand;
= CalamaresUtils::System::instance()->targetEnvCommand( { "usermod", "-aG", groups.join( ',' ), loginName } ); #ifdef __FreeBSD__
setgroupsCommand << "pw"
<< "usermod"
<< "-n" << loginName << "-G" << groups.join( ',' );
#else
setgroupsCommand << "usermod"
<< "-aG" << groups.join( ',' ) << loginName;
#endif
auto commandResult = CalamaresUtils::System::instance()->targetEnvCommand( setgroupsCommand );
if ( commandResult.getExitCode() ) if ( commandResult.getExitCode() )
{ {
cError() << "usermod failed" << commandResult.getExitCode(); cError() << "usermod failed" << commandResult.getExitCode();
return commandResult.explainProcess( "usermod", std::chrono::seconds( 10 ) /* bogus timeout */ ); return commandResult.explainProcess( setgroupsCommand, std::chrono::seconds( 10 ) /* bogus timeout */ );
} }
return Calamares::JobResult::ok(); return Calamares::JobResult::ok();
} }

Loading…
Cancel
Save