Rob,

First of all, why do you have an "Alias" statement for /cgi-bin? That doesn't make any sense to me.  Normally a URL containing /cgi-bin/ is used for running CGI scripts.  That's why it's called "cgi-bin".   An Alias statement is for static files, not executable scripts/programs.   This is why I don't understand...?   Can you explain that?

I strongly suspect that this alias is conflicting with the other statements.

With regards to why your original ScriptAliasMatch didn't work -- I've already explained that, please see my previous post.

This directive also would not work:

ScriptAliasMatch /cgi-bin/E31RPP.pgm/.* /qsys.lib/E310PRDOBJ.lib/$1

You have a variable $1, but aren't putting anything into.  Can you explain why you are using ScriptAliasMatch in this case?  If you only have one program, what's the point behind all this fancy regular expression and wildcard stuff?  just do this:

ScriptAlias /cgi-bin/E31RPP.pgm /qsys.lib/E310PRDOBJ.LIB/E31RPP.pgm

Notice this isn't a ScriptAliasMatch because it doesn't need to match a regular expression.  This will run (slightly) faster than the ScriptAliasMatch and is much simpler.

-SK

On 12/12/2018 7:03 AM, Rob Dixon wrote:
Scott
Many thanks for your long post, explanations and helpful ideas.
As I said in my initial post, I don't understand the syntax for Apache
directives and I have been unable to find documentation explaining it.

ScriptAliasMatch /cgidev2p/(.*) /qsys.lib/cgidev2.lib/$1 was a quote from
easy400.net

What I actually used was
*ScriptAliasMatch ^/cgi-bin/(.*) /QSYS.LIB/E310PRDOBJ.LIB/$1*
but this didn't work, although it did put what appeared to be the the
correct URL - http://192.168.2.70/cgi-bin/E31RPP.PGM/081895345701239/ - in
the address of the error 404 screen, together with the message The
requested URL /cgi-bin/E31RPP.PGM/081895345701239/ was not found on this
server.
Since the above statement is preceded by Alias /cgi-bin/
/QSYS.LIB/E310PRDOBJ.LIB*/, *I also tried ScriptAliasMatch ^/cgi-bin/(.*)
/$1 but with the same result.

http://192.168.2.70/cgi-bin/E31RPP.PGM/081895345701239/ is the same form as
I get with the original HTTP server under V5R1 and I have had this working
for about 10 years without any problem. I assume, perhaps naively, that
anything that works with the original HTTP server will also work with
Apache if it is configured correctly. I should explain that all the
programs were compiled on the V5R1 system with their own ACTGRP and have
been transferred to the backup V5R3 system which doesn't have programming
tools. I am as sure as I can be that the files, programs etc on the V5R3
systems are the same as on my V5R1 machine. Once I have Apache working,
then I can transfer to a more modern system with a later OS version.

The only CGI program is E31RPP which is used for all applications, however
diverse they may be. This generates HTML and Javascript on the fly for all
applications and there is no stored HTML. I don't use HTML templates. The
same program, E31RPP, is also used for 5250 output and that all works fine
on the V5R3 system which again makes me think that my problem is with the
Apache config. If there was an ACTGRP problem, then presumably my programs
would not work in 5250 mode.

You suggested ScriptAliasMatch /cgi-bin/([a-z0-9]{1,10}.pgm)/.*
/qsys.lib/cgidev2.lib/$1. I assume that, as I only have one CGI program, I
could use its name. My library is E310PRDOBJ rather than cgidev2 so the
above would become
ScriptAliasMatch /cgi-bin/E31RPP.pgm/.* /qsys.lib/E310PRDOBJ.lib/$1. I have
tried that, with and without the brackets around E31RPP.PGM and it doesn't
work. Have I still misunderstood? If I have not, could there be any other
problem that I have not spotted?

I have explained elsewhere in this thread that my initial program is
E310H00000. This is not a CGI program, has no output and calls E31RPP
indirectly.

Rob








On Tue, 11 Dec 2018 at 22:16, Scott Klement <web400@xxxxxxxxxxxxxxxx> wrote:

Rob,

I'm trying to piece together this conversation from many messages in the
thread, so please forgive me if I'm missing part of it. At the start
you said you were using this:

ScriptAliasMatch /cgidev2p/(.*) /qsys.lib/cgidev2.lib/$1

Read that carefully. $1 means "everything that fits in the first set of
parenthesis". In parenthesis, you have .* which means "all
characters". So if you have a URL of
http://whatever/cgidev2p/blahblahblah the "blahblahblah" would match the
parenthesis, so would be placed in the pathname where the $1 is.

