wprintf(
"Server: %s / %s\r\n"
"Connection: close\r\n",
- SERVER, serv_info.serv_software
+ PACKAGE_STRING, serv_info.serv_software
);
}
* string conversion function
*/
void euid_escapize(char *target, char *source) {
- int i;
+ int i, len;
int target_length = 0;
strcpy(target, "");
- for (i=0; i<strlen(source); ++i) {
- if (isalnum(source[i])) {
+ len = strlen(source);
+ for (i=0; i<len; ++i) {
+ if ( (isalnum(source[i])) || (source[i]=='-') || (source[i]=='_') ) {
target[target_length] = source[i];
target[++target_length] = 0;
}
- else if (source[i] == ' ') {
- target[target_length] = '_';
- target[++target_length] = 0;
- }
- else if (source[i] == '-') {
- target[target_length] = '-';
- target[++target_length] = 0;
- }
else {
- sprintf(&target[target_length], "%%%02X", source[i]);
+ sprintf(&target[target_length], "=%02X", (0xFF & source[i]));
target_length += 3;
}
}
* string conversion function
*/
void euid_unescapize(char *target, char *source) {
- int a, b;
+ int a, b, len;
char hex[3];
int target_length = 0;
strcpy(target, "");
- for (a = 0; a < strlen(source); ++a) {
- if (source[a] == '%') {
+ len = strlen(source);
+ for (a = 0; a < len; ++a) {
+ if (source[a] == '=') {
hex[0] = source[a + 1];
hex[1] = source[a + 2];
hex[2] = 0;
target[++target_length] = 0;
a += 2;
}
- else if (source[a] == '_') {
- target[target_length] = ' ';
- target[++target_length] = 0;
- }
- else if (source[a] == '-') {
- target[target_length] = '-';
- target[++target_length] = 0;
- }
else {
target[target_length] = source[a];
target[++target_length] = 0;
char dav_method[256];
char dav_pathname[256];
char dav_ifmatch[256];
- char dav_depth[256];
- char buf[256];
+ int dav_depth;
char *ds;
- int i;
+ int i, len;
strcpy(dav_method, "");
strcpy(dav_pathname, "");
strcpy(dav_ifmatch, "");
- strcpy(dav_depth, "");
+ dav_depth = 0;
for (rptr=req; rptr!=NULL; rptr=rptr->next) {
if (!strncasecmp(rptr->line, "Host: ", 6)) {
- if (strlen(WC->http_host) == 0) {
+ if (IsEmptyStr(WC->http_host)) {
safestrncpy(WC->http_host, &rptr->line[6],
sizeof WC->http_host);
}
sizeof dav_ifmatch);
}
if (!strncasecmp(rptr->line, "Depth: ", 7)) {
- safestrncpy(dav_depth, &rptr->line[7],
- sizeof dav_depth);
+ if (!strcasecmp(&rptr->line[7], "infinity")) {
+ dav_depth = 32767;
+ }
+ else if (!strcmp(&rptr->line[7], "0")) {
+ dav_depth = 0;
+ }
+ else if (!strcmp(&rptr->line[7], "1")) {
+ dav_depth = 1;
+ }
}
}
/* If the request does not begin with "/groupdav", prepend it. If
* we happen to introduce a double-slash, that's ok; we'll strip it
* in the next step.
- */
+ *
+ * (THIS IS DISABLED BECAUSE WE ARE NOW TRYING TO DO REAL DAV.)
+ *
if (strncasecmp(dav_pathname, "/groupdav", 9)) {
+ char buf[512];
snprintf(buf, sizeof buf, "/groupdav/%s", dav_pathname);
safestrncpy(dav_pathname, buf, sizeof dav_pathname);
}
+ *
+ */
/* Remove any stray double-slashes in pathname */
while (ds=strstr(dav_pathname, "//"), ds != NULL) {
* If there's an If-Match: header, strip out the quotes if present, and
* then if all that's left is an asterisk, make it go away entirely.
*/
- if (strlen(dav_ifmatch) > 0) {
- striplt(dav_ifmatch);
+ len = strlen(dav_ifmatch);
+ if (len > 0) {
+ stripltlen(dav_ifmatch, &len);
if (dav_ifmatch[0] == '\"') {
- strcpy(dav_ifmatch, &dav_ifmatch[1]);
- for (i=0; i<strlen(dav_ifmatch); ++i) {
+ memmove (dav_ifmatch, &dav_ifmatch[1], len);
+ len --;
+ for (i=0; i<len; ++i) {
if (dav_ifmatch[i] == '\"') {
dav_ifmatch[i] = 0;
+ len = i - 1;
}
}
}
*/
if (!strcasecmp(dav_method, "PUT")) {
groupdav_put(dav_pathname, dav_ifmatch,
- dav_content_type, dav_content);
+ dav_content_type, dav_content,
+ dav_content_length);
return;
}
* Output our host prefix for globally absolute URL's.
*/
void groupdav_identify_host(void) {
- if (strlen(WC->http_host) > 0) {
+ if (!IsEmptyStr(WC->http_host)) {
wprintf("%s://%s",
(is_https ? "https" : "http"),
WC->http_host);