Selamlar,
Eger yapmaya calistiginiz web uzerinden "web erisimini denetlemek" ise
Gokhan hocanin soyledigi uygun olabilir. Ama yapmaya calistiginiz, CGI
programi araciligi ile kullanici islemlerini web uzerinden yapmak ise
kucuk bir c programi ile bunu yapabilirsiniz.
C programinin nasil olmasi gerektigi konusunda, daha once yazdigimiz bir
programcigi listede de ilgilenenlerin olabilecegini dusunerek listeye
geciyorum. Tam olarak istedigini yapmasa da biraz kirpinca sadece sizin
istediginizi yapar hale gelir:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pwd.h>
#include <string.h>
void parse(char *pattern,char *login,char *passwd,char *newpasswd
,char *confirmpasswd)
{
int i=0,j=0;
while(pattern[i]!='=') i++;
i++;
while(pattern[i]!='&') i++;
i++;
j=0;
while(pattern[i]!='=') i++;
i++;
while(pattern[i]!='&')
{
login[j]=pattern[i];
j++; i++;
}
login[j]=0;
j=0;
while(pattern[i]!='=') i++;
i++;
while(pattern[i]!='&')
{
passwd[j]=pattern[i];
j++; i++;
}
passwd[j]=0;
j=0;
while(pattern[i]!='=') i++;
i++;
while(pattern[i]!='&')
{
newpasswd[j]=pattern[i];
j++; i++;
}
newpasswd[j]=0;
j=0;
while(pattern[i]!='=') i++;
i++;
while(pattern[i])
{
confirmpasswd[j]=pattern[i];
j++; i++;
}
confirmpasswd[j]=0;
}
int addtofile(char *login,char *pass)
{
char str[81],logstr[11];
FILE *f;
int found =0;
f=fopen("/tmp/oldlogin.dat","r");
while (!feof(f)){
fgets(str,80,f);
sscanf(str,"%s",logstr);
if (strcmp(logstr,login)==0)
found = 1;
}
fclose (f);
if (!found){
printf ("<P>1not found 1</P>");
f=fopen("/tmp/login.dat","r+");
while (!feof(f)){
fgets(str,80,f);
sscanf(str,"%s",logstr);
if (strcmp(logstr,login)==0)
found = 1;
}
}
if (!found)
fprintf(f,"%s\t%s\n",login,pass);
else return 0;
fclose(f);
return 1;
}
int validate_pass(char *login,char* pass){
struct passwd *pstruct;
char salt[3];
pstruct = getpwnam (login);
if (pstruct){
strncpy (salt,pstruct->pw_passwd,2);
return (strcmp(pstruct->pw_passwd,crypt(pass,salt))==0);
}
}
void main(void) {
char *buffer;
char login[50],newpasswd[50],confirmpasswd[50],passwd[50];
buffer=getenv("QUERY_STRING");
parse(buffer,login,passwd,newpasswd,confirmpasswd);
/* strncpy (login,login,8);*/
printf("Content-type: text/html\n\n");
printf("<HTML><HEAD><TITLE>Password Changing");
printf("</TITLE></HEAD><BODY>");
if (validate_pass(login,passwd)){
if (newpasswd[0]){
if (strcmp(newpasswd,confirmpasswd)==0){
if (addtofile(login,newpasswd)){
printf("<P>Kullanici adi ve sifreniz kabul edildi.</P>");
printf("<P>Yeni sifreniz kabul edildi.</P>");
}else printf ("<P>Onceden sifre degistirme islemini yaptiginiz icin tekrar degistirilemiyor.</P>");
} else printf("<P>Yeni sifrenizi hatali girdiniz, degisiklik kabul edilmedi.Yeniden deneyin!</P>");
}else{
if (addtofile(login,passwd))
printf("<P>Kullanici adi ve sifreniz kabul edildi.</P>");
else printf ("<P>Onceden sifre degistirme islemini yaptiginiz icin tekrar degistirilemiyor</P>");
}
} else printf("<P>Sifreniz kabul edilmedi.</P>");
printf("<A HREF=http://www.cc.hun.edu.tr/pass.html>Return</A>");
printf("</BODY></HTML>");
}