/* uucp 2.7 5/24/79 19:40:13 */
static char SiD
[] = "@(#)uucp 2.7";
char Path
[100], Optns
[10], Ename
[8];
#define MAXCOUNT 20 /* maximun number of commands per C. file */
char *sysfile1
, *sysfile2
, *cp
;
char file1
[MAXFULLNAME
], file2
[MAXFULLNAME
];
Ename
[0] = Optns
[1] = '\0';
while(argc
>1 && argv
[1][0] == '-'){
sprintf(Ename
, "%.7s", &argv
[1][2]);
Grade
= argv
[1][2]; break;
Spool
= &argv
[1][2]; break;
Debug
= atoi(&argv
[1][2]);
printf("unknown flag %s\n", argv
[1]); break;
DEBUG(4, "\n\n** %s **\n", "START");
fprintf(stderr
, "can't get working directory; will try to continue\n");
strcpy(Wrkdir
, "/UNKNOWN");
ret
= guinfo(Uid
, User
, Path
);
ASSERT(ret
== 0, "CAN NOT FIND UID %d\n", Uid
);
DEBUG(4, "UID %d, ", Uid
);
DEBUG(4, "User %s,", User
);
DEBUG(4, "Ename (%s) ", Ename
);
DEBUG(4, "PATH %s\n", Path
);
fprintf(stderr
, "usage uucp from ... to\n");
/* set up "to" system and file names */
if ((cp
= index(argv
[argc
- 1], '!')) != NULL
) {
sysfile2
= argv
[argc
- 1];
sprintf(Rmtname
, "%.7s", sysfile2
);
if (versys(sysfile2
) != 0) {
fprintf(stderr
, "bad system name: %s\n", sysfile2
);
strcpy(file2
, argv
[argc
- 1]);
if (strlen(sysfile2
) > 7)
/* do each from argument */
if ((cp
= index(argv
[1], '!')) != NULL
) {
if (strlen(sysfile1
) > 7)
sprintf(Rmtname
, "%.7s", sysfile1
);
if (versys(sysfile1
) != 0) {
fprintf(stderr
, "bad system name: %s\n", sysfile1
);
DEBUG(4, "file1 - %s\n", file1
);
copy(sysfile1
, file1
, sysfile2
, file2
);
* copy(s1, f1, s2, f2) generate copy files
* char *s1, *f1, *s2, *f2;
struct stat stbuf
, stbuf1
;
char file1
[MAXFULLNAME
], file2
[MAXFULLNAME
];
if (strcmp(s1
, Myname
) != SAME
)
if (strcmp(s2
, Myname
) != SAME
)
if ((index(file1
, '*') != NULL
|| index(file1
, '?') != NULL
|| index(file1
, '[') != NULL
))
DEBUG(4, "all work here %d\n", type
);
if (stat(file1
, &stbuf
) != 0) {
fprintf(stderr
, "can't get file status %s \n copy failed\n",
statret
= stat(file2
, &stbuf1
);
&& stbuf
.st_ino
== stbuf1
.st_ino
&& stbuf
.st_dev
== stbuf1
.st_dev
) {
fprintf(stderr
, "%s %s - same file; can't copy\n", file1
, file2
);
if (chkpth(User
, "", file1
) != 0
|| chkpth(User
, "", file2
) != 0) {
fprintf(stderr
, "permission denied\n");
if ((stbuf
.st_mode
& ANYREAD
) == 0) {
fprintf(stderr
, "can't read file (%s) mode (%o)\n",
if (statret
== 0 && (stbuf1
.st_mode
& ANYWRITE
) == 0) {
fprintf(stderr
, "can't write file (%s) mode (%o)\n",
logent("WORK HERE", "DONE");
DEBUG(4, "receive file - %d\n", type
);
if (chkpth(User
, "", file2
) != 0) {
fprintf(stderr
, "permission denied\n");
/* execute uux - remote uucp */
xuux(Ename
, s1
, file1
, s2
, file2
);
fprintf(cfp
, "R %s %s %s %s\n", file1
, file2
, User
, Optns
);
DEBUG(4, "send file - %d\n", type
);
if (chkpth(User
, "", file1
) != 0) {
fprintf(stderr
, "permission denied %s\n", file1
);
if (stat(file1
, &stbuf
) != 0) {
fprintf(stderr
, "can't get status for file %s\n", file1
);
if ((stbuf
.st_mode
& S_IFMT
) == S_IFDIR
) {
fprintf(stderr
, "directory name illegal - %s\n",
if ((stbuf
.st_mode
& ANYREAD
) == 0) {
fprintf(stderr
, "can't read file (%s) mode (%o)\n",
/* execute uux - remote uucp */
xuux(Ename
, s1
, file1
, s2
, file2
);
gename(DATAPRE
, s2
, Grade
, dfile
);
if (xcp(file1
, dfile
) != 0) {
fprintf(stderr
, "can't copy %s\n", file1
);
/* make a dummy D. name */
/* cntrl.c knows names < 6 chars are dummy D. files */
fprintf(cfp
, "S %s %s %s %s %s %o\n", file1
, file2
,
User
, Optns
, dfile
, stbuf
.st_mode
& 0777);
/* send uucp command for execution on s1 */
DEBUG(4, "send uucp command - %d\n", type
);
if (strcmp(s2
, Myname
) == SAME
) {
if (chkpth(User
, "", file2
) != 0) {
fprintf(stderr
, "permission denied\n");
/* execute uux - remote uucp */
xuux(Ename
, s1
, file1
, s2
, file2
);
fprintf(cfp
, "X %s %s!%s\n", file1
, s2
, file2
);
* xuux(ename, s1, s2, f1, f2) execute uux for remote uucp
xuux(ename
, s1
, f1
, s2
, f2
)
char *ename
, *s1
, *s2
, *f1
, *f2
;
DEBUG(4, "Ropt(%s) ", Ropt
);
DEBUG(4, "ename(%s) ", ename
);
DEBUG(4, "f2(%s)\n", f2
);
sprintf(cmd
, "uux %s %s!uucp %s!%s \\(%s!%s\\)",
Ropt
, ename
, s1
, f1
, s2
, f2
);
DEBUG(4, "cmd (%s)\n", cmd
);
* gtcfile(sys) - get a Cfile descriptor
* return an open file descriptor
static char presys
[8] = "";
if (strcmp(presys
, sys
) != SAME
/* this is !SAME on first call */
|| ++cmdcount
> MAXCOUNT
) {
gename(CMDPRE
, sys
, Grade
, Cfile
);
ASSERT(Cfp
!= NULL
, "CAN'T OPEN %s", Cfile
);
* clscfile() - close cfile