addded remove in BashModule
This commit is contained in:
parent
b3bd744ef4
commit
549bfe74e3
@ -19,21 +19,20 @@ BashModule::BashModule()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//private methods
|
//private methods
|
||||||
int BashModule::executeScript(string serviceUsername)
|
int BashModule::executeScript(string serviceUsername, string script)
|
||||||
{
|
{
|
||||||
//this method is called in deploy(), it executes the script deploy.sh if it exists
|
//this method is called in deploy() and remove(), it executes the script if it exists
|
||||||
string deployScript="./services/"+serviceUsername+"/deploy.sh";
|
if(!filesystem::exists(script)){
|
||||||
if(!filesystem::exists(deployScript)){
|
|
||||||
cout << "No deploy.sh script for this service.";
|
cout << "No deploy.sh script for this service.";
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
//check that the file is of type regular
|
//check that the file is of type regular
|
||||||
if (filesystem::status(deployScript).type()!=filesystem::file_type::regular){
|
if (filesystem::status(script).type()!=filesystem::file_type::regular){
|
||||||
cerr << "Error. The file deploy_user.sh is not regular." << endl;
|
cerr << "Error. The file deploy_user.sh is not regular." << endl;
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
//check if the owner has the execute permission
|
//check if the owner has the execute permission
|
||||||
if ((filesystem::status(deployScript).permissions() & filesystem::perms::owner_exec)==filesystem::perms::none){
|
if ((filesystem::status(script).permissions() & filesystem::perms::owner_exec)==filesystem::perms::none){
|
||||||
cerr << "Error. The owner of file deploy_user.sh does not have permission to execute it. Please change the permission or remove/rename the file." << endl;
|
cerr << "Error. The owner of file deploy_user.sh does not have permission to execute it. Please change the permission or remove/rename the file." << endl;
|
||||||
return -1;
|
return -1;
|
||||||
}else{
|
}else{
|
||||||
@ -47,14 +46,14 @@ int BashModule::executeScript(string serviceUsername)
|
|||||||
int status;
|
int status;
|
||||||
waitpid(-1,&status,0);
|
waitpid(-1,&status,0);
|
||||||
if(status==-1){
|
if(status==-1){
|
||||||
cerr << "Error when executing " << deployScript << endl;
|
cerr << "Error when executing " << script << endl;
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
} else {
|
} else {
|
||||||
//child process
|
//child process
|
||||||
if(execl("/bin/bash", "/bin/bash", "--noediting", "--noprofile", "--norc", deployScript.c_str(), (char *)0)==-1)
|
if(execl("/bin/bash", "/bin/bash", "--noediting", "--noprofile", "--norc", script.c_str(), (char *)0)==-1)
|
||||||
{
|
{
|
||||||
cerr << "Error in the execl call of " << deployScript << endl;
|
cerr << "Error in the execl call of " << script << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -63,22 +62,21 @@ int BashModule::executeScript(string serviceUsername)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int BashModule::executeScriptAs(string serviceUsername)
|
int BashModule::executeScriptAs(string serviceUsername, string script)
|
||||||
{
|
{
|
||||||
//this method is called in deploy(), it executes the script deploy_user.sh if it exists, as the user associated with the service
|
//this method is called in deploy(), it executes the script if it exists, as the user associated with the service
|
||||||
string deployAsScript="./services/"+serviceUsername+"/deploy_user.sh";
|
|
||||||
//check that the file exists
|
//check that the file exists
|
||||||
if(!filesystem::exists(deployAsScript)){
|
if(!filesystem::exists(script)){
|
||||||
cout << "No deploy_user.sh script for this service.";
|
cout << "No deploy_user.sh script for this service.";
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
//check that the file is of type regular
|
//check that the file is of type regular
|
||||||
if (filesystem::status(deployAsScript).type()!=filesystem::file_type::regular){
|
if (filesystem::status(script).type()!=filesystem::file_type::regular){
|
||||||
cerr << "Error. The file deploy_user.sh is not regular." << endl;
|
cerr << "Error. The file deploy_user.sh is not regular." << endl;
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
//check if the owner has the execute permission
|
//check if the owner has the execute permission
|
||||||
if ((filesystem::status(deployAsScript).permissions() & filesystem::perms::owner_exec)==filesystem::perms::none){
|
if ((filesystem::status(script).permissions() & filesystem::perms::owner_exec)==filesystem::perms::none){
|
||||||
cerr << "Error. The owner of file deploy_user.sh does not have permission to execute it. Please change the permission or remove/rename the file." << endl;
|
cerr << "Error. The owner of file deploy_user.sh does not have permission to execute it. Please change the permission or remove/rename the file." << endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -99,7 +97,7 @@ int BashModule::executeScriptAs(string serviceUsername)
|
|||||||
int status;
|
int status;
|
||||||
waitpid(-1,&status,0);
|
waitpid(-1,&status,0);
|
||||||
if(status==-1){
|
if(status==-1){
|
||||||
cerr << "Error when executing " << deployAsScript << endl;
|
cerr << "Error when executing " << script << endl;
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
} else {
|
} else {
|
||||||
@ -107,9 +105,9 @@ int BashModule::executeScriptAs(string serviceUsername)
|
|||||||
//executing as the user corresponding to the service
|
//executing as the user corresponding to the service
|
||||||
setgid(p->pw_gid);
|
setgid(p->pw_gid);
|
||||||
setuid(p->pw_uid);
|
setuid(p->pw_uid);
|
||||||
if(execl("/bin/bash", "/bin/bash", "--noediting", "--noprofile", "--norc", deployAsScript.c_str(), serviceUsername, (char *)0)==-1)
|
if(execl("/bin/bash", "/bin/bash", "--noediting", "--noprofile", "--norc", script.c_str(), serviceUsername, (char *)0)==-1)
|
||||||
{
|
{
|
||||||
cerr << "Error in the execl call of " << deployAsScript << endl;
|
cerr << "Error in the execl call of " << script << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -125,11 +123,12 @@ int BashModule::prepare()
|
|||||||
|
|
||||||
int BashModule::deploy (string serviceUsername)
|
int BashModule::deploy (string serviceUsername)
|
||||||
{
|
{
|
||||||
cout << "deploy in bash module called" << endl;
|
string deployScript="./services/"+serviceUsername+"/deploy.sh"; //to be executed as current user
|
||||||
if (executeScript(serviceUsername)!=0){
|
string deployAsScript="./services/"+serviceUsername+"/deploy_user.sh"; //to be executed as the user corresponding to the service
|
||||||
|
if (executeScript(serviceUsername,deployScript)!=0){
|
||||||
cerr << "Error in BashModule::deploy." << endl;
|
cerr << "Error in BashModule::deploy." << endl;
|
||||||
return -1;
|
return -1;
|
||||||
}else if (executeScriptAs(serviceUsername)!=0){
|
}else if (executeScriptAs(serviceUsername,deployAsScript)!=0){
|
||||||
cerr << "Error in BashModule::deploy." << endl;
|
cerr << "Error in BashModule::deploy." << endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -139,6 +138,11 @@ int BashModule::deploy (string serviceUsername)
|
|||||||
|
|
||||||
int BashModule::remove (string serviceUsername)
|
int BashModule::remove (string serviceUsername)
|
||||||
{
|
{
|
||||||
|
string removeScript="./services/"+serviceUsername+"/undeploy_user.sh";
|
||||||
|
if (executeScript(serviceUsername,removeScript)!=0){
|
||||||
|
cerr << "Error in BashModule::deploy." << endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,9 @@ class BashModule : public Module
|
|||||||
int remove(string serviceUsername);
|
int remove(string serviceUsername);
|
||||||
int clean ();
|
int clean ();
|
||||||
private:
|
private:
|
||||||
int executeScript(string serviceUsername);
|
int executeScript(string serviceUsername,string script);
|
||||||
|
int executeScriptAs(string serviceUsername,string script);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in New Issue
Block a user