+#if defined(AUTHENTICATE)
+ case TELOPT_AUTHENTICATION:
+ sprintf(nfrontp, "AUTHENTICATION");
+ nfrontp += strlen(nfrontp);
+
+ if (length < 2) {
+ sprintf(nfrontp, " (empty suboption???)");
+ nfrontp += strlen(nfrontp);
+ break;
+ }
+ switch (pointer[1]) {
+ case TELQUAL_REPLY:
+ case TELQUAL_IS:
+ sprintf(nfrontp, " %s ", (pointer[1] == TELQUAL_IS) ?
+ "IS" : "REPLY");
+ nfrontp += strlen(nfrontp);
+ if (AUTHTYPE_NAME_OK(pointer[2]))
+ sprintf(nfrontp, "%s ", AUTHTYPE_NAME(pointer[2]));
+ else
+ sprintf(nfrontp, "%d ", pointer[2]);
+ nfrontp += strlen(nfrontp);
+ if (length < 3) {
+ sprintf(nfrontp, "(partial suboption???)");
+ nfrontp += strlen(nfrontp);
+ break;
+ }
+ sprintf(nfrontp, "%s|%s",
+ ((pointer[3] & AUTH_WHO_MASK) == AUTH_WHO_CLIENT) ?
+ "CLIENT" : "SERVER",
+ ((pointer[3] & AUTH_HOW_MASK) == AUTH_HOW_MUTUAL) ?
+ "MUTUAL" : "ONE-WAY");
+ nfrontp += strlen(nfrontp);
+
+ auth_printsub(&pointer[1], length - 1, buf, sizeof(buf));
+ sprintf(nfrontp, "%s", buf);
+ nfrontp += strlen(nfrontp);
+ break;
+
+ case TELQUAL_SEND:
+ i = 2;
+ sprintf(nfrontp, " SEND ");
+ nfrontp += strlen(nfrontp);
+ while (i < length) {
+ if (AUTHTYPE_NAME_OK(pointer[i]))
+ sprintf(nfrontp, "%s ", AUTHTYPE_NAME(pointer[i]));
+ else
+ sprintf(nfrontp, "%d ", pointer[i]);
+ nfrontp += strlen(nfrontp);
+ if (++i >= length) {
+ sprintf(nfrontp, "(partial suboption???)");
+ nfrontp += strlen(nfrontp);
+ break;
+ }
+ sprintf(nfrontp, "%s|%s ",
+ ((pointer[i] & AUTH_WHO_MASK) == AUTH_WHO_CLIENT) ?
+ "CLIENT" : "SERVER",
+ ((pointer[i] & AUTH_HOW_MASK) == AUTH_HOW_MUTUAL) ?
+ "MUTUAL" : "ONE-WAY");
+ nfrontp += strlen(nfrontp);
+ ++i;
+ }
+ break;
+
+ case TELQUAL_NAME:
+ i = 2;
+ sprintf(nfrontp, " NAME \"");
+ nfrontp += strlen(nfrontp);
+ while (i < length)
+ *nfrontp += pointer[i++];
+ *nfrontp += '"';
+ break;
+
+ default:
+ for (i = 2; i < length; i++) {
+ sprintf(nfrontp, " ?%d?", pointer[i]);
+ nfrontp += strlen(nfrontp);
+ }
+ break;
+ }
+ break;
+#endif
+
+#if defined(ENCRYPT)
+ case TELOPT_ENCRYPT:
+ sprintf(nfrontp, "ENCRYPT");
+ nfrontp += strlen(nfrontp);
+ if (length < 2) {
+ sprintf(nfrontp, " (empty suboption???)");
+ nfrontp += strlen(nfrontp);
+ break;
+ }
+ switch (pointer[1]) {
+ case ENCRYPT_START:
+ sprintf(nfrontp, " START");
+ nfrontp += strlen(nfrontp);
+ break;
+
+ case ENCRYPT_END:
+ sprintf(nfrontp, " END");
+ nfrontp += strlen(nfrontp);
+ break;
+
+ case ENCRYPT_REQSTART:
+ sprintf(nfrontp, " REQUEST-START");
+ nfrontp += strlen(nfrontp);
+ break;
+
+ case ENCRYPT_REQEND:
+ sprintf(nfrontp, " REQUEST-END");
+ nfrontp += strlen(nfrontp);
+ break;
+
+ case ENCRYPT_IS:
+ case ENCRYPT_REPLY:
+ sprintf(nfrontp, " %s ", (pointer[1] == ENCRYPT_IS) ?
+ "IS" : "REPLY");
+ nfrontp += strlen(nfrontp);
+ if (length < 3) {
+ sprintf(nfrontp, " (partial suboption???)");
+ nfrontp += strlen(nfrontp);
+ break;
+ }
+ if (ENCTYPE_NAME_OK(pointer[2]))
+ sprintf(nfrontp, "%s ", ENCTYPE_NAME(pointer[2]));
+ else
+ sprintf(nfrontp, " %d (unknown)", pointer[2]);
+ nfrontp += strlen(nfrontp);
+
+ encrypt_printsub(&pointer[1], length - 1, buf, sizeof(buf));
+ sprintf(nfrontp, "%s", buf);
+ nfrontp += strlen(nfrontp);
+ break;
+
+ case ENCRYPT_SUPPORT:
+ i = 2;
+ sprintf(nfrontp, " SUPPORT ");
+ nfrontp += strlen(nfrontp);
+ while (i < length) {
+ if (ENCTYPE_NAME_OK(pointer[i]))
+ sprintf(nfrontp, "%s ", ENCTYPE_NAME(pointer[i]));
+ else
+ sprintf(nfrontp, "%d ", pointer[i]);
+ nfrontp += strlen(nfrontp);
+ i++;
+ }
+ break;
+
+ case ENCRYPT_ENC_KEYID:
+ sprintf(nfrontp, " ENC_KEYID", pointer[1]);
+ nfrontp += strlen(nfrontp);
+ goto encommon;
+
+ case ENCRYPT_DEC_KEYID:
+ sprintf(nfrontp, " DEC_KEYID", pointer[1]);
+ nfrontp += strlen(nfrontp);
+ goto encommon;
+
+ default:
+ sprintf(nfrontp, " %d (unknown)", pointer[1]);
+ nfrontp += strlen(nfrontp);
+ encommon:
+ for (i = 2; i < length; i++) {
+ sprintf(nfrontp, " %d", pointer[i]);
+ nfrontp += strlen(nfrontp);
+ }
+ break;
+ }
+ break;
+#endif
+