Giter Club home page Giter Club logo

kcaldav's Introduction

Introduction

kcaldav is a simple, safe, and minimal CalDAV server running on the BCHS software stack.

To keep up to date with the current stable release of kcaldav, visit https://kristaps.bsd.lv/kcaldav. The website also contains canonical installation, deployment, examples, and usage documentation.

Installation

You'll need a C compiler (gcc or clang), zlib (zlib or zlib-dev for some package managers), libexpat (libexpat-dev), kcgi, sqlite3 (libsqlite3-dev), and BSD make (bmake for some managers) for building.

Begin by cloning or downloading. Then configure with ./configure, compile with make (BSD make, so it may be bmake on your system), then make install (or use sudo or doas, if applicable).

If not done yet, optionally create a Makefile.local to override values in Makefile for your target file-system.

./configure
make install
make installcgi

The database hasn't updated in a long, long time, so there are no special commands for updating it. When updates do happen, I'll work out a process for doing so.

A common idiom for installing on Linux is to use libbsd as noted in the oconfigure documentation:

CFLAGS=$(pkg-config --cflags libbsd-overlay) \
    ./configure LDFLAGS=$(pkg-config --libs libbsd-overlay)
make
make install

Deployment

To create the database for initial use (or to manage it), follow kcaldav.passwd(1).

If errors occur during operation, see kcaldav.conf.5 for how to configure the system for more debugging information.

Regression and fuzzing

To contribute to kcaldav, write regression tests!

Right now, the regression suite only parses valid iCalendar files from ical4j, but in no way makes sure that the information has been properly parsed. Same with the CalDAV tests. To run these:

make regress

A major missing component is a series of regression tests that actually makes sure that parsed content is sane.

Most of the critical infrastructure can also be run through AFL. To do this, run:

make clean
make afl CC=afl-clang

Or use afl-gcc instead---it shouldn't matter. This installs AFL-built binaries into the afl directory. To run these on the iCalendar library:

cd ical
sh ./dict.sh # Generates dictionary files.
afl-fuzz -i in -x dict -o out -- ../test-ical @@

For CalDAV:

cd caldav
afl-fuzz -i in -o out -- ../test-caldav @@

I'd love for more tests on the server infrastructure itself, but am not sure how to effect this properly.

Sources

The source code is laid out fairly consistently and easily.

The centre of the system is in libkcaldav.a, which contains both the CalDAV and iCalendar functions in libkcaldav.h. It's implemented by ical.c and caldav.c.

The database interface is db.h, manipulating the schema in kcaldav.sql. This is used by server and by the built programs and manages users, collections, resources, proxies, etc. It internally uses the libkcaldav.h functions. It is implemented in db.c.

The built programs are the command-line utility kcaldav.passwd(1) and CGI server kcaldav(8).

The CGI server is described in server.h and implemented by the majority of the source code files with entry point kcaldav.c.

The command-line utility is the standalone kcaldav.passwd.c.

The portability glue throughout the system (e.g., HAVE_xxx macros, config.h, etc.) is managed by oconfigure.

License

All sources use the ISC (like OpenBSD) license. See the LICENSE.md file for details.

kcaldav's People

Contributors

kristapsdz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

kcaldav's Issues

Getting it to run on althttpd

I'm trying to get kcaldav running on althttpd but haven't had much success yet. I was wondering if anyone has already tried this.

kcaldav CGI or FCGI ?

Hi,

Thank you very much for kcaldav. Can I use it use it with an nginx server; which apparently only supports FCGI by default? I was wondering if kcaldav supports FCGI. I am aware that it uses kcgi which, if I'm not mistaken, supports FCGI.

Just to give you some background, I'm searching for a bare-minimum CalDAV server that I would like to run on a Raspberry pi to act as a calendar for my home automation projects. So far, I was able to build and install kcaldav from source on a minimal 7MB Alpine Linux docker container with Nginx. Everything seems to work but I don't know how to deploy it alongside nginx.

I'd be very grateful for any help or pointers,

Cheers

Omit kutil_openlog if DEBUG not defined or 0

I was getting errors when the LOGFILE was missing, or DEBUG was undefined or set to 0.

