nebola has asked for the wisdom of the Perl Monks concerning the following question:

Greetings wise Monks,

I've just started learning perl. And I have this assignment, to do. Taking a look at my httpd.conf:

<VirtualHost 64.194.130.12> ServerAdmin admin@foo.org DocumentRoot /home/eric ServerName eric.foo.org ErrorLog logs/eric.foo.org-error_log CustomLog logs/eric.foo.org-access_log common ScriptAlias /cgi-bin/ /home/eric/cgi-bin/ </VirtualHost> <VirtualHost 64.194.130.12> ServerAdmin admin@woo.org DocumentRoot /home/michael ServerName michael.woo.org ErrorLog logs/michael.woo.org-error_log CustomLog logs/michael.woo.org-access_log common ScriptAlias /cgi-bin/ /home/michael/cgi-bin/ </VirtualHost>

Some other configuration options here, not related to VirtualHost entries...

------

I want to make a script(ran as root) that:

1. Asks for inputs servername and documentroot.
2. From these open httpd.conf file, add in an entry(a line) for cgi-bin2 just before the closing </VirtualHost> for that particular VirtualHost entry only. eg. Michael but not Eric.
3. Make the directory cgi-bin2 in documentroot.

<VirtualHost 64.194.130.12> ServerAdmin admin@woo.org DocumentRoot /home/michael ServerName michael.woo.org ErrorLog logs/michael.woo.org-error_log CustomLog logs/michael.woo.org-access_log common ScriptAlias /cgi-bin/ /home/michael/cgi-bin/ <<---- (add ScriptAlias /cgi-bin2/ /home/michael/cgi-bin2/) </VirtualHost>

Any ideas and pointers would be greatly appreciated. Thanks in advance.

neb.

Replies are listed 'Best First'.
Re: Add entry into httpd.conf
by merlyn (Sage) on Mar 21, 2001 at 11:19 UTC
    If you'd add mod_perl to your configuration, you can generate your config files during boot time using Perl code, programmatically. There's an example of driving a configuration from a DBI database in the mod_perl cookbook.

    -- Randal L. Schwartz, Perl hacker

Re: Add entry into httpd.conf
by arturo (Vicar) on Mar 21, 2001 at 19:04 UTC

    This is a variant of a FAQ ("How do I insert a line into a file" ?). The first part of your task is to figure out what pattern is going to be in the line you want to insert stuff after. Presumably the 'magic' line that tells you you're in the configuration for the right virtual host is the

    ServerName bar.woo.org

    One way of tackling your problem: open a file for writing, and open your httpd.conf file for reading. Set a flag when you find that magic line; simply print the line you read in from your old file to the new file, UNLESS the flag is set AND you've found the terminating line </VirtualHost>; all you need to do when that condition is met is print the new ScriptAlias line to the new file, and go on as before. Skeleton code (just to illustrate the logic):

    # get name of person, put it in $name my $flag =0; while (<OLD>) { # set the flag $flag =1 if /[^#]*ServerName $name.woo.org/; #now check to see if we've found the ending line if ($flag && #</VirtualHost>#) { print NEW "ScriptAlias blah blah\n"; $flag =0; } print NEW; # implicit $_ }

    HTH

    Philosophy can be made out of anything. Or less -- Jerry A. Fodor