Now apply that to your URL:

http://192.168.2.70/cgi-bin/E31RPP.PGM/081854473505965/

This URL doesn't have cgidev2p in it, so will not match this script
alias. I'm assuming that you actually used cgi-bin instead of cgidev2p,
so your script alias is actually this:

ScriptAliasMatch /cgi-bin/(.*) /qsys.lib/cgidev2.lib/$1

Assuming that's what you meant, the resulting path name would be:

/qsys.lib/cgidev2.lib/E31RPP.PGM/081854473505965/

that isn't a valid path name, so this wouldn't work. You are probably
thinking that the script alias won't consider everything after the slash
to be part of the program name -- but, in fact, it doesn't know its a
program name. It's just trying to match the regular expression .*,
which includes everything, including the slash, etc. The period means
"any character" and the * means "zero or more times" so it will include
the slashes, etc as part of the program name.

Instead you'll want something like this (this is off the top of my head,
untested):

ScriptAliasMatch /cgi-bin/([a-z0-9]{1,10}.pgm)/.* /qsys.lib/cgidev2.lib/$1

So the idea is it matches letters a-z or digits 0-9, from 1-10
characters long, followed by the .PGM Everything after the.PGM is not
part of the program name, so isn't in the parenthesis.

-SK

On 12/11/2018 12:37 PM, Rob Dixon wrote:
John,

When a user signs on (compulsory), they are allocated an OS/400 job
number
and this is the first six digits of the long number at the end of the UI.
There is no theoretical limit to number of concurrent users possible.

It is certainly not my intention to let the client choose the program - I
have tried using wildcards in desperation but, as I said, I really don't
know what I am doing with Apache. The exact same structure has worked
fine
under V5R1 with original HTTP server for about 10 years.

All applications use the same initial URL -
http://192.168.2.70/cgi-bin/erros and once they have signed on, and
their
initial screen has been displayed, if they then press Enter, the URI will
always be http://192.168.2.70/cgi-bin/E31RPP.PGM/081854473505965/ where
081854 is the job number and the remaining 9 digits together with the job
number make a unique session ID. This applies for all applications. All
data and application definitions are stored in the database, as are user
authorities to use applications and the user is presented with a list of
applications to which he is authorised, retrieved from the database. All
applications, however diverse, use the same CGI program and database
handler. Selecting an application takes the user to an initial menu for
the
application which is also stored in the database. As there is effectively
only one CGI program, they cannot select the wrong one. The CGI program
E31RPP generates all HTML and Javascript on the fly. There is no stored
HTML. But this is not really relevant to my problem which I feel sure is
simply a config problem (but I might be wrong!).


On Tue, 11 Dec 2018 at 13:26, Slanina, John <jslanina@xxxxxxxxxx> wrote:

How can you control that is only get called once ? if more than one
client
is accessing the API you could have up to by default 40 jobs running.
We
have 19 jobs serving the api's right now.
The first program wsrpgm02 is a router program the looks at the uri and
does a DB lookup to find which program to load. It provides a level of
security.
I hope you are not going to let the client side pick the program. One
typo
from the client developer and they may run a program you don’t want them
too.

Thanks
John Slanina



On 12/11/18, 4:55 AM, "WEB400 on behalf of Rob Dixon" <
web400-bounces@xxxxxxxxxxxx on behalf of robertsdixon@xxxxxxxxx> wrote:

Many thanks. The wild card is not in my config but has been put
there,
at
the beginning and end of each line, by a mail package when
responding
to my
post. I don't know why.

I don't need the SETENV code as the library list is set by my
initial
program. The other difference is that I have to distinguish
between the
initial program which calls my CGI program (indirectly) and that
CGI
program, as, rather obviously, the initial program must only be
called
once.

Rob

On Mon, 10 Dec 2018 at 16:33, Slanina, John <jslanina@xxxxxxxxxx>
wrote:

> Rob,
>
> Here is our setup is works fine.
> I don’t undertstand why you have the wildcard * after it.
>
>
> 21 SetEnv QIBM_CGI_CHANGE_CURLIB N
> 22 SetEnv QIBM_CGI_LIBRARY_LIST
>

