]> code.citadel.org Git - citadel.git/commitdiff
* Rolled all of the groupdav*.[ch] files way back to version 3851. Something
authorArt Cancro <ajc@citadel.org>
Tue, 31 Jan 2006 05:01:18 +0000 (05:01 +0000)
committerArt Cancro <ajc@citadel.org>
Tue, 31 Jan 2006 05:01:18 +0000 (05:01 +0000)
  somewhere in willi's doxygen changes broke GroupDAV protocol.  Since I was
  unable to figure out where, I had to roll it all back.
* The good news is that the server-absolute URL's do work after all, so I
  reinstated that.

webcit/ChangeLog
webcit/groupdav.h
webcit/groupdav_delete.c
webcit/groupdav_get.c
webcit/groupdav_main.c
webcit/groupdav_options.c
webcit/groupdav_propfind.c
webcit/groupdav_put.c

index aa333b98ae499797e6c6653486678eb2aab37ddc..b654b3cffb38653d1bc361e540ae1c586bb0606d 100644 (file)
@@ -1,5 +1,12 @@
 $Id$
 
+Mon Jan 30 23:59:47 EST 2006 ajc
+* Rolled all of the groupdav*.[ch] files way back to version 3851.  Something
+  somewhere in willi's doxygen changes broke GroupDAV protocol.  Since I was
+  unable to figure out where, I had to roll it all back.
+* The good news is that the server-absolute URL's do work after all, so I
+  reinstated that.
+
 Mon Jan 30 16:52:37 EST 2006 ajc
 * Reversed the previous change
 
index 7ebb5e2b1f6488c32d8df8a175443623027f37e1..8e57e27957ec018ddc215821435e84a92f93f658 100644 (file)
@@ -11,4 +11,4 @@ long locate_message_by_uid(char *);
 void groupdav_folder_list(void);
 void euid_escapize(char *, char *);
 void euid_unescapize(char *, char *);
-void output_host_prefix(void);
+void groupdav_identify_host(void);
index 43fcc8b17b577e8e2e4ebbb7a6d0bf2fcfa077c5..2d44b8fc1cce551e46ce49752b7d7cdac227e91f 100644 (file)
@@ -1,20 +1,17 @@
 /*
  * $Id$
+ *
+ * Handles GroupDAV DELETE requests.
+ *
  */
-/**
- * \defgroup GroupdavDel Handle GroupDAV DELETE requests.
- * \ingroup WebcitHttpServerGDav
- */
-/*@{*/
+
 #include "webcit.h"
 #include "webserver.h"
 #include "groupdav.h"
 
 
-/**
- * \brief The pathname is always going to be /groupdav/room_name/euid
- * \param dav_pathname the groupdav pathname
- * \param dav_ifmatch item to delete ????
+/*
+ * The pathname is always going to be /groupdav/room_name/euid
  */
 void groupdav_delete(char *dav_pathname, char *dav_ifmatch) {
        char dav_roomname[SIZ];
@@ -23,22 +20,22 @@ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) {
        char buf[SIZ];
        int n = 0;
 
-       /** First, break off the "/groupdav/" prefix */
+       /* First, break off the "/groupdav/" prefix */
        remove_token(dav_pathname, 0, '/');
        remove_token(dav_pathname, 0, '/');
 
-       /** Now extract the message euid */
+       /* Now extract the message euid */
        n = num_tokens(dav_pathname, '/');
        extract_token(dav_uid, dav_pathname, n-1, '/', sizeof dav_uid);
        remove_token(dav_pathname, n-1, '/');
 
-       /** What's left is the room name.  Remove trailing slashes. */
+       /* What's left is the room name.  Remove trailing slashes. */
        if (dav_pathname[strlen(dav_pathname)-1] == '/') {
                dav_pathname[strlen(dav_pathname)-1] = 0;
        }
        strcpy(dav_roomname, dav_pathname);
 
-       /** Go to the correct room. */
+       /* Go to the correct room. */
        if (strcasecmp(WC->wc_roomname, dav_roomname)) {
                gotoroom(dav_roomname);
        }
@@ -51,7 +48,7 @@ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) {
 
        dav_msgnum = locate_message_by_uid(dav_uid);
 
-       /**
+       /*
         * If no item exists with the requested uid ... simple error.
         */
        if (dav_msgnum < 0L) {
@@ -61,7 +58,7 @@ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) {
                return;
        }
 
-       /**
+       /*
         * It's there ... check the ETag and make sure it matches
         * the message number.
         */
@@ -74,7 +71,7 @@ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) {
                }
        }
 
