C
58
chkpw
Guest on 17th May 2022 04:37:52 PM
#include <string.h>
#include <descrip.h>
#include <uaidef.h>
struct itmlst { short length,code;
long buffer,retlen; };
int sys$getuai();
int sys$hash_password();
void chkpw(char *un,char *pw,int *ok)
{
long pwd[2],hpwd[2];
short salt;
char encryp;
struct dsc$descriptor_s undesc,pwdesc;
struct itmlst items[4] = { {2,UAI$_SALT,&salt,0} , {1,UAI$_ENCRYPT,&encryp,0} ,
{8,UAI$_PWD,&pwd,0} , {0,0,0,0} };
undesc.
dsc$w_length
= strlen(un
);
undesc.dsc$b_dtype = DSC$K_DTYPE_T;
undesc.dsc$b_class = DSC$K_CLASS_S;
undesc.dsc$a_pointer = un;
pwdesc.
dsc$w_length
= strlen(pw
);
pwdesc.dsc$b_dtype = DSC$K_DTYPE_T;
pwdesc.dsc$b_class = DSC$K_CLASS_S;
pwdesc.dsc$a_pointer = pw;
sys$getuai(0,0,&undesc,&items,0,0,0);
sys$hash_password(&pwdesc,encryp,salt,&undesc,&hpwd);
*ok = ((pwd[0]==hpwd[0])&&(pwd[1]==hpwd[1]));
return;
}