diff -ruN www/jakarta-tomcat4/Makefile.orig www/jakarta-tomcat4/Makefile --- www/jakarta-tomcat4/Makefile.orig Sun Aug 29 20:36:28 2004 +++ www/jakarta-tomcat4/Makefile Thu Nov 25 01:01:51 2004 @@ -7,6 +7,7 @@ PORTNAME= jakarta-tomcat PORTVERSION= 4.0.6 +PORTREVISION= 1 CATEGORIES= www java MASTER_SITES= http://jakarta.apache.org/builds/jakarta-tomcat-${PORTVERSION:R}/release/v${PORTVERSION}/bin/ \ ${MASTER_SITE_LOCAL} @@ -27,6 +28,7 @@ APP_TITLE= Jakarta Tomcat APP_SHORTNAME= tomcat${MAJOR_VER} CONTROL_SCRIPT_NAME= ${APP_SHORTNAME}ctl +CONTROL_SCRIPT_CONF= conf/${APP_SHORTNAME}ctl.conf CONTROL_SCRIPT= ${PREFIX}/bin/${CONTROL_SCRIPT_NAME} CONTROL_SCRIPT_MANPAGE_TITLE= ${CONTROL_SCRIPT_NAME:U} STARTUP_ORDER?= 020 @@ -45,6 +47,7 @@ STOP_TIMEOUT?= 5 PID_FILE= /var/run/${APP_SHORTNAME}.pid REPLACE_FILES= ${FILESDIR}/daemonctl.c \ + ${FILESDIR}/daemonctl.conf \ ${FILESDIR}/daemonctl.1 \ ${FILESDIR}/startup.sh \ ${WRKSRC}/conf/server.xml @@ -69,7 +72,7 @@ @${ECHO_CMD} " Logfile stderr: ${STDERR_LOG}" @${ECHO_CMD} " Starting after install: ${AUTO_START}" @${ECHO_CMD} " Stop time-out: ${STOP_TIMEOUT} sec." - @PKG_PREFIX=${PREFIX} ${SH} pkg-install ${PKGNAME} PRE-INSTALL + @PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL post-patch: @${ECHO_CMD} -n ">> Removing unneeded files..." @@ -121,11 +124,12 @@ @${ECHO_CMD} -n ">> Compiling and installing control program..." @${SED} \ - -e "/%%JAVA_ARGS%%/s//\"-Dcatalina.home=${APP_HOME:S/\//\\\//g}\",/g" \ - -e "/%%JAR_ARGS%%/s//\"start\",/g" \ - ${WRKDIR}/daemonctl.c > ${WRKDIR}/daemonctl_.c + -e "/%%CONTROL_SCRIPT_CONF%%/s//${CONTROL_SCRIPT_CONF:S/\//\\\//g}/g" \ + -e "/%%JAR_ARGS%%/s//\"start\"/g" \ + ${WRKDIR}/daemonctl.c > ${WRKDIR}/daemonctl_.c @cd ${WRKDIR} && ${CC} -ansi -o ${CONTROL_SCRIPT_NAME} daemonctl_.c @${CP} ${WRKDIR}/${CONTROL_SCRIPT_NAME} ${CONTROL_SCRIPT} + @${CP} ${WRKDIR}/daemonctl.conf ${APP_HOME}/${CONTROL_SCRIPT_CONF} @${CHOWN} ${USER}:${GROUP} ${CONTROL_SCRIPT} @${CHMOD} 6754 ${CONTROL_SCRIPT} @${ECHO_CMD} " [ DONE ]" diff -ruN www/jakarta-tomcat4/files/daemonctl.c.orig www/jakarta-tomcat4/files/daemonctl.c --- www/jakarta-tomcat4/files/daemonctl.c.orig Thu Oct 10 01:10:32 2002 +++ www/jakarta-tomcat4/files/daemonctl.c Thu Nov 25 17:49:16 2004 @@ -21,9 +21,15 @@ #include #include +/* The maximum size of each line of configuration file */ +#define MAX_ARGS_SIZE 256 + /* The maximum size of the PID file, in bytes */ #define MAX_FILE_SIZE 32 +/* The maximum size of string for memory adjusting */ +#define MAX_MEM_SIZE 5 + /* The interval in seconds between the checks to make sure the process died after a kill */ #define STOP_TIME_INTERVAL 1 @@ -39,6 +45,7 @@ #define ERR_ACCESS_JAR_FILE 17 #define ERR_STDOUT_LOGFILE_OPEN 9 #define ERR_STDERR_LOGFILE_OPEN 10 +#define ERR_INCORRECT_CONFIGURATION 18 #define ERR_FORK_FAILED 11 #define ERR_STAT_JAVA_HOME 12 #define ERR_JAVA_HOME_NOT_DIR 13 @@ -307,7 +314,18 @@ */ void start(void) { + FILE *javaConfFile; + char **args; + char *args_jvm = "/usr/local/jdk1.4.2/bin/java"; + char *args_opt; + char *args_jar = "bin/bootstrap.jar"; + char *args_arg = %%JAR_ARGS%%; + char buffer[MAX_ARGS_SIZE]; + int argc; int file; + int i; + int line; + int ok; int pid; int result; int stdoutLogFile; @@ -404,6 +422,73 @@ } lseek(stderrLogFile, (off_t) 0, SEEK_END); + /* Get java parameters */ + argc = 5; + args = (char **) malloc(argc * sizeof(char *)); + args[0] = args_jvm; + javaConfFile = fopen("%%APP_HOME%%/%%CONTROL_SCRIPT_CONF%%", "r"); + if (javaConfFile >= 0) { + line = 0; + while (fgets(buffer, MAX_ARGS_SIZE, javaConfFile) != NULL) { + line++; + i = strlen(buffer); + while ((buffer[--i] == 10) && (i >= 0)) + buffer[i] = 0; + if (buffer[0] == 0) + continue; + + ok = 1; + for (i = -1; ok && (buffer[++i] != 0); ) + ok &= (islower(buffer[i]) || isdigit(buffer[i]) || (buffer[i] == '.')); + ok = (!ok && (i > 0) && (buffer[i++] == '=') && (buffer[i] != 0)); + if (ok && (i == 3)) { + /* memory tuning */ + strcpy(&buffer[2], &buffer[3]); + for (i--; ok && (buffer[i] != 0); i++) + ok &= isdigit(buffer[i]); + ok = (--i > 2) && (ok || (((buffer[i] == 'k') || (buffer[i] == 'm')) && (buffer[++i] == 0))); + + if (ok != 1) { + printf(" [ FAILED ]\n"); + fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Error in %%APP_HOME%%/%%CONTROL_SCRIPT_CONF%%#%i-%i, memory size value is incorrect\n", line, i); + exit(ERR_INCORRECT_CONFIGURATION); + } + + ok = ((buffer[0] == 'm') && ((buffer[1] == 's') || buffer[1] == 'x')) || (buffer[0] == buffer[1] == 's'); + if (ok != 1) { + printf(" [ FAILED ]\n"); + fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Error in %%APP_HOME%%/%%CONTROL_SCRIPT_CONF%%#%i-1, unknown memory parameter\n", line); + exit(ERR_INCORRECT_CONFIGURATION); + } + + args_opt = "-X"; + } else { + /* system property */ + for (; ok && (buffer[i] != 0); i++) + ok &= (isalnum(buffer[i]) || (buffer[i] == '-') || (buffer[i] == '.') || (buffer[i] == '/')); + + if (ok != 1) { + printf(" [ FAILED ]\n"); + fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Error in %%APP_HOME%%/%%CONTROL_SCRIPT_CONF%%#%i-%i\n", line, i); + exit(ERR_INCORRECT_CONFIGURATION); + } + + args_opt = "-D"; + } + + argc++; + args = (char **) realloc(args, argc * sizeof(char *)); + args[argc - 5] = (char *) malloc((i + 3) * sizeof(char)); + strcpy(args[argc - 5], args_opt); + strcpy(args[argc - 5] + 2, &buffer[0]); + } + fclose(javaConfFile); + } + args[argc - 4] = "-jar"; + args[argc - 3] = args_jar; + args[argc - 2] = args_arg; + args[argc - 1] = NULL; + /* Split this process in two */ pid = fork(); if (pid == -1) { @@ -425,7 +510,7 @@ file using pipe(2) */ /* Execute the command */ - execl("%%JAVA_HOME%%/%%JAVA_CMD%%", "%%JAVA_HOME%%/%%JAVA_CMD%%", "-jar", %%JAVA_ARGS%% "%%JAR_FILE%%", %%JAR_ARGS%% NULL); + execv("%%JAVA_HOME%%/%%JAVA_CMD%%", args); fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to start %%APP_TITLE%% %%PORTVERSION%% since '%%JAVA_HOME%%/%%JAVA_CMD%% -jar %%JAR_FILE%%' in %%APP_HOME%%: "); perror(NULL); diff -ruN www/jakarta-tomcat4/files/daemonctl.conf.orig www/jakarta-tomcat4/files/daemonctl.conf --- www/jakarta-tomcat4/files/daemonctl.conf.orig Thu Jan 1 01:00:00 1970 +++ www/jakarta-tomcat4/files/daemonctl.conf Wed Nov 24 23:59:14 2004 @@ -0,0 +1,2 @@ +catalina.home=%%APP_HOME%% +java.io.tmpdir=%%APP_HOME%%/temp/