Hi,
Here's the summary of today's IRC meeting.
---
COMMUNITY MEETING
Place: #openvpn-devel on irc.freenode.net
List-Post: openvpn-devel@lists.sourceforge.net
Date: Monday 10th Aug 2015
Time: 20:00 CEST (18:00 UTC)
Planned meeting topics for this meeting were here:
<https://community.openvpn.net/openvpn/wiki/Topics-2015-08-10>
The next meeting has been scheduled to two weeks from this meeting:
<https://community.openvpn.net/openvpn/wiki/Topics-2015-08-24>
Your local meeting time is easy to check from services such as
<http://www.timeanddate.com/worldclock>
SUMMARY
cron2, dazo, mattock and plaisthos participated in this meeting.
---
Discussed the "Add TFTP and WPAD DHCP options" patch:
<http://article.gmane.org/gmane.network.openvpn.devel/9929>
The patch got a feature-ACK, but it had some code and merging issues.
Cron2 notified janjust of the issues.
--
Discussed the "Reworking the interface for querying users" patchset:
<http://thread.gmane.org/gmane.network.openvpn.devel/9657>
Patch 1/4 will need some modifications. Patch 4/4 talks about --icon,
which does not exist. It has also been reported that the patchset can
cause build failures in certain cases:
<http://thread.gmane.org/gmane.network.openvpn.devel/9657/focus=9661>
Dazo will investigate and make all the necessary modifications.
--
Full chatlog has been attached to this email.
--
Samuli Seppänen
Community Manager
OpenVPN Technologies, Inc
irc freenode net: mattock
(20:58:37) mattock: I'll be a few minutes late
(21:03:05) ***cron2 is sort of here
(21:04:34) ***dazo is also sort of here
(21:06:12) ***plaisthos too
(21:09:12) cron2: dazo: I thought you're on vacation?
(21:09:20) dazo: back today :)
(21:09:25) cron2: ah!
(21:09:42) cron2: so we can put Tim's patches back on the agenda
(21:09:44) dazo: so it's the "conquer the mailbox" day today
(21:09:49) cron2: haha :)
(21:10:42) dazo: I haven't had time to poke at his patches ... and brain
capacity is getting low right now ... but I'll try to follow the other topics
(21:11:29) cron2: we're not exactly organized today... :-) - there's a few
patch sets that could use review...
(21:11:50) dazo: :)
(21:12:00) cron2: verify-client-cert sounds like "syzzer" (or maybe
plaisthos)... what about the DHCP option patch?
(21:13:17) cron2: plaisthos: anything on your agenda, when you have the chance?
(21:13:31) cron2: or shall we declare "it's too hot, come back in two weeks"?
:-)
(21:15:11) dazo: I'm looking at the DHCP patch ... I understand the cool things
about TFTP and such ... I just don't see how that is useful in an OpenVPN
context ... but that's seeing things from a PXE boot perspective ... the WPAD
part of it can easily get a feature-ACK from me
(21:15:49) cron2: someone on the -users list specifically asked for the TFTP -
they have an application that they want to use via OpenVPN and it needs it...
(21:15:58) cron2: the code is good enough, I think
(21:16:14) dazo: however the TFTP part isn't really complicated, from an ovpn
perspective ...
(21:17:42) mattock: hi
(21:17:47) cron2: ho :)
(21:17:56) ***cron2 has one for mattock1... T-Shirts!
(21:18:39) mattock: oh no
(21:18:43) mattock: no T-shirts, please
(21:18:46) mattock: it was a nightmare
(21:19:10) cron2: but now you know how it works
(21:19:24) ***cron2 wants an "OpenVPN Hackathon Delft 2015" T-Shirt... :-)
(21:19:37) dazo: cron2++
(21:19:43) mattock: the most convenient way is to buy them myself and keep them
of my bookkeeping
(21:19:57) mattock: then bill Francis with imaginary hours
(21:19:59) mattock: :P
(21:20:10) cron2: oh, so the refunding was the nightmarish part? VAT, and
stuff?
(21:20:23) mattock: everything related to moving things from one country to
other
(21:20:52) mattock: anyways, I could probably manage with some trickery
(21:21:21) mattock: anyways, to the patches
(21:21:28) ***cron2 plays small kitten and looks at mattock1 with laaarge eyes
(21:21:31) cron2: :)
(21:21:37) dazo: :)
(21:21:49) cron2: anyway... I think the DHCP patch is good, though jjk needs to
learn our formatting rules :-)
(21:21:51) mattock: so now it's one T-shirt per gettogether, right? :P
(21:22:19) cron2: nah
(21:22:20) dazo: nah, just once per year! :-P
(21:22:26) cron2: *g*
(21:25:09) mattock: so DHCP patch: feature-ACK, code-NACK due to formatting
issues
(21:25:27) cron2: + char str[256];
(21:25:27) cron2: + strncpy( str, o->wpad_url, 255 );
(21:25:27) cron2: + strcat( str, "\r" );
(21:25:29) mattock: how about "verify-client-cert" patch?
(21:25:30) cron2: hrmph
(21:25:52) cron2: this is *not* safe coding style
(21:26:46) Crashdemon ha abbandonato la stanza (quit: Ping timeout: 244
seconds).
(21:26:47) cron2: if wpad_url is longer than 255 characters, this will a) in
every case overrun by 1 byte, and b) usually just crash in interesting ways, as
str[255] isn't guaranteed to be 0
(21:26:50) dazo: agreed ... what about snprintf(str, 255, "%s\r", o->wpad_url);
?
(21:26:56) dazo: sorru
(21:27:13) dazo: snprintf(str, 255, "%.254s\r", o->wpad_url);
(21:27:36) cron2: in that case you wouldn't even need snprintf :) - but yes,
something along these lines
(21:27:53) ***cron2 just inserts dazo's code
(21:28:03) cron2: and reformats the whitespace on the fly
(21:28:14) dazo: snprintf() will remove some compiler warnings which sprintf()
can cause on some systems
(21:28:50) cron2: well, this code is actually not correct either :)
(21:29:09) cron2: 254 bytes from wpad_url, + "\n" + 0 = 256, so snprintf()
would truncate-off the "\n"
(21:29:09) dazo: I didn't promise perfect code today :)
(21:29:23) ***cron2 puts sizeof(str) there
(21:29:35) dazo: that'll work better!
(21:29:58) dazo: I just wonder ... WPAD options ... that's Windows centric?
(21:30:12) dazo: (at least that's only where I've seen them used)
(21:30:12) cron2: WPAD is the "here's your proxy" magic
(21:30:40) cron2: no idea whether the browsers have picked this up elsewhere...
most likely not, because there's no communication path between dhcp-client and
browser
(21:30:42) dazo: okay, fair enough ... if it also works on non-Windows, I won't
comment on the #else block
(21:31:09) dazo: well, NetworkManager can in theory pick it up and configure
the networking layer
(21:31:12) cron2: (now *that* is something where stuff like systemd/dbus really
improves on the traditional unix way)
(21:31:20) cron2: yeah
(21:35:41) dazo: I don't see any other issues, but don't trust my judgment today
(21:35:54) cron2: this patch does *so* not apply with "git am"...
(21:35:59) cron2: --- openvpn-2.3.7/src/openvpn/tun.c 2015-06-08
08:16:35.000000000 +0200
(21:36:02) cron2: +++ /tmp/build-x86_64/openvpn-2.3.7/src/openvpn/tun.c
2015-07-16 12:10:59.5385
(21:36:11) dazo: it doesn't even apply with patch
(21:36:27) dazo: JJK needs to learn 'git format-patch' :)
(21:36:42) cron2: indeed :)
(21:36:54) cron2: but I'm good at patch mangling...
(21:37:13) ***dazo didn't have patience enough today :)
(21:38:10) cron2: what
(21:38:18) cron2: there is a chunk in there that is so totally unrelated
(21:38:26) cron2: + struct tuntap_options *o =
&options->tuntap_options;
(21:38:27) cron2: +
(21:39:11) dazo: dhcp_option_address_parse ("GW", p[1], o->gw, &o->gw_len,
msglevel); .... not needed?
(21:39:38) cron2: no, that was inside a {} somewhere else
(21:39:39) dazo: I thought that was needed for the TFTP stuff
(21:39:55) cron2: went right out of scope two lines later
(21:40:00) cron2: 5354
(21:40:19) cron2: ok, enough is enough
(21:43:50) dazo: got enough brain power to start looking at my bigger patch-set?
(21:49:27) cron2: oh
(21:49:35) cron2: you looked at a different version of the v3 patch
(21:49:44) ***cron2 rolls eyes
(21:49:50) Crashdemon
[~jir...@dslb-094-220-067-153.094.220.pools.vodafone-ip.de] è entrato nella
stanza.
(21:50:03) dazo: cron2: nope, I looked at the rev3 patch
(21:50:18) dazo:
http://thread.gmane.org/gmane.network.openvpn.devel/9864/focus=9908
(21:50:20) vpnHelper: Title: Gmane Loom (at thread.gmane.org)
(21:50:28) cron2: there's a v3 patch in 55a3dbf8.5010...@nikhef.nl (Subject:
PATCH v2), and *another* v3 patch in 55a786e3.7010...@nikhef.nl
(21:50:34) cron2: with subject PATCH v3
(21:50:43) dazo: meh
(21:51:07) cron2: "yours" has the dhcp_option_address_parse ("GW"...) bit,
while mine only has the "struct tuntap_options *o = ..."
(21:51:27) dazo: ehm? http://article.gmane.org/gmane.network.openvpn.devel/9908
(21:51:29) vpnHelper: Title: Gmane -- Re: PATCH v2 Add TFTP and WPAD DHCP
options (at article.gmane.org)
(21:51:42) cron2: that is "v2", as the subject says :)
(21:51:52) dazo: that's what mid.gmane.org gave me
(21:51:59) dazo: duh!
(21:52:04) cron2: http://article.gmane.org/gmane.network.openvpn.devel/9929
(21:52:07) vpnHelper: Title: Gmane -- PATCH v3 Add TFTP and WPAD DHCP options
(at article.gmane.org)
(21:52:14) cron2: this is "v3 with subject v3"
(21:52:29) dazo: Looking at the right stuff now :)
(21:52:37) dazo: agreed ... now it's not needed
(21:52:41) cron2: the only difference seems to be the "GW" line
(21:53:45) dazo: yeah
(21:56:25) cron2: as for the patch set...
(21:56:39) ***cron2 looks at plaisthos... "he's the one with brains, I'm the
good-looking one!" :-)
(21:57:10) dazo: the v3 patch actually applied fairly well with patch -p1
(21:57:30) dazo: (two rejects, but that's not too bad)
(21:57:37) cron2: that is way too bad
(21:57:55) cron2: a patch to areas that have not been touched by other folks in
ages should not have rejects
(21:57:56) dazo: one of them is the not needed struct tuntap_options
(21:58:13) cron2: the other one is the new dhcp options - whitespace change in
the line before that
(21:58:15) dazo: fair enough
(21:58:36) cron2: I could have fixed that as well, but at that point I didn't
feel like it should be my job
(21:58:46) cron2: coming to your patchset :)
(21:58:52) dazo: wohoo!
(21:59:15) cron2: dwdm2 sent a comment about your autoconf magic failing if
libsystemd.pc and systemd.pc both exist...
(21:59:19) mattock: http://thread.gmane.org/gmane.network.openvpn.devel/9657 I
assume
(21:59:21) vpnHelper: Title: Gmane Loom (at thread.gmane.org)
(22:00:55) dazo: oh fun ... both libsystemd.pc and systemd.pc installed at once
(22:01:00) ***dazo wonder which distro he uses
(22:01:44) cron2: 1/4 has managed to confuse git a bit... the patch looks way
more complicated than it actually is, I think
(22:03:08) cron2: the console.h patch seems to have funny characters in it, in
the comments
(22:03:18) dazo: that's right, it's not too complicated ... but as it moves
around on some functions, patches gets odd
(22:03:20) cron2: /**# Local pointer to the gc_arena...
(22:05:10) cron2: I would not use QUERY_USER_FOREACH() - it's trivial enough
that actually hiding it in a macro makes it harder to understand what is
happening - so you have to add a comment to explain what it does
(22:05:40) dazo: The /**< syntax is Doxygen stuff ... to "tag" these comments
to the right place in the HTML
(22:06:00) cron2: ok, good, didn't know that and it just looked weird in the
web view
(22:06:54) cron2: I'm not sure you should use function names that start with
"_" - as far as I remember, these are reserved for "library internal use", and
we're not a library...
(22:07:54) plaisthos: sorry was away, catching up now
(22:08:01) cron2: I'd just leave them their existing name - and maybe even
leave them in console.c, as not much seems to be won by moving them around and
introducing a new .c file
(22:08:20) cron2: console.c has 242 lines, that's not *so* big that we really
need to split out stuff...
(22:08:34) dazo: The QUERY_USER_FOREACH() macro is something I've picked up
from the kernel sources ... such things are used there often, to simplify
reading the code ... but I have no strong feelings, in my head it makes it
easier to read the code - but I can understand this can be confusing when it's
not been seen so often
(22:09:20) dazo: cron2: the '_' prefix ... still in patch 1?
(22:09:21) cron2: since we're just walking lists elsewhere in the code, I'd
stick to that
(22:09:24) cron2: yes
(22:12:27) cron2: the new invocation interface (get_console_input() ->
query_user_init(), query_user_add(), query_user_exec()) is much longer to
achieve the same thing... maybe introduce a wrapper that will do the same
thing, but doesn't make the 3 places where it's called so much longer?
(22:13:21) dazo: just a sec ... catching up while fixing the patch-set on the
fly
(22:15:31) cron2: comment 4/4 talks about --icon, but the code does not have it
(22:16:18) cron2: besides that, 2/4, 3/4 and 4/4 look good to me (modulo
dwdm2's double-.pc remark)
(22:16:51) cron2: but I find 1/4 is overengineering to achieve the desired
result
(22:17:57) Crashdemon ha abbandonato la stanza (quit: Ping timeout: 255
seconds).
(22:17:58) dazo: I'm not quite sure I follow the "maybe introduce a wrapper
that will do the same thing...."
(22:18:44) cron2: misc.c, pkcs11.c - a single function call to
get_console_input() expands to about a screenfull of query_user_...() calls
(22:19:09) cron2: can we have a query_user_dothething() call that will init(),
add() and exec() for these cases, in one go?
(22:20:29) dazo: hmm ... the idea is that this API can provide a possibility to
query for PKCS#11 pin code, --key password in the same go as username/password
(22:20:38) cron2: the old API does that :-)
(22:21:01) dazo: no, it does it several places ... and I haven't come that far
with further patches to reach that goal
(22:21:36) dazo: the idea is that there is one call to the "external side"
which is told "I need this and this and this" ... and provides all the
information back in one go
(22:22:05) dazo: how it is now ... it is "I need this" ... "Oh, and I need this
too" ... "I also need this" .... which is three interactions
(22:22:24) cron2: I understand, but I see no reason why there should not be a
wrapper that callse query_user_init(), adds arguments with query_user_add(),
and then executes the thing with query_user_exe(), without the callers having
to do all this
(22:23:03) cron2: the wrapper function of course would have "more" arguments,
some of them being flags and others possibly NULL for unwanted functionality -
just like get_console_input() does today
(22:23:13) cron2: magic, with few lines of code
(22:23:30) ***dazo looks closer at the old and new code
(22:23:31) cron2: the internal abstraction with _init, _add, _exec is fine
(22:24:10) cron2: but the change in misc.c and pkcs11.c is making a long and
complicated function longer and more complicated, and I'm wondering if this
cannot be done more elegantly
(22:25:49) dazo: look at the username/password section ... around line 1114
(22:26:43) cron2: which branch, which file?
(22:26:50) dazo: misc.c
(22:27:01) dazo: and I'm on the branch with the patch
(22:27:13) cron2: the get_console_input() block inside #ifdef ENABLE_CLIENT_CR?
(22:27:17) dazo: what could be done more elegant is to use stdarg on the
query_user_add() .... the code gets somewhat longer due to that 2 prompts needs
to be setup, which has a variable prefix
(22:27:48) dazo: http://fpaste.org/253587/39234866/
(22:28:20) cron2: no, the thing is: if there is a single call to
query_user_add(), just stuff it all in a single function that does _init() and
_exec() as well. Don't put all the *qucfg mess into the caller
(22:28:38) cron2: query_user_single_execution_add_and_go()
(22:28:42) dazo: ahh, just those places where there is a single interaction
(22:29:24) dazo: I see ... well, the benefit won't last too long when I get
further to grab all this in one go ... then the query_user_init() and
query_user_exec() will be moved elsewhere
(22:29:25) cron2: if there's more to be stuffed in, one need to look more
closely, of course
(22:29:50) dazo: but sure, I can add that for the time being and we'll remove
it again once it is no longer needed
(22:29:57) cron2: in that case, I stop objecting, but *this* is just too
complicated for my brain :-)
(22:30:38) dazo: I'm not done improving the query user interface with these
patches ... this was just a good first milestone :)
(22:30:42) cron2: one could argue whether query_user_init() shouldn't just
msg(M_FATAL, ...) itself upon failing - this should be a "canthappen" anyway...
(22:31:34) cron2: 3 lines saved per invocation...
(22:31:46) dazo: I can make query_user_init() become a void function .... and
do the msg(M_FATAL, ...) inside that function
(22:32:13) dazo: it is unlikely to happen ... but not checking for malloc()
failures is a bigger fail :)
(22:32:25) cron2: this :) (yes, it would be nice to know *which* call failed,
but arguably, this would have to fail on a malloc() of so few bytes that it's
very unlikely to be useful knowledge)
(22:32:39) cron2: the memory saved in not having 3 different error messages
makes up for the memory needed :)
(22:32:45) dazo: fair enough! I'll fix that!
(22:33:50) cron2: so, now my brain is spent... need some chocolate...
(22:42:13) mattock: cron2: spent enough for today, or until you get the
chocolate? :P
(22:43:14) cron2: I think we did quite a bit of work, and I'm out now :-) -
feel free to go on, though!
(22:45:49) dazo: cron2: I'll have an updated patch of the first one out by
tomorrow
(22:46:04) mattock: ok so "the patchset needs some modifications which dazo
will provide"?
(22:47:11) dazo: mattock1: yeah ... and cron2 said: besides that, 2/4, 3/4 and
4/4 look good to me (modulo dwdm2's double-.pc remark)
(22:47:25) mattock: yeah, 1/4 gets most modifications
(22:47:34) dazo: the double-.pc remark is an odd one - but I'll investigate
that one too
(22:57:51) mattock: ok, summary ready, will send
(22:58:06) mattock: meeting concluded apparently :)