Michael Felt
2016-Oct-11 20:25 UTC
Compound Literal - xlc and gcc differences can be patched
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 -------------- next part -------------- --- test-http-auth.c.orig 2016-06-29 20:01:30 +0000 +++ test-http-auth.c.new 2016-10-11 15:54:50 +0000 @@ -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", "testrealm at 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 = &basic },{ .challenges_in = "Digest " "realm=\"testrealm at 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", "testrealm at host.com" }, - { "qop", "auth,auth-int" }, - { "nonce", "dcd98b7102dd2f0e8b11d0f600bfb0c093" }, - { "opaque", "5ccc069c403ebaf9f0171e9517f40e41" }, - { NULL, NULL } - } - },{ - .scheme = NULL - } - } + .challenges = &digest },{ .challenges_in = "Newauth realm=\"apps\", type=1, " "title=\"Login to \\\"apps\\\"\", Basic realm=\"simple\"", - .challenges = (struct http_auth_challenge_test []) { - { .scheme = "Newauth", - .data = NULL, - .params = (struct http_auth_param []) { - { "realm", "apps" }, - { "type", "1" }, - { "title", "Login to \"apps\"" }, - { NULL, NULL } - } - },{ - .scheme = "Basic", - .data = NULL, - .params = (struct http_auth_param []) { - { "realm", "simple" }, - { NULL, NULL } - } - },{ - .scheme = NULL - } - } + .challenges = &realms } }; @@ -160,27 +164,18 @@ const char *scheme; const char *data; - struct http_auth_param *params; + struct http_auth_param params[]; }; - -/* Valid auth credentials tests */ static const struct http_auth_credentials_test -valid_auth_credentials_tests[] = { - { - .credentials_in = "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==", +basic_cred[] = { + { .scheme = "Basic", .data = "QWxhZGRpbjpvcGVuIHNlc2FtZQ==", .params = NULL - },{ - .credentials_in = "Digest username=\"Mufasa\", " - "realm=\"testrealm at host.com\", " - "nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\", " - "uri=\"/dir/index.html\", " - "qop=auth, " - "nc=00000001, " - "cnonce=\"0a4f113b\", " - "response=\"6629fae49393a05397450978507c4ef1\", " - "opaque=\"5ccc069c403ebaf9f0171e9517f40e41\"", + } +}; +static const struct http_auth_credentials_test mufasa[] = { + { .scheme = "Digest", .data = NULL, .params = (struct http_auth_param []) { @@ -198,6 +193,26 @@ } }; +/* Valid auth credentials tests */ +static const struct http_auth_credentials_test +valid_auth_credentials_tests[] = { + { + .credentials_in = "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==", + .params = &basic_cred + },{ + .credentials_in = "Digest username=\"Mufasa\", " + "realm=\"testrealm at host.com\", " + "nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\", " + "uri=\"/dir/index.html\", " + "qop=auth, " + "nc=00000001, " + "cnonce=\"0a4f113b\", " + "response=\"6629fae49393a05397450978507c4ef1\", " + "opaque=\"5ccc069c403ebaf9f0171e9517f40e41\"", + .params = &mufasa + } + }; + static const unsigned int valid_auth_credentials_test_count N_ELEMENTS(valid_auth_credentials_tests);
On 11.10.2016 23:25, Michael Felt wrote:> 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 >Hi! Please make your patch, if possible, via https://github.com/dovecot/core as pull request. Aki Tuomi Dovecot oy
Michael Felt
2016-Oct-12 14:41 UTC
Compound Literal - xlc and gcc differences can be patched
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