dn_find(exp_dn, msg, dnptrs, lastdnptr) u_char *exp_dn, *msg; u_char **dnptrs, **lastdnptr;
dn_find(domain, msg, dnptrs, lastdnptr) const u_char *domain; const u_char *msg; const u_char * const *dnptrs; const u_char * const *lastdnptr;
dn_find(exp_dn, msg, dnptrs, lastdnptr)	u_char *exp_dn, *msg;	u_char **dnptrs, **lastdnptr;{	register u_char *dn, *cp, **cpp;	register int n;	u_char *sp;	for (cpp = dnptrs; cpp < lastdnptr; cpp++) {		dn = exp_dn;		sp = cp = *cpp;		while (n = *cp++) {			/*			 * check for indirection			 */			switch (n & INDIR_MASK) {			case 0:		/* normal case, n == len */				while (--n >= 0) {					if (*dn == '.')						goto next;					if (*dn == '\\')						dn++;					if (mklower(*dn++) != mklower(*cp++))						goto next;				}				if ((n = *dn++) == '\0' && *cp == '\0')					return (sp - msg);				if (n == '.')					continue;				goto next;			case INDIR_MASK:	/* indirection */				cp = msg + (((n & 0x3f) << 8) | *cp);				break;			default:	/* illegal type */				return (-1);			}		}		if (*dn == '\0')			return (sp - msg);	next:	;	}	return (-1);}