Might be worthwhile moving kutil_openlog down into the other #if statements along with a check for LOGFILE.

$OpenBSD$

Index: kcaldav.c
--- kcaldav.c.orig
+++ kcaldav.c
@@ -313,7 +313,9 @@ main(void)
        char            *np;
        size_t           i, sz;
 
+#if defined LOGFILE && defined DEBUG && DEBUG > 0
        kutil_openlog(LOGFILE);
+#endif
 
        st = NULL;
 #if defined DEBUG && DEBUG > 1

iCalendar RRULE parser does not adhere to RFC 5545 subclause 3.3.10

I'd like to sincerely thank you for this wonderful project. kcaldav is easy to install (especially via the OpenBSD ports system), and easy to set up and run.

The kcaldav 0.1.7 iCalendar parser does not seem to fully adhere to RFC 5545 subclause 3.3.10: Support for negative values for any of the rule parts that according to subclause 3.3.10 can be set to a negative value is missing. One example where the kcaldav 0.1.7 iCalendar parser deviates from RFC 5545 is handling of the BYSETPOS rule part: The parser limits the valid values to 1 to 366, but RFC 5545 states that the "valid values are 1 to 366 or -366 to -1".

RFC 5545 subclause 3.3.10 provides the following example of how a negative BYSETPOS value can be used to represent "the last work day of the month":

FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1

Due to lack of support for negative BYSETPOS values, the above results in a parse error preventing iCalendar events containing recurrence rules such as the above from being accepted by kcaldav.

httpd with relayd reverse proxy breaks redirects used by kcaldav

I'm running a web server on OpenBSD 7.3 using httpd, with relayd as a reverse proxy. httpd listens only on localhost, and relayd relays http connections to it.

I tried setting up kcaldav on this server, but it seems after my client sends auth data to the server, the response contains a location header which includes the port httpd listens on for local connections from relayd,
which causes the redirect to fail.

Looking at the code, kcaldav seems to just use the value of the SERVER_PORT fcgi parameter, which is set automatically through httpd and seemingly can't be changed through it. Setting appropriate values for X-Forwarded-* headers through relayd also doesn't seem to have any effect. I'm not sure if I'm doing something wrong, or if this kind of setup is currently unsupported.

It would be nice if I could just assign K_SERVER_PORT (for example) and have kcaldav use its value instead if available.

rem2dav fails to authorize properly

Hi!

I don't know if I should open a bug report over at jspricke/remind-caldav or here, but since remind-caldav works flawlessly with other caldav servers, I guess I'm right here... I installed kcaldav and set it up at a a subdomain. It's working with "Kalender.app" from macOS & I guess with iOS, too. But as soon as I start rem2dav, I receive the following errors in access.log:

dav.asdfghasdfgh.de 10.10.10.10 - - [08/Mar/2024:11:38:04 +0100] "REPORT /cgi-bin/kcaldav/mk/calendar HTTP/1.1" 401 0 "" "Mozilla/5.0" 2001:16b8:b922:ec03:17f:b02a:8e60:a7fd 60466
dav.asdfghasdfgh.de 10.10.10.10 - - [08/Mar/2024:11:38:05 +0100] "REPORT /cgi-bin/kcaldav/mk/calendar HTTP/1.1" 401 0 "" "Mozilla/5.0" 2001:16b8:b922:ec03:17f:b02a:8e60:a7fd 60467
dav.asdfghasdfgh.de 10.10.10.10 - - [08/Mar/2024:11:38:05 +0100] "REPORT /cgi-bin/kcaldav/mk/calendar HTTP/1.1" 401 0 "" "Mozilla/5.0" 2001:16b8:b922:ec03:17f:b02a:8e60:a7fd 60468
dav.asdfghasdfgh.de 10.10.10.10 - - [08/Mar/2024:11:38:05 +0100] "REPORT /cgi-bin/kcaldav/mk/calendar HTTP/1.1" 401 0 "" "Mozilla/5.0" 2001:16b8:b922:ec03:17f:b02a:8e60:a7fd 60469
dav.asdfghasdfgh.de 10.10.10.10 - - [08/Mar/2024:11:38:05 +0100] "REPORT /cgi-bin/kcaldav/mk/calendar HTTP/1.1" 401 0 "" "Mozilla/5.0" 2001:16b8:b922:ec03:17f:b02a:8e60:a7fd 60470

