#include #include #include #include #include #include #include #include "lmgr.h" extern void fail(); extern void verify(); void licence_control() { CLIENT *cl; packet *p; packet cp; char * DEMETER = NULL; static char info[MAX_STR]; struct stat stbuf; int fd; licenceinfo linfo; DEMETER = getenv("DEMETER"); if (DEMETER == NULL) { fprintf(stderr,"Environment variable DEMETER is not set. Check the Demeter installation guide.\n"); exit(1); } sprintf(info,"%s/%s",DEMETER,DATABASE); if (stat(info,&stbuf) >= 0) { if (stbuf.st_size != sizeof(licenceinfo)) { fprintf(stderr,"%s is corrupted.\n",info); exit(1); } fd = open(info,O_RDONLY); if (stbuf.st_size != read(fd, (char*)&linfo, stbuf.st_size)) { fprintf(stderr,"Failed to read %s\n",info); exit(1); } close(fd); } else { fprintf(stderr,"Unable to find %s.\n",info); exit(1); } if (!(cl = clnt_create(linfo.sname, LMGRPROG, LMGRVERS, "tcp"))) fail(0); cp.data1 = getpid(); cp.data2 = genData(cp.data1); if (p = get_lmgr_52(&cp,cl)) { if (p->data3) fail(1); verify(p); } else fail(2); }