[Initng-svn] r4356 - initng/trunk/plugins/bash_parser
svn at initng.thinktux.net
svn at initng.thinktux.net
Sun Jun 4 21:45:46 CEST 2006
Author: jimmy
Date: Sun Jun 4 21:45:44 2006
New Revision: 4356
Modified:
initng/trunk/plugins/bash_parser/bp.c
initng/trunk/plugins/bash_parser/initng_bash_parser.c
Log:
Fix initng_bash_parser to really rock.
Modified: initng/trunk/plugins/bash_parser/bp.c
==============================================================================
--- initng/trunk/plugins/bash_parser/bp.c (original)
+++ initng/trunk/plugins/bash_parser/bp.c Sun Jun 4 21:45:44 2006
@@ -59,6 +59,7 @@
int main(int argc, char **argv)
{
int status = 99;
+ char *service = NULL;
/* cut path or so from name */
char *argv0 = strrchr(argv[0], '/');
@@ -68,76 +69,158 @@
if (argv0[0] == '/')
argv0++;
+ service = getenv("SERVICE");
+
+ /*if(service)
+ printf("SERVICE: %s\n", service);*/
+
/* printf("argc: %i argv[0]: %s :: %s\n", argc, argv[0], argv0); */
/* Sort by the number of arguments */
- switch (argc)
+
+ /* if service is known, we dont need that in the argline */
+ if (service)
{
- case 2:
- /* abort service */
- if (strcmp(argv0, "abort") == 0 || strcmp(argv0, "iabort") == 0)
- {
- status = bp_abort(argv[1]);
- break;
- }
-
- /* done service */
- if (strcmp(argv0, "done") == 0 || strcmp(argv0, "idone") == 0)
- {
- status = bp_done(argv[1]);
- break;
- }
- break;
-
- case 3:
- /* get service chdir */
- if (strcmp(argv0, "get") == 0 || strcmp(argv0, "iget") == 0)
- {
- status = bp_get_variable(argv[1], argv[2], NULL);
- break;
- }
-
- /* register service_type test */
- if (strcmp(argv0, "register") == 0 ||
- strcmp(argv0, "iregister") == 0)
- {
- status = bp_new_active(argv[1], argv[2]);
- break;
- }
- break;
-
- case 4:
- /* get service exec start */
- if (strcmp(argv0, "get") == 0 || strcmp(argv0, "iget") == 0)
- {
- status = bp_get_variable(argv[1], argv[2], argv[3]);
- break;
- }
- break;
-
- case 5:
- /* set service chdir = /root */
- if (argv[3][0] == '=' && (strcmp(argv0, "set") == 0 ||
- strcmp(argv0, "iset") == 0))
- {
- status = bp_set_variable(argv[1], argv[2], NULL, argv[4]);
- break;
- }
- break;
-
- case 6:
- /* set service exec start = /bin/true */
- if (argv[4][0] == '=' && (strcmp(argv0, "set") == 0 ||
- strcmp(argv0, "iset") == 0))
- {
- status = bp_set_variable(argv[1], argv[2], argv[3], argv[5]);
- break;
- }
- break;
- default:
- break;
+ switch (argc)
+ {
+ case 1:
+ /* abort <service> */
+ if (strcmp(argv0, "abort") == 0
+ || strcmp(argv0, "iabort") == 0)
+ {
+ status = bp_abort(service);
+ break;
+ }
+
+ /* done <service> */
+ if (strcmp(argv0, "done") == 0 || strcmp(argv0, "idone") == 0)
+ {
+ status = bp_done(service);
+ break;
+ }
+ break;
+
+ case 2:
+ /* get <service> chdir */
+ if (strcmp(argv0, "get") == 0 || strcmp(argv0, "iget") == 0)
+ {
+ status = bp_get_variable(service, argv[1], NULL);
+ break;
+ }
+
+ /* register service_type <service> */
+ if (strcmp(argv0, "register") == 0 ||
+ strcmp(argv0, "iregister") == 0)
+ {
+ status = bp_new_active(argv[1], service);
+ break;
+ }
+ break;
+
+ case 3:
+ /* get <service> exec start */
+ if (strcmp(argv0, "get") == 0 || strcmp(argv0, "iget") == 0)
+ {
+ status = bp_get_variable(service, argv[1], argv[2]);
+ break;
+ }
+ break;
+
+ case 4:
+ /* set <service> chdir = /root */
+ if (argv[2][0] == '=' && (strcmp(argv0, "set") == 0 ||
+ strcmp(argv0, "iset") == 0))
+ {
+ status = bp_set_variable(service, argv[1], NULL, argv[3]);
+ break;
+ }
+ break;
+
+ case 5:
+ /* set <service> exec start = /bin/true */
+ if (argv[3][0] == '=' && (strcmp(argv0, "set") == 0 ||
+ strcmp(argv0, "iset") == 0))
+ {
+ status = bp_set_variable(service, argv[1], argv[2],
+ argv[4]);
+ break;
+ }
+ break;
+ default:
+ break;
+ }
}
+ else
+ {
+ switch (argc)
+ {
+ case 2:
+ /* abort service */
+ if (strcmp(argv0, "abort") == 0
+ || strcmp(argv0, "iabort") == 0)
+ {
+ status = bp_abort(argv[1]);
+ break;
+ }
+
+ /* done service */
+ if (strcmp(argv0, "done") == 0 || strcmp(argv0, "idone") == 0)
+ {
+ status = bp_done(argv[1]);
+ break;
+ }
+ break;
+
+ case 3:
+ /* get service chdir */
+ if (strcmp(argv0, "get") == 0 || strcmp(argv0, "iget") == 0)
+ {
+ status = bp_get_variable(argv[1], argv[2], NULL);
+ break;
+ }
+
+ /* register service_type test */
+ if (strcmp(argv0, "register") == 0 ||
+ strcmp(argv0, "iregister") == 0)
+ {
+ status = bp_new_active(argv[1], argv[2]);
+ break;
+ }
+ break;
+
+ case 4:
+ /* get service exec start */
+ if (strcmp(argv0, "get") == 0 || strcmp(argv0, "iget") == 0)
+ {
+ status = bp_get_variable(argv[1], argv[2], argv[3]);
+ break;
+ }
+ break;
+
+ case 5:
+ /* set service chdir = /root */
+ if (argv[3][0] == '=' && (strcmp(argv0, "set") == 0 ||
+ strcmp(argv0, "iset") == 0))
+ {
+ status = bp_set_variable(argv[1], argv[2], NULL, argv[4]);
+ break;
+ }
+ break;
+ case 6:
+ /* set service exec start = /bin/true */
+ if (argv[4][0] == '=' && (strcmp(argv0, "set") == 0 ||
+ strcmp(argv0, "iset") == 0))
+ {
+ status = bp_set_variable(argv[1], argv[2], argv[3],
+ argv[5]);
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
/* if still 99, print usage */
if (status == 99)
{
@@ -242,7 +325,7 @@
/* Open, Send, Read, Close */
int bp_send(bp_req * to_send)
{
- int sock = 3; /* testing fd 3, that is the oficcial pipe to initng for this communication */
+ int sock = 3; /* testing fd 3, that is the oficcial pipe to initng for this communication */
int len;
struct sockaddr_un sockname;
@@ -255,9 +338,9 @@
to_send->version = BASH_PARSER_VERSION;
/* check if we can use fd 3 to talk to initng */
- if(fcntl(sock, F_GETFD)<0)
+ if (fcntl(sock, F_GETFD) < 0)
{
-
+
/* ELSE Create new socket. */
sock = socket(PF_UNIX, SOCK_STREAM, 0);
if (sock < 0)
@@ -278,7 +361,7 @@
return (FALSE);
}
}
-
+
/* Put it not to block, waiting for more data on rscv */
{
int cur = fcntl(sock, F_GETFL, 0);
@@ -308,7 +391,7 @@
}
/* close the socket, if its an own created one */
- if(sock != 3)
+ if (sock != 3)
close(sock);
/* if initng leave us a message, save it */
Modified: initng/trunk/plugins/bash_parser/initng_bash_parser.c
==============================================================================
--- initng/trunk/plugins/bash_parser/initng_bash_parser.c (original)
+++ initng/trunk/plugins/bash_parser/initng_bash_parser.c Sun Jun 4 21:45:44 2006
@@ -114,16 +114,16 @@
memset(&rep, 0, sizeof(bp_rep));
/* use file descriptor, because fread hangs here? */
- r=RSCV();
-
+ r = RSCV();
+
/* make sure it has not closed */
- if(r==0)
+ if (r == 0)
{
- /*printf("Closing %i.\n", fd);*/
+ /*printf("Closing %i.\n", fd); */
close(fd);
return;
}
-
+
if (r != (signed) sizeof(bp_req))
{
F_("Could not read incomming bash_parser req.\n");
@@ -643,7 +643,8 @@
active_db_h *new_active;
process_h *process;
pipe_h *current_pipe;
- /*printf("create_new_active(%s);\n", name);*/
+
+ /*printf("create_new_active(%s);\n", name); */
/* check if initfile exists */
strncat(file, name, 1020 - strlen(SCRIPT_PATH));
@@ -714,21 +715,21 @@
static int get_pipe(active_db_h * service, process_h * process, pipe_h * pi)
{
- /*printf("get_pipe(%s, %i, %i);\n", service->name, pi->dir, pi->targets[0]);*/
+ /*printf("get_pipe(%s, %i, %i);\n", service->name, pi->dir, pi->targets[0]); */
/* extra check */
- if(pi->dir != IN_AND_OUT_PIPE)
- return(FALSE);
+ if (pi->dir != IN_AND_OUT_PIPE)
+ return (FALSE);
/* the pipe we opened was on fd 3 */
- if(pi->targets[0] != 3)
- return(FALSE);
+ if (pi->targets[0] != 3)
+ return (FALSE);
/* handle the client in the same way, as a fifo connected one */
bp_handle_client(pi->pipe[1]);
-
+
/* return happy */
- return(TRUE);
+ return (TRUE);
}
int module_init(int api_version)
@@ -746,7 +747,7 @@
D_("adding hook, that will reopen socket, for every started service.\n");
initng_process_db_ptype_register(&parse);
- /*initng_plugin_hook_register(&g.FDWATCHERS, 30, &bpf);*/
+ /*initng_plugin_hook_register(&g.FDWATCHERS, 30, &bpf); */
initng_plugin_hook_register(&g.SIGNAL, 50, &bp_check_socket);
initng_plugin_hook_register(&g.NEW_ACTIVE, 50, &create_new_active);
initng_plugin_hook_register(&g.PIPE_WATCHER, 30, &get_pipe);
@@ -768,7 +769,7 @@
/* remove hooks */
initng_process_db_ptype_unregister(&parse);
- /* initng_plugin_hook_unregister(&g.FDWATCHERS, &bpf);*/
+ /* initng_plugin_hook_unregister(&g.FDWATCHERS, &bpf); */
initng_plugin_hook_unregister(&g.SIGNAL, &bp_check_socket);
initng_plugin_hook_unregister(&g.NEW_ACTIVE, &create_new_active);
initng_plugin_hook_unregister(&g.PIPE_WATCHER, &get_pipe);
More information about the Initng-svn
mailing list