mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-23 00:43:28 +00:00
make it run well with kronolith
PR: 32711 Submitted by: maintainer
This commit is contained in:
parent
a86a05bdbc
commit
743a256850
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=51418
@ -7,6 +7,7 @@
|
||||
|
||||
PORTNAME= libmcal
|
||||
PORTVERSION= 0.6
|
||||
PORTREVISION= 1
|
||||
CATEGORIES= misc
|
||||
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
|
||||
MASTER_SITE_SUBDIR= ${PORTNAME}
|
||||
@ -34,7 +35,6 @@ post-extract:
|
||||
${CP} -pR ${WRKSRCDRV}/icap ${WRKSRC}
|
||||
${MV} ${WRKSRC}/mstore/Makefile ${WRKSRC}/mstore/Makefile.dist
|
||||
${MV} ${WRKSRC}/mstore/Makefile.FreeBSD ${WRKSRC}/mstore/Makefile
|
||||
${PERL} -pi -e "s:/etc/mpasswd:${PREFIX}/etc/mpasswd:" ${WRKSRC}/mstore/mstore.c
|
||||
${MV} ${WRKSRC}/icap/Makefile ${WRKSRC}/icap/Makefile.dist
|
||||
${MV} ${WRKSRC}/icap/Makefile.FreeBSD ${WRKSRC}/icap/Makefile
|
||||
${MV} ${WRKSRC}/configure ${WRKSRC}/configure.dist
|
||||
@ -42,6 +42,9 @@ post-extract:
|
||||
${CHMOD} u+x ${WRKSRC}/configure
|
||||
${MV} ${WRKSRC}/mstore/README ${WRKSRC}/mstore/README.mstore
|
||||
|
||||
post-patch:
|
||||
${PERL} -pi -e "s:/etc/mpasswd:${PREFIX}/etc/mpasswd:" ${WRKSRC}/mstore/mstore.c
|
||||
|
||||
pre-configure:
|
||||
@${ECHO_MSG} "===> Building the driver mstore"
|
||||
cd ${WRKSRC}/mstore ; \
|
||||
@ -60,21 +63,8 @@ post-install:
|
||||
.endfor
|
||||
@${ECHO_MSG} "===> Documentation installed in ${DOCSDIR}."
|
||||
.endif
|
||||
@${ECHO} "*****************************************************************************"
|
||||
@${ECHO} " libmcap has been installed. In order to end its configuration,"
|
||||
@${ECHO} " please enter the following commands:"
|
||||
@${ECHO} ""
|
||||
@${ECHO} " mkdir /var/calendar"
|
||||
@${ECHO} " chmod 1777 /var/calendar"
|
||||
@${ECHO} ""
|
||||
@${ECHO} " To work with the mstore driver, using the Apache's htpasswd utility,"
|
||||
@${ECHO} " you may create the mpasswd file with the command below:"
|
||||
@${ECHO} ""
|
||||
@${ECHO} " htpasswd -c ${LOCALBASE}/etc/mpasswd username"
|
||||
@${ECHO} ""
|
||||
@${ECHO} " To add or update this file you would execute as follows:"
|
||||
@${ECHO} ""
|
||||
@${ECHO} " htpasswd ${LOCALBASE}/etc/mpasswd username"
|
||||
@${ECHO} "*****************************************************************************"
|
||||
@${ECHO}
|
||||
@${CAT} ${PKGMESSAGE} | ${SED} -e "s:%%LOCALBASE%%:${LOCALBASE}:g"
|
||||
@${ECHO}
|
||||
|
||||
.include <bsd.port.mk>
|
||||
|
17
misc/libmcal/files/patch-ad
Normal file
17
misc/libmcal/files/patch-ad
Normal file
@ -0,0 +1,17 @@
|
||||
--- bool.h.orig Thu Dec 2 09:01:39 1999
|
||||
+++ bool.h Wed Jun 28 00:17:14 2000
|
||||
@@ -1,4 +1,4 @@
|
||||
-/* $Id: bool.h,v 1.1.1.1 1999/12/02 08:01:39 zircote Exp $
|
||||
+/* $Id: bool.h,v 1.2 2000/06/27 22:17:14 askalski Exp $
|
||||
*
|
||||
* Libmcal - Modular Calendar Access Library
|
||||
* Copyright (C) 1999 Mark Musone and Andrew Skalski
|
||||
@@ -32,7 +32,7 @@
|
||||
#ifndef _BOOL_H
|
||||
#define _BOOL_H
|
||||
|
||||
-#ifndef __cplusplus__
|
||||
+#ifndef __cplusplus
|
||||
typedef enum { false, true } bool;
|
||||
#endif
|
||||
|
73
misc/libmcal/files/patch-ae
Normal file
73
misc/libmcal/files/patch-ae
Normal file
@ -0,0 +1,73 @@
|
||||
--- datetime.c.orig Sat Mar 11 03:14:42 2000
|
||||
+++ datetime.c Thu May 11 21:43:23 2000
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * $Id: datetime.c,v 1.2 2000/03/11 02:14:42 chuck Exp $
|
||||
+ * $Id: datetime.c,v 1.3 2000/05/11 19:43:23 inan Exp $
|
||||
* Libmcal - Modular Calendar Access Library
|
||||
* Copyright (C) 1999 Mark Musone and Andrew Skalski
|
||||
*
|
||||
@@ -280,8 +280,37 @@
|
||||
{
|
||||
return dt_dayofepoch(dt) % 7;
|
||||
}
|
||||
-
|
||||
-
|
||||
+/*
|
||||
+char*
|
||||
+dt_dayofweekstr(const datetime_t *dt)
|
||||
+{
|
||||
+ char output[3];
|
||||
+ switch (dt_dayofepoch(dt) % 7) {
|
||||
+ case 0:
|
||||
+ strcpy (output, "SU");
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ strcpy (output, "MO");
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ strcpy (output, "TU");
|
||||
+ break;
|
||||
+ case 3:
|
||||
+ strcpy (output, "WE");
|
||||
+ break;
|
||||
+ case 4:
|
||||
+ strcpy (output, "TH");
|
||||
+ break;
|
||||
+ case 5:
|
||||
+ strcpy (output, "FR");
|
||||
+ break;
|
||||
+ case 6:
|
||||
+ strcpy (output, "SA");
|
||||
+ break;
|
||||
+ }
|
||||
+ return output;
|
||||
+}
|
||||
+*/
|
||||
int
|
||||
dt_dayofepoch(const datetime_t *dt)
|
||||
{
|
||||
@@ -460,3 +489,23 @@
|
||||
}
|
||||
return w;
|
||||
}
|
||||
+
|
||||
+int
|
||||
+dt_orderofmonth( const datetime_t *dt, const direction_t direction)
|
||||
+{
|
||||
+ datetime_t temp_dt = DT_INIT;
|
||||
+ int temp_int;
|
||||
+
|
||||
+ switch (direction) {
|
||||
+ case DT_FORWARD:
|
||||
+ dt_setnthwday(&temp_dt, dt->year, dt->mon, 1, dt_dayofweek(dt) );
|
||||
+ temp_int = (dt->mday - temp_dt.mday)/7;
|
||||
+ temp_int ++; //start count at 1, not zero
|
||||
+ break;
|
||||
+ case DT_BACKWARD:
|
||||
+ // not built
|
||||
+ return false;
|
||||
+ }
|
||||
+ return temp_int;
|
||||
+}
|
||||
+
|
65
misc/libmcal/files/patch-af
Normal file
65
misc/libmcal/files/patch-af
Normal file
@ -0,0 +1,65 @@
|
||||
--- datetime.h.orig Sat Mar 11 03:14:43 2000
|
||||
+++ datetime.h Fri Mar 16 20:27:14 2001
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * $Id: datetime.h,v 1.2 2000/03/11 02:14:43 chuck Exp $
|
||||
+ * $Id: datetime.h,v 1.4 2001/03/16 19:27:14 chuck Exp $
|
||||
* Libmcal - Modular Calendar Access Library
|
||||
* Copyright (C) 1999 Mark Musone and Andrew Skalski
|
||||
*
|
||||
@@ -26,7 +26,7 @@
|
||||
* Andrew Skalski
|
||||
* askalski@chek.com
|
||||
*
|
||||
- * mcal@lists.chek.com
|
||||
+ * libmcal-users@lists.sourceforge.net
|
||||
*/
|
||||
|
||||
#ifndef _DATETIME_H
|
||||
@@ -66,6 +66,11 @@
|
||||
DECEMBER
|
||||
} month_t;
|
||||
|
||||
+typedef enum {
|
||||
+ DT_FORWARD,
|
||||
+ DT_BACKWARD
|
||||
+} direction_t;
|
||||
+
|
||||
/**
|
||||
* struct datetime
|
||||
*
|
||||
@@ -178,11 +183,34 @@
|
||||
/* Returns the week number for d=day, m=month, y=year */
|
||||
int dt_weekofyear(int d, int m, int y);
|
||||
|
||||
+/* Returns the week number in the given month counting in the given direction */
|
||||
+int dt_orderofmonth( const datetime_t *dt, const direction_t direction);
|
||||
+
|
||||
/* convenience macros to get the first/last days of a week */
|
||||
#define dt_startofweek(dt, ref, weekstart) \
|
||||
dt_setweekof((dt), (ref), (weekstart), (weekstart))
|
||||
#define dt_endofweek(dt, ref, weekstart) \
|
||||
dt_setweekof((dt), (ref), (weekstart), (7+(weekstart)-1)%7)
|
||||
+#define dt_dayofweekstr(dayno) \
|
||||
+ (dayno) >= 4 ? \
|
||||
+ (dayno) = 6 ? \
|
||||
+ "SA" : \
|
||||
+ (dayno) = 5 ? \
|
||||
+ "FR" : \
|
||||
+ "TH" \
|
||||
+ ; \
|
||||
+ ;: \
|
||||
+ (dayno) >= 2 ? \
|
||||
+ (dayno) = 3 ? \
|
||||
+ "WE" : \
|
||||
+ "TU" \
|
||||
+ ;: \
|
||||
+ (dayno) = 1 ? \
|
||||
+ "MO" : \
|
||||
+ "SU" \
|
||||
+ ; \
|
||||
+ ; \
|
||||
+
|
||||
|
||||
/**********************************/
|
||||
|
120
misc/libmcal/files/patch-ag
Normal file
120
misc/libmcal/files/patch-ag
Normal file
@ -0,0 +1,120 @@
|
||||
--- icalroutines.c.orig Tue Jan 25 04:08:10 2000
|
||||
+++ icalroutines.c Thu May 11 21:43:23 2000
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * #$Id: icalroutines.c,v 1.1 2000/01/25 03:08:10 markie Exp $
|
||||
+ * #$Id: icalroutines.c,v 1.2 2000/05/11 19:43:23 inan Exp $
|
||||
*
|
||||
* Libmcal - Modular Calendar Access Library
|
||||
* Copyright (C) 1999 Mark Musone and Andrew Skalski
|
||||
@@ -594,3 +594,110 @@
|
||||
putc(pad, out);
|
||||
}
|
||||
}
|
||||
+
|
||||
+#define MAX(a,b) (a)>(b) ? (a) :(b)
|
||||
+void
|
||||
+ical_set_byday ( char *output, const byday_t *input ) {
|
||||
+ int i;
|
||||
+ char temp_string[50];
|
||||
+
|
||||
+ strcpy (output, "");
|
||||
+
|
||||
+ for (i=0; i<=6; i++) {
|
||||
+ /* wdays is a bit field corresponding to days of the week */
|
||||
+ if ((input->weekdays) & (0x1 <<i) ) {
|
||||
+ if (input->ordwk[i] != 0) {
|
||||
+ sprintf( temp_string, "%d", input->ordwk[i] );
|
||||
+ strcat ( output, temp_string );
|
||||
+ }
|
||||
+ switch (i) {
|
||||
+ case 0:
|
||||
+ strcat ( output, "SU, ");
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ strcat ( output, "MO, ");
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ strcat ( output, "TU, ");
|
||||
+ break;
|
||||
+ case 3:
|
||||
+ strcat ( output, "WE, ");
|
||||
+ break;
|
||||
+ case 4:
|
||||
+ strcat ( output, "TH, ");
|
||||
+ break;
|
||||
+ case 5:
|
||||
+ strcat ( output, "FR, ");
|
||||
+ break;
|
||||
+ case 6:
|
||||
+ strcat ( output, "SA, ");
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ output[MAX(strlen(output)-2,0)] = '\0';
|
||||
+
|
||||
+}
|
||||
+#undef MAX
|
||||
+
|
||||
+void
|
||||
+ical_get_byday ( byday_t *output, const char *input ) {
|
||||
+ char *temp_string;
|
||||
+ char *token;
|
||||
+ char *day_start;
|
||||
+ int interval;
|
||||
+ int day_index;
|
||||
+ temp_string = strdup(input);
|
||||
+
|
||||
+ token = strtok (temp_string, ",");
|
||||
+ while ( token != NULL ) {
|
||||
+ day_start = token + strlen(token) - 2;
|
||||
+ if (strcasecmp (day_start, "SU")==0) {
|
||||
+ output->weekdays |= M_SUNDAY;
|
||||
+ day_index = 0;
|
||||
+ } else if (strcasecmp (day_start, "MO")==0) {
|
||||
+ output->weekdays |= M_MONDAY;
|
||||
+ day_index = 1;
|
||||
+ } else if (strcasecmp (day_start, "TU")==0) {
|
||||
+ output->weekdays |= M_TUESDAY;
|
||||
+ day_index = 2;
|
||||
+ } else if (strcasecmp (day_start, "WE")==0) {
|
||||
+ output->weekdays |= M_WEDNESDAY;
|
||||
+ day_index = 3;
|
||||
+ } else if (strcasecmp (day_start, "TH")==0) {
|
||||
+ output->weekdays |= M_THURSDAY;
|
||||
+ day_index = 4;
|
||||
+ } else if (strcasecmp (day_start, "FR")==0) {
|
||||
+ output->weekdays |= M_FRIDAY;
|
||||
+ day_index = 5;
|
||||
+ } else if (strcasecmp (day_start, "SA")==0) {
|
||||
+ output->weekdays |= M_SATURDAY;
|
||||
+ day_index = 6;
|
||||
+ }
|
||||
+ *day_start = '\0';
|
||||
+ interval = atoi (token);
|
||||
+ output->ordwk[day_index] = interval;
|
||||
+ }
|
||||
+
|
||||
+ free( token );
|
||||
+ free( temp_string );
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+ical_get_recur_freq( recur_t *output, const char *input, const char *byday) {
|
||||
+ if (strncmp (input, "D",1)==0) {
|
||||
+ *output = RECUR_DAILY;
|
||||
+ } else if (strncmp (input, "W",1)==0) {
|
||||
+ *output = RECUR_WEEKLY;
|
||||
+ } else if (strncmp (input, "M",1)==0) {
|
||||
+ if (strlen(byday) == 0) {
|
||||
+ *output = RECUR_MONTHLY_MDAY;
|
||||
+ } else {
|
||||
+ *output = RECUR_MONTHLY_WDAY;
|
||||
+ }
|
||||
+ } else if (strncmp (input, "Y",1)==0) {
|
||||
+ *output = RECUR_YEARLY;
|
||||
+ } else {
|
||||
+ *output = RECUR_NONE;
|
||||
+ }
|
||||
+}
|
25
misc/libmcal/files/patch-ah
Normal file
25
misc/libmcal/files/patch-ah
Normal file
@ -0,0 +1,25 @@
|
||||
--- icalroutines.h.orig Tue Jan 25 04:08:10 2000
|
||||
+++ icalroutines.h Thu May 11 21:43:23 2000
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * #$Id: icalroutines.h,v 1.1 2000/01/25 03:08:10 markie Exp $
|
||||
+ * #$Id: icalroutines.h,v 1.2 2000/05/11 19:43:23 inan Exp $
|
||||
*
|
||||
* Libmcal - Modular Calendar Access Library
|
||||
* Copyright (C) 1999 Mark Musone and Andrew Skalski
|
||||
@@ -70,5 +70,15 @@
|
||||
const unsigned char *buf,
|
||||
size_t size);
|
||||
|
||||
+/* ICAL formatting. */
|
||||
+#define BYDAY_INIT {0, {0,0,0,0,0,0,0}}
|
||||
+typedef struct {
|
||||
+ unsigned int weekdays;
|
||||
+ int ordwk[7];
|
||||
+} byday_t;
|
||||
+
|
||||
+void ical_set_byday(char *output, const byday_t *input);
|
||||
+void ical_get_byday(byday_t *output, const char *input);
|
||||
+void ical_get_recur_freq( recur_t *output, const char *input, const char *byday);
|
||||
|
||||
#endif
|
88
misc/libmcal/files/patch-ai
Normal file
88
misc/libmcal/files/patch-ai
Normal file
@ -0,0 +1,88 @@
|
||||
--- icap/icap.c.orig Mon Mar 27 06:12:33 2000
|
||||
+++ icap/icap.c Fri Jul 7 17:16:18 2000
|
||||
@@ -2,7 +2,7 @@
|
||||
* Libmcal - Modular Calendar Access Library
|
||||
* Copyright (C) 1999 Mark Musone and Andrew Skalski
|
||||
*
|
||||
- * #$Id: icap.c,v 1.1.1.1 1999/12/02 08:02:27 zircote Exp $
|
||||
+ * #$Id: icap.c,v 1.4 2000/07/07 15:16:18 markie Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
@@ -36,7 +36,7 @@
|
||||
#include "icaproutines.h"
|
||||
|
||||
|
||||
-#define ICAP_VAR "0.3"
|
||||
+#define ICAP_VAR "0.2"
|
||||
/** ICAP Driver **/
|
||||
#define DATA_T struct icap_data
|
||||
#define DATA ((DATA_T*) stream->data)
|
||||
@@ -49,6 +49,7 @@
|
||||
const CALADDR *addr, long options);
|
||||
static CALSTREAM* icap_close(CALSTREAM *stream, long options);
|
||||
static bool icap_ping(CALSTREAM *stream);
|
||||
+static bool icap_create(CALSTREAM *stream, const char *calendar);
|
||||
static bool icap_search_range( CALSTREAM *stream,
|
||||
const datetime_t *start,
|
||||
const datetime_t *end);
|
||||
@@ -72,6 +73,7 @@
|
||||
icap_open,
|
||||
icap_close,
|
||||
icap_ping,
|
||||
+ icap_create,
|
||||
icap_search_range,
|
||||
icap_search_alarm,
|
||||
icap_fetch,
|
||||
@@ -243,6 +245,13 @@
|
||||
|
||||
|
||||
bool
|
||||
+icap_create(CALSTREAM *stream, const char *calendar)
|
||||
+{
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+bool
|
||||
icap_search_range( CALSTREAM *stream,
|
||||
const datetime_t *start,
|
||||
const datetime_t *end)
|
||||
@@ -258,12 +267,12 @@
|
||||
|
||||
endq = query;
|
||||
if (start && dt_hasdate(start)) {
|
||||
- endq += sprintf(endq, " ICAL DTSTART>=%04u%02u%02u",
|
||||
- start->year, start->mon, start->mday);
|
||||
+ endq += sprintf(endq, " ICAL DTSTART > %04u%02u%02u",
|
||||
+ start->year, start->mon, start->mday-1);
|
||||
}
|
||||
if (end && dt_hasdate(end)) {
|
||||
- endq += sprintf(endq, " ICAL DTSTART<=%04u%02u%02u",
|
||||
- end->year, end->mon, end->mday);
|
||||
+ endq += sprintf(endq, " ICAL DTSTART < %04u%02u%02u",
|
||||
+ end->year, end->mon, end->mday+1);
|
||||
}
|
||||
if (endq == query)
|
||||
strcpy(query, " ALL");
|
||||
@@ -288,7 +297,7 @@
|
||||
if (dt_empty(when))
|
||||
return false;
|
||||
|
||||
- sprintf(query, "UID SEARCH ALARMING %04u%02u%02uT%02u%02u%02uZ",
|
||||
+ sprintf(query, "UID SEARCH COMPONENT VALARM ICAL DTSTART = %04u%02u%02uT%02u%02u%02uZ",
|
||||
when->year, when->mon, when->mday,
|
||||
when->hour, when->min, when->sec);
|
||||
|
||||
@@ -373,9 +382,9 @@
|
||||
{
|
||||
char query[1024];
|
||||
|
||||
- if (!icap_begin(DATA->net, "UID REMOVE "))
|
||||
+ if (!icap_begin(DATA->net, "UID STORE "))
|
||||
return false;
|
||||
- sprintf(query, "%lu", id);
|
||||
+ sprintf(query, "%lu +FLAGS \\Deleted", id);
|
||||
if (!icap_opaque(DATA->net, query))
|
||||
return false;
|
||||
if (icap_end(DATA->net) != ICAP_OK)
|
184
misc/libmcal/files/patch-aj
Normal file
184
misc/libmcal/files/patch-aj
Normal file
@ -0,0 +1,184 @@
|
||||
--- mcal.c.orig Sun Feb 27 06:01:54 2000
|
||||
+++ mcal.c Tue Jan 9 04:26:48 2001
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * $Id: mcal.c,v 1.6 2000/02/27 05:01:54 inan Exp $
|
||||
+ * $Id: mcal.c,v 1.9 2001/01/09 03:26:48 markie Exp $
|
||||
* Libmcal - Modular Calendar Access Library
|
||||
* Copyright (C) 1999 Mark Musone and Andrew Skalski
|
||||
*
|
||||
@@ -174,7 +174,7 @@
|
||||
/* size-count and sanity-check all fields */
|
||||
if (addr->host) {
|
||||
/* sanity: host contains neither '/' nor '}' */
|
||||
- if (strchr(addr->host, '}') || strchr(addr->host, '/'))
|
||||
+ if (strpbrk(addr->host, "}/"))
|
||||
return NULL;
|
||||
size += strlen(addr->host) + 2;
|
||||
|
||||
@@ -318,10 +318,33 @@
|
||||
}
|
||||
|
||||
|
||||
+bool
|
||||
+calevent_valid(const CALEVENT *event)
|
||||
+{
|
||||
+ int n = 0;
|
||||
+
|
||||
+ /* both must have date field set */
|
||||
+ if (!dt_hasdate(&event->start) || !dt_hasdate(&event->end))
|
||||
+ return false;
|
||||
+
|
||||
+ /* either none or both may have time field set */
|
||||
+ if (dt_hastime(&event->start)) n++;
|
||||
+ if (dt_hastime(&event->end)) n++;
|
||||
+ if (n == 1)
|
||||
+ return false;
|
||||
+
|
||||
+ /* start must precede end */
|
||||
+ if (dt_compare(&event->start, &event->end) > 0)
|
||||
+ return false;
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+
|
||||
const char*
|
||||
-calevent_getattr(CALEVENT *event, const char *name)
|
||||
+calevent_getattr(const CALEVENT *event, const char *name)
|
||||
{
|
||||
- CALATTR *attr;
|
||||
+ const CALATTR *attr;
|
||||
|
||||
for (attr = event->attrlist; attr; attr = attr->next)
|
||||
if (!strcasecmp(attr->name, name))
|
||||
@@ -694,7 +717,7 @@
|
||||
int wday;
|
||||
|
||||
|
||||
- nth = estart.mday / 7 + 1;
|
||||
+ nth = (estart.mday - 1) / 7 + 1;
|
||||
wday = dt_dayofweek(&estart);
|
||||
|
||||
/* adjust estart to be the first candidate */
|
||||
@@ -750,6 +773,18 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
+bool
|
||||
+cal_create(CALSTREAM *stream,const char *calendar) {
|
||||
+ bool output;
|
||||
+
|
||||
+ if (stream == NULL) {
|
||||
+ output = false;
|
||||
+ } else {
|
||||
+ output = stream->driver->create(stream, calendar);
|
||||
+ }
|
||||
+
|
||||
+ return output;
|
||||
+}
|
||||
|
||||
bool
|
||||
cal_valid(const char *address)
|
||||
@@ -880,6 +915,8 @@
|
||||
{
|
||||
if (stream == NULL || stream->dead)
|
||||
return false;
|
||||
+ if (!calevent_valid(event))
|
||||
+ return false;
|
||||
return stream->driver->append(stream, addr, id, event);
|
||||
}
|
||||
|
||||
@@ -944,12 +981,31 @@
|
||||
return good;
|
||||
}
|
||||
|
||||
+
|
||||
+bool
|
||||
+cal_delete(CALSTREAM *stream, char *calendar)
|
||||
+{
|
||||
+ if (stream == NULL || stream->dead)
|
||||
+ return false;
|
||||
+ return stream->driver->delete(stream, calendar);
|
||||
+}
|
||||
+
|
||||
+bool
|
||||
+cal_rename(CALSTREAM *stream, char *src,char *dest)
|
||||
+{
|
||||
+ if (stream == NULL || stream->dead)
|
||||
+ return false;
|
||||
+ return stream->driver->rename(stream, src,dest);
|
||||
+}
|
||||
+
|
||||
+
|
||||
/** Dummy Driver **/
|
||||
static bool dummy_valid(const CALADDR *addr);
|
||||
static CALSTREAM* dummy_open( CALSTREAM *stream,
|
||||
const CALADDR *addr, long options);
|
||||
static CALSTREAM* dummy_close(CALSTREAM *stream, long options);
|
||||
static bool dummy_ping(CALSTREAM *stream);
|
||||
+static bool dummy_create(CALSTREAM *stream, const char *calendar);
|
||||
static bool dummy_search_range( CALSTREAM *stream,
|
||||
const datetime_t *start,
|
||||
const datetime_t *end);
|
||||
@@ -967,18 +1023,28 @@
|
||||
static bool dummy_snooze( CALSTREAM *stream,
|
||||
unsigned long id);
|
||||
|
||||
+static bool dummy_delete( CALSTREAM *stream,
|
||||
+ char *calendar);
|
||||
+
|
||||
+static bool dummy_rename( CALSTREAM *stream,
|
||||
+ char *src,char *dest);
|
||||
+
|
||||
const CALDRIVER dummy_driver =
|
||||
{
|
||||
dummy_valid,
|
||||
dummy_open,
|
||||
dummy_close,
|
||||
dummy_ping,
|
||||
+ dummy_create,
|
||||
dummy_search_range,
|
||||
dummy_search_alarm,
|
||||
dummy_fetch,
|
||||
dummy_append,
|
||||
dummy_remove,
|
||||
dummy_snooze,
|
||||
+ dummy_delete,
|
||||
+ dummy_rename,
|
||||
+
|
||||
};
|
||||
|
||||
|
||||
@@ -1011,6 +1077,12 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
+bool
|
||||
+dummy_create(CALSTREAM *stream, const char *calendar)
|
||||
+{
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
|
||||
bool
|
||||
dummy_search_range( CALSTREAM *stream,
|
||||
@@ -1052,6 +1124,18 @@
|
||||
|
||||
bool
|
||||
dummy_snooze(CALSTREAM *stream, unsigned long id)
|
||||
+{
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+bool
|
||||
+dummy_delete(CALSTREAM *stream, char *calendar)
|
||||
+{
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+bool
|
||||
+dummy_rename(CALSTREAM *stream, char *src,char *dest)
|
||||
{
|
||||
return false;
|
||||
}
|
106
misc/libmcal/files/patch-ak
Normal file
106
misc/libmcal/files/patch-ak
Normal file
@ -0,0 +1,106 @@
|
||||
--- mcal.h.orig Mon Mar 27 06:00:33 2000
|
||||
+++ mcal.h Tue Jan 9 04:26:48 2001
|
||||
@@ -1,5 +1,6 @@
|
||||
+
|
||||
/*
|
||||
- * $Id: mcal.h,v 1.6 2000/03/27 04:00:33 zircote Exp $
|
||||
+ * $Id: mcal.h,v 1.10 2001/01/09 03:26:48 markie Exp $
|
||||
* Libmcal - Modular Calendar Access Library
|
||||
* Copyright (C) 1999 Mark Musone and Andrew Skalski
|
||||
*
|
||||
@@ -142,6 +143,15 @@
|
||||
size_t bufsize; /* buffer size */
|
||||
};
|
||||
|
||||
+/* calendar stream struct */
|
||||
+CALSTREAM {
|
||||
+ const CALDRIVER *driver; /* stream driver */
|
||||
+ CALADDR *addr; /* folder address */
|
||||
+ bool dead; /* dead stream? */
|
||||
+ weekday_t startofweek; /* first day of week */
|
||||
+ void *data; /* driver-specific data */
|
||||
+};
|
||||
+
|
||||
|
||||
/* calendar driver structure */
|
||||
CALDRIVER {
|
||||
@@ -169,7 +179,11 @@
|
||||
|
||||
/* return true if the stream is still alive */
|
||||
bool (*ping)( CALSTREAM *stream);
|
||||
-
|
||||
+
|
||||
+ /* return true if calendar created ok */
|
||||
+ bool (*create)( CALSTREAM *stream,
|
||||
+ const char *calendar);
|
||||
+
|
||||
/* search the current folder for events between <start> and
|
||||
* <end> (inclusive.) if either lacks a date or is NULL, that
|
||||
* bound will not be checked. if both lack a date or are NULL,
|
||||
@@ -222,20 +236,17 @@
|
||||
bool (*store)( CALSTREAM *stream,
|
||||
const CALEVENT *event);
|
||||
|
||||
+ /* Delete an entire calendar */
|
||||
+ bool (*delete)( CALSTREAM *stream, char *calendar);
|
||||
|
||||
-};
|
||||
+ bool (*rename)( CALSTREAM *stream,char *src,char *dest);
|
||||
|
||||
|
||||
-/* calendar stream struct */
|
||||
-CALSTREAM {
|
||||
- const CALDRIVER *driver; /* stream driver */
|
||||
- CALADDR *addr; /* folder address */
|
||||
- bool dead; /* dead stream? */
|
||||
- weekday_t startofweek; /* first day of week */
|
||||
- void *data; /* driver-specific data */
|
||||
};
|
||||
|
||||
|
||||
+
|
||||
+
|
||||
/** calendar client callbacks **/
|
||||
|
||||
/* Called when a stream driver requires a username/password. It is
|
||||
@@ -287,8 +298,11 @@
|
||||
/* Disposes of a CALEVENT, returns NULL for convenience. */
|
||||
CALEVENT* calevent_free(CALEVENT *event);
|
||||
|
||||
+/* Check the validity of an event's fields. */
|
||||
+bool calevent_valid(const CALEVENT *event);
|
||||
+
|
||||
/* Routines to set and fetch event attributes. */
|
||||
-const char* calevent_getattr(CALEVENT *event, const char *name);
|
||||
+const char* calevent_getattr(const CALEVENT *event, const char *name);
|
||||
bool calevent_setattr(CALEVENT *event, const char *name,
|
||||
const char *value);
|
||||
|
||||
@@ -322,7 +336,10 @@
|
||||
*/
|
||||
bool first_day_not_before( int mask, weekday_t *clamp,
|
||||
weekday_t weekstart);
|
||||
-
|
||||
+/* Creates a new calendar
|
||||
+ */
|
||||
+bool cal_create(CALSTREAM *stream,const char *calendar);
|
||||
+
|
||||
/* Returns true if the address is valid for any of the calendar drivers */
|
||||
bool cal_valid(const char *address);
|
||||
|
||||
@@ -400,6 +417,15 @@
|
||||
/* Cancels the alarm for event with id of <id>. Returns false on error. */
|
||||
bool cal_snooze( CALSTREAM *stream,
|
||||
unsigned long id);
|
||||
+
|
||||
+/* delete an entire calendar */
|
||||
+
|
||||
+bool cal_delete( CALSTREAM *stream,
|
||||
+ char *calendar);
|
||||
+
|
||||
+/* rename a calendar */
|
||||
+bool cal_rename( CALSTREAM *stream,
|
||||
+ char *src,char *dest);
|
||||
|
||||
|
||||
/* private functions */
|
479
misc/libmcal/files/patch-al
Normal file
479
misc/libmcal/files/patch-al
Normal file
@ -0,0 +1,479 @@
|
||||
--- mstore/mstore.c.orig Mon Mar 27 06:07:12 2000
|
||||
+++ mstore/mstore.c Tue Dec 11 08:56:58 2001
|
||||
@@ -1,4 +1,4 @@
|
||||
-/* $Id: mstore.c,v 1.11 2000/03/27 04:07:12 zircote Exp $ */
|
||||
+/* $Id: mstore.c,v 1.21 2001/05/07 17:37:10 chuck Exp $ */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -6,26 +6,33 @@
|
||||
#include <pwd.h>
|
||||
#include <unistd.h>
|
||||
#include <crypt.h>
|
||||
+
|
||||
+#ifdef USE_PAM
|
||||
+#include <security/pam_appl.h>
|
||||
+#endif /* USE_PAM */
|
||||
+
|
||||
#include "mcal.h"
|
||||
#include "mstore.h"
|
||||
#include "icap/icaproutines.h"
|
||||
|
||||
-
|
||||
#define MSTORE_VER "0.5"
|
||||
#define DATA_T struct mstore_data
|
||||
#define DATA ((DATA_T*) stream->data)
|
||||
|
||||
-
|
||||
+/* mpasswd path define */
|
||||
+#ifndef MPASSWD_PATH
|
||||
+#define MPASSWD_PATH "/etc/mpasswd"
|
||||
+#endif
|
||||
|
||||
static void mstore_freestream(CALSTREAM *stream);
|
||||
static bool mstore_validuser(const char *username,const char *password);
|
||||
-static bool mstore_userexists(const char *username);
|
||||
|
||||
static bool mstore_valid(const CALADDR *addr);
|
||||
static CALSTREAM* mstore_open( CALSTREAM *stream,
|
||||
const CALADDR *addr, long options);
|
||||
static CALSTREAM* mstore_close(CALSTREAM *stream, long options);
|
||||
static bool mstore_ping(CALSTREAM *stream);
|
||||
+static bool mstore_create (CALSTREAM *stream, const char *calendar);
|
||||
static bool mstore_search_range( CALSTREAM *stream,
|
||||
const datetime_t *start,
|
||||
const datetime_t *end);
|
||||
@@ -44,12 +51,18 @@
|
||||
unsigned long id);
|
||||
static bool mstore_store( CALSTREAM *stream,
|
||||
const CALEVENT *modified_event);
|
||||
+static bool mstore_delete( CALSTREAM *stream,
|
||||
+ char *calendar);
|
||||
+static bool mstore_rename( CALSTREAM *stream,
|
||||
+ char *src,char *dest);
|
||||
+
|
||||
CALDRIVER mstore_driver =
|
||||
{
|
||||
mstore_valid,
|
||||
mstore_open,
|
||||
mstore_close,
|
||||
mstore_ping,
|
||||
+ mstore_create,
|
||||
mstore_search_range,
|
||||
mstore_search_alarm,
|
||||
mstore_fetch,
|
||||
@@ -57,6 +70,8 @@
|
||||
mstore_remove,
|
||||
mstore_snooze,
|
||||
mstore_store,
|
||||
+ mstore_delete,
|
||||
+ mstore_rename
|
||||
};
|
||||
|
||||
|
||||
@@ -88,13 +103,98 @@
|
||||
}
|
||||
|
||||
|
||||
+#ifdef USE_PAM
|
||||
+
|
||||
+/* PAM support stuff goes here */
|
||||
+
|
||||
+static pam_handle_t *pamh = NULL;
|
||||
+static char *PAM_username;
|
||||
+static char *PAM_password;
|
||||
+
|
||||
+#define COPY_STRING(s) (s) ? strdup(s) : NULL
|
||||
+
|
||||
+static int PAM_conv (int num_msg,
|
||||
+ const struct pam_message **msg,
|
||||
+ struct pam_response **resp,
|
||||
+ void *appdata_ptr)
|
||||
+{
|
||||
+ struct pam_response *reply;
|
||||
+ int count;
|
||||
+
|
||||
+ if (num_msg < 1)
|
||||
+ return PAM_CONV_ERR;
|
||||
+
|
||||
+ reply = (struct pam_response *)
|
||||
+ calloc (num_msg, sizeof(struct pam_response));
|
||||
+
|
||||
+ if (!reply)
|
||||
+ return PAM_CONV_ERR;
|
||||
+
|
||||
+ for (count=0; count<num_msg; count++) {
|
||||
+ char *string = NULL;
|
||||
+
|
||||
+ switch (msg[count]->msg_style) {
|
||||
+ case PAM_PROMPT_ECHO_ON:
|
||||
+ if (!(string = COPY_STRING(PAM_username)))
|
||||
+ goto pam_fail_conv;
|
||||
+ break;
|
||||
+ case PAM_PROMPT_ECHO_OFF:
|
||||
+ if (!(string = COPY_STRING(PAM_password)))
|
||||
+ goto pam_fail_conv;
|
||||
+ break;
|
||||
+ case PAM_TEXT_INFO:
|
||||
+#ifdef PAM_BINARY_PROMPT
|
||||
+ case PAM_BINARY_PROMPT:
|
||||
+#endif /* PAM_BINARY_PROMPT */
|
||||
+ /* ignore it */
|
||||
+ break;
|
||||
+ case PAM_ERROR_MSG:
|
||||
+ default:
|
||||
+ goto pam_fail_conv;
|
||||
+ } /* end switch msg[count]->msg_style */
|
||||
+
|
||||
+ if (string) {
|
||||
+ reply[count].resp_retcode = 0;
|
||||
+ reply[count].resp = string;
|
||||
+ string = NULL;
|
||||
+ } /* end if string */
|
||||
+
|
||||
+ } // end for count
|
||||
+
|
||||
+ *resp = reply;
|
||||
+ return PAM_SUCCESS;
|
||||
+
|
||||
+pam_fail_conv:
|
||||
+ for(count=0; count<num_msg; count++) {
|
||||
+ if (!reply[count].resp)
|
||||
+ continue;
|
||||
+ switch (msg[count]->msg_style) {
|
||||
+ case PAM_PROMPT_ECHO_ON:
|
||||
+ case PAM_PROMPT_ECHO_OFF:
|
||||
+ free(reply[count].resp);
|
||||
+ break;
|
||||
+ } /* end switch msg[count]->msg_style */
|
||||
+ } /* end for count */
|
||||
+
|
||||
+ free(reply);
|
||||
+ return PAM_CONV_ERR;
|
||||
+} /* end function static int PAM_conv (...) */
|
||||
+
|
||||
+static struct pam_conv PAM_conversation = {
|
||||
+ &PAM_conv,
|
||||
+ NULL
|
||||
+};
|
||||
+
|
||||
+#endif /* USE_PAM */
|
||||
+
|
||||
bool
|
||||
mstore_validuser(const char *username,const char *password)
|
||||
{
|
||||
+#ifndef USE_PAM
|
||||
FILE *mpasswd;
|
||||
char line[1000];
|
||||
char *musername,*mpassword;
|
||||
- mpasswd=fopen("/etc/mpasswd","r");
|
||||
+ mpasswd=fopen(MPASSWD_PATH,"r");
|
||||
if(!mpasswd)
|
||||
{
|
||||
printf("Error! couldn't open mpasswd file!\n");
|
||||
@@ -123,36 +223,31 @@
|
||||
}
|
||||
fclose(mpasswd);
|
||||
return false;
|
||||
-}
|
||||
-
|
||||
-
|
||||
-bool
|
||||
-mstore_userexists(const char *username)
|
||||
-{
|
||||
- FILE *mpasswd;
|
||||
- char line[1000];
|
||||
- char *musername,*mpassword;
|
||||
- mpasswd=fopen("/etc/mpasswd","r");
|
||||
- if(!mpasswd)
|
||||
- {
|
||||
- printf("Error! couldn't open mpasswd file!\n");
|
||||
- exit(1);
|
||||
- }
|
||||
- while(fgets(line,900,mpasswd))
|
||||
- {
|
||||
- if(line[strlen(line)-1]=='\n') line[strlen(line)-1]=0x00;
|
||||
- musername=line;
|
||||
- mpassword=strchr(line,':');
|
||||
- *mpassword=0x00;
|
||||
- mpassword++;
|
||||
- if(!strcmp(username,musername))
|
||||
- {
|
||||
- fclose(mpasswd);
|
||||
- return true;
|
||||
- }
|
||||
- }
|
||||
- fclose(mpasswd);
|
||||
- return false;
|
||||
+#else
|
||||
+ /* PAM authentication */
|
||||
+ int PAM_error;
|
||||
+
|
||||
+ PAM_error = pam_start("mstore", username, &PAM_conversation, &pamh);
|
||||
+ if (PAM_error != PAM_SUCCESS)
|
||||
+ goto login_err;
|
||||
+ pam_set_item(pamh, PAM_TTY, "mstore");
|
||||
+ pam_set_item(pamh, PAM_RHOST, "localhost");
|
||||
+ PAM_error = pam_authenticate(pamh, 0);
|
||||
+ if (PAM_error != PAM_SUCCESS)
|
||||
+ if (PAM_error == PAM_MAXTRIES)
|
||||
+ goto login_err;
|
||||
+#ifndef PAM_CRED_ESTABLISH
|
||||
+#define PAM_CRED_ESTABLISH PAM_ESTABLISH_CRED
|
||||
+#endif /* PAM_CRED_ESTABLISH */
|
||||
+ PAM_error = pam_setcred(pamh, PAM_CRED_ESTABLISH);
|
||||
+ if (PAM_error != PAM_SUCCESS)
|
||||
+ goto login_err;
|
||||
+
|
||||
+login_err:
|
||||
+ pam_end(pamh, PAM_error);
|
||||
+ pamh = NULL;
|
||||
+ return false;
|
||||
+#endif /* ! USE_PAM */
|
||||
}
|
||||
|
||||
|
||||
@@ -161,8 +256,6 @@
|
||||
{
|
||||
if (!addr->proto || strcasecmp(addr->proto, "mstore"))
|
||||
return false;
|
||||
- if (addr->user && !mstore_userexists(addr->user))
|
||||
- return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -197,10 +290,18 @@
|
||||
}
|
||||
|
||||
cc_login(&username, &password);
|
||||
- if (username == NULL)
|
||||
+ if (username == NULL) {
|
||||
+ #ifdef DEBUG
|
||||
+ printf("\nNULL username\n");
|
||||
+ #endif
|
||||
goto fail;
|
||||
- if (!mstore_validuser(username,password))
|
||||
+ }
|
||||
+ if (!mstore_validuser(username,password)) {
|
||||
+ #ifdef DEBUG
|
||||
+ printf("\n!mstore_validuser(%s,%s)\n",username,password);
|
||||
+ #endif
|
||||
goto fail;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (!reopen) {
|
||||
@@ -212,13 +313,23 @@
|
||||
|
||||
if (options & CAL_LOGIN) {
|
||||
/* Copy login_userbuf, folder. */
|
||||
- if ((DATA->login_userbuf = strdup(username)) == NULL)
|
||||
+ if ((DATA->login_userbuf = strdup(username)) == NULL) {
|
||||
+ #ifdef DEBUG
|
||||
+ printf("\ncouldn't get login_userbuf (%s)\n",
|
||||
+ username);
|
||||
+ #endif
|
||||
goto fail;
|
||||
+ }
|
||||
|
||||
}
|
||||
|
||||
- if ((DATA->folder = strdup(addr->folder)) == NULL)
|
||||
+ if ((DATA->folder = strdup(addr->folder)) == NULL) {
|
||||
+ #ifdef DEBUG
|
||||
+ printf("\ncouldn't get folder (%s)\n",
|
||||
+ addr->folder);
|
||||
+ #endif
|
||||
goto fail;
|
||||
+ }
|
||||
|
||||
/* Set up folder_user */
|
||||
if(addr->host)
|
||||
@@ -229,8 +340,13 @@
|
||||
DATA->login_user=DATA->login_userbuf;
|
||||
if (addr->user) {
|
||||
/* Copy and split folder_userbuf */
|
||||
- if ((DATA->folder_userbuf = strdup(addr->user)) == NULL)
|
||||
+ if ((DATA->folder_userbuf = strdup(addr->user)) == NULL) {
|
||||
+#ifdef DEBUG
|
||||
+ printf("\ncouldn't get folder_userbuf (%s)\n",
|
||||
+ addr->user);
|
||||
+#endif
|
||||
goto fail;
|
||||
+ }
|
||||
/* Check for identical folder/login users. */
|
||||
DATA->folder_user=DATA->folder_userbuf;
|
||||
if ( !strcmp(DATA->login_user, DATA->folder_user))
|
||||
@@ -246,7 +362,6 @@
|
||||
DATA->folder_user = DATA->login_user;
|
||||
}
|
||||
|
||||
-
|
||||
return stream;
|
||||
fail:
|
||||
mstore_freestream(stream);
|
||||
@@ -270,6 +385,36 @@
|
||||
}
|
||||
|
||||
|
||||
+bool
|
||||
+mstore_create(CALSTREAM *stream, const char *calendar)
|
||||
+{
|
||||
+ FILE *calfile;
|
||||
+ char userpath[1000];
|
||||
+
|
||||
+ /*
|
||||
+ if (!(stream = mstore_open (stream, (const CALADDR *)calendar, 0))) {
|
||||
+ #ifdef DEBUG
|
||||
+ printf("Error! couldn't open calendar stream!\n");
|
||||
+ #endif
|
||||
+ return false;
|
||||
+ }
|
||||
+ */
|
||||
+ snprintf(userpath, 900, "%s/%s", DATA->base_path, calendar);
|
||||
+ #ifdef DEBUG
|
||||
+ printf("attempting fopen on calendar file '%s'\n", userpath);
|
||||
+ #endif
|
||||
+ calfile = fopen (userpath, "w");
|
||||
+ if (!calfile) {
|
||||
+ #ifdef DEBUG
|
||||
+ printf("Error! couldn't create calendar file!\n");
|
||||
+ #endif
|
||||
+ return false;
|
||||
+ }
|
||||
+ fclose (calfile);
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+
|
||||
CALEVENT *read_event(FILE *calfile)
|
||||
{
|
||||
char line[100];
|
||||
@@ -277,7 +422,8 @@
|
||||
int size;
|
||||
CALEVENT *event;
|
||||
|
||||
- fgets(line, sizeof(line), calfile);
|
||||
+ if (fgets(line, sizeof(line), calfile) == NULL)
|
||||
+ return NULL;
|
||||
if (sscanf(line, "%d", &size) != 1)
|
||||
return NULL;
|
||||
buf = malloc(size + 2);
|
||||
@@ -334,17 +480,18 @@
|
||||
datetime_t _end = DT_INIT;
|
||||
FILE *calfile;
|
||||
char userpath[1000];
|
||||
- snprintf(userpath,900,"%s/%s",DATA->base_path,DATA->folder_user);
|
||||
- calfile=fopen (userpath,"a+");
|
||||
- if(!calfile)
|
||||
- {
|
||||
+
|
||||
+ snprintf(userpath, 900, "%s/%s", DATA->base_path, DATA->folder_user);
|
||||
+ calfile = fopen (userpath, "a+");
|
||||
+ if(!calfile) {
|
||||
printf("Error! couldn't open calendar file!\n");
|
||||
exit(1);
|
||||
- }
|
||||
+ }
|
||||
rewind(calfile);
|
||||
|
||||
if (start) {
|
||||
if (!dt_hasdate(start))
|
||||
+//LM:should this be _start = NULL? and again below for end?
|
||||
start = NULL;
|
||||
else {
|
||||
dt_setdate(&_start,
|
||||
@@ -358,7 +505,7 @@
|
||||
dt_setdate(&_end, end->year, end->mon, end->mday);
|
||||
}
|
||||
|
||||
- while((event=read_event(calfile))) {
|
||||
+ while((event = read_event(calfile))) {
|
||||
datetime_t clamp = DT_INIT;
|
||||
|
||||
if (!start)
|
||||
@@ -385,28 +532,24 @@
|
||||
bool
|
||||
mstore_search_alarm(CALSTREAM *stream, const datetime_t *when)
|
||||
{
|
||||
- datetime_t start;
|
||||
- datetime_t end;
|
||||
- long alarm = 0;
|
||||
- unsigned long id = 0;
|
||||
CALEVENT *event;
|
||||
FILE *calfile;
|
||||
char userpath[1000];
|
||||
|
||||
- snprintf(userpath,900,"%s/%s",DATA->base_path,DATA->folder_user);
|
||||
- calfile=fopen (userpath,"a+");
|
||||
- if(!calfile)
|
||||
- {
|
||||
+ snprintf(userpath, 900, "%s/%s", DATA->base_path, DATA->folder_user);
|
||||
+ calfile=fopen (userpath, "a+");
|
||||
+ if(!calfile) {
|
||||
printf("Error! couldn't open calendar file!\n");
|
||||
exit(1);
|
||||
- }
|
||||
+ }
|
||||
rewind(calfile);
|
||||
- while((event=read_event(calfile))) {
|
||||
- if (dt_roll_time(&(event->start), 0, -alarm, 0) &&
|
||||
- dt_compare(&(event->start),&start)<=0 &&
|
||||
- dt_compare(&end,&(event->end)) <=0)
|
||||
+ while ((event = read_event(calfile))) {
|
||||
+ if (event->alarm &&
|
||||
+ dt_roll_time(&(event->start), 0, -(event->alarm), 0) &&
|
||||
+ dt_compare(&(event->start), when) <= 0 &&
|
||||
+ dt_compare(when, &(event->end)) <=0)
|
||||
{
|
||||
- cc_searched(id);
|
||||
+ cc_searched(event->id);
|
||||
}
|
||||
calevent_free(event);
|
||||
}
|
||||
@@ -422,13 +565,12 @@
|
||||
FILE *calfile;
|
||||
char userpath[1000];
|
||||
|
||||
- snprintf(userpath,900,"%s/%s",DATA->base_path,DATA->folder_user);
|
||||
- calfile=fopen (userpath,"a+");
|
||||
- if(!calfile)
|
||||
- {
|
||||
+ snprintf(userpath, 900, "%s/%s", DATA->base_path, DATA->folder_user);
|
||||
+ calfile = fopen (userpath,"a+");
|
||||
+ if(!calfile) {
|
||||
printf("Error! couldn't open calendar file!\n");
|
||||
exit(1);
|
||||
- }
|
||||
+ }
|
||||
rewind(calfile);
|
||||
while((event=read_event(calfile))) {
|
||||
if(event->id==id) {
|
||||
@@ -459,8 +601,11 @@
|
||||
if (strcasecmp(addr->folder, "INBOX"))
|
||||
return false;
|
||||
|
||||
+ /* comment this out so that we can share calendars
|
||||
if (DATA->folder_userbuf)
|
||||
return false;
|
||||
+ */
|
||||
+
|
||||
if (!dt_hasdate(&event->start))
|
||||
return false;
|
||||
|
||||
@@ -609,3 +754,15 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
+
|
||||
+bool
|
||||
+mstore_delete(CALSTREAM *stream, char *calendar)
|
||||
+{
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+bool
|
||||
+mstore_rename(CALSTREAM *stream, char *src,char *dest)
|
||||
+{
|
||||
+ return true;
|
||||
+}
|
16
misc/libmcal/pkg-message
Normal file
16
misc/libmcal/pkg-message
Normal file
@ -0,0 +1,16 @@
|
||||
*****************************************************************************
|
||||
libmcal has been installed. In order to end its configuration,
|
||||
please enter the following commands:
|
||||
|
||||
mkdir /var/calendar
|
||||
chmod 1777 /var/calendar
|
||||
|
||||
To work with the mstore driver, using the Apache's htpasswd utility,
|
||||
you may create the mpasswd file with the command below:
|
||||
|
||||
htpasswd -c %%LOCALBASE%%/etc/mpasswd username
|
||||
|
||||
To add or update this file you would execute as follows:
|
||||
|
||||
htpasswd %%LOCALBASE%%/etc/mpasswd username
|
||||
*****************************************************************************
|
Loading…
Reference in New Issue
Block a user