Thread View: comp.bugs.misc
1 messages
1 total messages
Started by Mike Wescott
Fri, 09 Jan 1987 04:50
filename expansion bug in uux (Honey Danber) w/patch
Author: Mike Wescott
Date: Fri, 09 Jan 1987 04:50
Date: Fri, 09 Jan 1987 04:50
152 lines
4226 bytes
4226 bytes
In the version of HDB uucp (BNU 2.0, I think), there are is a bug in the
way uux expands filenames in a command. Sometimes what seems to be a valid
won't get properly expanded and the file shipped to the remote system.
uux treats arguments (other than the command argument) as filenames if it
has a '!' in it; except in the case where the local system is explicitly
specified.
!~/x becomes PUBDIR/x and the file is shipped to the remote
<mysys>!~/x becomes ~/x and the file is NOT shipped
~/x is not expanded (no bang, hence not a filename)
multiple <mysys>! prefixes are dropped, but not multiple ! prefixes.
The inconsistency is annoying but not severe. In any case, the following
patch to getprm.c will drop multiple <mysys>! and/or multiple ! prefixes
and then send the file.
Are there any reasons (security holes perhaps) why this fix should not
be implemented???
-Mike Wescott
ncrcae!wescott
*** getprm.c.orig Thu Jan 8 14:47:21 1987
--- getprm.c Thu Jan 8 15:10:44 1987
***************
*** 92,97
char *sys, *rest;
{
register char *c, *n;
*sys = '\0';
if (*name == LQUOTE) {
--- 92,98 -----
char *sys, *rest;
{
register char *c, *n;
+ register int foundsys;
*sys = '\0';
foundsys = FALSE;
***************
*** 94,99
register char *c, *n;
*sys = '\0';
if (*name == LQUOTE) {
c = bal(name, RQUOTE);
name++;
--- 95,101 -----
register int foundsys;
*sys = '\0';
+ foundsys = FALSE;
if (*name == LQUOTE) {
c = bal(name, RQUOTE);
name++;
***************
*** 99,105
name++;
(void) strncpy(rest, name, c-name);
rest[c-name] = '\0';
! return(0);
}
for (n = name ;; n = c+1) { /* loop to get rid if initial Mynames */
--- 101,107 -----
name++;
(void) strncpy(rest, name, c-name);
rest[c-name] = '\0';
! return(FALSE);
}
for (n = name ;; n = c+1) { /* loop to get rid if initial Mynames */
***************
*** 105,111
for (n = name ;; n = c+1) { /* loop to get rid if initial Mynames */
if ((c = strchr(n, '!')) == NULL) {
(void) strcpy(rest, n);
! return(0);
}
/* ignore escaped '!' */
--- 107,113 -----
for (n = name ;; n = c+1) { /* loop to get rid if initial Mynames */
if ((c = strchr(n, '!')) == NULL) {
(void) strcpy(rest, n);
! return(foundsys);
}
/* ignore escaped '!' */
***************
*** 113,119
*(c-1) = '\0';
(void) strcpy(rest, n);
(void) strcat(rest, c);
! return(0);
}
*c = '\0';
--- 115,121 -----
*(c-1) = '\0';
(void) strcpy(rest, n);
(void) strcat(rest, c);
! return(foundsys);
}
*c = '\0';
***************
*** 117,123
}
*c = '\0';
! if (EQUALS(n, Myname)) /* initial system is Myname */
continue;
(void) strcpy(sys, n);
--- 119,126 -----
}
*c = '\0';
! if (EQUALS(n, Myname) || (c == n)) { /* initial system is Myname */
! foundsys = TRUE;
continue;
}
***************
*** 119,124
*c = '\0';
if (EQUALS(n, Myname)) /* initial system is Myname */
continue;
(void) strcpy(sys, n);
(void) strcpy(rest, ++c);
--- 122,128 -----
if (EQUALS(n, Myname) || (c == n)) { /* initial system is Myname */
foundsys = TRUE;
continue;
+ }
(void) strcpy(sys, n);
(void) strcpy(rest, ++c);
--
-Mike Wescott
ncrcae!wescott
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads