diff --git a/src/elogd.c b/src/elogd.c
index 51835272..3d194989 100755
--- a/src/elogd.c
+++ b/src/elogd.c
@@ -6,6 +6,9 @@
Contents: Web server program for Electronic Logbook ELOG
$Log$
+ Revision 1.130 2003/07/06 13:28:55 midas
+ Added shell execution facility
+
Revision 1.129 2003/07/04 18:13:42 midas
Fixed small bug
@@ -1182,6 +1185,7 @@ void show_error(char *error);
BOOL enum_user_line(LOGBOOK *lbs, int n, char *user);
int get_user_line(char *logbook_name, char *user, char *password, char *full_name, char *email, char *email_notify);
int strbreak(char *str, char list[][NAME_LENGTH], int size);
+int execute_shell(LOGBOOK *lbs, int message_id, char attrib[MAX_N_ATTR][NAME_LENGTH], char *sh_cmd);
/*---- Funcions from the MIDAS library -----------------------------*/
@@ -3777,6 +3781,10 @@ char message[TEXT_SIZE+1000], attachment_all[64*MAX_ATTACHMENTS];
} while(*p);
}
+ /* execute shell if requested */
+ if (getcfg(lbs->name, "Execute delete", str))
+ execute_shell(lbs, message_id, NULL, str);
+
return EL_SUCCESS;
}
@@ -6114,7 +6122,7 @@ char fl[8][NAME_LENGTH];
}
}
- /* Suppress check box */
+ /* Suppress email check box */
if ( !(bedit && getcfg(lbs->name, "Suppress Email on edit", str) && atoi(str) == 1) )
{
if (getcfg(lbs->name, "Suppress default", str))
@@ -6137,9 +6145,54 @@ char fl[8][NAME_LENGTH];
}
}
+ /* Suppress execute shell check box */
+ if ( !bedit && getcfg(lbs->name, "Execute new", str) )
+ {
+ if (getcfg(lbs->name, "Suppress execute default", str))
+ {
+ if (atoi(str) == 0)
+ {
+ rsprintf(" \n");
+ rsprintf("%s\n", loc("Suppress shell execution"));
+ }
+ else if (atoi(str) == 1)
+ {
+ rsprintf(" \n");
+ rsprintf("%s\n", loc("Suppress shell execution"));
+ }
+ }
+ else
+ {
+ rsprintf(" \n");
+ rsprintf("%s\n", loc("Suppress shell execution"));
+ }
+ }
+
+ if ( bedit && getcfg(lbs->name, "Execute edit", str) )
+ {
+ if (getcfg(lbs->name, "Suppress execute default", str))
+ {
+ if (atoi(str) == 0)
+ {
+ rsprintf(" \n");
+ rsprintf("%s\n", loc("Suppress shell execution"));
+ }
+ else if (atoi(str) == 1)
+ {
+ rsprintf(" \n");
+ rsprintf("%s\n", loc("Suppress shell execution"));
+ }
+ }
+ else
+ {
+ rsprintf(" \n");
+ rsprintf("%s\n", loc("Suppress shell execution"));
+ }
+ }
+
+ /* Resubmit check box */
if (bedit)
{
- /* Resubmit check box */
if (getcfg(lbs->name, "Resubmit default", str))
{
if (atoi(str) == 0)
@@ -10003,6 +10056,31 @@ char list[MAX_PARAM][NAME_LENGTH], url[256], comment[256];
return status;
}
+/*------------------------------------------------------------------*/
+
+int execute_shell(LOGBOOK *lbs, int message_id,
+ char attrib[MAX_N_ATTR][NAME_LENGTH], char *sh_cmd)
+{
+int i;
+char slist[MAX_N_ATTR+10][NAME_LENGTH], svalue[MAX_N_ATTR+10][NAME_LENGTH];
+char shell_cmd[1000];
+
+ strlcpy(shell_cmd, sh_cmd, sizeof(shell_cmd));
+
+ i = build_subst_list(lbs, slist, svalue, attrib);
+
+ /* add message id */
+ strcpy(slist[i], "Message ID");
+ sprintf(svalue[i++], "%d", message_id);
+
+ strsubst(shell_cmd, slist, svalue, i);
+
+ system(shell_cmd);
+
+ return SUCCESS;
+}
+
+
/*------------------------------------------------------------------*/
void submit_elog(LOGBOOK *lbs)
@@ -10295,6 +10373,24 @@ int i, j, n, missing, first, index, mindex, suppress, message_id, resubmit_or
free(mail_to);
+ /*---- shell execution ----*/
+
+ if (!atoi(getparam("shell_suppress")))
+ {
+ if (!*getparam("edit_id"))
+ {
+ if (getcfg(lbs->name, "Execute new", str))
+ execute_shell(lbs, message_id, attrib, str);
+ }
+ else
+ {
+ if (getcfg(lbs->name, "Execute edit", str))
+ execute_shell(lbs, message_id, attrib, str);
+ }
+ }
+
+ /*---- custom submit page ----*/
+
if (getcfg(lbs->name, "Submit page", str))
{
/* check if file starts with an absolute directory */