[Nagiosplug-devel] Re: Embedded Perl (was check_by_ssh something...)

Darrell Mozingo dmozingo at topechelon.com
Fri Apr 2 06:38:12 CEST 2004


You guys mind discussing your language flame war between each other? I'm
tired of getting these messages, they're not why I signed up to the
mailing list.

Darrell Mozingo

On Fri, 2004-04-02 at 08:08, Andreas Ericsson wrote:

> Paul L. Allen wrote:
> >> Unions and structs are a part of ANSI. It's perfectly acceptable to 
> >> have an array of structs containing arrays of structs with arrays of 
> >> arrays (or whatever) in them, allowing for infinite depth arrays.
> > 
> > Gosh, you have unions and structs.  Ah well, that's everything you'll ever
> > need.
> >
> For functionality, yes.
> 
> >> Hashes are convenient, but not necessary since it's perfectly possible
> >> for you to hop the pointer yourself.
> > 
> > Hashes are not just convenient, they solve many problems that would scale
> > badly and run very slowly without them. 
> 
> If the code is written properly, scaling is not a problem. If it isn't, 
> no language in the world will do the trick for you.
> 
> > Of course, you can write your own
> > hash code, but good hashing code is difficult to write.  Or you could find
> > a C library.  Or you could use perl.
> > 
> Enter simple mathematics. I argue that good hashing code is trivial to 
> write as long as it has been properly implemented from the beginning.
> 
> >> Bah. Some plugins should be written in C. Those that parse a lot of 
> >> text should be written in perl, and those that rely on external 
> >> commands for their data retrieval (like snmpget and fping) should be 
> >> written in unix shell (it handles program execution better than perl, 
> >> since it can fork() instead of execve()).
> > 
> > And if you rely on external commands that generate a lot of text that you
> > have to parse?
> > 
> man grep
> man sed
> man awk
> man cut
> 
> >>> So what I'm saying is that for most cases you don't need C.  Take a
> >>> look at the perl plugins. NONE of them make use of C-code modules that
> >>> I know of.
> >>
> >> The Socket module works with C-code underneath, as does SNMP and File.
> > 
> > The socket module is part of the standard distribution.  Perl is written
> > in C.  Neither of those facts mean that it is sensible to rewrite perl
> > plugins in C just because perl is written in C.
> > 
> SNMP is not, but I guess you missed that. Also, if I read Karl's 
> comments on the perl framework correctly, it has almost grown out of its 
> own usefulness.
> 
> >>> Most competent programmers understand that programmers generate the
> >>> same average number of *fully* debugged lines of code a day no matter
> >>> which language they write in.  It is left as an exercise for the reader
> >>> to compute the average code-density ratio of perl and C.
> >>>
> >>>> Those same functions can be called and linked from any C program 
> >>>> without the intermittent layer and the top-level code.
> > 
> > With many more lines of code needed to do so, especially if you need
> > text mangling.  I made the point about productivity and your response
> > ignored it.
> > 
> By reducing the intermittent code layers production times will drop. In 
> what way did I ignore the productivity issues?
> 
> >>> You can do anything from any language, if you try hard enough.
> >>
> >> My point exactly. Why try 'hard enough' to write it in perl if it 
> >> needs C under the hood any way?
> > 
> > Why work hard to code something in many lines of C that could be done in
> > a few lines of perl?  BTW, code generated in C is just a bunch of
> > opcodes and data.  Why write it in C when it's just opcodes under the
> > hood?  Why not write raw machine instructions?
> > 
> Now you're just being silly.
> 
> >> On a serious note though; Do you know how many bugs and potential bugs 
> >> me and the other Owl developers have fixed in perl 5.8.3? Last time I 
> >> checked we were at patch-level 23 (each patch fixes 3 or more bugs). 
> >> Patches have been submitted, but it's a serious load of code so I'm 
> >> thinking it'll be a while until they're allowed in the tree.
> > 
> > You're doing a good job with the patches.  But, as you admit, you've
> > submitted patches for other things like Apache.  You may have the luxury
> > of not running Apache until you've done a thorough audit and fixed all
> > the holes, most people don't.  The same thing goes for perl.
> > 
> Are you expecting a reply to this?
> 
> >> Also, we value security above functionality, which isn't always
> >> functional enough for the kind of ad-hockery many perl programmers
> >> (read script kiddies) indulge in.
> > 
> > Yeah, script kiddies like the programmers for the Swedish state pension
> > scheme.  After the main project code went way off schedule, some of these
> > "script kiddies" knocked up some code in perl as an interim system.  It
> > worked so well that the main project code was dropped and the interim
> > perl code upgraded to have all the functionality in the spec.  The perl
> > code took a small fraction of the time to write that had already been
> > spent on the main code.
> > 
> many != all
> Are you making this up, btw? I live and work in sweden but I've never 
> seen this pension scheme, or any news or anything about it.
> 
> >> Auditing a perl plugin makes the one-time penalty even worse, since it 
> >> requires auditing of perl itself as well (not to mention the modules 
> >> it uses).
> > 
> > That's a fair point.  But given the choice between a plugin that does
> > what I need written in perl or no plugin at all, I take the former.
> > 
> Already discussed and agreed upon.
> 
> >>> I remember mentioning to you just how much of the TCP stack is in kernel
> >>> space these days but I haven't seen a response.
> >>
> >> What do you want me to respond to? You weren't asking me anything if I 
> >> remember things correctly, merely stating that it was (which is true, 
> >> so I don't have a respond for that).
> > 
> > The point is that most of the stack runs in kernel space and is therefore
> > a potential vulnerability.  Yet another thing to audit.
> > 
> Do you think I mainly spent my time working on IDE-drivers while 
> auditing the kernel?
> 
> >> Besides, perl is as vulnerable as anything to kernel bugs.
> > 
> > And C isn't?  Hint: perl is written in C.  So if you can write something
> > in perl that's vulnerable to a kernel bug you can write the same thing in
> > C with the same vulnerability.
> > 
> 'as vulnerable as anything' wasn't there for rhetorical reasons.
> 
> >>> A *good* coder works around the limitations of many platforms rather
> >>> than coding purely for his own platform.  Perl simplifies that process
> >>> by already knowing about many of those problems.
> >>
> >> You put too much faith in Larry Wall et al.
> > 
> > The same faith I put into linux and apache.  I know that they are going
> > to contain bugs but they are better than the alternatives.  I know that
> > open source development means they are likely to improve.  I know that
> > they may contain bugs, but in the end I need an OS and webserver.
> > 
> And I'll be happy to provide both. Actually, it's more than just likely 
> that some of the code you rely on was written by me, or based off of 
> work I put into it. Fun, eh?
> 
> >> Also, a false sense of security is worse than real sense of insecurity.
> > 
> > I don't trust any software to be secure.  Short of disconnecting servers
> > from the internet, there isn't much I can do to be confident I am
> > totally secure.  Unlike you, I don't believe that your patches will
> > make any of these things totally secure because I don't fool myself that
> > I can think of every possible vulnerability or that totally new exploit
> > mechanisms will never be found.
> 
> I don't believe they will make me totally secure. I believe they will 
> make me more secure than I would have been without them.
> 
> > 
> >>> In practise, the only plugin I have seen that needs to run
> >>> an external command as another user called sudo.
> >>
> >> Which means a legitimate sudo call will exist on the stack (free fire 
> >> zone).
> > 
> > Are you advocating setuid as a safer alternative?
> > 
> No, I suggest the script calling sudo shouldn't be cached. If it is then 
> evey instance of nagios will have an easy shot at a vulnerability in its 
> stack.
> 
> >> Yes, but at what cost? Do we need to mark certain scripts as unsafe 
> >> for the EPN, and how do we go about doing that? Config variables in 
> >> nagior, or with shell-scripts wrapped around them?
> > 
> > How about separate directories?
> 
> Should work out ok. Then we'd only have to add one new variable to the 
> main configuration file. 'perl_safe_cache_dir' or something. Code could 
> be kept rather clean (well, not any messier than it is at least) and 
> consistent, and everybody would be happy.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nagios-plugins.org/archive/devel/attachments/20040402/486587bb/attachment.html>


More information about the Devel mailing list