Re: is a self signed certificate always invalid the first time?

2017-08-18 Thread Michael Felt



On 8/18/2017 9:12 AM, voy...@sbt.net.au wrote:

On Fri, August 18, 2017 5:02 pm, Michael Felt wrote:

On 8/11/2017 1:29 PM, Ralph Seichter wrote:

And, Ralph, I salute you. I have never been able to be disciplined
enough to be my own CA.

I encourage you to look into the subject again.


I actually have been, which is why I could give a near sensible reply.
Thanks for the encouragement!


With the advent of Let's
Encrypt, free certs for the masses have become a thing, but if you need
more than 3 months validity, want to create certs for Intranet-devices
(routers, local servers), or just want maximum control over all certs,
setting up your own CA is rewarding. While you're at it, no gentleman
should not be without DNSSEC, DKIM and DANE these days. ;-)

I should know all three, but, sadly, only one: two things to add to my
list of things to research.


I have been reading this with some interest (while trying to migrate
Dovecot, Postfix etc..)

BUT, for a public web server where https is becoming mandatory, I'd still
need a certificate from a recognized publisher, to avoid users geting
'warnings', is that so ?

(I'm currently using self issued for both mail and web)

Above - Ralph added:

I also made my CA
certs available for public download, so tech-savvy users can import the
CA certs manually.
Depending on your site-popularity (aka number of "random" users) you 
could also instruct them how to access your signing key. Once they had 
that, they would auto-magically, recognize any other keys you signed 
with your CA "roots".


In other words, if the work to you to instruct users to use your CA is 
more expensive than using a commercial CA - save money and use a 
commercial CA. Before spending any money on a commercial CA - look at 
alternatives such as Let's Encrypt. I am also looking at 
http://www.cacert.org/ (That might be something for you Ralph!)




thanks,

V


Re: is a self signed certificate always invalid the first time?

2017-08-18 Thread Michael Felt



On 8/11/2017 1:29 PM, Ralph Seichter wrote:

On 11.08.2017 11:36, Michael Felt wrote:


This is what Ralph means when he says "have been running a CA for
15+ years" - not that he is (though he could!) sell certificates
commercially - rather, he is using an initial certificate to sign
later certificates with.

Actually, I do sell certificates to my customers. :-) In small numbers,
and only for servers to which I have administrative access.

So, not really "selling", but an additional service.

I created a
root CA and two intermediate CAs (one each for client and server certs,
respectively).

It would be great to have my CAs added to Mozilla's NSS root certificate
store, but alas, the effort to get there is massive. Where possible, I
will add my CA certs to the customers' keystores. I also made my CA
certs available for public download, so tech-savvy users can import the
CA certs manually.


Again, technically, there is no difference in a self-signed 2048-bit RSA
key, and one signed by a "major" CA. However, in the "ease of use" there
may be major differences.

In 2015 I rolled out an updated CA which I have used ever since, with
4096 bit keys for root and intermediary CA certs. I also only generate
4096 bit keys for servers these days, so my cert chain is "stronger"
than those of some commercial CAs. Also, it is good to know that these
certs have never been touched by anybody but myself. I even install my
own CA cert chain on my iOS devices.


And, Ralph, I salute you. I have never been able to be disciplined
enough to be my own CA.

I encourage you to look into the subject again.
I actually have been, which is why I could give a near sensible reply. 
Thanks for the encouragement!

With the advent of Let's
Encrypt, free certs for the masses have become a thing, but if you need
more than 3 months validity, want to create certs for Intranet-devices
(routers, local servers), or just want maximum control over all certs,
setting up your own CA is rewarding. While you're at it, no gentleman
should not be without DNSSEC, DKIM and DANE these days. ;-)
I should know all three, but, sadly, only one: two things to add to my 
list of things to research.

-Ralph


Re: is a self signed certificate always invalid the first time?

2017-08-18 Thread Michael Felt



On 8/11/2017 11:44 AM, Florian Beer wrote:

On 2017-08-11 11:36, Michael Felt wrote:

I have looked at let's encrypt. Key issue for me is having to add a
lot python stuff that would otherwise not be on any server.



I use acme.sh for all of my LetsEncrypt certs (web & mail), it is 
written in pure shell script, so no python dependencies.

https://github.com/Neilpang/acme.sh
Thanks - I might look at that, but as Ralph mentions in his reply - 
Let's encrypt certs are only for three months - never ending circus.


Re: is a self signed certificate always invalid the first time?

2017-08-11 Thread Michael Felt
I have looked at let's encrypt. Key issue for me is having to add a lot 
python stuff that would otherwise not be on any server.


Again,  All CA's like "Let's Encrypt" - and others that are accepted by 
the "majors", e.g., Windows, Mozilla make it much easier for the 
"random" user to use anything you protect with SSL (better TLS) without 
them having to grant "trust" manually. That "trust" is indicated because 
the CA that signed your certificate is recognized by a CA, that is 
recognized by CA, that is recognized by a CA in the "root-trust" list 
that the "majors" make available (e.g., the mozilla list available via 
the curl site (https://curl.haxx.se/docs/caextract.html)).


Now - back to Ralph's comment:


On 8/10/2017 1:42 PM, Ralph Seichter wrote:

I have been running a CA for 15+ years, generating certificates only for
servers I personally maintain. Since my business is too small to be able
to afford all the steps required to have my CA trusted by Mozilla, Apple
etc., this approach leaves me with the same problem self-signed certs
have: How can I make third party applications like web browsers or MUAs
trust the certs I created?
Rather than make the mistake I did years ago by make "unique" 
self-signed certificates for different servers - start out with a 
self-signed certificate that you use as a signing certificate. This is 
what Ralph means when he says "have been running a CA for 15+ years" - 
not that he is (though he could!) sell certificates commercially - 
rather, he is using an initial certificate to sign later certificates 
with. So, his "users" only need to add the public side of his signing 
certificate - and any certificate he has signed meets the "chain of trust".


So, if your users are "random", i.e., can come from anywhere - you may 
want a "major accepted/recognized" certificate authority so that you do 
not have to distribute your signing key. However, if your user pool is 
"select", or otherwise known - requiring them to use your "self-signed" 
CA may be a positive, rather than a negative.


Again, technically, there is no difference in a self-signed 2048-bit RSA 
key, and one signed by a "major" CA. However, in the "ease of use" there 
may be major differences.


And, Ralph, I salute you. I have never been able to be disciplined 
enough to be my own CA. :)


AIX packaging: src/plugin/quota does not build

2017-06-12 Thread Michael Felt

#stdout to /dev/null to see only the error messages

It comes down to more issues with how IBM xlc handles (less elegantly) 
Compound Literals compared to GCC.



michael@x071:[/data/prj/aixtools/github/dovecot/x071-test]make -i >/dev/null
"../../../../src/x071-test/src/plugins/quota/quota.c", line 382.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 383.17: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 384.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 385.17: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.

make[4]: [quota.lo] Error 1 (ignored)

The above issues I resolved by changing

/*
 * Sigh, xlc and Compound Literals
 *
struct quota_param_parser quota_param_hidden = {.param_name = "hidden", 
.param_handler = hidden_param_handler};
struct quota_param_parser quota_param_ignoreunlimited = {.param_name = 
"ignoreunlimited", .param_handler = ignoreunlim_param_handler};
struct quota_param_parser quota_param_noenforcing = {.param_name = 
"noenforcing", .param_handler = noenforcing_param_handler};
struct quota_param_parser quota_param_ns = {.param_name = "ns=", 
.param_handler = ns_param_handler};

 */

to

#define quota_param_hidden {.param_name = "hidden", .param_handler = 
hidden_param_handler}
#define quota_param_ignoreunlimited {.param_name = "ignoreunlimited", 
.param_handler = ignoreunlim_param_handler}
#define quota_param_noenforcing {.param_name = "noenforcing", 
.param_handler = noenforcing_param_handler}
#define quota_param_ns {.param_name = "ns=", .param_handler = 
ns_param_handler}


Unfortunately, this did not help quota-fs.c, so I move the defines to 
quota.h.


However, since hidden_param_handler() is defined as a static routine, it 
is not visible outside of quota.c. As such the error messages change from:


