From: kcr Date: Fri, 30 May 2003 05:13:05 +0000 (+0000) Subject: pull up to latest athena current X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=3618764b1789969f01740cc4e2b3c7869e9a23b2;p=1ts-debian.git pull up to latest athena current git-svn-id: svn://svn.1ts.org/debian/branches/athena-update-branch@170 cbed1d16-5ef5-0310-b6a1-d4a37b08ba1f --- diff --git a/zephyr/clients/zaway/zaway.c b/zephyr/clients/zaway/zaway.c index f3235e8..7e40ee4 100644 --- a/zephyr/clients/zaway/zaway.c +++ b/zephyr/clients/zaway/zaway.c @@ -3,7 +3,7 @@ * * Created by: Robert French * - * $Id: zaway.c,v 1.15 2000/07/05 21:22:06 ghudson Exp $ + * $Id: zaway.c,v 1.16 2003/02/28 20:40:44 zacheiss Exp $ * * Copyright (c) 1987, 1993 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file @@ -17,7 +17,7 @@ #include #ifndef lint -static const char rcsid_zaway_c[] = "$Id: zaway.c,v 1.15 2000/07/05 21:22:06 ghudson Exp $"; +static const char rcsid_zaway_c[] = "$Id: zaway.c,v 1.16 2003/02/28 20:40:44 zacheiss Exp $"; #endif #define MESSAGE_CLASS "MESSAGE" @@ -143,6 +143,7 @@ int main(argc,argv) if (strcmp(notice.z_sender,ZGetSender()) == 0 || strcmp(notice.z_opcode,"PING") == 0 || + strcmp(notice.z_opcode,"AUTO") == 0 || strcmp(notice.z_message,"Automated reply:") == 0) { ZFreeNotice(¬ice); continue; diff --git a/zephyr/clients/zwrite/zwrite.c b/zephyr/clients/zwrite/zwrite.c index 678aae5..c0c2979 100644 --- a/zephyr/clients/zwrite/zwrite.c +++ b/zephyr/clients/zwrite/zwrite.c @@ -3,7 +3,7 @@ * * Created by: Robert French * - * $Id: zwrite.c,v 1.49 1999/08/13 00:19:42 danw Exp $ + * $Id: zwrite.c,v 1.50 2002/05/22 15:13:51 ghudson Exp $ * * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file @@ -17,7 +17,7 @@ #include #ifndef lint -static const char rcsid_zwrite_c[] = "$Id: zwrite.c,v 1.49 1999/08/13 00:19:42 danw Exp $"; +static const char rcsid_zwrite_c[] = "$Id: zwrite.c,v 1.50 2002/05/22 15:13:51 ghudson Exp $"; #endif /* lint */ #define DEFAULT_CLASS "MESSAGE" @@ -348,7 +348,7 @@ send_off(notice, real) success = 0; - for (i=0;iz_recipient = realm_recip; @@ -439,8 +439,6 @@ send_off(notice, real) else printf("Internal failure - illegal message field in server response\n"); ZFreeNotice(&retnotice); - if (!nrecips) - break; } if (!success) exit(1); diff --git a/zephyr/debian/changelog b/zephyr/debian/changelog index 1b98636..a3eb768 100644 --- a/zephyr/debian/changelog +++ b/zephyr/debian/changelog @@ -1,3 +1,9 @@ +zephyr (2.1.20010518.SNAPSHOT-10.1) unstable; urgency=lown + + * Experimental update to the latest athena code. + + -- Karl Ramm Fri, 30 May 2003 01:11:15 -0400 + zephyr (2.1.20010518.SNAPSHOT-10) unstable; urgency=low * Attack of the Standards-Version continues. diff --git a/zephyr/lib/ZMkAuth.c b/zephyr/lib/ZMkAuth.c index e14cfc2..e306391 100644 --- a/zephyr/lib/ZMkAuth.c +++ b/zephyr/lib/ZMkAuth.c @@ -3,7 +3,7 @@ * * Created by: Robert French * - * $Id: ZMkAuth.c,v 1.19 1999/01/22 23:19:16 ghudson Exp $ + * $Id: ZMkAuth.c,v 1.20 2002/11/11 18:28:06 ghudson Exp $ * * Copyright (c) 1987 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file @@ -13,19 +13,14 @@ #include #ifndef lint -static const char rcsid_ZMakeAuthentication_c[] = "$Id: ZMkAuth.c,v 1.19 1999/01/22 23:19:16 ghudson Exp $"; +static const char rcsid_ZMakeAuthentication_c[] = "$Id: ZMkAuth.c,v 1.20 2002/11/11 18:28:06 ghudson Exp $"; #endif #ifdef HAVE_KRB4 #include -static long last_authent_time = 0L; -static KTEXT_ST last_authent; #endif Code_t ZResetAuthentication () { -#ifdef HAVE_KRB4 - last_authent_time = 0L; -#endif return ZERR_NONE; } @@ -44,20 +39,15 @@ Code_t ZMakeAuthentication(notice, buffer, buffer_len, len) CREDENTIALS cred; extern unsigned long des_quad_cksum(); - now = time(0); - if (last_authent_time == 0 || (now - last_authent_time > 120)) { - result = krb_mk_req(&authent, SERVER_SERVICE, - SERVER_INSTANCE, __Zephyr_realm, 0); - if (result != MK_AP_OK) { - last_authent_time = 0; - return (result+krb_err_base); - } - last_authent_time = now; - last_authent = authent; - } - else { - authent = last_authent; - } + result = krb_mk_req(&authent, SERVER_SERVICE, + SERVER_INSTANCE, __Zephyr_realm, 0); + if (result != MK_AP_OK) + return (result+krb_err_base); + result = krb_get_cred(SERVER_SERVICE, SERVER_INSTANCE, + __Zephyr_realm, &cred); + if (result != KSUCCESS) + return (result+krb_err_base); + notice->z_auth = 1; notice->z_authent_len = authent.length; notice->z_ascii_authent = (char *)malloc((unsigned)authent.length*3); @@ -79,9 +69,6 @@ Code_t ZMakeAuthentication(notice, buffer, buffer_len, len) return(result); /* Compute a checksum over the header and message. */ - if ((result = krb_get_cred(SERVER_SERVICE, SERVER_INSTANCE, - __Zephyr_realm, &cred)) != 0) - return result; checksum = des_quad_cksum(buffer, NULL, cstart - buffer, 0, cred.session); checksum ^= des_quad_cksum(cend, NULL, buffer + *len - cend, 0, cred.session); diff --git a/zephyr/lib/ZParseNot.c b/zephyr/lib/ZParseNot.c index a0a8080..89b3f67 100644 --- a/zephyr/lib/ZParseNot.c +++ b/zephyr/lib/ZParseNot.c @@ -3,7 +3,7 @@ * * Created by: Robert French * - * $Id: ZParseNot.c,v 1.29 1999/08/13 00:19:44 danw Exp $ + * $Id: ZParseNot.c,v 1.30 2002/09/10 16:04:29 ghudson Exp $ * * Copyright (c) 1987,1991 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file @@ -17,55 +17,16 @@ static char rcsid_ZParseNotice_c[] = #include -/* Assume that strlen is efficient on this machine... */ -#define next_field(ptr) ptr += strlen (ptr) + 1 - -#if defined (__GNUC__) && defined (__vax__) -#undef next_field -static __inline__ char * Istrend (char *str) { - /* - * This should be faster on VAX models outside the 2 series. Don't - * use it if you are using MicroVAX 2 servers. If you are using a - * VS2 server, use something like - * #define next_field(ptr) while(*ptr++) - * instead of this code. - * - * This requires use of GCC to get the optimized code, but - * everybody uses GCC, don't they? :-) - */ - register char *str2 asm ("r1"); - /* Assumes that no field is longer than 64K.... */ - asm ("locc $0,$65535,(%1)" : "=r" (str2) : "r" (str) : "r0"); - return str2; -} -#define next_field(ptr) ptr = Istrend (ptr) + 1 -#endif - -#ifdef mips -#undef next_field -/* - * The compiler doesn't optimize this macro as well as it does the - * following function. - */ -#define next_fieldXXX(ptr) do{register unsigned c1,c2;c1= *ptr; \ - while((ptr++,c2= *ptr,c1)&&(ptr++,c1= *ptr,c2));}while(0) -static char *next_field_1 (s) char *s; { - /* - * Calling overhead is still present, but this routine is faster - * than strlen, and doesn't bother with some of the other math - * that we'd just have to undo later anyways. - */ - register unsigned c1 = *s, c2; - while (1) { - s++; c2 = *s; if (c1 == 0) break; - s++; c1 = *s; if (c2 == 0) break; - s++; c2 = *s; if (c1 == 0) break; - s++; c1 = *s; if (c2 == 0) break; - } - return s; +/* Skip to the next NUL-terminated field in the packet. */ +static char *next_field(ptr, end) + char *ptr, *end; +{ + while (ptr < end && *ptr != '\0') + ptr++; + if (ptr < end) + ptr++; + return (ptr); } -#define next_field(ptr) ptr=next_field_1(ptr) -#endif Code_t ZParseNotice(buffer, len, notice) char *buffer; @@ -110,12 +71,12 @@ Code_t ZParseNotice(buffer, len, notice) maj = atoi(ptr); if (maj != ZVERSIONMAJOR) return (ZERR_VERS); - next_field (ptr); + ptr = next_field(ptr, end); if (ZReadAscii32(ptr, end-ptr, &temp) == ZERR_BADFIELD) BAD_PACKET; numfields = temp; - next_field (ptr); + ptr = next_field(ptr, end); /*XXX 3 */ numfields -= 2; /* numfields, version, and checksum */ @@ -139,151 +100,153 @@ Code_t ZParseNotice(buffer, len, notice) return ZERR_BADPKT; } - if (numfields) { + if (numfields && ptr < end) { if (ZReadAscii32(ptr, end-ptr, &temp) == ZERR_BADFIELD) BAD_PACKET; notice->z_kind = (ZNotice_Kind_t)temp; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else BAD_PACKET; - if (numfields) { + if (numfields && ptr < end) { if (ZReadAscii(ptr, end-ptr, (unsigned char *)¬ice->z_uid, sizeof(ZUnique_Id_t)) == ZERR_BADFIELD) BAD_PACKET; notice->z_time.tv_sec = ntohl((u_long) notice->z_uid.tv.tv_sec); notice->z_time.tv_usec = ntohl((u_long) notice->z_uid.tv.tv_usec); numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else BAD_PACKET; - if (numfields) { + if (numfields && ptr < end) { if (ZReadAscii16(ptr, end-ptr, ¬ice->z_port) == ZERR_BADFIELD) BAD_PACKET; notice->z_port = htons(notice->z_port); numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else BAD_PACKET; - if (numfields) { + if (numfields && ptr < end) { if (ZReadAscii32(ptr, end-ptr, &temp) == ZERR_BADFIELD) BAD_PACKET; notice->z_auth = temp; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else BAD_PACKET; notice->z_checked_auth = ZAUTH_UNSET; - if (numfields) { + if (numfields && ptr < end) { if (ZReadAscii32(ptr, end-ptr, &temp) == ZERR_BADFIELD) BAD_PACKET; notice->z_authent_len = temp; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else BAD_PACKET; - if (numfields) { + if (numfields && ptr < end) { notice->z_ascii_authent = ptr; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else BAD_PACKET; - if (numfields) { + if (numfields && ptr < end) { notice->z_class = ptr; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else notice->z_class = ""; - if (numfields) { + if (numfields && ptr < end) { notice->z_class_inst = ptr; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else notice->z_class_inst = ""; - if (numfields) { + if (numfields && ptr < end) { notice->z_opcode = ptr; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else notice->z_opcode = ""; - if (numfields) { + if (numfields && ptr < end) { notice->z_sender = ptr; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else notice->z_sender = ""; - if (numfields) { + if (numfields && ptr < end) { notice->z_recipient = ptr; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else notice->z_recipient = ""; - if (numfields) { + if (numfields && ptr < end) { notice->z_default_format = ptr; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else notice->z_default_format = ""; -/*XXX*/ if (ZReadAscii32(ptr, end-ptr, &temp) == ZERR_BADFIELD) BAD_PACKET; notice->z_checksum = temp; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); - if (numfields) { + if (numfields && ptr < end) { notice->z_multinotice = ptr; numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else notice->z_multinotice = ""; - if (numfields) { + if (numfields && ptr < end) { if (ZReadAscii(ptr, end-ptr, (unsigned char *)¬ice->z_multiuid, sizeof(ZUnique_Id_t)) == ZERR_BADFIELD) BAD_PACKET; notice->z_time.tv_sec = ntohl((u_long) notice->z_multiuid.tv.tv_sec); notice->z_time.tv_usec = ntohl((u_long) notice->z_multiuid.tv.tv_usec); numfields--; - next_field (ptr); + ptr = next_field(ptr, end); } else notice->z_multiuid = notice->z_uid; - for (i=0;iz_other_fields[i] = ptr; - next_field (ptr); + ptr = next_field(ptr, end); } notice->z_num_other_fields = i; - for (i=0;iz_message = (caddr_t) ptr; notice->z_message_len = len-(ptr-buffer); diff --git a/zephyr/lib/ZReadAscii.c b/zephyr/lib/ZReadAscii.c index 8462bbc..955a7e0 100644 --- a/zephyr/lib/ZReadAscii.c +++ b/zephyr/lib/ZReadAscii.c @@ -3,7 +3,7 @@ * * Created by: Robert French * - * $Id: ZReadAscii.c,v 1.18 1999/01/22 23:19:21 ghudson Exp $ + * $Id: ZReadAscii.c,v 1.19 2002/09/10 16:04:30 ghudson Exp $ * * Copyright (c) 1987, 1990 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file @@ -11,7 +11,7 @@ */ #ifndef lint -static char rcsid_ZReadAscii_c[] = "$Id: ZReadAscii.c,v 1.18 1999/01/22 23:19:21 ghudson Exp $"; +static char rcsid_ZReadAscii_c[] = "$Id: ZReadAscii.c,v 1.19 2002/09/10 16:04:30 ghudson Exp $"; #endif /* lint */ #include @@ -46,17 +46,16 @@ Code_t ZReadAscii(ptr, len, field, num) register unsigned int temp; for (i=0;i= 1 && *ptr == ' ') { ptr++; - if (--len < 0) - return ZERR_BADFIELD; - } - if (ptr[0] == '0' && ptr[1] == 'x') { + len--; + } + if (len >= 2 && ptr[0] == '0' && ptr[1] == 'x') { ptr += 2; len -= 2; - if (len < 0) - return ZERR_BADFIELD; - } + } + if (len < 2) + return ZERR_BADFIELD; c1 = Z_cnvt_xtoi(ptr[0]); if (c1 < 0) return ZERR_BADFIELD; @@ -67,8 +66,6 @@ Code_t ZReadAscii(ptr, len, field, num) field[i] = hexbyte; ptr += 2; len -= 2; - if (len < 0) - return ZERR_BADFIELD; } return *ptr ? ZERR_BADFIELD : ZERR_NONE; diff --git a/zephyr/lib/Zinternal.c b/zephyr/lib/Zinternal.c index 57ee9b3..72ced5b 100644 --- a/zephyr/lib/Zinternal.c +++ b/zephyr/lib/Zinternal.c @@ -3,7 +3,7 @@ * * Created by: Robert French * - * $Id: Zinternal.c,v 1.41 2000/01/27 03:48:53 ghudson Exp $ + * $Id: Zinternal.c,v 1.42 2002/09/10 16:04:31 ghudson Exp $ * * Copyright (c) 1987,1988,1991 by the Massachusetts Institute of * Technology. @@ -18,7 +18,7 @@ #ifndef lint static const char rcsid_Zinternal_c[] = - "$Id: Zinternal.c,v 1.41 2000/01/27 03:48:53 ghudson Exp $"; + "$Id: Zinternal.c,v 1.42 2002/09/10 16:04:31 ghudson Exp $"; static const char copyright[] = "Copyright (c) 1987,1988,1991 by the Massachusetts Institute of Technology."; #endif @@ -471,6 +471,11 @@ Code_t Z_AddNoticeToEntry(qptr, notice, part) struct _Z_Hole *hole, *lasthole; struct timeval tv; + /* Bounds check. */ + if (part < 0 || notice->z_message_len < 0 || part > qptr->msg_len + || notice->z_message_len > qptr->msg_len - part) + return (ZERR_NONE); + /* Incorporate this notice's checked authentication. */ if (notice->z_checked_auth == ZAUTH_FAILED) qptr->auth = ZAUTH_FAILED; diff --git a/zephyr/server/subscr.c b/zephyr/server/subscr.c index 00e6ab0..8a2be2f 100644 --- a/zephyr/server/subscr.c +++ b/zephyr/server/subscr.c @@ -16,7 +16,7 @@ #ifndef lint #ifndef SABER -static const char rcsid_subscr_c[] = "$Id: subscr.c,v 1.58 2001/03/01 00:47:05 zacheiss Exp $"; +static const char rcsid_subscr_c[] = "$Id: subscr.c,v 1.60 2002/07/03 03:02:44 zacheiss Exp $"; #endif #endif @@ -186,14 +186,19 @@ add_subscriptions(who, subs, notice, server) } } } - if (realm && !bdumping && server && server == me_server) { - retval = subscr_realm_sendit(who, subs, notice, realm); - if (retval != ZERR_NONE) { - free_subscriptions(subs); - free_string(sender); - return(retval); + if (realm && !bdumping) { + if (server && server == me_server) { + retval = subscr_realm_sendit(who, subs, notice, realm); + if (retval != ZERR_NONE) { + free_subscriptions(subs); + free_string(sender); + return(retval); + } else { + /* free this one, will get from ADD */ + free_subscription(subs); + } } else { - free_subscription(subs); /* free this one, will get from ADD */ + /* Indicates we leaked traffic back to our realm */ } } else { retval = triplet_register(who, &subs->dest, NULL); @@ -1465,17 +1470,27 @@ subscr_check_foreign_subs(notice, who, server, realm, newsubs) found = 0; for (subs = newsubs; subs; subs = next) { + Realm *rlm; next=subs->next; + if (subs->dest.recip->string[0] != '\0') { + rlm = realm_which_realm(who); + syslog(LOG_WARNING, "subscr bad recip %s by %s (%s)", + subs->dest.recip->string, + sender->string, rlm->name); + continue; + } acl = class_get_acl(subs->dest.classname); if (acl) { - Realm *rlm; rlm = realm_which_realm(who); if (rlm && server == me_server) { if (!realm_sender_in_realm(rlm->name, sender->string)) { syslog(LOG_WARNING, "subscr auth not verifiable %s (%s) class %s", sender->string, rlm->name, subs->dest.classname->string); - continue; + free_subscriptions(newsubs); + free_string(sender); + free(text); + return ZSRV_CLASSRESTRICTED; } } if (!access_check(sender->string, acl, SUBSCRIBE)) { diff --git a/zephyr/zwgc/X_gram.c b/zephyr/zwgc/X_gram.c index 0e3c6ac..32b09f5 100644 --- a/zephyr/zwgc/X_gram.c +++ b/zephyr/zwgc/X_gram.c @@ -4,7 +4,7 @@ * * Created by: Marc Horowitz * - * $Id: X_gram.c,v 1.22 1999/01/22 23:20:09 ghudson Exp $ + * $Id: X_gram.c,v 1.23 2001/07/18 14:06:32 ghudson Exp $ * * Copyright (c) 1989 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file @@ -14,7 +14,7 @@ #include #if (!defined(lint) && !defined(SABER)) -static const char rcsid_X_gram_c[] = "$Id: X_gram.c,v 1.22 1999/01/22 23:20:09 ghudson Exp $"; +static const char rcsid_X_gram_c[] = "$Id: X_gram.c,v 1.23 2001/07/18 14:06:32 ghudson Exp $"; #endif #include @@ -48,7 +48,7 @@ int internal_border_width = 2; unsigned long default_fgcolor; unsigned long default_bgcolor; unsigned long default_bordercolor; -long ttl = 0; +long ttl = 500; static int reset_saver; static int border_width = 1; static int cursor_code = XC_sailboat; diff --git a/zephyr/zwgc/parser.y b/zephyr/zwgc/parser.y index d37380f..b3b2b17 100644 --- a/zephyr/zwgc/parser.y +++ b/zephyr/zwgc/parser.y @@ -5,7 +5,7 @@ * * Created by: Marc Horowitz * - * $Id: parser.y,v 1.6 1999/01/22 23:20:30 ghudson Exp $ + * $Id: parser.y,v 1.7 2003/01/23 05:32:16 ghudson Exp $ * * Copyright (c) 1989 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file @@ -15,7 +15,7 @@ #include #if (!defined(lint) && !defined(SABER)) -static const char rcsid_parser_y[] = "$Id: parser.y,v 1.6 1999/01/22 23:20:30 ghudson Exp $"; +static const char rcsid_parser_y[] = "$Id: parser.y,v 1.7 2003/01/23 05:32:16 ghudson Exp $"; #endif #include @@ -231,6 +231,7 @@ elseparts : elseifparts $$->next = $1; $$ = reverse_list_of_nodes($$); } ; + /* elseifparts needs to be reversed before using... */ elseifparts : /* empty */ { $$ = 0; } diff --git a/zephyr/zwgc/tty_filter.c b/zephyr/zwgc/tty_filter.c index 27dc57b..bce2d32 100644 --- a/zephyr/zwgc/tty_filter.c +++ b/zephyr/zwgc/tty_filter.c @@ -4,7 +4,7 @@ * * Created by: Marc Horowitz * - * $Id: tty_filter.c,v 1.18 1999/08/13 00:19:51 danw Exp $ + * $Id: tty_filter.c,v 1.21 2002/04/18 18:28:17 rbasch Exp $ * * Copyright (c) 1989 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file @@ -14,7 +14,7 @@ #include #if (!defined(lint) && !defined(SABER)) -static const char rcsid_tty_filter_c[] = "$Id: tty_filter.c,v 1.18 1999/08/13 00:19:51 danw Exp $"; +static const char rcsid_tty_filter_c[] = "$Id: tty_filter.c,v 1.21 2002/04/18 18:28:17 rbasch Exp $"; #endif #include diff --git a/zephyr/zwgc/zwgc.1 b/zephyr/zwgc/zwgc.1 index f73b096..d1bdc4c 100644 --- a/zephyr/zwgc/zwgc.1 +++ b/zephyr/zwgc/zwgc.1 @@ -1,4 +1,4 @@ -.\" $Id: zwgc.1,v 1.24 2000/08/10 15:10:52 ghudson Exp $ +.\" $Id: zwgc.1,v 1.25 2002/09/10 00:32:16 ghudson Exp $ ' # end of TP (cf }N below) ' # copied here, since we use @ in some of our tags, and that ' # messes up \w and \h @@ -380,7 +380,6 @@ created, its mode is set to read-write, owner only (no access for others). .TP .B break Exits the innermost if, case, or while block. -.\" .if n .ll +2in .TP \fBcase \fIexpr1\fR [ ((\fBmatch \fIexpr\fR [,\fIexpr ...\fR]) | \fBdefault\fR)\fI commands \fR] ... \fBendcase\fR Evaluates \fIexpr1\fR. Then, each of the match expressions is @@ -427,7 +426,6 @@ of the process. Completes processing of the current notice. The remainder of the description file is ignored after execution of this command. .\" hack because the following line otherwise breaks because it is too long. -.\" .if n .ll +2in .TP \fBif \fIexpr1 \fBthen \fIcommands1\fR [\fBelseif \fIexpr2 \fBthen \fIcommands2\fR] ... [\fBelse \fIcommandsn\fR] \fBendif\fR If \fIexpr1\fR evaluates to true, execute \fIcommands1\fI, etc. [A conditional @@ -535,10 +533,7 @@ the TERMCAP entry (see for the terminal named by the TERM environment variable. Supported @ commands are: .RS 10 -.\" .TQ 15 -.\" @em -.\" Emphasis. Use underline if available, else reverse video. -.TP +.TP 15 @roman Roman (plain) letters (turns off all special modes). .TP @@ -551,15 +546,6 @@ Italic letters (underlining, if available). @beep "bl" termcap entry, else "^G" (beep the terminal); limited to once per message. -.\" .TQ -.\" @blink -.\" "mb"/"me" termcap entry, else nothing. -.\" .TQ -.\" @rv -.\" "so"/"se" termcap entry. -.\" .TQ -.\" @u -.\" "us"/"ue" termcap entry. .TP @l or @left left aligned @@ -1001,9 +987,9 @@ Other control messages may be implemented in the future. .SH EXAMPLES For an example of a description file, see -.IR /usr/athena/share/zephyr/zwgc.desc . +.IR /usr/athena/lib/zephyr/zwgc.desc . For an example of X resources, see -.IR /usr/athena/share/zephyr/zwgc_resources . +.IR /usr/athena/lib/zephyr/zwgc_resources . .SH BUGS The X selection code can highlight the wrong portions of messages