"QTEMP;D1BRCOBJ;D1BRFILESU;D1BRCPGMSU;D1BRFILESN;D1BRCPGMSN;D1GENNEW;D1BRFILES;D1BRCPGMS;D1PENWORK;D1PENFILES;D1NIFILES;D1TRFILES;D1IC08XXCP;D1IC08XXP;D1MW08XXCP;D1MW08XXP;D1NI08XXCP;D1NI08XXP;D1TR08XXCP;D1TR08XXP;D1BRCPGMS1;GPL;QGPL;RDB40;"
> 23
> 24 <Directory />
> 25 Order Deny,Allow
> 26 Deny From all
> 27 </Directory>
> 28
> 29 <Directory /www/brctivod1/htdocs>
> 30 Order Allow,Deny
> 31 Allow From all
> 32 </Directory>
> 33
> 34 ScriptAlias /webapi
/qsys.lib/D1BRCPGMS.lib/wsrpgm02.pgm
> 35
> 36 <Directory /qsys.lib/D1BRCPGMS.lib>
> 39 Allow From all
> 40 order allow,deny
> 41 Require valid-user
> 42 DefaultNetCCSID 819
> 43 AuthType Basic
> 44 AuthName ****
> 45 CGIJobCCSID 37
> 46 CGIConvMode EBCDIC
> 47 PasswdFile %%SYSTEM%%
>
>
> 48 </Directory>On 12/10/18, 11:24 AM, "WEB400 on behalf
of
Buck
> Calabro" <web400-bounces@xxxxxxxxxxxx on behalf of
kc2hiz@xxxxxxxxx>
> wrote:
>
> On 12/8/2018 11:48 AM, Rob Dixon wrote:
> > The header is correct for the initial display. Having got
that
> screen, I
> > then started a service program for the job and set a
breakpoint at
> the
> > beginning of the calc specs for my CGI program, which, as I
have
> said, is
> > the same program that displayed my first screen. But when I
pressed
> Enter
> > to get the second screen, there was no breakpoint. There
was
nothing
> in
> > CGIDEBUG for the second screen. but the log said
> >
> > [Sat Dec 08 14:18:19 2018] [error] [client 192.168.2.210]
> ZSRV_MSG0018:
> > File /QSYS.LIB/E310PRDOBJ.LIB/E31RPP.PGM/081780817443836/
does
not
> exist,
> > referer: http://192.168.2.70/cgi-bin/erros
> > [Sat Dec 08 14:18:19 2018] [error] [client 192.168.2.210]
> ZSRV_MSG0016: URI
> > in request POST /cgi-bin/E31RPP.PGM/081780817443836/
HTTP/1.1
is not
> valid,
> > referer: http://192.168.2.70/cgi-bin/erros
> >
> > The relevant config lines seem to be
> > * 7* * ScriptAlias /cgi-bin/erros
> > /QSYS.LIB/E310PRDOBJ.LIB/E310H00000.PGM*
> > * 8* * Alias "/cgi-bin/" "/QSYS.LIB/E310PRDOBJ.LIB/"*
> > * 9* * ScriptAliasMatch ^/cgi-bin/(.*) /$1*
> > * 10*
> > * 11* * # ScriptAliasMatch ^/cgi-bin/(.*)
> /qsys.lib/E310PRDOBJ.LIB/$1*
> >
> > Line 7 executes correctly with the display of the first
screen. I
> have
> > tried it with line 11 instead of line 9 and the result is
the
same.
>
> What's the URI after the first screen displays? Is it
> http://192.168.2.70/cgi-bin/E31RPP.PGM/081780817443836 If
so,
wouldn't
> that assert ScriptAliasMatch and try to fire off program
> 081780817443836, which doesn't exist?
>
> --
> --buck
>
> http://wiki.midrange.com
> Your updates make it better!
>
> --
> This is the Web Enabling the IBM i (AS/400 and iSeries)
(WEB400)
> mailing list
> To post a message email: WEB400@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: https://lists.midrange.com/mailman/listinfo/web400
> or email: WEB400-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at https://archive.midrange.com/web400.
>
>
>
> --
> This is the Web Enabling the IBM i (AS/400 and iSeries) (WEB400)
mailing
> list
> To post a message email: WEB400@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: https://lists.midrange.com/mailman/listinfo/web400
> or email: WEB400-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at https://archive.midrange.com/web400.
>
>

--
Rob Dixon

www.erros.co.uk
www.boarstall.com
--
This is the Web Enabling the IBM i (AS/400 and iSeries) (WEB400)
mailing list
To post a message email: WEB400@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/web400
or email: WEB400-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/web400.



--
This is the Web Enabling the IBM i (AS/400 and iSeries) (WEB400) mailing
list
To post a message email: WEB400@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/web400
or email: WEB400-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/web400.


--
This is the Web Enabling the IBM i (AS/400 and iSeries) (WEB400) mailing
list
To post a message email: WEB400@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/web400
or email: WEB400-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/web400.




As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.