diff options
author | davidovski <david@davidovski.xyz> | 2023-02-02 14:10:02 +0000 |
---|---|---|
committer | davidovski <david@davidovski.xyz> | 2023-02-02 14:10:02 +0000 |
commit | f29d569cd33a73da5ad675f43a34ad53c5cc9bc6 (patch) | |
tree | 76fe6267f8307e7630fc6f53ff99a9767ad40de0 /repo/imap | |
parent | 05d004dfe0c9a9d898fac8a4a0292ca2a74ca391 (diff) |
Work
Diffstat (limited to 'repo/imap')
-rw-r--r-- | repo/imap/1006_openssl1.1_autoverify.patch | 58 | ||||
-rw-r--r-- | repo/imap/2014_openssl1.1.1_sni.patch | 40 | ||||
-rw-r--r-- | repo/imap/c-client-2006k_KOLAB_Annotations.patch | 448 | ||||
-rw-r--r-- | repo/imap/fix-linking.patch | 33 | ||||
-rw-r--r-- | repo/imap/imap.xibuild | 52 |
5 files changed, 631 insertions, 0 deletions
diff --git a/repo/imap/1006_openssl1.1_autoverify.patch b/repo/imap/1006_openssl1.1_autoverify.patch new file mode 100644 index 0000000..087e747 --- /dev/null +++ b/repo/imap/1006_openssl1.1_autoverify.patch @@ -0,0 +1,58 @@ +Description: Support OpenSSL 1.1 + When building with OpenSSL 1.1 and newer, use the new built-in + hostname verification instead of code that doesn't compile due to + structs having been made opaque. +Bug-Debian: https://bugs.debian.org/828589 + +--- a/src/osdep/unix/ssl_unix.c ++++ b/src/osdep/unix/ssl_unix.c +@@ -227,8 +227,16 @@ static char *ssl_start_work (SSLSTREAM * + /* disable certificate validation? */ + if (flags & NET_NOVALIDATECERT) + SSL_CTX_set_verify (stream->context,SSL_VERIFY_NONE,NIL); +- else SSL_CTX_set_verify (stream->context,SSL_VERIFY_PEER,ssl_open_verify); ++ else { ++#if OPENSSL_VERSION_NUMBER >= 0x10100000 ++ X509_VERIFY_PARAM *param = SSL_CTX_get0_param(stream->context); ++ X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); ++ X509_VERIFY_PARAM_set1_host(param, host, 0); ++#endif ++ ++ SSL_CTX_set_verify (stream->context,SSL_VERIFY_PEER,ssl_open_verify); + /* set default paths to CAs... */ ++ } + SSL_CTX_set_default_verify_paths (stream->context); + /* ...unless a non-standard path desired */ + if (s = (char *) mail_parameters (NIL,GET_SSLCAPATH,NIL)) +@@ -266,6 +274,7 @@ static char *ssl_start_work (SSLSTREAM * + if (SSL_write (stream->con,"",0) < 0) + return ssl_last_error ? ssl_last_error : "SSL negotiation failed"; + /* need to validate host names? */ ++#if OPENSSL_VERSION_NUMBER < 0x10100000 + if (!(flags & NET_NOVALIDATECERT) && + (err = ssl_validate_cert (cert = SSL_get_peer_certificate (stream->con), + host))) { +@@ -275,6 +284,7 @@ static char *ssl_start_work (SSLSTREAM * + sprintf (tmp,"*%.128s: %.255s",err,cert ? cert->name : "???"); + return ssl_last_error = cpystr (tmp); + } ++#endif + return NIL; + } + +@@ -313,6 +323,7 @@ static int ssl_open_verify (int ok,X509_ + * Returns: NIL if validated, else string of error message + */ + ++#if OPENSSL_VERSION_NUMBER < 0x10100000 + static char *ssl_validate_cert (X509 *cert,char *host) + { + int i,n; +@@ -342,6 +353,7 @@ static char *ssl_validate_cert (X509 *ce + else ret = "Unable to locate common name in certificate"; + return ret; + } ++#endif + + /* Case-independent wildcard pattern match + * Accepts: base string diff --git a/repo/imap/2014_openssl1.1.1_sni.patch b/repo/imap/2014_openssl1.1.1_sni.patch new file mode 100644 index 0000000..af2bf99 --- /dev/null +++ b/repo/imap/2014_openssl1.1.1_sni.patch @@ -0,0 +1,40 @@ +Bug-Debian: https://bugs.debian.org/916041 +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1834340 +Description: + Google IMAP servers require SNI if TLSv1.3 is used, + otherwise it sends a self-signed certificate which + fails validation. + + OpenSSL support/versions: + - TLSv1.3 on 1.1.1, + - a2i_IPADDRESS() on 0.9.8'ish, + - SSL_set_tlsext_host_name() on 0.9.8'ish/1.0.0; + per 'git blame/describe' and the CHANGES file. + + So check for TLSv1.3 support / OpenSSL 1.1.1 + not to incur behavior changes on pre-TLSv1.3, + and set host_name to 'host' (ssl_open_verify() + validates this, via 'ssl_last_host' variable) + + This patch just combines these two patches: + - BTS#916041 (message #5) by Ed Spiridonov, + - LP#916041 (comment #6) by David Zuelke. +Author: Mauricio Faria de Oliveira <mfo@canonical.com> + +--- a/src/osdep/unix/ssl_unix.c ++++ b/src/osdep/unix/ssl_unix.c +@@ -266,6 +266,14 @@ static char *ssl_start_work (SSLSTREAM * + /* create connection */ + if (!(stream->con = (SSL *) SSL_new (stream->context))) + return "SSL connection failed"; ++#if OPENSSL_VERSION_NUMBER >= 0x10101000 ++ /* Use SNI in case server requires it with TLSv1.3. ++ * Literal IP addresses not permitted per RFC 6066. */ ++ if (!a2i_IPADDRESS(host)) { ++ ERR_clear_error(); ++ SSL_set_tlsext_host_name(stream->con,host); ++ } ++#endif + bio = BIO_new_socket (stream->tcpstream->tcpsi,BIO_NOCLOSE); + SSL_set_bio (stream->con,bio,bio); + SSL_set_connect_state (stream->con); diff --git a/repo/imap/c-client-2006k_KOLAB_Annotations.patch b/repo/imap/c-client-2006k_KOLAB_Annotations.patch new file mode 100644 index 0000000..8eec02d --- /dev/null +++ b/repo/imap/c-client-2006k_KOLAB_Annotations.patch @@ -0,0 +1,448 @@ +Provides get/set ANNOTATIONS support to the c-client library. [Version: 2006k] + +diff -r 217555555c77 src/c-client/imap4r1.c +--- a/src/c-client/imap4r1.c Thu Feb 21 17:37:37 2008 +0100 ++++ b/src/c-client/imap4r1.c Thu Feb 21 17:38:15 2008 +0100 +@@ -135,7 +135,8 @@ typedef struct imap_argument { + #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_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, +@@ -2753,6 +2757,84 @@ long imap_getacl (MAILSTREAM *stream,cha + 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 +@@ -2805,6 +2887,16 @@ long imap_acl_work (MAILSTREAM *stream,c + 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 +@@ -2937,6 +3029,11 @@ IMAPPARSEDREPLY *imap_send (MAILSTREAM * + 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; +@@ -2947,6 +3044,18 @@ IMAPPARSEDREPLY *imap_send (MAILSTREAM * + do { /* for each list item */ + *s++ = c; /* write prefix character */ + if (reply = imap_send_astring (stream,tag,&s,&list->text,NIL, ++ CMDBASE+MAXCOMMAND)) return reply; ++ c = ' '; /* prefix character for subsequent strings */ ++ } ++ 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 */ + } +@@ -3119,6 +3228,32 @@ IMAPPARSEDREPLY *imap_send (MAILSTREAM * + reply = imap_sout (stream,tag,CMDBASE,&s); + 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 +@@ -4049,6 +4184,50 @@ void imap_parse_unsolicited (MAILSTREAM + } + } + ++ 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); +diff -r 217555555c77 src/c-client/imap4r1.h +--- a/src/c-client/imap4r1.h Thu Feb 21 17:37:37 2008 +0100 ++++ b/src/c-client/imap4r1.h Thu Feb 21 17:38:15 2008 +0100 +@@ -279,3 +279,5 @@ long imap_setquota (MAILSTREAM *stream,c + 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); +diff -r 217555555c77 src/c-client/mail.c +--- a/src/c-client/mail.c Thu Feb 21 17:37:37 2008 +0100 ++++ b/src/c-client/mail.c Thu Feb 21 17:38:15 2008 +0100 +@@ -69,6 +69,7 @@ static newsrcquery_t mailnewsrcquery = N + 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 */ +@@ -598,6 +599,11 @@ void *mail_parameters (MAILSTREAM *strea + 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: +@@ -5701,7 +5707,15 @@ ACLLIST *mail_newacllist (void) + 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 + */ +@@ -6024,6 +6038,25 @@ void mail_free_acllist (ACLLIST **al) + } + } + ++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 +diff -r 217555555c77 src/c-client/mail.h +--- a/src/c-client/mail.h Thu Feb 21 17:37:37 2008 +0100 ++++ b/src/c-client/mail.h Thu Feb 21 17:38:15 2008 +0100 +@@ -351,6 +351,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 */ + +@@ -1043,6 +1045,24 @@ ACLLIST { + char *identifier; /* authentication identifier */ + char *rights; /* access rights */ + 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 */ +@@ -1353,6 +1373,7 @@ typedef void (*logouthook_t) (void *data + 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 */ + +@@ -1771,7 +1792,10 @@ SORTPGM *mail_newsortpgm (void); + 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); +diff -r 217555555c77 src/mtest/mtest.c +--- a/src/mtest/mtest.c Thu Feb 21 17:37:37 2008 +0100 ++++ b/src/mtest/mtest.c Thu Feb 21 17:38:15 2008 +0100 +@@ -145,6 +145,8 @@ int main () + #endif + return NIL; + } ++ ++void mm_annotation (MAILSTREAM *stream, ANNOTATION *a); + + /* MM command loop + * Accepts: MAIL stream +@@ -195,6 +197,28 @@ void mm (MAILSTREAM *stream,long debug) + 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 @@ void mm (MAILSTREAM *stream,long debug) + 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); +@@ -600,6 +624,18 @@ void prompt (char *msg,char *txt) + + /* 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) + { diff --git a/repo/imap/fix-linking.patch b/repo/imap/fix-linking.patch new file mode 100644 index 0000000..8933c2d --- /dev/null +++ b/repo/imap/fix-linking.patch @@ -0,0 +1,33 @@ +diff --git a/src/osdep/unix/Makefile b/src/osdep/unix/Makefile +index 78913ac..9eb9c9c 100644 +--- a/src/osdep/unix/Makefile ++++ b/src/osdep/unix/Makefile +@@ -962,21 +962,24 @@ os_sol.h: + + # Once-only environment setup + +-once: onceenv ckp$(PASSWDTYPE) ssl$(SSLTYPE) osdep.c ++once: ssl$(SSLTYPE) onceenv ckp$(PASSWDTYPE) osdep.c + + onceenv: + @echo Once-only environment setup... + echo $(CC) > CCTYPE +- echo $(BASECFLAGS) '$(EXTRACFLAGS)' -DCHUNKSIZE=$(CHUNKSIZE) > CFLAGS +- echo -DCREATEPROTO=$(CREATEPROTO) -DEMPTYPROTO=$(EMPTYPROTO) \ ++ echo `$(CAT) CFLAGS` $(BASECFLAGS) '$(EXTRACFLAGS)' -DCHUNKSIZE=$(CHUNKSIZE) > CFLAGS ++ echo `$(CAT) OSCFLAGS` -DCREATEPROTO=$(CREATEPROTO) -DEMPTYPROTO=$(EMPTYPROTO) \ + -DMD5ENABLE=\"$(MD5PWD)\" -DMAILSPOOL=\"$(MAILSPOOL)\" \ + -DANONYMOUSHOME=\"$(MAILSPOOL)/anonymous\" \ + -DACTIVEFILE=\"$(ACTIVEFILE)\" -DNEWSSPOOL=\"$(NEWSSPOOL)\" \ + -DRSHPATH=\"$(RSHPATH)\" -DLOCKPGM=\"$(LOCKPGM)\" \ + -DLOCKPGM1=\"$(LOCKPGM1)\" -DLOCKPGM2=\"$(LOCKPGM2)\" \ + -DLOCKPGM3=\"$(LOCKPGM3)\" > OSCFLAGS +- echo $(BASELDFLAGS) $(EXTRALDFLAGS) > LDFLAGS ++ echo `$(CAT) LDFLAGS` -lcrypt $(BASELDFLAGS) $(EXTRALDFLAGS) > LDFLAGS + echo "$(ARRC) $(ARCHIVE) $(BINARIES);$(RANLIB) $(ARCHIVE)" > ARCHIVE ++ echo "`$(CAT) CCTYPE` `$(CAT) CFLAGS` `$(CAT) OSFLAGS` -shared \ ++ -Wl,-soname,libc-client.so.1 -o libc-client.so.1.0.0 $(BINARIES) `$(CAT) LDFLAGS`" \ ++ >> ARCHIVE + echo $(OS) > OSTYPE + ./drivers $(EXTRADRIVERS) $(DEFAULTDRIVERS) dummy + ./mkauths $(EXTRAAUTHENTICATORS) $(DEFAULTAUTHENTICATORS) diff --git a/repo/imap/imap.xibuild b/repo/imap/imap.xibuild new file mode 100644 index 0000000..96c5b17 --- /dev/null +++ b/repo/imap/imap.xibuild @@ -0,0 +1,52 @@ +#!/bin/sh + +NAME="imap" +DESC="An IMAP/POP server" + +MAKEDEPS="openssl" + +PKG_VER=2007f +SOURCE="http://ftp.ntua.gr/pub/net/mail/imap/imap-$PKG_VER.tar.gz" + +ADDITIONAL=" +1006_openssl1.1_autoverify.patch +2014_openssl1.1.1_sni.patch +c-client-2006k_KOLAB_Annotations.patch +fix-linking.patch +" + +prepare() { + apply_patches + sed -e "s:-g -fno-omit-frame-pointer -O6:\${CFLAGS}:" \ + -e "s:SSLDIR=/usr/local/ssl:SSLDIR=/usr:" \ + -e "s:SSLCERTS=\$(SSLDIR)/certs:SSLCERTS=/etc/ssl/certs:" \ + -e "s:^CC=.*:CC=${CC:-cc}:" \ + -i src/osdep/unix/Makefile +} + +build() { + cd $BUILD_ROOT + export GCCCFLAGS="$CFLAGS" + yes "y" | make slx SPECIALAUTHENTICATORS=ssl SSLTYPE=unix \ + EXTRACFLAGS="$CFLAGS -fPIC" \ + EXTRALDFLAGS="$LDFLAGS" +} + +package() { + cd $BUILD_ROOT + mkdir -p $PKG_DEST/usr/sbin + install -D -m755 imapd/imapd $PKG_DEST/usr/sbin/imapd + install -D -m755 ipopd/ipop2d $PKG_DEST/usr/sbin/ipop2d + install -D -m755 ipopd/ipop3d $PKG_DEST/usr/sbin/ipop3d + for i in c-client mail imap4r1 rfc822 linkage misc smtp nntp osdep \ + env_unix env fs ftl nl tcp sslio utf8 utf8aux; do + install -D -m644 c-client/$i.h \ + "$PKG_DEST"/usr/include/imap/$i.h + done + install -m644 c-client/linkage.c "$PKG_DEST"/usr/include/imap/linkage.c + + install -Dm755 c-client/libc-client.so.1.0.0 \ + "$PKG_DEST"/usr/lib/libc-client.so.1.0.0 + ln -s libc-client.so.1.0.0 "$PKG_DEST"/usr/lib/libc-client.so.1 + ln -s libc-client.so.1.0.0 "$PKG_DEST"/usr/lib/libc-client.so +} |