I tried different combinations of the URL, e.g. omitting "mk" & "calendar" - nothing works :-(

What follows is the debug log - please excuse a missing patch / ideas how to fix this; I'm in a hurry + I guess I'm mentally not capable to fix this :-(

- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 16220-rx: <?xml version='1.0' encoding='utf-8'?>\r
- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 16220-rx: <C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"><D:prop...
- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 16220-rx: ><C:calendar-data/></D:prop><C:filter><C:comp-filter name="VCALENDAR"><C:comp-fi...
- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 16220-rx: lter name="VEVENT"/></C:comp-filter></C:filter></C:calendar-query>
- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 16220-rx: 266 B
- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 77788-tx: Status: 401 Unauthorized\r
- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 77788-tx: WWW-Authenticate: Digest realm="kcaldav", algorithm="MD5-sess", qop="auth,auth-i...
- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 77788-tx: nt", nonce="52B368136C756667"\r
- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 77788-tx: Content-Encoding: gzip\r
- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 77788-tx: \r
- - [Fri, 08 Mar 2024 10:38:04 GMT] INFO 77788-tx: 163 B
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 74015-rx: <?xml version='1.0' encoding='utf-8'?>\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 74015-rx: <C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"><D:prop...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 74015-rx: ><C:calendar-data/></D:prop><C:filter><C:comp-filter name="VCALENDAR"><C:comp-fi...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 74015-rx: lter name="VEVENT"/></C:comp-filter></C:filter></C:calendar-query>
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 74015-rx: 266 B
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 48549-tx: Status: 401 Unauthorized\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 48549-tx: WWW-Authenticate: Digest realm="kcaldav", algorithm="MD5-sess", qop="auth,auth-i...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 48549-tx: nt", nonce="7767155465662517"\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 48549-tx: Content-Encoding: gzip\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 48549-tx: \r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 48549-tx: 163 B
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 42070-rx: <?xml version='1.0' encoding='utf-8'?>\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 42070-rx: <C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"><D:prop...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 42070-rx: ><C:calendar-data/></D:prop><C:filter><C:comp-filter name="VCALENDAR"><C:comp-fi...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 42070-rx: lter name="VEVENT"/></C:comp-filter></C:filter></C:calendar-query>
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 42070-rx: 266 B
10.10.10.10 - [Fri, 08 Mar 2024 10:38:05 GMT] WARN failed authorisation sequence
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 76046-tx: Status: 401 Unauthorized\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 76046-tx: WWW-Authenticate: Digest realm="kcaldav", algorithm="MD5-sess", qop="auth,auth-i...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 76046-tx: nt", nonce="3545633235727024"\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 76046-tx: Content-Encoding: gzip\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 76046-tx: \r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 76046-tx: 163 B
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 7440-rx: <?xml version='1.0' encoding='utf-8'?>\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 7440-rx: <C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"><D:prop...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 7440-rx: ><C:calendar-data/></D:prop><C:filter><C:comp-filter name="VCALENDAR"><C:comp-fi...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 7440-rx: lter name="VEVENT"/></C:comp-filter></C:filter></C:calendar-query>
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 7440-rx: 266 B
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 17842-tx: Status: 401 Unauthorized\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 17842-tx: WWW-Authenticate: Digest realm="kcaldav", algorithm="MD5-sess", qop="auth,auth-i...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 17842-tx: nt", nonce="72631164147F6513"\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 17842-tx: Content-Encoding: gzip\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 17842-tx: \r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 17842-tx: 163 B
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 1267-rx: <?xml version='1.0' encoding='utf-8'?>\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 1267-rx: <C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"><D:prop...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 1267-rx: ><C:calendar-data/></D:prop><C:filter><C:comp-filter name="VCALENDAR"><C:comp-fi...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 1267-rx: lter name="VEVENT"/></C:comp-filter></C:filter></C:calendar-query>
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 1267-rx: 266 B
10.10.10.10 mk [Fri, 08 Mar 2024 10:38:05 GMT] DB-DEBUG nonce created: D80E462ACFF1F54D
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 70905-tx: Status: 401 Unauthorized\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 70905-tx: WWW-Authenticate: Digest realm="kcaldav", algorithm="MD5-sess", qop="auth,auth-i...
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 70905-tx: nt", nonce="D80E462ACFF1F54D", stale=true\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 70905-tx: Content-Encoding: gzip\r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 70905-tx: \r
- - [Fri, 08 Mar 2024 10:38:05 GMT] INFO 70905-tx: 175 B

Before you ask - yes: the username and password is correct; double & triple-checked!

Best wishes.

P.S.: I'd be willing to fund the ability to sync CardDAV, too (kcarddav) - depends on the maximum amount of $$ needed... If I shall contact you privately, just leave a note in here!

415 Unsupported Media Type with davdroid

davdroid chokes on an '415 Unsupported Media Type', due to querying carddav- besides caldav-properties if I read this correctly. Would it be possible to just ignore all carddav-properties?

See #8

Here is the davdroid-log, kcaldav-system.log follows.

There is also an (davdroid) issue with authentication as noted here which may obscure the one described in this issue: when repeatedly trying to register an account in davdroid w/o closing the app in between, it seems to somehow get the nounce-counter wrong resulting in a 401.

See kristapsdz/kcgi#41

If I can test or help further in some way, let me know.

52386: <?xml version='1.0' encoding='UTF-8' ?><propfind xmlns="DAV:" xmlns:CAL="urn:ietf:params:xml:ns:caldav" xmlns:CARD="urn:ietf:params:xml:ns:carddav"><prop><resourcetype /><displayname /><CARD:addressbook-description /><CARD:addressbook-home-set /><current-user-principal /></prop></propfind>
52386: 290 B rx
caldav.c:513: DEBUG: Known element: DAV::propfind
caldav.c:513: DEBUG: Known element: DAV::prop
caldav.c:489: DEBUG: Known property: DAV::resourcetype
caldav.c:489: DEBUG: Known property: DAV::displayname
caldav.c:487: DEBUG: Unknown property: urn:ietf:params:xml:ns:carddav:addressbook-description
caldav.c:487: DEBUG: Unknown property: urn:ietf:params:xml:ns:carddav:addressbook-home-set
caldav.c:489: DEBUG: Known property: DAV::current-user-principal
15282: Status: 401 Unauthorized\r
15282: WWW-Authenticate: Digest realm="kcaldav", algorithm="MD5-sess", qop="auth,auth-int", nonce="7667457262237677"\r
15282: Content-Encoding: gzip\r
15282: \r
15282: 163 B tx
20469: <?xml version='1.0' encoding='UTF-8' ?><propfind xmlns="DAV:" xmlns:CAL="urn:ietf:params:xml:ns:caldav" xmlns:CARD="urn:ietf:params:xml:ns:carddav"><prop><resourcetype /><displayname /><CARD:addressbook-description /><CARD:addressbook-home-set /><current-user-principal /></prop></propfind>
20469: 290 B rx
caldav.c:513: DEBUG: Known element: DAV::propfind
caldav.c:513: DEBUG: Known element: DAV::prop
caldav.c:489: DEBUG: Known property: DAV::resourcetype
caldav.c:489: DEBUG: Known property: DAV::displayname
caldav.c:487: DEBUG: Unknown property: urn:ietf:params:xml:ns:carddav:addressbook-description
caldav.c:487: DEBUG: Unknown property: urn:ietf:params:xml:ns:carddav:addressbook-home-set
caldav.c:489: DEBUG: Known property: DAV::current-user-principal
kcaldav.c:415: DEBUG: test: PROPFIND: /<test>/<>/<>
kcaldav.c:462: DEBUG: test: principal validated
db.c:489: DEBUG: nonce count: 26
db.c:521: DEBUG: nonce attempt: 156397D23CD9498B
db.c:535: DEBUG: nonce created: 156397D23CD9498B
73767: Status: 401 Unauthorized\r
73767: WWW-Authenticate: Digest realm="kcaldav", algorithm="MD5-sess", qop="auth,auth-int", nonce="156397D23CD9498B", stale=true\r
73767: Content-Encoding: gzip\r
73767: \r
73767: 175 B tx
75416: <?xml version='1.0' encoding='UTF-8' ?><propfind xmlns="DAV:" xmlns:CAL="urn:ietf:params:xml:ns:caldav" xmlns:CARD="urn:ietf:params:xml:ns:carddav"><prop><resourcetype /><displayname /><CARD:addressbook-description /><CARD:addressbook-home-set /><current-user-principal /></prop></propfind>
75416: 290 B rx
caldav.c:513: DEBUG: Known element: DAV::propfind
caldav.c:513: DEBUG: Known element: DAV::prop
caldav.c:489: DEBUG: Known property: DAV::resourcetype
caldav.c:489: DEBUG: Known property: DAV::displayname
caldav.c:487: DEBUG: Unknown property: urn:ietf:params:xml:ns:carddav:addressbook-description
caldav.c:487: DEBUG: Unknown property: urn:ietf:params:xml:ns:carddav:addressbook-home-set
caldav.c:489: DEBUG: Known property: DAV::current-user-principal
kcaldav.c:415: DEBUG: test: PROPFIND: /<test>/<>/<>
kcaldav.c:462: DEBUG: test: principal validated
db.c:456: DEBUG: nonce updated: 156397D23CD9498B, count 3
[2018-06-15 10:09]:propfind.c:63: WARNING: [email protected]: not CalDAV MIME
85172: Status: 415 Unsupported Media Type\r
85172: Content-Encoding: gzip\r
85172: \r
85172: 62 B tx
48709: <?xml version='1.0' encoding='UTF-8' ?><propfind xmlns="DAV:" xmlns:CAL="urn:ietf:params:xml:ns:caldav" xmlns:CARD="urn:ietf:params:xml:ns:carddav"><prop><resourcetype /><displayname /><n0:calendar-color xmlns:n0="http://apple.com/ns/ical/" /><CAL:calendar-description /><CAL:calendar-timezone /><current-user-privilege-set /><CAL:supported-calendar-component-set /><CAL:calendar-home-set /><current-user-principal /></prop></propfind>
48709: 435 B rx
caldav.c:513: DEBUG: Known element: DAV::propfind
caldav.c:513: DEBUG: Known element: DAV::prop
caldav.c:489: DEBUG: Known property: DAV::resourcetype
caldav.c:489: DEBUG: Known property: DAV::displayname
caldav.c:489: DEBUG: Known property: http://apple.com/ns/ical/:calendar-color
caldav.c:489: DEBUG: Known property: urn:ietf:params:xml:ns:caldav:calendar-description
caldav.c:489: DEBUG: Known property: urn:ietf:params:xml:ns:caldav:calendar-timezone
caldav.c:489: DEBUG: Known property: DAV::current-user-privilege-set
caldav.c:489: DEBUG: Known property: urn:ietf:params:xml:ns:caldav:supported-calendar-component-set
caldav.c:489: DEBUG: Known property: urn:ietf:params:xml:ns:caldav:calendar-home-set
caldav.c:489: DEBUG: Known property: DAV::current-user-principal
kcaldav.c:415: DEBUG: test: PROPFIND: /<test>/<>/<>
kcaldav.c:462: DEBUG: test: principal validated
db.c:456: DEBUG: nonce updated: 156397D23CD9498B, count 5
[2018-06-15 10:09]:propfind.c:63: WARNING: [email protected]: not CalDAV MIME
91199: Status: 415 Unsupported Media Type\r
91199: Content-Encoding: gzip\r
91199: \r
91199: 62 B tx

kcaldav does not handle Content-Type: application/xml

kcaldav only accepts text/xml as Content-Type in propfind / proppatch and therefore excludes clients which use application/xml.

It seems like the use of text/xml in WebDAV-context is actually deprecated:

When XML is used for a request or response body, the Content-Type
type SHOULD be application/xml. Implementations MUST accept both
text/xml and application/xml in request and response bodies. Use of
text/xml is deprecated.

Probably it would be useful to adding application/xml as valid type to kcgi instead of adding it only to kcaldav.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.