From 6d052aeba968f16100de9e59add743abcfb06094 Mon Sep 17 00:00:00 2001 From: "Robert S. French" Date: Sun, 5 Jul 1987 22:09:03 +0000 Subject: safety --- lib/ZParseNot.c | 110 ++------------------------------------------------------ 1 file changed, 3 insertions(+), 107 deletions(-) (limited to 'lib/ZParseNot.c') diff --git a/lib/ZParseNot.c b/lib/ZParseNot.c index d0c84b3..af13a34 100644 --- a/lib/ZParseNot.c +++ b/lib/ZParseNot.c @@ -23,112 +23,8 @@ Code_t ZParseNotice(buffer,len,notice,auth,from) int *auth; struct sockaddr_in *from; { - char *ptr,*end,*cksum,srcprincipal[ANAME_SZ+INST_SZ+REALM_SZ+4]; - int result; - unsigned int temp[3]; - AUTH_DAT dat; - KTEXT_ST authent; - ZChecksum_t our_checksum; - CREDENTIALS cred; - - ptr = buffer; - end = buffer+len; - - if (ZReadAscii(ptr,end-ptr,(char *)temp,sizeof(int)) == ZERR_BADFIELD) - return (ZERR_BADPKT); - ptr += strlen(ptr)+1; - - if (*temp != ZVERSION) - return (ZERR_VERS); + extern int ZCheckAuthentication(); - if (ZReadAscii(ptr,end-ptr,(char *)temp,sizeof(int)) == ZERR_BADFIELD) - return (ZERR_BADPKT); - notice->z_kind = (ZNotice_Kind_t)*temp; - ptr += strlen(ptr)+1; - - if (ZReadAscii(ptr,end-ptr,(char *)temp,sizeof(ZUnique_Id_t)) == - ZERR_BADFIELD) - return (ZERR_BADPKT); - bcopy((char *)temp,(char *)¬ice->z_uid,sizeof(ZUnique_Id_t)); - ptr += strlen(ptr)+1; - - if (ZReadAscii(ptr,end-ptr,(char *)temp,sizeof(u_short)) == - ZERR_BADFIELD) - return (ZERR_BADPKT); - notice->z_port = (u_short)*temp; - ptr += strlen(ptr)+1; - - if (ZReadAscii(ptr,end-ptr,(char *)temp,sizeof(int)) == ZERR_BADFIELD) - return (ZERR_BADPKT); - notice->z_auth = *temp; - ptr += strlen(ptr)+1; - - if (ZReadAscii(ptr,end-ptr,(char *)temp,sizeof(int)) == ZERR_BADFIELD) - return (ZERR_BADPKT); - notice->z_authent_len = *temp; - ptr += strlen(ptr)+1; - - notice->z_ascii_authent = ptr; - ptr += strlen(ptr)+1; - notice->z_class = ptr; - ptr += strlen(ptr)+1; - notice->z_class_inst = ptr; - ptr += strlen(ptr)+1; - notice->z_opcode = ptr; - ptr += strlen(ptr)+1; - notice->z_sender = ptr; - ptr += strlen(ptr)+1; - notice->z_recipient = ptr; - ptr += strlen(ptr)+1; - - cksum = ptr; - - if (ZReadAscii(ptr,end-ptr,(char *)¬ice->z_checksum, - sizeof(ZChecksum_t)) - == ZERR_BADFIELD) - return (ZERR_BADPKT); - ptr += strlen(ptr)+1; - - notice->z_message = (caddr_t) ptr; - notice->z_message_len = len-(ptr-buffer); - - if (!auth) - return (ZERR_NONE); - if (!notice->z_auth) { - *auth = 0; - return (ZERR_NONE); - } - - if (__Zephyr_server) { - if (ZReadAscii(notice->z_ascii_authent, - strlen(notice->z_ascii_authent)+1, - (char *)authent.dat, - notice->z_authent_len) == ZERR_BADFIELD) { - *auth = 0; - return (ZERR_NONE); - } - authent.length = notice->z_authent_len; - result = rd_ap_req(&authent,SERVER_SERVICE, - SERVER_INSTANCE,from->sin_addr.s_addr, - &dat,SERVER_SRVTAB); - bcopy((char *)dat.session,(char *)__Zephyr_session, - sizeof(C_Block)); - *auth = (result == RD_AP_OK); - (void) sprintf(srcprincipal,"%s%s%s@%s",dat.pname, - dat.pinst[0]?".":"",dat.pinst,dat.prealm); - if (strcmp(srcprincipal,notice->z_sender)) - *auth = 0; - return (ZERR_NONE); - } - - if (result = get_credentials(SERVER_SERVICE,SERVER_INSTANCE, - __Zephyr_realm,&cred)) - return (result+krb_err_base); - - our_checksum = (ZChecksum_t)quad_cksum(buffer,NULL,cksum-buffer,0, - cred.session); - - *auth = (our_checksum == notice->z_checksum); - - return (ZERR_NONE); + return (Z_InternalParseNotice(buffer,len,notice,auth,from, + ZCheckAuthentication)); } -- cgit v1.2.3