[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