Login page in html on unix

I want to create a login page in HTML which is hosted on apache server.
The login page first authenticate the user and then directed to a form which in turn run a script on the server.
I want to make login page without php or jsp.
Please advice.

one option is to use Perl and CGI

what if I dont want to use either.. cant I do only using HTML page and some scripts in unix...
Please discuss the code.

You can. Apache doesn't care what language CGI programs are written in, as long as the execute. I think I even saw a complete blog written in nothing but bash. But the question is: Even if you can, why would you want to? As a learning exercise? Because there's nothing available on the machine better suited for the task?

I want to make a login page and use shell script to authenticate but I dont know if user want to change his password then how wil he do it.
I couldnt able to write the code for authentication. Would I have to hard code it??

As I said, CGI can be written in anything runnable, leaving me with the question "What exactly do you want to do"? Could you flesh out your specifications a bit, and tell us what points you have problems with?

only want to make a login page, which authenticate the user and user can change its password when he wants to. Admin can be able to add users too.
Do you need more information?? I am a new user in this field so I told you what I want to do.
I had some html forms which user can be alble to access only after authentication i.e after login in.
can you discuss some code in shell scripts for this purpose.

Take this simple script:

#!/bin/bash
echo -e "Content-Type: text/plain\n\n"
env
echo "-------------"
id

Put it in your servers /cgi-bin/ directory as minimal.sh, make it executable, and then call it from your browser as http://localhost/cgi-bin/minimal.sh?a=b&c=d&e=�
Example output:

SERVER_SIGNATURE=<address>Apache/2.2.4 (Linux/SUSE) Server at localhost Port 80</address>

HTTP_KEEP_ALIVE=300
HTTP_USER_AGENT=Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.5) Gecko/2008121300 SUSE/3.0.5-2.3 Firefox/3.0.5
SERVER_PORT=80
HTTP_HOST=localhost
DOCUMENT_ROOT=/srv/www/htdocs
HTTP_ACCEPT_CHARSET=ISO-8859-1,utf-8;q=0.7,*;q=0.7
SCRIPT_FILENAME=/srv/www/cgi-bin/minimal.sh
REQUEST_URI=/cgi-bin/minimal.sh?a=b&c=d&e=%C3%BC
SCRIPT_NAME=/cgi-bin/minimal.sh
HTTP_CONNECTION=keep-alive
REMOTE_PORT=50421
PATH=/usr/sbin:/bin:/usr/bin:/sbin
PWD=/srv/www/cgi-bin
SERVER_ADMIN=[no address given]
HTTP_ACCEPT_LANGUAGE=de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
REMOTE_ADDR=127.0.0.1
SHLVL=1
SERVER_NAME=localhost
SERVER_SOFTWARE=Apache/2.2.4 (Linux/SUSE)
QUERY_STRING=a=b&c=d&e=%C3%BC
SERVER_ADDR=127.0.0.1
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
HTTP_CACHE_CONTROL=max-age=0
HTTP_ACCEPT_ENCODING=gzip,deflate
REQUEST_METHOD=GET
_=/usr/bin/env
-------------
uid=30(wwwrun) gid=8(www) groups=8(www)

Notice the part in blue? That are the parameters for the script. The part in red? The Unicode codepoint for �, as it was sent by my browser. If you really want to code this in bash, there are no libraries or other helpers for that kind of stuff. And you're not even tracking sessions yet.

What you'd have to do is code the login logic, authentication, authorization, and since the users should be able to run scripts, some kind of security lest you want to lose data.

Dear Pludi, Thanks for the code. But the problem is somewhat different and I already know how get or post works and how to run the scripts.
So let me explain you in a different manner. I dont want to use JSP and want to implement in html.

Lets take one example.... I have two html pages... first one is a login page through which a user will be able to login and then only will be able to see the second html page... and noone can able to directly access the second page without loging in... The problem is the login page that I want to design in such a way that it will give freedom to the user to change its password... and how I can use session in html pages..... Thanks and hope this time you can understand my problem more clearly

Authentication: not possible with plain HTML
Authorization: not possible with plain HTML
User administration (including changing passwords): not possible in plain HTML
Sessions: not possible with plain HTML

For all 4 you'll have to at least code something up in JavaScript, or call any CGI backend (Shell, C, JSP, PHP, Perl, ...)

Hi Pludi,
Can you provide some links on how to code a CGI to run from an HTML page or how to call it? I tried yours, but it does not work as I get the error:

[Mon Jul 20 12:44:22 2009] [error] (8)Exec format error: exec of '/lsf1/IBM/IHS/cgi-bin/minimal.sh' failed
[Mon Jul 20 12:44:22 2009] [error] [client 000.00.00.00] Premature end of script headers: minimal.sh
 I am sure it is something stupid that I am or am not doing.  Thank you.

Does Apache know that /lsf1/IBM/IHS/cgi-bin/ is a valid CGI directory? May the user Apache is running as run the script (eXecutable bit set)? Is /bin/bash a valid interpreter on your machine. Did you know that within 2 months you could probably have learned all the Perl/PHP that's needed for your task, plus some?

Hi Pludi,
Yes that is the valid CGI directory and the user can run the scripts. I removed the reference to bash as we use ksh. When I run the script from the unix command line it works. I had only found the link yesterday and thought if you had some links to running Perl or ksh scripts from a web page I could do the rest myself. Thank you for your response.

---------- Post updated at 10:17 AM ---------- Previous update was at 07:52 AM ----------

Hi Pludi,
Wanted to let you know that it worked once I changed the content type to text/html and added the line

#!/bin/sh

Again, thank you for your help.

Argh, head, meet desk. Sorry for lashing out with my last question, shouldn't answer questions when sleepy.

As for your problem, the type of text/plain shouldn't affect execution in any way.

The shebang line (the one starting with #!) should look like one of the following:

  • for Bourne/POSIX-Shell compatible shells: #!/bin/sh
  • for Korn-Shell (ksh): #!/usr/bin/ksh
  • for Bo(u)rne-Again-Shell (bash): #!/bin/bash or #!/usr/bin/bash