OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Thomas Lotterer
Root: /v/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-src Date: 31-May-2007 15:23:01
Branch: HEAD Handle: 2007053114225901
Added files:
openpkg-src/imap imap.patch.annotate
Modified files:
openpkg-src/apache2-php apache2-php.spec
openpkg-src/imap imap.spec
openpkg-src/php php.spec
Log:
IMAP METADATA Extension; packaging work motivated by the
Kolab-Konsortium
Summary:
Revision Changes Path
1.3 +10 -1 openpkg-src/apache2-php/apache2-php.spec
1.1 +453 -0 openpkg-src/imap/imap.patch.annotate
1.57 +6 -1 openpkg-src/imap/imap.spec
1.154 +10 -1 openpkg-src/php/php.spec
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-src/apache2-php/apache2-php.spec
============================================================================
$ cvs diff -u -r1.2 -r1.3 apache2-php.spec
--- openpkg-src/apache2-php/apache2-php.spec 30 May 2007 17:27:37 -0000
1.2
+++ openpkg-src/apache2-php/apache2-php.spec 31 May 2007 13:23:00 -0000
1.3
@@ -39,7 +39,7 @@
Group: Language
License: PHP
Version: %{V_php}
-Release: 20070530
+Release: 20070531
# package options
%option with_suhosin no
@@ -60,6 +60,7 @@
%option with_gettext no
%option with_iconv no
%option with_imap no
+%option with_imap_annotate no
%option with_mbregex no
%option with_mbstring no
%option with_mcrypt no
@@ -115,6 +116,7 @@
Source3: php.conf
Patch0:
http://www.hardened-php.net/hardening-patch-%{V_php_hardened}.patch.gz
Patch1:
http://www.hardened-php.net/suhosin/_media/suhosin-patch-%{V_php_suhosin_p}.patch.gz
+Patch2:
http://projects.pardus.de/kolab/browser/ebuilds-2.1/dev-lang/php/files/php-5.2.2-kolab.patch?format=raw
# build information
Prefix: %{l_prefix}
@@ -193,6 +195,10 @@
BuildPreReq: imap, openssl
PreReq: imap, openssl
%endif
+%if "%{with_imap_annotate}" == "yes"
+BuildPreReq: imap::with_annotate = yes
+PreReq: imap::with_annotate = yes
+%endif
%if "%{with_xml}" == "yes"
BuildPreReq: libxml
PreReq: libxml
@@ -299,6 +305,9 @@
-e 's;\(/include\)/freetype2;\1;' \
configure \
ext/gd/config.m4
+%if "%{with_imap_annotate}" == "yes"
+ sed <%{PATCH2} -e '/php-5.2.1\/ext\/imap\/php_imap.c.orig/,/^[^\+]/d' |
%{l_patch} -p1
+%endif
%build
# configure package
@@ .
patch -p0 <<'@@ .'
Index: openpkg-src/imap/imap.patch.annotate
============================================================================
$ cvs diff -u -r0 -r1.1 imap.patch.annotate
--- /dev/null 2007-05-31 15:22:25 +0200
+++ imap.patch.annotate 2007-05-31 15:22:59 +0200
@@ -0,0 +1,453 @@
+IMAP METADATA Extension
+http://www.ietf.org/internet-drafts/draft-daboo-imap-annotatemore-11.txt
+
+## Copyright (c) 2004 Tassilo Erlewein <[EMAIL PROTECTED]>
+## Copyright (c) 2004 Martin Konold <[EMAIL PROTECTED]>
+## Copyright (c) 2005 Steffen Hansen <[EMAIL PROTECTED]>
+http://max.kde.org:8080/mirrors/ftp.kolab.org/server/release/kolab-server-2.1.0/sources/imap-2004g-2.5.0_kolab.src.rpm
+
+Index: src/c-client/imap4r1.c
+--- src/c-client/imap4r1.c.orig 2007-04-05 02:55:47 +0200
++++ src/c-client/imap4r1.c 2007-05-30 10:14:11 +0200
+@@ -135,7 +135,8 @@
+ #define MULTIAPPEND 13
+ #define SNLIST 14
+ #define MULTIAPPENDREDO 15
+-
++#define QLIST 16
++#define QSTRING 17
+
+ /* Append data */
+
+@@ -205,12 +206,15 @@
+ void imap_gc_body (BODY *body);
+ void imap_capability (MAILSTREAM *stream);
+ long imap_acl_work (MAILSTREAM *stream,char *command,IMAPARG *args[]);
++long imap_annotation_work (MAILSTREAM *stream,char *command,IMAPARG
*args[]);
+
+ IMAPPARSEDREPLY *imap_send (MAILSTREAM *stream,char *cmd,IMAPARG *args[]);
+ IMAPPARSEDREPLY *imap_sout (MAILSTREAM *stream,char *tag,char *base,char
**s);
+ long imap_soutr (MAILSTREAM *stream,char *string);
+ IMAPPARSEDREPLY *imap_send_astring (MAILSTREAM *stream,char *tag,char **s,
+ SIZEDTEXT *as,long wildok,char *limit);
++IMAPPARSEDREPLY *imap_send_qstring (MAILSTREAM *stream,char *tag,char **s,
++ SIZEDTEXT *as,char *limit);
+ IMAPPARSEDREPLY *imap_send_literal (MAILSTREAM *stream,char *tag,char **s,
+ STRING *st);
+ IMAPPARSEDREPLY *imap_send_spgm (MAILSTREAM *stream,char *tag,char *base,
+@@ -2748,6 +2752,84 @@
+ args[0] = &ambx; args[1] = NIL;
+ return imap_acl_work (stream,"GETACL",args);
+ }
++
++/* IMAP set annotation
++ * Accepts: mail stream
++ * annotation struct
++ * Returns: T on success, NIL on failure
++ */
++
++long imap_setannotation (MAILSTREAM *stream,ANNOTATION *annotation)
++{
++ IMAPARG *args[4],ambx,apth,aval;
++ long ret;
++
++ ambx.type = ASTRING;
++ ambx.text = (void *) annotation->mbox;
++ args[0] = &ambx;
++
++ apth.type = QSTRING;
++ apth.text = (void *) annotation->entry;
++ args[1] = &apth;
++
++ STRINGLIST *st,*l;
++ ANNOTATION_VALUES *v;
++
++ l = st = mail_newstringlist();
++ v = annotation->values;
++ while(v){
++ l->text.size = strlen((char *) (l->text.data = (unsigned
char*)cpystr(v->attr)));
++ l->next = mail_newstringlist();
++ l = l->next;
++ l->text.size = strlen((char *) (l->text.data = (unsigned
char*)cpystr(v->value)));
++ if(v->next){
++ l->next = mail_newstringlist();
++ l = l->next;
++ }
++ v = v->next;
++ }
++
++ aval.type = QLIST;
++ aval.text = (void *)st;
++ args[2] = &aval;
++ args[3] = NIL;
++
++ ret = imap_annotation_work(stream, "SETANNOTATION",args);
++ mail_free_stringlist(&st);
++ return ret;
++}
++
++
++
++/* IMAP get annotation
++ * Accepts: mail stream
++ * mailbox name
++ * annotation entry list
++ * annotation attribute list
++ * Returns: T on success with data returned via callback, NIL on failure
++ */
++
++long imap_getannotation (MAILSTREAM *stream,char *mailbox,STRINGLIST
*entries, STRINGLIST *attributes)
++{
++ IMAPARG *args[4],ambx,apth,aattr;
++ long ret;
++ ambx.type = ASTRING;
++ ambx.text = (void*) mailbox;
++ args[0] = &ambx;
++
++
++ apth.type = QLIST;
++ apth.text = (void*) entries;
++ args[1] = &apth;
++
++ aattr.type = QLIST;
++ aattr.text = (void*) attributes;
++ args[2] = &aattr;
++
++ args[3] = NIL;
++ ret = imap_annotation_work(stream, "GETANNOTATION",args);
++ return ret;
++}
+
+ /* IMAP list rights
+ * Accepts: mail stream
+@@ -2800,6 +2882,16 @@
+ else mm_log ("ACL not available on this IMAP server",ERROR);
+ return ret;
+ }
++ long imap_annotation_work(MAILSTREAM *stream, char *command,IMAPARG
*args[])
++{
++ long ret = NIL;
++ IMAPPARSEDREPLY *reply;
++ if (imap_OK (stream,reply = imap_send (stream,command,args)))
++ ret = LONGT;
++ else mm_log (reply->text,ERROR);
++ return ret;
++}
++
+
+ /* IMAP set quota
+ * Accepts: mail stream
+@@ -2932,6 +3024,11 @@
+ if (reply = imap_send_astring
(stream,tag,&s,&st,NIL,CMDBASE+MAXCOMMAND))
+ return reply;
+ break;
++ case QSTRING: /* atom or string, must be literal? */
++ st.size = strlen ((char *) (st.data = (unsigned char *) arg->text));
++ if (reply = imap_send_qstring (stream,tag,&s,&st,CMDBASE+MAXCOMMAND))
++ return reply;
++ break;
+ case LITERAL: /* literal, as a stringstruct */
+ if (reply = imap_send_literal (stream,tag,&s,arg->text)) return reply;
+ break;
+@@ -2948,6 +3045,18 @@
+ while (list = list->next);
+ *s++ = ')'; /* close list */
+ break;
++ case QLIST: /* list of strings */
++ list = (STRINGLIST *) arg->text;
++ c = '('; /* open paren */
++ do { /* for each list item */
++ *s++ = c; /* write prefix character */
++ if (reply = imap_send_qstring (stream,tag,&s,&list->text,
++ CMDBASE+MAXCOMMAND)) return reply;
++ c = ' '; /* prefix character for subsequent strings */
++ }
++ while (list = list->next);
++ *s++ = ')'; /* close list */
++ break;
+ case SEARCHPROGRAM: /* search program */
+ if (reply = imap_send_spgm (stream,tag,CMDBASE,&s,arg->text,
+ CMDBASE+MAXCOMMAND))
+@@ -3115,6 +3224,32 @@
+ mail_unlock (stream); /* unlock stream */
+ return reply;
+ }
++
++/* IMAP send quoted-string
++ * Accepts: MAIL stream
++ * reply tag
++ * pointer to current position pointer of output bigbuf
++ * atom-string to output
++ * maximum to write as atom or qstring
++ * Returns: error reply or NIL if success
++ */
++
++IMAPPARSEDREPLY *imap_send_qstring (MAILSTREAM *stream,char *tag,char **s,
++ SIZEDTEXT *as,char *limit)
++{
++ unsigned long j;
++ char c;
++ STRING st;
++ /* in case needed */
++ INIT (&st,mail_string,(void *) as->data,as->size);
++ /* always write literal if no space */
++ if ((*s + as->size) > limit) return imap_send_literal (stream,tag,s,&st);
++
++ *(*s)++ = '"'; /* write open quote */
++ for (j = 0; j < as->size; j++) *(*s)++ = as->data[j];
++ *(*s)++ = '"'; /* write close quote */
++ return NIL;
++}
+
+ /* IMAP send atom-string
+ * Accepts: MAIL stream
+@@ -4034,6 +4169,50 @@
+ }
+ }
+
++ else if (!strcmp (reply->key,"ANNOTATION") && (s = reply->text)){
++ char * mbox;
++ /* response looks like ANNOTATION "mailbox" "entry" ("attr" "value"
["attr" "value"]) ["entry" ("attr "value" ["attr" "value"] )]*/
++ getannotation_t an = (getannotation_t) mail_parameters
(NIL,GET_ANNOTATION,NIL);
++
++ mbox = imap_parse_astring (stream, &s, reply,NIL);
++
++ while(*s){
++ ANNOTATION * al = mail_newannotation();
++ al->mbox = cpystr(mbox);
++ t = imap_parse_astring (stream, &s, reply,NIL);
++ al->entry = t;
++ STRINGLIST *strlist;
++ if (s){while (*s == ' ')s++;}
++
++ strlist = imap_parse_stringlist(stream, &s,reply);
++
++ ANNOTATION_VALUES *vlIter, *vlBegin;
++ vlIter = vlBegin = NIL;
++ if (strlist) {
++ while(strlist){
++ if(vlIter){
++ vlIter->next = mail_newannotationvalue();
++ vlIter = vlIter->next;
++ }else{
++ vlIter = mail_newannotationvalue();
++ vlBegin = vlIter;
++ }
++ if ( strlist->text.size )
++ vlIter->attr = cpystr (strlist->text.data);
++ strlist = strlist->next;
++ if(!strlist) continue;
++ if ( strlist->text.size )
++ vlIter->value = cpystr (strlist->text.data);
++ strlist = strlist->next;
++ }
++ }
++ al->values = vlBegin;
++ if (an)
++ (*an) (stream,al);
++ mail_free_annotation(&al);
++ }
++ fs_give ((void **)&mbox);
++ }
+ else if (!strcmp (reply->key,"ACL") && (s = reply->text) &&
+ (t = imap_parse_astring (stream,&s,reply,NIL))) {
+ getacl_t ar = (getacl_t) mail_parameters (NIL,GET_ACL,NIL);
+Index: src/c-client/imap4r1.h
+--- src/c-client/imap4r1.h.orig 2006-12-07 03:31:45 +0100
++++ src/c-client/imap4r1.h 2007-05-30 10:14:11 +0200
+@@ -248,3 +248,5 @@
+ long imap_setquota (MAILSTREAM *stream,char *qroot,STRINGLIST *limits);
+ long imap_getquota (MAILSTREAM *stream,char *qroot);
+ long imap_getquotaroot (MAILSTREAM *stream,char *mailbox);
++long imap_getannotation (MAILSTREAM *stream,char *mailbox,STRINGLIST
*entries,STRINGLIST *attributes);
++long imap_setannotation (MAILSTREAM *stream,ANNOTATION *annotation);
+Index: src/c-client/mail.c
+--- src/c-client/mail.c.orig 2007-01-31 04:53:02 +0100
++++ src/c-client/mail.c 2007-05-30 10:14:11 +0200
+@@ -67,6 +67,7 @@
+ static newsrcquery_t mailnewsrcquery = NIL;
+ /* ACL results callback */
+ static getacl_t mailaclresults = NIL;
++static getannotation_t mailannotationresults = NIL;
+ /* list rights results callback */
+ static listrights_t maillistrightsresults = NIL;
+ /* my rights results callback */
+@@ -580,6 +581,11 @@
+ ret = (void *) (debugsensitive ? VOIDT : NIL);
+ break;
+
++ case SET_ANNOTATION:
++ mailannotationresults = (getannotation_t) value;
++ case GET_ANNOTATION:
++ ret = (void *) mailannotationresults;
++ break;
+ case SET_ACL:
+ mailaclresults = (getacl_t) value;
+ case GET_ACL:
+@@ -5666,7 +5672,15 @@
+ return (ACLLIST *) memset (fs_get (sizeof (ACLLIST)),0,sizeof (ACLLIST));
+ }
+
++ANNOTATION *mail_newannotation (void)
++{
++ return (ANNOTATION *) memset (fs_get (sizeof
(ANNOTATION)),0,sizeof(ANNOTATION));
++}
+
++ANNOTATION_VALUES *mail_newannotationvalue (void)
++{
++ return (ANNOTATION_VALUES *) memset (fs_get (sizeof
(ANNOTATION_VALUES)),0,sizeof(ANNOTATION_VALUES));
++}
+ /* Mail instantiate new quotalist
+ * Returns: new quotalist
+ */
+@@ -5989,6 +6003,25 @@
+ }
+ }
+
++static void mail_free_annotation_values(ANNOTATION_VALUES **val)
++{
++ if (*val) {
++ if ((*val)->attr) fs_give ((void**) &(*val)->attr);
++ if ((*val)->value) fs_give ((void**) &(*val)->value);
++ mail_free_annotation_values (&(*val)->next);
++ fs_give ((void **) val);
++ }
++}
++void mail_free_annotation(ANNOTATION **al)
++{
++ if (*al) {
++ if((*al)->mbox) fs_give ((void**) &(*al)->mbox);
++ if((*al)->entry) fs_give ((void**) &(*al)->entry);
++ if((*al)->values)
++ mail_free_annotation_values(&(*al)->values);
++ fs_give ((void **) al);
++ }
++}
+
+ /* Mail garbage collect quotalist
+ * Accepts: pointer to quotalist pointer
+Index: src/c-client/mail.h
+--- src/c-client/mail.h.orig 2007-01-31 04:48:52 +0100
++++ src/c-client/mail.h 2007-05-30 10:15:58 +0200
+@@ -347,6 +347,8 @@
+ #define SET_SCANCONTENTS (long) 573
+ #define GET_MHALLOWINBOX (long) 574
+ #define SET_MHALLOWINBOX (long) 575
++#define GET_ANNOTATION (long) 576
++#define SET_ANNOTATION (long) 577
+
+ /* Driver flags */
+
+@@ -1039,6 +1041,24 @@
+ ACLLIST *next;
+ };
+
++/* ANNOTATION Response */
++
++#define ANNOTATION_VALUES struct annotation_value_list
++
++ANNOTATION_VALUES {
++ char *attr;
++ char *value;
++ ANNOTATION_VALUES *next;
++};
++
++#define ANNOTATION struct annotation
++
++ANNOTATION {
++ char *mbox;
++ char *entry;
++ ANNOTATION_VALUES * values;
++};
++
+ /* Quota resource list */
+
+ #define QUOTALIST struct quota_list
+@@ -1347,6 +1367,7 @@
+ typedef void (*logouthook_t) (void *data);
+ typedef char *(*sslclientcert_t) (void);
+ typedef char *(*sslclientkey_t) (void);
++typedef void (*getannotation_t) (MAILSTREAM *stream,ANNOTATION* annot);
+
+ /* Globals */
+
+@@ -1763,7 +1784,10 @@
+ SORTPGM *mail_newsortpgm (void);
+ THREADNODE *mail_newthreadnode (SORTCACHE *sc);
+ ACLLIST *mail_newacllist (void);
++ANNOTATION* mail_newannotation(void);
++ANNOTATION_VALUES* mail_newannotationvalue(void);
+ QUOTALIST *mail_newquotalist (void);
++void mail_free_annotation(ANNOTATION **a);
+ void mail_free_body (BODY **body);
+ void mail_free_body_data (BODY *body);
+ void mail_free_body_parameter (PARAMETER **parameter);
+Index: src/mtest/mtest.c
+--- src/mtest/mtest.c.orig 2006-08-31 02:26:33 +0200
++++ src/mtest/mtest.c 2007-05-30 10:14:11 +0200
+@@ -145,6 +145,8 @@
+ #endif
+ return NIL;
+ }
++
++void mm_annotation (MAILSTREAM *stream, ANNOTATION *a);
+
+ /* MM command loop
+ * Accepts: MAIL stream
+@@ -195,6 +197,28 @@
+ mail_setflag (stream,arg,"\\DELETED");
+ else puts ("?Bad message number");
+ break;
++ case 'A':
++ {
++ char parms[MAILTMPLEN];
++ prompt("Annotation: ",parms);
++ if (parms) {
++ mail_parameters(stream,SET_ANNOTATION,mm_annotation);
++ STRINGLIST *entries = mail_newstringlist();
++ STRINGLIST *cur = entries;
++ cur->text.size = strlen((char *) (cur->text.data = (unsigned
char*)cpystr (parms)));
++ cur->next = NIL;
++
++ STRINGLIST *attributes = mail_newstringlist();
++ cur = attributes;
++ cur->text.size = strlen((char *) (cur->text.data = (unsigned
char*)cpystr ("*")));
++ cur->next = NIL;
++
++ imap_getannotation(stream,"INBOX",entries,attributes);
++ mail_free_stringlist(&entries);
++ mail_free_stringlist(&attributes);
++ }
++ }
++ break;
+ case 'E': /* Expunge command */
+ mail_expunge (stream);
+ last = 0;
+@@ -347,7 +371,7 @@
+ case '?': /* ? command */
+ puts ("Body, Check, Delete, Expunge, Find, GC, Headers, Literal,");
+ puts (" MailboxStatus, New Mailbox, Overview, Ping, Quit, Send,
Type,");
+- puts ("Undelete, Xit, +, -, or <RETURN> for next message");
++ puts ("Undelete, Xit,Annotation, +, -, or <RETURN> for next message");
+ break;
+ default: /* bogus command */
+ printf ("?Unrecognized command: %s\n",cmd);
+@@ -595,6 +619,18 @@
+
+ /* Interfaces to C-client */
+
++void mm_annotation (MAILSTREAM *stream, ANNOTATION *a)
++{
++ if(a){
++ fprintf(stderr,"mailbox: %s\nentry: %s\n",a->mbox,a->entry);
++ ANNOTATION_VALUES * v = a->values;
++ while(v){
++ fprintf(stderr,"attr: %s, value: %s\n",v->attr,v->value);
++ v = v->next;
++ }
++ }
++}
++
+
+ void mm_searched (MAILSTREAM *stream,unsigned long number)
+ {
@@ .
patch -p0 <<'@@ .'
Index: openpkg-src/imap/imap.spec
============================================================================
$ cvs diff -u -r1.56 -r1.57 imap.spec
--- openpkg-src/imap/imap.spec 3 May 2007 10:15:32 -0000 1.56
+++ openpkg-src/imap/imap.spec 31 May 2007 13:22:59 -0000 1.57
@@ -37,17 +37,19 @@
Group: Mail
License: University of Washington's Free-Fork License
Version: %{V_here}
-Release: 20070503
+Release: 20070531
# package options
%option with_ssl yes
%option with_pam no
%option with_daemons no
%option with_mbxdef no
+%option with_annotate no
# list of sources
Source0: ftp://ftp.cac.washington.edu/imap/imap-%{V_real}.tar.Z
Patch0: imap.patch
+Patch1: imap.patch.annotate
# build information
Prefix: %{l_prefix}
@@ -82,6 +84,9 @@
%prep
%setup -q -n imap-%{V_real}
%patch -p0
+%if "%{with_annotate}" == "yes"
+ %patch -p0 -P 1
+%endif
%build
mflags="%{l_mflags}"
@@ .
patch -p0 <<'@@ .'
Index: openpkg-src/php/php.spec
============================================================================
$ cvs diff -u -r1.153 -r1.154 php.spec
--- openpkg-src/php/php.spec 20 May 2007 06:58:29 -0000 1.153
+++ openpkg-src/php/php.spec 31 May 2007 13:23:00 -0000 1.154
@@ -39,7 +39,7 @@
Group: Language
License: PHP
Version: %{V_php}
-Release: 20070520
+Release: 20070531
# package options
%option with_suhosin no
@@ -60,6 +60,7 @@
%option with_gettext no
%option with_iconv no
%option with_imap no
+%option with_imap_annotate no
%option with_mbregex no
%option with_mbstring no
%option with_mcrypt no
@@ -114,6 +115,7 @@
Source2: php.ini
Patch0:
http://www.hardened-php.net/hardening-patch-%{V_php_hardened}.patch.gz
Patch1:
http://www.hardened-php.net/suhosin/_media/suhosin-patch-%{V_php_suhosin_p}.patch.gz
+Patch2:
http://projects.pardus.de/kolab/browser/ebuilds-2.1/dev-lang/php/files/php-5.2.2-kolab.patch?format=raw
# build information
Prefix: %{l_prefix}
@@ -190,6 +192,10 @@
BuildPreReq: imap, openssl
PreReq: imap, openssl
%endif
+%if "%{with_imap_annotate}" == "yes"
+BuildPreReq: imap::with_annotate = yes
+PreReq: imap::with_annotate = yes
+%endif
%if "%{with_xml}" == "yes"
BuildPreReq: libxml
PreReq: libxml
@@ -293,6 +299,9 @@
-e 's;\(/include\)/freetype2;\1;' \
configure \
ext/gd/config.m4
+%if "%{with_imap_annotate}" == "yes"
+ sed <%{PATCH2} -e '/php-5.2.1\/ext\/imap\/php_imap.c.orig/,/^[^\+]/d' |
%{l_patch} -p1
+%endif
%build
# configure package
@@ .
______________________________________________________________________
OpenPKG http://openpkg.org
CVS Repository Commit List [email protected]