"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.37: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.62: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 126.18: 
1506-515 (S) Member designator cannot be applied to an object of type 
"const struct quota_param_parser[]".

make[4]: [quota-fs.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.37: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.66: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.91: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.

make[4]: [quota-dict.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-imapc.c", line 66.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-imapc.c", line 67.18: 
1506-515 (S) Member designator cannot be applied to an object of type 
"const struct quota_param_parser[]".

make[4]: [quota-imapc.lo] Error 1 (ignored)
libtool:   error: 'quota.lo' is not a valid libtool object
make[4]: [lib10_quota_plugin.la] Error 1 (ignored)
libtool:   error: 'quota.lo' is not a valid libtool object
make[4]: [quota-status] Error 1 (ignored)
make[4]: *** No rule to make target `../quota/lib10_quota_plugin.la', 
needed by `lib11_imap_quota_plugin.la'.  Stop.

make[3]: [all-recursive] Error 1 (ignored)

to:

michael@x071:[/data/prj/aixtools/github/dovecot/x071-test/src/plugins/quota]make 
-i >/dev/null
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.17: 
1506-045 (S) Undeclared identifier hidden_param_handler.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 126.17: 
1506-045 (S) Undeclared identifier 

AIX lacks getopt_long

2017-06-12 Thread Michael Felt

 * As a test I added the 'struct option' to the file needing it, and
   this confirmed the need for getopt_long() which AIX libc.a does not
   include.
 * p.s. I ran this dry-run from the "root" directory, perhaps it would
   be better from the ./src directory

--- src/x071-test/src/doveadm/doveadm-cmd.c 2017-06-12 06:10:53 +
+++ src/AIX-port/src/doveadm/doveadm-cmd.c  2017-06-10 12:24:53 +
@@ -13,23 +13,9 @@
 /*
  * getopt.h is non-POSIX
  * on AIX getopt() is declared in unistd.h
- * however, unistd.h does not include the 'struct option'
  */
 #ifndef _AIX
 #include 
-#else
-/*
- * copied from Debian 3.2.0 /usr/include/getopt.h
- */
-struct option
-{
-  const char *name;
-  /* has_arg can't be an enum because some compilers complain about
- type mismatches in all the code that assumes it is an int.  */
-  int has_arg;
-  int *flag;
-  int val;
-};
 #endif

 static struct doveadm_cmd *doveadm_commands[] = {

 * I searched for a possible solution - and I am hoping gnulib will be
   something you would consider. I downloaded the latest gnulib using
   'git clone git://git.savannah.gnu.org/gnulib.git'
 * This is the --dry-run output.
 * As there maybe "license" issues, this is not something I am going to
   do "on my own" - in the package they speak of GPL and LGPL - but I
   know nothing about licensing issues.


michael@x071:[/data/prj/aixtools/github/dovecot/src/x071-test]/data/prj/aixtools/github/dovecot/gnulib/gnulib-tool 
--dry-run --import getopt-posix

Module list with included dependencies (indented):
absolute-header
extensions
extern-inline
  getopt-posix
gettext-h
include_next
snippet/arg-nonnull
snippet/c++defs
snippet/warn-on-use
ssize_t
stddef
sys_types
unistd
File list:
  lib/arg-nonnull.h
  lib/c++defs.h
  lib/getopt-cdefs.in.h
  lib/getopt-core.h
  lib/getopt-ext.h
  lib/getopt-pfx-core.h
  lib/getopt-pfx-ext.h
  lib/getopt.c
  lib/getopt.in.h
  lib/getopt1.c
  lib/getopt_int.h
  lib/gettext.h
  lib/stddef.in.h
  lib/sys_types.in.h
  lib/unistd.c
  lib/unistd.in.h
  lib/warn-on-use.h
  m4/00gnulib.m4
  m4/absolute-header.m4
  m4/extensions.m4
  m4/extern-inline.m4
  m4/getopt.m4
  m4/gnulib-common.m4
  m4/include_next.m4
  m4/off_t.m4
  m4/onceonly.m4
  m4/ssize_t.m4
  m4/stddef_h.m4
  m4/sys_types_h.m4
  m4/unistd_h.m4
  m4/warn-on-use.m4
  m4/wchar_t.m4
Create directory ./lib
Create directory ./lib
Copy file lib/arg-nonnull.h
Copy file lib/c++defs.h
Copy file lib/getopt-cdefs.in.h
Copy file lib/getopt-core.h
Copy file lib/getopt-ext.h
Copy file lib/getopt-pfx-core.h
Copy file lib/getopt-pfx-ext.h
Copy file lib/getopt.c
Copy file lib/getopt.in.h
Copy file lib/getopt1.c
Copy file lib/getopt_int.h
Copy file lib/gettext.h
Copy file lib/stddef.in.h
Copy file lib/sys_types.in.h
Copy file lib/unistd.c
Copy file lib/unistd.in.h
Copy file lib/warn-on-use.h
Copy file m4/00gnulib.m4
Copy file m4/absolute-header.m4
Copy file m4/extensions.m4
Copy file m4/extern-inline.m4
Copy file m4/getopt.m4
Copy file m4/gnulib-common.m4
Copy file m4/gnulib-tool.m4
Copy file m4/include_next.m4
Copy file m4/off_t.m4
Copy file m4/onceonly.m4
Copy file m4/ssize_t.m4
Copy file m4/stddef_h.m4
Copy file m4/sys_types_h.m4
Copy file m4/unistd_h.m4
Copy file m4/warn-on-use.m4
Copy file m4/wchar_t.m4
Create lib/Makefile.am
Create m4/gnulib-cache.m4
# Copyright (C) 2002-2017 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file.  If not, see .
#
# As a special exception to the GNU General Public License,
# this file may be distributed as part of a program that
# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
#
# This file represents the specification of how gnulib-tool is used.
# It acts as a cache: It is written and read by gnulib-tool.
# In projects that use version control, this file is meant to be put under
# version control, like the configure.ac and various Makefile.am files.


# Specification in the form of a command-line invocation:
#   gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 
--doc-base=doc --tests-base=tests --aux-dir=. 
--no-conditional-dependencies --no-libtool --macro-prefix=gl getopt-posix


# Specification in the form of a few gnulib-tool.m4 macro invocations:
gl_LOCAL_DIR([])
gl_MODULES([
  getopt-posix
])
gl_AVOID([])
gl_SOURCE_BASE([lib])

Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2017-06-10 Thread Michael Felt

On 10/06/2017 17:26, Michael Felt wrote:

On 10/06/2017 17:23, Michael Felt wrote:

On 10/06/2017 14:42, Michael Felt wrote:


Next chapter in packaging.(Not meant to be extensive, only what I 
run across and is easy to report)


So, now in an attempt to report on where I am at...

mich...@x071.home.local:[/data/prj/aixtools/github/dovecot/x071-test]make 
-i >/dev/null
"../../../src/x071-test/src/doveadm/doveadm-cmd.c", line 434.24: 
1506-007 (S) "struct option" is undefined.
"../../../src/x071-test/src/doveadm/doveadm-cmd.c", line 516.9: 1506-285 
(S) The indirection operator cannot be applied to a pointer to an 
incomplete struct or union.
"../../../src/x071-test/src/doveadm/doveadm-cmd.c", line 536.37: 
1506-285 (S) The indirection operator cannot be applied to a pointer to 
an incomplete struct or union.
"../../../src/x071-test/src/doveadm/doveadm-cmd.c", line 548.37: 
1506-285 (S) The indirection operator cannot be applied to a pointer to 
an incomplete struct or union.

make[4]: [doveadm-cmd.o] Error 1 (ignored)
xlc_r: 1501-228 (W) input file doveadm-cmd.o not found
make[4]: [doveadm] Error 252 (ignored)
xlc_r: 1501-228 (W) input file doveadm-cmd.o not found
make[4]: [doveadm-server] Error 252 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota.c", line 382.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 383.17: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 384.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 385.17: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.

make[4]: [quota.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.37: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.62: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 126.18: 
1506-515 (S) Member designator cannot be applied to an object of type 
"const struct quota_param_parser[]".

make[4]: [quota-fs.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.37: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.66: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.91: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.

make[4]: [quota-dict.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-imapc.c", line 66.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-imapc.c", line 67.18: 
1506-515 (S) Member designator cannot be applied to an object of type 
"const struct quota_param_parser[]".

make[4]: [quota-imapc.lo] Error 1 (ignored)
libtool:   error: 'quota.lo' is not a valid libtool object
make[4]: [lib10_quota_plugin.la] Error 1 (ignored)
libtool:   error: 'quota.lo' is not a valid libtool object
make[4]: [quota-status] Error 1 (ignored)
make[4]: *** No rule to make target `../quota/lib10_quota_plugin.la', 
needed by `lib11_imap_quota_plugin.la'.  Stop.

make[3]: [all-recursive] Error 1 (ignored)
mich...@x071.home.local:[/data/prj/aixtools/github/dovecot/x071-test]

I am hoping the changes needed are "simple" - and I would rather bow to 
the expert rather than make things unduly messy.


Regards,

Michael

(And I am going to look up how to post to git (via a remote) to show you 
what I have modified to get this far.)


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2017-06-10 Thread Michael Felt

On 10/06/2017 17:23, Michael Felt wrote:

On 10/06/2017 14:42, Michael Felt wrote:


Next chapter in packaging.(Not meant to be extensive, only what I run 
across and is easy to report)


c)

  378 | int quota_root_default_init(struct quota_root *root, const 
char *args,

  379 | const char **error_r)
  380 | {
  381 | const struct quota_param_parser default_params[] = {
  382 | quota_param_hidden,
"../../../../src/x071-test/src/plugins/quota/quota.c", line 382.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.

  383 | quota_param_ignoreunlimited,
"../../../../src/x071-test/src/plugins/quota/quota.c", line 383.17: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowe

d.
  384 | quota_param_noenforcing,
"../../../../src/x071-test/src/plugins/quota/quota.c", line 384.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.

  385 | quota_param_ns,
"../../../../src/x071-test/src/plugins/quota/quota.c", line 385.17: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowe

d.
  386 | {.param_name = NULL}
  386 + {.param_name = 0}
  387 | };
  388 | return quota_parse_parameters(root, , 
error_r, default_params, FALSE);
  388 + return quota_parse_parameters(root, , 
error_r, default_params, 0);

  389 | }


More on this (the redirect to /dev/null is to remove all the verbosity)

mich...@x071.home.local:[/data/prj/aixtools/github/dovecot/x071-test/src/plugins/quota]make 
-i >/dev/null
"../../../../src/x071-test/src/plugins/quota/quota.c", line 382.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 383.17: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 384.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota.c", line 385.17: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.

make: [quota.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.37: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 125.62: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-fs.c", line 126.18: 
1506-515 (S) Member designator cannot be applied to an object of type 
"const struct quota_param_parser[]".

make: [quota-fs.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.37: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.66: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-dict.c", line 47.91: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowed.

make: [quota-dict.lo] Error 1 (ignored)
"../../../../src/x071-test/src/plugins/quota/quota-imapc.c", line 66.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.
"../../../../src/x071-test/src/plugins/quota/quota-imapc.c", line 67.18: 
1506-515 (S) Member designator cannot be applied to an object of type 
"const struct quota_param_parser[]".

make: [quota-imapc.lo] Error 1 (ignored)
libtool:   error: 'quota.lo' is not a valid libtool object
make: [lib10_quota_plugin.la] Error 1 (ignored)
libtool:   error: 'quota.lo' is not a valid libtool object
make: [quota-status] Error 1 (ignored)
mich...@x071.home.local:[/data/prj/aixtools/github/dovecot/x071-test/src/plugins/quota]


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2017-06-10 Thread Michael Felt

On 10/06/2017 14:42, Michael Felt wrote:


Next chapter in packaging.(Not meant to be extensive, only what I run 
across and is easy to report)


c)

  378 | int quota_root_default_init(struct quota_root *root, const 
char *args,

  379 | const char **error_r)
  380 | {
  381 | const struct quota_param_parser default_params[] = {
  382 | quota_param_hidden,
"../../../../src/x071-test/src/plugins/quota/quota.c", line 382.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.

  383 | quota_param_ignoreunlimited,
"../../../../src/x071-test/src/plugins/quota/quota.c", line 383.17: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowe

d.
  384 | quota_param_noenforcing,
"../../../../src/x071-test/src/plugins/quota/quota.c", line 384.17: 
1506-196 (S) Initialization between types "char* const" and "struct 
quota_param_parser" is not allowed.

  385 | quota_param_ns,
"../../../../src/x071-test/src/plugins/quota/quota.c", line 385.17: 
1506-196 (S) Initialization between types "void(* const)(struct 
quota_root*,const char*)" and "struct quota_param_parser" is not allowe

d.
  386 | {.param_name = NULL}
  386 + {.param_name = 0}
  387 | };
  388 | return quota_parse_parameters(root, , error_r, 
default_params, FALSE);
  388 + return quota_parse_parameters(root, , error_r, 
default_params, 0);

  389 | }


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2017-06-10 Thread Michael Felt

On 09/10/2016 21:48, Michael Felt wrote:
I finally decided it was really time to stop being lazy and really 
move away from gmail. After I have a server in my basement using 
power, etc.


So I turned on the imap provided - and did not quite cry - it will 
have to do for now, but imap2 is wanting.


Next chapter in packaging.

a) I have 'patched' several files to get around the 'limitation' of the 
xlc parsing of Compound Literals.


b) a bit more difficult is to figure out how to not need GNU C Library 
getopt(). Currently stuck at:


xlc_r -DHAVE_CONFIG_H -I. -I../../../src/x071-test/src/doveadm -I../.. 
-I../../../src/x071-test/src/lib -I../../../src/x071-test/src/lib-test 
-I../../../src/x071-test/src/lib-settings 
-I../../../src/x071-test/src/lib-auth 
-I../../../src/x071-test/src/lib-compression 
-I../../../src/x071-test/src/lib-dict 
-I../../../src/x071-test/src/lib-fs 
-I../../../src/x071-test/src/lib-ssl-iostream 
-I../../../src/x071-test/src/lib-master 
-I../../../src/x071-test/src/lib-mail 
-I../../../src/x071-test/src/lib-imap 
-I../../../src/x071-test/src/lib-index 
-I../../../src/x071-test/src/lib-storage 
-I../../../src/x071-test/src/lib-imap-storage 
-I../../../src/x071-test/src/lib-http 
-I../../../src/x071-test/src/lib-dcrypt 
-I../../../src/x071-test/src/auth -DMODULEDIR=\""/opt/lib/dovecot"\" 
-DAUTH_MODULE_DIR=\""/opt/lib/dovecot/auth"\" 
-DDOVEADM_MODULEDIR=\""/opt/lib/dovecot/doveadm"\" 
-DPKG_RUNDIR=\""/var/x071-test/run/dovecot"\" 
-DPKG_STATEDIR=\""/var/x071-test/lib/dovecot"\" 
-DPKG_LIBEXECDIR=\""/opt/libexec/dovecot"\" -DBINDIR=\""/opt/bin"\" 
-DMANDIR=\""/usr/share/man"\" -I/opt/include  -I/opt/include -O2 
-qmaxmem=-1 -qarch=pwr5  -c -o doveadm-cmd.o 
../../../src/x071-test/src/doveadm/doveadm-cmd.c
"../../../src/x071-test/src/doveadm/doveadm-cmd.c", line 434.24: 
1506-007 (S) "struct option" is undefined.
"../../../src/x071-test/src/doveadm/doveadm-cmd.c", line 516.9: 1506-285 
(S) The indirection operator cannot be applied to a pointer to an 
incomplete struct or union.
"../../../src/x071-test/src/doveadm/doveadm-cmd.c", line 536.37: 
1506-285 (S) The indirection operator cannot be applied to a pointer to 
an incomplete struct or union.
"../../../src/x071-test/src/doveadm/doveadm-cmd.c", line 548.37: 
1506-285 (S) The indirection operator cannot be applied to a pointer to 
an incomplete struct or union.

make[1]: *** [doveadm-cmd.o] Error 1

  +428  static void
  +429  doveadm_build_options(const struct doveadm_cmd_param par[],
  +430  string_t *shortopts,
  +431  ARRAY_TYPE(getopt_option_array) *longopts)
  +432  {
  +433  for(size_t i=0; par[i].name != NULL; i++) {
  +434  struct option longopt;
  +435
  +436  i_zero();
  +437  longopt.name = par[i].name;
  +438  if (par[i].short_opt != '\0') {
  +439  longopt.val = par[i].short_opt;
  +440  str_append_c(shortopts, par[i].short_opt);
  +441  if (par[i].type != CMD_PARAM_BOOL)
  +442  str_append_c(shortopts, ':');
  +443  }
  +444  if (par[i].type != CMD_PARAM_BOOL)
  +445  longopt.has_arg = 1;
  +446  array_append(longopts, , 1);
  +447  }
  +448  array_append_zero(longopts);
  +449  }

  +505  int doveadm_cmd_run_ver2(int argc, const char *const argv[],
  +506   struct doveadm_cmd_context *cctx)
  +507  {
  +508  struct doveadm_cmd_param *param;
  +509  ARRAY_TYPE(doveadm_cmd_param_arr_t) pargv;
  +510  ARRAY_TYPE(getopt_option_array) opts;
  +511  unsigned int pargc;
  +512  int c,li;
  +513  pool_t pool = pool_datastack_create();
  +514  string_t *optbuf = str_new(pool, 64);
  +515
  +516  p_array_init(, pool, 4);
  +517
  +518  // build parameters
  +519 doveadm_build_options(cctx->cmd->parameters, optbuf, );

  +530  while((c = getopt_long(argc, (char*const*)argv, 
str_c(optbuf), array_idx(, 0), )) > -1) {

  +531  switch(c) {
  +532  case 0:
  +533  for(unsigned int i = 0; i < 
array_count(); i++) {
  +534  const struct option *opt = 
array_idx(,li);
  +535  param = 
array_idx_modifiable(,i);

  +536  if (opt->name == param->name)
  +537 doveadm_fill_param(param, optarg, pool);
  +538  }
  +539  break;
  +540  case '?':
  +541  case ':':
  +542 doveadm

Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2017-06-08 Thread Michael Felt

On 07/06/2017 07:58, Aki Tuomi wrote:

The test summary says okay, but I see 'Error' in the diagnostics. Did
all go as expected? (p.s. this is not the only area where there is
'Error', but test says 'ok'.

Regards,

Michael

Those errors are expected errors, since the test is about making sure
that refused connection is handled correcty.

Aki


Was hoping you would say that! But wanted to be sure I was not doing 
anything incorrectly.


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2017-06-06 Thread Michael Felt

On 09/10/2016 21:48, Michael Felt wrote:


A real server yes, but not Linux. (Using linux would require another 
server AND I would feel I am being lazy again).


Well, I have been busy, and it is time to force move dovecot forward.

Being 'lazy' I am doing some initial tests on my POWER platform using an 
old debian distro to build the latest (via git).


That has been 'uneventful' - which is good, but I am confused by the 
output of "make check". An excerpt:


test_program_setup ... : ok
Debug: Trying to connect 127.0.0.1:52694 (timeout 5000 msecs)
test_program_success . : ok
Debug: Trying to connect 127.0.0.1:52694 (timeout 5000 msecs)
test_program_io (async) .. : ok
Debug: Trying to connect 127.0.0.1:52694 (timeout 5000 msecs)
test_program_failure . : ok
Debug: Trying to connect 127.0.0.1:52694 (timeout 5000 msecs)
test_program_noreply . : ok
Debug: Trying to connect [::1]:52694 (timeout 5000 msecs)
test: random seed #1 was 1496876286
Error: connect([::1]:52694) failed: Connection refused
Debug: Trying to connect 127.0.0.3:52694 (timeout 5000 msecs)
Error: connect(127.0.0.3:52694) failed: Connection refused
Debug: Trying to connect 127.0.0.2:52694 (timeout 5000 msecs)
Error: connect(127.0.0.2:52694) failed: Connection refused
Debug: Trying to connect 127.0.0.1:52694 (timeout 5000 msecs)
test_program_refused . : ok
test_program_teardown  : ok
0 / 7 tests failed

The test summary says okay, but I see 'Error' in the diagnostics. Did 
all go as expected? (p.s. this is not the only area where there is 
'Error', but test says 'ok'.


Regards,

Michael


Re: Dovecot source code audit

2017-01-13 Thread Michael Felt
Congradulations. (Reminds me that is time I got started on the AIX xlc 
port...)


On 13-Jan-17 18:17, Timo Sirainen wrote:

Mozilla sponsored source code audit for Dovecot. So thanks to them we have our 
first public code audit: 
https://wiki.mozilla.org/MOSS/Secure_Open_Source/Completed#dovecot

Dates: October 2016 - January 2017

dovecot is a POP and IMAP mailserver; it is used in 68% of IMAP server 
deployments worldwide. The audit was performed by Cure53.

The team found the following problems:

• 3 Low

The Cure53 team were extremely impressed with the quality of the dovecot code. They 
wrote: "Despite much effort and thoroughly all-encompassing approach, the Cure53 
testers only managed to assert the excellent security-standing of Dovecot. More 
specifically, only three minor security issues have been found in the codebase, thus 
translating to an exceptionally good outcome for Dovecot, and a true testament to the 
fact that keeping security promises is at the core of the Dovecot development and 
operations."



Re: Feedback on first, i.e. novice-level, experiences with dovecot

2016-11-20 Thread Michael Felt

On 20/11/2016 16:41, Michael Felt wrote:

(though still unknowing what the fatal error)


This is also needed:

cp -rp /etc/dovecot/conf.d /opt/etc/dovecot/

as the config file contains:

# Most of the actual configuration gets included below. The filenames are
# first sorted by their ASCII value and parsed in that order. The 
00-prefixes

# in filenames are intended to make it easier to understand the ordering.
!include conf.d/*.conf

# A config file can also tried to be included without giving an error if
# it's not found:
!include_try local.conf

Note: the include_try did not complain, but the include conf.d/*.conf 
did (relative name, not fullpath)


All for today!


Re: Feedback on first, i.e. novice-level, experiences with dovecot

2016-11-20 Thread Michael Felt

On 20/11/2016 16:36, Michael Felt wrote:
More later. 


So, part of my confusion may be resolved - I was thinking $prefix only, 
where there are three:


From the default config file (though still unknowing what the fatal 
error) contains:


# options. The paths listed here are for configure --prefix=/usr
# --sysconfdir=/etc --localstatedir=/var

However, I still would have expected 
/usr/share/doc/dovecot-core/example-config/ to be behind /opt. Or is 
there yet another ./configure setting I skipped?


Re: Feedback on first, i.e. novice-level, experiences with dovecot

2016-11-20 Thread Michael Felt

On 20/11/2016 14:51, Michael Felt wrote:

root@x066:/data/prj/aixtools/dovecot/core# cat /etc/dovecot/README
Configuration files go to this directory. See example configuration 
files in

/usr/share/doc/dovecot-core/example-config/

Conclusion:

--prefix=/opt is not applied everywhere.

* More first impressions as I come to them - if you want them - as I 
hope this helps make dovecot better!


Next experience:

root@x066:/data/prj/aixtools/dovecot/core# cp /etc/dovecot/dovecot.conf 
/opt/etc/dovecot/dovecot.conf

root@x066:/data/prj/aixtools/dovecot/core#  /opt/bin/doveconf -n
# 2.3.devel (92c8109): /opt/etc/dovecot/dovecot.conf
doveconf: Fatal: Error in configuration file 
/opt/etc/dovecot/dovecot.conf line 94: No matches


So, I shall look into why no matches are found using vi

More later.


Feedback on first, i.e. novice-level, experiences with dovecot

2016-11-20 Thread Michael Felt
a) google: "dovecot imap configuration" brought an article from 2005 as 
the first item:


while I like debian and a bit of history you may want to ask yourself 
how to improve your site as the primary hit from google. FYI: years ago 
I had great results in the top of google searches - and then I made a 
major error - I moved my site to a new url and google forgot me.


b) using your http://wiki.dovecot.org/QuickConfiguration as a guide:

I built dovecot using --prefix=/opt (I abhor /usr/local these days - 
that is so 1984ish). The applications got installed in /opt/bin


root@x066:/data/prj/aixtools/dovecot/core# ls -ltr /opt
total 36
drwxr-xr-x 3 root root 4096 Nov 20 14:33 lib
drwxr-xr-x 3 root root 4096 Nov 20 14:33 include
drwxr-xr-x 6 root root 4096 Nov 20 14:33 share
drwxr-xr-x 3 root root 4096 Nov 20 14:33 libexec
drwxr-xr-x 2 root root 4096 Nov 20 14:33 sbin
drwxr-xr-x 2 root root 4096 Nov 20 14:33 bin

Are the directories 'make install' touched or made.

root@x066:/data/prj/aixtools/dovecot/core#  /opt/bin/doveconf -n

# 2.3.devel (92c8109): /opt/etc/dovecot/dovecot.conf
doveconf: Fatal: open(/opt/etc/dovecot/dovecot.conf) failed: No such 
file or directory


where are example configs?

root@x066:/data/prj/aixtools/dovecot/core# find /opt -name example-config
root@x066:/data/prj/aixtools/dovecot/core#

Not in /opt

How about a default config?

root@x066:/data/prj/aixtools/dovecot/core# find / -name dovecot
/etc/init.d/dovecot
/etc/pam.d/dovecot
/etc/default/dovecot
/etc/dovecot
/var/lib/dovecot
^C

Seems to be /etc/dovecot

root@x066:/data/prj/aixtools/dovecot/core# ls -l /etc/dovecot
total 40
drwxr-xr-x 2 root root4096 Apr 30  2015 conf.d
-rw-r--r-- 1 root root4180 Jun  8  2014 dovecot.conf
-rw-r- 1 root dovecot  410 Jun  8  2014 dovecot-db.conf.ext
-rw-r- 1 root dovecot  782 Jun  8  2014 dovecot-dict-sql.conf.ext
-rw-r--r-- 1 root dovecot 1363 Apr 30  2015 dovecot.pem
-rw-r- 1 root dovecot 5348 Jun  8  2014 dovecot-sql.conf.ext
drwx-- 2 root root4096 Apr 30  2015 private
-rw-r--r-- 1 root root 121 Jun  8  2014 README

and finally - read README to find the examples:

root@x066:/data/prj/aixtools/dovecot/core# cat /etc/dovecot/README
Configuration files go to this directory. See example configuration files in
/usr/share/doc/dovecot-core/example-config/

Conclusion:

--prefix=/opt is not applied everywhere.

* More first impressions as I come to them - if you want them - as I 
hope this helps make dovecot better!


Michael


Re: Good email client to use with Dovecot?

2016-11-19 Thread Michael Felt

On 19/11/2016 16:18, Michael Felt wrote:

On 18/11/2016 14:19, Tanstaafl wrote:

Comments about the retired TB:
>‎https://blog.mozilla.org/thunderbird/


As far as webmail being the future - imho - I am getting away from it, 
and that is why dovecot is worth investigating as port to replace the 
imap program supplied with my server OS.


As far as the blog entry above - that is dated 9 december 2015, and 
nothing newer.
An older blog is, imho, more accurate about the relationship and hence 
status on the relationship of Mozilla as an 'owner' aka 'legal home' and 
Thunderbird as an 'owned project' - see


QUOTE from blog: 
https://blog.lizardwrangler.com/2015/12/03/thunderbird-update/


I’ve seen some characterize this as Mozilla “dropping” Thunderbird. This 
is not accurate. We are going to disentangle the technical 
infrastructure. We are going to assist the Thunderbird community. This 
includes working with organizations that want to invest in Thunderbird, 
several of which have stepped forward already. Mozilla Foundation will 
serve as a fiscal sponsor for Thunderbird donations during this time.


I also noted that we should look at whether Mozilla remains the best 
organizational and legal home for Thunderbird. This is a separate 
question from the technical infrastructure. This question is much more 
wide open. I don’t know what the answer will be. It could be that 
Mozilla remains the best home, based on history, affiliation and shared 
community. It could also be that a home geared to open source projects 
of Thunderbird’s size and scope is better suited. I can imagine either 
being the case. We have decided to separate the technical infrastructure 
and to explore what is best for Thunderbird and for the Mozilla project 
as a whole.


These discussions are at a very early stage. Finding the right solution 
requires some effort. This is Mozilla focusing on a more forward looking 
path, one aimed at longer term stability rather than continuing the 
status quo.


ENDQUOTE


Since someone also commented "more fixes than before" - I guess 
Thunderbird is "blogging" elsewhere - hint to where might be good in 
this thread.


It has certainly been an interesting read. Maybe I should use MUTT - 
as I have been a happy vi user for nearly 38 years (even coded it a 
bit in the pre-curses days - to add a new terminal ;) - ah memories :)


Re: Good email client to use with Dovecot?

2016-11-19 Thread Michael Felt

On 18/11/2016 14:19, Tanstaafl wrote:

Comments about the retired TB:
>‎https://blog.mozilla.org/thunderbird/


As far as webmail being the future - imho - I am getting away from it, 
and that is why dovecot is worth investigating as port to replace the 
imap program supplied with my server OS.


As far as the blog entry above - that is dated 9 december 2015, and 
nothing newer.


Since someone also commented "more fixes than before" - I guess 
Thunderbird is "blogging" elsewhere - hint to where might be good in 
this thread.


It has certainly been an interesting read. Maybe I should use MUTT - as 
I have been a happy vi user for nearly 38 years (even coded it a bit in 
the pre-curses days - to add a new terminal ;) - ah memories :)


Re: dovecot, configure and documentation as hardstop

2016-11-19 Thread Michael Felt

On 19/11/2016 15:09, Aki Tuomi wrote:

Michael

At the moment, pandoc is only*required*  if you are building from git. And it's 
not even required then, just do env PANDOC=true ./configure ...

Aki


Thanks! guess I should have read ./configure --help more closely.

So, is there something else I have forgotten - in order to get a good 
summary

of the results of 'make check'?

Michael


dovecot, configure and documentation as hardstop

2016-11-19 Thread Michael Felt

Hi,

As preparations for a port to AIX - making sure I can get it to build on 
linux with gcc. While it is fairly easy to add the requirements (on GNU 
Linux) having pandoc as a configure "hardstop", even with --without-docs 
or --with-docs=no is a bit worrisome as I am fearful that I amy not be 
able to get pandoc ported as well.


Hence a request that a missing pandoc become a warnig, and just not done 
when pandoc is not available, or at least accept one of --without-docs 
and --with-docs=no (or should I be using --with-pandata=no? )


Michael


Re: Compound Literal - xlc and gcc differences can be patched

2016-10-12 Thread Michael Felt

On 12/10/2016 07:51, Aki Tuomi wrote:

Please make your patch, if possible, viahttps://github.com/dovecot/core
as pull request.


I am not really git "schooled", but I shall look into that.

Many Thanks for being open to a "non-gcc" compiler!

Michael


Compound Literal - xlc and gcc differences can be patched

2016-10-11 Thread Michael Felt
Since I so miserably misspelled packaging - a new thread specific to the 
issue at hand.


I found a "workaround". In short, xlc does not accept arrays of nested 
array - the bottom line (best message) is: 1506-995 (S) An aggregate 
containing a flexible array member cannot be used as a member of a 
structure or as an array element.


At the core - all the other messages come because this (I shall call it 
nesting).


For the test-http-auth.c file I have a patch (attached).

make ran for while with no issue, then it started running into several 
files with this same style of specification - doveadm-dict.c being the 
first one. I ran "make -i" and I notice several files with this - for 
xlc - "unaccepted" syntax.


Please look at the patch - what it basically is - and let me know 
whether you would consider accepting patches in this form (e.g., verify 
gcc (I assume) will accept it as well). If your answer is yes, I shall 
proceed with the additional files (learn how your MACROS work!) and send 
them to you. Again, initially I would just send one, e.g., 
doveadm-dict.c - to be sure your regular compiler also builds this 
alternate specification.


Thank you for your consideration!

Michael

--- test-http-auth.c.orig   2016-06-29 20:01:30 +
+++ test-http-auth.c.new2016-10-11 15:54:50 +
@@ -9,7 +9,7 @@
 struct http_auth_challenge_test {
const char *scheme;
const char *data;
-   struct http_auth_param *params;
+   struct http_auth_param params[];
 };
 
 struct http_auth_challenges_test {
@@ -17,65 +17,69 @@
 
struct http_auth_challenge_test *challenges;
 };
-
+/* The schemes */
+static const struct http_auth_challenge_test basic[] = {
+   { .scheme = "Basic",
+ .data = NULL,
+ .params = {
+   (struct http_auth_param) { "realm", "WallyWorld" },
+   (struct http_auth_param) { }
+   }
+   },{
+ .scheme = NULL
+   }
+};
+static const struct http_auth_challenge_test digest[] = {
+   { .scheme = "Digest",
+ .data = NULL,
+ .params = (struct http_auth_param []) { 
+   { "realm", "testre...@host.com" },
+   { "qop", "auth,auth-int" },
+   { "nonce", "dcd98b7102dd2f0e8b11d0f600bfb0c093" },
+   { "opaque", "5ccc069c403ebaf9f0171e9517f40e41" },
+   { }
+ }
+   },{
+ .scheme = NULL
+   }
+};
+static const struct http_auth_challenge_test realms[] = {
+   { .scheme = "Newauth",
+ .data = NULL,
+ .params = (struct http_auth_param []) { 
+   { "realm", "apps" },
+   { "type", "1" },
+   { "title", "Login to \"apps\"" },
+   { }
+ }
+   },{
+ .scheme = "Basic",
+ .data = NULL,
+ .params = (struct http_auth_param []) { 
+   { "realm", "simple" },
+   { }
+}
+   },{
+ .scheme = NULL
+   }
+};
 /* Valid auth challenges tests */
 static const struct http_auth_challenges_test
 valid_auth_challenges_tests[] = {
{ 
.challenges_in = "Basic realm=\"WallyWorld\"",
-   .challenges = (struct http_auth_challenge_test []) {
-   { .scheme = "Basic",
-   .data = NULL,
-   .params = (struct http_auth_param []) { 
-   { "realm", "WallyWorld" }, { NULL, NULL 
}
-   }
-   },{
-   .scheme = NULL
-   }
-   }
+   .challenges = 
},{
.challenges_in = "Digest "
  "realm=\"testre...@host.com\", "
  "qop=\"auth,auth-int\", "
  "nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\", "
  "opaque=\"5ccc069c403ebaf9f0171e9517f40e41\"",
-   .challenges = (struct http_auth_challenge_test []) {
-   { .scheme = "Digest",
-   .data = NULL,
-   .params = (struct http_auth_param []) { 
-   { "realm", "testre...@host.com" },
-   { "qop", "auth,auth-int" },
-   { "nonce", 
"dcd98b7102dd2f0e8b11d0f600bfb0c093" },
-   { "opaque", 
"5ccc069c403ebaf9f0171e9517f40e41" },
-   { NULL, NULL }
-   }
-   },{
-   .scheme = NULL
-   }
-   }
+   .challenges = 
},{
.challenges_in = "Newauth realm=\"apps\", type=1, "
  "title=\"Login to \\\"apps\\\"\", Basic realm=\"simple\"",
-   .challenges = (struct http_auth_challenge_test []) {

Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-10 Thread Michael Felt

On 10/10/2016 14:59, Stephan Bosch wrote:

It should be supported by AIX:

https://www.ibm.com/support/knowledgecenter/SSGH3R_13.1.3/com.ibm.xlcpp1313.aix.doc/language_ref/compound_literals.html 



OK - it is supported, but "not in the same way as gcc".


Getting it to simplified cases:

No GO is stated as: flexible array member cannot be used as a member of 
a structure - line25


   +23  struct yyy {
   +24  char *newLBL;
   +25  http_auth_param_t auth[];
   +26  };
   +27
   +28  struct yyy
   +29  YYY[] = {
   +30 (struct yyy) {
   +31.newLBL = "LBL1"
   +32 },
   +33 (struct yyy) {
   +34.newLBL = "LBL2"
   +35 }
   +36  };
!cc c99_comp_literal.c;
"c99_comp_literal.c", line 29.1: 1506-995 (S) An aggregate containing a 
flexible array member cannot be used as a member of a structure or as an 
array element.


So, to get it to work with a pointer "inside" the data needs to be 
initialized more like this:

(what was line 25, is now line 32)

   +11  struct xxx {
   +12  char *lbl;
   +13  http_auth_param_t a[];
   +14  };
   +15  struct xxx X1 = (struct xxx) {
   +16  .lbl = "labelX",
   +17  .a = {
   +18 (http_auth_param_t) { .p1 = "c1" },
   +19 (http_auth_param_t) { .p2 = "g2" },
   +20 (http_auth_param_t) { }
   +21  }
   +22  };
   +23  struct xxx X2 = (struct xxx) {
   +24  .lbl = "labelX",
   +25  .a = {
   +26 (http_auth_param_t) { .p1 = "z1" },
   +27 (http_auth_param_t) { }
   +28  }
   +29  };
   +30  struct yyy {
   +31  char *newLBL;
   +32  http_auth_param_t *auth;
   +33  };
   +34
   +35  struct yyy
   +36  YYY[] = {
   +37 (struct yyy) {
   +38.newLBL = "LBL1",
   +39.auth = X1.a
   +40 },
   +41 (struct yyy) {
   +42.newLBL = "LBL2",
   +43.auth = X2.a
   +44 },
   +45 { }
   +46  };

Shall work on a 'patch' asap (which might be in 24+ hours)

Michael


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-10 Thread Michael Felt

On 10/10/2016 19:44, Michael Felt wrote:

   +11  main()
   +12  {
   +13  http_auth_param_t b[] = {
   +14  (http_auth_param_t) { .p1 = "c1" },
   +15  (http_auth_param_t) { .p2 = "e2" }
   +16  };
   +17
   +18  printf("%s\n", a[0].p1);
   +19  printf("%s\n", b[1].p2);
   +20  }


Updated to:

+1  typedef struct {
+2  char * p1;
+3  char * p2;
+4  } http_auth_param_t;
+5
+6  http_auth_param_t a[] =
+7  { "a1", "a2",
+8"b1", "b2"
+9  };
   +10
   +11  struct xxx {
   +12  char *lbl;
   +13  http_auth_param_t a[];
   +14  };
   +15  struct xxx X = (struct xxx) {
   +16  .lbl = "labelX",
   +17  .a = {
   +18 (http_auth_param_t) { .p1 = "c1" },
   +19 (http_auth_param_t) { .p2 = "g2" },
   +20 (http_auth_param_t) { }
   +21  }
   +22  };
   +23  main()
   +24  {
   +25  http_auth_param_t b[] = {
   +26  (http_auth_param_t) { .p1 = "c1" },
   +27  (http_auth_param_t) { .p2 = "e2" },
   +28  (http_auth_param_t) { }
   +29  };
   +30
   +31  printf("%s\n", a[0].p1);
   +32  printf("%s\n", b[1].p2);
   +33  printf("%s\n", X.a[1].p2);
   +34  }

!cc c99_comp_literal.c; ./a.out
a1
e2
g2

The key element seems to be in the struct definition:

this works:

   +11  struct xxx {
   +12  char *lbl;
   +13  http_auth_param_t a[];
   +14  };

but

   +11  struct xxx {
   +12  char *lbl;
   +13  http_auth_param_t *a;
   +14  };

!cc c99_comp_literal.c; ./a.out
"c99_comp_literal.c", line 18.20: 1506-196 (S) Initialization between 
types "struct {...}*" and "struct {...}" is not allowed.
"c99_comp_literal.c", line 19.20: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"c99_comp_literal.c", line 20.20: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.


I (am guessing) think the reason is because *a could be an array of 
"random"(ized) pointers pointing to single instance, while [] says it 
will be an array of structs.


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-10 Thread Michael Felt

On 10/10/2016 17:29, Stephan Bosch wrote:



Op 10-10-2016 om 17:16 schreef Michael Felt:

On 10/10/2016 14:59, Stephan Bosch wrote:



Op 10-10-2016 om 14:39 schreef Michael Felt:

On 10-Oct-16 06:45, Aki Tuomi wrote:

Does your build end at some particular point?

See  DETAILS  for in depth (I hope enough!) study/report.


Aki


I would guess this is not "c99" way...


It seems to fail on a C99 feature called Compound Literal (see 
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf, Section 
6.5.2.5).


It should be supported by AIX:

https://www.ibm.com/support/knowledgecenter/SSGH3R_13.1.3/com.ibm.xlcpp1313.aix.doc/language_ref/compound_literals.html 



I have no idea why it would fail here.

Regards,

Stephan.


Well, if I had the budget to buy the latest version (version 13 is 
your doclink) - then maybe it would work for me. I do not have the 
resources to upgrade from v11. Sad day for me I guess.


Or lucky for me that "Compound Literal" is not used much - this is 
the first time I have run into it.


Well, older versions are supposed to support it too:

https://www.ibm.com/support/knowledgecenter/SSGH3R_11.1.0/com.ibm.xlcpp111.aix.doc/language_ref/compound_literals.html 

As I said, or implied - reading the code was new - as actually, normally 
I saw the C89 way to do things.


I wrote a simple test for myself to come to grips on the syntax expected 
- nothing nested, but seems to be passing test #1


+1  typedef struct {
+2  char * p1;
+3  char * p2;
+4  } http_auth_param_t;
+5
+6  http_auth_param_t a[] =
+7  { "a1", "a2",
+8"b1", "b2"
+9  };
   +10
   +11  main()
   +12  {
   +13  http_auth_param_t b[] = {
   +14  (http_auth_param_t) { .p1 = "c1" },
   +15  (http_auth_param_t) { .p2 = "e2" }
   +16  };
   +17
   +18  printf("%s\n", a[0].p1);
   +19  printf("%s\n", b[1].p2);
   +20  }

returns:
!cc c99_comp_literal.c; ./a.out
a1
e2



Regards,

Stephan.


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-10 Thread Michael Felt

On 10/10/2016 14:59, Stephan Bosch wrote:

It should be supported by AIX:

https://www.ibm.com/support/knowledgecenter/SSGH3R_13.1.3/com.ibm.xlcpp1313.aix.doc/language_ref/compound_literals.html 



I have no idea why it would fail here.


I see it is also in version 11 - so, maybe still syntax:

This is the doc:

The following example passes a constant structure variable of type point 
containing two integer members to the function drawline:


drawline((struct point){6,7});

While the code is:
.challenges = (struct http_auth_challenge_test []) {
{ .scheme = "Basic",
.data = NULL,
.params = (struct http_auth_param []) {
{ "realm", "WallyWorld" }, { NULL, NULL 
}
}
},{
.scheme = NULL
}

The difference I notice is that, much prettier btw, you are also specifying the 
struct .names, and perhaps, in
Compound literal syntax

   .-,.
   V  |

-(--/type_name/--)--{/initializer_list/-+--}-><


"initializer_list" is exclusive of (additional) declarers.

The messages seem to indicate the parser does not like them being there...
"test-http-auth.c", line 27.27: 1506-022 (S) "scheme" is not a member of "const 
struct http_auth_challenges_test".
"test-http-auth.c", line 27.37: 1506-196 (W) Initialization between types "struct 
http_auth_challenge_test* const" and "char*" is not allowed.
"test-http-auth.c", line 28.33: 1506-022 (S) "data" is not a member of "const struct 
http_auth_challenges_test".
"test-http-auth.c", line 28.41: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.
"test-http-auth.c", line 29.33: 1506-022 (S) "params" is not a member of "const 
struct http_auth_challenges_test".
"test-http-auth.c", line 30.43: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.
"test-http-auth.c", line 30.52: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.
"test-http-auth.c", line 30.70: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.
"test-http-auth.c", line 30.76: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.

To understand|study it, I simplified it to:

 +7  #include "http-auth.h"
+8
+9  struct http_auth_challenge_test {
   +10  const char *scheme;
   +11  const char *data;
   +12  struct http_auth_param *params;
   +13  };
   +14
   +15  struct http_auth_challenges_test {
   +16  const char *challenges_in;
   +17  struct http_auth_challenge_test *challenges;
   +18  };
   +19
   +20  /* Valid auth challenges tests */
   +21  static struct http_auth_challenges_test
   +22  valid_auth_challenges_tests[] = {
   +23  { "Basic realm=\"WallyWorld\"",
   +24  "Basic",
   +25  NULL,
   +26   "realm", "WallyWorld",
   +27   NULL, NULL
   +28  },{
   +29  NULL,
   +30  NULL,
   +31  NULL, NULL
   +32  }
   +33  };

(lots of experimenting!)
I got it down to these messages:
"test-http-auth.c", line 24.25: 1506-196 (W) Initialization between types "struct 
http_auth_challenge_test*" and "char*" is not allowed.
"test-http-auth.c", line 25.25: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.
"test-http-auth.c", line 26.26: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.
"test-http-auth.c", line 26.35: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.
"test-http-auth.c", line 27.26: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.
"test-http-auth.c", line 27.32: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.
"test-http-auth.c", line 31.25: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.
"test-http-auth.c", line 31.31: 1506-026 (S) Number of initializers cannot be 
greater than the number of aggregate members.

As 'it' kept complaining about the unnecessary opening { I am thinking that 
their design does not leave space fot nesting arrarys of initialization. And I 
would tend to agree with there being 'lazy'.
That does not fix my problem. Going to look for a - maybe less elegant - but 
workable (and if found I hope acceptable) work-around.


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-10 Thread Michael Felt

On 10/10/2016 17:29, Stephan Bosch wrote:



Op 10-10-2016 om 17:16 schreef Michael Felt:

On 10/10/2016 14:59, Stephan Bosch wrote:



Op 10-10-2016 om 14:39 schreef Michael Felt:

On 10-Oct-16 06:45, Aki Tuomi wrote:

Does your build end at some particular point?

See  DETAILS  for in depth (I hope enough!) study/report.


Aki


I would guess this is not "c99" way...


It seems to fail on a C99 feature called Compound Literal (see 
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf, Section 
6.5.2.5).


It should be supported by AIX:

https://www.ibm.com/support/knowledgecenter/SSGH3R_13.1.3/com.ibm.xlcpp1313.aix.doc/language_ref/compound_literals.html 



I have no idea why it would fail here.

Regards,

Stephan.


Well, if I had the budget to buy the latest version (version 13 is 
your doclink) - then maybe it would work for me. I do not have the 
resources to upgrade from v11. Sad day for me I guess.


Or lucky for me that "Compound Literal" is not used much - this is 
the first time I have run into it.


Well, older versions are supposed to support it too:

https://www.ibm.com/support/knowledgecenter/SSGH3R_11.1.0/com.ibm.xlcpp111.aix.doc/language_ref/compound_literals.html 



Regards,

Stephan.


I am trying to work on it. Hard to read until you know what you are 
looking at.


I had already seen that 11.1 also shows the link - I guess it does not 
like the nested form.


And, it looks as if you have too many {} pairs (one too many outside 
pairs) - the .info report was mentioning they were more than needed and 
'skipping' iirc.


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-10 Thread Michael Felt

On 10/10/2016 14:59, Stephan Bosch wrote:



Op 10-10-2016 om 14:39 schreef Michael Felt:

On 10-Oct-16 06:45, Aki Tuomi wrote:

Does your build end at some particular point?

See  DETAILS  for in depth (I hope enough!) study/report.


Aki


I would guess this is not "c99" way...


It seems to fail on a C99 feature called Compound Literal (see 
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf, Section 
6.5.2.5).


It should be supported by AIX:

https://www.ibm.com/support/knowledgecenter/SSGH3R_13.1.3/com.ibm.xlcpp1313.aix.doc/language_ref/compound_literals.html 



I have no idea why it would fail here.

Regards,

Stephan.


Well, if I had the budget to buy the latest version (version 13 is your 
doclink) - then maybe it would work for me. I do not have the resources 
to upgrade from v11. Sad day for me I guess.


Or lucky for me that "Compound Literal" is not used much - this is the 
first time I have run into it.


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-10 Thread Michael Felt

On 10-Oct-16 06:45, Aki Tuomi wrote:

Does your build end at some particular point?

See  DETAILS  for in depth (I hope enough!) study/report.


Aki


I would guess this is not "c99" way...

Making all in lib-http
source='test-http-auth.c' object='test-http-auth.o' libtool=no  
DEPDIR=.deps depmode=xlc /bin/sh ../../depcomp  xlc_r -DHAVE_CONFIG_H 
-I. -I../..  -I../../src/lib -I../../src/lib-test  -I../../src/lib-dns 
-I../../src/lib-ssl-iostream  -I../../src/lib-master -I/opt/include 
-I/opt/buildaix/include  -I/opt/include -O2 -qmaxmem=-1 -qarch=pwr5 
-I/opt/buildaix/includes  -c -o test-http-auth.o test-http-auth.c
"test-http-auth.c", line 27.27: 1506-022 (S) "scheme" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 27.37: 1506-196 (W) Initialization between 
types "struct http_auth_challenge_test* const" and "char*" is not allowed.
"test-http-auth.c", line 28.33: 1506-022 (S) "data" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 28.41: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 29.33: 1506-022 (S) "params" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 30.43: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 30.52: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 30.70: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 30.76: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 33.33: 1506-022 (S) "scheme" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 33.43: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 43.27: 1506-022 (S) "scheme" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 43.37: 1506-196 (W) Initialization between 
types "struct http_auth_challenge_test* const" and "char*" is not allowed.
"test-http-auth.c", line 44.33: 1506-022 (S) "data" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 44.41: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 45.33: 1506-022 (S) "params" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 46.43: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 46.52: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 47.43: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 47.50: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 48.43: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 48.52: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 49.43: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 49.53: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 50.43: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 50.49: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 53.33: 1506-022 (S) "scheme" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 53.43: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 60.27: 1506-022 (S) "scheme" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 60.37: 1506-196 (W) Initialization between 
types "struct http_auth_challenge_test* const" and "char*" is not allowed.
"test-http-auth.c", line 61.33: 1506-022 (S) "data" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 61.41: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 62.33: 1506-022 (S) "params" is not a member of 
"const struct http_auth_challenges_test".
"test-http-auth.c", line 63.43: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 63.52: 1506-026 (S) Number of initializers 
cannot be greater than the number of aggregate members.
"test-http-auth.c", line 

Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-10 Thread Michael Felt

On 10-Oct-16 06:45, Aki Tuomi wrote:

We do already support various non-GNU platforms, but our code does expect C99 
conforming compiler these days. We also use autotools and libtool. rpcgen 
should be available, at least according to
http://www.ibm.com/support/knowledgecenter/ssw_aix_61/com.ibm.aix.cmds4/rpcgen.htm


oops - this is in bos.net.nfs.server!

FYI:

root@x064:[/data/prj/aixtools/dovecot/dovecot-2.2.25]lslpp -w 
/usr/bin/rpcgen

  File Fileset   Type

  /usr/bin/rpcgen bos.net.nfs.serverFile


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-10 Thread Michael Felt

On 10-Oct-16 06:45, Aki Tuomi wrote:

We do already support various non-GNU platforms, but our code does expect C99 
conforming compiler these days. We also use autotools and libtool. rpcgen 
should be available, at least according to
http://www.ibm.com/support/knowledgecenter/ssw_aix_61/com.ibm.aix.cmds4/rpcgen.htm

Does your build end at some particular point?


a) found rpcgen - not installed by default (it is included in 
bos.net.tcp.adt - recognizable for AIX admins). Thanks for the pointer! 
FYI, although the documentation is AIX 6.1, the program has been around 
much longer - only the web documentation is non existent.


b) yes, it ended at some point (was in first post), but I shall try 
again with rpcgen installed - see if that goes better.


Re: Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-09 Thread Michael Felt

On 09-Oct-16 22:51, Aki Tuomi wrote:


Michael


Does the compiler support C99 standard?

Aki 


Yes. Plus extended features. Key difference with GCC, e.g., are the 
flags to the compiler, but autotools general manages those well.


Key difference with platform (well, of of) is that it is not GNU, and 
how shared libraries are built. Again, libtool in particular, handles 
this well.


Pacaging/build issues with AIX and vac (dovecot-2.2.25)

2016-10-09 Thread Michael Felt

Hi.

I finally decided it was really time to stop being lazy and really move 
away from gmail. After I have a server in my basement using power, etc.


So I turned on the imap provided - and did not quite cry - it will have 
to do for now, but imap2 is wanting.


A real server yes, but not Linux. (Using linux would require another 
server AND I would feel I am being lazy again).


So, I downloaded dovecot-2.2.25 and tried to build.

Configure (messages to stderr)

xlc is /usr/vacpp/bin/xlc
+ CPPFLAGS="-I/opt/include -I/opt/buildaix/include" 
CFLAGS="-I/opt/include -O2 -qmaxmem=-1 -qarch=pwr5 -I/opt/buildaix/includes

./configure\
--prefix=/opt \
--sysconfdir=/var/dovecot/etc\
--sharedstatedir=/var/dovecot/com\
--localstatedir=/var/dovecot\
--mandir=/usr/share/man\
--infodir=/opt/share/info/dovecot \
> .buildaix/configure.out
xlc_r: 1501-216 (W) command option -dM is not recognized - passed to ld
xlc_r: 1501-228 (W) input file c not found
1506-297 (S) Unable to open input file null. No such file or directory.
./configure[25617]: rpcgen:  not found

messages to stderr by make:

+ make > .buildaix/make.out
./update-version.sh[42]: git:  not found.
"askpass.c", line 59.18: 1506-359 (I) Automatic variable str contains a 
const member and is not initialized.  It will be initia
"guid.c", line 113.18: 1506-359 (I) Automatic variable buf contains a 
const member and is not initialized.  It will be initiali
"iostream-rawlog.c", line 28.18: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will b
"istream-base64-decoder.c", line 42.18: 1506-359 (I) Automatic variable 
buf contains a const member and is not initialized.  It
"istream-base64-encoder.c", line 47.18: 1506-359 (I) Automatic variable 
buf contains a const member and is not initialized.  It
"istream-jsonstr.c", line 70.26: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will b
"mountpoint.c", line 222.39: 1506-068 (W) Operation between types 
"char*" and "const char*" is not allowed.
"istream-decrypt.c", line 68.18: 1506-359 (I) Automatic variable 
ephemeral_key contains a const member and is not initialized.
"istream-decrypt.c", line 276.18: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will
"istream-decrypt.c", line 369.26: 1506-359 (I) Automatic variable 
peer_key contains a const member and is not initialized.  It
"istream-decrypt.c", line 745.42: 1506-359 (I) Automatic variable db 
contains a const member and is not initialized.  It will b
"ostream-encrypt.c", line 135.65: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will
"ostream-encrypt.c", line 454.18: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will
"dcrypt-openssl.c", line 787.36: 1506-359 (I) Automatic variable key 
contains a const member and is not initialized.  It will b
"dcrypt-openssl.c", line 1099.33: 1506-359 (I) Automatic variable secret 
contains a const member and is not initialized. It wi
"dcrypt-openssl.c", line 1295.18: 1506-359 (I) Automatic variable tmp 
contains a const member and is not initialized.  It will
"dcrypt-openssl.c", line 1365.18: 1506-359 (I) Automatic variable 
saltbuf contains a const member and is not initialized.  It w
"istream-decrypt.c", line 68.18: 1506-359 (I) Automatic variable 
ephemeral_key contains a const member and is not initialized.
"istream-decrypt.c", line 276.18: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will
"istream-decrypt.c", line 369.26: 1506-359 (I) Automatic variable 
peer_key contains a const member and is not initialized.  It
"istream-decrypt.c", line 745.42: 1506-359 (I) Automatic variable db 
contains a const member and is not initialized.  It will b
"ostream-encrypt.c", line 135.65: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will
"ostream-encrypt.c", line 454.18: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will
"istream-decrypt.c", line 68.18: 1506-359 (I) Automatic variable 
ephemeral_key contains a const member and is not initialized.
"istream-decrypt.c", line 276.18: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will
"istream-decrypt.c", line 369.26: 1506-359 (I) Automatic variable 
peer_key contains a const member and is not initialized.  It
"istream-decrypt.c", line 745.42: 1506-359 (I) Automatic variable db 
contains a const member and is not initialized.  It will b
"ostream-encrypt.c", line 135.65: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will
"ostream-encrypt.c", line 454.18: 1506-359 (I) Automatic variable buf 
contains a const member and is not initialized.  It will