-       /**
+       /*
         * Ok, attempt to delete the item.
         */
        serv_printf("DELE %ld", dav_msgnum);
@@ -91,6 +88,3 @@ void groupdav_delete(char *dav_pathname, char *dav_ifmatch) {
        }
        return;
 }
-
-
-/*@}*/
index 38c05bf814ab8e53f8f7802b50cda4d4f3f658e3..70f75bbd5ef04bf8d8079b734f8000fe13dc7174 100644 (file)
@@ -1,20 +1,17 @@
 /*
  * $Id$
- */
-/**
- * \defgraup GroupdavGet Handle GroupDAV GET requests.
- * \ingroup WebcitHttpServerGDav
+ *
+ * Handles GroupDAV GET requests.
  *
  */
-/*@{*/
+
 #include "webcit.h"
 #include "webserver.h"
 #include "groupdav.h"
 
 
-/**
- * \brief The pathname is always going to be /groupdav/room_name/euid
- * \param dav_pathname the pathname to print
+/*
+ * The pathname is always going to be /groupdav/room_name/euid
  */
 void groupdav_get(char *dav_pathname) {
        char dav_roomname[SIZ];
@@ -25,22 +22,22 @@ void groupdav_get(char *dav_pathname) {
        int in_body = 0;
        int found_content_type = 0;
 
-       /** First, break off the "/groupdav/" prefix */
+       /* First, break off the "/groupdav/" prefix */
        remove_token(dav_pathname, 0, '/');
        remove_token(dav_pathname, 0, '/');
 
-       /** Now extract the message euid */
+       /* Now extract the message euid */
        n = num_tokens(dav_pathname, '/');
        extract_token(dav_uid, dav_pathname, n-1, '/', sizeof dav_uid);
        remove_token(dav_pathname, n-1, '/');
 
-       /** What's left is the room name.  Remove trailing slashes. */
+       /* What's left is the room name.  Remove trailing slashes. */
        if (dav_pathname[strlen(dav_pathname)-1] == '/') {
                dav_pathname[strlen(dav_pathname)-1] = 0;
        }
        strcpy(dav_roomname, dav_pathname);
 
-       /** Go to the correct room. */
+       /* Go to the correct room. */
        if (strcasecmp(WC->wc_roomname, dav_roomname)) {
                gotoroom(dav_roomname);
        }
@@ -94,6 +91,3 @@ void groupdav_get(char *dav_pathname) {
                }
        }
 }
-
-
-/*@}*/
index 6fe89b1b927e0fd54d715255e81b6fa186843a6a..3ff6e389575a2bf44a0d62970dcd04d16b3fcc92 100644 (file)
@@ -1,19 +1,17 @@
 /*
  * $Id$
- */
-/**
- * \defgroup GroupdavMain Entry point for GroupDAV functions
- * \ingroup WebcitHttpServerGDav
+ *
+ * Entry point for GroupDAV functions
  *
  */
-/*@{*/
+
 #include "webcit.h"
 #include "webserver.h"
 #include "groupdav.h"
 
 
-/**
- * \brief Output HTTP headers which are common to all requests.
+/*
+ * Output HTTP headers which are common to all requests.
  *
  * Please observe that we don't use the usual output_headers()
  * and wDumpContent() functions in the GroupDAV subsystem, so we
@@ -30,10 +28,8 @@ void groupdav_common_headers(void) {
 
 
 
-/**
- * \brief string conversion function
- * \param target output string
- * \param source string to process
+/*
+ * string conversion function
  */
 void euid_escapize(char *target, char *source) {
        int i;
@@ -60,10 +56,8 @@ void euid_escapize(char *target, char *source) {
        }
 }
 
