*) added environment variable DOCUMENT_ROOT

*) caught exception

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@5466 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
low012 16 years ago
parent f26b8fcb1b
commit c1330f5743

@ -582,6 +582,8 @@ public final class httpdFileHandler {
pb = new ProcessBuilder(targetFile.getAbsolutePath()); pb = new ProcessBuilder(targetFile.getAbsolutePath());
String fileSeparator = System.getProperty("file.separator", "/");
// set environment variables // set environment variables
Map<String, String> env = pb.environment(); Map<String, String> env = pb.environment();
env.put("SERVER_SOFTWARE", getDefaultHeaders(path).get(httpResponseHeader.SERVER)); env.put("SERVER_SOFTWARE", getDefaultHeaders(path).get(httpResponseHeader.SERVER));
@ -603,6 +605,7 @@ public final class httpdFileHandler {
// env.put("AUTH_TYPE", ""); // TODO: implement // env.put("AUTH_TYPE", ""); // TODO: implement
// env.put("REMOTE_USER", ""); // TODO: implement // env.put("REMOTE_USER", ""); // TODO: implement
// env.put("REMOTE_IDENT", ""); // I don't think we need this // env.put("REMOTE_IDENT", ""); // I don't think we need this
env.put("DOCUMENT_ROOT", switchboard.getRootPath().getAbsolutePath() + fileSeparator + switchboard.getConfig("htDocsPath", "DATA/HTDOCS"));
if (requestHeader.getContentType() != null) { if (requestHeader.getContentType() != null) {
env.put("CONTENT_TYPE", requestHeader.getContentType()); env.put("CONTENT_TYPE", requestHeader.getContentType());
} }
@ -616,70 +619,74 @@ public final class httpdFileHandler {
env.put("HTTP_" + requestHeaderKey.toUpperCase().replace("-", "_"), requestHeader.get(requestHeaderKey)); env.put("HTTP_" + requestHeaderKey.toUpperCase().replace("-", "_"), requestHeader.get(requestHeaderKey));
} }
// TODO: set directory path for CGI script if this is necessary at all int exitValue = 0;
//pb.directory(new File(targetFile.getAbsolutePath().substring(0, path.lastIndexOf("/")))); String cgiBody = null;
// start execution of script try {
Process p = pb.start(); // start execution of script
Process p = pb.start();
OutputStream os = new BufferedOutputStream(p.getOutputStream()); OutputStream os = new BufferedOutputStream(p.getOutputStream());
if (method.equalsIgnoreCase(httpHeader.METHOD_POST) && body != null) { if (method.equalsIgnoreCase(httpHeader.METHOD_POST) && body != null) {
byte[] buffer = new byte[1024]; byte[] buffer = new byte[1024];
int len = requestHeader.getContentLength(); int len = requestHeader.getContentLength();
while (len > 0) { while (len > 0) {
body.read(buffer); body.read(buffer);
len = len - buffer.length; len = len - buffer.length;
os.write(buffer); os.write(buffer);
}
} }
}
os.close(); os.close();
try { try {
p.waitFor(); p.waitFor();
} catch (InterruptedException ex) { } catch (InterruptedException ex) {
} }
int exitValue = p.exitValue(); exitValue = p.exitValue();
InputStream is = new BufferedInputStream(p.getInputStream()); InputStream is = new BufferedInputStream(p.getInputStream());
StringBuilder stringBuffer = new StringBuilder(1024); StringBuilder stringBuffer = new StringBuilder(1024);
while (is.available() > 0) { while (is.available() > 0) {
stringBuffer.append((char) is.read()); stringBuffer.append((char) is.read());
} }
String cgiReturn = stringBuffer.toString(); String cgiReturn = stringBuffer.toString();
int indexOfDelimiter = cgiReturn.indexOf("\n\n"); int indexOfDelimiter = cgiReturn.indexOf("\n\n");
String[] cgiHeader = new String[0]; String[] cgiHeader = new String[0];
if (indexOfDelimiter > -1) { if (indexOfDelimiter > -1) {
cgiHeader = cgiReturn.substring(0, indexOfDelimiter).split("\n"); cgiHeader = cgiReturn.substring(0, indexOfDelimiter).split("\n");
} }
String cgiBody = cgiReturn.substring(indexOfDelimiter + 1); cgiBody = cgiReturn.substring(indexOfDelimiter + 1);
String key; String key;
String value; String value;
for (int i = 0; i < cgiHeader.length; i++) { for (int i = 0; i < cgiHeader.length; i++) {
indexOfDelimiter = cgiHeader[i].indexOf(":"); indexOfDelimiter = cgiHeader[i].indexOf(":");
key = cgiHeader[i].substring(0, indexOfDelimiter).trim(); key = cgiHeader[i].substring(0, indexOfDelimiter).trim();
value = cgiHeader[i].substring(indexOfDelimiter + 1).trim(); value = cgiHeader[i].substring(indexOfDelimiter + 1).trim();
conProp.setProperty(key, value); conProp.setProperty(key, value);
if (key.equals("Cache-Control") && value.equals("no-cache")) { if (key.equals("Cache-Control") && value.equals("no-cache")) {
nocache = true; nocache = true;
} else if (key.equals("Content-type")) { } else if (key.equals("Content-type")) {
mimeType = value; mimeType = value;
} else if (key.equals("Status")) { } else if (key.equals("Status")) {
if (key.length() > 2) { if (key.length() > 2) {
try { try {
statusCode = Integer.parseInt(value.substring(0, 3)); statusCode = Integer.parseInt(value.substring(0, 3));
} catch (NumberFormatException ex) { } catch (NumberFormatException ex) {
/* tough luck, we will just have to use 200 as default value */ /* tough luck, we will just have to use 200 as default value */
}
} }
} }
} }
} catch (IOException ex) {
exitValue = -1;
} }
/* did the script return an exit value != 0 and still there is supposed to be /* did the script return an exit value != 0 and still there is supposed to be

Loading…
Cancel
Save