68 lines (58 with data), 1.9 kB
/*-*- mode: C; tab-width:4 -*-*/
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
/* convenience and SELinux security wrapper for java. This file is
called by the service script and should be tagged with appropriate
security context (see chcon(1)). */
void usage(char*name){
fprintf(stderr, "Usage: %s <socketname> <logLevel> <logFile>\n", name);
fprintf(stderr, "Example 1: %s /var/run/.php-java-bridge_socket 4 /var/log/php-java-bridge.log\n", name);
fprintf(stderr, "Example 2: %s INET:9167 3 \"\" \n", name);
exit(1);
}
char *stringcat(char *s1, char *s2) {
char *s3=malloc(strlen(s1)+strlen(s2)+1);
*s3=0; strcat(s3,s1);
return strcat(s3,s2);
}
char *stringdup(char *s) {
if(!s) return s;
return strdup(s);
}
#ifndef EXTENSION_DIR
#error EXTENSION_DIR must point to the PHP extension directory
#endif
char *java="@PHP_JAVA@";
int main(int argc, char**_argv){
char **argv;
char *vm;
if(argc<4) usage(_argv[0]);
if(strlen(java)==3&&!strcmp("yes",java))
vm = stringcat(EXTENSION_DIR, "/java");
else
vm = stringcat(java, "/bin/java");
if(argc==4) {
argv=calloc(9, sizeof*argv);
argv[0]=vm;
argv[1]=stringcat("-Djava.class.path=", EXTENSION_DIR/**/"/JavaBridge.jar");
argv[2]=stringcat("-Djava.library.path=", EXTENSION_DIR);
argv[3]=stringdup("-Djava.awt.headless=true");
argv[4]=stringdup("php.java.bridge.JavaBridge");
argv[5]=stringdup(_argv[1]); /* socketname */
argv[6]=stringdup(_argv[2]); /* logLevel */
argv[7]=stringdup(_argv[3]); /* logFile */
argv[8]=0; /* last arg */
} else {
int i;
argv=calloc(argc, sizeof*argv);
for(i=0; i<argc-1; i++)
argv[i]=stringdup(_argv[i+1]);
argv[i]=0;
}
execv(argv[0], argv);
fprintf(stderr, "Could not execute %s: %s\n", argv[0], strerror(errno));
return 2;
}