-/**
- * \brief string conversion function
- * \param target output string
- * \param source string to process
+/*
+ * string conversion function
  */
 void euid_unescapize(char *target, char *source) {
        int a, b;
@@ -101,12 +95,8 @@ void euid_unescapize(char *target, char *source) {
 
 
 
-/**
- * \brief Main entry point for GroupDAV requests
- * \param req Request header
- * \param dav_content_type the kind of dav elemet to represent??
- * \param dav_content_length the length of our response
- * \param dav_content the actual content to give back
+/*
+ * Main entry point for GroupDAV requests
  */
 void groupdav_main(struct httprequest *req,
                        char *dav_content_type,
@@ -126,6 +116,12 @@ void groupdav_main(struct httprequest *req,
        strcpy(dav_ifmatch, "");
 
        for (rptr=req; rptr!=NULL; rptr=rptr->next) {
+               if (!strncasecmp(rptr->line, "Host: ", 6)) {
+                       if (strlen(WC->http_host) == 0) {
+                               safestrncpy(WC->http_host, &rptr->line[6],
+                                       sizeof WC->http_host);
+                       }
+                }
                if (!strncasecmp(rptr->line, "If-Match: ", 10)) {
                         safestrncpy(dav_ifmatch, &rptr->line[10],
                                sizeof dav_ifmatch);
@@ -145,8 +141,7 @@ void groupdav_main(struct httprequest *req,
        extract_token(dav_pathname, req->line, 1, ' ', sizeof dav_pathname);
        unescape_input(dav_pathname);
 
-       /**
-        * If the request does not begin with "/groupdav", prepend it.  If
+       /* 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.
         */
@@ -155,12 +150,12 @@ void groupdav_main(struct httprequest *req,
                safestrncpy(dav_pathname, buf, sizeof dav_pathname);
        }
        
-       /** Remove any stray double-slashes in pathname */
+       /* Remove any stray double-slashes in pathname */
        while (ds=strstr(dav_pathname, "//"), ds != NULL) {
                strcpy(ds, ds+1);
        }
 
-       /**
+       /*
         * 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.
         */
@@ -179,7 +174,7 @@ void groupdav_main(struct httprequest *req,
                }
        }
 
-       /**
+       /*
         * The OPTIONS method is not required by GroupDAV.  This is an
         * experiment to determine what might be involved in supporting
         * other variants of DAV in the future.
@@ -189,7 +184,7 @@ void groupdav_main(struct httprequest *req,
                return;
        }
 
-       /**
+       /*
         * The PROPFIND method is basically used to list all objects in a
         * room, or to list all relevant rooms on the server.
         */
@@ -198,7 +193,7 @@ void groupdav_main(struct httprequest *req,
                return;
        }
 
-       /**
+       /*
         * The GET method is used for fetching individual items.
         */
        if (!strcasecmp(dav_method, "GET")) {
@@ -206,7 +201,7 @@ void groupdav_main(struct httprequest *req,
                return;
        }
 
-       /**
+       /*
         * The PUT method is used to add or modify items.
         */
        if (!strcasecmp(dav_method, "PUT")) {
@@ -215,7 +210,7 @@ void groupdav_main(struct httprequest *req,
                return;
        }
 
-       /**
+       /*
         * The DELETE method kills, maims, and destroys.
         */
        if (!strcasecmp(dav_method, "DELETE")) {
@@ -223,7 +218,7 @@ void groupdav_main(struct httprequest *req,
                return;
        }
 
-       /**
+       /*
         * Couldn't find what we were looking for.  Die in a car fire.
         */
        wprintf("HTTP/1.1 501 Method not implemented\r\n");
@@ -236,16 +231,13 @@ void groupdav_main(struct httprequest *req,
 }
 
 
-/**
- * \brief Output http[s]://fqdn.example.com[:port] to the client.
- */
-void output_host_prefix(void) {
+/*
+ * Output our host prefix for globally absolute URL's.
+ */  
+void groupdav_identify_host(void) {
        if (strlen(WC->http_host) > 0) {
                wprintf("%s://%s",
                        (is_https ? "https" : "http"),
                        WC->http_host);
        }
 }
-
-
-/*@}*/
index 1f476bc2cc423cdf0ecbf2e32a7827f8ec93ce7b..929a9c843ef0064d6fa49f68970f4a3e48a82630 100644 (file)
@@ -2,7 +2,6 @@
  * $Id$
  *
  * Handles DAV OPTIONS requests (experimental -- not required by GroupDAV)
- * \ingroup WebcitHttpServerGDav
  *
  */
 
index 724d4eb45de883d373845bcd67ec26508b87a6e0..191b5b69f074db262e2b40e109be6aded28b03d1 100644 (file)
@@ -1,8 +1,7 @@
 /*
  * $Id$
- */
-/**
- * \defgroup GroupdavPropfind Handles GroupDAV PROPFIND requests.
+ *
+ * Handles GroupDAV PROPFIND requests.
  *
  * A few notes about our XML output:
  *
@@ -14,7 +13,6 @@
  *     This makes it difficult to read, but we have discovered clients which
  *     crash when you try to pretty it up.
  *
- * \ingroup WebcitHttpServerGDav
  */
 
 #include "webcit.h"
 #include "groupdav.h"
 
 
-/**
- * \brief get all messages of this user
+/*
  * Given an encoded UID, translate that to an unencoded Citadel EUID and
  * then search for it in the current room.  Return a message number or -1
  * if not found.
  *
  * NOTE: this function relies on the Citadel server's brute-force search.
  * There's got to be a way to optimize this better.
- * \param uid the user to get the data for...
  */
 long locate_message_by_uid(char *uid) {
        char buf[SIZ];
@@ -40,17 +36,21 @@ long locate_message_by_uid(char *uid) {
        /* Decode the uid */
        euid_unescapize(decoded_uid, uid);
 
-       serv_printf("EUID %s", decoded_uid);
+       serv_puts("MSGS ALL|0|1");
        serv_getln(buf, sizeof buf);
-       if (buf[0] == '2') {
-               retval = extract_long(&buf[4], 0);
+       if (buf[0] == '8') {
+               serv_printf("exti|%s", decoded_uid);
+               serv_puts("000");
+               while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
+                       retval = atol(buf);
+               }
        }
        return(retval);
 }
 
 
-/**
- * \brief List folders containing interesting groupware objects
+/*
+ * List folders containing interesting groupware objects
  */
 void groupdav_folder_list(void) {
        char buf[SIZ];
@@ -62,11 +62,11 @@ void groupdav_folder_list(void) {
        now = time(NULL);
        http_datestring(datestring, sizeof datestring, now);
 
-       /**
+       /*
         * Be rude.  Completely ignore the XML request and simply send them
         * everything we know about.  Let the client sort it out.
         */
-       wprintf("HTTP/1.1 207 Multi-Status\r\n");
+       wprintf("HTTP/1.0 207 Multi-Status\r\n");
        groupdav_common_headers();
        wprintf("Date: %s\r\n", datestring);
        wprintf("Content-type: text/xml\r\n");
@@ -85,7 +85,7 @@ void groupdav_folder_list(void) {
                extract_token(roomname, buf, 0, '|', sizeof roomname);
                view = extract_int(buf, 6);
 
-               /**
+               /*
                 * For now, only list rooms that we know a GroupDAV client
                 * might be interested in.  In the future we may add
                 * the rest.
@@ -97,7 +97,7 @@ void groupdav_folder_list(void) {
                        wprintf("<D:response>");
 
                        wprintf("<D:href>");
-                       output_host_prefix();
+                       groupdav_identify_host();
                        wprintf("/groupdav/");
                        urlescputs(roomname);
                        wprintf("/</D:href>");
@@ -105,9 +105,9 @@ void groupdav_folder_list(void) {
                        wprintf("<D:propstat>");
                        wprintf("<D:status>HTTP/1.1 200 OK</D:status>");
                        wprintf("<D:prop>");
-                       wprintf("<D:fullname>");
+                       wprintf("<D:displayname>");
                        escputs(roomname);
-                       wprintf("</D:fullname>");
+                       wprintf("</D:displayname>");
                        wprintf("<D:resourcetype><D:collection/>");
 
                        switch(view) {
@@ -135,9 +135,8 @@ void groupdav_folder_list(void) {
 
 
 
-/**
- * \brief Search though a davname
- * \param dav_pathname The pathname is always going to be /groupdav/room_name/msg_num
+/*
+ * The pathname is always going to be /groupdav/room_name/msg_num
  */
 void groupdav_propfind(char *dav_pathname) {
        char dav_roomname[256];
@@ -159,13 +158,11 @@ void groupdav_propfind(char *dav_pathname) {
        extract_token(dav_roomname, dav_pathname, 2, '/', sizeof dav_roomname);
        extract_token(dav_uid, dav_pathname, 3, '/', sizeof dav_uid);
 
-       /*
        lprintf(9, "dav_pathname: %s\n", dav_pathname);
        lprintf(9, "dav_roomname: %s\n", dav_roomname);
        lprintf(9, "     dav_uid: %s\n", dav_uid);
-       */
 
-       /**
+       /*
         * If the room name is blank, the client is requesting a
         * folder list.
         */
@@ -191,8 +188,7 @@ void groupdav_propfind(char *dav_pathname) {
                return;
        }
 
-       /**
-        * If dav_uid is non-empty, client is requesting a PROPFIND on
+       /* If dav_uid is non-empty, client is requesting a PROPFIND on
         * a specific item in the room.  This is not valid GroupDAV, but
         * we try to honor it anyway because some clients are expecting
         * it to work...
@@ -213,12 +209,11 @@ void groupdav_propfind(char *dav_pathname) {
                        return;
                }
 
-               /**
-                * Be rude.  Completely ignore the XML request and simply send them
+               /* Be rude.  Completely ignore the XML request and simply send them
                 * everything we know about (which is going to simply be the ETag and
                 * nothing else).  Let the client-side parser sort it out.
                 */
-               wprintf("HTTP/1.1 207 Multi-Status\r\n");
+               wprintf("HTTP/1.0 207 Multi-Status\r\n");
                groupdav_common_headers();
                wprintf("Date: %s\r\n", datestring);
                wprintf("Content-type: text/xml\r\n");
@@ -233,7 +228,7 @@ void groupdav_propfind(char *dav_pathname) {
                wprintf("<D:response>");
 
                wprintf("<D:href>");
-               output_host_prefix();
+               groupdav_identify_host();
                wprintf("/groupdav/");
                urlescputs(WC->wc_roomname);
                euid_escapize(encoded_uid, dav_uid);
@@ -251,7 +246,7 @@ void groupdav_propfind(char *dav_pathname) {
        }
 
 
-       /**
+       /*
         * We got to this point, which means that the client is requesting
         * a 'collection' (i.e. a list of all items in the room).
         *
@@ -259,7 +254,7 @@ void groupdav_propfind(char *dav_pathname) {
         * everything we know about (which is going to simply be the ETag and
         * nothing else).  Let the client-side parser sort it out.
         */
-       wprintf("HTTP/1.1 207 Multi-Status\r\n");
+       wprintf("HTTP/1.0 207 Multi-Status\r\n");
        groupdav_common_headers();
        wprintf("Date: %s\r\n", datestring);
        wprintf("Content-type: text/xml\r\n");
@@ -292,7 +287,7 @@ void groupdav_propfind(char *dav_pathname) {
                if (strlen(uid) > 0) {
                        wprintf("<D:response>");
                        wprintf("<D:href>");
-                       output_host_prefix();
+                       groupdav_identify_host();
                        wprintf("/groupdav/");
                        urlescputs(WC->wc_roomname);
                        euid_escapize(encoded_uid, uid);
@@ -313,5 +308,3 @@ void groupdav_propfind(char *dav_pathname) {
                free(msgs);
        }
 }
-
-/*@}*/
index 0c022b1f6a33c6d088f171912eb619f6f9046915..57e746c6e63fbe65ec7a08dd9ef2e74fe2faf68c 100644 (file)
@@ -1,23 +1,17 @@
 /*
  * $Id$
- */
-/**
- * \defgroup GroupdavPut Handles GroupDAV PUT requests.
- * \ingroup WebcitHttpServerGDav
+ *
+ * Handles GroupDAV PUT requests.
  *
  */
-/*@{*/
+
 #include "webcit.h"
 #include "webserver.h"
 #include "groupdav.h"
 
 
-/**
- * \brief GroupDAV PUT an item to the server
- * \param dav_pathname The pathname is always going to be /groupdav/room_name/euid
- * \param dav_ifmatch ETag of the item we think we're replacing
- * \param dav_content_type the mime type
- * \param dav_content the actual data
+/*
+ * The pathname is always going to be /groupdav/room_name/euid
  */
 void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                char *dav_content_type, char *dav_content
@@ -29,22 +23,22 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
        char buf[SIZ];
        int n = 0;
 
-       /** First, break off the "/groupdav/" prefix */
+       /* First, break off the "/groupdav/" prefix */
        remove_token(dav_pathname, 0, '/');
        remove_token(dav_pathname, 0, '/');
 
-       /** Now extract the message euid */
+       /* Now extract the message euid */
        n = num_tokens(dav_pathname, '/');
        extract_token(dav_uid, dav_pathname, n-1, '/', sizeof dav_uid);
        remove_token(dav_pathname, n-1, '/');
 
-       /** What's left is the room name.  Remove trailing slashes. */
+       /* What's left is the room name.  Remove trailing slashes. */
        if (dav_pathname[strlen(dav_pathname)-1] == '/') {
                dav_pathname[strlen(dav_pathname)-1] = 0;
        }
        strcpy(dav_roomname, dav_pathname);
 
-       /** Go to the correct room. */
+       /* Go to the correct room. */
        if (strcasecmp(WC->wc_roomname, dav_roomname)) {
                gotoroom(dav_roomname);
        }
@@ -60,7 +54,7 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                return;
        }
 
-       /**
+       /*
         * If an HTTP If-Match: header is present, the client is attempting
         * to replace an existing item.  We have to check to see if the
         * message number associated with the supplied uid matches what the
@@ -68,7 +62,9 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
         * version, so we fail...
         */
        if (strlen(dav_ifmatch) > 0) {
+               lprintf(9, "dav_ifmatch: %s\n", dav_ifmatch);
                old_msgnum = locate_message_by_uid(dav_uid);
+               lprintf(9, "old_msgnum:  %ld\n", old_msgnum);
                if (atol(dav_ifmatch) != old_msgnum) {
                        wprintf("HTTP/1.1 412 Precondition Failed\r\n");
                        lprintf(9, "HTTP/1.1 412 Precondition Failed (ifmatch=%ld, old_msgnum=%ld)\r\n",
@@ -79,7 +75,7 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                }
        }
 
-       /**
+       /*
         * We are cleared for upload!  We use the new calling syntax for ENT0
         * which allows a confirmation to be sent back to us.  That's how we
         * extract the message ID.
@@ -96,12 +92,12 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                return;
        }
 
-       /** Send the content to the Citadel server */
+       /* Send the content to the Citadel server */
        serv_printf("Content-type: %s\n\n", dav_content_type);
        serv_puts(dav_content);
        serv_puts("\n000");
 
-       /** Fetch the reply from the Citadel server */
+       /* Fetch the reply from the Citadel server */
        n = 0;
        strcpy(dav_uid, "");
        while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
@@ -117,9 +113,9 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                }
        }
 
-       /** Tell the client what happened. */
+       /* Tell the client what happened. */
 
-       /** Citadel failed in some way? */
+       /* Citadel failed in some way? */
        if (new_msgnum < 0L) {
                wprintf("HTTP/1.1 502 Bad Gateway\r\n");
                groupdav_common_headers();
@@ -131,7 +127,7 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                return;
        }
 
-       /** We created this item for the first time. */
+       /* We created this item for the first time. */
        if (old_msgnum < 0L) {
                wprintf("HTTP/1.1 201 Created\r\n");
                lprintf(9, "HTTP/1.1 201 Created\r\n");
@@ -139,7 +135,7 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                wprintf("etag: \"%ld\"\r\n", new_msgnum);
                wprintf("Content-Length: 0\r\n");
                wprintf("Location: ");
-               output_host_prefix();
+               groupdav_identify_host();
                wprintf("/groupdav/");
                urlescputs(dav_roomname);
                wprintf("/%s\r\n", dav_uid);
@@ -147,15 +143,14 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
                return;
        }
 
-       /** We modified an existing item. */
+       /* We modified an existing item. */
        wprintf("HTTP/1.1 204 No Content\r\n");
        lprintf(9, "HTTP/1.1 204 No Content\r\n");
        groupdav_common_headers();
        wprintf("etag: \"%ld\"\r\n", new_msgnum);
        wprintf("Content-Length: 0\r\n\r\n");
 
-       /**
-        * The item we replaced has probably already been deleted by
+       /* The item we replaced has probably already been deleted by
         * the Citadel server, but we'll do this anyway, just in case.
         */
        serv_printf("DELE %ld", old_msgnum);
@@ -163,6 +158,3 @@ void groupdav_put(char *dav_pathname, char *dav_ifmatch,
 
        return;
 }
-
-
-/*@}*/